diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-02-16 11:00:26 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-02-16 11:10:24 +0300 |
commit | 8b2d3084986defd6045a0c02706415e0e7ae4b3f (patch) | |
tree | 419b64fc2d07646d221fdfa2f526e057fb34c6d2 /src/mod_pubsub.erl | |
parent | Merge 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.erl | 52 |
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; |