aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2014-11-24 20:55:18 +0100
committerHolger Weiss <holger@zedat.fu-berlin.de>2014-11-24 20:55:18 +0100
commit16311b73c8dc787e47105fd4ec16fe340d0dfc48 (patch)
treecb9d5d89f05f486f5e3422d2601d351cc3fb2d73 /src
parentMerge pull request #223 from kaLaJengkinG/patch-1 (diff)
Add new hook: c2s_filter_packet_in
The c2s_filter_packet_in hook can be used to modify or drop incoming packets before they are transmitted to the client.
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_c2s.erl21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index c0b042ec6..dd96b0e45 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1694,12 +1694,23 @@ handle_info({route, From, To,
jlib:replace_from_to_attrs(jlib:jid_to_string(From),
jlib:jid_to_string(To), NewAttrs),
FixedPacket = #xmlel{name = Name, attrs = Attrs2, children = Els},
- SentStateData = send_packet(NewState, FixedPacket),
- ejabberd_hooks:run(user_receive_packet,
- SentStateData#state.server,
- [SentStateData#state.jid, From, To, FixedPacket]),
+ FinalState =
+ case ejabberd_hooks:run_fold(c2s_filter_packet_in,
+ NewState#state.server, FixedPacket,
+ [NewState#state.jid, From, To])
+ of
+ drop ->
+ NewState;
+ FinalPacket = #xmlel{} ->
+ SentState = send_packet(NewState, FinalPacket),
+ ejabberd_hooks:run(user_receive_packet,
+ SentState#state.server,
+ [SentState#state.jid, From, To,
+ FinalPacket]),
+ SentState
+ end,
ejabberd_hooks:run(c2s_loop_debug, [{route, From, To, Packet}]),
- fsm_next_state(StateName, SentStateData);
+ fsm_next_state(StateName, FinalState);
true ->
ejabberd_hooks:run(c2s_loop_debug, [{route, From, To, Packet}]),
fsm_next_state(StateName, NewState)