From 5a896f70f20cf967c120054a0ebab0a8e4368c4b Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Tue, 14 Oct 2008 10:26:33 +0500 Subject: Added: presence broadcast Added: some additional message broadcast checks --- core/stanza_router.lua | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'core') diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 7fa18eb0..f133f891 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -67,17 +67,33 @@ function core_route_stanza(origin, stanza) 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")); -- cgit v1.2.3