client.go35
1:1file-length-limit
client.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style1:1format
client.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt client.go`
5:9package-comments
client.go:5:9
package websocket24:5exported-declaration-comment
client.go:24:5
// invalid.var ErrBadHandshake = errors.New("websocket: bad handshake")24:5no-package-var
client.go:24:5
// invalid.var ErrBadHandshake = errors.New("websocket: bad handshake")26:5no-package-var
client.go:26:5
var errInvalidCompression = errors.New("websocket: invalid compression negotiation")39:6exported-declaration-comment
client.go:39:6
// Deprecated: Use Dialer instead.func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufSize, writeBufSize int) (c *Conn, response *http.Response, err error) { d := Dialer{43:17import-shadowing
client.go:43:17
WriteBufferSize: writeBufSize, NetDial: func(net, addr string) (net.Conn, error) { return netConn, nil53:1top-level-declaration-order
client.go:53:1
// It is safe to call Dialer's methods concurrently.type Dialer struct { // The following custom dial functions can be set to establish53:6exported-declaration-comment
client.go:53:6
// It is safe to call Dialer's methods concurrently.type Dialer struct { // The following custom dial functions can be set to establish135:5no-package-var
client.go:135:5
var errMalformedURL = errors.New("malformed ws or wss URL")143:3single-case-switch
client.go:143:3
} else { switch u.Scheme { case "wss":156:5no-package-var
client.go:156:5
// DefaultDialer is a dialer with all fields set to the default values.var DefaultDialer = &Dialer{ Proxy: http.ProxyFromEnvironment,162:5no-package-var
client.go:162:5
// nilDialer is dialer to use when receiver is nil.var nilDialer = *DefaultDialer175:18cognitive-complexity
client.go:175:18
// need to be closed by the application.func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { if d == nil {175:18cyclomatic-complexity
client.go:175:18
// need to be closed by the application.func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { if d == nil {175:18exported-declaration-comment
client.go:175:18
// need to be closed by the application.func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { if d == nil {175:18function-length
client.go:175:18
// need to be closed by the application.func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header) (*Conn, *http.Response, error) { if d == nil {190:2single-case-switch
client.go:190:2
switch u.Scheme { case "ws":234:3single-case-switch
client.go:234:3
for k, vs := range requestHeader { switch { case k == "Host":239:8optimize-operands-order
client.go:239:8
} case k == "Upgrade" || k == "Connection" ||239:8optimize-operands-order
client.go:239:8
} case k == "Upgrade" || k == "Connection" ||239:8optimize-operands-order
client.go:239:8
} case k == "Upgrade" || k == "Connection" ||239:13add-constant
client.go:239:13
} case k == "Upgrade" || k == "Connection" ||259:3modifies-parameter
client.go:259:3
var cancel func() ctx, cancel = context.WithTimeout(ctx, d.HandshakeTimeout) defer cancel()299:8discarded-error-result
client.go:299:8
// application. _ = netConn.Close() }304:36add-constant
client.go:304:36
// Do TLS handshake over established connection if a proxy exists. if proxyURL != nil && u.Scheme == "https" {360:5optimize-operands-order
client.go:360:5
if resp.StatusCode != 101 || !tokenListContainsValue(resp.Header, "Upgrade", "websocket") ||362:40add-constant
client.go:362:40
!tokenListContainsValue(resp.Header, "Upgrade", "websocket") || !tokenListContainsValue(resp.Header, "Connection", "upgrade") || resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) {368:11discarded-error-result
client.go:368:11
buf := make([]byte, 1024) n, _ := io.ReadFull(resp.Body, buf) resp.Body = io.NopCloser(bytes.NewReader(buf[:n]))388:37add-constant
client.go:388:37
resp.Body = io.NopCloser(bytes.NewReader([]byte{})) conn.subprotocol = resp.Header.Get("Sec-Websocket-Protocol")428:2single-case-switch
client.go:428:2
var netDial netDialerFunc switch { case d.NetDialContext != nil:432:39import-shadowing
client.go:432:39
case d.NetDial != nil: netDial = func(ctx context.Context, net, addr string) (net.Conn, error) { return d.NetDial(net, addr)477:4discarded-error-result
client.go:477:4
if err != nil { tlsConn.Close() return nil, err493:4discarded-error-result
client.go:493:4
if err != nil { c.Close() return nil, errclient_proxy_server_test.go96
1:1file-length-limit
client_proxy_server_test.go:1:1
// Copyright 2025 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style1:1format
client_proxy_server_test.go:1:1
// Copyright 2025 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt client_proxy_server_test.go`
38:1doc-comment-period
client_proxy_server_test.go:38:1
// Permutation 1//42:6test-parallelism
client_proxy_server_test.go:42:6
// Proxy: HTTPfunc TestHTTPProxyAndBackend(t *testing.T) { websocketTLS := false47:2defer-close-before-error-check
client_proxy_server_test.go:47:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {53:2defer-close-before-error-check
client_proxy_server_test.go:53:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {69:13redundant-conversion
client_proxy_server_test.go:69:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")74:1doc-comment-period
client_proxy_server_test.go:74:1
// Permutation 2//79:6test-parallelism
client_proxy_server_test.go:79:6
// DialFn: NetDial (dials proxy)func TestHTTPProxyWithNetDial(t *testing.T) { websocketTLS := false84:2defer-close-before-error-check
client_proxy_server_test.go:84:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {90:2defer-close-before-error-check
client_proxy_server_test.go:90:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {110:13redundant-conversion
client_proxy_server_test.go:110:13
sendReceiveData(t, wsClient) if e, a := int64(1), netDialCalled.Load(); e != a { t.Errorf("netDial not called")114:13redundant-conversion
client_proxy_server_test.go:114:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")119:1doc-comment-period
client_proxy_server_test.go:119:1
// Permutation 3//124:6test-parallelism
client_proxy_server_test.go:124:6
// DialFn: NetDialContext (dials proxy)func TestHTTPProxyWithNetDialContext(t *testing.T) { websocketTLS := false129:2defer-close-before-error-check
client_proxy_server_test.go:129:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {131:12add-constant
client_proxy_server_test.go:131:12
if err != nil { t.Fatalf("error starting websocket server: %v", err) }135:2defer-close-before-error-check
client_proxy_server_test.go:135:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {137:12add-constant
client_proxy_server_test.go:137:12
if err != nil { t.Fatalf("error starting proxy server: %v", err) }151:12add-constant
client_proxy_server_test.go:151:12
if err != nil { t.Fatalf("websocket dial error: %v", err) }155:13redundant-conversion
client_proxy_server_test.go:155:13
sendReceiveData(t, wsClient) if e, a := int64(1), netDialCalled.Load(); e != a { t.Errorf("netDial not called")159:13redundant-conversion
client_proxy_server_test.go:159:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")160:12add-constant
client_proxy_server_test.go:160:12
if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called") }164:1doc-comment-period
client_proxy_server_test.go:164:1
// Permutation 4//170:6test-parallelism
client_proxy_server_test.go:170:6
// TLS Config: set (used for backend TLS)func TestHTTPProxyWithHTTPSBackend(t *testing.T) { websocketTLS := true175:2defer-close-before-error-check
client_proxy_server_test.go:175:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {181:2defer-close-before-error-check
client_proxy_server_test.go:181:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {205:12error-strings
client_proxy_server_test.go:205:12
if numTLSDials := netDialTLSCalled.Load(); numTLSDials > 0 { t.Errorf("NetDialTLS should have been ignored") }208:13redundant-conversion
client_proxy_server_test.go:208:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")213:1doc-comment-period
client_proxy_server_test.go:213:1
// Permutation 5//218:6test-parallelism
client_proxy_server_test.go:218:6
// TLS Config: set (used for both proxy and backend TLS)func TestHTTPSProxyAndBackend(t *testing.T) { websocketTLS := true223:2defer-close-before-error-check
client_proxy_server_test.go:223:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {229:2defer-close-before-error-check
client_proxy_server_test.go:229:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {245:13redundant-conversion
client_proxy_server_test.go:245:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")250:1doc-comment-period
client_proxy_server_test.go:250:1
// Permutation 6//256:6test-parallelism
client_proxy_server_test.go:256:6
// TLS Config: set (used for both proxy and backend TLS)func TestHTTPSProxyUsingNetDial(t *testing.T) { websocketTLS := true261:2defer-close-before-error-check
client_proxy_server_test.go:261:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {267:2defer-close-before-error-check
client_proxy_server_test.go:267:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {287:13redundant-conversion
client_proxy_server_test.go:287:13
sendReceiveData(t, wsClient) if e, a := int64(1), netDialCalled.Load(); e != a { t.Errorf("netDial not called")288:12add-constant
client_proxy_server_test.go:288:12
if e, a := int64(1), netDialCalled.Load(); e != a { t.Errorf("netDial not called") }291:13redundant-conversion
client_proxy_server_test.go:291:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")296:1doc-comment-period
client_proxy_server_test.go:296:1
// Permutation 7//302:6test-parallelism
client_proxy_server_test.go:302:6
// TLS Config: set (used for both proxy and backend TLS)func TestHTTPSProxyUsingNetDialContext(t *testing.T) { websocketTLS := true307:2defer-close-before-error-check
client_proxy_server_test.go:307:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {313:2defer-close-before-error-check
client_proxy_server_test.go:313:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {333:13redundant-conversion
client_proxy_server_test.go:333:13
sendReceiveData(t, wsClient) if e, a := int64(1), netDialCalled.Load(); e != a { t.Errorf("netDial not called")337:13redundant-conversion
client_proxy_server_test.go:337:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")342:1doc-comment-period
client_proxy_server_test.go:342:1
// Permutation 8//348:6test-parallelism
client_proxy_server_test.go:348:6
// TLS Config: set (used for backend TLS)func TestHTTPSProxyUsingNetDialTLSContext(t *testing.T) { websocketTLS := true353:2defer-close-before-error-check
client_proxy_server_test.go:353:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {359:2defer-close-before-error-check
client_proxy_server_test.go:359:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {393:13redundant-conversion
client_proxy_server_test.go:393:13
sendReceiveData(t, wsClient) if e, a := int64(1), proxyDialCalled.Load(); e != a { t.Errorf("netDial not called")397:13redundant-conversion
client_proxy_server_test.go:397:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")402:1doc-comment-period
client_proxy_server_test.go:402:1
// Permutation 9//407:6test-parallelism
client_proxy_server_test.go:407:6
// TLS Config: set (used for proxy TLS)func TestHTTPSProxyHTTPBackend(t *testing.T) { websocketTLS := false412:2defer-close-before-error-check
client_proxy_server_test.go:412:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {418:2defer-close-before-error-check
client_proxy_server_test.go:418:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {434:13redundant-conversion
client_proxy_server_test.go:434:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")439:1doc-comment-period
client_proxy_server_test.go:439:1
// Permutation 10//445:6test-parallelism
client_proxy_server_test.go:445:6
// TLS Config: set (ignored)func TestHTTPSProxyUsingNetDialTLSContextWithHTTPBackend(t *testing.T) { websocketTLS := false450:2defer-close-before-error-check
client_proxy_server_test.go:450:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {456:2defer-close-before-error-check
client_proxy_server_test.go:456:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {476:13redundant-conversion
client_proxy_server_test.go:476:13
sendReceiveData(t, wsClient) if e, a := int64(1), proxyDialCalled.Load(); e != a { t.Errorf("netDial not called")480:13redundant-conversion
client_proxy_server_test.go:480:13
// Validate the proxy server was called. if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy not called")485:6cognitive-complexity
client_proxy_server_test.go:485:6
func TestTLSValidationErrors(t *testing.T) { // Both websocket and proxy servers are started with TLS.485:6test-parallelism
client_proxy_server_test.go:485:6
func TestTLSValidationErrors(t *testing.T) { // Both websocket and proxy servers are started with TLS.490:2defer-close-before-error-check
client_proxy_server_test.go:490:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {495:2defer-close-before-error-check
client_proxy_server_test.go:495:2
proxyServer, proxyServerURL, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {514:13redundant-conversion
client_proxy_server_test.go:514:13
// server TLS validation failed). if e, a := int64(0), proxyServer.numCalls(); e != a { t.Errorf("proxy should not have been called")531:13redundant-conversion
client_proxy_server_test.go:531:13
// websocket server failed TLS validation). if e, a := int64(1), proxyServer.numCalls(); e != a { t.Errorf("proxy have been called")536:6test-parallelism
client_proxy_server_test.go:536:6
func TestProxyFnErrorIsPropagated(t *testing.T) { websocketServer, websocketURL, err := newWebsocketServer(false)538:2defer-close-before-error-check
client_proxy_server_test.go:538:2
websocketServer, websocketURL, err := newWebsocketServer(false) defer websocketServer.Close() if err != nil {559:6test-parallelism
client_proxy_server_test.go:559:6
func TestProxyFnNilMeansNoProxy(t *testing.T) { // Both websocket and proxy servers are started.564:2defer-close-before-error-check
client_proxy_server_test.go:564:2
websocketServer, websocketURL, err := newWebsocketServer(websocketTLS) defer websocketServer.Close() if err != nil {569:2defer-close-before-error-check
client_proxy_server_test.go:569:2
proxyServer, _, err := newProxyServer(proxyTLS) defer proxyServer.Close() if err != nil {578:4nil-value-with-nil-error
client_proxy_server_test.go:578:4
Proxy: func(r *http.Request) (*url.URL, error) { return nil, nil },589:13redundant-conversion
client_proxy_server_test.go:589:13
// URL generation returned nil). if e, a := int64(0), proxyServer.numCalls(); e != a { t.Errorf("proxy should not have been called")596:1top-level-declaration-order
client_proxy_server_test.go:596:1
// of the number of times a handler was called, as well as "Close".type counter interface { increment()620:23exported-declaration-comment
client_proxy_server_test.go:620:23
func (ts *testServer) Close() { if ts.server != nil {628:5no-package-var
client_proxy_server_test.go:628:5
// echoes binary messages read off the websocket connection back to the client.var websocketEchoHandler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { upgrader := Upgrader{668:25flag-parameter
client_proxy_server_test.go:668:25
// func newWebsocketServer(tlsServer bool) (*httptest.Server, *url.URL, error) {func newWebsocketServer(tlsServer bool) (closer, *url.URL, error) { // Start the websocket server, which echoes data back to sender.698:5no-package-var
client_proxy_server_test.go:698:5
// to the "Host". Creates two goroutines to copy between connections in each direction.var proxyHandler = http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { // Validate the CONNECT method.714:21unchecked-type-assertion
client_proxy_server_test.go:714:21
// Hijack client connection. client, _, err := w.(http.Hijacker).Hijack() if err != nil {721:20nested-structs
client_proxy_server_test.go:721:20
// Create duplex streaming between client and upstream connections. done := make(chan struct{}, 2) go func() {723:10discarded-error-result
client_proxy_server_test.go:723:10
go func() { _, _ = io.Copy(upstream, client) done <- struct{}{}724:11nested-structs
client_proxy_server_test.go:724:11
_, _ = io.Copy(upstream, client) done <- struct{}{} }()727:10discarded-error-result
client_proxy_server_test.go:727:10
go func() { _, _ = io.Copy(client, upstream) done <- struct{}{}728:11nested-structs
client_proxy_server_test.go:728:11
_, _ = io.Copy(client, upstream) done <- struct{}{} }()736:21flag-parameter
client_proxy_server_test.go:736:21
// times the proxy handler was called with this server.func newProxyServer(tlsServer bool) (counter, *url.URL, error) { // Start the proxy server, keeping track of how many times the handler is called.764:16flag-parameter
client_proxy_server_test.go:764:16
// neither websocket nor proxy server uses TLS, returns nil.func tlsConfig(websocketTLS bool, proxyTLS bool) *tls.Config { if !websocketTLS && !proxyTLS {764:35flag-parameter
client_proxy_server_test.go:764:35
// neither websocket nor proxy server uses TLS, returns nil.func tlsConfig(websocketTLS bool, proxyTLS bool) *tls.Config { if !websocketTLS && !proxyTLS {798:2overwritten-before-use
client_proxy_server_test.go:798:2
// read data is the same as the previously sent data. _, received, err := wsConn.ReadMessage() if !bytes.Equal(randomData, received) {810:5no-package-var
client_proxy_server_test.go:810:5
// proxyServerCert is a self-signed.var proxyServerCert = []byte(`-----BEGIN CERTIFICATE-----MIIDGTCCAgGgAwIBAgIRALL5AZcefF4kkYV1SEG6YrMwDQYJKoZIhvcNAQELBQAw831:5no-package-var
client_proxy_server_test.go:831:5
// proxyServerKey is the private key for proxyServerCert.var proxyServerKey = []byte(`-----BEGIN RSA PRIVATE KEY-----MIIEogIBAAKCAQEAtD8UdzJXB0UfEBFtsPYoG0NRPsSeL7yKg12O0Zya1eoG/jkQ861:5no-package-var
client_proxy_server_test.go:861:5
// websocketServerCert is self-signed.var websocketServerCert = []byte(`-----BEGIN CERTIFICATE-----MIIDOTCCAiGgAwIBAgIQYSN1VY/favsLUo+B7gJ5tTANBgkqhkiG9w0BAQsFADAS883:5no-package-var
client_proxy_server_test.go:883:5
// websocketServerKey is the private key for websocketServerCert.var websocketServerKey = []byte(`-----BEGIN PRIVATE KEY-----MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCkGWKe2OQvV87Vclient_server_test.go128
1:1file-length-limit
client_server_test.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style1:1format
client_server_test.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt client_server_test.go`
32:5no-package-var
client_server_test.go:32:5
var cstUpgrader = Upgrader{ Subprotocols: []string{"p0", "p1"},42:5no-package-var
client_server_test.go:42:5
var cstDialer = Dialer{ Subprotocols: []string{"p1", "p2"},60:1top-level-declaration-order
client_server_test.go:60:1
const ( cstPath = "/a/b"66:21exported-declaration-comment
client_server_test.go:66:21
func (s *cstServer) Close() { s.Server.Close()88:21cognitive-complexity
client_server_test.go:88:21
func (t cstHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Because tests wait for a response from a server, we are guaranteed that120:3discarded-error-result
client_server_test.go:120:3
t.Logf("Subprotocol() = %s, want p1", ws.Subprotocol()) ws.Close() return167:6test-parallelism
client_server_test.go:167:6
func TestProxyDial(t *testing.T) {172:13discarded-error-result
client_server_test.go:172:13
surl, _ := url.Parse(s.Server.URL)205:6test-parallelism
client_server_test.go:205:6
func TestProxyAuthorizationDial(t *testing.T) { s := newServer(t)209:13discarded-error-result
client_server_test.go:209:13
surl, _ := url.Parse(s.Server.URL) surl.User = url.UserPassword("username", "password")245:6test-parallelism
client_server_test.go:245:6
func TestDial(t *testing.T) { s := newServer(t)251:12add-constant
client_server_test.go:251:12
if err != nil { t.Fatalf("Dial: %v", err) }257:6cognitive-complexity
client_server_test.go:257:6
func TestDialCookieJar(t *testing.T) { s := newServer(t)257:6test-parallelism
client_server_test.go:257:6
func TestDialCookieJar(t *testing.T) { s := newServer(t)261:12discarded-error-result
client_server_test.go:261:12
jar, _ := cookiejar.New(nil) d := cstDialer265:10discarded-error-result
client_server_test.go:265:10
u, _ := url.Parse(s.URL)267:2single-case-switch
client_server_test.go:267:2
switch u.Scheme { case "ws":274:53add-constant
client_server_test.go:274:53
cookies := []*http.Cookie{{Name: "gorilla", Value: "ws", Path: "/"}} d.Jar.SetCookies(u, cookies)319:6test-parallelism
client_server_test.go:319:6
func TestDialTLS(t *testing.T) { s := newTLSServer(t)333:6test-parallelism
client_server_test.go:333:6
func TestDialTimeout(t *testing.T) { s := newServer(t)341:3discarded-error-result
client_server_test.go:341:3
if err == nil { ws.Close() t.Fatalf("Dial: nil")355:34exported-declaration-comment
client_server_test.go:355:34
func (c *requireDeadlineNetConn) SetDeadline(t time.Time) error { c.writeDeadlineIsSet = !t.Equal(time.Time{})361:34exported-declaration-comment
client_server_test.go:361:34
func (c *requireDeadlineNetConn) SetReadDeadline(t time.Time) error { c.readDeadlineIsSet = !t.Equal(time.Time{})366:34exported-declaration-comment
client_server_test.go:366:34
func (c *requireDeadlineNetConn) SetWriteDeadline(t time.Time) error { c.writeDeadlineIsSet = !t.Equal(time.Time{})385:34exported-declaration-comment
client_server_test.go:385:34
func (c *requireDeadlineNetConn) Close() error { return c.c.Close() }func (c *requireDeadlineNetConn) LocalAddr() net.Addr { return c.c.LocalAddr() }386:34exported-declaration-comment
client_server_test.go:386:34
func (c *requireDeadlineNetConn) Close() error { return c.c.Close() }func (c *requireDeadlineNetConn) LocalAddr() net.Addr { return c.c.LocalAddr() }func (c *requireDeadlineNetConn) RemoteAddr() net.Addr { return c.c.RemoteAddr() }387:34exported-declaration-comment
client_server_test.go:387:34
func (c *requireDeadlineNetConn) LocalAddr() net.Addr { return c.c.LocalAddr() }func (c *requireDeadlineNetConn) RemoteAddr() net.Addr { return c.c.RemoteAddr() }389:6test-parallelism
client_server_test.go:389:6
func TestHandshakeTimeout(t *testing.T) { s := newServer(t)402:2discarded-error-result
client_server_test.go:402:2
} ws.Close()}405:6test-parallelism
client_server_test.go:405:6
func TestHandshakeTimeoutInContext(t *testing.T) { s := newServer(t)423:2discarded-error-result
client_server_test.go:423:2
} ws.Close()}426:6test-parallelism
client_server_test.go:426:6
func TestDialBadScheme(t *testing.T) { s := newServer(t)432:3discarded-error-result
client_server_test.go:432:3
if err == nil { ws.Close() t.Fatalf("Dial: nil")437:6test-parallelism
client_server_test.go:437:6
func TestDialBadOrigin(t *testing.T) { s := newServer(t)443:3discarded-error-result
client_server_test.go:443:3
if err == nil { ws.Close() t.Fatalf("Dial: nil")444:12add-constant
client_server_test.go:444:12
ws.Close() t.Fatalf("Dial: nil") }449:10possible-nil-dereference
client_server_test.go:449:10
} if resp.StatusCode != http.StatusForbidden { t.Fatalf("status=%d, want %d", resp.StatusCode, http.StatusForbidden)450:39possible-nil-dereference
client_server_test.go:450:39
if resp.StatusCode != http.StatusForbidden { t.Fatalf("status=%d, want %d", resp.StatusCode, http.StatusForbidden) }454:6test-parallelism
client_server_test.go:454:6
func TestDialBadHeader(t *testing.T) { s := newServer(t)465:62add-constant
client_server_test.go:465:62
h.Set(k, "bad") ws, _, err := cstDialer.Dial(s.URL, http.Header{"Origin": {"bad"}}) if err == nil {467:4discarded-error-result
client_server_test.go:467:4
if err == nil { ws.Close() t.Errorf("Dial with header %s returned nil", k)468:13error-strings
client_server_test.go:468:13
ws.Close() t.Errorf("Dial with header %s returned nil", k) }473:6test-parallelism
client_server_test.go:473:6
func TestBadMethod(t *testing.T) { s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {478:4discarded-error-result
client_server_test.go:478:4
t.Errorf("handshake succeeded, expect fail") ws.Close() }495:2discarded-error-result
client_server_test.go:495:2
} resp.Body.Close() if resp.StatusCode != http.StatusMethodNotAllowed {497:12error-strings
client_server_test.go:497:12
if resp.StatusCode != http.StatusMethodNotAllowed { t.Errorf("Status = %d, want %d", resp.StatusCode, http.StatusMethodNotAllowed) }507:4discarded-error-result
client_server_test.go:507:4
t.Errorf("handshake succeeded, expect fail") ws.Close() }516:17add-constant
client_server_test.go:516:17
} req.Header.Set("Connection", "upgrade") req.Header.Set("Sec-Websocket-Version", "13")517:17add-constant
client_server_test.go:517:17
req.Header.Set("Connection", "upgrade") req.Header.Set("Sec-Websocket-Version", "13")523:2discarded-error-result
client_server_test.go:523:2
} resp.Body.Close() if u := resp.Header.Get("Upgrade"); u != "websocket" {524:26add-constant
client_server_test.go:524:26
resp.Body.Close() if u := resp.Header.Get("Upgrade"); u != "websocket" { t.Errorf("Upgrade response header is %q, want %q", u, "websocket")525:12error-strings
client_server_test.go:525:12
if u := resp.Header.Get("Upgrade"); u != "websocket" { t.Errorf("Upgrade response header is %q, want %q", u, "websocket") }525:57add-constant
client_server_test.go:525:57
if u := resp.Header.Get("Upgrade"); u != "websocket" { t.Errorf("Upgrade response header is %q, want %q", u, "websocket") }528:12error-strings
client_server_test.go:528:12
if resp.StatusCode != http.StatusUpgradeRequired { t.Errorf("Status = %d, want %d", resp.StatusCode, http.StatusUpgradeRequired) }532:6test-parallelism
client_server_test.go:532:6
func TestDialExtraTokensInRespHeaders(t *testing.T) { s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {549:6test-parallelism
client_server_test.go:549:6
func TestHandshake(t *testing.T) { s := newServer(t)553:53add-constant
client_server_test.go:553:53
ws, resp, err := cstDialer.Dial(s.URL, http.Header{"Origin": {s.URL}}) if err != nil {575:6test-parallelism
client_server_test.go:575:6
func TestRespOnBadHandshake(t *testing.T) { const expectedStatus = http.StatusGone581:10discarded-error-result
client_server_test.go:581:10
w.WriteHeader(expectedStatus) _, _ = io.WriteString(w, expectedBody) }))587:3discarded-error-result
client_server_test.go:587:3
if err == nil { ws.Close() t.Fatalf("Dial: nil")595:10possible-nil-dereference
client_server_test.go:595:10
if resp.StatusCode != expectedStatus { t.Errorf("resp.StatusCode=%d, want %d", resp.StatusCode, expectedStatus)596:48possible-nil-dereference
client_server_test.go:596:48
if resp.StatusCode != expectedStatus { t.Errorf("resp.StatusCode=%d, want %d", resp.StatusCode, expectedStatus) }599:28possible-nil-dereference
client_server_test.go:599:28
p, err := io.ReadAll(resp.Body) if err != nil {619:6cognitive-complexity
client_server_test.go:619:6
// TestHost tests handling of host names and confirms that it matches net/http.func TestHost(t *testing.T) {619:6cyclomatic-complexity
client_server_test.go:619:6
// TestHost tests handling of host names and confirms that it matches net/http.func TestHost(t *testing.T) {619:6function-length
client_server_test.go:619:6
// TestHost tests handling of host names and confirms that it matches net/http.func TestHost(t *testing.T) {619:6test-parallelism
client_server_test.go:619:6
// TestHost tests handling of host names and confirms that it matches net/http.func TestHost(t *testing.T) {628:4discarded-error-result
client_server_test.go:628:4
} c.Close() } else {641:50insecure-url-scheme
client_server_test.go:641:50
addrs := map[*httptest.Server]string{server: server.Listener.Addr().String(), tlsServer: tlsServer.Listener.Addr().String()} wsProtos := map[*httptest.Server]string{server: "ws://", tlsServer: "wss://"} httpProtos := map[*httptest.Server]string{server: "http://", tlsServer: "https://"}642:52insecure-url-scheme
client_server_test.go:642:52
wsProtos := map[*httptest.Server]string{server: "ws://", tlsServer: "wss://"} httpProtos := map[*httptest.Server]string{server: "http://", tlsServer: "https://"}650:13nested-structs
client_server_test.go:650:13
tests := []struct { fail bool // true if dial / get should fail653:3import-shadowing
client_server_test.go:653:3
server *httptest.Server // server to use url string // host for request URI header string // optional request host header655:3import-shadowing
client_server_test.go:655:3
header string // optional request host header tls string // optional host for tls ServerName wantAddr string // expected host for dial683:16add-constant
client_server_test.go:683:16
url: addrs[tlsServer], header: "badhost.com", wantAddr: addrs[tlsServer],706:16add-constant
client_server_test.go:706:16
url: "badhost.com", header: "example.com", wantAddr: "badhost.com:80",728:16add-constant
client_server_test.go:728:16
tls: "example.com", wantAddr: "badhost.com:443", wantHeader: "badhost.com",735:3import-shadowing
client_server_test.go:735:3
tls := &tls.Config{ RootCAs: cas,735:10range-value-address
client_server_test.go:735:10
tls := &tls.Config{ RootCAs: cas,743:13range-value-capture
client_server_test.go:743:13
dialer := Dialer{ NetDial: func(network, addr string) (net.Conn, error) { gotAddr = addr758:4discarded-error-result
client_server_test.go:758:4
if err == nil { c.Close() }761:12range-value-capture
client_server_test.go:761:12
check := func(protos map[*httptest.Server]string) { name := fmt.Sprintf("%d: %s%s/ header[Host]=%q, tls.ServerName=%q", i+1, protos[tt.server], tt.url, tt.header, tt.tls)766:4single-case-switch
client_server_test.go:766:4
} switch { case tt.fail && err == nil:772:35add-constant
client_server_test.go:772:35
case !tt.fail && err == nil: if gotHost := resp.Header.Get("X-Test-Host"); gotHost != tt.wantHeader { t.Errorf("%s: got host %s, want %s", name, gotHost, tt.wantHeader)786:13discarded-error-result
client_server_test.go:786:13
} req, _ := http.NewRequest(http.MethodGet, httpProtos[tt.server]+tt.url+"/", nil) if tt.header != "" {786:74add-constant
client_server_test.go:786:74
} req, _ := http.NewRequest(http.MethodGet, httpProtos[tt.server]+tt.url+"/", nil) if tt.header != "" {791:15unclosed-http-response-body
client_server_test.go:791:15
client := &http.Client{Transport: transport} resp, err = client.Do(req) if err == nil {791:24external-call-in-loop
client_server_test.go:791:24
client := &http.Client{Transport: transport} resp, err = client.Do(req) if err == nil {793:4discarded-error-result
client_server_test.go:793:4
if err == nil { resp.Body.Close() }800:6test-parallelism
client_server_test.go:800:6
func TestDialCompression(t *testing.T) { s := newServer(t)814:6cognitive-complexity
client_server_test.go:814:6
func TestSocksProxyDial(t *testing.T) { s := newServer(t)814:6cyclomatic-complexity
client_server_test.go:814:6
func TestSocksProxyDial(t *testing.T) { s := newServer(t)814:6function-length
client_server_test.go:814:6
func TestSocksProxyDial(t *testing.T) { s := newServer(t)814:6test-parallelism
client_server_test.go:814:6
func TestSocksProxyDial(t *testing.T) { s := newServer(t)831:7discarded-error-result
client_server_test.go:831:7
_ = c1.SetDeadline(time.Now().Add(30 * time.Second))868:21nested-structs
client_server_test.go:868:21
defer c2.Close() done := make(chan struct{}) go func() {870:11discarded-error-result
client_server_test.go:870:11
go func() { _, _ = io.Copy(c1, c2) close(done)873:10discarded-error-result
client_server_test.go:873:10
}() _, _ = io.Copy(c2, c1) <-done893:6test-parallelism
client_server_test.go:893:6
func TestTracingDialWithContext(t *testing.T) {952:6test-parallelism
client_server_test.go:952:6
func TestEmptyTracingDialWithContext(t *testing.T) {972:1doc-comment-period
client_server_test.go:972:1
// TestNetDialConnect tests selection of dial method between NetDial, NetDialContext, NetDialTLS or NetDialTLSContextfunc TestNetDialConnect(t *testing.T) {973:6cognitive-complexity
client_server_test.go:973:6
// TestNetDialConnect tests selection of dial method between NetDial, NetDialContext, NetDialTLS or NetDialTLSContextfunc TestNetDialConnect(t *testing.T) {973:6function-length
client_server_test.go:973:6
// TestNetDialConnect tests selection of dial method between NetDial, NetDialContext, NetDialTLS or NetDialTLSContextfunc TestNetDialConnect(t *testing.T) {973:6test-parallelism
client_server_test.go:973:6
// TestNetDialConnect tests selection of dial method between NetDial, NetDialContext, NetDialTLS or NetDialTLSContextfunc TestNetDialConnect(t *testing.T) {982:4discarded-error-result
client_server_test.go:982:4
} c.Close() } else {995:14insecure-url-scheme
client_server_test.go:995:14
testUrls := map[*httptest.Server]string{ server: "ws://" + server.Listener.Addr().String() + "/", tlsServer: "wss://" + tlsServer.Listener.Addr().String() + "/",1006:13nested-structs
client_server_test.go:1006:13
tests := []struct { name string1019:28error-strings
client_server_test.go:1019:28
netDial: func(network, addr string) (net.Conn, error) { return nil, errors.New("NetDial should not be called") },1025:28error-strings
client_server_test.go:1025:28
netDialTLSContext: func(_ context.Context, network, addr string) (net.Conn, error) { return nil, errors.New("NetDialTLSContext should not be called") },1045:28error-strings
client_server_test.go:1045:28
netDialTLSContext: func(ctx context.Context, network, addr string) (net.Conn, error) { return nil, errors.New("NetDialTLSContext should not be called") },1053:28error-strings
client_server_test.go:1053:28
netDial: func(network, addr string) (net.Conn, error) { return nil, errors.New("NetDial should not be called") },1056:28error-strings
client_server_test.go:1056:28
netDialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { return nil, errors.New("NetDialContext should not be called") },1076:28add-constant
client_server_test.go:1076:28
netDial: func(network, addr string) (net.Conn, error) { return nil, errors.New("NetDial should not be called") },1076:28error-strings
client_server_test.go:1076:28
netDial: func(network, addr string) (net.Conn, error) { return nil, errors.New("NetDial should not be called") },1106:28error-strings
client_server_test.go:1106:28
netDial: func(network, addr string) (net.Conn, error) { return nil, errors.New("NetDial should not be called") },1109:28error-strings
client_server_test.go:1109:28
netDialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { return nil, errors.New("NetDialContext should not be called") },1142:13error-strings
client_server_test.go:1142:13
if err != nil { t.Errorf("FAILED %s, err: %s", tc.name, err.Error()) } else {1144:4discarded-error-result
client_server_test.go:1144:4
} else { c.Close() }1148:6test-parallelism
client_server_test.go:1148:6
}func TestNextProtos(t *testing.T) { ts := httptest.NewUnstartedServer(1157:41unchecked-type-assertion
client_server_test.go:1157:41
d := Dialer{ TLSClientConfig: ts.Client().Transport.(*http.Transport).TLSClientConfig, }1164:2discarded-error-result
client_server_test.go:1164:2
} r.Body.Close()1168:27var-declaration
client_server_test.go:1168:27
// after the Client.Get call from net/http above. var containsHTTP2 bool = false for _, proto := range d.TLSClientConfig.NextProtos {1197:44exported-declaration-comment
client_server_test.go:1197:44
func (w dataBeforeHandshakeResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { // Example single-frame masked text message from section 5.7 of the RFC.1208:3discarded-error-result
client_server_test.go:1208:3
rw.Reader.Reset(bytes.NewReader(message[:n])) rw.Reader.Peek(n) }1220:6test-parallelism
client_server_test.go:1220:6
func TestDataReceivedBeforeHandshake(t *testing.T) { s := newServer(t)1231:59range-value-capture
client_server_test.go:1231:59
for _, readBufferSize := range []int{0, 1024} { t.Run(fmt.Sprintf("ReadBufferSize=%d", readBufferSize), func(t *testing.T) { dialer := cstDialer1231:59test-parallelism
client_server_test.go:1231:59
for _, readBufferSize := range []int{0, 1024} { t.Run(fmt.Sprintf("ReadBufferSize=%d", readBufferSize), func(t *testing.T) { dialer := cstDialerclient_test.go4
1:1format
client_test.go:1:1
// Copyright 2014 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt client_test.go`
12:5no-package-var
client_test.go:12:5
var hostPortNoPortTests = []struct { u *url.URL12:29nested-structs
client_test.go:12:29
var hostPortNoPortTests = []struct { u *url.URL22:6test-parallelism
client_test.go:22:6
func TestHostPortNoPort(t *testing.T) { for _, tt := range hostPortNoPortTests {compression.go12
1:1format
compression.go:1:1
// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt compression.go`
5:9package-comments
compression.go:5:9
package websocket22:2no-package-var
compression.go:22:2
var ( flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool flateReaderPool = sync.Pool{New: func() interface{} {23:2no-package-var
compression.go:23:2
flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool flateReaderPool = sync.Pool{New: func() interface{} { return flate.NewReader(nil)23:43use-any
compression.go:23:43
flateWriterPools [maxCompressionLevel - minCompressionLevel + 1]sync.Pool flateReaderPool = sync.Pool{New: func() interface{} { return flate.NewReader(nil)37:14unchecked-type-assertion
compression.go:37:14
mr := io.MultiReader(r, strings.NewReader(tail)) if err := fr.(flate.Resetter).Reset(mr, nil); err != nil { // Reset never fails, but handle error in case that changes.53:11discarded-error-result
compression.go:53:11
if fw == nil { fw, _ = flate.NewWriter(tw, level) } else {62:1top-level-declaration-order
compression.go:62:1
// stream to another io.Writer.type truncWriter struct { w io.WriteCloser74:3modifies-parameter
compression.go:74:3
n = copy(w.p[w.n:], p) p = p[n:] w.n += n109:29exported-declaration-comment
compression.go:109:29
func (w *flateWriteWrapper) Close() error { if w.fw == nil {139:3discarded-error-result
compression.go:139:3
// this final read. r.Close() }144:28exported-declaration-comment
compression.go:144:28
func (r *flateReadWrapper) Close() error { if r.fr == nil {compression_test.go8
1:1format
compression_test.go:1:1
package websocket- Fix (safe): run `strider fmt compression_test.go`
12:18exported-declaration-comment
compression_test.go:12:18
func (nopCloser) Close() error { return nil }14:6cognitive-complexity
compression_test.go:14:6
func TestTruncWriter(t *testing.T) { const data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijlkmnopqrstuvwxyz987654321"14:6test-parallelism
compression_test.go:14:6
func TestTruncWriter(t *testing.T) { const data = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijlkmnopqrstuvwxyz987654321"25:11discarded-error-result
compression_test.go:25:11
} _, _ = w.Write(p[:m]) p = p[m:]49:7discarded-error-result
compression_test.go:49:7
for i := 0; i < b.N; i++ { _ = c.WriteMessage(TextMessage, messages[i%len(messages)]) }62:7discarded-error-result
compression_test.go:62:7
for i := 0; i < b.N; i++ { _ = c.WriteMessage(TextMessage, messages[i%len(messages)]) }67:6test-parallelism
compression_test.go:67:6
func TestValidCompressionLevel(t *testing.T) { c := newTestConn(nil, nil, false)conn.go132
1:1file-length-limit
conn.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style1:1format
conn.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt conn.go`
5:9package-comments
conn.go:5:9
package websocket45:2exported-declaration-comment
conn.go:45:2
const ( CloseNormalClosure = 1000 CloseGoingAway = 100146:2exported-declaration-comment
conn.go:46:2
CloseNormalClosure = 1000 CloseGoingAway = 1001 CloseProtocolError = 100247:2exported-declaration-comment
conn.go:47:2
CloseGoingAway = 1001 CloseProtocolError = 1002 CloseUnsupportedData = 100348:2exported-declaration-comment
conn.go:48:2
CloseProtocolError = 1002 CloseUnsupportedData = 1003 CloseNoStatusReceived = 100549:2exported-declaration-comment
conn.go:49:2
CloseUnsupportedData = 1003 CloseNoStatusReceived = 1005 CloseAbnormalClosure = 100650:2exported-declaration-comment
conn.go:50:2
CloseNoStatusReceived = 1005 CloseAbnormalClosure = 1006 CloseInvalidFramePayloadData = 100751:2exported-declaration-comment
conn.go:51:2
CloseAbnormalClosure = 1006 CloseInvalidFramePayloadData = 1007 ClosePolicyViolation = 100852:2exported-declaration-comment
conn.go:52:2
CloseInvalidFramePayloadData = 1007 ClosePolicyViolation = 1008 CloseMessageTooBig = 100953:2exported-declaration-comment
conn.go:53:2
ClosePolicyViolation = 1008 CloseMessageTooBig = 1009 CloseMandatoryExtension = 101054:2exported-declaration-comment
conn.go:54:2
CloseMessageTooBig = 1009 CloseMandatoryExtension = 1010 CloseInternalServerErr = 101155:2exported-declaration-comment
conn.go:55:2
CloseMandatoryExtension = 1010 CloseInternalServerErr = 1011 CloseServiceRestart = 101256:2exported-declaration-comment
conn.go:56:2
CloseInternalServerErr = 1011 CloseServiceRestart = 1012 CloseTryAgainLater = 101357:2exported-declaration-comment
conn.go:57:2
CloseServiceRestart = 1012 CloseTryAgainLater = 1013 CloseTLSHandshake = 101558:2exported-declaration-comment
conn.go:58:2
CloseTryAgainLater = 1013 CloseTLSHandshake = 1015)65:2exported-declaration-comment
conn.go:65:2
// interpreted as UTF-8 encoded text data. TextMessage = 173:2exported-declaration-comment
conn.go:73:2
// function to format a close message payload. CloseMessage = 877:2exported-declaration-comment
conn.go:77:2
// is UTF-8 encoded text. PingMessage = 981:2exported-declaration-comment
conn.go:81:2
// is UTF-8 encoded text. PongMessage = 10)86:5exported-declaration-comment
conn.go:86:5
// connection after sending a close message.var ErrCloseSent = errors.New("websocket: close sent")86:5no-package-var
conn.go:86:5
// connection after sending a close message.var ErrCloseSent = errors.New("websocket: close sent")90:5exported-declaration-comment
conn.go:90:5
// read limit set for the connection.var ErrReadLimit = errors.New("websocket: read limit exceeded")90:5no-package-var
conn.go:90:5
// read limit set for the connection.var ErrReadLimit = errors.New("websocket: read limit exceeded")100:20exported-declaration-comment
conn.go:100:20
func (e *netError) Error() string { return e.msg }func (e *netError) Temporary() bool { return e.temporary }func (e *netError) Timeout() bool { return e.timeout }101:20exported-declaration-comment
conn.go:101:20
func (e *netError) Temporary() bool { return e.temporary }func (e *netError) Timeout() bool { return e.timeout }104:1top-level-declaration-order
conn.go:104:1
// CloseError represents a close message.type CloseError struct { // Code is defined in RFC 6455, section 11.7.112:22cyclomatic-complexity
conn.go:112:22
func (e *CloseError) Error() string { s := []byte("websocket: close ")115:2single-case-switch
conn.go:115:2
s = strconv.AppendInt(s, int64(e.Code), 10) switch e.Code { case CloseNormalClosure:150:6exported-declaration-comment
conn.go:150:6
// with one of the specified codes.func IsCloseError(err error, codes ...int) bool { if e, ok := err.(*CloseError); ok {163:6exported-declaration-comment
conn.go:163:6
// *CloseError with a code not in the list of expected codes.func IsUnexpectedCloseError(err error, expectedCodes ...int) bool { if e, ok := err.(*CloseError); ok {176:2no-package-var
conn.go:176:2
var ( errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()}177:2no-package-var
conn.go:177:2
errWriteTimeout = &netError{msg: "websocket: write timeout", timeout: true, temporary: true} errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} errBadWriteOpCode = errors.New("websocket: bad write message type")178:2no-package-var
conn.go:178:2
errUnexpectedEOF = &CloseError{Code: CloseAbnormalClosure, Text: io.ErrUnexpectedEOF.Error()} errBadWriteOpCode = errors.New("websocket: bad write message type") errWriteClosed = errors.New("websocket: write closed")179:2no-package-var
conn.go:179:2
errBadWriteOpCode = errors.New("websocket: bad write message type") errWriteClosed = errors.New("websocket: write closed") errInvalidControlFrame = errors.New("websocket: invalid control frame")180:2no-package-var
conn.go:180:2
errWriteClosed = errors.New("websocket: write closed") errInvalidControlFrame = errors.New("websocket: invalid control frame"))186:5no-package-var
conn.go:186:5
// reproducible results.var maskRand = rand.Reader191:9discarded-error-result
conn.go:191:9
var k [4]byte _, _ = io.ReadFull(maskRand, k[:]) return k196:9optimize-operands-order
conn.go:196:9
func isControl(frameType int) bool { return frameType == CloseMessage || frameType == PingMessage || frameType == PongMessage}203:5no-package-var
conn.go:203:5
var validReceivedCloseCodes = map[int]bool{ // see http://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number228:6exported-declaration-comment
conn.go:228:6
// interface. The type of the value stored in a pool is not specified.type BufferPool interface { // Get gets a value from the pool or returns nil if the pool is empty.230:8use-any
conn.go:230:8
// Get gets a value from the pool or returns nil if the pool is empty. Get() interface{} // Put adds a value to the pool.232:6use-any
conn.go:232:6
// Put adds a value to the pool. Put(interface{})}241:6exported-declaration-comment
conn.go:241:6
// The Conn type represents a WebSocket connection.type Conn struct { conn net.Conn247:21nested-structs
conn.go:247:21
// Write fields mu chan struct{} // used as mutex to protect write to conn writeBuf []byte // frame is constructed in this buffer.284:6cognitive-complexity
conn.go:284:6
func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int, writeBufferPool BufferPool, br *bufio.Reader, writeBuf []byte) *Conn {288:4modifies-parameter
conn.go:288:4
if readBufferSize == 0 { readBufferSize = defaultReadBufferSize } else if readBufferSize < maxControlFramePayloadSize {291:4modifies-parameter
conn.go:291:4
// must be large enough for control frame readBufferSize = maxControlFramePayloadSize }293:3modifies-parameter
conn.go:293:3
} br = bufio.NewReaderSize(conn, readBufferSize) }297:3modifies-parameter
conn.go:297:3
if writeBufferSize <= 0 { writeBufferSize = defaultWriteBufferSize }299:2modifies-parameter
conn.go:299:2
} writeBufferSize += maxFrameHeaderSize302:3modifies-parameter
conn.go:302:3
if writeBuf == nil && writeBufferPool == nil { writeBuf = make([]byte, writeBufferSize) }305:18nested-structs
conn.go:305:18
mu := make(chan struct{}, 1) mu <- struct{}{}306:8nested-structs
conn.go:306:8
mu := make(chan struct{}, 1) mu <- struct{}{} c := &Conn{343:16exported-declaration-comment
conn.go:343:16
// for a close message.func (c *Conn) Close() error { return c.conn.Close()375:9discarded-error-result
conn.go:375:9
// is less than or equal to the number of bytes buffered. _, _ = c.br.Discard(len(p)) return p, err381:25nested-structs
conn.go:381:25
<-c.mu defer func() { c.mu <- struct{}{} }()402:7discarded-error-result
conn.go:402:7
if frameType == CloseMessage { _ = c.writeFatal(ErrCloseSent) }415:16cognitive-complexity
conn.go:415:16
// message types are CloseMessage, PingMessage and PongMessage.func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { if !isControl(messageType) {415:16cyclomatic-complexity
conn.go:415:16
// message types are CloseMessage, PingMessage and PongMessage.func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { if !isControl(messageType) {415:16exported-declaration-comment
conn.go:415:16
// message types are CloseMessage, PingMessage and PongMessage.func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { if !isControl(messageType) {462:25nested-structs
conn.go:462:25
defer func() { c.mu <- struct{}{} }()478:7discarded-error-result
conn.go:478:7
if messageType == CloseMessage { _ = c.writeFatal(ErrCloseSent) }489:3discarded-error-result
conn.go:489:3
if c.writer != nil { c.writer.Close() c.writer = nil504:2modifies-parameter
conn.go:504:2
mw.c = c mw.frameType = messageType505:2modifies-parameter
conn.go:505:2
mw.c = c mw.frameType = messageType mw.pos = maxFrameHeaderSize506:2modifies-parameter
conn.go:506:2
mw.frameType = messageType mw.pos = maxFrameHeaderSize527:16exported-declaration-comment
conn.go:527:16
// PongMessage) are supported.func (c *Conn) NextWriter(messageType int) (io.WriteCloser, error) { var mw messageWriter533:5optimize-operands-order
conn.go:533:5
c.writer = &mw if c.newCompressionWriter != nil && c.enableWriteCompression && isData(messageType) { w := c.newCompressionWriter(c.writer, c.compressionLevel)565:25cognitive-complexity
conn.go:565:25
// final argument indicates that this is the last frame in the message.func (w *messageWriter) flushFrame(final bool, extra []byte) error { c := w.c565:25cyclomatic-complexity
conn.go:565:25
// final argument indicates that this is the last frame in the message.func (w *messageWriter) flushFrame(final bool, extra []byte) error { c := w.c565:25function-length
conn.go:565:25
// final argument indicates that this is the last frame in the message.func (w *messageWriter) flushFrame(final bool, extra []byte) error { c := w.c565:36flag-parameter
conn.go:565:36
// final argument indicates that this is the last frame in the message.func (w *messageWriter) flushFrame(final bool, extra []byte) error { c := w.c570:5optimize-operands-order
conn.go:570:5
// Check for invalid control frames. if isControl(w.frameType) && (!final || length > maxControlFramePayloadSize) {584:8redundant-conversion
conn.go:584:8
b1 := byte(0) if !c.isServer {596:2single-case-switch
conn.go:596:2
switch { case length >= 65536:642:7discarded-error-result
conn.go:642:7
if final { _ = w.endMessage(errWriteClosed) return nil652:31redefines-builtin-id
conn.go:652:31
func (w *messageWriter) ncopy(max int) (int, error) { n := len(w.c.writeBuf) - w.pos671:5optimize-operands-order
conn.go:671:5
if len(p) > 2*len(w.c.writeBuf) && w.c.isServer { // Don't buffer large messages.688:3modifies-parameter
conn.go:688:3
w.pos += n p = p[n:] }693:25exported-declaration-comment
conn.go:693:25
func (w *messageWriter) WriteString(p string) (int, error) { if w.err != nil {706:3modifies-parameter
conn.go:706:3
w.pos += n p = p[n:] }711:25cognitive-complexity
conn.go:711:25
func (w *messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { if w.err != nil {711:25exported-declaration-comment
conn.go:711:25
func (w *messageWriter) ReadFrom(r io.Reader) (nn int64, err error) { if w.err != nil {736:25exported-declaration-comment
conn.go:736:25
func (w *messageWriter) Close() error { if w.err != nil {747:21optimize-operands-order
conn.go:747:21
isServer: c.isServer, compress: c.newCompressionWriter != nil && c.enableWriteCompression && isData(pm.messageType), compressionLevel: c.compressionLevel,754:9add-constant
conn.go:754:9
if c.isWriting { panic("concurrent write to websocket connection") }767:16exported-declaration-comment
conn.go:767:16
// writing the message and closing the writer.func (c *Conn) WriteMessage(messageType int, data []byte) error {769:20optimize-operands-order
conn.go:769:20
if c.isServer && (c.newCompressionWriter == nil || !c.enableWriteCompression) { // Fast path with no allocations and single frame.778:3modifies-parameter
conn.go:778:3
mw.pos += n data = data[n:] return mw.flushFrame(true, data)796:16exported-declaration-comment
conn.go:796:16
// not time out.func (c *Conn) SetWriteDeadline(t time.Time) error { c.writeDeadline = t803:16cognitive-complexity
conn.go:803:16
func (c *Conn) advanceFrame() (int, error) { // 1. Skip remainder of previous frame.803:16cyclomatic-complexity
conn.go:803:16
func (c *Conn) advanceFrame() (int, error) { // 1. Skip remainder of previous frame.803:16function-length
conn.go:803:16
func (c *Conn) advanceFrame() (int, error) { // 1. Skip remainder of previous frame.816:6import-shadowing
conn.go:816:6
var errors []string829:6discarded-error-result
conn.go:829:6
mask := p[1]&maskBit != 0 _ = c.setReadRemaining(int64(p[1] & 0x7f)) // will not fail because argument is >= 0890:2single-case-switch
conn.go:890:2
switch c.readRemaining { case 126:924:5optimize-operands-order
conn.go:924:5
if frameType == continuationFrame || frameType == TextMessage || frameType == BinaryMessage {935:8discarded-error-result
conn.go:935:8
// Make a best effort to send a close message describing the problem. _ = c.WriteControl(CloseMessage, FormatCloseMessage(CloseMessageTooBig, ""), time.Now().Add(writeWait)) return noFrame, ErrReadLimit947:7discarded-error-result
conn.go:947:7
payload, err = c.read(int(c.readRemaining)) _ = c.setReadRemaining(0) // will not fail because argument is >= 0 if err != nil {958:2single-case-switch
conn.go:958:2
switch frameType { case PongMessage:995:6discarded-error-result
conn.go:995:6
// Make a best effor to send a close message describing the problem. _ = c.WriteControl(CloseMessage, data, time.Now().Add(writeWait)) return errors.New("websocket: " + message)1009:16cognitive-complexity
conn.go:1009:16
// this method return the same error.func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { // Close previous reader, only relevant for decompression.1009:16exported-declaration-comment
conn.go:1009:16
// this method return the same error.func (c *Conn) NextReader() (messageType int, r io.Reader, err error) { // Close previous reader, only relevant for decompression.1012:3discarded-error-result
conn.go:1012:3
if c.reader != nil { c.reader.Close() c.reader = nil1049:25cognitive-complexity
conn.go:1049:25
func (r *messageReader) Read(b []byte) (int, error) { c := r.c1049:25cyclomatic-complexity
conn.go:1049:25
func (r *messageReader) Read(b []byte) (int, error) { c := r.c1059:5modifies-parameter
conn.go:1059:5
if int64(len(b)) > c.readRemaining { b = b[:c.readRemaining] }1068:8discarded-error-result
conn.go:1068:8
rem -= int64(n) _ = c.setReadRemaining(rem) // rem is guaranteed to be >= 0 if c.readRemaining > 0 && c.readErr == io.EOF {1081:3single-case-switch
conn.go:1081:3
frameType, err := c.advanceFrame() switch { case err != nil:1096:7unused-receiver
conn.go:1096:7
func (r *messageReader) Close() error { return nil1096:25exported-declaration-comment
conn.go:1096:25
func (r *messageReader) Close() error { return nil1102:16exported-declaration-comment
conn.go:1102:16
// reading from that reader to a buffer.func (c *Conn) ReadMessage() (messageType int, p []byte, err error) { var r io.Reader1116:16exported-declaration-comment
conn.go:1116:16
// not time out.func (c *Conn) SetReadDeadline(t time.Time) error { return c.conn.SetReadDeadline(t)1123:16exported-declaration-comment
conn.go:1123:16
// and returns ErrReadLimit to the application.func (c *Conn) SetReadLimit(limit int64) { c.readLimit = limit1127:1doc-comment-period
conn.go:1127:1
// CloseHandler returns the current close handlerfunc (c *Conn) CloseHandler() func(code int, text string) error {1146:16exported-declaration-comment
conn.go:1146:16
// the peer.func (c *Conn) SetCloseHandler(h func(code int, text string) error) { if h == nil {1148:3modifies-parameter
conn.go:1148:3
if h == nil { h = func(code int, text string) error { message := FormatCloseMessage(code, "")1151:8discarded-error-result
conn.go:1151:8
// Make a best effor to send the close message. _ = c.WriteControl(CloseMessage, message, time.Now().Add(writeWait)) return nil1158:1doc-comment-period
conn.go:1158:1
// PingHandler returns the current ping handlerfunc (c *Conn) PingHandler() func(appData string) error {1170:16exported-declaration-comment
conn.go:1170:16
// ping messages as described in the section on Control Messages above.func (c *Conn) SetPingHandler(h func(appData string) error) { if h == nil {1172:3modifies-parameter
conn.go:1172:3
if h == nil { h = func(message string) error { // Make a best effort to send the pong message.1174:8discarded-error-result
conn.go:1174:8
// Make a best effort to send the pong message. _ = c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait)) return nil1181:1doc-comment-period
conn.go:1181:1
// PongHandler returns the current pong handlerfunc (c *Conn) PongHandler() func(appData string) error {1193:16exported-declaration-comment
conn.go:1193:16
// pong messages as described in the section on Control Messages above.func (c *Conn) SetPongHandler(h func(appData string) error) { if h == nil {1195:3modifies-parameter
conn.go:1195:3
if h == nil { h = func(string) error { return nil } }1203:16exported-declaration-comment
conn.go:1203:16
// WebSocket connection.func (c *Conn) NetConn() net.Conn { return c.conn1210:16exported-declaration-comment
conn.go:1210:16
// Deprecated: Use the NetConn method.func (c *Conn) UnderlyingConn() net.Conn { return c.conn1217:16exported-declaration-comment
conn.go:1217:16
// compression was not negotiated with the peer.func (c *Conn) EnableWriteCompression(enable bool) { c.enableWriteCompression = enable1225:16exported-declaration-comment
conn.go:1225:16
// compression levels.func (c *Conn) SetCompressionLevel(level int) error { if !isValidCompressionLevel(level) {1235:6exported-declaration-comment
conn.go:1235:6
// An empty message is returned for code CloseNoStatusReceived.func FormatCloseMessage(closeCode int, text string) []byte { if closeCode == CloseNoStatusReceived {conn_broadcast_test.go12
1:1format
conn_broadcast_test.go:1:1
// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt conn_broadcast_test.go`
20:19nested-structs
conn_broadcast_test.go:20:19
w io.Writer closeCh chan struct{} doneCh chan struct{}21:19nested-structs
conn_broadcast_test.go:21:19
closeCh chan struct{} doneCh chan struct{} count int3248:26nested-structs
conn_broadcast_test.go:48:26
w: io.Discard, doneCh: make(chan struct{}), closeCh: make(chan struct{}),49:26nested-structs
conn_broadcast_test.go:49:26
doneCh: make(chan struct{}), closeCh: make(chan struct{}), usePrepared: usePrepared,57:26cognitive-complexity
conn_broadcast_test.go:57:26
func (b *broadcastBench) makeConns(numConns int) { conns := make([]*broadcastConn, numConns)72:11discarded-error-result
conn_broadcast_test.go:72:11
if msg.prepared != nil { _ = c.conn.WritePreparedMessage(msg.prepared) } else {74:11discarded-error-result
conn_broadcast_test.go:74:11
} else { _ = c.conn.WriteMessage(TextMessage, msg.payload) }78:19nested-structs
conn_broadcast_test.go:78:19
if val%int32(numConns) == 0 { b.doneCh <- struct{}{} }101:18nested-structs
conn_broadcast_test.go:101:18
func BenchmarkBroadcast(b *testing.B) { benchmarks := []struct { name string113:18range-value-capture
conn_broadcast_test.go:113:18
for _, bm := range benchmarks { b.Run(bm.name, func(b *testing.B) { bench := newBroadcastBench(bm.usePrepared, bm.compression)122:15discarded-error-result
conn_broadcast_test.go:122:15
if bench.usePrepared { pm, _ := NewPreparedMessage(TextMessage, message.payload) message.prepared = pmconn_test.go131
1:1file-length-limit
conn_test.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style1:1format
conn_test.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt conn_test.go`
28:7unused-receiver
conn_test.go:28:7
func (c fakeNetConn) Close() error { return nil }func (c fakeNetConn) LocalAddr() net.Addr { return localAddr }28:22exported-declaration-comment
conn_test.go:28:22
func (c fakeNetConn) Close() error { return nil }func (c fakeNetConn) LocalAddr() net.Addr { return localAddr }29:7unused-receiver
conn_test.go:29:7
func (c fakeNetConn) Close() error { return nil }func (c fakeNetConn) LocalAddr() net.Addr { return localAddr }func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }29:22exported-declaration-comment
conn_test.go:29:22
func (c fakeNetConn) Close() error { return nil }func (c fakeNetConn) LocalAddr() net.Addr { return localAddr }func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }30:7unused-receiver
conn_test.go:30:7
func (c fakeNetConn) LocalAddr() net.Addr { return localAddr }func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }30:22exported-declaration-comment
conn_test.go:30:22
func (c fakeNetConn) LocalAddr() net.Addr { return localAddr }func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }31:7unused-receiver
conn_test.go:31:7
func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }31:22exported-declaration-comment
conn_test.go:31:22
func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }31:34unused-parameter
conn_test.go:31:34
func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr }func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }32:7unused-receiver
conn_test.go:32:7
func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil }32:22exported-declaration-comment
conn_test.go:32:22
func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil }32:38unused-parameter
conn_test.go:32:38
func (c fakeNetConn) SetDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil }33:7unused-receiver
conn_test.go:33:7
func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil }33:22exported-declaration-comment
conn_test.go:33:22
func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil }33:39unused-parameter
conn_test.go:33:39
func (c fakeNetConn) SetReadDeadline(t time.Time) error { return nil }func (c fakeNetConn) SetWriteDeadline(t time.Time) error { return nil }35:1top-level-declaration-order
conn_test.go:35:1
type fakeAddr int38:2no-package-var
conn_test.go:38:2
var ( localAddr = fakeAddr(1) remoteAddr = fakeAddr(2)38:15redundant-conversion
conn_test.go:38:15
var ( localAddr = fakeAddr(1) remoteAddr = fakeAddr(2)39:2no-package-var
conn_test.go:39:2
localAddr = fakeAddr(1) remoteAddr = fakeAddr(2))39:15redundant-conversion
conn_test.go:39:15
localAddr = fakeAddr(1) remoteAddr = fakeAddr(2))42:7unused-receiver
conn_test.go:42:7
func (a fakeAddr) Network() string { return "net"42:19exported-declaration-comment
conn_test.go:42:19
func (a fakeAddr) Network() string { return "net"46:7unused-receiver
conn_test.go:46:7
func (a fakeAddr) String() string { return "str"56:6cognitive-complexity
conn_test.go:56:6
func TestFraming(t *testing.T) { frameSizes := []int{56:6cyclomatic-complexity
conn_test.go:56:6
func TestFraming(t *testing.T) { frameSizes := []int{56:6function-length
conn_test.go:56:6
func TestFraming(t *testing.T) { frameSizes := []int{56:6test-parallelism
conn_test.go:56:6
func TestFraming(t *testing.T) { frameSizes := []int{61:23nested-structs
conn_test.go:61:23
} var readChunkers = []struct { name string73:18nested-structs
conn_test.go:73:18
} var writers = []struct { name string85:11byte-string-write
conn_test.go:85:11
{"string", func(w io.Writer, n int) (int, error) { return io.WriteString(w, string(writeBuf[:n])) }},105:7max-control-nesting
conn_test.go:105:7
w, err := wc.NextWriter(TextMessage) if err != nil { t.Errorf("%s: wc.NextWriter() returned %v", name, err)110:7max-control-nesting
conn_test.go:110:7
nn, err := writer.f(w, n) if err != nil || nn != n { t.Errorf("%s: w.Write(writeBuf[:n]) returned %d, %v", name, nn, err)115:7max-control-nesting
conn_test.go:115:7
err = w.Close() if err != nil { t.Errorf("%s: w.Close() returned %v", name, err)121:7max-control-nesting
conn_test.go:121:7
opCode, r, err := rc.NextReader() if err != nil || opCode != TextMessage { t.Errorf("%s: NextReader() returned %d, r, %v", name, opCode, err)128:7max-control-nesting
conn_test.go:128:7
rbuf, err := io.ReadAll(r) if err != nil { t.Errorf("%s: ReadFull() returned rbuf, %v", name, err)133:7max-control-nesting
conn_test.go:133:7
if len(rbuf) != n { t.Errorf("%s: len(rbuf) is %d, want %d", name, len(rbuf), n)138:7max-control-nesting
conn_test.go:138:7
for i, b := range rbuf { if byte(i) != b {139:8max-control-nesting
conn_test.go:139:8
for i, b := range rbuf { if byte(i) != b { t.Errorf("%s: bad byte at offset %d", name, i)157:12error-strings
conn_test.go:157:12
if err := c.WriteControl(PongMessage, message, time.Time{}); err != nil { t.Errorf("WriteControl(..., zero deadline) = %v, want nil", err) }160:12error-strings
conn_test.go:160:12
if err := c.WriteControl(PongMessage, message, time.Now().Add(time.Second)); err != nil { t.Errorf("WriteControl(..., future deadline) = %v, want nil", err) }163:12error-strings
conn_test.go:163:12
if err := c.WriteControl(PongMessage, message, time.Now().Add(-time.Second)); err == nil { t.Errorf("WriteControl(..., past deadline) = nil, want timeout error") }167:6test-parallelism
conn_test.go:167:6
func TestConcurrencyWriteControl(t *testing.T) { const message = "this is a ping/pong messsage"188:3discarded-error-result
conn_test.go:188:3
wg.Wait() wc.Close() }192:6cognitive-complexity
conn_test.go:192:6
func TestControl(t *testing.T) { const message = "this is a ping/pong message"192:6test-parallelism
conn_test.go:192:6
func TestControl(t *testing.T) { const message = "this is a ping/pong message"201:9discarded-error-result
conn_test.go:201:9
if isWriteControl { _ = wc.WriteControl(PongMessage, []byte(message), time.Now().Add(time.Second)) } else {218:5excessive-blank-identifiers
conn_test.go:218:5
rc.SetPongHandler(func(s string) error { actualMessage = s; return nil }) _, _, _ = rc.NextReader() if actualMessage != message {218:15discarded-error-result
conn_test.go:218:15
rc.SetPongHandler(func(s string) error { actualMessage = s; return nil }) _, _, _ = rc.NextReader() if actualMessage != message {230:4use-any
conn_test.go:230:4
type simpleBufferPool struct { v interface{}}233:28exported-declaration-comment
conn_test.go:233:28
func (p *simpleBufferPool) Get() interface{} { v := p.v233:34use-any
conn_test.go:233:34
func (p *simpleBufferPool) Get() interface{} { v := p.v239:28exported-declaration-comment
conn_test.go:239:28
func (p *simpleBufferPool) Put(v interface{}) { p.v = v239:34use-any
conn_test.go:239:34
func (p *simpleBufferPool) Put(v interface{}) { p.v = v243:6cognitive-complexity
conn_test.go:243:6
func TestWriteBufferPool(t *testing.T) { const message = "Now is the time for all good people to come to the aid of the party."243:6cyclomatic-complexity
conn_test.go:243:6
func TestWriteBufferPool(t *testing.T) { const message = "Now is the time for all good people to come to the aid of the party."243:6function-length
conn_test.go:243:6
func TestWriteBufferPool(t *testing.T) { const message = "Now is the time for all good people to come to the aid of the party."243:6test-parallelism
conn_test.go:243:6
func TestWriteBufferPool(t *testing.T) { const message = "Now is the time for all good people to come to the aid of the party."283:40optimize-operands-order
conn_test.go:283:40
if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { t.Fatal("writeBuf not returned to pool")306:40optimize-operands-order
conn_test.go:306:40
if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { t.Fatal("writeBuf not returned to pool after WriteMessage")321:6test-parallelism
conn_test.go:321:6
// TestWriteBufferPoolSync ensures that *sync.Pool works as a buffer pool.func TestWriteBufferPoolSync(t *testing.T) { var buf bytes.Buffer334:13add-constant
conn_test.go:334:13
if opCode != TextMessage || err != nil { t.Fatalf("ReadMessage() returned %d, p, %v", opCode, err) }337:13add-constant
conn_test.go:337:13
if s := string(p); s != message { t.Fatalf("message is %s, want %s", s, message) }345:7unused-receiver
conn_test.go:345:7
func (ew errorWriter) Write(p []byte) (int, error) { return 0, errors.New("error") }345:29unused-parameter
conn_test.go:345:29
func (ew errorWriter) Write(p []byte) (int, error) { return 0, errors.New("error") }349:6cyclomatic-complexity
conn_test.go:349:6
// on write.func TestWriteBufferPoolError(t *testing.T) {349:6test-parallelism
conn_test.go:349:6
// on write.func TestWriteBufferPoolError(t *testing.T) {375:40optimize-operands-order
conn_test.go:375:40
if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { t.Fatal("writeBuf not returned to pool")387:40optimize-operands-order
conn_test.go:387:40
if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { t.Fatal("writeBuf not returned to pool")388:11add-constant
conn_test.go:388:11
if wpd, ok := pool.v.(writePoolData); !ok || len(wpd.buf) == 0 || &wpd.buf[0] != writeBufAddr { t.Fatal("writeBuf not returned to pool") }392:6test-parallelism
conn_test.go:392:6
func TestCloseFrameBeforeFinalMessageFrame(t *testing.T) { const bufSize = 512401:10discarded-error-result
conn_test.go:401:10
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(make([]byte, bufSize+bufSize/2))402:9discarded-error-result
conn_test.go:402:9
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(make([]byte, bufSize+bufSize/2)) _ = wc.WriteControl(CloseMessage, FormatCloseMessage(expectedErr.Code, expectedErr.Text), time.Now().Add(10*time.Second))403:6discarded-error-result
conn_test.go:403:6
_, _ = w.Write(make([]byte, bufSize+bufSize/2)) _ = wc.WriteControl(CloseMessage, FormatCloseMessage(expectedErr.Code, expectedErr.Text), time.Now().Add(10*time.Second)) w.Close()404:2discarded-error-result
conn_test.go:404:2
_ = wc.WriteControl(CloseMessage, FormatCloseMessage(expectedErr.Code, expectedErr.Text), time.Now().Add(10*time.Second)) w.Close()420:6cognitive-complexity
conn_test.go:420:6
func TestEOFWithinFrame(t *testing.T) { const bufSize = 64420:6test-parallelism
conn_test.go:420:6
func TestEOFWithinFrame(t *testing.T) { const bufSize = 64428:11discarded-error-result
conn_test.go:428:11
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(make([]byte, bufSize))429:10discarded-error-result
conn_test.go:429:10
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(make([]byte, bufSize)) w.Close()430:3discarded-error-result
conn_test.go:430:3
_, _ = w.Write(make([]byte, bufSize)) w.Close()455:6test-parallelism
conn_test.go:455:6
func TestEOFBeforeFinalFrame(t *testing.T) { const bufSize = 512462:10discarded-error-result
conn_test.go:462:10
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(make([]byte, bufSize+bufSize/2))463:9discarded-error-result
conn_test.go:463:9
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(make([]byte, bufSize+bufSize/2))479:6test-parallelism
conn_test.go:479:6
func TestWriteAfterMessageWriterClose(t *testing.T) { wc := newTestConn(nil, &bytes.Buffer{}, false)481:10discarded-error-result
conn_test.go:481:10
wc := newTestConn(nil, &bytes.Buffer{}, false) w, _ := wc.NextWriter(BinaryMessage) _, _ = io.WriteString(w, "hello")482:9discarded-error-result
conn_test.go:482:9
w, _ := wc.NextWriter(BinaryMessage) _, _ = io.WriteString(w, "hello") if err := w.Close(); err != nil {482:27add-constant
conn_test.go:482:27
w, _ := wc.NextWriter(BinaryMessage) _, _ = io.WriteString(w, "hello") if err := w.Close(); err != nil {491:9discarded-error-result
conn_test.go:491:9
w, _ = wc.NextWriter(BinaryMessage) _, _ = io.WriteString(w, "hello")492:9discarded-error-result
conn_test.go:492:9
w, _ = wc.NextWriter(BinaryMessage) _, _ = io.WriteString(w, "hello")505:6cyclomatic-complexity
conn_test.go:505:6
func TestReadLimit(t *testing.T) { t.Run("Test ReadLimit is enforced", func(t *testing.T) {505:6function-length
conn_test.go:505:6
func TestReadLimit(t *testing.T) { t.Run("Test ReadLimit is enforced", func(t *testing.T) {505:6test-parallelism
conn_test.go:505:6
func TestReadLimit(t *testing.T) { t.Run("Test ReadLimit is enforced", func(t *testing.T) {506:38test-parallelism
conn_test.go:506:38
func TestReadLimit(t *testing.T) { t.Run("Test ReadLimit is enforced", func(t *testing.T) { const readLimit = 512516:11discarded-error-result
conn_test.go:516:11
// Send message at the limit with interleaved pong. w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(message[:readLimit-1])517:10discarded-error-result
conn_test.go:517:10
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(message[:readLimit-1]) _ = wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second))518:7discarded-error-result
conn_test.go:518:7
_, _ = w.Write(message[:readLimit-1]) _ = wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second)) _, _ = w.Write(message[:1])519:10discarded-error-result
conn_test.go:519:10
_ = wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second)) _, _ = w.Write(message[:1]) w.Close()520:3discarded-error-result
conn_test.go:520:3
_, _ = w.Write(message[:1]) w.Close()523:7discarded-error-result
conn_test.go:523:7
// Send message larger than the limit. _ = wc.WriteMessage(BinaryMessage, message[:readLimit+1])539:52test-parallelism
conn_test.go:539:52
t.Run("Test that ReadLimit cannot be overflowed", func(t *testing.T) { const readLimit = 1565:19add-constant
conn_test.go:565:19
// Mask key b1.Write([]byte("\x00\x00\x00\x00"))595:6test-parallelism
conn_test.go:595:6
func TestAddrs(t *testing.T) { c := newTestConn(nil, nil, true)598:12error-strings
conn_test.go:598:12
if c.LocalAddr() != localAddr { t.Errorf("LocalAddr = %v, want %v", c.LocalAddr(), localAddr) }601:12error-strings
conn_test.go:601:12
if c.RemoteAddr() != remoteAddr { t.Errorf("RemoteAddr = %v, want %v", c.RemoteAddr(), remoteAddr) }605:6test-parallelism
conn_test.go:605:6
func TestDeprecatedUnderlyingConn(t *testing.T) { var b1, b2 bytes.Buffer615:6test-parallelism
conn_test.go:615:6
func TestNetConn(t *testing.T) { var b1, b2 bytes.Buffer625:6test-parallelism
conn_test.go:625:6
func TestBufioReadBytes(t *testing.T) { // Test calling bufio.ReadBytes for value longer than read buffer size.635:10discarded-error-result
conn_test.go:635:10
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(m)636:9discarded-error-result
conn_test.go:636:9
w, _ := wc.NextWriter(BinaryMessage) _, _ = w.Write(m) w.Close()637:2discarded-error-result
conn_test.go:637:2
_, _ = w.Write(m) w.Close()641:12add-constant
conn_test.go:641:12
if op != BinaryMessage || err != nil { t.Fatalf("NextReader() returned %d, %v", op, err) }654:5no-package-var
conn_test.go:654:5
var closeErrorTests = []struct { err error654:25nested-structs
conn_test.go:654:25
var closeErrorTests = []struct { err error665:6test-parallelism
conn_test.go:665:6
func TestCloseError(t *testing.T) { for _, tt := range closeErrorTests {669:13error-strings
conn_test.go:669:13
if ok != tt.ok { t.Errorf("IsCloseError(%#v, %#v) returned %v, want %v", tt.err, tt.codes, ok, tt.ok) }674:5no-package-var
conn_test.go:674:5
var unexpectedCloseErrorTests = []struct { err error674:35nested-structs
conn_test.go:674:35
var unexpectedCloseErrorTests = []struct { err error685:6test-parallelism
conn_test.go:685:6
func TestUnexpectedCloseErrors(t *testing.T) { for _, tt := range unexpectedCloseErrorTests {689:13error-strings
conn_test.go:689:13
if ok != tt.ok { t.Errorf("IsUnexpectedCloseError(%#v, %#v) returned %v, want %v", tt.err, tt.codes, ok, tt.ok) }695:14nested-structs
conn_test.go:695:14
type blockingWriter struct { c1, c2 chan struct{}}706:6test-parallelism
conn_test.go:706:6
func TestConcurrentWritePanic(t *testing.T) { w := blockingWriter{make(chan struct{}), make(chan struct{})}707:32nested-structs
conn_test.go:707:32
func TestConcurrentWritePanic(t *testing.T) { w := blockingWriter{make(chan struct{}), make(chan struct{})} c := newTestConn(nil, w, false)707:53nested-structs
conn_test.go:707:53
func TestConcurrentWritePanic(t *testing.T) { w := blockingWriter{make(chan struct{}), make(chan struct{})} c := newTestConn(nil, w, false)710:7discarded-error-result
conn_test.go:710:7
go func() { _ = c.WriteMessage(TextMessage, []byte{}) }()723:6discarded-error-result
conn_test.go:723:6
_ = c.WriteMessage(TextMessage, []byte{}) t.Fatal("should not get here")729:7unused-receiver
conn_test.go:729:7
func (r failingReader) Read(p []byte) (int, error) { return 0, io.EOF729:29unused-parameter
conn_test.go:729:29
func (r failingReader) Read(p []byte) (int, error) { return 0, io.EOF733:6test-parallelism
conn_test.go:733:6
func TestFailedConnectionReadPanic(t *testing.T) { c := newTestConn(failingReader{}, nil, false)743:3excessive-blank-identifiers
conn_test.go:743:3
for i := 0; i < 20000; i++ { _, _, _ = c.ReadMessage() }743:13discarded-error-result
conn_test.go:743:13
for i := 0; i < 20000; i++ { _, _, _ = c.ReadMessage() }doc.go1
1:1format
doc.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt doc.go`
example_test.go6
16:2no-package-var
example_test.go:16:2
var ( c *websocket.Conn req *http.Request17:2no-package-var
example_test.go:17:2
c *websocket.Conn req *http.Request)41:21unused-parameter
example_test.go:41:21
func processMessage(mt int, p []byte) {}41:29unused-parameter
example_test.go:41:29
func processMessage(mt int, p []byte) {}45:6test-parallelism
example_test.go:45:6
// this function when a second example is added.func TestX(t *testing.T) {}45:12unused-parameter
example_test.go:45:12
// this function when a second example is added.func TestX(t *testing.T) {}examples/autobahn/server.go23
1:1format
examples/autobahn/server.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt examples/autobahn/server.go`
6:9package-comments
examples/autobahn/server.go:6:9
// Command server is a test server for the Autobahn WebSockets Test Suite.package main20:5no-package-var
examples/autobahn/server.go:20:5
var upgrader = websocket.Upgrader{ ReadBufferSize: 4096,30:6cognitive-complexity
examples/autobahn/server.go:30:6
// echoCopy echoes messages from the client using io.Copy.func echoCopy(w http.ResponseWriter, r *http.Request, writerOnly bool) { conn, err := upgrader.Upgrade(w, r, nil)30:6cyclomatic-complexity
examples/autobahn/server.go:30:6
// echoCopy echoes messages from the client using io.Copy.func echoCopy(w http.ResponseWriter, r *http.Request, writerOnly bool) { conn, err := upgrader.Upgrade(w, r, nil)30:55flag-parameter
examples/autobahn/server.go:30:55
// echoCopy echoes messages from the client using io.Copy.func echoCopy(w http.ResponseWriter, r *http.Request, writerOnly bool) { conn, err := upgrader.Upgrade(w, r, nil)46:4modifies-parameter
examples/autobahn/server.go:46:4
if mt == websocket.TextMessage { r = &validator{r: r} }54:4modifies-parameter
examples/autobahn/server.go:54:4
if mt == websocket.TextMessage { r = &validator{r: r} }57:21nested-structs
examples/autobahn/server.go:57:21
if writerOnly { _, err = io.Copy(struct{ io.Writer }{w}, r) } else {63:5discarded-error-result
examples/autobahn/server.go:63:5
if err == errInvalidUTF8 { conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseInvalidFramePayloadData, ""),88:6cognitive-complexity
examples/autobahn/server.go:88:6
// with io.ReadAll.func echoReadAll(w http.ResponseWriter, r *http.Request, writeMessage, writePrepared bool) { conn, err := upgrader.Upgrade(w, r, nil)88:6cyclomatic-complexity
examples/autobahn/server.go:88:6
// with io.ReadAll.func echoReadAll(w http.ResponseWriter, r *http.Request, writeMessage, writePrepared bool) { conn, err := upgrader.Upgrade(w, r, nil)88:58flag-parameter
examples/autobahn/server.go:88:58
// with io.ReadAll.func echoReadAll(w http.ResponseWriter, r *http.Request, writeMessage, writePrepared bool) { conn, err := upgrader.Upgrade(w, r, nil)88:72flag-parameter
examples/autobahn/server.go:88:72
// with io.ReadAll.func echoReadAll(w http.ResponseWriter, r *http.Request, writeMessage, writePrepared bool) { conn, err := upgrader.Upgrade(w, r, nil)105:5discarded-error-result
examples/autobahn/server.go:105:5
if !utf8.Valid(b) { conn.WriteControl(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseInvalidFramePayloadData, ""),168:2discarded-error-result
examples/autobahn/server.go:168:2
w.Header().Set("Content-Type", "text/html; charset=utf-8") io.WriteString(w, "<html><body>Echo Server</body></html>")}171:1top-level-declaration-order
examples/autobahn/server.go:171:1
var addr = flag.String("addr", ":9000", "http service address")171:5no-package-var
examples/autobahn/server.go:171:5
var addr = flag.String("addr", ":9000", "http service address")193:5no-package-var
examples/autobahn/server.go:193:5
var errInvalidUTF8 = errors.New("invalid utf8")234:5no-package-var
examples/autobahn/server.go:234:5
// IN THE SOFTWARE.var utf8d = [...]byte{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1f259:3modifies-parameter
examples/autobahn/server.go:259:3
if state != utf8Accept { x = rune(b&0x3f) | (x << 6) } else {261:3modifies-parameter
examples/autobahn/server.go:261:3
} else { x = rune((0xff >> t) & b) }263:2modifies-parameter
examples/autobahn/server.go:263:2
} state = int(utf8d[256+state*16+int(t)]) return state, xexamples/chat/client.go16
1:1format
examples/chat/client.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt examples/chat/client.go`
5:9package-comments
examples/chat/client.go:5:9
package main31:2no-package-var
examples/chat/client.go:31:2
var ( newline = []byte{'\n'} space = []byte{' '}32:2no-package-var
examples/chat/client.go:32:2
newline = []byte{'\n'} space = []byte{' '})35:5no-package-var
examples/chat/client.go:35:5
var upgrader = websocket.Upgrader{ ReadBufferSize: 1024,59:3discarded-error-result
examples/chat/client.go:59:3
c.hub.unregister <- c c.conn.Close() }()62:2discarded-error-result
examples/chat/client.go:62:2
c.conn.SetReadLimit(maxMessageSize) c.conn.SetReadDeadline(time.Now().Add(pongWait)) c.conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })63:45discarded-error-result
examples/chat/client.go:63:45
c.conn.SetReadDeadline(time.Now().Add(pongWait)) c.conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil }) for {82:18cognitive-complexity
examples/chat/client.go:82:18
// executing all writes from this goroutine.func (c *Client) writePump() { ticker := time.NewTicker(pingPeriod)86:3discarded-error-result
examples/chat/client.go:86:3
ticker.Stop() c.conn.Close() }()91:4discarded-error-result
examples/chat/client.go:91:4
case message, ok := <-c.send: c.conn.SetWriteDeadline(time.Now().Add(writeWait)) if !ok {94:5discarded-error-result
examples/chat/client.go:94:5
// The hub closed the channel. c.conn.WriteMessage(websocket.CloseMessage, []byte{}) return102:4discarded-error-result
examples/chat/client.go:102:4
} w.Write(message)107:5discarded-error-result
examples/chat/client.go:107:5
for i := 0; i < n; i++ { w.Write(newline) w.Write(<-c.send)108:5discarded-error-result
examples/chat/client.go:108:5
w.Write(newline) w.Write(<-c.send) }115:4discarded-error-result
examples/chat/client.go:115:4
case <-ticker.C: c.conn.SetWriteDeadline(time.Now().Add(writeWait)) if err := c.conn.WriteMessage(websocket.PingMessage, nil); err != nil {examples/chat/hub.go3
5:9package-comments
examples/chat/hub.go:5:9
package main9:6exported-declaration-comment
examples/chat/hub.go:9:6
// clients.type Hub struct { // Registered clients.32:15cognitive-complexity
examples/chat/hub.go:32:15
func (h *Hub) run() { for {examples/chat/main.go2
5:9package-comments
examples/chat/main.go:5:9
package main13:5no-package-var
examples/chat/main.go:13:5
var addr = flag.String("addr", ":8080", "http service address")examples/command/main.go21
1:1format
examples/command/main.go:1:1
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt examples/command/main.go`
5:9package-comments
examples/command/main.go:5:9
package main21:2no-package-var
examples/command/main.go:21:2
var ( addr = flag.String("addr", "127.0.0.1:8080", "http service address") cmdPath string22:2no-package-var
examples/command/main.go:22:2
addr = flag.String("addr", "127.0.0.1:8080", "http service address") cmdPath string)25:1top-level-declaration-order
examples/command/main.go:25:1
const ( // Time allowed to write a message to the peer.45:2discarded-error-result
examples/command/main.go:45:2
ws.SetReadLimit(maxMessageSize) ws.SetReadDeadline(time.Now().Add(pongWait)) ws.SetPongHandler(func(string) error { ws.SetReadDeadline(time.Now().Add(pongWait)); return nil })46:41discarded-error-result
examples/command/main.go:46:41
ws.SetReadDeadline(time.Now().Add(pongWait)) ws.SetPongHandler(func(string) error { ws.SetReadDeadline(time.Now().Add(pongWait)); return nil }) for {59:60nested-structs
examples/command/main.go:59:60
func pumpStdout(ws *websocket.Conn, r io.Reader, done chan struct{}) { defer func() {64:3discarded-error-result
examples/command/main.go:64:3
for s.Scan() { ws.SetWriteDeadline(time.Now().Add(writeWait)) if err := ws.WriteMessage(websocket.TextMessage, s.Bytes()); err != nil {66:4discarded-error-result
examples/command/main.go:66:4
if err := ws.WriteMessage(websocket.TextMessage, s.Bytes()); err != nil { ws.Close() break75:2discarded-error-result
examples/command/main.go:75:2
ws.SetWriteDeadline(time.Now().Add(writeWait)) ws.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))76:2discarded-error-result
examples/command/main.go:76:2
ws.SetWriteDeadline(time.Now().Add(writeWait)) ws.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) time.Sleep(closeGracePeriod)78:2discarded-error-result
examples/command/main.go:78:2
time.Sleep(closeGracePeriod) ws.Close()}81:41nested-structs
examples/command/main.go:81:41
func ping(ws *websocket.Conn, done chan struct{}) { ticker := time.NewTicker(pingPeriod)98:2discarded-error-result
examples/command/main.go:98:2
log.Println(msg, err) ws.WriteMessage(websocket.TextMessage, []byte("Internal server error."))}101:5no-package-var
examples/command/main.go:101:5
var upgrader = websocket.Upgrader{}103:6cognitive-complexity
examples/command/main.go:103:6
func serveWs(w http.ResponseWriter, r *http.Request) { ws, err := upgrader.Upgrade(w, r, nil)136:2discarded-error-result
examples/command/main.go:136:2
inr.Close() outw.Close()137:2discarded-error-result
examples/command/main.go:137:2
inr.Close() outw.Close()139:26nested-structs
examples/command/main.go:139:26
stdoutDone := make(chan struct{}) go pumpStdout(ws, outr, stdoutDone)146:2discarded-error-result
examples/command/main.go:146:2
// Some commands will exit when stdin is closed. inw.Close()examples/echo/client.go7
1:1format
examples/echo/client.go:1:1
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt examples/echo/client.go`
6:1redundant-build-tag
examples/echo/client.go:6:1
//go:build ignore// +build ignore8:9package-comments
examples/echo/client.go:8:9
package main21:5no-package-var
examples/echo/client.go:21:5
var addr = flag.String("addr", "localhost:8080", "http service address")23:6cognitive-complexity
examples/echo/client.go:23:6
func main() { flag.Parse()23:6cyclomatic-complexity
examples/echo/client.go:23:6
func main() { flag.Parse()39:20nested-structs
examples/echo/client.go:39:20
done := make(chan struct{})examples/echo/server.go8
1:1format
examples/echo/server.go:1:1
// Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt examples/echo/server.go`
6:1redundant-build-tag
examples/echo/server.go:6:1
//go:build ignore// +build ignore8:9package-comments
examples/echo/server.go:8:9
package main19:5no-package-var
examples/echo/server.go:19:5
var addr = flag.String("addr", "localhost:8080", "http service address")21:5no-package-var
examples/echo/server.go:21:5
var upgrader = websocket.Upgrader{} // use default options23:6cognitive-complexity
examples/echo/server.go:23:6
func echo(w http.ResponseWriter, r *http.Request) { c, err := upgrader.Upgrade(w, r, nil)46:26insecure-url-scheme
examples/echo/server.go:46:26
func home(w http.ResponseWriter, r *http.Request) { homeTemplate.Execute(w, "ws://"+r.Host+"/echo")}57:5no-package-var
examples/echo/server.go:57:5
var homeTemplate = template.Must(template.New("").Parse(`<!DOCTYPE html>examples/filewatch/main.go16
1:1format
examples/filewatch/main.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt examples/filewatch/main.go`
5:9package-comments
examples/filewatch/main.go:5:9
package main34:2no-package-var
examples/filewatch/main.go:34:2
var ( addr = flag.String("addr", ":8080", "http service address") homeTempl = template.Must(template.New("").Parse(homeHTML))35:2no-package-var
examples/filewatch/main.go:35:2
addr = flag.String("addr", ":8080", "http service address") homeTempl = template.Must(template.New("").Parse(homeHTML)) filename string36:2no-package-var
examples/filewatch/main.go:36:2
homeTempl = template.Must(template.New("").Parse(homeHTML)) filename string upgrader = websocket.Upgrader{37:2no-package-var
examples/filewatch/main.go:37:2
filename string upgrader = websocket.Upgrader{ ReadBufferSize: 1024,61:2discarded-error-result
examples/filewatch/main.go:61:2
ws.SetReadLimit(512) ws.SetReadDeadline(time.Now().Add(pongWait)) ws.SetPongHandler(func(string) error { ws.SetReadDeadline(time.Now().Add(pongWait)); return nil })62:41discarded-error-result
examples/filewatch/main.go:62:41
ws.SetReadDeadline(time.Now().Add(pongWait)) ws.SetPongHandler(func(string) error { ws.SetReadDeadline(time.Now().Add(pongWait)); return nil }) for {71:6cognitive-complexity
examples/filewatch/main.go:71:6
func writer(ws *websocket.Conn, lastMod time.Time) { lastError := ""78:3discarded-error-result
examples/filewatch/main.go:78:3
fileTicker.Stop() ws.Close() }()86:7modifies-parameter
examples/filewatch/main.go:86:7
p, lastMod, err = readFileIfModified(lastMod)98:5discarded-error-result
examples/filewatch/main.go:98:5
if p != nil { ws.SetWriteDeadline(time.Now().Add(writeWait)) if err := ws.WriteMessage(websocket.TextMessage, p); err != nil {104:4discarded-error-result
examples/filewatch/main.go:104:4
case <-pingTicker.C: ws.SetWriteDeadline(time.Now().Add(writeWait)) if err := ws.WriteMessage(websocket.PingMessage, []byte{}); err != nil {145:10nested-structs
examples/filewatch/main.go:145:10
} var v = struct { Host string154:2discarded-error-result
examples/filewatch/main.go:154:2
} homeTempl.Execute(w, &v)}170:1top-level-declaration-order
examples/filewatch/main.go:170:1
const homeHTML = `<!DOCTYPE html><html lang="en">join.go4
1:1format
join.go:1:1
// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt join.go`
5:9package-comments
join.go:5:9
package websocket15:6exported-declaration-comment
join.go:15:6
// support concurrent calls to the Read method.func JoinMessages(c *Conn, term string) io.Reader { return &joinReader{c: c, term: term}19:1top-level-declaration-order
join.go:19:1
type joinReader struct { c *Connjoin_test.go4
1:1format
join_test.go:1:1
// Copyright 2019 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt join_test.go`
14:6cognitive-complexity
join_test.go:14:6
func TestJoinMessages(t *testing.T) { messages := []string{"a", "bc", "def", "ghij", "klmno", "0", "12", "345", "6789"}14:6test-parallelism
join_test.go:14:6
func TestJoinMessages(t *testing.T) { messages := []string{"a", "bc", "def", "ghij", "klmno", "0", "12", "345", "6789"}22:9discarded-error-result
join_test.go:22:9
for _, m := range messages { _ = wc.WriteMessage(BinaryMessage, []byte(m)) }json.go9
5:9package-comments
json.go:5:9
package websocket15:6exported-declaration-comment
json.go:15:6
// Deprecated: Use c.WriteJSON instead.func WriteJSON(c *Conn, v interface{}) error { return c.WriteJSON(v)15:27use-any
json.go:15:27
// Deprecated: Use c.WriteJSON instead.func WriteJSON(c *Conn, v interface{}) error { return c.WriteJSON(v)23:16exported-declaration-comment
json.go:23:16
// conversion of Go values to JSON.func (c *Conn) WriteJSON(v interface{}) error { w, err := c.NextWriter(TextMessage)23:28use-any
json.go:23:28
// conversion of Go values to JSON.func (c *Conn) WriteJSON(v interface{}) error { w, err := c.NextWriter(TextMessage)40:6exported-declaration-comment
json.go:40:6
// Deprecated: Use c.ReadJSON instead.func ReadJSON(c *Conn, v interface{}) error { return c.ReadJSON(v)40:26use-any
json.go:40:26
// Deprecated: Use c.ReadJSON instead.func ReadJSON(c *Conn, v interface{}) error { return c.ReadJSON(v)49:16exported-declaration-comment
json.go:49:16
// about the conversion of JSON to a Go value.func (c *Conn) ReadJSON(v interface{}) error { _, r, err := c.NextReader()49:27use-any
json.go:49:27
// about the conversion of JSON to a Go value.func (c *Conn) ReadJSON(v interface{}) error { _, r, err := c.NextReader()json_test.go9
15:6test-parallelism
json_test.go:15:6
func TestJSON(t *testing.T) { var buf bytes.Buffer20:21nested-structs
json_test.go:20:21
var actual, expect struct { A int40:6cognitive-complexity
json_test.go:40:6
func TestPartialJSONRead(t *testing.T) { var buf0, buf1 bytes.Buffer40:6test-parallelism
json_test.go:40:6
func TestPartialJSONRead(t *testing.T) { var buf0, buf1 bytes.Buffer45:8nested-structs
json_test.go:45:8
var v struct { A int93:6test-parallelism
json_test.go:93:6
func TestDeprecatedJSON(t *testing.T) { var buf bytes.Buffer98:21nested-structs
json_test.go:98:21
var actual, expect struct { A int103:13add-constant
json_test.go:103:13
expect.A = 1 expect.B = "hello"110:11add-constant
json_test.go:110:11
if err := ReadJSON(rc, &actual); err != nil { t.Fatal("read", err) }mask.go12
6:1redundant-build-tag
mask.go:6:1
//go:build !appengine// +build !appengine8:9package-comments
mask.go:8:9
package websocket12:36redundant-conversion
mask.go:12:36
const wordSize = int(unsafe.Sizeof(uintptr(0)))14:6cognitive-complexity
mask.go:14:6
func maskBytes(key [4]byte, pos int, b []byte) int { // Mask one byte at a time for small buffers.18:4modifies-parameter
mask.go:18:4
for i := range b { b[i] ^= key[pos&3] pos++19:4modifies-parameter
mask.go:19:4
b[i] ^= key[pos&3] pos++ }28:4modifies-parameter
mask.go:28:4
for i := range b[:n] { b[i] ^= key[pos&3] pos++29:4modifies-parameter
mask.go:29:4
b[i] ^= key[pos&3] pos++ }31:3modifies-parameter
mask.go:31:3
} b = b[n:] }48:2modifies-parameter
mask.go:48:2
// Mask one byte at a time for remaining bytes. b = b[n:] for i := range b {50:3modifies-parameter
mask.go:50:3
for i := range b { b[i] ^= key[pos&3] pos++51:3modifies-parameter
mask.go:51:3
b[i] ^= key[pos&3] pos++ }mask_safe.go4
6:1redundant-build-tag
mask_safe.go:6:1
//go:build appengine// +build appengine8:9package-comments
mask_safe.go:8:9
package websocket12:3modifies-parameter
mask_safe.go:12:3
for i := range b { b[i] ^= key[pos&3] pos++13:3modifies-parameter
mask_safe.go:13:3
b[i] ^= key[pos&3] pos++ }mask_test.go10
1:1format
mask_test.go:1:1
// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. Use of// this source code is governed by a BSD-style license that can be found in the- Fix (safe): run `strider fmt mask_test.go`
16:3modifies-parameter
mask_test.go:16:3
for i := range b { b[i] ^= key[pos&3] pos++17:3modifies-parameter
mask_test.go:17:3
b[i] ^= key[pos&3] pos++ }31:6cognitive-complexity
mask_test.go:31:6
func TestMaskBytes(t *testing.T) { key := [4]byte{1, 2, 3, 4}31:6test-parallelism
mask_test.go:31:6
func TestMaskBytes(t *testing.T) { key := [4]byte{1, 2, 3, 4}47:6cognitive-complexity
mask_test.go:47:6
func BenchmarkMaskBytes(b *testing.B) { for _, size := range []int{2, 4, 8, 16, 32, 512, 1024} {52:27nested-structs
mask_test.go:52:27
b.Run(fmt.Sprintf("align-%d", align), func(b *testing.B) { for _, fn := range []struct { name string59:22range-value-capture
mask_test.go:59:22
} { b.Run(fn.name, func(b *testing.B) { key := newMaskKey()59:22range-value-capture
mask_test.go:59:22
} { b.Run(fn.name, func(b *testing.B) { key := newMaskKey()59:22range-value-capture
mask_test.go:59:22
} { b.Run(fn.name, func(b *testing.B) { key := newMaskKey()prepared.go11
1:1format
prepared.go:1:1
// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt prepared.go`
5:9package-comments
prepared.go:5:9
package websocket19:6exported-declaration-comment
prepared.go:19:6
// once for a given set of compression options.type PreparedMessage struct { messageType int43:6exported-declaration-comment
prepared.go:43:6
// connection options.func NewPreparedMessage(messageType int, data []byte) (*PreparedMessage, error) { pm := &PreparedMessage{74:3task-comment
prepared.go:74:3
// Prepare a frame using a 'fake' connection. // TODO: Refactor code in conn.go to allow more direct construction of // the frame.76:19nested-structs
prepared.go:76:19
// the frame. mu := make(chan struct{}, 1) mu <- struct{}{}77:9nested-structs
prepared.go:77:9
mu := make(chan struct{}, 1) mu <- struct{}{} var nc prepareConn96:1top-level-declaration-order
prepared.go:96:1
type prepareConn struct { buf bytes.Buffer102:7unused-receiver
prepared.go:102:7
func (pc *prepareConn) Write(p []byte) (int, error) { return pc.buf.Write(p) }func (pc *prepareConn) SetWriteDeadline(t time.Time) error { return nil }102:24exported-declaration-comment
prepared.go:102:24
func (pc *prepareConn) Write(p []byte) (int, error) { return pc.buf.Write(p) }func (pc *prepareConn) SetWriteDeadline(t time.Time) error { return nil }102:41unused-parameter
prepared.go:102:41
func (pc *prepareConn) Write(p []byte) (int, error) { return pc.buf.Write(p) }func (pc *prepareConn) SetWriteDeadline(t time.Time) error { return nil }prepared_test.go4
1:1format
prepared_test.go:1:1
// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt prepared_test.go`
14:5no-package-var
prepared_test.go:14:5
var preparedMessageTests = []struct { messageType int14:30nested-structs
prepared_test.go:14:30
var preparedMessageTests = []struct { messageType int35:6cognitive-complexity
prepared_test.go:35:6
func TestPreparedMessage(t *testing.T) { testRand := rand.New(rand.NewSource(99))proxy.go11
1:1format
proxy.go:1:1
// Copyright 2017 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt proxy.go`
5:9package-comments
proxy.go:5:9
package websocket23:25exported-declaration-comment
proxy.go:23:25
func (fn netDialerFunc) Dial(network, addr string) (net.Conn, error) { return fn(context.Background(), network, addr)27:25exported-declaration-comment
proxy.go:27:25
func (fn netDialerFunc) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { return fn(ctx, network, addr)42:35import-shadowing
proxy.go:42:35
} return func(ctx context.Context, net, addr string) (net.Conn, error) { return dialer.Dial(net, addr)47:1top-level-declaration-order
proxy.go:47:1
type httpProxyDialer struct { proxyURL *url.URL52:29exported-declaration-comment
proxy.go:52:29
func (hpd *httpProxyDialer) DialContext(ctx context.Context, network string, addr string) (net.Conn, error) { hostPort, _ := hostPortNoPort(hpd.proxyURL)75:3discarded-error-result
proxy.go:75:3
if err := connectReq.Write(conn); err != nil { conn.Close() return nil, err84:3discarded-error-result
proxy.go:84:3
if err != nil { conn.Close() return nil, err96:6discarded-error-result
proxy.go:96:6
br.Reset(bytes.NewReader(nil)) _ = resp.Body.Close()99:7discarded-error-result
proxy.go:99:7
if resp.StatusCode != http.StatusOK { _ = conn.Close() f := strings.SplitN(resp.Status, " ", 2)server.go18
1:1format
server.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt server.go`
5:9package-comments
server.go:5:9
package websocket27:1top-level-declaration-order
server.go:27:1
// It is safe to call Upgrader's methods concurrently.type Upgrader struct { // HandshakeTimeout specifies the duration for the handshake to complete.27:6exported-declaration-comment
server.go:27:6
// It is safe to call Upgrader's methods concurrently.type Upgrader struct { // HandshakeTimeout specifies the duration for the handshake to complete.100:20cognitive-complexity
server.go:100:20
func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header) string { if u.Subprotocols != nil {124:20cognitive-complexity
server.go:124:20
// response.func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { const badHandshake = "websocket: the client is not using the websocket protocol: "124:20cyclomatic-complexity
server.go:124:20
// response.func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { const badHandshake = "websocket: the client is not using the websocket protocol: "124:20exported-declaration-comment
server.go:124:20
// response.func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { const badHandshake = "websocket: the client is not using the websocket protocol: "124:20function-length
server.go:124:20
// response.func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error) { const badHandshake = "websocket: the client is not using the websocket protocol: "189:8discarded-error-result
server.go:189:8
// application. _ = netConn.Close() }254:18add-constant
server.go:254:18
} p = append(p, "\r\n"...) }316:6exported-declaration-comment
server.go:316:6
// 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}330:6exported-declaration-comment
server.go:330:6
// Sec-Websocket-Protocol header.func Subprotocols(r *http.Request) []string { h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol"))331:38add-constant
server.go:331:38
func Subprotocols(r *http.Request) []string { h := strings.TrimSpace(r.Header.Get("Sec-Websocket-Protocol")) if h == "" {344:6exported-declaration-comment
server.go:344:6
// WebSocket protocol.func IsWebSocketUpgrade(r *http.Request) bool { return tokenListContainsValue(r.Header, "Connection", "upgrade") &&346:36add-constant
server.go:346:36
return tokenListContainsValue(r.Header, "Connection", "upgrade") && tokenListContainsValue(r.Header, "Upgrade", "websocket")}346:47add-constant
server.go:346:47
return tokenListContainsValue(r.Header, "Connection", "upgrade") && tokenListContainsValue(r.Header, "Upgrade", "websocket")}358:4modifies-parameter
server.go:358:4
if n := b.br.Buffered(); len(p) > n { p = p[:n] }server_test.go29
1:1format
server_test.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt server_test.go`
19:5no-package-var
server_test.go:19:5
var subprotocolTests = []struct { h string19:26nested-structs
server_test.go:19:26
var subprotocolTests = []struct { h string31:6test-parallelism
server_test.go:31:6
func TestSubprotocols(t *testing.T) { for _, st := range subprotocolTests {36:13error-strings
server_test.go:36:13
if !reflect.DeepEqual(st.protocols, protocols) { t.Errorf("SubProtocols(%q) returned %#v, want %#v", st.h, protocols, st.protocols) }41:1top-level-declaration-order
server_test.go:41:1
var isWebSocketUpgradeTests = []struct { ok bool41:5no-package-var
server_test.go:41:5
var isWebSocketUpgradeTests = []struct { ok bool41:33nested-structs
server_test.go:41:33
var isWebSocketUpgradeTests = []struct { ok bool50:6test-parallelism
server_test.go:50:6
func TestIsWebSocketUpgrade(t *testing.T) { for _, tt := range isWebSocketUpgradeTests {52:28range-value-address
server_test.go:52:28
for _, tt := range isWebSocketUpgradeTests { ok := IsWebSocketUpgrade(&http.Request{Header: tt.h}) if tt.ok != ok {54:13error-strings
server_test.go:54:13
if tt.ok != ok { t.Errorf("IsWebSocketUpgrade(%v) returned %v, want %v", tt.h, ok, tt.ok) }59:6test-parallelism
server_test.go:59:6
func TestSubProtocolSelection(t *testing.T) { upgrader := Upgrader{66:10add-constant
server_test.go:66:10
s := upgrader.selectSubprotocol(&r, nil) if s != "foo" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "foo")67:12error-strings
server_test.go:67:12
if s != "foo" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "foo") }70:39add-constant
server_test.go:70:39
r = http.Request{Header: http.Header{"Sec-Websocket-Protocol": {"bar", "foo"}}} s = upgrader.selectSubprotocol(&r, nil)70:66add-constant
server_test.go:70:66
r = http.Request{Header: http.Header{"Sec-Websocket-Protocol": {"bar", "foo"}}} s = upgrader.selectSubprotocol(&r, nil)73:12error-strings
server_test.go:73:12
if s != "bar" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "bar") }78:10add-constant
server_test.go:78:10
s = upgrader.selectSubprotocol(&r, nil) if s != "baz" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "baz")79:12add-constant
server_test.go:79:12
if s != "baz" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "baz") }79:12error-strings
server_test.go:79:12
if s != "baz" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "baz") }85:12error-strings
server_test.go:85:12
if s != "" { t.Errorf("Upgrader.selectSubprotocol returned %v, want %v", s, "empty string") }89:5no-package-var
server_test.go:89:5
var checkSameOriginTests = []struct { ok bool89:30nested-structs
server_test.go:89:30
var checkSameOriginTests = []struct { ok bool98:6test-parallelism
server_test.go:98:6
func TestCheckSameOrigin(t *testing.T) { for _, tt := range checkSameOriginTests {112:38exported-declaration-comment
server_test.go:112:38
func (resp *reuseTestResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { return fakeNetConn{strings.NewReader(""), &bytes.Buffer{}}, resp.brw, nil116:5no-package-var
server_test.go:116:5
var bufioReuseTests = []struct { n int116:25nested-structs
server_test.go:116:25
var bufioReuseTests = []struct { n int156:45insecure-url-scheme
server_test.go:156:45
req := httptest.NewRequest(http.MethodGet, "http://example.com", nil) req.Header.Set("Upgrade", "websocket")167:33optimize-operands-order
server_test.go:167:33
if want := (HandshakeError{}); !errors.As(err, &want) || recorder.Code != http.StatusInternalServerError { t.Errorf("want %T and status_code=%d", want, http.StatusInternalServerError)util.go18
1:1format
util.go:1:1
// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt util.go`
5:9package-comments
util.go:5:9
package websocket17:5no-package-var
util.go:17:5
var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11")20:7weak-cryptography
util.go:20:7
func computeAcceptKey(challengeKey string) string { h := sha1.New() h.Write([]byte(challengeKey))35:1top-level-declaration-order
util.go:35:1
// Token octets per RFC 2616.var isTokenOctet = [256]bool{ '!': true,35:5no-package-var
util.go:35:5
// Token octets per RFC 2616.var isTokenOctet = [256]bool{ '!': true,141:6cognitive-complexity
util.go:141:6
// and the string following the token or quoted string.func nextTokenOrQuoted(s string) (value string, rest string) { if !strings.HasPrefix(s, "\"") {145:2modifies-parameter
util.go:145:2
} s = s[1:] for i := 0; i < len(s); i++ {147:3single-case-switch
util.go:147:3
for i := 0; i < len(s); i++ { switch s[i] { case '"':154:8increment-decrement
util.go:154:8
escape := true for i = i + 1; i < len(s); i++ { b := s[i]156:5single-case-switch
util.go:156:5
b := s[i] switch { case escape:178:6cognitive-complexity
util.go:178:6
// defined in RFC 4790.func equalASCIIFold(s, t string) bool { for s != "" && t != "" {181:3modifies-parameter
util.go:181:3
sr, size := utf8.DecodeRuneInString(s) s = s[size:] tr, size := utf8.DecodeRuneInString(t)183:3modifies-parameter
util.go:183:3
tr, size := utf8.DecodeRuneInString(t) t = t[size:] if sr == tr {202:6cognitive-complexity
util.go:202:6
// name contains a token equal to value with ASCII case folding.func tokenListContainsValue(header http.Header, name string, value string) bool {headers:228:6cognitive-complexity
util.go:228:6
// parseExtensions parses WebSocket extensions from a header.func parseExtensions(header http.Header) []map[string]string { // From RFC 6455:228:6cyclomatic-complexity
util.go:228:6
// parseExtensions parses WebSocket extensions from a header.func parseExtensions(header http.Header) []map[string]string { // From RFC 6455:267:8optimize-operands-order
util.go:267:8
} if s != "" && s[0] != ',' && s[0] != ';' { continue headersutil_test.go14
1:1format
util_test.go:1:1
// Copyright 2014 The Gorilla WebSocket Authors. All rights reserved.// Use of this source code is governed by a BSD-style- Fix (safe): run `strider fmt util_test.go`
13:5no-package-var
util_test.go:13:5
var equalASCIIFoldTests = []struct { t, s string13:29nested-structs
util_test.go:13:29
var equalASCIIFoldTests = []struct { t, s string23:6test-parallelism
util_test.go:23:6
func TestEqualASCIIFold(t *testing.T) { for _, tt := range equalASCIIFoldTests {32:1top-level-declaration-order
util_test.go:32:1
var tokenListContainsValueTests = []struct { value string32:5no-package-var
util_test.go:32:5
var tokenListContainsValueTests = []struct { value string32:37nested-structs
util_test.go:32:37
var tokenListContainsValueTests = []struct { value string46:6test-parallelism
util_test.go:46:6
func TestTokenListContainsValue(t *testing.T) { for _, tt := range tokenListContainsValueTests {56:5no-package-var
util_test.go:56:5
var isValidChallengeKeyTests = []struct { key string56:34nested-structs
util_test.go:56:34
var isValidChallengeKeyTests = []struct { key string66:6test-parallelism
util_test.go:66:6
func TestIsValidChallengeKey(t *testing.T) { for _, tt := range isValidChallengeKeyTests {75:5no-package-var
util_test.go:75:5
var parseExtensionTests = []struct { value string75:29nested-structs
util_test.go:75:29
var parseExtensionTests = []struct { value string107:6test-parallelism
util_test.go:107:6
func TestParseExtensions(t *testing.T) { for _, tt := range parseExtensionTests {