Software / code / prosody-modules
Comparison
mod_s2s_keepalive/mod_s2s_keepalive.lua @ 1110:97e238ce37ce
mod_s2s_keepalive: Initial commit, poke s2s connections with pings and whitespace
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 12 Jul 2013 01:28:48 +0200 |
| child | 1264:2db2c03dfb95 |
comparison
equal
deleted
inserted
replaced
| 1109:d988f2db9773 | 1110:97e238ce37ce |
|---|---|
| 1 local st = require "util.stanza"; | |
| 2 | |
| 3 local keepalive_servers = module:get_option_set("keepalive_servers"); | |
| 4 local keepalive_interval = module:get_option_number("keepalive_interval", 60); | |
| 5 | |
| 6 local host = module.host; | |
| 7 | |
| 8 local function send_pings() | |
| 9 for remote_domain, session in pairs(hosts[host].s2sout) do | |
| 10 if session.type == "s2sout" -- as opposed to _unauthed | |
| 11 and (not(keepalive_servers) or keepalive_servers:contains(remote_domain)) then | |
| 12 session.sends2s(st.iq({ to = remote_domain, type = "get", from = host, id = "keepalive" }) | |
| 13 :tag("ping", { xmlns = "urn:xmpp:ping" }) | |
| 14 ); | |
| 15 -- Note: We don't actually check if this comes back. | |
| 16 end | |
| 17 end | |
| 18 | |
| 19 for session in pairs(prosody.incoming_s2s) do | |
| 20 if session.type == "s2sin" -- as opposed to _unauthed | |
| 21 and (not(keepalive_servers) or keepalive_servers:contains(session.from_host)) then | |
| 22 session.conn:send " "; | |
| 23 -- If the connection is dead, this should make it time out. | |
| 24 end | |
| 25 end | |
| 26 return keepalive_interval; | |
| 27 end | |
| 28 | |
| 29 if module.add_timer then -- 0.9 | |
| 30 module:add_timer(keepalive_interval, send_pings); | |
| 31 else -- 0.8 | |
| 32 local timer = require "util.timer"; | |
| 33 local unloaded; | |
| 34 timer.add_task(keepalive_interval, function() | |
| 35 if not unloaded then | |
| 36 return send_pings() | |
| 37 end | |
| 38 end); | |
| 39 function module.unload() | |
| 40 unloaded = true | |
| 41 end | |
| 42 end |