@@ -12,6 +12,10 @@ local schar = string.char
12
12
local tinsert = table.insert
13
13
local tconcat = table.concat
14
14
local mmin = math.min
15
+ local strpack = struct .pack
16
+ local strunpack = struct .unpack
17
+ local mfloor = math.floor
18
+ local mrandom = math.random
15
19
16
20
local bits = function (...)
17
21
local n = 0
@@ -57,26 +61,29 @@ local encode = function(data,opcode,masked,fin)
57
61
local len = # data
58
62
if len < 126 then
59
63
payload = bor (payload ,len )
60
- encoded = struct . pack (' bb' ,header ,payload )
64
+ encoded = strpack (' bb' ,header ,payload )
61
65
elseif len < 0xffff then
62
66
payload = bor (payload ,126 )
63
- encoded = struct . pack (' bb>H' ,header ,payload ,len )
67
+ encoded = strpack (' bb>H' ,header ,payload ,len )
64
68
elseif len < 2 ^ 53 then
65
- local high = math.floor (len / 2 ^ 32 )
69
+ local high = mfloor (len / 2 ^ 32 )
66
70
local low = len - high * 2 ^ 32
67
71
payload = bor (payload ,127 )
68
- encoded = struct . pack (' bb>I>I' ,header ,payload ,high ,low )
72
+ encoded = strpack (' bb>I>I' ,header ,payload ,high ,low )
69
73
end
70
74
if not masked then
71
75
encoded = encoded .. data
72
76
else
73
- local m1 = math.random (0 ,0xff )
74
- local m2 = math.random (0 ,0xff )
75
- local m3 = math.random (0 ,0xff )
76
- local m4 = math.random (0 ,0xff )
77
+ local m1 = mrandom (0 ,0xff )
78
+ local m2 = mrandom (0 ,0xff )
79
+ local m3 = mrandom (0 ,0xff )
80
+ local m4 = mrandom (0 ,0xff )
77
81
local mask = {m1 ,m2 ,m3 ,m4 }
78
- encoded = encoded .. struct .pack (' bbbb' ,m1 ,m2 ,m3 ,m4 )
79
- encoded = encoded .. xor_mask (data ,mask ,# data )
82
+ encoded = tconcat ({
83
+ encoded ,
84
+ strpack (' bbbb' ,m1 ,m2 ,m3 ,m4 ),
85
+ xor_mask (data ,mask ,# data )
86
+ })
80
87
end
81
88
return encoded
82
89
end
0 commit comments