diff --git a/src/jingle_sip/mod_jingle_sip.erl b/src/jingle_sip/mod_jingle_sip.erl index b9f71fe29e0..935a40a0225 100644 --- a/src/jingle_sip/mod_jingle_sip.erl +++ b/src/jingle_sip/mod_jingle_sip.erl @@ -31,7 +31,7 @@ %% gen_mod callbacks -export([start/2, stop/1, config_spec/0]). --export([user_send_packet/3]). +-export([user_send_iq/3]). -export([content_to_nksip_media/1]). @@ -119,36 +119,27 @@ process_u2p(#{username := U, phone := P}) -> {U, P}. hooks(Host) -> - [{user_send_packet, Host, fun ?MODULE:user_send_packet/3, #{}, 10}]. - --spec user_send_packet(mongoose_acc:t(), mongoose_c2s_hooks:hook_params(), gen_hook:extra()) -> - gen_hook:hook_fn_ret(mongoose_acc:t()). -user_send_packet(Acc, _, _) -> - case mongoose_acc:stanza_name(Acc) of - <<"iq">> -> - maybe_iq_to_other_user(Acc); - _ -> - {ok, Acc} - end. + [{user_send_iq, Host, fun ?MODULE:user_send_iq/3, #{}, 10}]. -maybe_iq_to_other_user(Acc) -> - #jid{luser = StanzaTo} = mongoose_acc:to_jid(Acc), +-spec user_send_iq(mongoose_acc:t(), mongoose_c2s_hooks:hook_params(), gen_hook:extra()) -> + mongoose_c2s_hooks:hook_result(). +user_send_iq(Acc, _, _) -> + {From, To, Packet} = mongoose_acc:packet(Acc), + #jid{luser = StanzaTo} = To, #jid{luser = LUser} = mongoose_acc:get(c2s, origin_jid, Acc), case LUser of StanzaTo -> - QueryInfo = jlib:iq_query_info(mongoose_acc:element(Acc)), + QueryInfo = jlib:iq_query_info(Packet), maybe_jingle_get_stanza_to_self(QueryInfo, Acc); _ -> - QueryInfo = jlib:iq_query_info(mongoose_acc:element(Acc)), - maybe_jingle_stanza(QueryInfo, Acc) + QueryInfo = jlib:iq_query_info(Packet), + maybe_jingle_stanza(QueryInfo, From, To, Acc) end. -maybe_jingle_stanza(#iq{xmlns = ?JINGLE_NS, sub_el = Jingle, type = set} = IQ, Acc) -> +maybe_jingle_stanza(#iq{xmlns = ?JINGLE_NS, sub_el = Jingle, type = set} = IQ, From, To, Acc) -> JingleAction = exml_query:attr(Jingle, <<"action">>), - From = mongoose_acc:from_jid(Acc), - To = mongoose_acc:to_jid(Acc), maybe_translate_to_sip(JingleAction, From, To, IQ, Acc); -maybe_jingle_stanza(_, Acc) -> +maybe_jingle_stanza(_, _, _, Acc) -> {ok, Acc}. maybe_jingle_get_stanza_to_self(#iq{xmlns = ?JINGLE_NS, sub_el = Jingle, type = get} = IQ, Acc) -> diff --git a/src/mod_amp.erl b/src/mod_amp.erl index ed4cd969b8b..1188487bcc6 100644 --- a/src/mod_amp.erl +++ b/src/mod_amp.erl @@ -9,7 +9,7 @@ -behaviour(mongoose_module_metrics). -xep([{xep, 79}, {version, "1.2"}, {comment, "partially implemented."}]). -export([start/2, stop/1, supported_features/0]). --export([user_send_packet/3, +-export([user_send_message/3, check_packet/2, disco_local_features/3, c2s_stream_features/3, @@ -35,7 +35,7 @@ supported_features() -> [dynamic_domains]. -spec c2s_hooks(mongooseim:host_type()) -> gen_hook:hook_list(mongoose_c2s_hooks:hook_fn()). c2s_hooks(HostType) -> - [{user_send_packet, HostType, fun ?MODULE:user_send_packet/3, #{}, 5}]. + [{user_send_message, HostType, fun ?MODULE:user_send_message/3, #{}, 5}]. hooks(HostType) -> [ @@ -49,13 +49,11 @@ hooks(HostType) -> %% API --spec user_send_packet(mongoose_acc:t(), mongoose_c2s_hooks:hook_params(), gen_hook:extra()) -> - gen_hook:hook_fn_ret(mongoose_acc:t()). -user_send_packet(Acc, _, _) -> - case mongoose_acc:stanza_name(Acc) of - <<"message">> -> run_initial_check(Acc); - _ -> {ok, Acc} - end. +-spec user_send_message(mongoose_acc:t(), mongoose_c2s_hooks:hook_params(), gen_hook:extra()) -> + mongoose_c2s_hooks:hook_result(). +user_send_message(Acc, _, _) -> + {From, To, Element} = mongoose_acc:packet(Acc), + run_initial_check(Acc, From, To, Element). -spec check_packet(mongoose_acc:t(), amp_event()) -> mongoose_acc:t(). check_packet(Acc, Event) -> @@ -89,13 +87,11 @@ xmpp_send_element(Acc, _Params, _Extra) -> _ -> delivery_failed end, {ok, check_packet(Acc, Event)}. -%% Internal --spec run_initial_check(mongoose_acc:t()) -> gen_hook:hook_fn_ret(mongoose_acc:t()). -run_initial_check(Acc) -> - Packet = mongoose_acc:element(Acc), - From = mongoose_acc:from_jid(Acc), - To = mongoose_acc:to_jid(Acc), +%% Internal +-spec run_initial_check(mongoose_acc:t(), jid:jid(), jid:jid(), exml:element()) -> + mongoose_c2s_hooks:hook_result(). +run_initial_check(Acc, From, To, Packet) -> Result = case amp:extract_requested_rules(Packet) of none -> nothing_to_do; {rules, Rules} -> validate_and_process_rules(Packet, From, Rules, Acc);