Diff

mod_smacks/mod_smacks.lua @ 1522:d4a4ed31567e

mod_smacks: Trick session.send() into not returning nil or mod_message will act as if messages were not delivered
author Kim Alvefur <zash@zash.se>
date Mon, 13 Oct 2014 14:19:49 +0200
parent 1520:2881d532f385
child 1526:120817435151
line wrap: on
line diff
--- a/mod_smacks/mod_smacks.lua	Sun Oct 12 16:05:48 2014 +0200
+++ b/mod_smacks/mod_smacks.lua	Mon Oct 13 14:19:49 2014 +0200
@@ -72,7 +72,6 @@
 	local is_stanza = stanza.attr and not stanza.attr.xmlns;
 	if is_stanza and not stanza._cached then -- Stanza in default stream namespace
 		local queue = session.outgoing_stanza_queue;
-		module:log("debug", "st.clone( %s ) -- %s a stanza", tostring(stanza), is_stanza and "is" or "is not");
 		local cached_stanza = st.clone(stanza);
 		cached_stanza._cached = true;
 
@@ -82,6 +81,10 @@
 
 		queue[#queue+1] = cached_stanza;
 		session.log("debug", "#queue = %d", #queue);
+		if session.hibernating then
+			session.log("debug", "hibernating, stanza queued");
+			return ""; -- Hack to make session.send() not return nil
+		end
 		if #queue > max_unacked_stanzas then
 			module:add_timer(0, function ()
 				if not session.awaiting_ack then
@@ -91,12 +94,6 @@
 			end);
 		end
 	end
-	if session.hibernating then
-		session.log("debug", "hibernating, stanza queued")
-		-- The session is hibernating, no point in sending the stanza
-		-- over a dead connection.  It will be delivered upon resumption.
-		return nil; -- or empty string?
-	end
 	return stanza;
 end
 
@@ -109,7 +106,6 @@
 end
 
 local function wrap_session(session, resume)
-	-- Overwrite process_stanza() and send()
 	local queue;
 	if not resume then
 		queue = {};