changeset 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
parents f384669a9359
children 11878130f266
files mod_s2s_keepalive/mod_s2s_keepalive.lua
diffstat 1 files changed, 13 insertions(+), 1 deletions(-) [+]
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