diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-11-13 16:56:05 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-11-13 16:56:05 +0300 |
commit | 3765210698dd55d9996e671bb9874c48f12f37e0 (patch) | |
tree | 85497382f361d16ed58333d16f864f110ee1465f /src | |
parent | Add some copyright notices (diff) |
Fix IQ result processing
Diffstat (limited to 'src')
-rw-r--r-- | src/mod_delegation.erl | 16 |
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) |