diff options
Diffstat (limited to 'src/ejabberd_router.erl')
-rw-r--r-- | src/ejabberd_router.erl | 12 |
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). |