From 6951dc1cd237457187bac50480d8002db5c55e79 Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Tue, 7 Apr 2009 02:24:37 +0500 Subject: Fixed: Issue with presence error routing --- core/presencemanager.lua | 2 +- core/stanza_router.lua | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/presencemanager.lua b/core/presencemanager.lua index 29e684fb..db6bbf9a 100644 --- a/core/presencemanager.lua +++ b/core/presencemanager.lua @@ -28,7 +28,7 @@ module "presencemanager" function handle_presence(origin, stanza, from_bare, to_bare, core_route_stanza, inbound) local type = stanza.attr.type; - if type and type ~= "unavailable" then + if type and type ~= "unavailable" and type ~= "error" then if inbound then handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); else diff --git a/core/stanza_router.lua b/core/stanza_router.lua index bbbb6385..4cff83e7 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -124,7 +124,7 @@ function core_process_stanza(origin, stanza) component_handle_stanza(origin, stanza); elseif hosts[host] and hosts[host].type == "component" then -- directed at a component component_handle_stanza(origin, stanza); - elseif origin.type == "c2s" and stanza.name == "presence" and stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" then + elseif origin.type == "c2s" and stanza.name == "presence" and stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then handle_outbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); elseif hosts[host] and hosts[host].type == "local" and stanza.name == "iq" and not resource then -- directed at bare JID core_handle_stanza(origin, stanza); @@ -144,7 +144,7 @@ function core_handle_stanza(origin, stanza) if origin.type == "c2s" or origin.type == "s2sin" then if origin.type == "c2s" then if stanza.name == "presence" and origin.roster then - if stanza.attr.type == nil or stanza.attr.type == "unavailable" then + if stanza.attr.type == nil or stanza.attr.type == "unavailable" and stanza.attr.type ~= "error" then handle_normal_presence(origin, stanza, core_route_stanza); else log("warn", "Unhandled c2s presence: %s", tostring(stanza)); @@ -188,7 +188,7 @@ function core_route_stanza(origin, stanza) return component_handle_stanza(origin, stanza); end - if stanza.name == "presence" and (stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable") then resource = nil; end + if stanza.name == "presence" and (stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error") then resource = nil; end local host_session = hosts[host] if host_session and host_session.type == "local" then @@ -199,9 +199,9 @@ function core_route_stanza(origin, stanza) if not res then -- if we get here, resource was not specified or was unavailable if stanza.name == "presence" then - if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" then + if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); - else -- sender is available or unavailable + elseif not resource then -- sender is available or unavailable or error for _, session in pairs(user.sessions) do -- presence broadcast to all user resources. if session.full_jid then -- FIXME should this be just for available resources? Do we need to check subscription? stanza.attr.to = session.full_jid; -- reset at the end of function @@ -256,7 +256,7 @@ function core_route_stanza(origin, stanza) -- user not online if user_exists(node, host) then if stanza.name == "presence" then - if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" then + if stanza.attr.type ~= nil and stanza.attr.type ~= "unavailable" and stanza.attr.type ~= "error" then handle_inbound_presence_subscriptions_and_probes(origin, stanza, from_bare, to_bare, core_route_stanza); else -- TODO send unavailable presence or unsubscribed -- cgit v1.2.3