From 0ce785a39ce22e4150c354a4ff4aec26ed6711a4 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Tue, 6 Oct 2015 18:05:27 +0200 Subject: net.websocket.frames: Use struct packing in Lua 5.3 or struct lib if available --- net/websocket/frames.lua | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/net/websocket/frames.lua b/net/websocket/frames.lua index 8528ab99..95e41479 100644 --- a/net/websocket/frames.lua +++ b/net/websocket/frames.lua @@ -22,6 +22,13 @@ local t_concat = table.concat; 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 @@ local function pack_uint64be(x) 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 -- cgit v1.2.3