Mercurial > prosody-modules
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); |
