From e9a053f7acb572a12bf6fc514bc80a7e5afef8f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Holger=20Wei=C3=9F?= Date: Mon, 7 Sep 2020 10:12:19 +0200 Subject: [PATCH] Allow for filtering outgoing s2s stanzas (#3381) Let 's2s_send_packet' hook callbacks filter stanzas, analogous to the 's2s_receive_packet' hook. --- src/ejabberd_s2s.erl | 7 +++++-- src/mod_metrics.erl | 5 +++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ejabberd_s2s.erl b/src/ejabberd_s2s.erl index f71d87fc8..f710cae68 100644 --- a/src/ejabberd_s2s.erl +++ b/src/ejabberd_s2s.erl @@ -351,8 +351,11 @@ route(Packet) -> {ok, Pid} when is_pid(Pid) -> ?DEBUG("Sending to process ~p~n", [Pid]), #jid{lserver = MyServer} = From, - ejabberd_hooks:run(s2s_send_packet, MyServer, [Packet]), - ejabberd_s2s_out:route(Pid, Packet); + case ejabberd_hooks:run_fold(s2s_send_packet, MyServer, Packet, + []) of + drop -> ok; + Packet1 -> ejabberd_s2s_out:route(Pid, Packet1) + end; {error, Reason} -> Lang = xmpp:get_lang(Packet), Err = case Reason of diff --git a/src/mod_metrics.erl b/src/mod_metrics.erl index 62229595c..81c39d59e 100644 --- a/src/mod_metrics.erl +++ b/src/mod_metrics.erl @@ -103,10 +103,11 @@ user_receive_packet({Packet, #{jid := #jid{lserver = LServer}} = C2SState}) -> push(LServer, user_receive_packet), {Packet, C2SState}. --spec s2s_send_packet(stanza()) -> any(). +-spec s2s_send_packet(stanza()) -> stanza(). s2s_send_packet(Packet) -> #jid{lserver = LServer} = xmpp:get_from(Packet), - push(LServer, s2s_send_packet). + push(LServer, s2s_send_packet), + Packet. -spec s2s_receive_packet({stanza(), ejabberd_s2s_in:state()}) -> {stanza(), ejabberd_s2s_in:state()}.