Comparison

plugins/mod_bosh.lua @ 1663:b30c4d0bbe84

mod_bosh: Basic handling of rids (more to come)
author Matthew Wild <mwild1@gmail.com>
date Tue, 11 Aug 2009 19:52:09 +0100
parent 1662:b31ea419dff5
child 1664:6587b6c2678e
comparison
equal deleted inserted replaced
1662:b31ea419dff5 1663:b30c4d0bbe84
139 return; 139 return;
140 end 140 end
141 141
142 -- New session 142 -- New session
143 sid = new_uuid(); 143 sid = new_uuid();
144 local session = { type = "c2s_unauthed", conn = {}, sid = sid, rid = attr.rid, host = attr.to, bosh_version = attr.ver, bosh_wait = attr.wait, streamid = sid, 144 local session = { type = "c2s_unauthed", conn = {}, sid = sid, rid = tonumber(attr.rid), host = attr.to, bosh_version = attr.ver, bosh_wait = attr.wait, streamid = sid,
145 bosh_hold = BOSH_DEFAULT_HOLD, bosh_max_inactive = BOSH_DEFAULT_INACTIVITY, 145 bosh_hold = BOSH_DEFAULT_HOLD, bosh_max_inactive = BOSH_DEFAULT_INACTIVITY,
146 requests = { }, send_buffer = {}, reset_stream = bosh_reset_stream, close = bosh_close_stream, 146 requests = { }, send_buffer = {}, reset_stream = bosh_reset_stream, close = bosh_close_stream,
147 dispatch_stanza = core_process_stanza, log = logger.init("bosh"..sid), secure = request.secure }; 147 dispatch_stanza = core_process_stanza, log = logger.init("bosh"..sid), secure = request.secure };
148 sessions[sid] = session; 148 sessions[sid] = session;
149 149
204 request:send{ headers = default_headers, body = tostring(st.stanza("body", { xmlns = xmlns_bosh, type = "terminate", condition = "item-not-found" })) }; 204 request:send{ headers = default_headers, body = tostring(st.stanza("body", { xmlns = xmlns_bosh, type = "terminate", condition = "item-not-found" })) };
205 request.notopen = nil; 205 request.notopen = nil;
206 return; 206 return;
207 end 207 end
208 208
209 if session.rid then
210 local rid = tonumber(attr.rid);
211 if rid - session.rid > 1 then
212 session.log("warn", "rid too large (means a request was lost). Last rid: %d New rid: %s", session.rid, attr.rid);
213 elseif session.rid >= rid then
214 -- Repeated, ignore
215 session.log("debug", "rid repeated (on request %s), ignoring: %d", request.id, session.rid);
216 request.notopen = nil;
217 t_insert(session.requests, request);
218 return;
219 end
220 request.rid = rid;
221 session.rid = rid;
222 end
223
209 if attr.type == "terminate" then 224 if attr.type == "terminate" then
210 -- Client wants to end this session 225 -- Client wants to end this session
211 session:close(); 226 session:close();
212 request.notopen = nil; 227 request.notopen = nil;
213 return; 228 return;