Mercurial > prosody-hg
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 |
| parents | 6a608ecb3471 413bd21ba449 |
| children | 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) |
