Diff

core/stanza_router.lua @ 119:b48a573608e8

Relocate presence broadcast to core_handle_stanza() which is for processing stanzas that the server must handle (not route)
author Matthew Wild <mwild1@gmail.com>
date Thu, 23 Oct 2008 03:52:51 +0100
parent 113:9026fdad1531
child 121:74e5919e4737
line wrap: on
line diff
--- a/core/stanza_router.lua	Wed Oct 22 23:12:26 2008 +0100
+++ b/core/stanza_router.lua	Thu Oct 23 03:52:51 2008 +0100
@@ -37,9 +37,23 @@
 	
 	-- TODO presence subscriptions
 	if not to then
+			core_handle_stanza(origin, stanza);
+	elseif hosts[to] and hosts[to].type == "local" then
+		core_handle_stanza(origin, stanza);
+	elseif stanza.name == "iq" and not select(3, jid_split(to)) then
+		core_handle_stanza(origin, stanza);
+	elseif origin.type == "c2s" then
+		core_route_stanza(origin, stanza);
+	end
+end
+
+function core_handle_stanza(origin, stanza)
+	-- Handlers
+	if origin.type == "c2s" or origin.type == "c2s_unauthed" then
+		local session = origin;
+		
 		if stanza.name == "presence" and origin.roster then
 			if stanza.attr.type == nil or stanza.attr.type == "available" or stanza.attr.type == "unavailable" then
-				--stanza.attr.from = origin.full_jid;
 				for jid in pairs(origin.roster) do -- broadcast to all interested contacts
 					local subscription = origin.roster[jid].subscription;
 					if subscription == "both" or subscription == "from" then
@@ -70,30 +84,9 @@
 				-- TODO error, bad type
 			end
 		else
-			core_handle_stanza(origin, stanza);
+			log("debug", "Routing stanza to local");
+			handle_stanza(session, stanza);
 		end
-	elseif hosts[to] and hosts[to].type == "local" then
-		core_handle_stanza(origin, stanza);
-	elseif stanza.name == "iq" and not select(3, jid_split(to)) then
-		core_handle_stanza(origin, stanza);
-	elseif origin.type == "c2s" then
-		core_route_stanza(origin, stanza);
-	end
-end
-
-function core_handle_stanza(origin, stanza)
-	-- Handlers
-	if origin.type == "c2s" or origin.type == "c2s_unauthed" then
-		local session = origin;
-		
-		log("debug", "Routing stanza");
-		-- Stanza has no to attribute
-		--local to_node, to_host, to_resource = jid_split(stanza.attr.to);
-		--if not to_host then error("Invalid destination JID: "..string.format("{ %q, %q, %q } == %q", to_node or "", to_host or "", to_resource or "", stanza.attr.to or "nil")); end
-		
-		-- Stanza is to this server, or a user on this server
-		log("debug", "Routing stanza to local");
-		handle_stanza(session, stanza);
 	end
 end