summaryrefslogtreecommitdiff
path: root/src/ejabberd_sm.erl
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2017-11-09 00:21:40 +0100
committerHolger Weiss <holger@zedat.fu-berlin.de>2017-11-09 00:21:40 +0100
commit5cf4e200ba4451ceef7b58be089b5aa0b4ff1734 (patch)
treebdb9109ade2ed1613d93383d42307c346db5b72b /src/ejabberd_sm.erl
parentPrepare version 0.6.1 of XEP-0313 (MAM) support (diff)
mod_mam: Make sure a stanza ID is always added
Let mod_mam store incoming messages from a new hook in ejabberd_sm. This makes sure all messages are tagged with a stanza ID, including those that are forked to multiple resources in ejabberd_sm. Closes #1344.
Diffstat (limited to 'src/ejabberd_sm.erl')
-rw-r--r--src/ejabberd_sm.erl15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index 96dbb4e8..3df1d88e 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -137,10 +137,17 @@ route(To, Term) ->
-spec route(stanza()) -> ok.
route(Packet) ->
- try do_route(Packet), ok
- catch E:R ->
- ?ERROR_MSG("failed to route packet:~n~s~nReason = ~p",
- [xmpp:pp(Packet), {E, {R, erlang:get_stacktrace()}}])
+ #jid{lserver = LServer} = xmpp:get_to(Packet),
+ case ejabberd_hooks:run_fold(sm_receive_packet, LServer, Packet, []) of
+ drop ->
+ ?DEBUG("hook dropped stanza:~n~s", [xmpp:pp(Packet)]);
+ Packet1 ->
+ try do_route(Packet1), ok
+ catch E:R ->
+ ?ERROR_MSG("failed to route packet:~n~s~nReason = ~p",
+ [xmpp:pp(Packet1),
+ {E, {R, erlang:get_stacktrace()}}])
+ end
end.
-spec open_session(sid(), binary(), binary(), binary(), prio(), info()) -> ok.