diff --git a/src/pkg/websocket/client.go b/src/pkg/websocket/client.go index 78c8b7f..957fca9 100644 --- a/src/pkg/websocket/client.go +++ b/src/pkg/websocket/client.go @@ -67,7 +67,7 @@ func newClient(resourceName, host, origin, location, protocol string, rwc io.Rea return } buf := bufio.NewReadWriter(br, bw) - ws = newConn(origin, location, protocol, buf, rwc) + ws = newConn(origin, location, protocol, buf, rwc, &http.Request{}) return } diff --git a/src/pkg/websocket/server.go b/src/pkg/websocket/server.go index 1119b2d..d8d148f 100644 --- a/src/pkg/websocket/server.go +++ b/src/pkg/websocket/server.go @@ -149,7 +149,7 @@ func (f Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) { if err := buf.Flush(); err != nil { return } - ws := newConn(origin, location, protocol, buf, rwc) + ws := newConn(origin, location, protocol, buf, rwc, req) f(ws) } @@ -214,6 +214,6 @@ func (f Draft75Handler) ServeHTTP(w http.ResponseWriter, req *http.Request) { if err := buf.Flush(); err != nil { return } - ws := newConn(origin, location, protocol, buf, rwc) + ws := newConn(origin, location, protocol, buf, rwc, req) f(ws) } diff --git a/src/pkg/websocket/websocket.go b/src/pkg/websocket/websocket.go index eaad22e..67cba4e 100644 --- a/src/pkg/websocket/websocket.go +++ b/src/pkg/websocket/websocket.go @@ -13,6 +13,7 @@ import ( "bufio" "crypto/md5" "encoding/binary" + "http" "io" "net" "os" @@ -43,6 +44,8 @@ type Conn struct { Location string // The subprotocol for the Web Socket. Protocol string + // The original HTTP request. + Request *http.Request buf *bufio.ReadWriter rwc io.ReadWriteCloser @@ -53,13 +56,13 @@ type Conn struct { } // newConn creates a new Web Socket. -func newConn(origin, location, protocol string, buf *bufio.ReadWriter, rwc io.ReadWriteCloser) *Conn { +func newConn(origin, location, protocol string, buf *bufio.ReadWriter, rwc io.ReadWriteCloser, req *http.Request) *Conn { if buf == nil { br := bufio.NewReader(rwc) bw := bufio.NewWriter(rwc) buf = bufio.NewReadWriter(br, bw) } - ws := &Conn{Origin: origin, Location: location, Protocol: protocol, buf: buf, rwc: rwc} + ws := &Conn{Origin: origin, Location: location, Protocol: protocol, Request: req, buf: buf, rwc: rwc} return ws }