diff options
author | Holger Weiss <holger@zedat.fu-berlin.de> | 2014-11-24 20:55:18 +0100 |
---|---|---|
committer | Holger Weiss <holger@zedat.fu-berlin.de> | 2014-11-24 20:55:18 +0100 |
commit | 16311b73c8dc787e47105fd4ec16fe340d0dfc48 (patch) | |
tree | cb9d5d89f05f486f5e3422d2601d351cc3fb2d73 /src | |
parent | Merge 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.erl | 21 |
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) |