aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-01-09 17:51:08 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-01-09 17:51:08 +0300
commitf14a96668079b70aa884b26fb9389e733ebc5c3b (patch)
tree7db148a2eb6371052abe1e314aa75792e72dbf21
parentFix problem with get_vcard command (#1447) (diff)
Set from/to in every routed packet
-rw-r--r--src/ejabberd_router.erl42
1 files changed, 17 insertions, 25 deletions
diff --git a/src/ejabberd_router.erl b/src/ejabberd_router.erl
index 2bef97c01..17cb7e279 100644
--- a/src/ejabberd_router.erl
+++ b/src/ejabberd_router.erl
@@ -74,8 +74,17 @@ start_link() ->
-spec route(jid(), jid(), xmlel() | stanza()) -> ok.
-route(From, To, Packet) ->
- case catch do_route(From, To, Packet) of
+route(#jid{} = From, #jid{} = To, #xmlel{} = El) ->
+ try xmpp:decode(El, ?NS_CLIENT, [ignore_els]) of
+ Pkt -> route(From, To, xmpp:set_from_to(Pkt, From, To))
+ catch _:{xmpp_codec, Why} ->
+ ?ERROR_MSG("failed to decode xml element ~p when "
+ "routing from ~s to ~s: ~s",
+ [El, jid:to_string(From), jid:to_string(To),
+ xmpp:format_error(Why)])
+ end;
+route(#jid{} = From, #jid{} = To, Packet) ->
+ case catch do_route(From, To, xmpp:set_from_to(Packet, From, To)) of
{'EXIT', Reason} ->
?ERROR_MSG("~p~nwhen processing: ~p",
[Reason, {From, To, Packet}]);
@@ -390,12 +399,7 @@ do_route(OrigFrom, OrigTo, OrigPacket) ->
LDstDomain = To#jid.lserver,
case mnesia:dirty_read(route, LDstDomain) of
[] ->
- try xmpp:decode(Packet, ?NS_CLIENT, [ignore_els]) of
- Pkt ->
- ejabberd_s2s:route(From, To, Pkt)
- catch _:{xmpp_codec, Why} ->
- log_decoding_error(From, To, Packet, Why)
- end;
+ ejabberd_s2s:route(From, To, Packet);
[R] ->
do_route(From, To, Packet, R);
Rs ->
@@ -422,27 +426,15 @@ do_route(OrigFrom, OrigTo, OrigPacket) ->
-spec do_route(jid(), jid(), xmlel() | xmpp_element(), #route{}) -> any().
do_route(From, To, Packet, #route{local_hint = LocalHint,
pid = Pid}) when is_pid(Pid) ->
- try xmpp:decode(Packet, ?NS_CLIENT, [ignore_els]) of
- Pkt ->
- case LocalHint of
- {apply, Module, Function} when node(Pid) == node() ->
- Module:Function(From, To, Pkt);
- _ ->
- Pid ! {route, From, To, Pkt}
- end
- catch error:{xmpp_codec, Why} ->
- log_decoding_error(From, To, Packet, Why)
+ case LocalHint of
+ {apply, Module, Function} when node(Pid) == node() ->
+ Module:Function(From, To, Packet);
+ _ ->
+ Pid ! {route, From, To, Packet}
end;
do_route(_From, _To, _Packet, _Route) ->
drop.
--spec log_decoding_error(jid(), jid(), xmlel() | xmpp_element(), term()) -> ok.
-log_decoding_error(From, To, Packet, Reason) ->
- ?ERROR_MSG("failed to decode xml element ~p when "
- "routing from ~s to ~s: ~s",
- [Packet, jid:to_string(From), jid:to_string(To),
- xmpp:format_error(Reason)]).
-
-spec get_component_number(binary()) -> pos_integer() | undefined.
get_component_number(LDomain) ->
ejabberd_config:get_option(