# HG changeset patch # User Kim Alvefur # Date 1576946872 -3600 # Node ID 07a1faa24261fb439113a4760903729faa746038 # Parent f384669a935990b8e69e35275e610eb7da080510 mod_s2s_keepalive: Ping remotes we only have s2sin established from diff -r f384669a9359 -r 07a1faa24261 mod_s2s_keepalive/mod_s2s_keepalive.lua --- 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