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