Software /
code /
prosody
Comparison
plugins/mod_smacks.lua @ 12114:e32f90c81519
mod_smacks: Compact code using new stanza API
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 22 Dec 2021 22:13:03 +0100 |
parent | 12112:08a949e63541 |
child | 12125:649268c9f603 |
comparison
equal
deleted
inserted
replaced
12113:86e6f0810956 | 12114:e32f90c81519 |
---|---|
374 end | 374 end |
375 | 375 |
376 -- don't send delivery errors for messages which will be delivered by mam later on | 376 -- don't send delivery errors for messages which will be delivered by mam later on |
377 -- check if stanza was archived --> this will allow us to send back errors for stanzas not archived | 377 -- check if stanza was archived --> this will allow us to send back errors for stanzas not archived |
378 -- because the user configured the server to do so ("no-archive"-setting for one special contact for example) | 378 -- because the user configured the server to do so ("no-archive"-setting for one special contact for example) |
379 local function get_stanza_id(stanza, by_jid) | |
380 for tag in stanza:childtags("stanza-id", "urn:xmpp:sid:0") do | |
381 if tag.attr.by == by_jid then | |
382 return tag.attr.id; | |
383 end | |
384 end | |
385 return nil; | |
386 end | |
387 module:hook("delivery/failure", function(event) | 379 module:hook("delivery/failure", function(event) |
388 local session, stanza = event.session, event.stanza; | 380 local session, stanza = event.session, event.stanza; |
389 -- Only deal with authenticated (c2s) sessions | 381 -- Only deal with authenticated (c2s) sessions |
390 if session.username then | 382 if session.username then |
391 if stanza.name == "message" and stanza.attr.xmlns == nil and | 383 if stanza.name == "message" and stanza.attr.xmlns == nil and |
395 if mam_result ~= nil then | 387 if mam_result ~= nil then |
396 return true; -- stanza already "handled", don't send an error and don't add it to offline storage | 388 return true; -- stanza already "handled", don't send an error and don't add it to offline storage |
397 end | 389 end |
398 -- do nothing here for normal messages and don't send out "message delivery errors", | 390 -- do nothing here for normal messages and don't send out "message delivery errors", |
399 -- because messages are already in MAM at this point (no need to frighten users) | 391 -- because messages are already in MAM at this point (no need to frighten users) |
400 local stanza_id = get_stanza_id(stanza, jid.bare(session.full_jid)); | 392 local stanza_id = stanza:get_child_with_attr("stanza-id", "urn:xmpp:sid:0", "by", jid.bare(session.full_jid)); |
393 stanza_id = stanza_id and stanza_id.attr.id; | |
401 if session.mam_requested and stanza_id ~= nil then | 394 if session.mam_requested and stanza_id ~= nil then |
402 session.log("debug", "mod_smacks delivery/failure returning true for mam-handled stanza: mam-archive-id=%s", tostring(stanza_id)); | 395 session.log("debug", "mod_smacks delivery/failure returning true for mam-handled stanza: mam-archive-id=%s", tostring(stanza_id)); |
403 return true; -- stanza handled, don't send an error | 396 return true; -- stanza handled, don't send an error |
404 end | 397 end |
405 -- store message in offline store, if this client does not use mam *and* was the last client online | 398 -- store message in offline store, if this client does not use mam *and* was the last client online |