aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2023-12-02 20:20:05 +0100
committerKim Alvefur <zash@zash.se>2023-12-02 20:20:05 +0100
commite5aa2c3385270d89df857966d2d575cd94f0bd62 (patch)
treed75403434002945adb9f175eab793ac89435b7f3
parent3fbec27699fe712b175ef17a8f20da9e61095d06 (diff)
downloadprosody-e5aa2c3385270d89df857966d2d575cd94f0bd62.tar.gz
prosody-e5aa2c3385270d89df857966d2d575cd94f0bd62.zip
mod_s2s: Close connection on smacks timeout
This merges the mod_s2s_smacks_timeout behavior from prosody-modules This event is fired by mod_smacks when the connection has not responded to an ack-request for a period of time defaulting to 30 seconds, indicating that the connection has become stuck or non-responsive. Closing it prevents routing further messages via this connection and frees resources. A stuck connection may otherwise remain until for a time determined by the OS TCP subsystem, which can be quite long.
-rw-r--r--CHANGES1
-rw-r--r--plugins/mod_s2s.lua6
2 files changed, 7 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 37c493c6..63c8292d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -55,6 +55,7 @@ TRUNK
- Forwarded header from RFC 7239 supported, disabled by default
- mod_http_file_share now uses roles framework, affecting access from e.g. components
- Intervals of mod_cron managed periodic jobs made configurable
+- When mod_smacks is enabled, s2s connections not responding to ack requests are closed.
## Removed
diff --git a/plugins/mod_s2s.lua b/plugins/mod_s2s.lua
index e7c80ddb..fcdfbca8 100644
--- a/plugins/mod_s2s.lua
+++ b/plugins/mod_s2s.lua
@@ -272,6 +272,12 @@ function module.add_host(module)
end, 100);
module:hook("s2s-authenticated", make_authenticated, -1);
module:hook("s2s-read-timeout", keepalive, -1);
+ module:hook("smacks-ack-delayed", function (event)
+ if event.origin.type == "s2sin" or event.origin.type == "s2sout" then
+ event.origin:close("connection-timeout");
+ return true;
+ end
+ end, -1);
module:hook_stanza("http://etherx.jabber.org/streams", "features", function (session, stanza) -- luacheck: ignore 212/stanza
local limits = stanza:get_child("limits", "urn:xmpp:stream-limits:0");
if limits then