anchor.diff:  		{auth_port_sup :: pid(),
   		pwd_sup :: pid(),
   		ttls_sup :: pid(),
  +		auth_type :: psk | eap_pwd | eap_ttls,
   		simple_auth_sup :: pid(),
   		socket :: inet:socket(),
   		address :: inet:ip_address(),
  
positive.code: 		case gb_trees:lookup(SessionID, Handlers) of
  			none ->	
  				try
  					NewState = start_fsm(AccessRequest, RadiusFsm,
  							Address, Port, Secret, SessionID, State),
  					{reply, {ok, wait}, NewState}
  				catch
  					_:_ ->
  						{reply, {error, ignore}, State}
  				end;
  			{value, EapFsm} ->
  				gen_fsm:send_event(EapFsm, {AccessRequest, RadiusFsm}),
  				{reply, {ok, wait}, State}
  		end
  	catch
  		_:_ ->
  			{reply, {error, ignore}, State}
  	end.
  
  
negative.code: %% @doc Start a new {@link //ocs/ocs_eap_pwd_fsm. ocs_eap_pwd_fsm} session handler.
  %% @hidden
  start_fsm(AccessRequest, RadiusFsm, Address, Port, Secret, SessionID,
  		#state{auth_type = eap_pwd, pwd_sup = Sup} = State) ->
  		start_fsm1(AccessRequest, RadiusFsm, Address, Port, Secret, SessionID, Sup, State);
  start_fsm(AccessRequest, RadiusFsm, Address, Port, Secret, SessionID,
  		#state{auth_type = psk, simple_auth_sup = Sup} = State) ->
  		start_fsm1(AccessRequest, RadiusFsm, Address, Port, Secret, SessionID, Sup, State).
  %% @hidden
  start_fsm1(AccessRequest, RadiusFsm, Address, Port, Secret, SessionID, Sup,
  		#state{handlers = Handlers} = State) ->
  	StartArgs = [Address, Port, Secret, SessionID],
  	ChildSpec = [StartArgs, [{debug, [trace]}]],
  	case supervisor:start_child(Sup, ChildSpec) of
  		{ok, Fsm} ->
  			link(Fsm),
  			NewHandlers = gb_trees:insert(SessionID, Fsm, Handlers),
  			gen_fsm:send_event(Fsm, {AccessRequest, RadiusFsm}),
  			State#state{handlers = NewHandlers};
  		{error, Reason} ->
  			error_logger:error_report(["Error starting EAP session handler",
  					{error, Reason}, {supervisor, Sup}, {address, Address},
  					{port, Port}, {session, SessionID}]),
  			State
  
  	end.
  