diff mod_carbons/mod_carbons.lua @ 664:2f11d2473afd

mod_carbons: Move creation of the carbon stanza out of the loop.
author Kim Alvefur <zash@zash.se>
date Sun, 06 May 2012 23:27:28 +0200
parents 267548522810
children 5f7dd5336dbe
line wrap: on
line diff
--- a/mod_carbons/mod_carbons.lua	Mon Apr 30 17:25:09 2012 +0200
+++ b/mod_carbons/mod_carbons.lua	Sun May 06 23:27:28 2012 +0200
@@ -80,30 +80,20 @@
 		return
 	end
 
+	local msg = st.clone(stanza);
+	msg.attr.xmlns = msg.attr.xmlns or "jabber:client";
+	local fwd = st.message{ from = bare_jid, type = orig_type, }
+		:tag(c2s and "sent" or "received", { xmlns = xmlns_carbons }):up()
+			:tag("forwarded", { xmlns = xmlns_forward })
+				:add_child(msg):reset();
+
 	user_sessions = user_sessions and user_sessions.sessions;
 	for resource, session in pairs(user_sessions) do
 		local full_jid = bare_jid .. "/" .. resource;
-		module:log("debug", "%s wants carbons: %s", session.full_jid, tostring(session.want_carbons));
-		if session.want_carbons then
-			if c2s then
-				module:log("debug", "Session is origin: %s", tostring(session == origin));
-			else
-				module:log("debug", "Session is in ignore list: %s", tostring(no_carbon_to[resource]));
-			end
-			if (c2s and session ~= origin) or (not c2s and not no_carbon_to[resource]) then
-				local msg = st.clone(stanza);
-				msg.attr.xmlns = msg.attr.xmlns or "jabber:client";
-				local fwd = st.message{
-					from = bare_jid,
-					to = full_jid,
-					type = orig_type,
-				}
-				:tag(c2s and "sent" or "received", { xmlns = xmlns_carbons }):up()
-				:tag("forwarded", { xmlns = xmlns_forward })
-				:add_child(msg);
-				module:log("debug", "Sending carbon");
-				session.send(fwd);
-			end
+		if session.want_carbons and ((c2s and session ~= origin) or (not c2s and not no_carbon_to[resource])) then
+			fwd.attr.to = full_jid;
+			module:log("debug", "Sending carbon to %s", full_jid);
+			session.send(fwd);
 		end
 	end
 end