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)