aboutsummaryrefslogtreecommitdiff
path: root/lib/websocket
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2019-03-11 04:56:53 +0700
committerShulhan <ms@kilabit.info>2019-03-11 04:56:53 +0700
commit03fb48ee435b9c8da3e68827474cccdba745c8ca (patch)
treeac8ab4a7118d6efd6a6cbaeb7b775f1422a37f31 /lib/websocket
parent8ec8ed08ef51431fe223dfdf27171571d3dde4fd (diff)
downloadpakakeh.go-03fb48ee435b9c8da3e68827474cccdba745c8ca.tar.xz
websocket: set payload capability with payload length
This is to minimize re-allocation on fragmented or chopped data frame received by server.
Diffstat (limited to 'lib/websocket')
-rw-r--r--lib/websocket/frame.go10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/websocket/frame.go b/lib/websocket/frame.go
index a4f58fd1..fa65139e 100644
--- a/lib/websocket/frame.go
+++ b/lib/websocket/frame.go
@@ -283,12 +283,12 @@ func frameUnpack(in []byte) (f *Frame, rest []byte) {
}
if f.len > 0 {
- if len(in)-x < int(f.len) {
- f.payload = make([]byte, len(in)-x)
- } else {
- f.payload = make([]byte, f.len)
+ f.payload = make([]byte, 0, f.len)
+ paylen := len(in) - x
+ if uint64(paylen) > f.len {
+ paylen = int(f.len)
}
- copy(f.payload, in[x:])
+ f.payload = append(f.payload, in[x:x+paylen]...)
if f.masked == frameIsMasked {
for y := 0; y < len(f.payload); y++ {