# HG changeset patch # User Kim Alvefur # Date 1444147527 -7200 # Node ID 5f3da8b00b9be3eb83c759cf3ac98be4683405b4 # Parent d01254d5a825a51a11ddd5a3b312607b6575c145 net.websocket.frames: Use struct packing in Lua 5.3 or struct lib if available diff -r d01254d5a825 -r 5f3da8b00b9b net/websocket/frames.lua --- a/net/websocket/frames.lua Tue Oct 06 18:03:04 2015 +0200 +++ b/net/websocket/frames.lua Tue Oct 06 18:05:27 2015 +0200 @@ -22,6 +22,13 @@ local s_byte = string.byte; local s_char= string.char; local s_sub = string.sub; +local s_pack = string.pack; +local s_unpack = string.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 = s_byte(str, pos, pos+1); @@ -46,6 +53,24 @@ get_byte(x, 24), get_byte(x, 16), get_byte(x, 8), band(x, 0xFF); end +if s_pack then + function pack_uint16be(x) + return s_pack(">I2", x); + end + function pack_uint64be(x) + return s_pack(">I8", x); + end +end + +if s_unpack then + function read_uint16be(str, pos) + return s_unpack(">I2", str, pos); + end + function read_uint64be(str, pos) + return s_unpack(">I8", str, pos); + end +end + local function parse_frame_header(frame) if #frame < 2 then return; end