comparison 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
parents 427879b46061
children 11878130f266
comparison
equal deleted inserted replaced
3763:f384669a9359 3764:07a1faa24261
2 2
3 local keepalive_servers = module:get_option_set("keepalive_servers"); 3 local keepalive_servers = module:get_option_set("keepalive_servers");
4 local keepalive_interval = module:get_option_number("keepalive_interval", 60); 4 local keepalive_interval = module:get_option_number("keepalive_interval", 60);
5 5
6 local host = module.host; 6 local host = module.host;
7 local s2sout = prosody.hosts[host].s2sout;
7 8
8 local function send_pings() 9 local function send_pings()
9 for remote_domain, session in pairs(hosts[host].s2sout) do 10 local ping_hosts = {};
11
12 for remote_domain, session in pairs(s2sout) do
10 if session.type == "s2sout" -- as opposed to _unauthed 13 if session.type == "s2sout" -- as opposed to _unauthed
11 and (not(keepalive_servers) or keepalive_servers:contains(remote_domain)) then 14 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" }) 15 session.sends2s(st.iq({ to = remote_domain, type = "get", from = host, id = "keepalive" })
13 :tag("ping", { xmlns = "urn:xmpp:ping" }) 16 :tag("ping", { xmlns = "urn:xmpp:ping" })
14 ); 17 );
17 end 20 end
18 21
19 for session in pairs(prosody.incoming_s2s) do 22 for session in pairs(prosody.incoming_s2s) do
20 if session.type == "s2sin" -- as opposed to _unauthed 23 if session.type == "s2sin" -- as opposed to _unauthed
21 and (not(keepalive_servers) or keepalive_servers:contains(session.from_host)) then 24 and (not(keepalive_servers) or keepalive_servers:contains(session.from_host)) then
25 if not s2sout[session.from_host] then ping_hosts[session.from_host] = true; end
22 session.sends2s " "; 26 session.sends2s " ";
23 -- If the connection is dead, this should make it time out. 27 -- If the connection is dead, this should make it time out.
24 end 28 end
25 end 29 end
30
31 -- ping remotes we only have s2sin from
32 for remote_domain in pairs(ping_hosts) do
33 module:send(st.iq({ to = remote_domain, type = "get", from = host, id = "keepalive" })
34 :tag("ping", { xmlns = "urn:xmpp:ping" })
35 );
36 end
37
26 return keepalive_interval; 38 return keepalive_interval;
27 end 39 end
28 40
29 module:add_timer(keepalive_interval, send_pings); 41 module:add_timer(keepalive_interval, send_pings);