Mercurial > prosody-modules
comparison mod_smacks/mod_smacks.lua @ 1408:ed2a9c00b5c4
mod_smacks: Impose a limit on number of unacked stanzas (Thanks Holger)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Wed, 07 May 2014 16:18:05 +0200 |
| parents | b631c8a8b9e7 |
| children | 7ddb522d9b28 |
comparison
equal
deleted
inserted
replaced
| 1407:b631c8a8b9e7 | 1408:ed2a9c00b5c4 |
|---|---|
| 17 local sm2_attr = { xmlns = xmlns_sm2 }; | 17 local sm2_attr = { xmlns = xmlns_sm2 }; |
| 18 local sm3_attr = { xmlns = xmlns_sm3 }; | 18 local sm3_attr = { xmlns = xmlns_sm3 }; |
| 19 | 19 |
| 20 local resume_timeout = module:get_option_number("smacks_hibernation_time", 300); | 20 local resume_timeout = module:get_option_number("smacks_hibernation_time", 300); |
| 21 local s2s_smacks = module:get_option_boolean("smacks_enabled_s2s", false); | 21 local s2s_smacks = module:get_option_boolean("smacks_enabled_s2s", false); |
| 22 local max_queue_size = module:get_option_number("smacks_max_queue_size", 500); | |
| 22 local max_unacked_stanzas = module:get_option_number("smacks_max_unacked_stanzas", 0); | 23 local max_unacked_stanzas = module:get_option_number("smacks_max_unacked_stanzas", 0); |
| 23 local core_process_stanza = prosody.core_process_stanza; | 24 local core_process_stanza = prosody.core_process_stanza; |
| 24 local sessionmanager = require"core.sessionmanager"; | 25 local sessionmanager = require"core.sessionmanager"; |
| 25 | 26 |
| 26 local c2s_sessions = module:shared("/*/c2s/sessions"); | 27 local c2s_sessions = module:shared("/*/c2s/sessions"); |
| 88 | 89 |
| 89 if cached_stanza and cached_stanza:get_child("delay", xmlns_delay) == nil then | 90 if cached_stanza and cached_stanza:get_child("delay", xmlns_delay) == nil then |
| 90 cached_stanza = cached_stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()}); | 91 cached_stanza = cached_stanza:tag("delay", { xmlns = xmlns_delay, from = session.host, stamp = datetime.datetime()}); |
| 91 end | 92 end |
| 92 | 93 |
| 94 if max_queue_size > 0 and #queue > max_queue_size then | |
| 95 session.log("warn", "Too many unacked stanzas"); | |
| 96 session:close{ condition = "policy-violation"; text = "Too many unacked stanzas"; }; | |
| 97 end | |
| 93 queue[#queue+1] = cached_stanza; | 98 queue[#queue+1] = cached_stanza; |
| 94 session.log("debug", "#queue = %d", #queue); | 99 session.log("debug", "#queue = %d", #queue); |
| 95 end | 100 end |
| 96 if session.hibernating then | 101 if session.hibernating then |
| 97 session.log("debug", "hibernating, stanza queued") | 102 session.log("debug", "hibernating, stanza queued") |
