Software /
code /
prosody-modules
Diff
mod_s2s_keepalive/mod_s2s_keepalive.lua @ 3764:07a1faa24261
mod_s2s_keepalive: Ping remotes we only have s2sin established from
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 21 Dec 2019 17:47:52 +0100 |
parent | 3723:427879b46061 |
child | 3765:11878130f266 |
line wrap: on
line diff
--- a/mod_s2s_keepalive/mod_s2s_keepalive.lua Thu Dec 19 20:18:26 2019 +0100 +++ b/mod_s2s_keepalive/mod_s2s_keepalive.lua Sat Dec 21 17:47:52 2019 +0100 @@ -4,9 +4,12 @@ local keepalive_interval = module:get_option_number("keepalive_interval", 60); local host = module.host; +local s2sout = prosody.hosts[host].s2sout; local function send_pings() - for remote_domain, session in pairs(hosts[host].s2sout) do + local ping_hosts = {}; + + for remote_domain, session in pairs(s2sout) do if session.type == "s2sout" -- as opposed to _unauthed and (not(keepalive_servers) or keepalive_servers:contains(remote_domain)) then session.sends2s(st.iq({ to = remote_domain, type = "get", from = host, id = "keepalive" }) @@ -19,10 +22,19 @@ for session in pairs(prosody.incoming_s2s) do if session.type == "s2sin" -- as opposed to _unauthed and (not(keepalive_servers) or keepalive_servers:contains(session.from_host)) then + if not s2sout[session.from_host] then ping_hosts[session.from_host] = true; end session.sends2s " "; -- If the connection is dead, this should make it time out. end end + + -- ping remotes we only have s2sin from + for remote_domain in pairs(ping_hosts) do + module:send(st.iq({ to = remote_domain, type = "get", from = host, id = "keepalive" }) + :tag("ping", { xmlns = "urn:xmpp:ping" }) + ); + end + return keepalive_interval; end