summaryrefslogtreecommitdiff
path: root/src/mod_pubsub.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_pubsub.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_pubsub.erl')
-rw-r--r--src/mod_pubsub.erl52
1 files changed, 29 insertions, 23 deletions
diff --git a/src/mod_pubsub.erl b/src/mod_pubsub.erl
index 90d2a758..7a2c7367 100644
--- a/src/mod_pubsub.erl
+++ b/src/mod_pubsub.erl
@@ -855,12 +855,13 @@ handle_cast(_Msg, State) -> {noreply, State}.
%% Description: Handling all non call/cast messages
%%--------------------------------------------------------------------
%% @private
-handle_info({route, From, To, #iq{} = IQ},
+handle_info({route, #iq{to = To} = IQ},
State) when To#jid.lresource == <<"">> ->
- ejabberd_router:process_iq(From, To, IQ),
+ ejabberd_router:process_iq(IQ),
{noreply, State};
-handle_info({route, From, To, Packet}, State) ->
- case catch do_route(To#jid.lserver, From, To, Packet) of
+handle_info({route, Packet}, State) ->
+ To = xmpp:get_to(Packet),
+ case catch do_route(To#jid.lserver, Packet) of
{'EXIT', Reason} -> ?ERROR_MSG("~p", [Reason]);
_ -> ok
end,
@@ -1019,8 +1020,9 @@ process_commands(#iq{type = get, lang = Lang} = IQ) ->
Txt = <<"Value 'get' of 'type' attribute is not allowed">>,
xmpp:make_error(IQ, xmpp:err_not_allowed(Txt, Lang)).
--spec do_route(binary(), jid(), jid(), stanza()) -> ok.
-do_route(Host, From, To, Packet) ->
+-spec do_route(binary(), stanza()) -> ok.
+do_route(Host, Packet) ->
+ To = xmpp:get_to(Packet),
case To of
#jid{luser = <<>>, lresource = <<>>} ->
case Packet of
@@ -1029,18 +1031,18 @@ do_route(Host, From, To, Packet) ->
undefined ->
ok;
{error, Err} ->
- ejabberd_router:route_error(To, From, Packet, Err);
+ ejabberd_router:route_error(Packet, Err);
AuthResponse ->
handle_authorization_response(
- Host, From, To, Packet, AuthResponse)
+ Host, Packet, AuthResponse)
end;
_ ->
Err = xmpp:err_service_unavailable(),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end;
_ ->
Err = xmpp:err_item_not_found(),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end.
-spec command_disco_info(binary(), binary(), jid()) -> {result, disco_info()}.
@@ -1461,10 +1463,10 @@ send_authorization_request(#pubsub_node{nodeid = {Host, Node},
<<"Choose whether to approve this entity's "
"subscription.">>)],
fields = Fs},
- Stanza = #message{sub_els = [X]},
+ Stanza = #message{from = service_jid(Host), sub_els = [X]},
lists:foreach(
fun (Owner) ->
- ejabberd_router:route(service_jid(Host), jid:make(Owner), Stanza)
+ ejabberd_router:route(xmpp:set_to(Stanza, jid:make(Owner)))
end, node_owners_action(Host, Type, Nidx, O)).
-spec find_authorization_response(message()) -> undefined |
@@ -1495,12 +1497,12 @@ send_authorization_approval(Host, JID, SNode, Subscription) ->
#ps_subscription{jid = JID,
node = SNode,
type = Subscription}},
- Stanza = #message{sub_els = [Event]},
- ejabberd_router:route(service_jid(Host), JID, Stanza).
+ Stanza = #message{from = service_jid(Host), to = JID, sub_els = [Event]},
+ ejabberd_router:route(Stanza).
--spec handle_authorization_response(binary(), jid(), jid(), message(),
+-spec handle_authorization_response(binary(), message(),
pubsub_subscribe_authorization:result()) -> ok.
-handle_authorization_response(Host, From, To, Packet, Response) ->
+handle_authorization_response(Host, #message{from = From} = Packet, Response) ->
Node = proplists:get_value(node, Response),
Subscriber = proplists:get_value(subscriber_jid, Response),
Allow = proplists:get_value(allow, Response),
@@ -1519,13 +1521,13 @@ handle_authorization_response(Host, From, To, Packet, Response) ->
end,
case transaction(Host, Node, Action, sync_dirty) of
{error, Error} ->
- ejabberd_router:route_error(To, From, Packet, Error);
+ ejabberd_router:route_error(Packet, Error);
{result, {_, _NewSubscription}} ->
%% XXX: notify about subscription state change, section 12.11
ok;
_ ->
Err = xmpp:err_internal_server_error(),
- ejabberd_router:route_error(To, From, Packet, Err)
+ ejabberd_router:route_error(Packet, Err)
end.
-spec update_auth(binary(), binary(), _, _, jid() | error, boolean(), _) ->
@@ -2231,7 +2233,8 @@ dispatch_items({FromU, FromS, FromR} = From, {ToU, ToS, ToR} = To,
Stanza}
end;
dispatch_items(From, To, _Node, Stanza) ->
- ejabberd_router:route(service_jid(From), jid:make(To), Stanza).
+ ejabberd_router:route(
+ xmpp:set_from_to(Stanza, service_jid(From), jid:make(To))).
%% @doc <p>Return the list of affiliations as an XMPP response.</p>
-spec get_affiliations(host(), binary(), jid(), [binary()]) ->
@@ -2603,12 +2606,14 @@ set_subscriptions(Host, Node, From, Entities) ->
Owner = jid:tolower(jid:remove_resource(From)),
Notify = fun(#ps_subscription{jid = JID, type = Sub}) ->
Stanza = #message{
+ from = service_jid(Host),
+ to = JID,
sub_els = [#ps_event{
subscription = #ps_subscription{
jid = JID,
type = Sub,
node = Node}}]},
- ejabberd_router:route(service_jid(Host), JID, Stanza)
+ ejabberd_router:route(Stanza)
end,
Action =
fun(#pubsub_node{type = Type, id = Nidx, owners = O}) ->
@@ -3002,7 +3007,8 @@ broadcast_stanza(Host, _Node, _Nidx, _Type, NodeOptions, SubsByDepth, NotifyType
add_shim_headers(Stanza, subid_shim(SubIDs))
end,
lists:foreach(fun(To) ->
- ejabberd_router:route(From, jid:make(To), StanzaToSend)
+ ejabberd_router:route(
+ xmpp:set_from_to(StanzaToSend, From, jid:make(To)))
end, LJIDs)
end, SubIDsByJID).
@@ -3034,7 +3040,7 @@ c2s_handle_info(#{server := Server} = C2SState,
true ->
To = jid:make(USR),
NewPacket = xmpp:set_from_to(Packet, From, To),
- ejabberd_router:route(From, To, NewPacket);
+ ejabberd_router:route(NewPacket);
false ->
ok
end
@@ -3049,7 +3055,7 @@ c2s_handle_info(#{server := Server} = C2SState,
case lists:member(Feature, Features) of
true ->
NewPacket = xmpp:set_from_to(Packet, From, To),
- ejabberd_router:route(From, To, NewPacket);
+ ejabberd_router:route(NewPacket);
false ->
ok
end;