Add Subprotocols helper function.

This commit is contained in:
Gary Burd 2013-10-26 06:52:30 -07:00
parent 273ecadfca
commit 80c1e5a741
2 changed files with 48 additions and 0 deletions

View File

@ -9,6 +9,7 @@ import (
"errors"
"net"
"net/http"
"strings"
)
// HandshakeError describes an error with the handshake from the peer.
@ -104,3 +105,17 @@ func Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header,
return c, nil
}
// 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
}

33
server_test.go Normal file
View File

@ -0,0 +1,33 @@
// 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"
"reflect"
"testing"
)
var subprotocolTests = []struct {
h string
protocols []string
}{
{"", nil},
{"foo", []string{"foo"}},
{"foo,bar", []string{"foo", "bar"}},
{"foo, bar", []string{"foo", "bar"}},
{" foo, bar", []string{"foo", "bar"}},
{" foo, bar ", []string{"foo", "bar"}},
}
func TestSubprotocols(t *testing.T) {
for _, st := range subprotocolTests {
r := http.Request{Header: http.Header{"Sec-Websocket-Protocol": {st.h}}}
protocols := Subprotocols(&r)
if !reflect.DeepEqual(st.protocols, protocols) {
t.Errorf("SubProtocols(%q) returned %#v, want %#v", st.h, protocols, st.protocols)
}
}
}