Software / code / prosody-modules
Comparison
mod_smacks/mod_smacks.lua @ 3478:f6319346e2a3
mod_smacks: improved debug logging
| author | Georg Lukas <georg@op-co.de> |
|---|---|
| date | Wed, 06 Mar 2019 21:44:07 +0100 |
| parent | 3477:1f2381492c9f |
| child | 3479:9ef309fb501d |
comparison
equal
deleted
inserted
replaced
| 3477:1f2381492c9f | 3478:f6319346e2a3 |
|---|---|
| 150 event.features:tag("sm", sm2_attr):tag("optional"):up():up(); | 150 event.features:tag("sm", sm2_attr):tag("optional"):up():up(); |
| 151 event.features:tag("sm", sm3_attr):tag("optional"):up():up(); | 151 event.features:tag("sm", sm3_attr):tag("optional"):up():up(); |
| 152 end | 152 end |
| 153 end); | 153 end); |
| 154 | 154 |
| 155 local function request_ack_if_needed(session, force) | 155 local function request_ack_if_needed(session, force, reason) |
| 156 local queue = session.outgoing_stanza_queue; | 156 local queue = session.outgoing_stanza_queue; |
| 157 if session.awaiting_ack == nil and not session.hibernating then | 157 if session.awaiting_ack == nil and not session.hibernating then |
| 158 if (#queue > max_unacked_stanzas and session.last_queue_count ~= #queue) or force then | 158 if (#queue > max_unacked_stanzas and session.last_queue_count ~= #queue) or force then |
| 159 session.log("debug", "Queuing <r> (in a moment)"); | 159 session.log("debug", "Queuing <r> (in a moment) from %s - #queue=%d", reason, #queue); |
| 160 session.awaiting_ack = false; | 160 session.awaiting_ack = false; |
| 161 session.awaiting_ack_timer = stoppable_timer(1e-06, function () | 161 session.awaiting_ack_timer = stoppable_timer(1e-06, function () |
| 162 if not session.awaiting_ack and not session.hibernating then | 162 if not session.awaiting_ack and not session.hibernating then |
| 163 session.log("debug", "Sending <r> (inside timer, before send)"); | 163 session.log("debug", "Sending <r> (inside timer, before send)"); |
| 164 (session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks })) | 164 (session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks })) |
| 200 stamp = datetime.datetime() | 200 stamp = datetime.datetime() |
| 201 }); | 201 }); |
| 202 end | 202 end |
| 203 | 203 |
| 204 queue[#queue+1] = cached_stanza; | 204 queue[#queue+1] = cached_stanza; |
| 205 session.log("debug", "#queue = %d", #queue); | |
| 206 if session.hibernating then | 205 if session.hibernating then |
| 207 session.log("debug", "hibernating, stanza queued"); | 206 session.log("debug", "hibernating, stanza queued"); |
| 208 return nil; | 207 return nil; |
| 209 end | 208 end |
| 210 request_ack_if_needed(session, false); | 209 request_ack_if_needed(session, false, "outgoing_stanza_filter"); |
| 211 end | 210 end |
| 212 return stanza; | 211 return stanza; |
| 213 end | 212 end |
| 214 | 213 |
| 215 local function count_incoming_stanzas(stanza, session) | 214 local function count_incoming_stanzas(stanza, session) |
| 362 module:fire_event("delivery/success", { session = origin, stanza = handled_stanza }); | 361 module:fire_event("delivery/success", { session = origin, stanza = handled_stanza }); |
| 363 end | 362 end |
| 364 | 363 |
| 365 origin.log("debug", "#queue = %d", #queue); | 364 origin.log("debug", "#queue = %d", #queue); |
| 366 origin.last_acknowledged_stanza = origin.last_acknowledged_stanza + handled_stanza_count; | 365 origin.last_acknowledged_stanza = origin.last_acknowledged_stanza + handled_stanza_count; |
| 367 request_ack_if_needed(origin, false) | 366 request_ack_if_needed(origin, false, "handle_a") |
| 368 return true; | 367 return true; |
| 369 end | 368 end |
| 370 module:hook_stanza(xmlns_sm2, "a", handle_a); | 369 module:hook_stanza(xmlns_sm2, "a", handle_a); |
| 371 module:hook_stanza(xmlns_sm3, "a", handle_a); | 370 module:hook_stanza(xmlns_sm3, "a", handle_a); |
| 372 | 371 |
| 503 ); | 502 ); |
| 504 end; | 503 end; |
| 505 elseif session.username == original_session.username | 504 elseif session.username == original_session.username |
| 506 and session.host == original_session.host then | 505 and session.host == original_session.host then |
| 507 session.log("debug", "mod_smacks resuming existing session %s...", get_session_id(original_session)); | 506 session.log("debug", "mod_smacks resuming existing session %s...", get_session_id(original_session)); |
| 507 original_session.log("debug", "mod_smacks session resumed from %s...", get_session_id(session)); | |
| 508 -- TODO: All this should move to sessionmanager (e.g. session:replace(new_session)) | 508 -- TODO: All this should move to sessionmanager (e.g. session:replace(new_session)) |
| 509 if original_session.conn then | 509 if original_session.conn then |
| 510 original_session.log("debug", "mod_smacks closing an old connection for this session"); | 510 original_session.log("debug", "mod_smacks closing an old connection for this session"); |
| 511 local conn = original_session.conn; | 511 local conn = original_session.conn; |
| 512 c2s_sessions[conn] = nil; | 512 c2s_sessions[conn] = nil; |
| 546 function session.send(stanza) | 546 function session.send(stanza) |
| 547 session.log("warn", "Tried to send stanza on old session migrated by smacks resume (maybe there is a bug?): %s", tostring(stanza)); | 547 session.log("warn", "Tried to send stanza on old session migrated by smacks resume (maybe there is a bug?): %s", tostring(stanza)); |
| 548 return false; | 548 return false; |
| 549 end | 549 end |
| 550 module:fire_event("smacks-hibernation-end", {origin = session, resumed = original_session, queue = queue}); | 550 module:fire_event("smacks-hibernation-end", {origin = session, resumed = original_session, queue = queue}); |
| 551 request_ack_if_needed(original_session, true); | 551 request_ack_if_needed(original_session, true, "handle_resume"); |
| 552 else | 552 else |
| 553 module:log("warn", "Client %s@%s[%s] tried to resume stream for %s@%s[%s]", | 553 module:log("warn", "Client %s@%s[%s] tried to resume stream for %s@%s[%s]", |
| 554 session.username or "?", session.host or "?", session.type, | 554 session.username or "?", session.host or "?", session.type, |
| 555 original_session.username or "?", original_session.host or "?", original_session.type); | 555 original_session.username or "?", original_session.host or "?", original_session.type); |
| 556 session.send(st.stanza("failed", { xmlns = xmlns_sm }) | 556 session.send(st.stanza("failed", { xmlns = xmlns_sm }) |