eapol/eapol_framework/eapol_symbian/eap_if/src/REapSession.cpp
branchRCL_3
changeset 46 c74b3d9f6b9e
parent 45 bad0cc58d154
child 55 9c2aa05919d9
equal deleted inserted replaced
45:bad0cc58d154 46:c74b3d9f6b9e
     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: 34 %
       
    20 */
       
    21 
       
    22 #include "REapSession.h"
       
    23 #include <e32base.h>
       
    24 #include "EapTraceSymbian.h"
       
    25 #include "EapCoreInterfaceImplementation.h"
       
    26 #include "EapServerStrings.h"
       
    27 #include "eap_automatic_variable.h"
       
    28 
       
    29 //----------------------------------------------------------------
       
    30 
       
    31 void Panic(TInt aPanic)
       
    32     {
       
    33     _LIT(KPanicCategory,"Eapol Client");
       
    34     User::Panic(KPanicCategory, aPanic);
       
    35     }
       
    36 
       
    37 //----------------------------------------------------------------
       
    38 
       
    39 TVersion REapSession::Version() const
       
    40     {
       
    41     return( TVersion(
       
    42             KEapMajorVersionNumber,
       
    43             KEapMinorVersionNumber,
       
    44             KEapBuildVersionNumber ) );
       
    45     }
       
    46 
       
    47 //----------------------------------------------------------------
       
    48 
       
    49 EAP_FUNC_EXPORT REapSession::~REapSession()
       
    50 {
       
    51 	EAP_TRACE_DEBUG(
       
    52 		iTools,
       
    53 		TRACE_FLAGS_DEFAULT,
       
    54 		(EAPL("REapSession::~REapSession()\n")));
       
    55 
       
    56 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::~REapSession()");
       
    57 
       
    58 	delete iEapMessageQueue;
       
    59 	iEapMessageQueue = 0;
       
    60 }
       
    61 
       
    62 //----------------------------------------------------------------
       
    63 
       
    64 EAP_FUNC_EXPORT void REapSession::ConnectL(
       
    65 	abs_eap_am_tools_c * const tools,
       
    66 	MSendPacketHandler * Client,
       
    67 	TBuf<KMaxServerExe> ServerName,
       
    68 	TBuf<KMaxServerExe> ServerExe,
       
    69 	const void * const aConfigurationData,
       
    70 	const TInt aConfigurationDataLength,
       
    71 	const TEapRequests aIfRequest)
       
    72 {
       
    73 	EAP_TRACE_DEBUG(
       
    74 		tools,
       
    75 		TRACE_FLAGS_DEFAULT,
       
    76 		(EAPL("REapSession::ConnectL()\n")));
       
    77 
       
    78 	EAP_TRACE_RETURN_STRING(tools, "returns: REapSession::ConnectL()");
       
    79 
       
    80 	iClient = Client;
       
    81 	iTools = tools;
       
    82 	iEapMessageQueue = new(ELeave) EapMessageQueue(iTools);
       
    83 
       
    84 	EAP_TRACE_DEBUG(
       
    85 		iTools,
       
    86 		TRACE_FLAGS_DEFAULT,
       
    87 		(EAPL("REapSession::ConnectL(): iEapMessageQueue=0x%08x\n"),
       
    88 		iEapMessageQueue));
       
    89 
       
    90 
       
    91 	// connect to iServer
       
    92 	TInt error=KErrNone;
       
    93 
       
    94 
       
    95 	TFindServer findServer(ServerName);
       
    96 	TFullName name;
       
    97 
       
    98 	error = findServer.Next( name );
       
    99 
       
   100 	if ( error == KErrNone )
       
   101 	{
       
   102 		// Server already running
       
   103 	}
       
   104 	else
       
   105 	{
       
   106 		error = iServer.Create(ServerExe,KNullDesC);
       
   107 
       
   108 		if (error != KErrNone)
       
   109 		{
       
   110 			EAP_TRACE_DEBUG(
       
   111 				iTools,
       
   112 				TRACE_FLAGS_DEFAULT,
       
   113 				(EAPL("REapSession::ConnectL(): create iServer error=%d\n"),
       
   114 				error));
       
   115 			User::Leave(error);
       
   116 		}
       
   117 
       
   118 		EAP_TRACE_DEBUG(
       
   119 			iTools,
       
   120 			TRACE_FLAGS_DEFAULT,
       
   121 			(EAPL("REapSession::ConnectL(): iServer successfully created\n")));
       
   122 
       
   123 		EAP_TRACE_DEBUG(
       
   124 			iTools,
       
   125 			TRACE_FLAGS_DEFAULT,
       
   126 			(EAPL("REapSession::ConnectL(): iServer.SetPriority(EPriorityHigh)\n")));
       
   127 
       
   128 		iServer.SetPriority(EPriorityHigh);
       
   129 
       
   130 		TRequestStatus stat;
       
   131 
       
   132 		EAP_TRACE_DEBUG(
       
   133 			iTools,
       
   134 			TRACE_FLAGS_DEFAULT,
       
   135 			(EAPL("REapSession::ConnectL(): iServer.Rendezvous\n")));
       
   136 
       
   137 		iServer.Rendezvous( stat );
       
   138 
       
   139 		EAP_TRACE_DEBUG(
       
   140 			iTools,
       
   141 			TRACE_FLAGS_DEFAULT,
       
   142 			(EAPL("REapSession::ConnectL(): iServer.Rendezvous stat = %d\n"),
       
   143 			stat.Int()));
       
   144 
       
   145 		if ( stat!=KRequestPending )
       
   146 		{
       
   147 			iServer.Kill(0);     // abort startup
       
   148 
       
   149 			EAP_TRACE_DEBUG(
       
   150 				iTools,
       
   151 				TRACE_FLAGS_DEFAULT,
       
   152 				(EAPL("ERROR: REapSession::ConnectL(): iServer killed\n")));
       
   153 		}
       
   154 		else
       
   155 		{
       
   156 			iServer.Resume();    // logon OK - start the iServer
       
   157 
       
   158 			EAP_TRACE_DEBUG(
       
   159 				iTools,
       
   160 				TRACE_FLAGS_DEFAULT,
       
   161 				(EAPL("REapSession::ConnectL(): iServer started OK\n")));
       
   162 		}
       
   163 
       
   164 
       
   165 		EAP_TRACE_DEBUG(
       
   166 			iTools,
       
   167 			TRACE_FLAGS_DEFAULT,
       
   168 			(EAPL("REapSession::ConnectL(): WaitForRequest\n")));
       
   169 
       
   170 		User::WaitForRequest(stat);
       
   171 
       
   172 		EAP_TRACE_DEBUG(
       
   173 			iTools,
       
   174 			TRACE_FLAGS_DEFAULT,
       
   175 			(EAPL("REapSession::ConnectL(): WaitForRequest got, stat.Int()=%d\n"),
       
   176 			stat.Int()));
       
   177 
       
   178 		error = ( iServer.ExitType()==EExitPanic ) ? KErrGeneral : stat.Int();
       
   179 		iServer.Close();
       
   180 
       
   181 		EAP_TRACE_DEBUG(
       
   182 			iTools,
       
   183 			TRACE_FLAGS_DEFAULT,
       
   184 			(EAPL("REapSession::ConnectL(): Server closed, error=%d\n"),
       
   185 			error));
       
   186 	}
       
   187 
       
   188 
       
   189 	// create active object receive handler and add it to scheduler
       
   190 	CleanupClosePushL(*this);  // Close if next operations leave
       
   191 
       
   192 	User::LeaveIfError(error);
       
   193 
       
   194 	iSendHandler = new (ELeave) CSendHandler(iTools, *this); //*aHandler,
       
   195 	CActiveScheduler::Add(iSendHandler);
       
   196 
       
   197 	iProcessHandler = new (ELeave) CEapClientProcessHandler(iTools, *this); //*aHandler,
       
   198 	CleanupStack::Pop(this);
       
   199 	CActiveScheduler::Add(iProcessHandler);
       
   200 
       
   201 	EAP_TRACE_DEBUG(
       
   202 		iTools,
       
   203 		TRACE_FLAGS_DEFAULT,
       
   204 		(EAPL("REapSession::ConnectL(): calls CreateSession()\n")));
       
   205 
       
   206 	error = CreateSession(ServerName,Version(), KMaxEapMessageSlots);
       
   207 
       
   208 	EAP_TRACE_DEBUG(
       
   209 		iTools,
       
   210 		TRACE_FLAGS_DEFAULT,
       
   211 		(EAPL("REapSession::ConnectL(): CreateSession(), error=%d\n"),
       
   212 		error));
       
   213 
       
   214 	if (error != KErrNone)
       
   215 	{
       
   216 		User::Leave(error);
       
   217 	}
       
   218 
       
   219 	EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::ConnectL(): calls process_data(%d)"),
       
   220 		aIfRequest));
       
   221 
       
   222 	eap_status_e status = process_data(aIfRequest, aConfigurationData, aConfigurationDataLength);
       
   223 
       
   224 	EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::ConnectL(): process_data(%d) returns status=%d, iStatus.Int()=%d"),
       
   225 		aIfRequest,
       
   226 		status,
       
   227 		iStatus.Int()));
       
   228 
       
   229 	EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::ConnectL(): calls iSendHandler->Receive()")));
       
   230 
       
   231 	iSendHandler->Receive();
       
   232 }
       
   233 
       
   234 //----------------------------------------------------------------
       
   235 
       
   236 EAP_FUNC_EXPORT void REapSession::Close()
       
   237 	{
       
   238 	EAP_TRACE_DEBUG(
       
   239 		iTools,
       
   240 		TRACE_FLAGS_DEFAULT,
       
   241 		(EAPL("REapSession::Close()\n")));
       
   242 
       
   243 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::Close()");
       
   244 
       
   245 	// destroy receiver-handler
       
   246 	delete iSendHandler;
       
   247 	iSendHandler = 0;
       
   248 
       
   249 	delete iProcessHandler;
       
   250 	iProcessHandler = 0;
       
   251 
       
   252 	// destroy iServer session
       
   253 	iServer.Close();
       
   254 	RSessionBase::Close();
       
   255 	}
       
   256 
       
   257 //----------------------------------------------------------------
       
   258 
       
   259 /**
       
   260  * From eap_am_message_if_c 
       
   261  * Initialize interface to EAPOL or WAPI.
       
   262  * @since S60 v9.2
       
   263  */
       
   264 
       
   265 EAP_FUNC_EXPORT bool REapSession::get_is_valid()
       
   266     {
       
   267     EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::get_is_valid")));           
       
   268 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::get_is_valid()");
       
   269 
       
   270     return ETrue;    
       
   271     }
       
   272 
       
   273 //----------------------------------------------------------------
       
   274 
       
   275 /// Function receives the data message from lower layer.
       
   276 /// Data is formatted to Attribute-Value Pairs.
       
   277 /// Look at eap_tlv_header_c and eap_tlv_message_data_c.
       
   278 EAP_FUNC_EXPORT eap_status_e REapSession::process_data(const TEapRequests aMessageType, const void * const data, const u32_t length)
       
   279     {
       
   280 	EAP_TRACE_DATA_DEBUG(
       
   281 		iTools,
       
   282 		TRACE_FLAGS_DEFAULT,
       
   283 		(EAPL("REapSession::process_data()"),
       
   284 		data,
       
   285 		length));
       
   286 
       
   287 	EAP_TRACE_DEBUG(
       
   288 		iTools,
       
   289 		TRACE_FLAGS_DEFAULT,
       
   290 		(EAPL("REapSession::process_data(): calls iEapMessageQueue->AddMessage(): iEapMessageQueue=0x%08x\n"),
       
   291 		iEapMessageQueue));
       
   292 
       
   293 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::process_data()");
       
   294 
       
   295 	TInt error = iEapMessageQueue->AddMessage(aMessageType, data, length);
       
   296 
       
   297 	if (error != KErrNone)
       
   298 	{
       
   299 		EAP_TRACE_DEBUG(
       
   300 			iTools,
       
   301 			TRACE_FLAGS_DEFAULT,
       
   302 			(EAPL("ERROR: REapSession::process_data(): failed = %d\n"),
       
   303 			error));
       
   304 		return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(error));
       
   305 	}
       
   306 
       
   307 	EAP_TRACE_DEBUG(
       
   308 		iTools,
       
   309 		TRACE_FLAGS_DEFAULT,
       
   310 		(EAPL("REapSession::process_data(): calls iProcessHandler->Activate(): iProcessHandler=0x%08x\n"),
       
   311 		iProcessHandler));
       
   312 
       
   313 	iProcessHandler->Activate();
       
   314 
       
   315     return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(error));
       
   316     }
       
   317 
       
   318 //----------------------------------------------------------------
       
   319 
       
   320 void REapSession::Receive(TDes8& aBuffer, TRequestStatus& aStatus)
       
   321     {
       
   322 	EAP_TRACE_DEBUG(
       
   323 		iTools,
       
   324 		TRACE_FLAGS_DEFAULT,
       
   325 		(EAPL("REapSession::Receive()\n")));
       
   326 
       
   327 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::Receive()");
       
   328 
       
   329     TIpcArgs args( &aBuffer );
       
   330 
       
   331     SendReceive( EEapIfReqReceive, args, aStatus );
       
   332     }
       
   333 
       
   334 //----------------------------------------------------------------
       
   335 
       
   336 void REapSession::CancelReceive()
       
   337     {
       
   338 	EAP_TRACE_DEBUG(
       
   339 		iTools,
       
   340 		TRACE_FLAGS_DEFAULT,
       
   341 		(EAPL("REapSession::CancelReceive()\n")));
       
   342 
       
   343 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::CancelReceive()");
       
   344 
       
   345     SendReceive(EEapIfCancelReceive, iStatus);
       
   346     }
       
   347 
       
   348 //----------------------------------------------------------------
       
   349 
       
   350 const EapMessageBuffer * REapSession::GetFirstMessage()
       
   351 {
       
   352 	EAP_TRACE_DEBUG(
       
   353 		iTools,
       
   354 		TRACE_FLAGS_DEFAULT,
       
   355 		(EAPL("REapSession::GetFirstMessage()\n")));
       
   356 
       
   357 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::GetFirstMessage()");
       
   358 
       
   359 	return iEapMessageQueue->GetFirstMessage();
       
   360 }
       
   361 
       
   362 //----------------------------------------------------------------
       
   363 
       
   364 TInt REapSession::DeleteFirstMessage()
       
   365 {
       
   366 	EAP_TRACE_DEBUG(
       
   367 		iTools,
       
   368 		TRACE_FLAGS_DEFAULT,
       
   369 		(EAPL("REapSession::DeleteFirstMessage()\n")));
       
   370 
       
   371 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::DeleteFirstMessage()");
       
   372 
       
   373 	return iEapMessageQueue->DeleteFirstMessage();
       
   374 }
       
   375 
       
   376 //----------------------------------------------------------------
       
   377 
       
   378 void REapSession::Process(const EapMessageBuffer * const buffer, TRequestStatus &aStatus) const
       
   379 {
       
   380 	EAP_TRACE_DEBUG(
       
   381 		iTools,
       
   382 		TRACE_FLAGS_DEFAULT,
       
   383 		(EAPL("REapSession::Process(): calls SendReceive(), aRequestType=%d=%s\n"),
       
   384 		buffer->GetRequestType(),
       
   385 		EapServerStrings::GetEapRequestsString(buffer->GetRequestType())));
       
   386 
       
   387 	EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::Process()");
       
   388 
       
   389 	TIpcArgs args( buffer->GetData() );
       
   390 
       
   391 	SendReceive(buffer->GetRequestType(), args, aStatus);
       
   392 
       
   393 	EAP_TRACE_DEBUG(
       
   394 		iTools,
       
   395 		TRACE_FLAGS_DEFAULT,
       
   396 		(EAPL("REapSession::Process(): end iStatus=%d\n"),
       
   397 		iStatus.Int()));
       
   398 }
       
   399 
       
   400 //----------------------------------------------------------------
       
   401 //----------------------------------------------------------------
       
   402 //----------------------------------------------------------------
       
   403 
       
   404 /*
       
   405     CSendHandler
       
   406 */
       
   407 
       
   408 // construct/destruct
       
   409 
       
   410 CSendHandler::CSendHandler(
       
   411 	abs_eap_am_tools_c * const tools,
       
   412 	REapSession& aSession)
       
   413     : CActive(0)
       
   414 	, iTools(tools)
       
   415 	, iSession(aSession)
       
   416     {
       
   417 	EAP_TRACE_DEBUG(
       
   418 		iTools,
       
   419 		TRACE_FLAGS_DEFAULT,
       
   420 		(EAPL("CSendHandler::CSendHandler()\n")));
       
   421 	EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::CSendHandler()");
       
   422 
       
   423     }
       
   424 
       
   425 //----------------------------------------------------------------
       
   426 
       
   427 CSendHandler::~CSendHandler()
       
   428     {
       
   429 	EAP_TRACE_DEBUG(
       
   430 		iTools,
       
   431 		TRACE_FLAGS_DEFAULT,
       
   432 		(EAPL("CSendHandler::~CSendHandler()\n")));
       
   433 	EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::~CSendHandler()");
       
   434 
       
   435     Cancel();
       
   436     }
       
   437 
       
   438 //----------------------------------------------------------------
       
   439 
       
   440 // operation
       
   441 
       
   442 void CSendHandler::Receive()
       
   443     {
       
   444 	EAP_TRACE_DEBUG(
       
   445 		iTools,
       
   446 		TRACE_FLAGS_DEFAULT,
       
   447 		(EAPL("CSendHandler::Receive()\n")));
       
   448 	EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::Receive()");
       
   449 
       
   450     iSession.Receive(iBuffer, iStatus);
       
   451 
       
   452 	if(!IsActive())
       
   453 		{
       
   454 		EAP_TRACE_DEBUG(
       
   455 			iTools,
       
   456 			TRACE_FLAGS_DEFAULT,
       
   457 			(EAPL("CSendHandler::Receive(): calls SetActive()\n")));
       
   458 
       
   459 	    SetActive();
       
   460 		}
       
   461     }
       
   462 
       
   463 //----------------------------------------------------------------
       
   464 
       
   465 // from CActive
       
   466 
       
   467 void CSendHandler::RunL()
       
   468 {
       
   469 	EAP_TRACE_DEBUG(
       
   470 		iTools,
       
   471 		TRACE_FLAGS_DEFAULT,
       
   472 		(EAPL("CSendHandler::RunL(): iStatus=%d\n"),
       
   473 		iStatus.Int()));
       
   474 	EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::RunL()");
       
   475 
       
   476 	if (iStatus.Int() == KErrNone)
       
   477 	{
       
   478 		EAP_TRACE_DEBUG(
       
   479 			iTools,
       
   480 			TRACE_FLAGS_DEFAULT,
       
   481 			(EAPL("CSendHandler::RunL(): iStatus = KErrNone, calls send_data()\n")));
       
   482 
       
   483 		iSession.iClient->send_data(iBuffer);
       
   484 
       
   485 		// initiate next receive
       
   486 		Receive();
       
   487 	}
       
   488 	else if (iStatus.Int() == KErrCancel)
       
   489 	{
       
   490 		EAP_TRACE_DEBUG(
       
   491 			iTools,
       
   492 			TRACE_FLAGS_DEFAULT,
       
   493 			(EAPL("CSendHandler::RunL(): iStatus = KErrCancel, calls Close()\n")));
       
   494 
       
   495 		iSession.Close();
       
   496 	}
       
   497 	else
       
   498 	{
       
   499 		EAP_TRACE_DEBUG(
       
   500 			iTools,
       
   501 			TRACE_FLAGS_DEFAULT,
       
   502 			(EAPL("CSendHandler::RunL(): does nothing\n")));
       
   503 
       
   504 	}
       
   505 }
       
   506 
       
   507 //----------------------------------------------------------------
       
   508 
       
   509 void CSendHandler::DoCancel()
       
   510     {
       
   511 	EAP_TRACE_DEBUG(
       
   512 		iTools,
       
   513 		TRACE_FLAGS_DEFAULT,
       
   514 		(EAPL("CSendHandler::DoCancel()\n")));
       
   515 	EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::DoCancel()");
       
   516 
       
   517     iSession.CancelReceive();
       
   518     }
       
   519 
       
   520 //----------------------------------------------------------------------------
       
   521 
       
   522 TInt CSendHandler::RunError(TInt aError)
       
   523 {
       
   524 	EAP_TRACE_DEBUG(
       
   525 		iTools,
       
   526 		TRACE_FLAGS_DEFAULT,
       
   527 		(EAPL("CSendHandler::RunError(): aError=%d, this=0x%08x\n"),
       
   528 		aError,
       
   529 		this));
       
   530 	EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::RunError()");
       
   531 
       
   532 	Cancel();
       
   533 
       
   534 	return aError;
       
   535 }
       
   536 
       
   537 //----------------------------------------------------------------
       
   538 //----------------------------------------------------------------
       
   539 //----------------------------------------------------------------
       
   540 
       
   541 void CEapolPacketHandler::EapolHandleL(const TDesC8& /* data */)
       
   542     {
       
   543     EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapolPacketHandler::EapolHandleL(): (do nothing now)")));           
       
   544     }
       
   545 
       
   546 //----------------------------------------------------------------
       
   547 //----------------------------------------------------------------
       
   548 //----------------------------------------------------------------
       
   549 
       
   550 CEapClientProcessHandler::CEapClientProcessHandler(
       
   551 	abs_eap_am_tools_c * const tools,
       
   552 	REapSession& aSession)
       
   553 	: CActive(0)
       
   554 	, iTools(tools)
       
   555 	, iSession(aSession)
       
   556 	, iProcessPending(false)
       
   557 {
       
   558 	EAP_TRACE_DEBUG(
       
   559 		iTools,
       
   560 		TRACE_FLAGS_DEFAULT,
       
   561 		(EAPL("CEapClientProcessHandler::CEapClientProcessHandler()\n")));
       
   562 
       
   563 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::CEapClientProcessHandler()");
       
   564 
       
   565 }
       
   566 
       
   567 //----------------------------------------------------------------
       
   568 
       
   569 CEapClientProcessHandler::~CEapClientProcessHandler()
       
   570 {
       
   571 	EAP_TRACE_DEBUG(
       
   572 		iTools,
       
   573 		TRACE_FLAGS_DEFAULT,
       
   574 		(EAPL("CEapClientProcessHandler::~CEapClientProcessHandler()\n")));
       
   575 
       
   576 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::~CEapClientProcessHandler()");
       
   577 
       
   578 	Cancel();
       
   579 }
       
   580 
       
   581 //----------------------------------------------------------------
       
   582 
       
   583 // from CActive
       
   584 void CEapClientProcessHandler::RunL()
       
   585 {
       
   586 	EAP_TRACE_DEBUG(
       
   587 		iTools,
       
   588 		TRACE_FLAGS_DEFAULT,
       
   589 		(EAPL("=start=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=\n")));
       
   590 
       
   591 	EAP_TRACE_DEBUG(
       
   592 		iTools,
       
   593 		TRACE_FLAGS_DEFAULT,
       
   594 		(EAPL("CEapClientProcessHandler::RunL()\n")));
       
   595 
       
   596 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::RunL()");
       
   597 
       
   598 	TInt error(KErrNone);
       
   599 
       
   600 	if (iProcessPending == true)
       
   601 	{
       
   602 		error = iSession.DeleteFirstMessage();
       
   603 		if (error != KErrNone)
       
   604 		{
       
   605 			EAP_TRACE_DEBUG(
       
   606 				iTools,
       
   607 				TRACE_FLAGS_DEFAULT,
       
   608 				(EAPL("ERROR: CEapClientProcessHandler::RunL(): iSession.DeleteFirstMessage() failed = %d\n"),
       
   609 				error));
       
   610 
       
   611 			User::Leave(error);
       
   612 		}
       
   613 	}
       
   614 
       
   615 	const EapMessageBuffer * buffer = iSession.GetFirstMessage();
       
   616 
       
   617 	if (buffer != 0)
       
   618 	{
       
   619 		EAP_TRACE_DEBUG(
       
   620 			iTools,
       
   621 			TRACE_FLAGS_DEFAULT,
       
   622 			(EAPL("CEapClientProcessHandler::RunL(): calls SendReceive(), buffer->GetRequestType()=%d=%s\n"),
       
   623 			buffer->GetRequestType(),
       
   624 			EapServerStrings::GetEapRequestsString(buffer->GetRequestType())));
       
   625 
       
   626 		TIpcArgs args( buffer->GetData() );
       
   627 
       
   628 		iSession.Process( buffer, iStatus );
       
   629 
       
   630 		SetActive();
       
   631 
       
   632 		iProcessPending = true;
       
   633 	}
       
   634 	else
       
   635 	{
       
   636 		iProcessPending = false;
       
   637 	}
       
   638 
       
   639 	EAP_TRACE_DEBUG(
       
   640 		iTools,
       
   641 		TRACE_FLAGS_DEFAULT,
       
   642 		(EAPL("CEapClientProcessHandler::RunL(): end error=%d, iStatus=%d\n"),
       
   643 		error,
       
   644 		iStatus.Int()));
       
   645 
       
   646 	EAP_TRACE_DEBUG(
       
   647 		iTools,
       
   648 		TRACE_FLAGS_DEFAULT,
       
   649 		(EAPL("=end=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=c=\n")));
       
   650 }
       
   651 
       
   652 //----------------------------------------------------------------
       
   653 
       
   654 void CEapClientProcessHandler::Activate()
       
   655 {
       
   656 	EAP_TRACE_DEBUG(
       
   657 		iTools,
       
   658 		TRACE_FLAGS_DEFAULT,
       
   659 		(EAPL("CEapClientProcessHandler::Activate()\n")));
       
   660 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::Activate()");
       
   661 
       
   662 	if(!IsActive())
       
   663 	{
       
   664 		EAP_TRACE_DEBUG(
       
   665 			iTools,
       
   666 			TRACE_FLAGS_DEFAULT,
       
   667 			(EAPL("CEapClientProcessHandler::Activate(): calls User::RequestComplete()\n")));
       
   668 
       
   669 		TRequestStatus* status = &iStatus;
       
   670 		User::RequestComplete(status, KErrNone);
       
   671 
       
   672 		EAP_TRACE_DEBUG(
       
   673 			iTools,
       
   674 			TRACE_FLAGS_DEFAULT,
       
   675 			(EAPL("CEapClientProcessHandler::Activate(): calls SetActive()\n")));
       
   676 
       
   677 		SetActive();
       
   678 	}
       
   679 	else
       
   680 	{
       
   681 		EAP_TRACE_DEBUG(
       
   682 			iTools,
       
   683 			TRACE_FLAGS_DEFAULT,
       
   684 			(EAPL("CEapClientProcessHandler::Activate(): Already active.\n")));
       
   685 	}
       
   686 }
       
   687 
       
   688 //----------------------------------------------------------------
       
   689 
       
   690 void CEapClientProcessHandler::DoCancel()
       
   691 {
       
   692 	EAP_TRACE_DEBUG(
       
   693 		iTools,
       
   694 		TRACE_FLAGS_DEFAULT,
       
   695 		(EAPL("CEapClientProcessHandler::DoCancel()\n")));
       
   696 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::DoCancel()");
       
   697 }
       
   698 
       
   699 //----------------------------------------------------------------------------
       
   700 
       
   701 TInt CEapClientProcessHandler::RunError(TInt aError)
       
   702 {
       
   703 	EAP_TRACE_DEBUG(
       
   704 		iTools,
       
   705 		TRACE_FLAGS_DEFAULT,
       
   706 		(EAPL("CEapClientProcessHandler::RunError(): aError=%d, this=0x%08x\n"),
       
   707 		aError,
       
   708 		this));
       
   709 	EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::RunError()");
       
   710 
       
   711 	Cancel();
       
   712 
       
   713 	return aError;
       
   714 }
       
   715 
       
   716 //----------------------------------------------------------------
       
   717 //----------------------------------------------------------------
       
   718 //----------------------------------------------------------------
       
   719 
       
   720 /*
       
   721     DLL harness
       
   722 */
       
   723 #ifndef EKA2
       
   724 EAP_FUNC_EXPORT TInt E32Dll(TDllReason)
       
   725     {
       
   726     return KErrNone;
       
   727     }
       
   728 #endif
       
   729 
       
   730 //----------------------------------------------------------------
       
   731 // end
       
   732