diff options
author | Hans Nilsson <[email protected]> | 2017-06-14 12:27:33 +0200 |
---|---|---|
committer | Hans Nilsson <[email protected]> | 2017-06-14 12:27:33 +0200 |
commit | 82be4df7132543ce9ebd0f0b6770a941357775ee (patch) | |
tree | 5227a458449bb5ab699bd7ffe91f3c30fad63fe1 /lib | |
parent | f7c9c43c08fd46d89f2a5bf1d055f431dd3812dc (diff) | |
parent | 52a97603591bc63b29fd94f2939cacb9c6abda4f (diff) | |
download | otp-82be4df7132543ce9ebd0f0b6770a941357775ee.tar.gz otp-82be4df7132543ce9ebd0f0b6770a941357775ee.tar.bz2 otp-82be4df7132543ce9ebd0f0b6770a941357775ee.zip |
Merge remote-tracking branch 'ingela/ingela/dtls-epoch-next-record'
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ssl/src/dtls_connection.erl | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl index f338471829..98ea8092fa 100644 --- a/lib/ssl/src/dtls_connection.erl +++ b/lib/ssl/src/dtls_connection.erl @@ -718,7 +718,7 @@ next_record(#state{unprocessed_handshake_events = N} = State) when N > 0 -> next_record(#state{protocol_buffers = #protocol_buffers{dtls_cipher_texts = [#ssl_tls{epoch = Epoch} = CT | Rest]} = Buffers, - connection_states = ConnectionStates} = State) -> + connection_states = #{current_read := #{epoch := Epoch}} = ConnectionStates} = State) -> CurrentRead = dtls_record:get_connection_state_by_epoch(Epoch, ConnectionStates, read), case dtls_record:replay_detect(CT, CurrentRead) of false -> @@ -729,6 +729,23 @@ next_record(#state{protocol_buffers = Buffers#protocol_buffers{dtls_cipher_texts = Rest}, connection_states = ConnectionStates}) end; +next_record(#state{protocol_buffers = + #protocol_buffers{dtls_cipher_texts = [#ssl_tls{epoch = Epoch} | Rest]} + = Buffers, + connection_states = #{current_read := #{epoch := CurrentEpoch}} = ConnectionStates} = State) + when Epoch > CurrentEpoch -> + %% TODO Buffer later Epoch message, drop it for now + next_record(State#state{protocol_buffers = + Buffers#protocol_buffers{dtls_cipher_texts = Rest}, + connection_states = ConnectionStates}); +next_record(#state{protocol_buffers = + #protocol_buffers{dtls_cipher_texts = [ _ | Rest]} + = Buffers, + connection_states = ConnectionStates} = State) -> + %% Drop old epoch message + next_record(State#state{protocol_buffers = + Buffers#protocol_buffers{dtls_cipher_texts = Rest}, + connection_states = ConnectionStates}); next_record(#state{role = server, socket = {Listener, {Client, _}}, transport_cb = gen_udp} = State) -> |