Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 622:ce39df945de1
mod_smacks: Use pre-resource-unbind (0.9 feature) to fix reloadability and multiple host support
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Mon, 05 Mar 2012 16:53:30 +0000 |
parents | 7693724881b3 |
children | c1f3958695ea |
comparison
equal
deleted
inserted
replaced
621:7bdd02056e2b | 622:ce39df945de1 |
---|---|
196 end | 196 end |
197 end | 197 end |
198 end | 198 end |
199 end | 199 end |
200 | 200 |
201 local _destroy_session = sessionmanager.destroy_session; | 201 module:hook("pre-resource-unbind", function (event) |
202 function sessionmanager.destroy_session(session, err) | 202 local session, err = event.session, event.error; |
203 if session.smacks then | 203 if session.smacks then |
204 if not session.resumption_token then | 204 if not session.resumption_token then |
205 local queue = session.outgoing_stanza_queue; | 205 local queue = session.outgoing_stanza_queue; |
206 if #queue > 0 then | 206 if #queue > 0 then |
207 module:log("warn", "Destroying session with %d unacked stanzas:", #queue); | 207 module:log("warn", "Destroying session with %d unacked stanzas:", #queue); |
227 -- otherwise the session resumed and re-hibernated. | 227 -- otherwise the session resumed and re-hibernated. |
228 and session.hibernating == hibernate_time then | 228 and session.hibernating == hibernate_time then |
229 session.log("debug", "Destroying session for hibernating too long"); | 229 session.log("debug", "Destroying session for hibernating too long"); |
230 session_registry[session.resumption_token] = nil; | 230 session_registry[session.resumption_token] = nil; |
231 session.resumption_token = nil; | 231 session.resumption_token = nil; |
232 -- This recursion back into our destroy handler is to | |
233 -- make sure we still handle any queued stanzas | |
234 sessionmanager.destroy_session(session); | 232 sessionmanager.destroy_session(session); |
235 else | 233 else |
236 session.log("debug", "Session resumed before hibernation timeout, all is well") | 234 session.log("debug", "Session resumed before hibernation timeout, all is well") |
237 end | 235 end |
238 end); | 236 end); |
239 return; -- Postpone destruction for now | 237 return true; -- Postpone destruction for now |
240 end | 238 end |
241 | 239 |
242 end | 240 end |
243 return _destroy_session(session, err); | 241 end); |
244 end | |
245 | 242 |
246 module:hook_stanza(xmlns_sm, "resume", function (session, stanza) | 243 module:hook_stanza(xmlns_sm, "resume", function (session, stanza) |
247 local id = stanza.attr.previd; | 244 local id = stanza.attr.previd; |
248 local original_session = session_registry[id]; | 245 local original_session = session_registry[id]; |
249 if not original_session then | 246 if not original_session then |