Skip to content

Commit

Permalink
Refactor handlers that are specific to a single type of stanza
Browse files Browse the repository at this point in the history
  • Loading branch information
NelsonVides committed Nov 14, 2022
1 parent 2c099c2 commit 4e2cb5c
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 36 deletions.
33 changes: 12 additions & 21 deletions src/jingle_sip/mod_jingle_sip.erl
Original file line number Diff line number Diff line change
Expand Up @@ -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]).

Expand Down Expand Up @@ -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) ->
Expand Down
26 changes: 11 additions & 15 deletions src/mod_amp.erl
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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) ->
[
Expand All @@ -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) ->
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 4e2cb5c

Please sign in to comment.