aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_service.erl
diff options
context:
space:
mode:
authorPouriya Jahanbakhsh <pouriya.jahanbakhsh@gmail.com>2018-03-30 21:31:30 +0430
committerPouriya Jahanbakhsh <pouriya.jahanbakhsh@gmail.com>2018-03-30 21:31:30 +0430
commit7b3d26992b492063d6a6c2af3c595934d681accc (patch)
tree9d23e7582dd658c51a9e279fc8a615d7616871ea /src/ejabberd_service.erl
parentDon't produce a crash dump during intentional exit (diff)
feat: add hook for sending packet from component
New hook 'component_send_packet' added. Callback function must accept one argument {Pkt, ComponentState} and should yield 'drop' or {NewPkt, NewComponentState}.
Diffstat (limited to '')
-rw-r--r--src/ejabberd_service.erl12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index 03b768bdf..a150116a9 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -185,14 +185,20 @@ handle_auth_failure(_, Mech, Reason,
Reason]),
State.
-handle_authenticated_packet(Pkt0, #{ip := {IP, _}, lang := Lang} = State)
+handle_authenticated_packet(Pkt0, #{server := Server, ip := {IP, _}, lang := Lang} = State)
when ?is_stanza(Pkt0) ->
Pkt = xmpp:put_meta(Pkt0, ip, IP),
From = xmpp:get_from(Pkt),
case check_from(From, State) of
true ->
- ejabberd_router:route(Pkt),
- State;
+ {Pkt2, State2} = ejabberd_hooks:run_fold(component_send_packet, Server, {Pkt, State}, []),
+ case Pkt2 of
+ drop ->
+ ok;
+ _ ->
+ ejabberd_router:route(Pkt2)
+ end,
+ State2;
false ->
Txt = <<"Improper domain part of 'from' attribute">>,
Err = xmpp:serr_invalid_from(Txt, Lang),