mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-28 16:34:13 +01:00
ejabberd_sm: Fix routing of headline messages
As per RFC 6121, silently drop headline messages sent to the bare JID of an offline user or to the full JID of an unavailable resource.
This commit is contained in:
parent
8bfb6fdd4e
commit
179e8934cf
@ -177,7 +177,8 @@ check_in_subscription(Acc, User, Server, _JID, _Type, _Reason) ->
|
|||||||
|
|
||||||
-spec bounce_offline_message({bounce, message()} | any()) -> any().
|
-spec bounce_offline_message({bounce, message()} | any()) -> any().
|
||||||
|
|
||||||
bounce_offline_message({bounce, Packet} = Acc) ->
|
bounce_offline_message({bounce, #message{type = T} = Packet} = Acc)
|
||||||
|
when T == chat; T == groupchat; T == normal ->
|
||||||
Lang = xmpp:get_lang(Packet),
|
Lang = xmpp:get_lang(Packet),
|
||||||
Txt = <<"User session not found">>,
|
Txt = <<"User session not found">>,
|
||||||
Err = xmpp:err_service_unavailable(Txt, Lang),
|
Err = xmpp:err_service_unavailable(Txt, Lang),
|
||||||
@ -572,9 +573,11 @@ do_route(Packet) ->
|
|||||||
case online(Mod:get_sessions(LUser, LServer, LResource)) of
|
case online(Mod:get_sessions(LUser, LServer, LResource)) of
|
||||||
[] ->
|
[] ->
|
||||||
case Packet of
|
case Packet of
|
||||||
#message{type = T} when T == chat; T == normal;
|
#message{type = T} when T == chat; T == normal ->
|
||||||
T == headline ->
|
|
||||||
route_message(Packet);
|
route_message(Packet);
|
||||||
|
#message{type = T} when T == headline ->
|
||||||
|
?DEBUG("dropping headline to unavailable resource:~n~s",
|
||||||
|
[xmpp:pp(Packet)]);
|
||||||
#presence{} ->
|
#presence{} ->
|
||||||
?DEBUG("dropping presence to unavailable resource:~n~s",
|
?DEBUG("dropping presence to unavailable resource:~n~s",
|
||||||
[xmpp:pp(Packet)]);
|
[xmpp:pp(Packet)]);
|
||||||
|
@ -197,7 +197,9 @@ send_all_master(Config) ->
|
|||||||
Acc + 1
|
Acc + 1
|
||||||
end, 0, Deliver),
|
end, 0, Deliver),
|
||||||
lists:foreach(
|
lists:foreach(
|
||||||
fun(Msg) ->
|
fun(#message{type = headline} = Msg) ->
|
||||||
|
send(Config, Msg#message{to = BarePeer});
|
||||||
|
(Msg) ->
|
||||||
#message{type = error} = Err =
|
#message{type = error} = Err =
|
||||||
send_recv(Config, Msg#message{to = BarePeer}),
|
send_recv(Config, Msg#message{to = BarePeer}),
|
||||||
#stanza_error{reason = 'service-unavailable'} = xmpp:get_error(Err)
|
#stanza_error{reason = 'service-unavailable'} = xmpp:get_error(Err)
|
||||||
|
Loading…
Reference in New Issue
Block a user