eapol/eapol_framework/eapol_symbian/eap_server/src/EapServerProcessHandler.cpp
changeset 49 43351a4f2da3
parent 36 c98682f98478
equal deleted inserted replaced
47:712b4ffd76bb 49:43351a4f2da3
    14 * Description:  EAP and WLAN authentication protocols.
    14 * Description:  EAP and WLAN authentication protocols.
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 /*
    18 /*
    19 * %version:  41 %
    19 * %version:  50 %
    20 */
    20 */
    21 
    21 
    22 #include "EapServerProcessHandler.h"
    22 #include "EapServerProcessHandler.h"
    23 #include "EapTraceSymbian.h"
    23 #include "EapTraceSymbian.h"
    24 #if defined(USE_FAST_EAP_TYPE)
    24 #if defined(USE_FAST_EAP_TYPE)
    34 , iClient(0)
    34 , iClient(0)
    35 , iTools(0)
    35 , iTools(0)
    36 , iEapCore(0)
    36 , iEapCore(0)
    37 , iEapPlugin(0)
    37 , iEapPlugin(0)
    38 , iEapSettings(0)
    38 , iEapSettings(0)
    39 #if defined (USE_WAPI_CORE)
       
    40 , iWapiCore(0)
    39 , iWapiCore(0)
    41 , iWapiSettings(0)
    40 , iWapiSettings(0)
    42 #endif
       
    43 #if defined(USE_FAST_EAP_TYPE)
    41 #if defined(USE_FAST_EAP_TYPE)
    44 , iPacStore(0)
    42 , iPacStore(0)
    45 #endif //#if defined(USE_FAST_EAP_TYPE)
    43 #endif //#if defined(USE_FAST_EAP_TYPE)
    46 , iEapMessageQueue(0)
    44 , iEapSendMessageQueue(0)
       
    45 , iEapProcessMessageQueue(0)
       
    46 , iProcessMessage(0)
       
    47 , iHandlerState(EapServerProcessHandlerState_None)
    47 {
    48 {
    48 	EAP_TRACE_DEBUG(
    49 	EAP_TRACE_DEBUG(
    49 		iTools,
    50 		iTools,
    50 		TRACE_FLAGS_DEFAULT,
    51 		TRACE_FLAGS_DEFAULT,
    51 		(EAPL("CEapServerProcessHandler::CEapServerProcessHandler(): this=0x%08x\n"),
    52 		(EAPL("CEapServerProcessHandler::CEapServerProcessHandler(): this=0x%08x\n"),
    62 		TRACE_FLAGS_DEFAULT,
    63 		TRACE_FLAGS_DEFAULT,
    63 		(EAPL("CEapServerProcessHandler::~CEapServerProcessHandler(): this=0x%08x\n"),
    64 		(EAPL("CEapServerProcessHandler::~CEapServerProcessHandler(): this=0x%08x\n"),
    64 		this));
    65 		this));
    65 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::~CEapServerProcessHandler()");
    66 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::~CEapServerProcessHandler()");
    66 
    67 
       
    68 	if (iClient)
       
    69 		{
       
    70 		TInt error = iClient->CancelReadyHandler(this);
       
    71 		if (error != KErrNone)
       
    72 			{
       
    73 			EAP_TRACE_DEBUG(
       
    74 				iTools,
       
    75 				TRACE_FLAGS_DEFAULT,
       
    76 				(EAPL("ERROR: CEapServerProcessHandler::~CEapServerProcessHandler(): iClient->CancelReadyHandler() failed, error=%d\n"),
       
    77 				error));
       
    78 			}
       
    79 		}
       
    80 	delete iEapCore;
       
    81 	iEapCore = 0;
       
    82 
       
    83 	delete iEapPlugin;
       
    84 	iEapPlugin = 0;
       
    85 
       
    86 	delete iEapSettings;
       
    87 	iEapSettings = 0;
       
    88 
       
    89     delete iWapiCore;
       
    90     iWapiCore = 0;
       
    91 
       
    92     delete iWapiSettings;
       
    93     iWapiSettings = 0;
       
    94 
       
    95 #if defined(USE_FAST_EAP_TYPE)
       
    96     delete iPacStore;
       
    97     iPacStore = 0;
       
    98 #endif //#if defined(USE_FAST_EAP_TYPE)
       
    99 
       
   100 	delete iEapSendMessageQueue;
       
   101 	iEapSendMessageQueue = 0;
       
   102 
       
   103     delete iEapProcessMessageQueue;
       
   104 	iEapProcessMessageQueue = 0;
       
   105 
    67 	if(IsActive())
   106 	if(IsActive())
    68 	{
   107 	{
    69 		Cancel();
   108 		Cancel();
    70 	}
   109 	}
    71 
       
    72 	delete iEapCore;
       
    73 	iEapCore = 0;
       
    74 
       
    75 	delete iEapPlugin;
       
    76 	iEapPlugin = 0;
       
    77 
       
    78 	delete iEapSettings;
       
    79 	iEapSettings = 0;
       
    80 
       
    81 #if defined (USE_WAPI_CORE)
       
    82     delete iWapiCore;
       
    83     iWapiCore = 0;
       
    84 
       
    85     delete iWapiSettings;
       
    86     iWapiSettings = 0;
       
    87 #endif
       
    88 
       
    89 #if defined(USE_FAST_EAP_TYPE)
       
    90     delete iPacStore;
       
    91     iPacStore = 0;
       
    92 #endif //#if defined(USE_FAST_EAP_TYPE)
       
    93 
       
    94     delete iEapMessageQueue;
       
    95 	iEapMessageQueue = 0;
       
    96 }
   110 }
    97     
   111     
    98 //----------------------------------------------------------------------------
   112 //----------------------------------------------------------------------------
    99 
   113 
   100 CEapServerProcessHandler* CEapServerProcessHandler::NewL()
   114 CEapServerProcessHandler* CEapServerProcessHandler::NewL()
   112 		(EAPL("CEapServerProcessHandler::ConstructL(): this=0x%08x\n"),
   126 		(EAPL("CEapServerProcessHandler::ConstructL(): this=0x%08x\n"),
   113 		this));
   127 		this));
   114 	EAP_TRACE_RETURN_STRING(tools, "returns: CEapServerProcessHandler::ConstructL()");
   128 	EAP_TRACE_RETURN_STRING(tools, "returns: CEapServerProcessHandler::ConstructL()");
   115 
   129 
   116 	iClient = client;
   130 	iClient = client;
       
   131 
   117 	iTools = tools;
   132 	iTools = tools;
   118 
   133 
   119 	iEapMessageQueue = new(ELeave) EapMessageQueue(iTools);
   134 	iEapSendMessageQueue = new(ELeave) EapMessageQueue(iTools);
       
   135 
       
   136 	iEapProcessMessageQueue = new(ELeave) EapMessageQueue(iTools);
   120 }
   137 }
   121 
   138 
   122 //----------------------------------------------------------------------------
   139 //----------------------------------------------------------------------------
   123 
   140 
   124 eap_status_e CEapServerProcessHandler::SendData(const void * const data, const u32_t length, TEapRequests message)
   141 eap_status_e CEapServerProcessHandler::SendData(const void * const data, const u32_t length, TEapRequests message)
   125 {
   142 {
   126 	EAP_TRACE_DEBUG(
   143 
   127 		iTools,
   144 	EAP_TRACE_DEBUG(
   128 		TRACE_FLAGS_DEFAULT,
   145 		iTools,
   129 		(EAPL("CEapServerProcessHandler::SendData(): this=0x%08x\n"),
   146 		TRACE_FLAGS_DEFAULT,
   130 		this));
   147 		(EAPL("CEapServerProcessHandler::SendData(): this=0x%08x, iProcessMessage=0x%08x, send message=%d=%s\n"),
       
   148 		this,
       
   149 		iProcessMessage,
       
   150 		message,
       
   151 		EapServerStrings::GetEapRequestsString(message)));
       
   152 
   131 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::SendData()");
   153 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::SendData()");
   132 
   154 
   133 	eap_status_e status(eap_status_ok);
   155 	eap_status_e status(eap_status_ok);
       
   156 
       
   157 	// First message handled, remove the message.
       
   158 	iEapProcessMessageQueue->DeleteFirstMessage(iProcessMessage);
       
   159 	iProcessMessage = 0;
   134 
   160 
   135 	SaveMessage(message, data, length);
   161 	SaveMessage(message, data, length);
   136 
   162 
   137 	return status;
   163 	return status;
   138 }
   164 }
   155 		EAP_TRACE_FLAGS_NEVER,
   181 		EAP_TRACE_FLAGS_NEVER,
   156 		(EAPL("CEapServerProcessHandler::SaveMessage()"),
   182 		(EAPL("CEapServerProcessHandler::SaveMessage()"),
   157 		data,
   183 		data,
   158 		length));
   184 		length));
   159 
   185 
   160 	EAP_TRACE_DEBUG(
   186 	if (message == EEapCoreSendData || message == EEapPluginSendData || message == EEapSettingsSendData || message == EEapPacStoreSendData || message == EWapiCoreSendData)
   161 		iTools,
       
   162 		TRACE_FLAGS_DEFAULT,
       
   163 		(EAPL("CEapServerProcessHandler::SaveMessage(): calls iEapMessageQueue->AddMessage()\n")));
       
   164 
       
   165 	TInt error = iEapMessageQueue->AddMessage(message, data, length);
       
   166 
       
   167 	if (error != KErrNone)
       
   168 	{
   187 	{
   169 		EAP_TRACE_DEBUG(
   188 		TInt error = iEapSendMessageQueue->AddMessage(message, data, length);
   170 			iTools,
   189 
   171 			TRACE_FLAGS_DEFAULT,
   190 		if (error != KErrNone)
   172 			(EAPL("ERROR: CEapServerProcessHandler::SaveMessage(): failed = %d\n"),
   191 		{
   173 			error));
   192 			EAP_TRACE_DEBUG(
   174 		return;
   193 				iTools,
       
   194 				TRACE_FLAGS_DEFAULT,
       
   195 				(EAPL("ERROR: CEapServerProcessHandler::SaveMessage(): failed = %d\n"),
       
   196 				error));
       
   197 			return;
       
   198 		}
       
   199 
       
   200 		Activate(EapServerProcessHandlerState_Send);
   175 	}
   201 	}
   176 
   202 	else
   177 	Activate();
   203 	{
       
   204 		TInt error = iEapProcessMessageQueue->AddMessage(message, data, length);
       
   205 
       
   206 		if (error != KErrNone)
       
   207 		{
       
   208 			EAP_TRACE_DEBUG(
       
   209 				iTools,
       
   210 				TRACE_FLAGS_DEFAULT,
       
   211 				(EAPL("ERROR: CEapServerProcessHandler::SaveMessage(): failed = %d\n"),
       
   212 				error));
       
   213 			return;
       
   214 		}
       
   215 
       
   216 		error = iClient->AddReadyHandler(this);
       
   217 		if (error != KErrNone)
       
   218 		{
       
   219 			EAP_TRACE_DEBUG(
       
   220 				iTools,
       
   221 				TRACE_FLAGS_DEFAULT,
       
   222 				(EAPL("ERROR: CEapServerProcessHandler::SaveMessage(): iClient->AddReadyHandler(this) failed = %d\n"),
       
   223 				error));
       
   224 			return;
       
   225 		}
       
   226 	}
   178 
   227 
   179 	EAP_TRACE_DEBUG(
   228 	EAP_TRACE_DEBUG(
   180 		iTools,
   229 		iTools,
   181 		TRACE_FLAGS_DEFAULT,
   230 		TRACE_FLAGS_DEFAULT,
   182 		(EAPL("CEapServerProcessHandler::SaveMessage(): returns this=0x%08x, message=%d=%s\n"),
   231 		(EAPL("CEapServerProcessHandler::SaveMessage(): returns this=0x%08x, message=%d=%s\n"),
   185 		EapServerStrings::GetEapRequestsString(message)));
   234 		EapServerStrings::GetEapRequestsString(message)));
   186 }
   235 }
   187 
   236 
   188 //----------------------------------------------------------------------------
   237 //----------------------------------------------------------------------------
   189 
   238 
   190 void CEapServerProcessHandler::Activate()
   239 void CEapServerProcessHandler::Activate(const CEapServerProcessHandlerState aState)
   191 {
   240 {
   192 	EAP_TRACE_DEBUG(
   241 	EAP_TRACE_DEBUG(
   193 		iTools,
   242 		iTools,
   194 		TRACE_FLAGS_DEFAULT,
   243 		TRACE_FLAGS_DEFAULT,
   195 		(EAPL("CEapServerProcessHandler::Activate(): this=0x%08x\n"),
   244 		(EAPL("CEapServerProcessHandler::Activate(): this=0x%08x, iHandlerState=%d, aState=%d\n"),
   196 		this));
   245 		this,
       
   246 		iHandlerState,
       
   247 		aState));
   197 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::Activate()");
   248 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::Activate()");
   198 
   249 
   199 	if(!IsActive())
   250 	if(!IsActive())
   200 	{
   251 	{
   201 		EAP_TRACE_DEBUG(
   252 		EAP_TRACE_DEBUG(
   202 			iTools,
   253 			iTools,
   203 			TRACE_FLAGS_DEFAULT,
   254 			TRACE_FLAGS_DEFAULT,
   204 			(EAPL("CEapServerProcessHandler::Activate(): calls User::RequestComplete()\n")));
   255 			(EAPL("CEapServerProcessHandler::Activate(): calls User::RequestComplete()\n")));
       
   256 
       
   257 		iHandlerState = aState;
   205 
   258 
   206 		TRequestStatus* status = &iStatus;
   259 		TRequestStatus* status = &iStatus;
   207 		User::RequestComplete(status, KErrNone);
   260 		User::RequestComplete(status, KErrNone);
   208 
   261 
   209 		EAP_TRACE_DEBUG(
   262 		EAP_TRACE_DEBUG(
   234 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::RunL()");
   287 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::RunL()");
   235 
   288 
   236 	EAP_TRACE_DEBUG(
   289 	EAP_TRACE_DEBUG(
   237 		iTools,
   290 		iTools,
   238 		TRACE_FLAGS_DEFAULT,
   291 		TRACE_FLAGS_DEFAULT,
   239 		(EAPL("CEapServerProcessHandler::RunL(): this=0x%08x\n"),
   292 		(EAPL("CEapServerProcessHandler::RunL(): this=0x%08x, iProcessMessage=0x%08x, iHandlerState=%d\n"),
   240 		this));
   293 		this,
   241 
   294 		iProcessMessage,
   242 	EapMessageBuffer * const message = iEapMessageQueue->GetFirstMessage();
   295 		iHandlerState));
       
   296 
       
   297 	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       
   298 
       
   299 	const EapMessageBuffer * aSendMessage = 0;
       
   300 
       
   301 	// The send-message queue have priority over the process-message queue.
       
   302 	EapMessageBuffer * message = iEapSendMessageQueue->GetFirstMessage();
       
   303 
       
   304 	if (message != 0)
       
   305 	{
       
   306 		EAP_TRACE_DEBUG(
       
   307 			iTools,
       
   308 			TRACE_FLAGS_DEFAULT,
       
   309 			(EAPL("CEapServerProcessHandler::RunL(): Send-message=0x%08x\n"),
       
   310 			this,
       
   311 			message));
       
   312 
       
   313 		aSendMessage = message;
       
   314 	}
       
   315 
       
   316 	// When send-operation is only allowed the process-message queue is NOT read.
       
   317 	if (message == 0
       
   318 		&& iHandlerState != EapServerProcessHandlerState_Send
       
   319 		)
       
   320 	{
       
   321 		message = iEapProcessMessageQueue->GetFirstMessage();
       
   322 
       
   323 		EAP_ASSERT_TOOLS(iTools, iProcessMessage == 0);
       
   324 
       
   325 		iProcessMessage = message;
       
   326 
       
   327 		EAP_TRACE_DEBUG(
       
   328 			iTools,
       
   329 			TRACE_FLAGS_DEFAULT,
       
   330 			(EAPL("CEapServerProcessHandler::RunL(): Process-message=0x%08x\n"),
       
   331 			this,
       
   332 			message));
       
   333 	}
       
   334 
       
   335 	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   243 
   336 
   244 	if (message != 0)
   337 	if (message != 0)
   245 	{
   338 	{
   246 		EAP_TRACE_DEBUG(
   339 		EAP_TRACE_DEBUG(
   247 			iTools,
   340 			iTools,
   252 			message->GetData()->Ptr(),
   345 			message->GetData()->Ptr(),
   253 			message->GetData()->Size()));
   346 			message->GetData()->Size()));
   254 
   347 
   255 		eap_status_e status(eap_status_ok);
   348 		eap_status_e status(eap_status_ok);
   256 
   349 
       
   350 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       
   351 
   257 		switch (message->GetRequestType())
   352 		switch (message->GetRequestType())
   258 		{
   353 		{
   259 
   354 
   260 		case EEapCoreIfNew:
   355 		case EEapCoreIfNew:
   261 
   356 
   485 				}
   580 				}
   486 			}
   581 			}
   487 
   582 
   488 			break;
   583 			break;
   489 
   584 
   490 #if defined (USE_WAPI_CORE)
   585         case EWapiCoreIfNew:
   491 	     case EWapiCoreIfNew:
   586             {
   492 
       
   493 	            EAP_TRACE_DEBUG(
   587 	            EAP_TRACE_DEBUG(
   494 	                iTools,
   588 	                iTools,
   495 	                TRACE_FLAGS_DEFAULT,
   589 	                TRACE_FLAGS_DEFAULT,
   496 	                (EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew\n")));
   590 	                (EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew\n")));
   497 
   591 
   498                 iWapiCore = CWapiCoreIf::NewL(iTools, this);
   592                 TRAPD( err, iWapiCore = CWapiCoreIf::NewL(iTools, this));
   499 
   593 
   500 				EAP_TRACE_DEBUG(
   594 				EAP_UNREFERENCED_PARAMETER(err); // Only trace uses this.
   501 					iTools,
   595 
   502 					TRACE_FLAGS_DEFAULT,
   596 				EAP_TRACE_DEBUG(
   503 					(EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew - iWapiCore = 0x%08x.\n"),
   597 					iTools,
   504 					iWapiCore));
   598 					TRACE_FLAGS_DEFAULT,
   505 
   599 					(EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew - iWapiCore = 0x%08x, err=%i.\n"),
       
   600 					iWapiCore,
       
   601 					err));
   506 
   602 
   507 	            break;
   603 	            break;
   508 
   604             }
   509 	        case EWapiSettingsNew:
   605 
       
   606         case EWapiSettingsNew:
       
   607             {
   510 
   608 
   511 	            EAP_TRACE_DEBUG(
   609 	            EAP_TRACE_DEBUG(
   512 	                iTools,
   610 	                iTools,
   513 	                TRACE_FLAGS_DEFAULT,
   611 	                TRACE_FLAGS_DEFAULT,
   514 	                (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew\n")));
   612 	                (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew\n")));
   515 
   613 
   516 	            iWapiSettings = CWapiSettingsIf::NewL(iTools, this);
   614 	            TRAPD( err, iWapiSettings = CWapiSettingsIf::NewL(iTools, this));
   517 
   615 
   518 				EAP_TRACE_DEBUG(
   616 				EAP_UNREFERENCED_PARAMETER(err); // Only trace uses this.
   519 					iTools,
   617 
   520 					TRACE_FLAGS_DEFAULT,
   618 				EAP_TRACE_DEBUG(
   521 					(EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew - iWapiSettings = 0x%08x.\n"),
   619 					iTools,
   522 					iWapiSettings));
   620 					TRACE_FLAGS_DEFAULT,
       
   621 					(EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew - iWapiSettings = 0x%08x, err=%i.\n"),
       
   622 					iWapiSettings,
       
   623 					err));
   523 	            break;
   624 	            break;
   524 #endif
   625             }
   525 	            
   626 	            
   526         case EEapPacStoreNew:
   627         case EEapPacStoreNew:
   527 
   628 
   528 			{
   629 			{
   529 				EAP_TRACE_DEBUG(
   630 				EAP_TRACE_DEBUG(
   615 
   716 
   616             if (iEapCore !=0)
   717             if (iEapCore !=0)
   617             {
   718             {
   618                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   719                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   619                 TInt aLength = message->GetData()->Size();
   720                 TInt aLength = message->GetData()->Size();
   620                 iEapCore->process_data(aData, aLength);
   721                 status = iEapCore->process_data(aData, aLength);
   621             }
   722             }
   622             else
   723             else
   623             {
   724             {
   624                 EAP_TRACE_DEBUG(
   725                 EAP_TRACE_DEBUG(
   625                     iTools,
   726                     iTools,
   639 #if defined(USE_FAST_EAP_TYPE)
   740 #if defined(USE_FAST_EAP_TYPE)
   640 			if (iPacStore !=0)
   741 			if (iPacStore !=0)
   641 			{
   742 			{
   642 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   743 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   643 				TInt aLength = message->GetData()->Size();
   744 				TInt aLength = message->GetData()->Size();
   644 				iPacStore->process_data(aData, aLength);
   745                 status = iPacStore->process_data(aData, aLength);
   645 			}
   746 			}
   646 			else
   747 			else
   647 			{
   748 			{
   648 				EAP_TRACE_DEBUG(
   749 				EAP_TRACE_DEBUG(
   649 					iTools,
   750 					iTools,
   662 
   763 
   663 			if (iEapPlugin !=0)
   764 			if (iEapPlugin !=0)
   664 			{
   765 			{
   665 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   766 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   666 				TInt aLength = message->GetData()->Size();
   767 				TInt aLength = message->GetData()->Size();
   667 				iEapPlugin->process_data(aData, aLength);
   768                 status = iEapPlugin->process_data(aData, aLength);
   668 			}
   769 			}
   669 			else
   770 			else
   670 			{
   771 			{
   671 				EAP_TRACE_DEBUG(
   772 				EAP_TRACE_DEBUG(
   672 					iTools,
   773 					iTools,
   685 
   786 
   686 			if (iEapSettings !=0)
   787 			if (iEapSettings !=0)
   687 			{
   788 			{
   688 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   789 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   689 				TInt aLength = message->GetData()->Size();
   790 				TInt aLength = message->GetData()->Size();
   690 				iEapSettings->process_data(aData, aLength);
   791                 status = iEapSettings->process_data(aData, aLength);
   691 			}
   792 			}
   692 			else
   793 			else
   693 			{
   794 			{
   694 				EAP_TRACE_DEBUG(
   795 				EAP_TRACE_DEBUG(
   695 					iTools,
   796 					iTools,
   697 					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapSettingsProcessData, iEapSettings is NULL\n")));
   798 					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapSettingsProcessData, iEapSettings is NULL\n")));
   698 			}
   799 			}
   699 
   800 
   700 			break;
   801 			break;
   701 
   802 
   702 #if defined (USE_WAPI_CORE)
       
   703 		case EWapiCoreProcessData:
   803 		case EWapiCoreProcessData:
   704 
   804 
   705             EAP_TRACE_DEBUG(
   805             EAP_TRACE_DEBUG(
   706                 iTools,
   806                 iTools,
   707                 TRACE_FLAGS_DEFAULT,
   807                 TRACE_FLAGS_DEFAULT,
   709 
   809 
   710             if (iWapiCore !=0)
   810             if (iWapiCore !=0)
   711             {
   811             {
   712                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   812                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   713                 TInt aLength = message->GetData()->Size();
   813                 TInt aLength = message->GetData()->Size();
   714                 iWapiCore->process_data(aData, aLength);
   814                 status = iWapiCore->process_data(aData, aLength);
   715             }
   815             }
   716             else
   816             else
   717             {
   817             {
   718                 EAP_TRACE_DEBUG(
   818                 EAP_TRACE_DEBUG(
   719                     iTools,
   819                     iTools,
   731 
   831 
   732             if (iWapiSettings !=0)
   832             if (iWapiSettings !=0)
   733             {
   833             {
   734                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   834                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
   735                 TInt aLength = message->GetData()->Size();
   835                 TInt aLength = message->GetData()->Size();
   736                 iWapiSettings->process_data(aData, aLength);
   836                 status = iWapiSettings->process_data(aData, aLength);
   737             }
   837             }
   738             else
   838             else
   739             {
   839             {
   740                 EAP_TRACE_DEBUG(
   840                 EAP_TRACE_DEBUG(
   741                     iTools,
   841                     iTools,
   742                     TRACE_FLAGS_DEFAULT,
   842                     TRACE_FLAGS_DEFAULT,
   743                     (EAPL("ERROR: CEapServerProcessHandler::RunL(): EWapiSettingsProcessData, iWapiSettings is NULL\n")));
   843                     (EAPL("ERROR: CEapServerProcessHandler::RunL(): EWapiSettingsProcessData, iWapiSettings is NULL\n")));
   744             }
   844             }
   745 
   845 
   746             break;
   846             break;
   747 #endif
       
   748 
   847 
   749 		case EEapCoreSendData:
   848 		case EEapCoreSendData:
   750 		case EEapPluginSendData:
   849 		case EEapPluginSendData:
   751 		case EEapSettingsSendData:
   850 		case EEapSettingsSendData:
   752         case EEapPacStoreSendData:
   851         case EEapPacStoreSendData:
   753 #if defined (USE_WAPI_CORE)
       
   754         case EWapiCoreSendData:
   852         case EWapiCoreSendData:
   755         case EWapiSettingsSendData:
   853         case EWapiSettingsSendData:
   756 #endif
       
   757 			if (message->GetRequestType() == EEapCoreSendData)
   854 			if (message->GetRequestType() == EEapCoreSendData)
   758 			{
   855 			{
   759 				EAP_TRACE_DEBUG(
   856 				EAP_TRACE_DEBUG(
   760 					iTools,
   857 					iTools,
   761 					TRACE_FLAGS_DEFAULT,
   858 					TRACE_FLAGS_DEFAULT,
   780                 EAP_TRACE_DEBUG(
   877                 EAP_TRACE_DEBUG(
   781                     iTools,
   878                     iTools,
   782                     TRACE_FLAGS_DEFAULT,
   879                     TRACE_FLAGS_DEFAULT,
   783                     (EAPL("CEapServerProcessHandler::RunL() EEapPacStoreSendData\n")));
   880                     (EAPL("CEapServerProcessHandler::RunL() EEapPacStoreSendData\n")));
   784             }
   881             }
   785 #if defined (USE_WAPI_CORE)
       
   786             else if (message->GetRequestType() == EWapiCoreSendData)
   882             else if (message->GetRequestType() == EWapiCoreSendData)
   787             {
   883             {
   788                 EAP_TRACE_DEBUG(
   884                 EAP_TRACE_DEBUG(
   789                     iTools,
   885                     iTools,
   790                     TRACE_FLAGS_DEFAULT,
   886                     TRACE_FLAGS_DEFAULT,
   795                 EAP_TRACE_DEBUG(
   891                 EAP_TRACE_DEBUG(
   796                     iTools,
   892                     iTools,
   797                     TRACE_FLAGS_DEFAULT,
   893                     TRACE_FLAGS_DEFAULT,
   798                     (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsSendData\n")));
   894                     (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsSendData\n")));
   799             }
   895             }
   800 #endif
   896 
   801 			EAP_TRACE_DEBUG(
   897 			EAP_TRACE_DEBUG(
   802 				iTools,
   898 				iTools,
   803 				TRACE_FLAGS_DEFAULT,
   899 				TRACE_FLAGS_DEFAULT,
   804 				(EAPL("CEapServerProcessHandler::RunL(): iClient=0x%08x\n"),
   900 				(EAPL("CEapServerProcessHandler::RunL(): iClient=0x%08x\n"),
   805 				iClient));
   901 				iClient));
   840 				EapServerStrings::GetEapRequestsString(message->GetRequestType())));
   936 				EapServerStrings::GetEapRequestsString(message->GetRequestType())));
   841 			break;
   937 			break;
   842 
   938 
   843 		} // switch()
   939 		} // switch()
   844 
   940 
   845 		if (status == eap_status_ok)
   941 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       
   942 
       
   943 		EAP_TRACE_DEBUG(
       
   944 			iTools,
       
   945 			TRACE_FLAGS_DEFAULT,
       
   946 			(EAPL("CEapServerProcessHandler::RunL(): iProcessMessage=0x%08x, aSendMessage=0x%08x, status=%d=%s.\n"),
       
   947 			iProcessMessage,
       
   948 			aSendMessage,
       
   949 			status,
       
   950 			eap_status_string_c::get_status_string(status)));
       
   951 
       
   952 		// First send-message handled, remove the message.
       
   953 		// iClient->SendData() call may fail, then we do not remove the message.
       
   954 		if (aSendMessage != 0
       
   955 			&& status == eap_status_ok)
   846 		{
   956 		{
   847 			// First one handled, remove message.
   957 			iEapSendMessageQueue->DeleteFirstMessage(aSendMessage);
   848 			// iClient->SendData() call may fail, then we do not remove the message.
       
   849 			iEapMessageQueue->DeleteFirstMessage();
       
   850 		}
   958 		}
       
   959 		else if (aSendMessage == 0
       
   960 			&& (status == eap_status_ok
       
   961 				|| status != eap_status_pending_request))
       
   962 		{
       
   963 			// First process-message handled, remove the message.
       
   964 			// Note the pending message will be removed after the operation has been completed in the SendData() function.
       
   965 			iEapProcessMessageQueue->DeleteFirstMessage(iProcessMessage);
       
   966 			iProcessMessage = 0;
       
   967 		}
       
   968 
       
   969 		// Send-message must be null after this step. The message is is still in the iEapSendMessageQueue if send-operation failed.
       
   970 		aSendMessage = 0;
   851 
   971 
   852 	} // if ()
   972 	} // if ()
   853 
   973 
   854 	if (iEapMessageQueue->GetFirstMessage() != 0)
   974 	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       
   975 
       
   976 	EAP_TRACE_DEBUG(
       
   977 		iTools,
       
   978 		TRACE_FLAGS_DEFAULT,
       
   979 		(EAPL("CEapServerProcessHandler::RunL(): iProcessMessage=0x%08x, aSendMessage=0x%08x\n"),
       
   980 		iProcessMessage,
       
   981 		aSendMessage));
       
   982 
       
   983 	EAP_TRACE_DEBUG(
       
   984 		iTools,
       
   985 		TRACE_FLAGS_DEFAULT,
       
   986 		(EAPL("CEapServerProcessHandler::RunL(): iEapSendMessageQueue->GetFirstMessage()=0x%08x, iEapProcessMessageQueue->GetFirstMessage()=0x%08x\n"),
       
   987 		iEapSendMessageQueue->GetFirstMessage(),
       
   988 		iEapProcessMessageQueue->GetFirstMessage()));
       
   989 
       
   990 	if (iEapSendMessageQueue->GetFirstMessage() != 0)
       
   991 	{
       
   992 		if (iClient != NULL)
       
   993 		{
       
   994 			if (iClient->GetReceiveActive())
       
   995 			{
       
   996 				// Still send-messages waiting, activate handler.
       
   997 				Activate(EapServerProcessHandlerState_Send);
       
   998 			}
       
   999 			else
       
  1000 			{
       
  1001 				EAP_TRACE_DEBUG(
       
  1002 					iTools,
       
  1003 					TRACE_FLAGS_DEFAULT,
       
  1004 					(EAPL("WARNING: CEapServerProcessHandler::RunL(): cannot call User::RequestComplete() because no receive is active.\n")));
       
  1005 			}
       
  1006 		}
       
  1007 	}
       
  1008 	else if (iProcessMessage == 0
       
  1009 		&& iEapProcessMessageQueue->GetFirstMessage() != 0)
   855 	{
  1010 	{
   856 		EAP_TRACE_DEBUG(
  1011 		EAP_TRACE_DEBUG(
   857 			iTools,
  1012 			iTools,
   858 			TRACE_FLAGS_DEFAULT,
  1013 			TRACE_FLAGS_DEFAULT,
   859 			(EAPL("CEapServerProcessHandler::RunL(): Still messages waiting.\n")));
  1014 			(EAPL("CEapServerProcessHandler::RunL(): Still messages waiting.\n")));
   860 
  1015 
   861 		if (iClient != NULL)
  1016 		if (iClient != NULL)
   862 		{
  1017 		{
   863 			if (iClient->GetReceiveActive())
  1018 			// Still process-messages waiting, activate handler.
   864 			{
  1019 			Activate(EapServerProcessHandlerState_All);
   865 				Activate();
       
   866 			}
       
   867 			else
       
   868 			{
       
   869 				EAP_TRACE_DEBUG(
       
   870 					iTools,
       
   871 					TRACE_FLAGS_DEFAULT,
       
   872 					(EAPL("WARNING: CEapServerProcessHandler::RunL(): cannot call User::RequestComplete() because no receive is active.\n")));
       
   873 			}
       
   874 		}
  1020 		}
   875 	}
  1021 	}
   876 	else
  1022 	else if (iProcessMessage == 0)
   877 	{
  1023 	{
   878 		EAP_TRACE_DEBUG(
  1024 		EAP_TRACE_DEBUG(
   879 			iTools,
  1025 			iTools,
   880 			TRACE_FLAGS_DEFAULT,
  1026 			TRACE_FLAGS_DEFAULT,
   881 			(EAPL("CEapServerProcessHandler::RunL(): No more messages to process.\n")));
  1027 			(EAPL("CEapServerProcessHandler::RunL(): No new messages to process. Current message iProcessMessage=0x%08x\n"),
       
  1028 			iProcessMessage));
       
  1029 
       
  1030 		TInt error = iClient->CompleteReadyHandler(this);
       
  1031 		if (error != KErrNone)
       
  1032 		{
       
  1033 			EAP_TRACE_DEBUG(
       
  1034 				iTools,
       
  1035 				TRACE_FLAGS_DEFAULT,
       
  1036 				(EAPL("ERROR: CEapServerProcessHandler::RunL(): iClient->CompleteReadyHandler() failed, error=%d\n"),
       
  1037 				error));
       
  1038 		}
   882 	}
  1039 	}
   883 
  1040 
   884 	EAP_TRACE_DEBUG(
  1041 	EAP_TRACE_DEBUG(
   885 		iTools,
  1042 		iTools,
   886 		TRACE_FLAGS_DEFAULT,
  1043 		TRACE_FLAGS_DEFAULT,