|
@@ -10,6 +10,7 @@ import (
|
|
|
"errors"
|
|
"errors"
|
|
|
"io"
|
|
"io"
|
|
|
"io/ioutil"
|
|
"io/ioutil"
|
|
|
|
|
+ "math/rand"
|
|
|
"net"
|
|
"net"
|
|
|
"strconv"
|
|
"strconv"
|
|
|
"sync"
|
|
"sync"
|
|
@@ -180,6 +181,11 @@ var (
|
|
|
errInvalidControlFrame = errors.New("websocket: invalid control frame")
|
|
errInvalidControlFrame = errors.New("websocket: invalid control frame")
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+func newMaskKey() [4]byte {
|
|
|
|
|
+ n := rand.Uint32()
|
|
|
|
|
+ return [4]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)}
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
func hideTempErr(err error) error {
|
|
func hideTempErr(err error) error {
|
|
|
if e, ok := err.(net.Error); ok && e.Temporary() {
|
|
if e, ok := err.(net.Error); ok && e.Temporary() {
|
|
|
err = &netError{msg: e.Error(), timeout: e.Timeout()}
|
|
err = &netError{msg: e.Error(), timeout: e.Timeout()}
|