diff options
author | Russ Cox <rsc@golang.org> | 2010-03-30 10:51:11 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2010-03-30 10:51:11 -0700 |
commit | a4d61cffa679cee2c85de18f115d754727a127cd (patch) | |
tree | 8b338a7affb56cf4142d66f8a8cd691366fdf7d1 /src/pkg/websocket | |
parent | 68643f292414be8ca1b95a2f6e85e1fb64876cf3 (diff) | |
download | golang-a4d61cffa679cee2c85de18f115d754727a127cd.tar.gz |
simplify various code using new map index rule
R=r
CC=golang-dev
http://codereview.appspot.com/833044
Diffstat (limited to 'src/pkg/websocket')
-rw-r--r-- | src/pkg/websocket/client.go | 81 | ||||
-rw-r--r-- | src/pkg/websocket/server.go | 13 | ||||
-rw-r--r-- | src/pkg/websocket/websocket_test.go | 10 |
3 files changed, 28 insertions, 76 deletions
diff --git a/src/pkg/websocket/client.go b/src/pkg/websocket/client.go index 52870800c..90597a821 100644 --- a/src/pkg/websocket/client.go +++ b/src/pkg/websocket/client.go @@ -25,14 +25,10 @@ type ProtocolError struct { var ( ErrBadStatus = &ProtocolError{"bad status"} - ErrNoUpgrade = &ProtocolError{"no upgrade"} - ErrBadUpgrade = &ProtocolError{"bad upgrade"} - ErrNoWebSocketOrigin = &ProtocolError{"no WebSocket-Origin"} - ErrBadWebSocketOrigin = &ProtocolError{"bad WebSocket-Origin"} - ErrNoWebSocketLocation = &ProtocolError{"no WebSocket-Location"} - ErrBadWebSocketLocation = &ProtocolError{"bad WebSocket-Location"} - ErrNoWebSocketProtocol = &ProtocolError{"no WebSocket-Protocol"} - ErrBadWebSocketProtocol = &ProtocolError{"bad WebSocket-Protocol"} + ErrBadUpgrade = &ProtocolError{"missing or bad upgrade"} + ErrBadWebSocketOrigin = &ProtocolError{"missing or bad WebSocket-Origin"} + ErrBadWebSocketLocation = &ProtocolError{"missing or bad WebSocket-Location"} + ErrBadWebSocketProtocol = &ProtocolError{"missing or bad WebSocket-Protocol"} ErrChallengeResponse = &ProtocolError{"mismatch challange/response"} secKeyRandomChars [0x30 - 0x21 + 0x7F - 0x3A]byte ) @@ -244,40 +240,21 @@ func handshake(resourceName, host, origin, location, protocol string, br *bufio. } // Step 41. check websocket headers. - upgrade, found := resp.Header["Upgrade"] - if !found { - return ErrNoUpgrade - } - if upgrade != "WebSocket" { - return ErrBadUpgrade - } - connection, found := resp.Header["Connection"] - if !found || strings.ToLower(connection) != "upgrade" { + if resp.Header["Upgrade"] != "WebSocket" || + strings.ToLower(resp.Header["Connection"]) != "upgrade" { return ErrBadUpgrade } - s, found := resp.Header["Sec-Websocket-Origin"] - if !found { - return ErrNoWebSocketOrigin - } - if s != origin { + if resp.Header["Sec-Websocket-Origin"] != origin { return ErrBadWebSocketOrigin } - s, found = resp.Header["Sec-Websocket-Location"] - if !found { - return ErrNoWebSocketLocation - } - if s != location { + + if resp.Header["Sec-Websocket-Location"] != location { return ErrBadWebSocketLocation } - if protocol != "" { - s, found = resp.Header["Sec-Websocket-Protocol"] - if !found { - return ErrNoWebSocketProtocol - } - if s != protocol { - return ErrBadWebSocketProtocol - } + + if protocol != "" && resp.Header["Sec-Websocket-Protocol"] != protocol { + return ErrBadWebSocketProtocol } // Step 42-43. get expected data from challange data. @@ -322,40 +299,18 @@ func draft75handshake(resourceName, host, origin, location, protocol string, br if resp.Status != "101 Web Socket Protocol Handshake" { return ErrBadStatus } - upgrade, found := resp.Header["Upgrade"] - if !found { - return ErrNoUpgrade - } - if upgrade != "WebSocket" { - return ErrBadUpgrade - } - connection, found := resp.Header["Connection"] - if !found || connection != "Upgrade" { + if resp.Header["Upgrade"] != "WebSocket" || + resp.Header["Connection"] != "Upgrade" { return ErrBadUpgrade } - - ws_origin, found := resp.Header["Websocket-Origin"] - if !found { - return ErrNoWebSocketOrigin - } - if ws_origin != origin { + if resp.Header["Websocket-Origin"] != origin { return ErrBadWebSocketOrigin } - ws_location, found := resp.Header["Websocket-Location"] - if !found { - return ErrNoWebSocketLocation - } - if ws_location != location { + if resp.Header["Websocket-Location"] != location { return ErrBadWebSocketLocation } - if protocol != "" { - ws_protocol, found := resp.Header["Websocket-Protocol"] - if !found { - return ErrNoWebSocketProtocol - } - if ws_protocol != protocol { - return ErrBadWebSocketProtocol - } + if protocol != "" && resp.Header["Websocket-Protocol"] != protocol { + return ErrBadWebSocketProtocol } return } diff --git a/src/pkg/websocket/server.go b/src/pkg/websocket/server.go index cc1ff9385..7faf6ba49 100644 --- a/src/pkg/websocket/server.go +++ b/src/pkg/websocket/server.go @@ -75,14 +75,11 @@ func (f Handler) ServeHTTP(c *http.Conn, req *http.Request) { } // HTTP version can be safely ignored. - if v, found := req.Header["Upgrade"]; !found || - strings.ToLower(v) != "websocket" { - return - } - if v, found := req.Header["Connection"]; !found || - strings.ToLower(v) != "upgrade" { + if strings.ToLower(req.Header["Upgrade"]) != "websocket" || + strings.ToLower(req.Header["Connection"]) != "upgrade" { return } + // TODO(ukai): check Host origin, found := req.Header["Origin"] if !found { @@ -181,12 +178,12 @@ func (f Draft75Handler) ServeHTTP(c *http.Conn, req *http.Request) { io.WriteString(c, "Unexpected request") return } - if v, found := req.Header["Upgrade"]; !found || v != "WebSocket" { + if req.Header["Upgrade"] != "WebSocket" { c.WriteHeader(http.StatusBadRequest) io.WriteString(c, "missing Upgrade: WebSocket header") return } - if v, found := req.Header["Connection"]; !found || v != "Upgrade" { + if req.Header["Connection"] != "Upgrade" { c.WriteHeader(http.StatusBadRequest) io.WriteString(c, "missing Connection: Upgrade header") return diff --git a/src/pkg/websocket/websocket_test.go b/src/pkg/websocket/websocket_test.go index 58065580e..0762fca69 100644 --- a/src/pkg/websocket/websocket_test.go +++ b/src/pkg/websocket/websocket_test.go @@ -42,18 +42,18 @@ func TestEcho(t *testing.T) { ws, err := newClient("/echo", "localhost", "http://localhost", "ws://localhost/echo", "", client, handshake) if err != nil { - t.Errorf("WebSocket handshake error", err) + t.Errorf("WebSocket handshake error: %v", err) return } msg := []byte("hello, world\n") if _, err := ws.Write(msg); err != nil { - t.Errorf("Write: error %v", err) + t.Errorf("Write: %v", err) } var actual_msg = make([]byte, 512) n, err := ws.Read(actual_msg) if err != nil { - t.Errorf("Read: error %v", err) + t.Errorf("Read: %v", err) } actual_msg = actual_msg[0:n] if !bytes.Equal(msg, actual_msg) { @@ -73,7 +73,7 @@ func TestEchoDraft75(t *testing.T) { ws, err := newClient("/echoDraft75", "localhost", "http://localhost", "ws://localhost/echoDraft75", "", client, draft75handshake) if err != nil { - t.Errorf("WebSocket handshake error", err) + t.Errorf("WebSocket handshake: %v", err) return } @@ -104,7 +104,7 @@ func TestWithQuery(t *testing.T) { ws, err := newClient("/echo?q=v", "localhost", "http://localhost", "ws://localhost/echo?q=v", "", client, handshake) if err != nil { - t.Errorf("WebSocket handshake error", err) + t.Errorf("WebSocket handshake: %v", err) return } ws.Close() |