Mercurial > prosody-modules
view mod_pinger/mod_pinger.lua @ 2608:362ca94192ee
mod_smacks: Add resumed session to event "smacks-hibernation-end"
Older versions of this event only have the "intermediate" session
in event.session (the one used to resume the existing session),
but not the resumed one.
This adds event.resumed which contains the resumed one alongside
to event.session.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Sat, 11 Mar 2017 01:37:28 +0100 |
parents | 256a5e3591db |
children | 80b6c63cb559 |
line wrap: on
line source
local new_watchdog = require "util.watchdog".new; local filters = require "util.filters"; local st = require "util.stanza"; local idle_timeout = module:get_option_number("c2s_idle_timeout", 300); local ping_timeout = module:get_option_number("c2s_ping_timeout", 30); function update_watchdog(data, session) session.idle_watchdog:reset(); session.idle_pinged = nil; return data; end function check_session(watchdog) local session = watchdog.session; if not session.idle_pinged then session.idle_pinged = true; if session.smacks and not session.awaiting_ack then session.send(st.stanza("r", { xmlns = "urn:xmpp:sm:2" })) -- TODO: hardcoded sm:2 else session.send(st.iq({ type = "get", from = module.host, id = "idle-check" }) :tag("ping", { xmlns = "urn:xmpp:ping" })); end return ping_timeout; -- Call us again after ping_timeout else module:log("info", "Client %q silent for too long, closing...", session.full_jid); session:close("connection-timeout"); end end function watch_session(session) if not session.idle_watchdog and not session.requests then -- Don't watch BOSH connections (BOSH already has timeouts) session.idle_watchdog = new_watchdog(idle_timeout, check_session); session.idle_watchdog.session = session; filters.add_filter(session, "bytes/in", update_watchdog); end end function unwatch_session(session) if session.idle_watchdog then session.idle_watchdog:cancel(); session.idle_watchdog = nil; filters.remove_filter(session, "bytes/in", update_watchdog); end end module:hook("resource-bind", function (event) watch_session(event.session); end); module:hook("resource-unbind", function (event) unwatch_session(event.session); end);