comparison mod_smacks/mod_smacks.lua @ 4637:242251ce1036

mod_smacks: Use 'smacks_max_inactive_unacked_stanzas' when inactive and no timer This separate limit should probably apply also when it somehow doesn't have a timer set.
author Kim Alvefur <zash@zash.se>
date Wed, 28 Jul 2021 16:06:03 +0200
parents ab7dc5c5c782
children edbd84bbd8fb
comparison
equal deleted inserted replaced
4636:6bcccc63b542 4637:242251ce1036
161 161
162 local function request_ack_if_needed(session, force, reason, stanza) 162 local function request_ack_if_needed(session, force, reason, stanza)
163 local queue = session.outgoing_stanza_queue; 163 local queue = session.outgoing_stanza_queue;
164 local expected_h = session.last_acknowledged_stanza + #queue; 164 local expected_h = session.last_acknowledged_stanza + #queue;
165 -- session.log("debug", "*** SMACKS(1) ***: awaiting_ack=%s, hibernating=%s", tostring(session.awaiting_ack), tostring(session.hibernating)); 165 -- session.log("debug", "*** SMACKS(1) ***: awaiting_ack=%s, hibernating=%s", tostring(session.awaiting_ack), tostring(session.hibernating));
166 local max_unacked = max_unacked_stanzas;
167 if session.state == "inactive" then
168 max_unacked = max_inactive_unacked_stanzas;
169 end
166 if session.awaiting_ack == nil and not session.hibernating then 170 if session.awaiting_ack == nil and not session.hibernating then
167 local max_unacked = max_unacked_stanzas;
168 if session.state == "inactive" then
169 max_unacked = max_inactive_unacked_stanzas;
170 end
171 -- this check of last_requested_h prevents ack-loops if missbehaving clients report wrong 171 -- this check of last_requested_h prevents ack-loops if missbehaving clients report wrong
172 -- stanza counts. it is set when an <r> is really sent (e.g. inside timer), preventing any 172 -- stanza counts. it is set when an <r> is really sent (e.g. inside timer), preventing any
173 -- further requests until a higher h-value would be expected. 173 -- further requests until a higher h-value would be expected.
174 -- session.log("debug", "*** SMACKS(2) ***: #queue=%s, max_unacked_stanzas=%s, expected_h=%s, last_requested_h=%s", tostring(#queue), tostring(max_unacked_stanzas), tostring(expected_h), tostring(session.last_requested_h)); 174 -- session.log("debug", "*** SMACKS(2) ***: #queue=%s, max_unacked_stanzas=%s, expected_h=%s, last_requested_h=%s", tostring(#queue), tostring(max_unacked_stanzas), tostring(expected_h), tostring(session.last_requested_h));
175 if (#queue > max_unacked and expected_h ~= session.last_requested_h) or force then 175 if (#queue > max_unacked and expected_h ~= session.last_requested_h) or force then
198 198
199 -- Trigger "smacks-ack-delayed"-event if we added new (ackable) stanzas to the outgoing queue 199 -- Trigger "smacks-ack-delayed"-event if we added new (ackable) stanzas to the outgoing queue
200 -- and there isn't already a timer for this event running. 200 -- and there isn't already a timer for this event running.
201 -- If we wouldn't do this, stanzas added to the queue after the first "smacks-ack-delayed"-event 201 -- If we wouldn't do this, stanzas added to the queue after the first "smacks-ack-delayed"-event
202 -- would not trigger this event (again). 202 -- would not trigger this event (again).
203 if #queue > max_unacked_stanzas and session.awaiting_ack and session.delayed_ack_timer == nil then 203 if #queue > max_unacked and session.awaiting_ack and session.delayed_ack_timer == nil then
204 session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)"); 204 session.log("debug", "Calling delayed_ack_function directly (still waiting for ack)");
205 delayed_ack_function(session, stanza); -- this is the only new stanza in the queue --> provide it to other modules 205 delayed_ack_function(session, stanza); -- this is the only new stanza in the queue --> provide it to other modules
206 end 206 end
207 end 207 end
208 208