Software / code / prosody
Comparison
plugins/mod_smacks.lua @ 11975:fcea4d9e7502
mod_smacks: Use new pre-session-close event instead of monkeypatch
Much cleaner.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 01 Dec 2021 15:09:11 +0100 |
| parent | 11952:b78a341e72e7 |
| child | 11976:10cdfb94f1cc |
comparison
equal
deleted
inserted
replaced
| 11974:a7c183bb4e64 | 11975:fcea4d9e7502 |
|---|---|
| 254 session.last_acknowledged_stanza = 0; | 254 session.last_acknowledged_stanza = 0; |
| 255 end | 255 end |
| 256 | 256 |
| 257 add_filter(session, "stanzas/out", outgoing_stanza_filter, -999); | 257 add_filter(session, "stanzas/out", outgoing_stanza_filter, -999); |
| 258 | 258 |
| 259 local session_close = session.close; | |
| 260 function session.close(...) | |
| 261 if session.resumption_token then | |
| 262 session_registry.set(session.username, session.resumption_token, nil); | |
| 263 old_session_registry.set(session.username, session.resumption_token, nil); | |
| 264 session.resumption_token = nil; | |
| 265 end | |
| 266 -- send out last ack as per revision 1.5.2 of XEP-0198 | |
| 267 if session.smacks and session.conn and session.handled_stanza_count then | |
| 268 (session.sends2s or session.send)(st.stanza("a", { xmlns = session.smacks, h = string.format("%d", session.handled_stanza_count) })); | |
| 269 end | |
| 270 return session_close(...); | |
| 271 end | |
| 272 return session; | 259 return session; |
| 273 end | 260 end |
| 261 | |
| 262 module:hook("pre-session-close", function(event) | |
| 263 local session = event.session; | |
| 264 if session.resumption_token then | |
| 265 session_registry.set(session.username, session.resumption_token, nil); | |
| 266 old_session_registry.set(session.username, session.resumption_token, nil); | |
| 267 session.resumption_token = nil; | |
| 268 end | |
| 269 -- send out last ack as per revision 1.5.2 of XEP-0198 | |
| 270 if session.smacks and session.conn and session.handled_stanza_count then | |
| 271 (session.sends2s or session.send)(st.stanza("a", { | |
| 272 xmlns = session.smacks; | |
| 273 h = string.format("%d", session.handled_stanza_count); | |
| 274 })); | |
| 275 end | |
| 276 end); | |
| 274 | 277 |
| 275 local function wrap_session_in(session, resume) | 278 local function wrap_session_in(session, resume) |
| 276 if not resume then | 279 if not resume then |
| 277 session.handled_stanza_count = 0; | 280 session.handled_stanza_count = 0; |
| 278 end | 281 end |