Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 3104:626d2c781c66
mod_smacks: send maximum resumption timeout to client
| author | Jonas Wielicki <jonas@wielicki.name> |
|---|---|
| date | Thu, 07 Jun 2018 13:27:32 +0200 |
| parents | e672d1050529 |
| children | f703cc6e72df |
comparison
equal
deleted
inserted
replaced
| 3103:5bf79bb3cf7e | 3104:626d2c781c66 |
|---|---|
| 60 if not key then return nil; end | 60 if not key then return nil; end |
| 61 store[key] = value; | 61 store[key] = value; |
| 62 end; | 62 end; |
| 63 }; | 63 }; |
| 64 end | 64 end |
| 65 | 65 |
| 66 -- use per user limited cache for prosody >= 0.10 | 66 -- use per user limited cache for prosody >= 0.10 |
| 67 local stores = {}; | 67 local stores = {}; |
| 68 return { | 68 return { |
| 69 get = function(user, key) | 69 get = function(user, key) |
| 70 if not user then return nil; end | 70 if not user then return nil; end |
| 170 end | 170 end |
| 171 end | 171 end |
| 172 end); | 172 end); |
| 173 end | 173 end |
| 174 end | 174 end |
| 175 | 175 |
| 176 -- Trigger "smacks-ack-delayed"-event if we added new (ackable) stanzas to the outgoing queue | 176 -- Trigger "smacks-ack-delayed"-event if we added new (ackable) stanzas to the outgoing queue |
| 177 -- and there isn't already a timer for this event running. | 177 -- and there isn't already a timer for this event running. |
| 178 -- If we wouldn't do this, stanzas added to the queue after the first "smacks-ack-delayed"-event | 178 -- If we wouldn't do this, stanzas added to the queue after the first "smacks-ack-delayed"-event |
| 179 -- would not trigger this event (again). | 179 -- would not trigger this event (again). |
| 180 if #queue > max_unacked_stanzas and session.awaiting_ack and session.delayed_ack_timer == nil then | 180 if #queue > max_unacked_stanzas and session.awaiting_ack and session.delayed_ack_timer == nil then |
| 181 session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)"); | 181 session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)"); |
| 182 delayed_ack_function(session); | 182 delayed_ack_function(session); |
| 183 end | 183 end |
| 184 | 184 |
| 185 session.last_queue_count = #queue; | 185 session.last_queue_count = #queue; |
| 186 end | 186 end |
| 187 | 187 |
| 188 local function outgoing_stanza_filter(stanza, session) | 188 local function outgoing_stanza_filter(stanza, session) |
| 189 local is_stanza = stanza.attr and not stanza.attr.xmlns and not stanza.name:find":"; | 189 local is_stanza = stanza.attr and not stanza.attr.xmlns and not stanza.name:find":"; |
| 276 if resume == "true" or resume == "1" then | 276 if resume == "true" or resume == "1" then |
| 277 resume_token = uuid_generate(); | 277 resume_token = uuid_generate(); |
| 278 session_registry.set(session.username, resume_token, session); | 278 session_registry.set(session.username, resume_token, session); |
| 279 session.resumption_token = resume_token; | 279 session.resumption_token = resume_token; |
| 280 end | 280 end |
| 281 (session.sends2s or session.send)(st.stanza("enabled", { xmlns = xmlns_sm, id = resume_token, resume = resume })); | 281 (session.sends2s or session.send)(st.stanza("enabled", { xmlns = xmlns_sm, id = resume_token, resume = resume, max = resume_timeout })); |
| 282 return true; | 282 return true; |
| 283 end | 283 end |
| 284 module:hook_stanza(xmlns_sm2, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm2); end, 100); | 284 module:hook_stanza(xmlns_sm2, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm2); end, 100); |
| 285 module:hook_stanza(xmlns_sm3, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm3); end, 100); | 285 module:hook_stanza(xmlns_sm3, "enable", function (session, stanza) return handle_enable(session, stanza, xmlns_sm3); end, 100); |
| 286 | 286 |
