aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_router.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_router.erl')
-rw-r--r--src/ejabberd_router.erl12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl
index 94e4c0865..87ba99094 100644
--- a/src/ejabberd_router.erl
+++ b/src/ejabberd_router.erl
@@ -31,6 +31,7 @@
%% API
-export([route/3,
+ route_error/4,
register_route/1,
register_route/2,
register_routes/1,
@@ -72,6 +73,17 @@ route(From, To, Packet) ->
ok
end.
+%% Route the error packet only if the originating packet is not an error itself.
+%% RFC3920 9.3.1
+route_error(From, To, ErrPacket, OrigPacket) ->
+ {xmlelement, _Name, Attrs, _Els} = OrigPacket,
+ case "error" == xml:get_attr_s("type", Attrs) of
+ false ->
+ route(From, To, ErrPacket);
+ true ->
+ ok
+ end.
+
register_route(Domain) ->
register_route(Domain, undefined).