aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/websocket/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'libgo/go/websocket/client.go')
-rw-r--r--libgo/go/websocket/client.go44
1 files changed, 23 insertions, 21 deletions
diff --git a/libgo/go/websocket/client.go b/libgo/go/websocket/client.go
index 78c8b7f..74bede4 100644
--- a/libgo/go/websocket/client.go
+++ b/libgo/go/websocket/client.go
@@ -7,7 +7,6 @@ package websocket
import (
"bufio"
"bytes"
- "container/vector"
"crypto/tls"
"fmt"
"http"
@@ -16,20 +15,23 @@ import (
"os"
"rand"
"strings"
+ "url"
)
type ProtocolError struct {
- os.ErrorString
+ ErrorString string
}
+func (err *ProtocolError) String() string { return string(err.ErrorString) }
+
var (
- ErrBadScheme = os.ErrorString("bad scheme")
+ ErrBadScheme = &ProtocolError{"bad scheme"}
ErrBadStatus = &ProtocolError{"bad status"}
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"}
+ ErrChallengeResponse = &ProtocolError{"mismatch challenge/response"}
secKeyRandomChars [0x30 - 0x21 + 0x7F - 0x3A]byte
)
@@ -98,10 +100,10 @@ A trivial example client:
// use msg[0:n]
}
*/
-func Dial(url, protocol, origin string) (ws *Conn, err os.Error) {
+func Dial(url_, protocol, origin string) (ws *Conn, err os.Error) {
var client net.Conn
- parsedUrl, err := http.ParseURL(url)
+ parsedUrl, err := url.Parse(url_)
if err != nil {
goto Error
}
@@ -120,14 +122,14 @@ func Dial(url, protocol, origin string) (ws *Conn, err os.Error) {
goto Error
}
- ws, err = newClient(parsedUrl.RawPath, parsedUrl.Host, origin, url, protocol, client, handshake)
+ ws, err = newClient(parsedUrl.RawPath, parsedUrl.Host, origin, url_, protocol, client, handshake)
if err != nil {
goto Error
}
return
Error:
- return nil, &DialError{url, protocol, origin, err}
+ return nil, &DialError{url_, protocol, origin, err}
}
/*
@@ -199,21 +201,21 @@ func handshake(resourceName, host, origin, location, protocol string, br *bufio.
bw.WriteString("GET " + resourceName + " HTTP/1.1\r\n")
// Step 6-14. push request headers in fields.
- var fields vector.StringVector
- fields.Push("Upgrade: WebSocket\r\n")
- fields.Push("Connection: Upgrade\r\n")
- fields.Push("Host: " + host + "\r\n")
- fields.Push("Origin: " + origin + "\r\n")
+ var fields []string
+ fields = append(fields, "Upgrade: WebSocket\r\n")
+ fields = append(fields, "Connection: Upgrade\r\n")
+ fields = append(fields, "Host: "+host+"\r\n")
+ fields = append(fields, "Origin: "+origin+"\r\n")
if protocol != "" {
- fields.Push("Sec-WebSocket-Protocol: " + protocol + "\r\n")
+ fields = append(fields, "Sec-WebSocket-Protocol: "+protocol+"\r\n")
}
// TODO(ukai): Step 15. send cookie if any.
// Step 16-23. generate keys and push Sec-WebSocket-Key<n> in fields.
key1, number1 := generateKeyNumber()
key2, number2 := generateKeyNumber()
- fields.Push("Sec-WebSocket-Key1: " + key1 + "\r\n")
- fields.Push("Sec-WebSocket-Key2: " + key2 + "\r\n")
+ fields = append(fields, "Sec-WebSocket-Key1: "+key1+"\r\n")
+ fields = append(fields, "Sec-WebSocket-Key2: "+key2+"\r\n")
// Step 24. shuffle fields and send them out.
for i := 1; i < len(fields); i++ {
@@ -226,7 +228,7 @@ func handshake(resourceName, host, origin, location, protocol string, br *bufio.
// Step 25. send CRLF.
bw.WriteString("\r\n")
- // Step 26. genearte 8 bytes random key.
+ // Step 26. generate 8 bytes random key.
key3 := generateKey3()
// Step 27. send it out.
bw.Write(key3)
@@ -235,7 +237,7 @@ func handshake(resourceName, host, origin, location, protocol string, br *bufio.
}
// Step 28-29, 32-40. read response from server.
- resp, err := http.ReadResponse(br, "GET")
+ resp, err := http.ReadResponse(br, &http.Request{Method: "GET"})
if err != nil {
return err
}
@@ -262,7 +264,7 @@ func handshake(resourceName, host, origin, location, protocol string, br *bufio.
return ErrBadWebSocketProtocol
}
- // Step 42-43. get expected data from challange data.
+ // Step 42-43. get expected data from challenge data.
expected, err := getChallengeResponse(number1, number2, key3)
if err != nil {
return err
@@ -283,7 +285,7 @@ func handshake(resourceName, host, origin, location, protocol string, br *bufio.
}
/*
-Handhake described in (soon obsolete)
+Handshake described in (soon obsolete)
draft-hixie-thewebsocket-protocol-75.
*/
func draft75handshake(resourceName, host, origin, location, protocol string, br *bufio.Reader, bw *bufio.Writer) (err os.Error) {
@@ -297,7 +299,7 @@ func draft75handshake(resourceName, host, origin, location, protocol string, br
}
bw.WriteString("\r\n")
bw.Flush()
- resp, err := http.ReadResponse(br, "GET")
+ resp, err := http.ReadResponse(br, &http.Request{Method: "GET"})
if err != nil {
return
}