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(-) (limited to 'core') 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 From 9982558804de3976a3d5d9e12ab5215503420e0f Mon Sep 17 00:00:00 2001 From: Waqas Hussain Date: Tue, 7 Apr 2009 02:32:49 +0500 Subject: Fixed: Send correct error reply for IQs directed at unavailable resources --- core/stanza_router.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'core') diff --git a/core/stanza_router.lua b/core/stanza_router.lua index 4cff83e7..08224c8d 100644 --- a/core/stanza_router.lua +++ b/core/stanza_router.lua @@ -244,8 +244,8 @@ function core_route_stanza(origin, stanza) -- TODO deal with storage errors end end - else - -- TODO send IQ error + elseif stanza.attr.type == "get" or stanza.attr.type == "set" then + origin.send(st.error_reply(stanza, "cancel", "service-unavailable")); end else -- User + resource is online... -- cgit v1.2.3