diff options
author | Matthew Wild <mwild1@gmail.com> | 2014-09-05 19:09:13 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2014-09-05 19:09:13 +0100 |
commit | 489e76797644abd032f5febe2723328941de7bc9 (patch) | |
tree | d5c6d79b1e04fe5b4e8f5aae5d3e0ce5327a71c1 /net/websocket/frames.lua | |
parent | 1e987242449ef303547f9df10b99d4313e21e3be (diff) | |
parent | 075bfb3fdfe7defc475bb2d8931a7073af952f69 (diff) | |
download | prosody-489e76797644abd032f5febe2723328941de7bc9.tar.gz prosody-489e76797644abd032f5febe2723328941de7bc9.zip |
Merge 0.10->trunk
Diffstat (limited to 'net/websocket/frames.lua')
-rw-r--r-- | net/websocket/frames.lua | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/net/websocket/frames.lua b/net/websocket/frames.lua index a5fcdad9..8bbddd1c 100644 --- a/net/websocket/frames.lua +++ b/net/websocket/frames.lua @@ -29,7 +29,7 @@ local function read_uint16be(str, pos) local l1, l2 = s_byte(str, pos, pos+1); return l1*256 + l2; end --- TODO: this may lose precision +-- FIXME: this may lose precision local function read_uint64be(str, pos) local l1, l2, l3, l4, l5, l6, l7, l8 = s_byte(str, pos, pos+7); return lshift(l1, 56) + lshift(l2, 48) + lshift(l3, 40) + lshift(l4, 32) @@ -38,12 +38,12 @@ end local function pack_uint16be(x) return s_char(rshift(x, 8), band(x, 0xFF)); end -local function sm(x, n) +local function get_byte(x, n) return band(rshift(x, n), 0xFF); end local function pack_uint64be(x) - return s_char(rshift(x, 56), sm(x, 48), sm(x, 40), sm(x, 32), - sm(x, 24), sm(x, 16), sm(x, 8), band(x, 0xFF)); + return s_char(rshift(x, 56), get_byte(x, 48), get_byte(x, 40), get_byte(x, 32), + get_byte(x, 24), get_byte(x, 16), get_byte(x, 8), band(x, 0xFF)); end local function parse_frame_header(frame) @@ -78,7 +78,7 @@ local function parse_frame_header(frame) end if result.MASK then - result.key = { s_byte(frame, pos+1, pos+4) }; + result.key = { s_byte(frame, length_bytes+3, length_bytes+6) }; end return result, header_length; @@ -131,13 +131,12 @@ local function build_frame(desc) desc.RSV1 and 0x40 or 0, desc.RSV2 and 0x20 or 0, desc.RSV3 and 0x10 or 0); - local b2; - local length_extra - if #data <= 125 then -- 7-bit length - b2 = #data; + local b2 = #data; + local length_extra; + if b2 <= 125 then -- 7-bit length length_extra = ""; - elseif #data <= 0xFFFF then -- 2-byte length + elseif b2 <= 0xFFFF then -- 2-byte length b2 = 126; length_extra = pack_uint16be(#data); else -- 8-byte length |