aboutsummaryrefslogtreecommitdiff
path: root/src/mod_delegation.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-11-13 16:56:05 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-11-13 16:56:05 +0300
commit3765210698dd55d9996e671bb9874c48f12f37e0 (patch)
tree85497382f361d16ed58333d16f864f110ee1465f /src/mod_delegation.erl
parentAdd some copyright notices (diff)
Fix IQ result processing
Diffstat (limited to 'src/mod_delegation.erl')
-rw-r--r--src/mod_delegation.erl16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/mod_delegation.erl b/src/mod_delegation.erl
index 5f9fafc45..571817963 100644
--- a/src/mod_delegation.erl
+++ b/src/mod_delegation.erl
@@ -268,7 +268,7 @@ process_iq_result(#iq{from = From, to = To, id = ID, lang = Lang} = IQ,
case xmpp:decode(SubEl, ?NS_CLIENT, [ignore_els]) of
#iq{from = To, to = From, type = Type, id = ID} = Reply
when Type == error; Type == result ->
- ejabberd_router:route(From, To, Reply)
+ ejabberd_router:route(To, From, Reply)
end
catch _:_ ->
?ERROR_MSG("got iq-result with invalid delegated "
@@ -294,9 +294,17 @@ send_disco_queries(LServer, Host, NS) ->
ejabberd_local:route_iq(
From, To, #iq{type = get, from = From, to = To,
sub_els = [#disco_info{node = Node}]},
- fun(#iq{type = result, sub_els = [#disco_info{} = Info]}) ->
- Proc = gen_mod:get_module_proc(LServer, ?MODULE),
- gen_server:cast(Proc, {disco_info, Type, Host, NS, Info});
+ fun(#iq{type = result, sub_els = [SubEl]}) ->
+ try xmpp:decode(SubEl) of
+ #disco_info{} = Info->
+ Proc = gen_mod:get_module_proc(LServer, ?MODULE),
+ gen_server:cast(
+ Proc, {disco_info, Type, Host, NS, Info});
+ _ ->
+ ok
+ catch _:{xmpp_codec, _} ->
+ ok
+ end;
(_) ->
ok
end)