diff options
author | Ingela Anderton Andin <[email protected]> | 2017-12-20 12:24:55 +0100 |
---|---|---|
committer | Ingela Anderton Andin <[email protected]> | 2017-12-20 12:24:55 +0100 |
commit | a14abadde4dd25ed5bdb41cd3442b86ad485b2c6 (patch) | |
tree | 207e8cdb987868e60e437e2178c30cd0bb22d4bd /lib/ssl/src/dtls_connection.erl | |
parent | e23799a59928cadf8ab7161911f3734013a62441 (diff) | |
parent | 97df070c819ac1a6781e542e891c3419b56c59df (diff) | |
download | otp-a14abadde4dd25ed5bdb41cd3442b86ad485b2c6.tar.gz otp-a14abadde4dd25ed5bdb41cd3442b86ad485b2c6.tar.bz2 otp-a14abadde4dd25ed5bdb41cd3442b86ad485b2c6.zip |
Merge branch 'maint'
Diffstat (limited to 'lib/ssl/src/dtls_connection.erl')
-rw-r--r-- | lib/ssl/src/dtls_connection.erl | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl index 14de53d417..3b5a548f72 100644 --- a/lib/ssl/src/dtls_connection.erl +++ b/lib/ssl/src/dtls_connection.erl @@ -143,10 +143,16 @@ next_record(#state{role = server, dtls_udp_listener:active_once(Listener, Client, self()), {no_record, State}; next_record(#state{role = client, - socket = {_Server, Socket}, + socket = {_Server, Socket} = DTLSSocket, + close_tag = CloseTag, transport_cb = Transport} = State) -> - dtls_socket:setopts(Transport, Socket, [{active,once}]), - {no_record, State}; + case dtls_socket:setopts(Transport, Socket, [{active,once}]) of + ok -> + {no_record, State}; + _ -> + self() ! {CloseTag, DTLSSocket}, + {no_record, State} + end; next_record(State) -> {no_record, State}. @@ -605,6 +611,12 @@ certify(info, Event, State) -> gen_info(Event, ?FUNCTION_NAME, State); certify(internal = Type, #server_hello_done{} = Event, State) -> ssl_connection:certify(Type, Event, prepare_flight(State), ?MODULE); +certify(internal, #change_cipher_spec{type = <<1>>}, State0) -> + {State1, Actions0} = send_handshake_flight(State0, retransmit_epoch(?FUNCTION_NAME, State0)), + {Record, State2} = next_record(State1), + {next_state, ?FUNCTION_NAME, State, Actions} = next_event(?FUNCTION_NAME, Record, State2, Actions0), + %% This will reset the retransmission timer by repeating the enter state event + {repeat_state, State, Actions}; certify(state_timeout, Event, State) -> handle_state_timeout(Event, ?FUNCTION_NAME, State); certify(Type, Event, State) -> |