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