Software /
code /
prosody-modules
Comparison
mod_s2s_keepalive/mod_s2s_keepalive.lua @ 4212:593fd9e0a435
mod_s2s_keepalive: Fix response handler (thanks Ge0rG)
So there are no 'iq-{result,error}/host' events, mod_iq only fires
events for result stanzas that include the full 'id' attr.
This fixes it by hooking the stanza router event.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 16 Oct 2020 13:18:11 +0200 |
parent | 4204:a5930a185806 |
child | 4213:93a980ac1816 |
comparison
equal
deleted
inserted
replaced
4211:0f26ae2f2a74 | 4212:593fd9e0a435 |
---|---|
59 session.log("info", "Keepalive ping timed out, closing connection"); | 59 session.log("info", "Keepalive ping timed out, closing connection"); |
60 session:close("connection-timeout"); | 60 session:close("connection-timeout"); |
61 end); | 61 end); |
62 end); | 62 end); |
63 | 63 |
64 module:hook("iq-result/host", function (event) | 64 module:hook("iq/host", function (event) |
65 local stanza = event.stanza; | 65 local stanza = event.stanza; |
66 if stanza.attr.type ~= "result" and stanza.attr.type == "error" then | |
67 return -- not a reply iq stanza | |
68 end | |
66 if not (stanza.attr.id and stanza.attr.id:sub(1, #"keepalive:") == "keepalive:") then | 69 if not (stanza.attr.id and stanza.attr.id:sub(1, #"keepalive:") == "keepalive:") then |
67 return -- not a reply to this module | 70 return -- not a reply to this module |
68 end | 71 end |
69 | 72 |
70 local origin = event.origin; | 73 local origin = event.origin; |
74 if origin.dummy then return end -- Probably a sendq bounce | |
71 if origin.watchdog_keepalive then | 75 if origin.watchdog_keepalive then |
76 origin.log("debug", "Resetting keepalive watchdog") | |
72 origin.watchdog_keepalive:reset(); | 77 origin.watchdog_keepalive:reset(); |
73 end | 78 end |
74 if s2sout[origin.from_host] and s2sout[origin.from_host].watchdog_keepalive then | 79 if s2sout[origin.from_host] and s2sout[origin.from_host].watchdog_keepalive then |
75 s2sout[origin.from_host].watchdog_keepalive:reset(); | 80 s2sout[origin.from_host].watchdog_keepalive:reset(); |
76 end | 81 end |
77 return true; | 82 return true; |
78 end); | 83 end); |
79 | |
80 module:hook("iq-error/host", function (event) | |
81 local origin = event.origin; | |
82 if origin.dummy then return end -- Probably a sendq bounce | |
83 | |
84 local stanza = event.stanza; | |
85 if not (stanza.attr.id and stanza.attr.id:sub(1, #"keepalive:") == "keepalive:") then | |
86 return -- not a reply to this module | |
87 end | |
88 | |
89 if origin.type == "s2sin" or origin.type == "s2sout" then | |
90 -- An error from the remote means connectivity is ok, | |
91 -- so treat it the same as a result | |
92 return module:fire_event("iq-result/host", event); | |
93 end | |
94 end); | |
95 | |
96 module:add_timer(keepalive_interval, send_pings); |