From 2b81d8a673f98895b5950884b0daba876bb62e3b Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Thu, 23 Oct 2008 19:47:56 +0500 Subject: Presence fixes - Presence to other resources sent correctly - Resource of the recipient ignored for all presence except available and unavailable --- core/stanza_router.lua | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'core/stanza_router.lua') diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 0d8c4fbe..3d53e797 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -12,7 +12,7 @@ local send = require "core.sessionmanager".send_to_session; local user_exists = require "core.usermanager".user_exists; local jid_split = require "util.jid".split; -local print = print; +local print, debug = print, debug; function core_process_stanza(origin, stanza) log("debug", "Received: "..tostring(stanza)) @@ -63,13 +63,20 @@ function core_handle_stanza(origin, stanza) core_route_stanza(origin, stanza); end end - --[[local node, host = jid_split(stanza.attr.from); - for _, res in pairs(hosts[host].sessions[node].sessions) do -- broadcast to all resources - if res.full_jid then - res = user.sessions[k]; - break; + local node, host = jid_split(stanza.attr.from); + for _, res in pairs(hosts[host].sessions[node].sessions) do -- broadcast to all resources and from resources + if res ~= origin then + if res.full_jid then -- to resource. FIXME is this check correct? Maybe it should be res.presence + stanza.attr.to = res.full_jid; + core_route_stanza(origin, stanza); + end + if res.presence then -- from all resources for which we have presence + res.presence.attr.to = origin.full_jid; + core_route_stanza(res, res.presence); + res.presence.attr.to = nil; + end end - end]] + end if not origin.presence then -- presence probes on initial presence local probe = st.presence({from = origin.full_jid, type = "probe"}); for jid in pairs(origin.roster) do @@ -106,7 +113,7 @@ function core_route_stanza(origin, stanza) local to = stanza.attr.to; local node, host, resource = jid_split(to); - if stanza.name == "presence" and stanza.attr.type == "probe" then resource = nil; end + if stanza.name == "presence" and (stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable") then resource = nil; end local host_session = hosts[host] if host_session and host_session.type == "local" then -- cgit v1.2.3