anchor.diff:  			send_response(EapPacket, ?AccessChallenge,
   					RadiusID, [], RequestAuthenticator, Secret, RadiusFsm),
   			{next_state, client_hello, NewStateData, ?TIMEOUT}
  +	end;
  +eap_start(timeout, #statedata{start = DiameterRequest,
  +		eap_id = EapID, session_id = SessionID, auth_req_type = AuthType,
  +		origin_host = OH, origin_realm = OR, port_server = PortServer}
  +		= StateData) ->
  +	EapTtls = #eap_ttls{start = true},
  +	EapData = ocs_eap_codec:eap_ttls(EapTtls),
  +	case DiameterRequest#diameter_eap_app_DER.'EAP-Payload' of
  +		<<>> ->
  +			EapPacket = #eap_packet{code = request, type = ?TTLS,
  +					identifier = EapID, data = EapData},
  +			Answer = generate_diameter_response(SessionID, AuthType,
  +					?'DIAMETER_BASE_RESULT-CODE_MULTI_ROUND_AUTH',
  +					OH, OR, EapPacket),
  +			gen_server:cast(PortServer, {self(), Answer}),
  +			{next_state, client_hello, StateData, ?TIMEOUT};
  +		EAPMessage ->
  +			case catch ocs_eap_codec:eap_packet(EAPMessage) of
  +				#eap_packet{code = response,
  +						type = ?Identity, identifier = StartEapID} ->
  +					NewEapID = (StartEapID rem 255) + 1,
  +					NewEapPacket = #eap_packet{code = request, type = ?TTLS,
  +							identifier = NewEapID, data = EapData},
  +					Answer = generate_diameter_response(SessionID, AuthType,
  +							?'DIAMETER_BASE_RESULT-CODE_MULTI_ROUND_AUTH',
  +							OH, OR, NewEapPacket),
  +					gen_server:cast(PortServer, {self(), Answer}),
  +					NextStateData = StateData#statedata{eap_id = NewEapID},
  +					{next_state, client_hello, NextStateData, ?TIMEOUT};
  +				#eap_packet{code = request, identifier = NewEapID} ->
  +					NewEapPacket = #eap_packet{code = response, type = ?LegacyNak,
  +							identifier = NewEapID, data = <<0>>},
  +					Answer = generate_diameter_response(SessionID, AuthType,
  +							?'DIAMETER_BASE_RESULT-CODE_UNABLE_TO_COMPLY',
  +							OH, OR, NewEapPacket),
  +					gen_server:cast(PortServer, {self(), Answer}),
  +					{stop, {shutdown, SessionID}, StateData};
  +				#eap_packet{code = Code,
  +							type = EapType, identifier = NewEapID, data = Data} ->
  +					error_logger:warning_report(["Unknown EAP received",
  +							{pid, self()}, {session_id, SessionID},
  +							{eap_id, NewEapID}, {code, Code},
  +							{type, EapType}, {data, Data}]),
  +					NewEapPacket = #eap_packet{code = failure, identifier = NewEapID},
  +					Answer = generate_diameter_response(SessionID, AuthType,
  +							?'DIAMETER_BASE_RESULT-CODE_UNABLE_TO_COMPLY',
  +							OH, OR, NewEapPacket),
  +					gen_server:cast(PortServer, {self(), Answer}),
  +					{stop, {shutdown, SessionID}, StateData};
  +				{'EXIT', _Reason} ->
  +					NewEapPacket = #eap_packet{code = failure, identifier = EapID},
  +					Answer = generate_diameter_response(SessionID, AuthType,
  +							?'DIAMETER_BASE_RESULT-CODE_UNABLE_TO_COMPLY',
  +							OH, OR, NewEapPacket),
  +					gen_server:cast(PortServer, {self(), Answer}),
  +					{stop, {shutdown, SessionID}, StateData}
  +			end
   	end.
   
   -spec client_hello(Event, StateData) -> Result
  
positive.code: 			{<<0:512>>, <<0:512>>}
  	end.
  
  
negative.code: 		server_rand :: undefined | binary(),
  		tls_key :: string(),
  		tls_cert :: string(),
  		tls_cacert :: string(),
  		app_id :: undefined | integer(),
  		auth_req_type :: undefined | integer(),
  		origin_host :: undefined | binary(),
  		origin_realm :: undefined | binary(),
  		port_server :: undefined | pid()}).
  
  -type statedata() :: #statedata{}.
  
  -define(TIMEOUT, 30000).
  