Software /
code /
prosody-modules
Diff
mod_smacks/mod_smacks.lua @ 257:08fa42e1ab06
mod_smacks: Fixes for monkey-patched sessionmanager.destroy to handle stream resumption, and to fall back to stock destroy() if the session is not smacks-enabled.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 07 Oct 2010 16:18:07 +0100 |
parent | 256:57de4a7840ef |
child | 258:36648205b10a |
line wrap: on
line diff
--- a/mod_smacks/mod_smacks.lua Thu Oct 07 16:16:49 2010 +0100 +++ b/mod_smacks/mod_smacks.lua Thu Oct 07 16:18:07 2010 +0100 @@ -4,11 +4,13 @@ local math_min = math.min; local tonumber, tostring = tonumber, tostring; local add_filter = require "util.filters".add_filter; +local timer = require "util.timer"; local xmlns_sm = "urn:xmpp:sm:2"; local sm_attr = { xmlns = xmlns_sm }; +local resume_timeout = 300; local max_unacked_stanzas = 0; module:add_event_hook("stream-features", @@ -121,13 +123,24 @@ local _destroy_session = sessionmanager.destroy_session; function sessionmanager.destroy_session(session, err) if session.smacks then - local queue = session.outgoing_stanza_queue; - if #queue > 0 then - module:log("warn", "Destroying session with %d unacked stanzas:", #queue); - for i=1,#queue do - module:log("warn", "::%s", tostring(queue[i])); + if not session.resumption_token then + local queue = session.outgoing_stanza_queue; + if #queue > 0 then + module:log("warn", "Destroying session with %d unacked stanzas:", #queue); + for i=1,#queue do + module:log("warn", "::%s", tostring(queue[i])); + end + handle_unacked_stanzas(session); end - handle_unacked_stanzas(session); + else + session.hibernating = true; + timer.add_task(resume_timeout, function () + if session.hibernating then + session.resumption_token = nil; + sessionmanager.destroy_session(session); -- Re-destroy + end + end); + return; -- Postpone destruction for now end end return _destroy_session(session, err);