aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2015-03-25 00:13:05 +0100
committerHolger Weiss <holger@zedat.fu-berlin.de>2015-03-25 00:13:05 +0100
commitbc008d40419a94c20498371fac771638a39b84d2 (patch)
treeb65e5dd0c9f1c5e93a2ca88f874904b19ec63bba /src
parentReturn error when incoming message is blocked (diff)
Update routing for unavailable resources
As per RFC 6121, don't reroute non-chat messages sent to unavailable resources.
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_sm.erl10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index abe15d9ff..ebcf6fa58 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -525,7 +525,15 @@ do_route(From, To, #xmlel{} = Packet) ->
case Mod:get_sessions(LUser, LServer, LResource) of
[] ->
case Name of
- <<"message">> -> route_message(From, To, Packet);
+ <<"message">> ->
+ case xml:get_attr_s(<<"type">>, Attrs) of
+ <<"chat">> -> route_message(From, To, Packet);
+ <<"error">> -> ok;
+ _ ->
+ Err = jlib:make_error_reply(Packet,
+ ?ERR_SERVICE_UNAVAILABLE),
+ ejabberd_router:route(To, From, Err)
+ end;
<<"iq">> ->
case xml:get_attr_s(<<"type">>, Attrs) of
<<"error">> -> ok;