diff options
| author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2018-07-04 08:59:14 +0300 |
|---|---|---|
| committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2018-07-04 08:59:14 +0300 |
| commit | 52f2a7de4b9927100e35823a49bb73fec6d00e06 (patch) | |
| tree | f6ac88f099ef140eae327f7c29ca1068a4195fbf | |
| parent | Don't set from/to attributes in resource binding iq (diff) | |
Set 'from' attribute for client connections when it is absent
| -rw-r--r-- | src/xmpp_stream_out.erl | 20 |
1 files changed, 19 insertions, 1 deletions
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)), <<JID/binary, 0, User/binary, 0, Password/binary>> 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 |
