Changeset

1164:251954b07cae

stanza_router: Refactored core_handle_stanza, and added handling for unsupported top-level stanzas
author Waqas Hussain <waqas20@gmail.com>
date Sat, 16 May 2009 00:03:24 +0500
parents 1163:8b4a57765b04
children 1165:ec69bcc7ceb5
files core/stanza_router.lua
diffstat 1 files changed, 7 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/core/stanza_router.lua	Fri May 15 23:42:35 2009 +0500
+++ b/core/stanza_router.lua	Sat May 16 00:03:24 2009 +0500
@@ -43,11 +43,6 @@
 local jid_prepped_split = require "util.jid".prepped_split;
 local print = print;
 local fire_event = require "core.eventmanager2".fire_event;
-local function checked_error_reply(origin, stanza)
-	if (stanza.attr.xmlns == "jabber:client" or stanza.attr.xmlns == "jabber:server") and stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then
-		origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); -- FIXME correct error?
-	end
-end
 
 function core_process_stanza(origin, stanza)
 	(origin.log or log)("debug", "Received[%s]: %s", origin.type, stanza:top_tag())
@@ -142,28 +137,15 @@
 -- This function handles stanzas which are not routed any further,
 -- that is, they are handled by this server
 function core_handle_stanza(origin, stanza)
-	-- Handlers
-	if modules_handle_stanza(select(2, jid_split(stanza.attr.to)) or origin.host or origin.to_host, origin, stanza) then return; end
-	if origin.type == "c2s" or origin.type == "s2sin" then
-		if origin.type == "c2s" then
-			if stanza.name == "presence" and origin.roster then
-				if stanza.attr.type == nil or stanza.attr.type == "unavailable" and stanza.attr.type ~= "error" then
-					handle_normal_presence(origin, stanza, core_route_stanza);
-				else
-					log("warn", "Unhandled c2s presence: %s", tostring(stanza));
-					checked_error_reply(origin, stanza);
-				end
-			else
-				log("warn", "Unhandled c2s stanza: %s", tostring(stanza));
-				checked_error_reply(origin, stanza);
+	if not modules_handle_stanza(select(2, jid_split(stanza.attr.to)) or origin.host or origin.to_host, origin, stanza) then
+		log("warn", "Unhandled %s stanza: %s", origin.type, tostring(stanza));
+		if (stanza.attr.xmlns == "jabber:client" or stanza.attr.xmlns == "jabber:server") then
+			if stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then
+				origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
 			end
-		else -- s2s stanzas
-			log("warn", "Unhandled s2s stanza: %s", tostring(stanza));
-			checked_error_reply(origin, stanza);
+		else
+			origin:close("unsupported-stanza-type");
 		end
-	else
-		log("warn", "Unhandled %s stanza: %s", origin.type, tostring(stanza));
-		checked_error_reply(origin, stanza);
 	end
 end