summaryrefslogtreecommitdiff
path: root/src/xmpp_stream_in.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-12-13 16:52:44 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-12-13 16:52:44 +0300
commit08e642b988ade9e9507e10cb012736049f37ee4c (patch)
tree1400b264f21e36b5f3c051230c72e19a4518185f /src/xmpp_stream_in.erl
parentPubSub: Add missing Nidx building records from sql result (diff)
Only allow compression after SASL
See XEP-0170 for details Thanks to Vitaly Takmazov for spotting this
Diffstat (limited to 'src/xmpp_stream_in.erl')
-rw-r--r--src/xmpp_stream_in.erl10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/xmpp_stream_in.erl b/src/xmpp_stream_in.erl
index caad482c..4c690be3 100644
--- a/src/xmpp_stream_in.erl
+++ b/src/xmpp_stream_in.erl
@@ -565,8 +565,6 @@ process_element(Pkt, #{stream_state := StateName, lang := Lang} = State) ->
send_pkt(State, #sasl_failure{reason = 'aborted'});
#sasl_success{} ->
State;
- #compress{} when StateName == wait_for_sasl_response ->
- send_pkt(State, #compress_failure{reason = 'setup-failed'});
#compress{} ->
process_compress(Pkt, State);
#handshake{} when StateName == wait_for_handshake ->
@@ -694,7 +692,10 @@ process_stream_established(#{mod := Mod} = State) ->
end.
-spec process_compress(compress(), state()) -> state().
-process_compress(#compress{}, #{stream_compressed := true} = State) ->
+process_compress(#compress{},
+ #{stream_compressed := Compressed,
+ stream_authenticated := Authenticated} = State)
+ when Compressed or not Authenticated ->
send_pkt(State, #compress_failure{reason = 'setup-failed'});
process_compress(#compress{methods = HisMethods},
#{socket := Socket, sockmod := SockMod, mod := Mod} = State) ->
@@ -913,7 +914,8 @@ get_sasl_feature(_) ->
[].
-spec get_compress_feature(state()) -> [compression()].
-get_compress_feature(#{stream_compressed := false, mod := Mod} = State) ->
+get_compress_feature(#{stream_compressed := false, mod := Mod,
+ stream_authenticated := true} = State) ->
try Mod:compress_methods(State) of
[] -> [];
Ms -> [#compression{methods = Ms}]