Comparison

plugins/mod_smacks.lua @ 12523:d2177cb5a766

Merge 0.12->trunk
author Kim Alvefur <zash@zash.se>
date Thu, 26 May 2022 17:48:59 +0200
parent 12519:d935af51c644
parent 12522:1671cb924002
child 12524:dd5ab9a6b599
comparison
equal deleted inserted replaced
12521:f07b3f6ad903 12523:d2177cb5a766
158 if not session.smacks then return end -- not using 158 if not session.smacks then return end -- not using
159 if session.hibernating then return end -- can't ack when asleep 159 if session.hibernating then return end -- can't ack when asleep
160 if session.awaiting_ack then return end -- already waiting 160 if session.awaiting_ack then return end -- already waiting
161 if force then return force end 161 if force then return force end
162 local queue = session.outgoing_stanza_queue; 162 local queue = session.outgoing_stanza_queue;
163 local expected_h = session.last_acknowledged_stanza + queue:count_unacked(); 163 local expected_h = queue:count_acked() + queue:count_unacked();
164 local max_unacked = max_unacked_stanzas; 164 local max_unacked = max_unacked_stanzas;
165 if session.state == "inactive" then 165 if session.state == "inactive" then
166 max_unacked = max_inactive_unacked_stanzas; 166 max_unacked = max_inactive_unacked_stanzas;
167 end 167 end
168 -- this check of last_requested_h prevents ack-loops if misbehaving clients report wrong 168 -- this check of last_requested_h prevents ack-loops if misbehaving clients report wrong
176 session.log("debug", "Sending <r> (inside timer, before send) from %s - #queue=%d", reason, queue:count_unacked()); 176 session.log("debug", "Sending <r> (inside timer, before send) from %s - #queue=%d", reason, queue:count_unacked());
177 (session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks })) 177 (session.sends2s or session.send)(st.stanza("r", { xmlns = session.smacks }))
178 if session.destroyed then return end -- sending something can trigger destruction 178 if session.destroyed then return end -- sending something can trigger destruction
179 session.awaiting_ack = true; 179 session.awaiting_ack = true;
180 -- expected_h could be lower than this expression e.g. more stanzas added to the queue meanwhile) 180 -- expected_h could be lower than this expression e.g. more stanzas added to the queue meanwhile)
181 session.last_requested_h = session.last_acknowledged_stanza + queue:count_unacked(); 181 session.last_requested_h = queue:count_acked() + queue:count_unacked();
182 session.log("debug", "Sending <r> (inside timer, after send) from %s - #queue=%d", reason, queue:count_unacked()); 182 session.log("debug", "Sending <r> (inside timer, after send) from %s - #queue=%d", reason, queue:count_unacked());
183 if not session.delayed_ack_timer then 183 if not session.delayed_ack_timer then
184 session.delayed_ack_timer = timer.add_task(delayed_ack_timeout, function() 184 session.delayed_ack_timer = timer.add_task(delayed_ack_timeout, function()
185 ack_delayed(session, nil); -- we don't know if this is the only new stanza in the queue 185 ack_delayed(session, nil); -- we don't know if this is the only new stanza in the queue
186 end); 186 end);
238 end 238 end
239 239
240 local function wrap_session_out(session, resume) 240 local function wrap_session_out(session, resume)
241 if not resume then 241 if not resume then
242 session.outgoing_stanza_queue = smqueue.new(queue_size); 242 session.outgoing_stanza_queue = smqueue.new(queue_size);
243 session.last_acknowledged_stanza = 0;
244 end 243 end
245 244
246 add_filter(session, "stanzas/out", outgoing_stanza_filter, -999); 245 add_filter(session, "stanzas/out", outgoing_stanza_filter, -999);
247 246
248 return session; 247 return session;