aboutsummaryrefslogtreecommitdiffstats
path: root/net/websocket
diff options
context:
space:
mode:
Diffstat (limited to 'net/websocket')
-rw-r--r--net/websocket/frames.lua61
1 files changed, 13 insertions, 48 deletions
diff --git a/net/websocket/frames.lua b/net/websocket/frames.lua
index 03ce21a8..6a088902 100644
--- a/net/websocket/frames.lua
+++ b/net/websocket/frames.lua
@@ -6,71 +6,36 @@
-- COPYING file in the source package for more information.
--
-local softreq = require "util.dependencies".softreq;
local random_bytes = require "util.random".bytes;
local bit = require "util.bitcompat";
local band = bit.band;
local bor = bit.bor;
-local lshift = bit.lshift;
-local rshift = bit.rshift;
local sbit = require "util.strbitop";
local sxor = sbit.sxor;
-local s_char= string.char;
-local s_pack = string.pack;
-local s_unpack = string.unpack;
+local s_char = string.char;
+local s_pack = require"util.struct".pack;
+local s_unpack = require"util.struct".unpack;
-if not s_pack and softreq"struct" then
- s_pack = softreq"struct".pack;
- s_unpack = softreq"struct".unpack;
-end
-
-local function read_uint16be(str, pos)
- local l1, l2 = str:byte(pos, pos+1);
- return l1*256 + l2;
-end
--- FIXME: this may lose precision
-local function read_uint64be(str, pos)
- local l1, l2, l3, l4, l5, l6, l7, l8 = str:byte(pos, pos+7);
- local h = lshift(l1, 24) + lshift(l2, 16) + lshift(l3, 8) + l4;
- local l = lshift(l5, 24) + lshift(l6, 16) + lshift(l7, 8) + l8;
- return h * 2^32 + l;
-end
local function pack_uint16be(x)
- return s_char(rshift(x, 8), band(x, 0xFF));
-end
-local function get_byte(x, n)
- return band(rshift(x, n), 0xFF);
+ return s_pack(">I2", x);
end
local function pack_uint64be(x)
- local h = band(x / 2^32, 2^32-1);
- return s_char(get_byte(h, 24), get_byte(h, 16), get_byte(h, 8), band(h, 0xFF),
- get_byte(x, 24), get_byte(x, 16), get_byte(x, 8), band(x, 0xFF));
+ return s_pack(">I8", x);
end
-if s_pack then
- function pack_uint16be(x)
- return s_pack(">I2", x);
- end
- function pack_uint64be(x)
- return s_pack(">I8", x);
+local function read_uint16be(str, pos)
+ if type(str) ~= "string" then
+ str, pos = str:sub(pos, pos+1), 1;
end
+ return s_unpack(">I2", str, pos);
end
-
-if s_unpack then
- function read_uint16be(str, pos)
- if type(str) ~= "string" then
- str, pos = str:sub(pos, pos+1), 1;
- end
- return s_unpack(">I2", str, pos);
- end
- function read_uint64be(str, pos)
- if type(str) ~= "string" then
- str, pos = str:sub(pos, pos+7), 1;
- end
- return s_unpack(">I8", str, pos);
+local function read_uint64be(str, pos)
+ if type(str) ~= "string" then
+ str, pos = str:sub(pos, pos+7), 1;
end
+ return s_unpack(">I8", str, pos);
end
local function parse_frame_header(frame)