added completion variables to track with asynchronous reading (chunk reader)

This commit is contained in:
xdrm-brackets 2018-04-25 17:21:56 +02:00
parent 4994d34bc7
commit 4df664a138
2 changed files with 27 additions and 6 deletions

View File

@ -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
}

View File

@ -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
}