Software / code / prosody-modules
Comparison
mod_smacks/mod_smacks.lua @ 3450:9b6206f23151
mod_smacks: Fire event on delivery failure/success for each stanza
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Sun, 20 Jan 2019 00:02:08 +0000 |
| parent | 3218:67f1d1f22625 |
| child | 3477:1f2381492c9f |
comparison
equal
deleted
inserted
replaced
| 3449:5e91a34b1e71 | 3450:9b6206f23151 |
|---|---|
| 353 origin.log("debug", "Client h: %d, our h: %d", tonumber(stanza.attr.h), origin.last_acknowledged_stanza); | 353 origin.log("debug", "Client h: %d, our h: %d", tonumber(stanza.attr.h), origin.last_acknowledged_stanza); |
| 354 for i=1,#queue do | 354 for i=1,#queue do |
| 355 origin.log("debug", "Q item %d: %s", i, tostring(queue[i])); | 355 origin.log("debug", "Q item %d: %s", i, tostring(queue[i])); |
| 356 end | 356 end |
| 357 end | 357 end |
| 358 | |
| 358 for i=1,math_min(handled_stanza_count,#queue) do | 359 for i=1,math_min(handled_stanza_count,#queue) do |
| 359 t_remove(origin.outgoing_stanza_queue, 1); | 360 local handled_stanza = t_remove(origin.outgoing_stanza_queue, 1); |
| 360 end | 361 module:fire_event("delivery/success", { session = origin, stanza = handled_stanza }); |
| 362 end | |
| 363 | |
| 361 origin.log("debug", "#queue = %d", #queue); | 364 origin.log("debug", "#queue = %d", #queue); |
| 362 origin.last_acknowledged_stanza = origin.last_acknowledged_stanza + handled_stanza_count; | 365 origin.last_acknowledged_stanza = origin.last_acknowledged_stanza + handled_stanza_count; |
| 363 request_ack_if_needed(origin, false) | 366 request_ack_if_needed(origin, false) |
| 364 return true; | 367 return true; |
| 365 end | 368 end |
| 375 local queue = session.outgoing_stanza_queue; | 378 local queue = session.outgoing_stanza_queue; |
| 376 local error_attr = { type = "cancel" }; | 379 local error_attr = { type = "cancel" }; |
| 377 if #queue > 0 then | 380 if #queue > 0 then |
| 378 session.outgoing_stanza_queue = {}; | 381 session.outgoing_stanza_queue = {}; |
| 379 for i=1,#queue do | 382 for i=1,#queue do |
| 380 local reply = st.reply(queue[i]); | 383 if not module:fire_event("delivery/failure", { session = session, stanza = queue[i] }) then |
| 381 if reply.attr.to ~= session.full_jid then | 384 local reply = st.reply(queue[i]); |
| 382 reply.attr.type = "error"; | 385 if reply.attr.to ~= session.full_jid then |
| 383 reply:tag("error", error_attr) | 386 reply.attr.type = "error"; |
| 384 :tag("recipient-unavailable", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}); | 387 reply:tag("error", error_attr) |
| 385 core_process_stanza(session, reply); | 388 :tag("recipient-unavailable", {xmlns = "urn:ietf:params:xml:ns:xmpp-stanzas"}); |
| 389 core_process_stanza(session, reply); | |
| 390 end | |
| 386 end | 391 end |
| 387 end | 392 end |
| 388 end | 393 end |
| 389 end | 394 end |
| 390 | 395 |