Software /
code /
prosody
Diff
core/stanza_router.lua @ 152:6b8e2bd82ac5
Moved some code and removed unnecessary checks.
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Fri, 24 Oct 2008 01:06:54 +0500 |
parent | 151:096c7b9374fc |
child | 153:8310bfddaba8 |
line wrap: on
line diff
--- a/core/stanza_router.lua Fri Oct 24 00:26:01 2008 +0500 +++ b/core/stanza_router.lua Fri Oct 24 01:06:54 2008 +0500 @@ -56,7 +56,7 @@ local session = origin; if stanza.name == "presence" and origin.roster then - if stanza.attr.type == nil or stanza.attr.type == "available" or stanza.attr.type == "unavailable" then + if stanza.attr.type == nil or stanza.attr.type == "unavailable" then for jid in pairs(origin.roster) do -- broadcast to all interested contacts local subscription = origin.roster[jid].subscription; if subscription == "both" or subscription == "from" then @@ -65,28 +65,28 @@ end end 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 + for _, res in pairs(hosts[host].sessions[node].sessions) do -- broadcast to all resources + if res ~= origin and res.full_jid then -- to resource. FIXME is res.full_jid the correct check? Maybe it should be res.presence + stanza.attr.to = res.full_jid; + core_route_stanza(origin, stanza); 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 + for jid in pairs(origin.roster) do -- probe all contacts we are subscribed to local subscription = origin.roster[jid].subscription; if subscription == "both" or subscription == "to" then probe.attr.to = jid; core_route_stanza(origin, probe); end end + for _, res in pairs(hosts[host].sessions[node].sessions) do -- broadcast from all resources + if res ~= origin and stanza.attr.type ~= "unavailable" and res.presence then -- FIXME does unavailable qualify as initial presence? + res.presence.attr.to = origin.full_jid; + core_route_stanza(res, res.presence); + res.presence.attr.to = nil; + end + end -- TODO resend subscription requests end origin.presence = stanza;