Comparison

mod_websocket/mod_websocket.lua @ 687:d141375ece4b

mod_websocket: Move frame building into a function
author Florian Zeitz <florob@babelmonkeys.de>
date Sun, 27 May 2012 17:09:19 +0200
parent 677:eeb41cd5e9f3
child 688:e87678a52720
comparison
equal deleted inserted replaced
686:592cfa6cf5d9 687:d141375ece4b
84 counter = (counter + 1) % 4; 84 counter = (counter + 1) % 4;
85 end 85 end
86 else 86 else
87 result.data = frame:sub(pos + 1, pos + result.length); 87 result.data = frame:sub(pos + 1, pos + result.length);
88 end 88 end
89
90 return result;
91 end
92
93 local function build_frame(desc)
94 local length;
95 local result = "";
96
97 result = result .. string.char(0x80 * (desc.FIN and 1 or 0) + desc.opcode);
98
99 length = #desc.data;
100 if length <= 125 then -- 7-bit length
101 result = result .. string.char(length);
102 elseif length <= 0xFFFF then -- 2-byte length
103 result = result .. string.char(126);
104 result = result .. string.char(length/0x100) .. string.char(length%0x100);
105 else -- 8-byte length
106 result = result .. string.char(127);
107 for i = 7, 0, -1 do
108 result = result .. string.char(( length / (2^(8*i)) ) % 0x100);
109 end
110 end
111
112 result = result .. desc.data;
89 113
90 return result; 114 return result;
91 end 115 end
92 116
93 --- Stream events handlers 117 --- Stream events handlers
250 session:close("not-well-formed"); 274 session:close("not-well-formed");
251 end 275 end
252 end 276 end
253 277
254 function session.send(s) 278 function session.send(s)
255 s = tostring(s); 279 conn:write(build_frame({ FIN = true, opcode = 0x01, data = tostring(s)}));
256 local len = #s;
257 if len < 126 then
258 conn:write("\x81" .. string.char(len) .. s);
259 elseif len <= 0xffff then
260 conn:write("\x81" .. string.char(126) .. string.char(len/0x100) .. string.char(len%0x100) .. s);
261 else
262 conn:write("\x81" .. string.char(127) .. string.char(len/0x100000000000000)
263 .. string.char((len%0x100000000000000)/0x1000000000000) .. string.char((len%0x1000000000000)/0x10000000000)
264 .. string.char((len%0x10000000000)/0x100000000) .. string.char((len%0x100000000)/0x1000000)
265 .. string.char((len%0x1000000)/0x10000) .. string.char((len%0x10000)/0x100)
266 .. string.char((len%0x100)))
267 end
268 end 280 end
269 281
270 if c2s_timeout then 282 if c2s_timeout then
271 add_task(c2s_timeout, function () 283 add_task(c2s_timeout, function ()
272 if session.type == "c2s_unauthed" then 284 if session.type == "c2s_unauthed" then