diff --git a/http/upgrade/request/header_check.go b/http/upgrade/request/header_check.go index 93ef96c..3701885 100644 --- a/http/upgrade/request/header_check.go +++ b/http/upgrade/request/header_check.go @@ -68,18 +68,20 @@ func (r *T) extractOrigin(bb header.HeaderValue) error { } // checkOriginPolicy origin policy based on 'host' value -func (r T) checkOriginPolicy() error { +func (r *T) checkOriginPolicy() error { // TODO: Origin policy, for now BYPASS + r.validPolicy = true return nil } // checkConnection checks the 'Connection' header // it MUST contain 'Upgrade' -func (r T) checkConnection(bb header.HeaderValue) error { +func (r *T) checkConnection(bb header.HeaderValue) error { for _, b := range bb { if strings.ToLower( string(b) ) == "upgrade" { + r.hasConnection = true return nil } @@ -91,13 +93,14 @@ func (r T) checkConnection(bb header.HeaderValue) error { // checkUpgrade checks the 'Upgrade' header // it MUST be 'websocket' -func (r T) checkUpgrade(bb header.HeaderValue) error { +func (r *T) checkUpgrade(bb header.HeaderValue) error { if len(bb) != 1 { return fmt.Errorf("Upgrade header must have only 1 element") } if strings.ToLower( string(bb[0]) ) == "websocket" { + r.hasUpgrade = true return nil } @@ -107,12 +110,13 @@ func (r T) checkUpgrade(bb header.HeaderValue) error { // checkVersion checks the 'Sec-WebSocket-Version' header // it MUST be '13' -func (r T) checkVersion(bb header.HeaderValue) error { +func (r *T) checkVersion(bb header.HeaderValue) error { if len(bb) != 1 || string(bb[0]) != "13" { return fmt.Errorf("Sec-WebSocket-Version header must be '13'") } + r.hasVersion = true return nil } @@ -125,6 +129,18 @@ func (r *T) extractKey(bb header.HeaderValue) error { return fmt.Errorf("Sec-WebSocket-Key header must be a unique 24 bytes base64 value, got %d bytes", len(bb[0])) } + r.key = bb[0] + return nil +} + + +// extractProtocols extracts the 'Sec-WebSocket-Protocol' header +// it can contain multiple values +func (r *T) extractProtocols(bb header.HeaderValue) error { + + r.protocols = bb + + return nil } \ No newline at end of file diff --git a/http/upgrade/request/types.go b/http/upgrade/request/types.go index b43d6d1..370572e 100644 --- a/http/upgrade/request/types.go +++ b/http/upgrade/request/types.go @@ -13,9 +13,14 @@ type T struct { host string port uint16 // 0 if not set origin string + validPolicy bool // ws data key []byte - protocols []string - version byte + protocols [][]byte + + // required fields check + hasConnection bool + hasUpgrade bool + hasVersion bool }