diff options
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r-- | src/ejabberd_c2s.erl | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index ecd6321d4..113be0910 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -546,7 +546,7 @@ process_iq_in(State, #iq{} = IQ) -> -spec process_message_in(state(), message()) -> {boolean(), state()}. process_message_in(State, #message{type = T} = Msg) -> - case privacy_check_packet(State, Msg, in) of + case filter_incoming_message(State, Msg) of allow -> {true, State}; deny when T == groupchat; T == headline -> @@ -561,6 +561,24 @@ process_message_in(State, #message{type = T} = Msg) -> {false, State} end. +filter_incoming_message(State, Msg) -> + case privacy_check_packet(State, Msg, in) of + allow -> + #{lserver := LServer} = State, + case ejabberd_hooks:run_fold( + c2s_filter_incoming_packet, + LServer, + allow, + [State, Msg]) of + allow -> + allow; + deny -> + deny + end; + deny -> + deny + end. + -spec process_presence_in(state(), presence()) -> {boolean(), state()}. process_presence_in(#{lserver := LServer, pres_a := PresA} = State0, #presence{from = From, to = To, type = T} = Pres) -> |