mirror of https://github.com/gorilla/websocket.git
Fixes subprotocol selection (aling with rfc6455) (#823)
Fixes #822 **Summary of Changes** 1. Changed the order of subprotocol selection to prefer client one --------- Co-authored-by: Corey Daley <cdaley@redhat.com>
This commit is contained in:
parent
ac0789be11
commit
aa976062fe
|
@ -102,8 +102,8 @@ func checkSameOrigin(r *http.Request) bool {
|
||||||
func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string {
|
func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string {
|
||||||
if u.Subprotocols != nil {
|
if u.Subprotocols != nil {
|
||||||
clientProtocols := Subprotocols(r)
|
clientProtocols := Subprotocols(r)
|
||||||
for _, serverProtocol := range u.Subprotocols {
|
for _, clientProtocol := range clientProtocols {
|
||||||
for _, clientProtocol := range clientProtocols {
|
for _, serverProtocol := range u.Subprotocols {
|
||||||
if clientProtocol == serverProtocol {
|
if clientProtocol == serverProtocol {
|
||||||
return clientProtocol
|
return clientProtocol
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,36 @@ func TestIsWebSocketUpgrade(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSubProtocolSelection(t *testing.T) {
|
||||||
|
upgrader := Upgrader{
|
||||||
|
Subprotocols: []string{"foo", "bar", "baz"},
|
||||||
|
}
|
||||||
|
|
||||||
|
r := http.Request{Header: http.Header{"Sec-Websocket-Protocol": {"foo", "bar"}}}
|
||||||
|
s := upgrader.selectSubprotocol(&r, nil)
|
||||||
|
if s != "foo" {
|
||||||
|
t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "foo")
|
||||||
|
}
|
||||||
|
|
||||||
|
r = http.Request{Header: http.Header{"Sec-Websocket-Protocol": {"bar", "foo"}}}
|
||||||
|
s = upgrader.selectSubprotocol(&r, nil)
|
||||||
|
if s != "bar" {
|
||||||
|
t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "bar")
|
||||||
|
}
|
||||||
|
|
||||||
|
r = http.Request{Header: http.Header{"Sec-Websocket-Protocol": {"baz"}}}
|
||||||
|
s = upgrader.selectSubprotocol(&r, nil)
|
||||||
|
if s != "baz" {
|
||||||
|
t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "baz")
|
||||||
|
}
|
||||||
|
|
||||||
|
r = http.Request{Header: http.Header{"Sec-Websocket-Protocol": {"quux"}}}
|
||||||
|
s = upgrader.selectSubprotocol(&r, nil)
|
||||||
|
if s != "" {
|
||||||
|
t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "empty string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var checkSameOriginTests = []struct {
|
var checkSameOriginTests = []struct {
|
||||||
ok bool
|
ok bool
|
||||||
r *http.Request
|
r *http.Request
|
||||||
|
|
Loading…
Reference in New Issue