| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Copyright 2013 Gary Burd. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- package websocket
- import (
- "net/http"
- "strings"
- )
- // HandshakeError describes an error with the handshake from the peer.
- type HandshakeError struct {
- message string
- }
- func (e HandshakeError) Error() string { return e.message }
- // This method is deprecated, use websocket.Upgrader instead.
- //
- // Upgrade upgrades the HTTP server connection to the WebSocket protocol.
- //
- // The application is responsible for checking the request origin before
- // calling Upgrade. An example implementation of the same origin policy is:
- //
- // if req.Header.Get("Origin") != "http://"+req.Host {
- // http.Error(w, "Origin not allowed", 403)
- // return
- // }
- //
- // If the endpoint supports subprotocols, then the application is responsible
- // for negotiating the protocol used on the connection. Use the Subprotocols()
- // function to get the subprotocols requested by the client. Use the
- // Sec-Websocket-Protocol response header to specify the subprotocol selected
- // by the application.
- //
- // The responseHeader is included in the response to the client's upgrade
- // request. Use the responseHeader to specify cookies (Set-Cookie) and the
- // negotiated subprotocol (Sec-Websocket-Protocol).
- //
- // The connection buffers IO to the underlying network connection. The
- // readBufSize and writeBufSize parameters specify the size of the buffers to
- // use. Messages can be larger than the buffers.
- //
- // If the request is not a valid WebSocket handshake, then Upgrade returns an
- // error of type HandshakeError. Applications should handle this error by
- // replying to the client with an HTTP error response.
- func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, readBufSize, writeBufSize int) (*Conn, error) {
- u := Upgrader{ReadBufferSize: readBufSize, WriteBufferSize: writeBufSize}
- u.Error = func(w http.ResponseWriter, r *http.Request, status int, reason error) {
- // don't return errors to maintain backwards compatibility
- }
- return u.Upgrade(w, r, responseHeader)
- }
- // Subprotocols returns the subprotocols requested by the client in the
- // Sec-Websocket-Protocol header.
- func Subprotocols(r *http.Request) []string {
- h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol"))
- if h == "" {
- return nil
- }
- protocols := strings.Split(h, ",")
- for i := range protocols {
- protocols[i] = strings.TrimSpace(protocols[i])
- }
- return protocols
- }
|