Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 2744:f70c02c14161
mod_smacks: Trigger event smacks-hibernation-end after queue resend
This is more sensible and allows other modules to send out stanzas when
handling this event without messing with the order of stanzas.
| author | tmolitor <thilo@eightysoft.de> |
|---|---|
| date | Fri, 18 Aug 2017 00:56:38 +0200 |
| parents | 91cbeb6ad987 |
| children | dbba101601b4 |
comparison
equal
deleted
inserted
replaced
| 2743:1fa9620220e3 | 2744:f70c02c14161 |
|---|---|
| 507 h = stanza.attr.h })); | 507 h = stanza.attr.h })); |
| 508 | 508 |
| 509 -- Ok, we need to re-send any stanzas that the client didn't see | 509 -- Ok, we need to re-send any stanzas that the client didn't see |
| 510 -- ...they are what is now left in the outgoing stanza queue | 510 -- ...they are what is now left in the outgoing stanza queue |
| 511 local queue = original_session.outgoing_stanza_queue; | 511 local queue = original_session.outgoing_stanza_queue; |
| 512 module:fire_event("smacks-hibernation-end", {origin = session, resumed = original_session, queue = queue}); | |
| 513 original_session.log("debug", "#queue = %d", #queue); | 512 original_session.log("debug", "#queue = %d", #queue); |
| 514 for i=1,#queue do | 513 for i=1,#queue do |
| 515 original_session.send(queue[i]); | 514 original_session.send(queue[i]); |
| 516 end | 515 end |
| 517 original_session.log("debug", "#queue = %d -- after send", #queue); | 516 original_session.log("debug", "#queue = %d -- after send", #queue); |
| 518 function session.send(stanza) | 517 function session.send(stanza) |
| 519 session.log("warn", "Tried to send stanza on old session migrated by smacks resume (maybe there is a bug?): %s", tostring(stanza)); | 518 session.log("warn", "Tried to send stanza on old session migrated by smacks resume (maybe there is a bug?): %s", tostring(stanza)); |
| 520 return false; | 519 return false; |
| 521 end | 520 end |
| 521 module:fire_event("smacks-hibernation-end", {origin = session, resumed = original_session, queue = queue}); | |
| 522 request_ack_if_needed(original_session, true); | 522 request_ack_if_needed(original_session, true); |
| 523 else | 523 else |
| 524 module:log("warn", "Client %s@%s[%s] tried to resume stream for %s@%s[%s]", | 524 module:log("warn", "Client %s@%s[%s] tried to resume stream for %s@%s[%s]", |
| 525 session.username or "?", session.host or "?", session.type, | 525 session.username or "?", session.host or "?", session.type, |
| 526 original_session.username or "?", original_session.host or "?", original_session.type); | 526 original_session.username or "?", original_session.host or "?", original_session.type); |
