summaryrefslogtreecommitdiff
path: root/src/pkg/websocket
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-03-30 10:51:11 -0700
committerRuss Cox <rsc@golang.org>2010-03-30 10:51:11 -0700
commita4d61cffa679cee2c85de18f115d754727a127cd (patch)
tree8b338a7affb56cf4142d66f8a8cd691366fdf7d1 /src/pkg/websocket
parent68643f292414be8ca1b95a2f6e85e1fb64876cf3 (diff)
downloadgolang-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.go81
-rw-r--r--src/pkg/websocket/server.go13
-rw-r--r--src/pkg/websocket/websocket_test.go10
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()