comparison plugins/mod_c2s.lua @ 14135:836a70deb3c9 13.0

mod_c2s: Remove timers immediately on disconnection
author Waqas Hussain <waqas20@gmail.com>
date Thu, 16 Apr 2026 18:59:56 +0100
parents 1e005ba71f0d
children c1469296190d 1d028f9473c2
comparison
equal deleted inserted replaced
14134:041c7ff18f76 14135:836a70deb3c9
6 -- COPYING file in the source package for more information. 6 -- COPYING file in the source package for more information.
7 -- 7 --
8 8
9 module:set_global(); 9 module:set_global();
10 10
11 local add_task = require "prosody.util.timer".add_task; 11 local timer = require "prosody.util.timer";
12 local add_task = timer.add_task;
13 local stop_task = timer.stop;
12 local new_xmpp_stream = require "prosody.util.xmppstream".new; 14 local new_xmpp_stream = require "prosody.util.xmppstream".new;
13 local nameprep = require "prosody.util.encodings".stringprep.nameprep; 15 local nameprep = require "prosody.util.encodings".stringprep.nameprep;
14 local sessionmanager = require "prosody.core.sessionmanager"; 16 local sessionmanager = require "prosody.core.sessionmanager";
15 local statsmanager = require "prosody.core.statsmanager"; 17 local statsmanager = require "prosody.core.statsmanager";
16 local st = require "prosody.util.stanza"; 18 local st = require "prosody.util.stanza";
22 local tostring, type = tostring, type; 24 local tostring, type = tostring, type;
23 25
24 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams"; 26 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams";
25 27
26 local log = module._log; 28 local log = module._log;
29
30 local function stop_session_timers(session)
31 if session.c2s_timeout then
32 stop_task(session.c2s_timeout);
33 session.c2s_timeout = nil;
34 end
35 end
27 36
28 local c2s_timeout = module:get_option_period("c2s_timeout", "5 minutes"); 37 local c2s_timeout = module:get_option_period("c2s_timeout", "5 minutes");
29 local stream_close_timeout = module:get_option_period("c2s_close_timeout", 5); 38 local stream_close_timeout = module:get_option_period("c2s_close_timeout", 5);
30 local opt_keepalives = module:get_option_boolean("c2s_tcp_keepalives", module:get_option_boolean("tcp_keepalives", true)); 39 local opt_keepalives = module:get_option_boolean("c2s_tcp_keepalives", module:get_option_boolean("tcp_keepalives", true));
31 local unauthed_stanza_size_limit = module:get_option_integer("c2s_unauthed_stanza_size_limit", 10000,1000); 40 local unauthed_stanza_size_limit = module:get_option_integer("c2s_unauthed_stanza_size_limit", 10000,1000);
212 local function session_close(session, reason) 221 local function session_close(session, reason)
213 local log = session.log or log; 222 local log = session.log or log;
214 local close_event_payload = { session = session, reason = reason }; 223 local close_event_payload = { session = session, reason = reason };
215 module:context(session.host):fire_event("pre-session-close", close_event_payload); 224 module:context(session.host):fire_event("pre-session-close", close_event_payload);
216 reason = close_event_payload.reason; 225 reason = close_event_payload.reason;
226 stop_session_timers(session);
217 if session.conn then 227 if session.conn then
218 if session.notopen then 228 if session.notopen then
219 session:open_stream(); 229 session:open_stream();
220 end 230 end
221 if reason then -- nil == no err, initiated by us, false == initiated by client 231 if reason then -- nil == no err, initiated by us, false == initiated by client
425 435
426 function listener.ondisconnect(conn, err) 436 function listener.ondisconnect(conn, err)
427 local session = sessions[conn]; 437 local session = sessions[conn];
428 if session then 438 if session then
429 (session.log or log)("info", "Client disconnected: %s", err or "connection closed"); 439 (session.log or log)("info", "Client disconnected: %s", err or "connection closed");
440 stop_session_timers(session);
430 sm_destroy_session(session, err); 441 sm_destroy_session(session, err);
431 session.conn = nil; 442 session.conn = nil;
432 sessions[conn] = nil; 443 sessions[conn] = nil;
433 end 444 end
434 module:fire_event("c2s-closed", { session = session; conn = conn }); 445 module:fire_event("c2s-closed", { session = session; conn = conn });