Added: presence broadcast

Tue, 14 Oct 2008 10:26:33 +0500

author
Waqas Hussain <waqas20@gmail.com>
date
Tue, 14 Oct 2008 10:26:33 +0500
changeset 106
f2a3d204a76a
parent 105
b099f0f80775
child 107
8d8debda3df2

Added: presence broadcast
Added: some additional message broadcast checks

core/stanza_router.lua file | annotate | diff | comparison | revisions
--- 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"));

mercurial