summaryrefslogtreecommitdiff
path: root/vendor/github.com/gorilla/websocket/conn.go
diff options
context:
space:
mode:
authorLibravatar Daenney <daenney@users.noreply.github.com>2024-11-25 11:50:03 +0100
committerLibravatar GitHub <noreply@github.com>2024-11-25 10:50:03 +0000
commit2ed409888b988115433b5eddb62ca38c00c68325 (patch)
tree2196f46b63191bc79b9dab096ac52e5db877a24f /vendor/github.com/gorilla/websocket/conn.go
parent[chore]: Bump github.com/tdewolff/minify/v2 from 2.21.1 to 2.21.2 (#3567) (diff)
downloadgotosocial-2ed409888b988115433b5eddb62ca38c00c68325.tar.xz
[chore] Update gorilla/websocket (#3561)
The maintainers messed with the v1.5.2 tag which causes Go checksum validation problems as the Go module proxy saw and recorded the original hash. This updates to 1.5.3 which doesn't have the issue.
Diffstat (limited to 'vendor/github.com/gorilla/websocket/conn.go')
-rw-r--r--vendor/github.com/gorilla/websocket/conn.go72
1 files changed, 28 insertions, 44 deletions
diff --git a/vendor/github.com/gorilla/websocket/conn.go b/vendor/github.com/gorilla/websocket/conn.go
index 49399b120..5161ef81f 100644
--- a/vendor/github.com/gorilla/websocket/conn.go
+++ b/vendor/github.com/gorilla/websocket/conn.go
@@ -6,10 +6,11 @@ package websocket
import (
"bufio"
- "crypto/rand"
"encoding/binary"
"errors"
"io"
+ "io/ioutil"
+ "math/rand"
"net"
"strconv"
"strings"
@@ -180,16 +181,16 @@ var (
errInvalidControlFrame = errors.New("websocket: invalid control frame")
)
-// maskRand is an io.Reader for generating mask bytes. The reader is initialized
-// to crypto/rand Reader. Tests swap the reader to a math/rand reader for
-// reproducible results.
-var maskRand = rand.Reader
-
-// newMaskKey returns a new 32 bit value for masking client frames.
func newMaskKey() [4]byte {
- var k [4]byte
- _, _ = io.ReadFull(maskRand, k[:])
- return k
+ n := rand.Uint32()
+ return [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)}
+}
+
+func hideTempErr(err error) error {
+ if e, ok := err.(net.Error); ok && e.Temporary() {
+ err = &netError{msg: e.Error(), timeout: e.Timeout()}
+ }
+ return err
}
func isControl(frameType int) bool {
@@ -357,6 +358,7 @@ func (c *Conn) RemoteAddr() net.Addr {
// Write methods
func (c *Conn) writeFatal(err error) error {
+ err = hideTempErr(err)
c.writeErrMu.Lock()
if c.writeErr == nil {
c.writeErr = err
@@ -434,27 +436,21 @@ func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) er
maskBytes(key, 0, buf[6:])
}
- if deadline.IsZero() {
- // No timeout for zero time.
- <-c.mu
- } else {
- d := time.Until(deadline)
+ d := 1000 * time.Hour
+ if !deadline.IsZero() {
+ d = deadline.Sub(time.Now())
if d < 0 {
return errWriteTimeout
}
- select {
- case <-c.mu:
- default:
- timer := time.NewTimer(d)
- select {
- case <-c.mu:
- timer.Stop()
- case <-timer.C:
- return errWriteTimeout
- }
- }
}
+ timer := time.NewTimer(d)
+ select {
+ case <-c.mu:
+ timer.Stop()
+ case <-timer.C:
+ return errWriteTimeout
+ }
defer func() { c.mu <- struct{}{} }()
c.writeErrMu.Lock()
@@ -799,7 +795,7 @@ func (c *Conn) advanceFrame() (int, error) {
// 1. Skip remainder of previous frame.
if c.readRemaining > 0 {
- if _, err := io.CopyN(io.Discard, c.br, c.readRemaining); err != nil {
+ if _, err := io.CopyN(ioutil.Discard, c.br, c.readRemaining); err != nil {
return noFrame, err
}
}
@@ -1012,7 +1008,7 @@ func (c *Conn) NextReader() (messageType int, r io.Reader, err error) {
for c.readErr == nil {
frameType, err := c.advanceFrame()
if err != nil {
- c.readErr = err
+ c.readErr = hideTempErr(err)
break
}
@@ -1052,7 +1048,7 @@ func (r *messageReader) Read(b []byte) (int, error) {
b = b[:c.readRemaining]
}
n, err := c.br.Read(b)
- c.readErr = err
+ c.readErr = hideTempErr(err)
if c.isServer {
c.readMaskPos = maskBytes(c.readMaskKey, c.readMaskPos, b[:n])
}
@@ -1073,7 +1069,7 @@ func (r *messageReader) Read(b []byte) (int, error) {
frameType, err := c.advanceFrame()
switch {
case err != nil:
- c.readErr = err
+ c.readErr = hideTempErr(err)
case frameType == TextMessage || frameType == BinaryMessage:
c.readErr = errors.New("websocket: internal error, unexpected text or binary in Reader")
}
@@ -1098,7 +1094,7 @@ func (c *Conn) ReadMessage() (messageType int, p []byte, err error) {
if err != nil {
return messageType, nil, err
}
- p, err = io.ReadAll(r)
+ p, err = ioutil.ReadAll(r)
return messageType, p, err
}
@@ -1165,7 +1161,7 @@ func (c *Conn) SetPingHandler(h func(appData string) error) {
err := c.WriteControl(PongMessage, []byte(message), time.Now().Add(writeWait))
if err == ErrCloseSent {
return nil
- } else if _, ok := err.(net.Error); ok {
+ } else if e, ok := err.(net.Error); ok && e.Temporary() {
return nil
}
return err
@@ -1240,15 +1236,3 @@ func FormatCloseMessage(closeCode int, text string) []byte {
copy(buf[2:], text)
return buf
}
-
-var messageTypes = map[int]string{
- TextMessage: "TextMessage",
- BinaryMessage: "BinaryMessage",
- CloseMessage: "CloseMessage",
- PingMessage: "PingMessage",
- PongMessage: "PongMessage",
-}
-
-func FormatMessageType(mt int) string {
- return messageTypes[mt]
-}