eapol/eapol_framework/eapol_symbian/eap_server/src/EapServerProcessHandler.cpp
changeset 33 938269283a16
child 34 ad1f037f1ac2
equal deleted inserted replaced
22:093cf0757204 33:938269283a16
       
     1 /*
       
     2 * Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  EAP and WLAN authentication protocols.
       
    15 *
       
    16 */
       
    17 
       
    18 /*
       
    19 * %version:  39 %
       
    20 */
       
    21 
       
    22 #include "EapServerProcessHandler.h"
       
    23 #include "EapTraceSymbian.h"
       
    24 #if defined(USE_FAST_EAP_TYPE)
       
    25 #include "PacStoreIf.h"
       
    26 #endif //#if defined(USE_FAST_EAP_TYPE)
       
    27 #include "EapServerStrings.h"
       
    28 #include "eap_automatic_variable.h"
       
    29 
       
    30 //----------------------------------------------------------------------------
       
    31 
       
    32 CEapServerProcessHandler::CEapServerProcessHandler()
       
    33 : CActive (0)
       
    34 , iClient(0)
       
    35 , iTools(0)
       
    36 , iEapCore(0)
       
    37 , iEapPlugin(0)
       
    38 , iEapSettings(0)
       
    39 #if defined (USE_WAPI_CORE)
       
    40 , iWapiCore(0)
       
    41 , iWapiSettings(0)
       
    42 #endif
       
    43 #if defined(USE_FAST_EAP_TYPE)
       
    44 , iPacStore(0)
       
    45 #endif //#if defined(USE_FAST_EAP_TYPE)
       
    46 , iEapMessageQueue(0)
       
    47 {
       
    48 
       
    49 }
       
    50 
       
    51 //----------------------------------------------------------------------------
       
    52 
       
    53 CEapServerProcessHandler::~CEapServerProcessHandler()
       
    54 {
       
    55 	EAP_TRACE_DEBUG(
       
    56 		iTools,
       
    57 		TRACE_FLAGS_DEFAULT,
       
    58 		(EAPL("CEapServerProcessHandler::~CEapServerProcessHandler(): this=0x%08x\n"),
       
    59 		this));
       
    60 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::~CEapServerProcessHandler()");
       
    61 
       
    62 	if(IsActive())
       
    63 	{
       
    64 		Cancel();
       
    65 	}
       
    66 
       
    67 	delete iEapCore;
       
    68 	iEapCore = 0;
       
    69 
       
    70 	delete iEapPlugin;
       
    71 	iEapPlugin = 0;
       
    72 
       
    73 	delete iEapSettings;
       
    74 	iEapSettings = 0;
       
    75 
       
    76 #if defined (USE_WAPI_CORE)
       
    77     delete iWapiCore;
       
    78     iWapiCore = 0;
       
    79 
       
    80     delete iWapiSettings;
       
    81     iWapiSettings = 0;
       
    82 #endif
       
    83 
       
    84 #if defined(USE_FAST_EAP_TYPE)
       
    85     delete iPacStore;
       
    86     iPacStore = 0;
       
    87 #endif //#if defined(USE_FAST_EAP_TYPE)
       
    88 
       
    89     delete iEapMessageQueue;
       
    90 	iEapMessageQueue = 0;
       
    91 }
       
    92     
       
    93 //----------------------------------------------------------------------------
       
    94 
       
    95 CEapServerProcessHandler* CEapServerProcessHandler::NewL()
       
    96 {
       
    97 	return new (ELeave) CEapServerProcessHandler();
       
    98 }
       
    99 
       
   100 //----------------------------------------------------------------------------
       
   101 
       
   102 void CEapServerProcessHandler::ConstructL(AbsEapProcessSendInterface* const client, abs_eap_am_tools_c * const tools)
       
   103 {
       
   104 	EAP_TRACE_DEBUG(
       
   105 		tools,
       
   106 		TRACE_FLAGS_DEFAULT,
       
   107 		(EAPL("CEapServerProcessHandler::ConstructL(): this=0x%08x\n"),
       
   108 		this));
       
   109 	EAP_TRACE_RETURN_STRING(tools, "returns: CEapServerProcessHandler::ConstructL()");
       
   110 
       
   111 	iClient = client;
       
   112 	iTools = tools;
       
   113 
       
   114 	iEapMessageQueue = new(ELeave) EapMessageQueue(iTools);
       
   115 }
       
   116 
       
   117 //----------------------------------------------------------------------------
       
   118 
       
   119 eap_status_e CEapServerProcessHandler::SendData(const void * const data, const u32_t length, TEapRequests message)
       
   120 {
       
   121 	EAP_TRACE_DEBUG(
       
   122 		iTools,
       
   123 		TRACE_FLAGS_DEFAULT,
       
   124 		(EAPL("CEapServerProcessHandler::SendData(): this=0x%08x\n"),
       
   125 		this));
       
   126 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::SendData()");
       
   127 
       
   128 	eap_status_e status(eap_status_ok);
       
   129 
       
   130 	SaveMessage(message, data, length);
       
   131 
       
   132 	return status;
       
   133 }
       
   134 
       
   135 //----------------------------------------------------------------------------
       
   136 
       
   137 void CEapServerProcessHandler::SaveMessage(TEapRequests message, const void * const data, const TUint length)
       
   138 {
       
   139 	EAP_TRACE_DEBUG(
       
   140 		iTools,
       
   141 		TRACE_FLAGS_DEFAULT,
       
   142 		(EAPL("CEapServerProcessHandler::SaveMessage(): this=0x%08x, message=%d=%s\n"),
       
   143 		this,
       
   144 		message,
       
   145 		EapServerStrings::GetEapRequestsString(message)));
       
   146 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::SaveMessage()");
       
   147 
       
   148 	EAP_TRACE_DATA_DEBUG(
       
   149 		iTools,
       
   150 		TRACE_FLAGS_DEFAULT,
       
   151 		(EAPL("CEapServerProcessHandler::SaveMessage()"),
       
   152 		data,
       
   153 		length));
       
   154 
       
   155 	EAP_TRACE_DEBUG(
       
   156 		iTools,
       
   157 		TRACE_FLAGS_DEFAULT,
       
   158 		(EAPL("CEapServerProcessHandler::SaveMessage(): calls iEapMessageQueue->AddMessage()\n")));
       
   159 
       
   160 	TInt error = iEapMessageQueue->AddMessage(message, data, length);
       
   161 
       
   162 	if (error != KErrNone)
       
   163 	{
       
   164 		EAP_TRACE_DEBUG(
       
   165 			iTools,
       
   166 			TRACE_FLAGS_DEFAULT,
       
   167 			(EAPL("ERROR: CEapServerProcessHandler::SaveMessage(): failed = %d\n"),
       
   168 			error));
       
   169 		return;
       
   170 	}
       
   171 
       
   172 	Activate();
       
   173 
       
   174 	EAP_TRACE_DEBUG(
       
   175 		iTools,
       
   176 		TRACE_FLAGS_DEFAULT,
       
   177 		(EAPL("CEapServerProcessHandler::SaveMessage(): returns this=0x%08x, message=%d=%s\n"),
       
   178 		this,
       
   179 		message,
       
   180 		EapServerStrings::GetEapRequestsString(message)));
       
   181 }
       
   182 
       
   183 //----------------------------------------------------------------------------
       
   184 
       
   185 void CEapServerProcessHandler::Activate()
       
   186 {
       
   187 	EAP_TRACE_DEBUG(
       
   188 		iTools,
       
   189 		TRACE_FLAGS_DEFAULT,
       
   190 		(EAPL("CEapServerProcessHandler::Activate(): this=0x%08x\n"),
       
   191 		this));
       
   192 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::Activate()");
       
   193 
       
   194 	if(!IsActive())
       
   195 	{
       
   196 		EAP_TRACE_DEBUG(
       
   197 			iTools,
       
   198 			TRACE_FLAGS_DEFAULT,
       
   199 			(EAPL("CEapServerProcessHandler::Activate(): calls User::RequestComplete()\n")));
       
   200 
       
   201 		TRequestStatus* status = &iStatus;
       
   202 		User::RequestComplete(status, KErrNone);
       
   203 
       
   204 		EAP_TRACE_DEBUG(
       
   205 			iTools,
       
   206 			TRACE_FLAGS_DEFAULT,
       
   207 			(EAPL("CEapServerProcessHandler::Activate(): calls SetActive()\n")));
       
   208 
       
   209 		SetActive();
       
   210 	}
       
   211 	else
       
   212 	{
       
   213 		EAP_TRACE_DEBUG(
       
   214 			iTools,
       
   215 			TRACE_FLAGS_DEFAULT,
       
   216 			(EAPL("CEapServerProcessHandler::Activate(): Already active.\n")));
       
   217 	}
       
   218 }
       
   219 
       
   220 //----------------------------------------------------------------------------
       
   221 
       
   222 void CEapServerProcessHandler::RunL()
       
   223 {
       
   224 	EAP_TRACE_DEBUG(
       
   225 		iTools,
       
   226 		TRACE_FLAGS_DEFAULT,
       
   227 		(EAPL("=start=====================================================================\n")));
       
   228 
       
   229 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::RunL()");
       
   230 
       
   231 	EAP_TRACE_DEBUG(
       
   232 		iTools,
       
   233 		TRACE_FLAGS_DEFAULT,
       
   234 		(EAPL("CEapServerProcessHandler::RunL(): this=0x%08x\n"),
       
   235 		this));
       
   236 
       
   237 	EapMessageBuffer * const message = iEapMessageQueue->GetFirstMessage();
       
   238 
       
   239 	if (message != 0)
       
   240 	{
       
   241 		EAP_TRACE_DEBUG(
       
   242 			iTools,
       
   243 			TRACE_FLAGS_DEFAULT,
       
   244 			(EAPL("CEapServerProcessHandler::RunL(): message->GetRequestType()=%d=%s, data=0x%08x, size=%d\n"),
       
   245 			message->GetRequestType(),
       
   246 			EapServerStrings::GetEapRequestsString(message->GetRequestType()),
       
   247 			message->GetData()->Ptr(),
       
   248 			message->GetData()->Size()));
       
   249 
       
   250 		eap_status_e status(eap_status_ok);
       
   251 
       
   252 		switch (message->GetRequestType())
       
   253 		{
       
   254 
       
   255 		case EEapCoreIfNew:
       
   256 
       
   257 			{
       
   258 				EAP_TRACE_DEBUG(
       
   259 					iTools,
       
   260 					TRACE_FLAGS_DEFAULT,
       
   261 					(EAPL("CEapServerProcessHandler::RunL() EEapCoreIfNew\n")));
       
   262 
       
   263 				CEapCoreIf * tmpEapCore = CEapCoreIf::new_CEapCoreIf(
       
   264 					iTools,
       
   265 					ETrue,
       
   266 					0,
       
   267 					this);
       
   268 
       
   269 				if (tmpEapCore != 0)
       
   270 				{
       
   271 					CleanupStack::PushL(tmpEapCore);
       
   272 
       
   273 					if (tmpEapCore->get_is_valid() == false)
       
   274 					{
       
   275 						EAP_TRACE_DEBUG(
       
   276 							iTools,
       
   277 							TRACE_FLAGS_DEFAULT,
       
   278 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CEapCoreIf::new_CEapCoreIf() failed, this=0x%08x\n"),
       
   279 							this));
       
   280 
       
   281 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   282 					}
       
   283 
       
   284 					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
       
   285 					const TInt aLength = message->GetData()->Size();
       
   286 
       
   287 					const eap_variable_data_c client_configuration(
       
   288 						iTools,
       
   289 						aData,
       
   290 						aLength,
       
   291 						false,
       
   292 						false);
       
   293 					if (client_configuration.get_is_valid() == false)
       
   294 					{
       
   295 						EAP_TRACE_DEBUG(
       
   296 							iTools,
       
   297 							TRACE_FLAGS_DEFAULT,
       
   298 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
       
   299 							this));
       
   300 
       
   301 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   302 					}
       
   303 
       
   304 					status = tmpEapCore->configure(&client_configuration);
       
   305 					if (status != eap_status_ok)
       
   306 					{
       
   307 						EAP_TRACE_DEBUG(
       
   308 							iTools,
       
   309 							TRACE_FLAGS_DEFAULT,
       
   310 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpEapCore->configure() failed, this=0x%08x, status=%d=%s\n"),
       
   311 							this,
       
   312 							status,
       
   313 							eap_status_string_c::get_status_string(status)));
       
   314 
       
   315 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
       
   316 					}
       
   317 
       
   318 					iEapCore = tmpEapCore;
       
   319 
       
   320 					CleanupStack::Pop(tmpEapCore);
       
   321 				}
       
   322 				else
       
   323 				{
       
   324 					EAP_TRACE_DEBUG(
       
   325 						iTools,
       
   326 						TRACE_FLAGS_DEFAULT,
       
   327 						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapCoreIfNew, iEapCore is NULL\n")));
       
   328 				}
       
   329 			}
       
   330 
       
   331 			break;
       
   332 
       
   333 		case EEapPluginNew:
       
   334 
       
   335 			{
       
   336 				EAP_TRACE_DEBUG(
       
   337 					iTools,
       
   338 					TRACE_FLAGS_DEFAULT,
       
   339 					(EAPL("CEapServerProcessHandler::RunL() EEapPluginNew\n")));
       
   340 
       
   341 				CEapPluginIf * tmpEapPlugin = CEapPluginIf::new_CEapPluginIf(iTools);
       
   342 
       
   343 				if (tmpEapPlugin != 0)
       
   344 				{
       
   345 					CleanupStack::PushL(tmpEapPlugin);
       
   346 
       
   347 					if (tmpEapPlugin->get_is_valid() == false)
       
   348 					{
       
   349 						EAP_TRACE_DEBUG(
       
   350 							iTools,
       
   351 							TRACE_FLAGS_DEFAULT,
       
   352 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CEapPluginIf::new_CEapPluginIf() failed, this=0x%08x\n"),
       
   353 							this));
       
   354 
       
   355 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   356 					}
       
   357 
       
   358 					tmpEapPlugin->set_partner(this);
       
   359 
       
   360 					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
       
   361 					const TInt aLength = message->GetData()->Size();
       
   362 
       
   363 					const eap_variable_data_c client_configuration(
       
   364 						iTools,
       
   365 						aData,
       
   366 						aLength,
       
   367 						false,
       
   368 						false);
       
   369 					if (client_configuration.get_is_valid() == false)
       
   370 					{
       
   371 						EAP_TRACE_DEBUG(
       
   372 							iTools,
       
   373 							TRACE_FLAGS_DEFAULT,
       
   374 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
       
   375 							this));
       
   376 
       
   377 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   378 					}
       
   379 
       
   380 					status = tmpEapPlugin->configure(&client_configuration);
       
   381 					if (status != eap_status_ok)
       
   382 					{
       
   383 						EAP_TRACE_DEBUG(
       
   384 							iTools,
       
   385 							TRACE_FLAGS_DEFAULT,
       
   386 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpEapPlugin->configure() failed, this=0x%08x, status=%d=%s\n"),
       
   387 							this,
       
   388 							status,
       
   389 							eap_status_string_c::get_status_string(status)));
       
   390 
       
   391 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
       
   392 					}
       
   393 
       
   394 					iEapPlugin = tmpEapPlugin;
       
   395 
       
   396 					CleanupStack::Pop(tmpEapPlugin);
       
   397 				}
       
   398 				else
       
   399 				{
       
   400 					EAP_TRACE_DEBUG(
       
   401 						iTools,
       
   402 						TRACE_FLAGS_DEFAULT,
       
   403 						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPluginNew, iEapPlugin is NULL\n")));
       
   404 				}
       
   405 			}
       
   406 
       
   407 			break;
       
   408 
       
   409 		case EEapSettingsNew:
       
   410 
       
   411 			{
       
   412 				EAP_TRACE_DEBUG(
       
   413 					iTools,
       
   414 					TRACE_FLAGS_DEFAULT,
       
   415 					(EAPL("CEapServerProcessHandler::RunL() EEapSettingsNew\n")));
       
   416 
       
   417 				CEapSettingsIf * tmpEapSettings = CEapSettingsIf::new_CEapSettingsIf(iTools);
       
   418 
       
   419 				if (tmpEapSettings != 0)
       
   420 				{
       
   421 					CleanupStack::PushL(tmpEapSettings);
       
   422 
       
   423 					if (tmpEapSettings->get_is_valid() == false)
       
   424 					{
       
   425 						EAP_TRACE_DEBUG(
       
   426 							iTools,
       
   427 							TRACE_FLAGS_DEFAULT,
       
   428 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CEapSettingsIf::new_CEapSettingsIf() failed, this=0x%08x\n"),
       
   429 							this));
       
   430 
       
   431 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   432 					}
       
   433 
       
   434 					tmpEapSettings->set_partner(this);
       
   435 
       
   436 					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
       
   437 					const TInt aLength = message->GetData()->Size();
       
   438 
       
   439 					const eap_variable_data_c client_configuration(
       
   440 						iTools,
       
   441 						aData,
       
   442 						aLength,
       
   443 						false,
       
   444 						false);
       
   445 					if (client_configuration.get_is_valid() == false)
       
   446 					{
       
   447 						EAP_TRACE_DEBUG(
       
   448 							iTools,
       
   449 							TRACE_FLAGS_DEFAULT,
       
   450 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
       
   451 							this));
       
   452 
       
   453 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   454 					}
       
   455 
       
   456 					status = tmpEapSettings->configure(&client_configuration);
       
   457 					if (status != eap_status_ok)
       
   458 					{
       
   459 						EAP_TRACE_DEBUG(
       
   460 							iTools,
       
   461 							TRACE_FLAGS_DEFAULT,
       
   462 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpEapSettings->configure() failed, this=0x%08x, status=%d=%s\n"),
       
   463 							this,
       
   464 							status,
       
   465 							eap_status_string_c::get_status_string(status)));
       
   466 
       
   467 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
       
   468 					}
       
   469 
       
   470 					iEapSettings = tmpEapSettings;
       
   471 
       
   472 					CleanupStack::Pop(tmpEapSettings);
       
   473 				}
       
   474 				else
       
   475 				{
       
   476 					EAP_TRACE_DEBUG(
       
   477 						iTools,
       
   478 						TRACE_FLAGS_DEFAULT,
       
   479 						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapSettingsNew, iEapSettings is NULL\n")));
       
   480 				}
       
   481 			}
       
   482 
       
   483 			break;
       
   484 
       
   485 #if defined (USE_WAPI_CORE)
       
   486 	     case EWapiCoreIfNew:
       
   487 
       
   488 	            EAP_TRACE_DEBUG(
       
   489 	                iTools,
       
   490 	                TRACE_FLAGS_DEFAULT,
       
   491 	                (EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew\n")));
       
   492 
       
   493                 iWapiCore = CWapiCoreIf::NewL(iTools, this);
       
   494 
       
   495 				EAP_TRACE_DEBUG(
       
   496 					iTools,
       
   497 					TRACE_FLAGS_DEFAULT,
       
   498 					(EAPL("CEapServerProcessHandler::RunL() EWapiCoreIfNew - iWapiCore = 0x%08x.\n"),
       
   499 					iWapiCore));
       
   500 
       
   501 
       
   502 	            break;
       
   503 
       
   504 	        case EWapiSettingsNew:
       
   505 
       
   506 	            EAP_TRACE_DEBUG(
       
   507 	                iTools,
       
   508 	                TRACE_FLAGS_DEFAULT,
       
   509 	                (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew\n")));
       
   510 
       
   511 	            iWapiSettings = CWapiSettingsIf::NewL(iTools, this);
       
   512 
       
   513 				EAP_TRACE_DEBUG(
       
   514 					iTools,
       
   515 					TRACE_FLAGS_DEFAULT,
       
   516 					(EAPL("CEapServerProcessHandler::RunL() EWapiSettingsNew - iWapiSettings = 0x%08x.\n"),
       
   517 					iWapiSettings));
       
   518 	            break;
       
   519 #endif
       
   520 	            
       
   521         case EEapPacStoreNew:
       
   522 
       
   523 			{
       
   524 				EAP_TRACE_DEBUG(
       
   525 					iTools,
       
   526 					TRACE_FLAGS_DEFAULT,
       
   527 					(EAPL("CEapServerProcessHandler::RunL() EEapPacStoreNew\n")));
       
   528 
       
   529 #if defined(USE_FAST_EAP_TYPE)
       
   530 
       
   531 				CPacStoreIf * tmpPacStore = CPacStoreIf::new_CPacStoreIf(
       
   532 					iTools,
       
   533 					ETrue,
       
   534 					0,
       
   535 					this);
       
   536 
       
   537 				if (tmpPacStore != 0)
       
   538 				{
       
   539 					CleanupStack::PushL(tmpPacStore);
       
   540 
       
   541 					if (tmpPacStore->get_is_valid() == false)
       
   542 					{
       
   543 						EAP_TRACE_DEBUG(
       
   544 							iTools,
       
   545 							TRACE_FLAGS_DEFAULT,
       
   546 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): CPacStoreIf::new_CPacStoreIf() failed, this=0x%08x\n"),
       
   547 							this));
       
   548 
       
   549 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   550 					}
       
   551 
       
   552 					const void * const aData = reinterpret_cast<const void *>(message->GetData()->Ptr());
       
   553 					const TInt aLength = message->GetData()->Size();
       
   554 
       
   555 					const eap_variable_data_c client_configuration(
       
   556 						iTools,
       
   557 						aData,
       
   558 						aLength,
       
   559 						false,
       
   560 						false);
       
   561 					if (client_configuration.get_is_valid() == false)
       
   562 					{
       
   563 						EAP_TRACE_DEBUG(
       
   564 							iTools,
       
   565 							TRACE_FLAGS_DEFAULT,
       
   566 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): eap_variable_data_c client_configuration() failed, this=0x%08x\n"),
       
   567 							this));
       
   568 
       
   569 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, eap_status_allocation_error)));
       
   570 					}
       
   571 
       
   572 					status = tmpPacStore->configure(&client_configuration);
       
   573 					if (status != eap_status_ok)
       
   574 					{
       
   575 						EAP_TRACE_DEBUG(
       
   576 							iTools,
       
   577 							TRACE_FLAGS_DEFAULT,
       
   578 							(EAPL("ERROR: CEapServerProcessHandler::RunL(): tmpPacStore->configure() failed, this=0x%08x, status=%d=%s\n"),
       
   579 							this,
       
   580 							status,
       
   581 							eap_status_string_c::get_status_string(status)));
       
   582 
       
   583 						User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
       
   584 					}
       
   585 
       
   586 					iPacStore = tmpPacStore;
       
   587 
       
   588 					CleanupStack::Pop(tmpPacStore);
       
   589 				}
       
   590 				else
       
   591 				{
       
   592 					EAP_TRACE_DEBUG(
       
   593 						iTools,
       
   594 						TRACE_FLAGS_DEFAULT,
       
   595 						(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPacStoreNew, iPacStore is NULL\n")));
       
   596 				}
       
   597 
       
   598 #endif //#if defined(USE_FAST_EAP_TYPE)
       
   599 
       
   600 			}
       
   601 
       
   602             break;
       
   603 
       
   604         case EEapCoreProcessData:
       
   605 
       
   606             EAP_TRACE_DEBUG(
       
   607                 iTools,
       
   608                 TRACE_FLAGS_DEFAULT,
       
   609                 (EAPL("CEapServerProcessHandler::RunL() EEapCoreProcessData\n")));
       
   610 
       
   611             if (iEapCore !=0)
       
   612             {
       
   613                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
       
   614                 TInt aLength = message->GetData()->Size();
       
   615                 iEapCore->process_data(aData, aLength);
       
   616             }
       
   617             else
       
   618             {
       
   619                 EAP_TRACE_DEBUG(
       
   620                     iTools,
       
   621                     TRACE_FLAGS_DEFAULT,
       
   622                     (EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapCoreProcessData, iEapCore is NULL\n")));
       
   623             }
       
   624 
       
   625             break;
       
   626 
       
   627         case EEapPacStoreProcessData:
       
   628 
       
   629 			EAP_TRACE_DEBUG(
       
   630 				iTools,
       
   631 				TRACE_FLAGS_DEFAULT,
       
   632 				(EAPL("CEapServerProcessHandler::RunL() EEapPacStoreProcessData\n")));
       
   633 
       
   634 #if defined(USE_FAST_EAP_TYPE)
       
   635 			if (iPacStore !=0)
       
   636 			{
       
   637 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
       
   638 				TInt aLength = message->GetData()->Size();
       
   639 				iPacStore->process_data(aData, aLength);
       
   640 			}
       
   641 			else
       
   642 			{
       
   643 				EAP_TRACE_DEBUG(
       
   644 					iTools,
       
   645 					TRACE_FLAGS_DEFAULT,
       
   646 					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPacStoreProcessData, iPacStore is NULL\n")));
       
   647 			}
       
   648 #endif //#if defined(USE_FAST_EAP_TYPE)
       
   649 			break;
       
   650 
       
   651 		case EEapPluginProcessData:
       
   652 
       
   653 			EAP_TRACE_DEBUG(
       
   654 				iTools,
       
   655 				TRACE_FLAGS_DEFAULT,
       
   656 				(EAPL("CEapServerProcessHandler::RunL() EEapPluginProcessData\n")));
       
   657 
       
   658 			if (iEapPlugin !=0)
       
   659 			{
       
   660 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
       
   661 				TInt aLength = message->GetData()->Size();
       
   662 				iEapPlugin->process_data(aData, aLength);
       
   663 			}
       
   664 			else
       
   665 			{
       
   666 				EAP_TRACE_DEBUG(
       
   667 					iTools,
       
   668 					TRACE_FLAGS_DEFAULT,
       
   669 					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapPluginProcessData, iEapPlugin is NULL\n")));
       
   670 			}
       
   671 
       
   672 			break;
       
   673 
       
   674 		case EEapSettingsProcessData:
       
   675 
       
   676 			EAP_TRACE_DEBUG(
       
   677 				iTools,
       
   678 				TRACE_FLAGS_DEFAULT,
       
   679 				(EAPL("CEapServerProcessHandler::RunL() EEapSettingsProcessData\n")));
       
   680 
       
   681 			if (iEapSettings !=0)
       
   682 			{
       
   683 				void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
       
   684 				TInt aLength = message->GetData()->Size();
       
   685 				iEapSettings->process_data(aData, aLength);
       
   686 			}
       
   687 			else
       
   688 			{
       
   689 				EAP_TRACE_DEBUG(
       
   690 					iTools,
       
   691 					TRACE_FLAGS_DEFAULT,
       
   692 					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEapSettingsProcessData, iEapSettings is NULL\n")));
       
   693 			}
       
   694 
       
   695 			break;
       
   696 
       
   697 #if defined (USE_WAPI_CORE)
       
   698 		case EWapiCoreProcessData:
       
   699 
       
   700             EAP_TRACE_DEBUG(
       
   701                 iTools,
       
   702                 TRACE_FLAGS_DEFAULT,
       
   703                 (EAPL("CEapServerProcessHandler::RunL() EWapiCoreProcessData\n")));
       
   704 
       
   705             if (iWapiCore !=0)
       
   706             {
       
   707                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
       
   708                 TInt aLength = message->GetData()->Size();
       
   709                 iWapiCore->process_data(aData, aLength);
       
   710             }
       
   711             else
       
   712             {
       
   713                 EAP_TRACE_DEBUG(
       
   714                     iTools,
       
   715                     TRACE_FLAGS_DEFAULT,
       
   716                     (EAPL("ERROR: CEapServerProcessHandler::RunL(): EWapiCoreProcessData, iWapiCore is NULL\n")));
       
   717             }
       
   718             break;
       
   719 
       
   720 		case EWapiSettingsProcessData:
       
   721 
       
   722             EAP_TRACE_DEBUG(
       
   723                 iTools,
       
   724                 TRACE_FLAGS_DEFAULT,
       
   725                 (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsProcessData\n")));
       
   726 
       
   727             if (iWapiSettings !=0)
       
   728             {
       
   729                 void* aData = reinterpret_cast<void *>(const_cast<TUint8 *>(message->GetData()->Ptr()));
       
   730                 TInt aLength = message->GetData()->Size();
       
   731                 iWapiSettings->process_data(aData, aLength);
       
   732             }
       
   733             else
       
   734             {
       
   735                 EAP_TRACE_DEBUG(
       
   736                     iTools,
       
   737                     TRACE_FLAGS_DEFAULT,
       
   738                     (EAPL("ERROR: CEapServerProcessHandler::RunL(): EWapiSettingsProcessData, iWapiSettings is NULL\n")));
       
   739             }
       
   740 
       
   741             break;
       
   742 #endif
       
   743 
       
   744 		case EEapCoreSendData:
       
   745 		case EEapPluginSendData:
       
   746 		case EEapSettingsSendData:
       
   747         case EEapPacStoreSendData:
       
   748 #if defined (USE_WAPI_CORE)
       
   749         case EWapiCoreSendData:
       
   750         case EWapiSettingsSendData:
       
   751 #endif
       
   752 			if (message->GetRequestType() == EEapCoreSendData)
       
   753 			{
       
   754 				EAP_TRACE_DEBUG(
       
   755 					iTools,
       
   756 					TRACE_FLAGS_DEFAULT,
       
   757 					(EAPL("CEapServerProcessHandler::RunL() EEapCoreSendData\n")));
       
   758 			}
       
   759 			else if (message->GetRequestType() == EEapPluginSendData)
       
   760 			{
       
   761 				EAP_TRACE_DEBUG(
       
   762 					iTools,
       
   763 					TRACE_FLAGS_DEFAULT,
       
   764 					(EAPL("CEapServerProcessHandler::RunL() EEapPluginSendData\n")));
       
   765 			}
       
   766 			else if (message->GetRequestType() == EEapSettingsSendData)
       
   767 			{
       
   768 				EAP_TRACE_DEBUG(
       
   769 					iTools,
       
   770 					TRACE_FLAGS_DEFAULT,
       
   771 					(EAPL("CEapServerProcessHandler::RunL() EEapSettingsSendData\n")));
       
   772 			}
       
   773             else if (message->GetRequestType() == EEapPacStoreSendData)
       
   774             {
       
   775                 EAP_TRACE_DEBUG(
       
   776                     iTools,
       
   777                     TRACE_FLAGS_DEFAULT,
       
   778                     (EAPL("CEapServerProcessHandler::RunL() EEapPacStoreSendData\n")));
       
   779             }
       
   780 #if defined (USE_WAPI_CORE)
       
   781             else if (message->GetRequestType() == EWapiCoreSendData)
       
   782             {
       
   783                 EAP_TRACE_DEBUG(
       
   784                     iTools,
       
   785                     TRACE_FLAGS_DEFAULT,
       
   786                     (EAPL("CEapServerProcessHandler::RunL() EWapiCoreSendData\n")));
       
   787             }
       
   788             else if (message->GetRequestType() == EWapiSettingsSendData)
       
   789             {
       
   790                 EAP_TRACE_DEBUG(
       
   791                     iTools,
       
   792                     TRACE_FLAGS_DEFAULT,
       
   793                     (EAPL("CEapServerProcessHandler::RunL() EWapiSettingsSendData\n")));
       
   794             }
       
   795 #endif
       
   796 			EAP_TRACE_DEBUG(
       
   797 				iTools,
       
   798 				TRACE_FLAGS_DEFAULT,
       
   799 				(EAPL("CEapServerProcessHandler::RunL(): iClient=0x%08x\n"),
       
   800 				iClient));
       
   801 
       
   802 			if (iClient != 0)
       
   803 			{
       
   804 				status = iClient->SendData(message);
       
   805 				if (status != eap_status_ok)
       
   806 				{
       
   807 					EAP_TRACE_DEBUG(
       
   808 						iTools,
       
   809 						TRACE_FLAGS_DEFAULT,
       
   810 						(EAPL("ERROR: CEapServerProcessHandler::RunL(): SendData() failed, iClient=0x%08x, status=%d=%s\n"),
       
   811 						iClient,
       
   812 						status,
       
   813 						eap_status_string_c::get_status_string(status)));
       
   814 
       
   815 					// We do not return here. Even the iClient->SendData() fails we run this function to the end.
       
   816 				}
       
   817 			}
       
   818 			else
       
   819 			{
       
   820 				EAP_TRACE_DEBUG(
       
   821 					iTools,
       
   822 					TRACE_FLAGS_DEFAULT,
       
   823 					(EAPL("ERROR: CEapServerProcessHandler::RunL(): EEap*SendData, iClient is NULL\n")));
       
   824 			}
       
   825 
       
   826 			break;
       
   827 
       
   828 		default:
       
   829 
       
   830 			EAP_TRACE_DEBUG(
       
   831 				iTools,
       
   832 				TRACE_FLAGS_DEFAULT,
       
   833 				(EAPL("ERROR: CEapServerProcessHandler::RunL(): unknown message->GetRequestType()=%d=%s\n"),
       
   834 				message->GetRequestType(),
       
   835 				EapServerStrings::GetEapRequestsString(message->GetRequestType())));
       
   836 			break;
       
   837 
       
   838 		} // switch()
       
   839 
       
   840 		if (status == eap_status_ok)
       
   841 		{
       
   842 			// First one handled, remove message.
       
   843 			// iClient->SendData() call may fail, then we do not remove the message.
       
   844 			iEapMessageQueue->DeleteFirstMessage();
       
   845 		}
       
   846 
       
   847 	} // if ()
       
   848 
       
   849 	if (iEapMessageQueue->GetFirstMessage() != 0)
       
   850 	{
       
   851 		EAP_TRACE_DEBUG(
       
   852 			iTools,
       
   853 			TRACE_FLAGS_DEFAULT,
       
   854 			(EAPL("CEapServerProcessHandler::RunL(): Still messages waiting.\n")));
       
   855 
       
   856 		if (iClient != NULL)
       
   857 		{
       
   858 			if (iClient->GetReceiveActive())
       
   859 			{
       
   860 				Activate();
       
   861 			}
       
   862 			else
       
   863 			{
       
   864 				EAP_TRACE_DEBUG(
       
   865 					iTools,
       
   866 					TRACE_FLAGS_DEFAULT,
       
   867 					(EAPL("WARNING: CEapServerProcessHandler::RunL(): cannot call User::RequestComplete() because no receive is active.\n")));
       
   868 			}
       
   869 		}
       
   870 	}
       
   871 	else
       
   872 	{
       
   873 		EAP_TRACE_DEBUG(
       
   874 			iTools,
       
   875 			TRACE_FLAGS_DEFAULT,
       
   876 			(EAPL("CEapServerProcessHandler::RunL(): No more messages to process.\n")));
       
   877 	}
       
   878 
       
   879 	EAP_TRACE_DEBUG(
       
   880 		iTools,
       
   881 		TRACE_FLAGS_DEFAULT,
       
   882 		(EAPL("=end======================================================================\n")));
       
   883 }
       
   884 
       
   885 //----------------------------------------------------------------------------
       
   886 
       
   887 void CEapServerProcessHandler::DoCancel()
       
   888 {
       
   889 	EAP_TRACE_DEBUG(
       
   890 		iTools,
       
   891 		TRACE_FLAGS_DEFAULT,
       
   892 		(EAPL("CEapServerProcessHandler::DoCancel(): this=0x%08x\n"),
       
   893 		this));
       
   894 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::DoCancel()");
       
   895 
       
   896 }
       
   897 
       
   898 //----------------------------------------------------------------------------
       
   899 
       
   900 TInt CEapServerProcessHandler::RunError(TInt aError)
       
   901 {
       
   902 	EAP_TRACE_DEBUG(
       
   903 		iTools,
       
   904 		TRACE_FLAGS_DEFAULT,
       
   905 		(EAPL("CEapServerProcessHandler::RunError(): aError=%d, this=0x%08x\n"),
       
   906 		aError,
       
   907 		this));
       
   908 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapServerProcessHandler::RunError()");
       
   909 
       
   910 	Cancel();
       
   911 
       
   912 	return aError;
       
   913 }
       
   914 
       
   915 //----------------------------------------------------------------------------
       
   916 // end