summaryrefslogtreecommitdiff
path: root/src/mod_irc.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-16 11:00:26 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-16 11:10:24 +0300
commit8b2d3084986defd6045a0c02706415e0e7ae4b3f (patch)
tree419b64fc2d07646d221fdfa2f526e057fb34c6d2 /src/mod_irc.erl
parentMerge branch 'master' of github.com:processone/ejabberd (diff)
Change routing API
Now 'From' and 'To' arguments must be omitted in functions and structures related to routing. The commit deprecates the following functions: ejabberd_router:route/3 in favor of ejabberd_router:route/1 ejabberd_router:route_error/4 in favor of ejabberd_router:route_error/2 ejabberd_local:route_iq/4 in favor of ejabberd_local:route_iq/2 ejabberd_local:route_iq/5 in favor of ejabberd_local:route_iq/3 The format of {route, From, To, Packet} is changed in favor of {route, Packet}
Diffstat (limited to 'src/mod_irc.erl')
-rw-r--r--src/mod_irc.erl31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/mod_irc.erl b/src/mod_irc.erl
index dcb60331..68f31dfd 100644
--- a/src/mod_irc.erl
+++ b/src/mod_irc.erl
@@ -148,13 +148,11 @@ handle_cast(_Msg, State) -> {noreply, State}.
%% {stop, Reason, State}
%% Description: Handling all non call/cast messages
%%--------------------------------------------------------------------
-handle_info({route, From, To, Packet},
+handle_info({route, Packet},
#state{host = Host, server_host = ServerHost,
access = Access} =
State) ->
- case catch do_route(Host, ServerHost, Access, From, To,
- Packet)
- of
+ case catch do_route(Host, ServerHost, Access, Packet) of
{'EXIT', Reason} -> ?ERROR_MSG("~p", [Reason]);
_ -> ok
end,
@@ -200,23 +198,24 @@ stop_supervisor(Host) ->
supervisor:terminate_child(ejabberd_sup, Proc),
supervisor:delete_child(ejabberd_sup, Proc).
-do_route(Host, ServerHost, Access, From,
- #jid{luser = LUser, lresource = LResource} = To, Packet) ->
+do_route(Host, ServerHost, Access, Packet) ->
+ #jid{luser = LUser, lresource = LResource} = xmpp:get_to(Packet),
+ From = xmpp:get_from(Packet),
case acl:match_rule(ServerHost, Access, From) of
allow ->
case Packet of
#iq{} when LUser == <<"">>, LResource == <<"">> ->
- ejabberd_router:process_iq(From, To, Packet);
+ ejabberd_router:process_iq(Packet);
#iq{} when LUser == <<"">>, LResource /= <<"">> ->
Err = xmpp:err_service_unavailable(),
- ejabberd_router:route_error(To, From, Packet, Err);
+ ejabberd_router:route_error(Packet, Err);
_ ->
- sm_route(Host, ServerHost, From, To, Packet)
+ sm_route(Host, ServerHost, Packet)
end;
deny ->
Lang = xmpp:get_lang(Packet),
Err = xmpp:err_forbidden(<<"Denied by ACL">>, Lang),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end.
process_disco_info(#iq{type = set, lang = Lang} = IQ) ->
@@ -320,8 +319,9 @@ process_command(#iq{type = set, lang = Lang, to = To, from = From,
xmpp:make_error(IQ, xmpp:err_item_not_found(Txt, Lang))
end.
-sm_route(Host, ServerHost, From, To, Packet) ->
- #jid{user = ChanServ, resource = Resource} = To,
+sm_route(Host, ServerHost, Packet) ->
+ From = xmpp:get_from(Packet),
+ #jid{user = ChanServ, resource = Resource} = xmpp:get_to(Packet),
case str:tokens(ChanServ, <<"%">>) of
[<<_, _/binary>> = Channel, <<_, _/binary>> = Server] ->
case ets:lookup(irc_connection, {From, Server, Host}) of
@@ -368,7 +368,7 @@ sm_route(Host, ServerHost, From, To, Packet) ->
[] ->
Txt = <<"IRC connection not found">>,
Err = xmpp:err_service_unavailable(Txt, Lang),
- ejabberd_router:route_error(To, From, Packet, Err);
+ ejabberd_router:route_error(Packet, Err);
[R] ->
Pid = R#irc_connection.pid,
?DEBUG("send to process ~p~n", [Pid]),
@@ -377,7 +377,7 @@ sm_route(Host, ServerHost, From, To, Packet) ->
_ ->
Txt = <<"Failed to parse chanserv">>,
Err = xmpp:err_bad_request(Txt, Lang),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end
end.
@@ -643,13 +643,14 @@ adhoc_join(From, To, #adhoc_command{lang = Lang, xdata = X} = Request) ->
BodyTxt = {<<"Join the IRC channel in this Jabber ID: ~s">>,
[jid:to_string(RoomJID)]},
Invite = #message{
+ from = RoomJID, to = From,
body = xmpp:mk_text(BodyTxt, Lang),
sub_els = [#muc_user{
invites = [#muc_invite{from = From,
reason = Reason}]},
#x_conference{reason = Reason,
jid = RoomJID}]},
- ejabberd_router:route(RoomJID, From, Invite),
+ ejabberd_router:route(Invite),
xmpp_util:make_adhoc_response(
Request, #adhoc_command{status = completed});
true ->