Mercurial > prosody-modules
comparison mod_pinger/mod_pinger.lua @ 3103:5bf79bb3cf7e
Neuter 0198 from mod_pinger, fix #712
| author | Georg Lukas <georg@op-co.de> |
|---|---|
| date | Wed, 06 Jun 2018 19:20:10 +0200 |
| parents | c971b2cee2cc |
| children | 8298b06e6603 |
comparison
equal
deleted
inserted
replaced
| 3102:f04dbfad5407 | 3103:5bf79bb3cf7e |
|---|---|
| 11 return data; | 11 return data; |
| 12 end | 12 end |
| 13 | 13 |
| 14 function check_session(watchdog) | 14 function check_session(watchdog) |
| 15 local session = watchdog.session; | 15 local session = watchdog.session; |
| 16 if session.smacks then | |
| 17 unwatch_session(session); | |
| 18 return; | |
| 19 end | |
| 16 if not session.idle_pinged then | 20 if not session.idle_pinged then |
| 17 session.idle_pinged = true; | 21 session.idle_pinged = true; |
| 18 if session.smacks then | 22 session.send(st.iq({ type = "get", from = module.host, id = "idle-check" }) |
| 19 if not session.awaiting_ack then | 23 :tag("ping", { xmlns = "urn:xmpp:ping" })); |
| 20 session.send(st.stanza("r", { xmlns = session.smacks })) | |
| 21 end | |
| 22 else | |
| 23 session.send(st.iq({ type = "get", from = module.host, id = "idle-check" }) | |
| 24 :tag("ping", { xmlns = "urn:xmpp:ping" })); | |
| 25 end | |
| 26 return ping_timeout; -- Call us again after ping_timeout | 24 return ping_timeout; -- Call us again after ping_timeout |
| 27 else | 25 else |
| 28 module:log("info", "Client %q silent for too long, closing...", session.full_jid); | 26 module:log("info", "Client %q silent for too long, closing...", session.full_jid); |
| 29 session:close("connection-timeout"); | 27 session:close("connection-timeout"); |
| 30 end | 28 end |
| 40 end | 38 end |
| 41 end | 39 end |
| 42 | 40 |
| 43 function unwatch_session(session) | 41 function unwatch_session(session) |
| 44 if session.idle_watchdog then | 42 if session.idle_watchdog then |
| 43 filters.remove_filter(session, "bytes/in", update_watchdog); | |
| 45 session.idle_watchdog:cancel(); | 44 session.idle_watchdog:cancel(); |
| 46 session.idle_watchdog = nil; | 45 session.idle_watchdog = nil; |
| 47 filters.remove_filter(session, "bytes/in", update_watchdog); | |
| 48 end | 46 end |
| 49 end | 47 end |
| 50 | 48 |
| 51 module:hook("resource-bind", function (event) watch_session(event.session); end); | 49 module:hook("resource-bind", function (event) watch_session(event.session); end); |
| 52 module:hook("resource-unbind", function (event) unwatch_session(event.session); end); | 50 module:hook("resource-unbind", function (event) unwatch_session(event.session); end); |
| 53 | |
| 54 -- handle smacks sessions properly (not pinging in hibernated state) | |
| 55 module:hook("smacks-hibernation-start", function (event) unwatch_session(event.origin); end); | |
| 56 module:hook("smacks-hibernation-end", function (event) watch_session(event.resumed); end); |
