aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/mod_s2s.lua6
-rw-r--r--spec/util_queue_spec.lua19
2 files changed, 22 insertions, 3 deletions
diff --git a/plugins/mod_s2s.lua b/plugins/mod_s2s.lua
index 6177608b..638ace3d 100644
--- a/plugins/mod_s2s.lua
+++ b/plugins/mod_s2s.lua
@@ -135,7 +135,7 @@ local bouncy_stanzas = { message = true, presence = true, iq = true };
local function bounce_sendq(session, reason)
local sendq = session.sendq;
if not sendq then return; end
- session.log("info", "Sending error replies for %d queued stanzas because of failed outgoing connection to %s", sendq.items(), session.to_host);
+ session.log("info", "Sending error replies for %d queued stanzas because of failed outgoing connection to %s", sendq.count(), session.to_host);
local dummy = {
type = "s2sin";
send = function ()
@@ -227,7 +227,7 @@ function route_to_new_session(event)
-- Store in buffer
host_session.bounce_sendq = bounce_sendq;
host_session.sendq = queue.new(sendq_size);
- host_session.sendq:push(stanza);
+ host_session.sendq:push(st.clone(stanza));
log("debug", "stanza [%s] queued until connection complete", stanza.name);
-- FIXME Cleaner solution to passing extra data from resolvers to net.server
-- This mt-clone allows resolvers to add extra data, currently used for DANE TLSA records
@@ -366,7 +366,7 @@ function mark_connected(session)
if session.direction == "outgoing" then
if sendq then
- session.log("debug", "sending %d queued stanzas across new outgoing connection to %s", sendq.items(), session.to_host);
+ session.log("debug", "sending %d queued stanzas across new outgoing connection to %s", sendq.count(), session.to_host);
local send = session.sends2s;
for stanza in sendq:consume() do
-- TODO check send success
diff --git a/spec/util_queue_spec.lua b/spec/util_queue_spec.lua
index d73f523d..d9e92e3d 100644
--- a/spec/util_queue_spec.lua
+++ b/spec/util_queue_spec.lua
@@ -137,4 +137,23 @@ describe("util.queue", function()
assert.equal(c, 6);
end);
end);
+ describe("replace()", function ()
+ it("should work", function ()
+ local q = queue.new(10);
+ for i = 1, 5 do
+ q:push(i);
+ end
+ q:replace(6);
+ local c = 0;
+ for i in q:consume() do
+ c = c + 1;
+ if c > 1 then
+ assert.is_equal(c, i);
+ elseif c == 1 then
+ assert.is_equal(6, i);
+ end
+ end
+ assert.is_equal(5, c);
+ end);
+ end);
end);