From 52f2a7de4b9927100e35823a49bb73fec6d00e06 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Wed, 4 Jul 2018 08:59:14 +0300 Subject: [PATCH] Set 'from' attribute for client connections when it is absent --- src/xmpp_stream_out.erl | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/xmpp_stream_out.erl b/src/xmpp_stream_out.erl index c79204ea0..2031f0038 100644 --- a/src/xmpp_stream_out.erl +++ b/src/xmpp_stream_out.erl @@ -790,7 +790,8 @@ process_bind_response(Pkt, State) -> -spec process_packet(xmpp_element(), state()) -> state(). process_packet(Pkt, State) -> - try callback(handle_packet, Pkt, State) + Pkt1 = fix_from(Pkt, State), + try callback(handle_packet, Pkt1, State) catch _:{?MODULE, undef} -> State end. @@ -957,6 +958,23 @@ make_sasl_authzid(Mech, #{user := User, server := Server, JID = jid:encode(jid:make(User, Server)), <> end. +-spec fix_from(xmpp_element(), state()) -> xmpp_element(). +fix_from(Pkt, #{xmlns := ?NS_CLIENT} = State) -> + case xmpp:is_stanza(Pkt) of + true -> + case xmpp:get_from(Pkt) of + undefined -> + #{user := U, server := S, resource := R} = State, + From = jid:make(U, S, R), + xmpp:set_from(Pkt, From); + _ -> + Pkt + end; + false -> + Pkt + end; +fix_from(Pkt, _State) -> + Pkt. %%%=================================================================== %%% State resets