diff options
Diffstat (limited to 'lib/ssl/src')
| -rw-r--r-- | lib/ssl/src/dtls_connection.erl | 21 | ||||
| -rw-r--r-- | lib/ssl/src/ssl_connection.erl | 2 | ||||
| -rw-r--r-- | lib/ssl/src/tls_connection.erl | 24 | 
3 files changed, 21 insertions, 26 deletions
diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl index b145dd9298..25eb5488da 100644 --- a/lib/ssl/src/dtls_connection.erl +++ b/lib/ssl/src/dtls_connection.erl @@ -39,7 +39,7 @@  -export([start_fsm/8, start_link/7, init/1, pids/1]).  %% State transition handling	  --export([next_event/3, next_event/4, handle_common_event/4]). +-export([next_event/3, next_event/4, handle_protocol_record/3]).  %% Handshake handling  -export([renegotiate/2, send_handshake/2,  @@ -234,11 +234,11 @@ next_event(StateName, Record,  	    {next_state, StateName, State0, [{next_event, internal, Alert} | Actions]}      end. -handle_common_event(internal, #alert{} = Alert, StateName,  -		    #state{negotiated_version = Version} = State) -> -    handle_own_alert(Alert, Version, StateName, State); +%%% DTLS record protocol level application data messages  +handle_protocol_record(#ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) -> +    {next_state, StateName, State, [{next_event, internal, {application_data, Data}}]};  %%% DTLS record protocol level handshake messages  -handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE, +handle_protocol_record(#ssl_tls{type = ?HANDSHAKE,  				       fragment = Data},   		    StateName,   		    #state{protocol_buffers = Buffers0, @@ -256,14 +256,11 @@ handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE,      catch throw:#alert{} = Alert ->  	    handle_own_alert(Alert, Version, StateName, State0)      end; -%%% DTLS record protocol level application data messages  -handle_common_event(internal, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) -> -    {next_state, StateName, State, [{next_event, internal, {application_data, Data}}]};  %%% DTLS record protocol level change cipher messages -handle_common_event(internal, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Data}, StateName, State) -> +handle_protocol_record(#ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Data}, StateName, State) ->      {next_state, StateName, State, [{next_event, internal, #change_cipher_spec{type = Data}}]};  %%% DTLS record protocol level Alert messages -handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName, +handle_protocol_record(#ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName,  		    #state{negotiated_version = Version} = State) ->      case decode_alerts(EncAlerts) of  	Alerts = [_|_] -> @@ -272,8 +269,8 @@ handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, Sta  	    handle_own_alert(Alert, Version, StateName, State)      end;  %% Ignore unknown TLS record level protocol messages -handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) -> -    {next_state, StateName, State}. +handle_protocol_record(#ssl_tls{type = _Unknown}, StateName, State) -> +    {next_state, StateName, State, []}.  %%====================================================================  %% Handshake handling diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl index bab13211df..5dea5827c6 100644 --- a/lib/ssl/src/ssl_connection.erl +++ b/lib/ssl/src/ssl_connection.erl @@ -1160,7 +1160,7 @@ handle_common_event(internal, {handshake, {Handshake, Raw}}, StateName,      {next_state, StateName, State#state{tls_handshake_history = HsHist},        [{next_event, internal, Handshake}]};  handle_common_event(internal, {protocol_record, TLSorDTLSRecord}, StateName, State, Connection) ->  -    Connection:handle_common_event(internal, TLSorDTLSRecord, StateName, State); +    Connection:handle_protocol_record(TLSorDTLSRecord, StateName, State);  handle_common_event(timeout, hibernate, _, _, _) ->      {keep_state_and_data, [hibernate]};  handle_common_event(internal, {application_data, Data}, StateName, State0, Connection) -> diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl index 098e47d609..33c57caf7b 100644 --- a/lib/ssl/src/tls_connection.erl +++ b/lib/ssl/src/tls_connection.erl @@ -47,7 +47,7 @@  %% State transition handling	   -export([next_event/3, next_event/4,  -         handle_common_event/4]). +         handle_protocol_record/3]).  %% Handshake handling  -export([renegotiation/2, renegotiate/2, send_handshake/2,  @@ -197,11 +197,12 @@ next_event(StateName, Record, State, Actions) ->  	    {next_state, StateName, State, [{next_event, internal, Alert} | Actions]}      end. -handle_common_event(internal, #alert{} = Alert, StateName,  -		    #state{negotiated_version = Version} = State) -> -    ssl_connection:handle_own_alert(Alert, Version, StateName, State); +%%% TLS record protocol level application data messages  + +handle_protocol_record(#ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) -> +    {next_state, StateName, State, [{next_event, internal, {application_data, Data}}]};  %%% TLS record protocol level handshake messages  -handle_common_event(internal,  #ssl_tls{type = ?HANDSHAKE, fragment = Data},  +handle_protocol_record(#ssl_tls{type = ?HANDSHAKE, fragment = Data},   		    StateName, #state{protocol_buffers =  					  #protocol_buffers{tls_handshake_buffer = Buf0} = Buffers,  				      negotiated_version = Version, @@ -228,15 +229,12 @@ handle_common_event(internal,  #ssl_tls{type = ?HANDSHAKE, fragment = Data},      catch throw:#alert{} = Alert ->              ssl_connection:handle_own_alert(Alert, Version, StateName, State0)      end; -%%% TLS record protocol level application data messages  -handle_common_event(internal, #ssl_tls{type = ?APPLICATION_DATA, fragment = Data}, StateName, State) -> -    {next_state, StateName, State, [{next_event, internal, {application_data, Data}}]};  %%% TLS record protocol level change cipher messages -handle_common_event(internal, #ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Data}, StateName, State) -> +handle_protocol_record(#ssl_tls{type = ?CHANGE_CIPHER_SPEC, fragment = Data}, StateName, State) ->      {next_state, StateName, State, [{next_event, internal, #change_cipher_spec{type = Data}}]};  %%% TLS record protocol level Alert messages -handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName, -		    #state{negotiated_version = Version} = State) -> +handle_protocol_record(#ssl_tls{type = ?ALERT, fragment = EncAlerts}, StateName, +                       #state{negotiated_version = Version} = State) ->      try decode_alerts(EncAlerts) of	  	Alerts = [_|_] ->  	    handle_alerts(Alerts,  {next_state, StateName, State}); @@ -252,8 +250,8 @@ handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, Sta      end;  %% Ignore unknown TLS record level protocol messages -handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) -> -    {next_state, StateName, State}. +handle_protocol_record(#ssl_tls{type = _Unknown}, StateName, State) -> +    {next_state, StateName, State, []}.  %%====================================================================  %% Handshake handling  %%====================================================================  | 
