Diff

core/stanza_router.lua @ 106:f2a3d204a76a

Added: presence broadcast Added: some additional message broadcast checks
author Waqas Hussain <waqas20@gmail.com>
date Tue, 14 Oct 2008 10:26:33 +0500
parent 105:b099f0f80775
child 113:9026fdad1531
line wrap: on
line diff
--- a/core/stanza_router.lua	Tue Oct 14 09:56:14 2008 +0500
+++ b/core/stanza_router.lua	Tue Oct 14 10:26:33 2008 +0500
@@ -67,17 +67,33 @@
 		local user = host_session.sessions[node];
 		if user then
 			local res = user.sessions[resource];
-			-- TODO do something about presence broadcast
 			if not res then
 				-- if we get here, resource was not specified or was unavailable
-				for k in pairs(user.sessions) do
-					res = user.sessions[k];
-					break;
+				if stanza.name == "presence" then
+					for k in pairs(user.sessions) do -- presence broadcast to all user resources
+						if user.sessions[k].full_jid then
+							stanza.attr.to = user.sessions[k].full_jid;
+							send(user.sessions[k], stanza);
+						end
+					end
+				else if stanza.name == "message" then -- select a resource to recieve message
+					for k in pairs(user.sessions) do
+						if user.sessions[k].full_jid then
+							res = user.sessions[k];
+							break;
+						end
+					end
+					-- TODO find resource with greatest priority
+				else
+					error("IQs should't get here");
 				end
-				-- TODO find resource with greatest priority
 			end
-			stanza.attr.to = res.full_jid;
-			send(res, stanza); -- Yay \o/
+			if res then
+				stanza.attr.to = res.full_jid;
+				send(res, stanza); -- Yay \o/
+			elseif stanza.name == "message" then
+				-- TODO return message error
+			end
 		else
 			-- user not found
 			send(origin, st.error_reply(stanza, "cancel", "service-unavailable"));