Software /
code /
prosody
Comparison
net/websocket/frames.lua @ 11158:3a72cb126d6c
Merge 0.11->trunk
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 12 Oct 2020 21:29:20 +0200 |
parent | 11114:6a608ecb3471 |
parent | 11157:413bd21ba449 |
child | 11166:51e5149ed0ad |
comparison
equal
deleted
inserted
replaced
11155:8d692a8a8f48 | 11158:3a72cb126d6c |
---|---|
73 return s_unpack(">I8", str, pos); | 73 return s_unpack(">I8", str, pos); |
74 end | 74 end |
75 end | 75 end |
76 | 76 |
77 local function parse_frame_header(frame) | 77 local function parse_frame_header(frame) |
78 if #frame < 2 then return; end | 78 if frame:len() < 2 then return; end |
79 | 79 |
80 local byte1, byte2 = frame:byte(1, 2); | 80 local byte1, byte2 = frame:byte(1, 2); |
81 local result = { | 81 local result = { |
82 FIN = band(byte1, 0x80) > 0; | 82 FIN = band(byte1, 0x80) > 0; |
83 RSV1 = band(byte1, 0x40) > 0; | 83 RSV1 = band(byte1, 0x40) > 0; |
95 elseif result.length == 127 then | 95 elseif result.length == 127 then |
96 length_bytes = 8; | 96 length_bytes = 8; |
97 end | 97 end |
98 | 98 |
99 local header_length = 2 + length_bytes + (result.MASK and 4 or 0); | 99 local header_length = 2 + length_bytes + (result.MASK and 4 or 0); |
100 if #frame < header_length then return; end | 100 if frame:len() < header_length then return; end |
101 | 101 |
102 if length_bytes == 2 then | 102 if length_bytes == 2 then |
103 result.length = read_uint16be(frame, 3); | 103 result.length = read_uint16be(frame, 3); |
104 elseif length_bytes == 8 then | 104 elseif length_bytes == 8 then |
105 result.length = read_uint64be(frame, 3); | 105 result.length = read_uint64be(frame, 3); |
138 end | 138 end |
139 end | 139 end |
140 | 140 |
141 local function parse_frame(frame) | 141 local function parse_frame(frame) |
142 local result, pos = parse_frame_header(frame); | 142 local result, pos = parse_frame_header(frame); |
143 if result == nil or #frame < (pos + result.length) then return nil, nil, result; end | 143 if result == nil or frame:len() < (pos + result.length) then return nil, nil, result; end |
144 result.data = parse_frame_body(frame, result, pos+1); | 144 result.data = parse_frame_body(frame, result, pos+1); |
145 return result, pos + result.length; | 145 return result, pos + result.length; |
146 end | 146 end |
147 | 147 |
148 local function build_frame(desc) | 148 local function build_frame(desc) |