aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2019-03-12 14:18:06 +0700
committerShulhan <ms@kilabit.info>2019-03-12 14:18:06 +0700
commitd7367ec27c04920fc5cb9ef0b1aad140ceac3080 (patch)
tree92433cad5cd34025b9d0a979ce0dca80cfbcef09
parent7233d915b3051ffc996d755dc446563bc94f3a7c (diff)
downloadpakakeh.go-d7367ec27c04920fc5cb9ef0b1aad140ceac3080.tar.xz
websocket: export the opcode type
The opcode type is required to create new frame and to get the opcode in continous frames.
-rw-r--r--lib/websocket/client.go18
-rw-r--r--lib/websocket/client_test.go30
-rw-r--r--lib/websocket/clientmanager.go4
-rw-r--r--lib/websocket/frame.go28
-rw-r--r--lib/websocket/frame_test.go40
-rw-r--r--lib/websocket/frames.go10
-rw-r--r--lib/websocket/frames_test.go48
-rw-r--r--lib/websocket/opcode.go34
-rw-r--r--lib/websocket/server.go42
9 files changed, 126 insertions, 128 deletions
diff --git a/lib/websocket/client.go b/lib/websocket/client.go
index 5ab94913..05a3f778 100644
--- a/lib/websocket/client.go
+++ b/lib/websocket/client.go
@@ -256,7 +256,7 @@ func (cl *Client) connect() (err error) {
// If handler is nil, no response will be read from server.
//
func (cl *Client) SendBin(ctx context.Context, bin []byte, handler ClientRecvHandler) error {
- return cl.sendData(ctx, bin, opcodeBin, handler)
+ return cl.sendData(ctx, bin, OpcodeBin, handler)
}
//
@@ -299,7 +299,7 @@ func (cl *Client) SendPong(payload []byte) error {
// If handler is nil, no response will be read from server.
//
func (cl *Client) SendText(ctx context.Context, text []byte, handler ClientRecvHandler) (err error) {
- return cl.sendData(ctx, text, opcodeText, handler)
+ return cl.sendData(ctx, text, OpcodeText, handler)
}
//
@@ -328,11 +328,11 @@ func (cl *Client) Recv() (frames *Frames, err error) {
}
for _, f := range fs.v {
switch f.opcode {
- case opcodePing:
+ case OpcodePing:
cl.pingQueue <- f
- case opcodePong:
+ case OpcodePong:
// Ignore control PONG frame.
- case opcodeClose:
+ case OpcodeClose:
frames.Append(f)
goto out
default:
@@ -377,7 +377,7 @@ func (cl *Client) handleClose(ctx context.Context, packet []byte) error {
if f == nil {
return fmt.Errorf("websocket: Client.handleClose: empty response")
}
- if f.opcode != opcodeClose {
+ if f.opcode != OpcodeClose {
return fmt.Errorf("websocket: Client.handleClose: expecting CLOSE frame, got %d",
f.opcode)
}
@@ -393,7 +393,7 @@ func handlePing(ctx context.Context, packet []byte) error {
if f == nil {
return fmt.Errorf("websocket: Client.handlePing: empty response")
}
- if f.opcode != opcodePong {
+ if f.opcode != OpcodePong {
return fmt.Errorf("websocket: Client.handlePing: expecting PONG frame, got %d",
f.opcode)
}
@@ -469,7 +469,7 @@ func (cl *Client) send(ctx context.Context, req []byte, handleRaw clientRawHandl
return nil
}
-func (cl *Client) sendData(ctx context.Context, req []byte, opcode opcode, handler ClientRecvHandler) (err error) {
+func (cl *Client) sendData(ctx context.Context, req []byte, opcode Opcode, handler ClientRecvHandler) (err error) {
cl.Lock()
if cl.conn == nil {
cl.Unlock()
@@ -478,7 +478,7 @@ func (cl *Client) sendData(ctx context.Context, req []byte, opcode opcode, handl
var packet []byte
- if opcode == opcodeText {
+ if opcode == OpcodeText {
packet = NewFrameText(true, req)
} else {
packet = NewFrameBin(true, req)
diff --git a/lib/websocket/client_test.go b/lib/websocket/client_test.go
index dd319a12..239c8529 100644
--- a/lib/websocket/client_test.go
+++ b/lib/websocket/client_test.go
@@ -232,11 +232,11 @@ func TestClientFragmentation(t *testing.T) {
desc: "Two text frames, unmasked",
frames: []Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte{'H', 'e', 'l'},
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
payload: []byte{'l', 'o'},
}},
exp: NewFrameClose(false, StatusBadRequest, nil),
@@ -245,15 +245,15 @@ func TestClientFragmentation(t *testing.T) {
reconnect: true,
frames: []Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte("Hel"),
}, {
fin: 0,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
payload: []byte("lo, "),
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
payload: []byte("Shulhan"),
}},
exp: NewFrameClose(false, StatusBadRequest, nil),
@@ -262,17 +262,17 @@ func TestClientFragmentation(t *testing.T) {
reconnect: true,
frames: []Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: frameIsMasked,
payload: []byte("Hel"),
}, {
fin: 0,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
masked: frameIsMasked,
payload: []byte("lo, "),
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
masked: frameIsMasked,
payload: []byte("Shulhan"),
}},
@@ -327,22 +327,22 @@ func TestClientFragmentation2(t *testing.T) {
frames := []Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: frameIsMasked,
payload: []byte("Hel"),
}, {
fin: 0,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
masked: frameIsMasked,
payload: []byte("lo, "),
}, {
fin: frameIsFinished,
- opcode: opcodePing,
+ opcode: OpcodePing,
masked: frameIsMasked,
payload: []byte("PING"),
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
masked: frameIsMasked,
payload: []byte("Shulhan"),
}}
@@ -436,7 +436,7 @@ func TestClientSendBin(t *testing.T) {
payload: []byte("Hello"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
len: 5,
payload: []byte("Hello"),
},
@@ -511,7 +511,7 @@ func TestClientSendPing(t *testing.T) {
handler: testHandlePing,
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
len: 0,
},
}, {
@@ -520,7 +520,7 @@ func TestClientSendPing(t *testing.T) {
payload: []byte("Test"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
len: 4,
payload: []byte("Test"),
},
diff --git a/lib/websocket/clientmanager.go b/lib/websocket/clientmanager.go
index 129a98cf..8197e89a 100644
--- a/lib/websocket/clientmanager.go
+++ b/lib/websocket/clientmanager.go
@@ -101,12 +101,12 @@ func (cls *ClientManager) finFrames(conn int, fin *Frame) (f *Frame) {
f = frames.v[0]
for x := 1; x < len(frames.v); x++ {
- if frames.v[x].opcode == opcodeClose {
+ if frames.v[x].opcode == OpcodeClose {
break
}
// Ignore control PING or PONG frame.
- if frames.v[x].opcode == opcodePing || frames.v[x].opcode == opcodePong {
+ if frames.v[x].opcode == OpcodePing || frames.v[x].opcode == OpcodePong {
continue
}
diff --git a/lib/websocket/frame.go b/lib/websocket/frame.go
index f3c06621..d84aca35 100644
--- a/lib/websocket/frame.go
+++ b/lib/websocket/frame.go
@@ -27,7 +27,7 @@ type Frame struct {
// opcode (4 bits) defines the interpretation of the "Payload data".
// If an unknown opcode is received, the receiving endpoint MUST _Fail
// the WebSocket Connection_. The following values are defined.
- opcode opcode
+ opcode Opcode
//
// masked (1 bit) defines whether the "Payload data" is masked.
@@ -107,7 +107,7 @@ type Frame struct {
// Client frame must be masked.
//
func NewFrameBin(isMasked bool, payload []byte) []byte {
- return NewFrame(opcodeBin, isMasked, payload)
+ return NewFrame(OpcodeBin, isMasked, payload)
}
//
@@ -129,21 +129,21 @@ func NewFrameClose(isMasked bool, code CloseCode, payload []byte) []byte {
binary.BigEndian.PutUint16(packet[:2], uint16(code))
copy(packet[2:], payload)
- return newControlFrame(opcodeClose, isMasked, packet)
+ return newControlFrame(OpcodeClose, isMasked, packet)
}
//
// NewFramePing create a masked PING control frame.
//
func NewFramePing(isMasked bool, payload []byte) (packet []byte) {
- return newControlFrame(opcodePing, isMasked, payload)
+ return newControlFrame(OpcodePing, isMasked, payload)
}
//
// NewFramePong create a masked PONG control frame to be used by client.
//
func NewFramePong(isMasked bool, payload []byte) (packet []byte) {
- return newControlFrame(opcodePong, isMasked, payload)
+ return newControlFrame(OpcodePong, isMasked, payload)
}
//
@@ -151,14 +151,14 @@ func NewFramePong(isMasked bool, payload []byte) (packet []byte) {
// Client frame must be masked.
//
func NewFrameText(isMasked bool, payload []byte) []byte {
- return NewFrame(opcodeText, isMasked, payload)
+ return NewFrame(OpcodeText, isMasked, payload)
}
//
// newControlFrame create new control frame with specific operation code and
// optional payload.
//
-func newControlFrame(opcode opcode, isMasked bool, payload []byte) []byte {
+func newControlFrame(opcode Opcode, isMasked bool, payload []byte) []byte {
if len(payload) > frameSmallPayload {
// All control frames MUST have a payload length of 125 bytes
// or less and MUST NOT be fragmented.
@@ -171,7 +171,7 @@ func newControlFrame(opcode opcode, isMasked bool, payload []byte) []byte {
// NewFrame create a single finished frame with specific operation code and
// optional payload.
//
-func NewFrame(opcode opcode, isMasked bool, payload []byte) []byte {
+func NewFrame(opcode Opcode, isMasked bool, payload []byte) []byte {
f := &Frame{
fin: frameIsFinished,
opcode: opcode,
@@ -224,7 +224,7 @@ func frameUnpack(in []byte) (f *Frame, rest []byte) {
f.rsv1 = in[x] & 0x40
f.rsv2 = in[x] & 0x20
f.rsv3 = in[x] & 0x10
- f.opcode = opcode(in[x] & 0x0F)
+ f.opcode = Opcode(in[x] & 0x0F)
x++
if x >= len(in) {
f.chopped = append(f.chopped, in...)
@@ -307,7 +307,7 @@ func frameUnpack(in []byte) (f *Frame, rest []byte) {
}
x += len(f.payload)
- if f.opcode == opcodeClose {
+ if f.opcode == OpcodeClose {
switch len(f.payload) {
case 0:
f.codes = []byte{0, 0}
@@ -329,13 +329,13 @@ func frameUnpack(in []byte) (f *Frame, rest []byte) {
// IsData return true if frame is either text or binary data frame.
//
func (f *Frame) IsData() bool {
- return f.opcode == opcodeText || f.opcode == opcodeBin
+ return f.opcode == OpcodeText || f.opcode == OpcodeBin
}
//
// Opcode return the frame operation code.
//
-func (f *Frame) Opcode() opcode {
+func (f *Frame) Opcode() Opcode {
return f.opcode
}
@@ -439,7 +439,7 @@ func (f *Frame) continueUnpack(packet []byte) []byte {
f.rsv1 = packet[0] & 0x40
f.rsv2 = packet[0] & 0x20
f.rsv3 = packet[0] & 0x10
- f.opcode = opcode(packet[0] & 0x0F)
+ f.opcode = Opcode(packet[0] & 0x0F)
f.chopped = append(f.chopped, packet[0])
packet = packet[1:]
case 1:
@@ -493,7 +493,7 @@ func (f *Frame) continueUnpack(packet []byte) []byte {
packet = packet[exp:]
}
- if f.opcode == opcodeClose && len(f.codes) != 2 {
+ if f.opcode == OpcodeClose && len(f.codes) != 2 {
exp := 2 - len(f.codes)
if len(packet) < exp {
f.codes = append(f.codes, packet...)
diff --git a/lib/websocket/frame_test.go b/lib/websocket/frame_test.go
index a6bdba56..ea6ae0f8 100644
--- a/lib/websocket/frame_test.go
+++ b/lib/websocket/frame_test.go
@@ -22,7 +22,7 @@ func TestNewFrameBin(t *testing.T) { //nolint: dupl
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
payload: []byte("Hello!"),
},
}, {
@@ -31,7 +31,7 @@ func TestNewFrameBin(t *testing.T) { //nolint: dupl
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: frameIsMasked,
payload: []byte("Hello!"),
},
@@ -61,7 +61,7 @@ func TestNewFrameClose(t *testing.T) {
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeClose,
+ opcode: OpcodeClose,
closeCode: StatusBadRequest,
masked: frameIsMasked,
payload: []byte("Hello!"),
@@ -71,7 +71,7 @@ func TestNewFrameClose(t *testing.T) {
payload: _dummyPayload256,
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeClose,
+ opcode: OpcodeClose,
closeCode: StatusBadRequest,
masked: frameIsMasked,
payload: _dummyPayload256[:123],
@@ -103,7 +103,7 @@ func TestNewFramePing(t *testing.T) { //nolint:dupl
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePing,
+ opcode: OpcodePing,
masked: frameIsMasked,
payload: []byte("Hello!"),
},
@@ -112,7 +112,7 @@ func TestNewFramePing(t *testing.T) { //nolint:dupl
payload: _dummyPayload256,
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePing,
+ opcode: OpcodePing,
masked: frameIsMasked,
payload: _dummyPayload256[:125],
},
@@ -142,7 +142,7 @@ func TestNewFramePong(t *testing.T) { //nolint: dupl
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
masked: frameIsMasked,
payload: []byte("Hello!"),
},
@@ -151,7 +151,7 @@ func TestNewFramePong(t *testing.T) { //nolint: dupl
payload: _dummyPayload256,
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
masked: frameIsMasked,
payload: _dummyPayload256[:125],
},
@@ -182,7 +182,7 @@ func TestNewFrameText(t *testing.T) { //nolint: dupl
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte("Hello!"),
},
}, {
@@ -191,7 +191,7 @@ func TestNewFrameText(t *testing.T) { //nolint: dupl
payload: []byte("Hello!"),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: frameIsMasked,
payload: []byte("Hello!"),
},
@@ -220,7 +220,7 @@ func TestFramePack(t *testing.T) {
desc: "A single-frame unmasked text message",
f: Frame{
fin: frameIsFinished,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: 0,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
},
@@ -229,7 +229,7 @@ func TestFramePack(t *testing.T) {
desc: "A single-frame masked text message",
f: Frame{
fin: frameIsFinished,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: frameIsMasked,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
maskKey: _testMaskKey,
@@ -243,7 +243,7 @@ func TestFramePack(t *testing.T) {
desc: "A fragmented unmasked text message",
f: Frame{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: 0,
payload: []byte{'H', 'e', 'l'},
},
@@ -252,7 +252,7 @@ func TestFramePack(t *testing.T) {
desc: "A fragmented unmasked text message",
f: Frame{
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
masked: 0,
payload: []byte{'l', 'o'},
},
@@ -261,7 +261,7 @@ func TestFramePack(t *testing.T) {
desc: `Unmasked Ping request (contains a body of "Hello")`,
f: Frame{
fin: frameIsFinished,
- opcode: opcodePing,
+ opcode: OpcodePing,
masked: 0,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
},
@@ -270,7 +270,7 @@ func TestFramePack(t *testing.T) {
desc: `masked Ping response (Pong)`,
f: Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
masked: frameIsMasked,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
maskKey: _testMaskKey,
@@ -284,7 +284,7 @@ func TestFramePack(t *testing.T) {
desc: `256 bytes binary message in a single unmasked frame`,
f: Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: 0,
payload: _dummyPayload256,
},
@@ -293,7 +293,7 @@ func TestFramePack(t *testing.T) {
desc: `256 bytes binary message in a single masked frame`,
f: Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: frameIsMasked,
payload: _dummyPayload256,
maskKey: _testMaskKey,
@@ -307,7 +307,7 @@ func TestFramePack(t *testing.T) {
desc: `65536 binary message in a single unmasked frame`,
f: Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: 0,
payload: _dummyPayload65536,
},
@@ -319,7 +319,7 @@ func TestFramePack(t *testing.T) {
desc: `65536 binary message in a single masked frame`,
f: Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: frameIsMasked,
payload: _dummyPayload65536,
maskKey: _testMaskKey,
diff --git a/lib/websocket/frames.go b/lib/websocket/frames.go
index b54346b9..6a71a9ce 100644
--- a/lib/websocket/frames.go
+++ b/lib/websocket/frames.go
@@ -70,7 +70,7 @@ func (frames *Frames) isClosed() bool {
return false
}
for x := 0; x < len(frames.v); x++ {
- if frames.v[x].opcode == opcodeClose {
+ if frames.v[x].opcode == OpcodeClose {
return true
}
}
@@ -80,9 +80,9 @@ func (frames *Frames) isClosed() bool {
//
// Opcode return the operation code of the first frame.
//
-func (frames *Frames) Opcode() opcode {
+func (frames *Frames) Opcode() Opcode {
if len(frames.v) == 0 {
- return opcodeCont
+ return OpcodeCont
}
return frames.v[0].opcode
}
@@ -105,12 +105,12 @@ func (frames *Frames) payload() (payload []byte) {
}
for x := 0; x < len(frames.v); x++ {
- if frames.v[x].opcode == opcodeClose {
+ if frames.v[x].opcode == OpcodeClose {
break
}
// Ignore control PING or PONG frame.
- if frames.v[x].opcode == opcodePing || frames.v[x].opcode == opcodePong {
+ if frames.v[x].opcode == OpcodePing || frames.v[x].opcode == OpcodePong {
continue
}
diff --git a/lib/websocket/frames_test.go b/lib/websocket/frames_test.go
index 0912a491..11eac25a 100644
--- a/lib/websocket/frames_test.go
+++ b/lib/websocket/frames_test.go
@@ -23,7 +23,7 @@ func TestFrameUnpack(t *testing.T) {
in: []byte{0x81, 0x05, 0x48, 0x65, 0x6c, 0x6c, 0x6f},
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: 0,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
len: 5,
@@ -37,7 +37,7 @@ func TestFrameUnpack(t *testing.T) {
},
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: frameIsMasked,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
maskKey: _testMaskKey,
@@ -48,7 +48,7 @@ func TestFrameUnpack(t *testing.T) {
in: []byte{0x01, 0x03, 0x48, 0x65, 0x6c},
exp: &Frame{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
masked: 0,
payload: []byte{'H', 'e', 'l'},
len: 3,
@@ -58,7 +58,7 @@ func TestFrameUnpack(t *testing.T) {
in: []byte{0x80, 0x02, 0x6c, 0x6f},
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
masked: 0,
payload: []byte{'l', 'o'},
len: 2,
@@ -68,7 +68,7 @@ func TestFrameUnpack(t *testing.T) {
in: []byte{0x89, 0x05, 0x48, 0x65, 0x6c, 0x6c, 0x6f},
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePing,
+ opcode: OpcodePing,
masked: 0,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
len: 5,
@@ -81,7 +81,7 @@ func TestFrameUnpack(t *testing.T) {
},
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
masked: frameIsMasked,
maskKey: _testMaskKey,
},
@@ -94,7 +94,7 @@ func TestFrameUnpack(t *testing.T) {
},
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodePong,
+ opcode: OpcodePong,
masked: frameIsMasked,
payload: []byte{'H', 'e', 'l', 'l', 'o'},
maskKey: _testMaskKey,
@@ -105,7 +105,7 @@ func TestFrameUnpack(t *testing.T) {
in: libbytes.Concat([]byte{0x82, 0x7E, 0x01, 0x00}, _dummyPayload256),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: 0,
payload: _dummyPayload256,
len: 256,
@@ -118,7 +118,7 @@ func TestFrameUnpack(t *testing.T) {
}, _dummyPayload256Masked),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: frameIsMasked,
payload: _dummyPayload256,
maskKey: _testMaskKey,
@@ -132,7 +132,7 @@ func TestFrameUnpack(t *testing.T) {
}, _dummyPayload65536),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: 0,
payload: _dummyPayload65536,
len: 65536,
@@ -146,7 +146,7 @@ func TestFrameUnpack(t *testing.T) {
}, _dummyPayload65536Masked),
exp: &Frame{
fin: frameIsFinished,
- opcode: opcodeBin,
+ opcode: OpcodeBin,
masked: frameIsMasked,
payload: _dummyPayload65536,
maskKey: _testMaskKey,
@@ -180,7 +180,7 @@ func TestFramesAppend(t *testing.T) {
}, {
desc: "With non nil frames",
f: &Frame{
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte("A"),
},
expLen: 1,
@@ -210,18 +210,18 @@ func TestFramesIsClosed(t *testing.T) {
desc: "With no close frames",
frames: &Frames{
v: []*Frame{{
- opcode: opcodeText,
+ opcode: OpcodeText,
}},
},
}, {
desc: "With close frames at the end",
frames: &Frames{
v: []*Frame{{
- opcode: opcodeText,
+ opcode: OpcodeText,
}, {
- opcode: opcodeText,
+ opcode: OpcodeText,
}, {
- opcode: opcodeClose,
+ opcode: OpcodeClose,
}},
},
exp: true,
@@ -247,7 +247,7 @@ func TestFramesPayload(t *testing.T) {
fs: &Frames{
v: []*Frame{{
fin: frameIsFinished,
- opcode: opcodeClose,
+ opcode: OpcodeClose,
payload: []byte{0, 0},
}},
},
@@ -256,7 +256,7 @@ func TestFramesPayload(t *testing.T) {
fs: &Frames{
v: []*Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte("Hel"),
}, {
fin: 0,
@@ -274,15 +274,15 @@ func TestFramesPayload(t *testing.T) {
fs: &Frames{
v: []*Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte("Hel"),
}, {
fin: frameIsFinished,
- opcode: opcodeClose,
+ opcode: OpcodeClose,
payload: []byte("lo "),
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
payload: []byte("world!"),
}},
},
@@ -292,15 +292,15 @@ func TestFramesPayload(t *testing.T) {
fs: &Frames{
v: []*Frame{{
fin: 0,
- opcode: opcodeText,
+ opcode: OpcodeText,
payload: []byte("Hel"),
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
payload: []byte("lo "),
}, {
fin: frameIsFinished,
- opcode: opcodeCont,
+ opcode: OpcodeCont,
payload: []byte("world!"),
}},
},
diff --git a/lib/websocket/opcode.go b/lib/websocket/opcode.go
index 3e49cf79..635285f2 100644
--- a/lib/websocket/opcode.go
+++ b/lib/websocket/opcode.go
@@ -4,26 +4,26 @@
package websocket
-type opcode byte
+type Opcode byte
//
// List of valid operation code in frame.
//
const (
- opcodeCont opcode = 0x0
- opcodeText opcode = 0x1
- opcodeBin opcode = 0x2
- opcodeDataRsv3 opcode = 0x3 // %x3-7 are reserved for further non-control frames
- opcodeDataRsv4 opcode = 0x4
- opcodeDataRsv5 opcode = 0x5
- opcodeDataRsv6 opcode = 0x6
- opcodeDataRsv7 opcode = 0x7
- opcodeClose opcode = 0x8
- opcodePing opcode = 0x9
- opcodePong opcode = 0xA
- opcodeControlRsvB opcode = 0xB // %xB-F are reserved for further control frames
- opcodeControlRsvC opcode = 0xC
- opcodeControlRsvD opcode = 0xD
- opcodeControlRsvE opcode = 0xE
- opcodeControlRsvF opcode = 0xF
+ OpcodeCont Opcode = 0x0
+ OpcodeText Opcode = 0x1
+ OpcodeBin Opcode = 0x2
+ OpcodeDataRsv3 Opcode = 0x3 // %x3-7 are reserved for further non-control frames
+ OpcodeDataRsv4 Opcode = 0x4
+ OpcodeDataRsv5 Opcode = 0x5
+ OpcodeDataRsv6 Opcode = 0x6
+ OpcodeDataRsv7 Opcode = 0x7
+ OpcodeClose Opcode = 0x8
+ OpcodePing Opcode = 0x9
+ OpcodePong Opcode = 0xA
+ OpcodeControlRsvB Opcode = 0xB // %xB-F are reserved for further control frames
+ OpcodeControlRsvC Opcode = 0xC
+ OpcodeControlRsvD Opcode = 0xD
+ OpcodeControlRsvE Opcode = 0xE
+ OpcodeControlRsvF Opcode = 0xF
)
diff --git a/lib/websocket/server.go b/lib/websocket/server.go
index e4f9434b..6d6d25ec 100644
--- a/lib/websocket/server.go
+++ b/lib/websocket/server.go
@@ -426,28 +426,28 @@ func (serv *Server) handleChopped(x, conn int, packet []byte) (rest []byte, isCl
}
switch frame.opcode {
- case opcodeText:
+ case OpcodeText:
if !utf8.Valid(frame.payload) {
serv.handleInvalidData(conn)
isClosing = true
} else {
go serv.HandleText(conn, frame.payload)
}
- case opcodeBin:
+ case OpcodeBin:
go serv.HandleBin(conn, frame.payload)
- case opcodeDataRsv3, opcodeDataRsv4, opcodeDataRsv5, opcodeDataRsv6, opcodeDataRsv7:
+ case OpcodeDataRsv3, OpcodeDataRsv4, OpcodeDataRsv5, OpcodeDataRsv6, OpcodeDataRsv7:
serv.handleBadRequest(conn)
isClosing = true
- case opcodeClose:
+ case OpcodeClose:
serv.handleClose(conn, frame)
isClosing = true
- case opcodePing:
+ case OpcodePing:
serv.handlePing(conn, frame)
- case opcodePong:
+ case OpcodePong:
if serv.handlePong != nil {
serv.handlePong(conn, frame)
}
- case opcodeControlRsvB, opcodeControlRsvC, opcodeControlRsvD, opcodeControlRsvE, opcodeControlRsvF:
+ case OpcodeControlRsvB, OpcodeControlRsvC, OpcodeControlRsvD, OpcodeControlRsvE, OpcodeControlRsvF:
if serv.HandleRsvControl != nil {
serv.HandleRsvControl(conn, frame)
} else {
@@ -498,18 +498,16 @@ func (serv *Server) handleFragment(conn int, req *Frame) (isInvalid bool) {
if frames == nil {
// If a connection does not have continuous frame, then
// current frame opcode must not be 0.
- if req.opcode == opcodeCont {
+ if req.opcode == OpcodeCont {
serv.handleBadRequest(conn)
return true
}
frames = new(Frames)
- } else {
// If a connection have continuous frame, the next frame
// opcode must be 0.
- if req.opcode != opcodeCont {
- serv.handleBadRequest(conn)
- return true
- }
+ } else if req.opcode != OpcodeCont {
+ serv.handleBadRequest(conn)
+ return true
}
if req.fin == 0 {
@@ -531,7 +529,7 @@ func (serv *Server) handleFragment(conn int, req *Frame) (isInvalid bool) {
frame := serv.Clients.finFrames(conn, req)
- if frame.opcode == opcodeText {
+ if frame.opcode == OpcodeText {
if !utf8.Valid(frame.payload) {
serv.handleInvalidData(conn)
return true
@@ -724,7 +722,7 @@ func (serv *Server) handlePing(conn int, req *Frame) {
log.Printf("websocket: Server.handlePing: conn:%d frame:%+v\n", conn, req)
}
- req.opcode = opcodePong
+ req.opcode = OpcodePong
req.masked = 0
res := req.Pack(false)
@@ -819,7 +817,7 @@ func (serv *Server) reader() {
isClosing = true
break
}
- if frame.opcode == opcodeClose || frame.opcode == opcodePing || frame.opcode == opcodePong {
+ if frame.opcode == OpcodeClose || frame.opcode == OpcodePing || frame.opcode == OpcodePong {
if frame.fin == 0 {
// Control frame must set the fin.
serv.handleBadRequest(conn)
@@ -835,24 +833,24 @@ func (serv *Server) reader() {
}
switch frame.opcode {
- case opcodeCont, opcodeText, opcodeBin:
+ case OpcodeCont, OpcodeText, OpcodeBin:
isInvalid := serv.handleFragment(conn, frame)
if isInvalid {
isClosing = true
}
- case opcodeDataRsv3, opcodeDataRsv4, opcodeDataRsv5, opcodeDataRsv6, opcodeDataRsv7:
+ case OpcodeDataRsv3, OpcodeDataRsv4, OpcodeDataRsv5, OpcodeDataRsv6, OpcodeDataRsv7:
serv.handleBadRequest(conn)
isClosing = true
- case opcodeClose:
+ case OpcodeClose:
serv.handleClose(conn, frame)
isClosing = true
- case opcodePing:
+ case OpcodePing:
serv.handlePing(conn, frame)
- case opcodePong:
+ case OpcodePong:
if serv.handlePong != nil {
go serv.handlePong(conn, frame)
}
- case opcodeControlRsvB, opcodeControlRsvC, opcodeControlRsvD, opcodeControlRsvE, opcodeControlRsvF:
+ case OpcodeControlRsvB, OpcodeControlRsvC, OpcodeControlRsvD, OpcodeControlRsvE, OpcodeControlRsvF:
if serv.HandleRsvControl != nil {
serv.HandleRsvControl(conn, frame)
} else {