diff -r bad0cc58d154 -r c74b3d9f6b9e eapol/eapol_framework/eapol_symbian/eap_if/src/REapSession.cpp --- a/eapol/eapol_framework/eapol_symbian/eap_if/src/REapSession.cpp Tue Aug 31 15:16:37 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,732 +0,0 @@ -/* -* Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: EAP and WLAN authentication protocols. -* -*/ - -/* -* %version: 34 % -*/ - -#include "REapSession.h" -#include -#include "EapTraceSymbian.h" -#include "EapCoreInterfaceImplementation.h" -#include "EapServerStrings.h" -#include "eap_automatic_variable.h" - -//---------------------------------------------------------------- - -void Panic(TInt aPanic) - { - _LIT(KPanicCategory,"Eapol Client"); - User::Panic(KPanicCategory, aPanic); - } - -//---------------------------------------------------------------- - -TVersion REapSession::Version() const - { - return( TVersion( - KEapMajorVersionNumber, - KEapMinorVersionNumber, - KEapBuildVersionNumber ) ); - } - -//---------------------------------------------------------------- - -EAP_FUNC_EXPORT REapSession::~REapSession() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::~REapSession()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::~REapSession()"); - - delete iEapMessageQueue; - iEapMessageQueue = 0; -} - -//---------------------------------------------------------------- - -EAP_FUNC_EXPORT void REapSession::ConnectL( - abs_eap_am_tools_c * const tools, - MSendPacketHandler * Client, - TBuf ServerName, - TBuf ServerExe, - const void * const aConfigurationData, - const TInt aConfigurationDataLength, - const TEapRequests aIfRequest) -{ - EAP_TRACE_DEBUG( - tools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL()\n"))); - - EAP_TRACE_RETURN_STRING(tools, "returns: REapSession::ConnectL()"); - - iClient = Client; - iTools = tools; - iEapMessageQueue = new(ELeave) EapMessageQueue(iTools); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): iEapMessageQueue=0x%08x\n"), - iEapMessageQueue)); - - - // connect to iServer - TInt error=KErrNone; - - - TFindServer findServer(ServerName); - TFullName name; - - error = findServer.Next( name ); - - if ( error == KErrNone ) - { - // Server already running - } - else - { - error = iServer.Create(ServerExe,KNullDesC); - - if (error != KErrNone) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): create iServer error=%d\n"), - error)); - User::Leave(error); - } - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): iServer successfully created\n"))); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): iServer.SetPriority(EPriorityHigh)\n"))); - - iServer.SetPriority(EPriorityHigh); - - TRequestStatus stat; - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): iServer.Rendezvous\n"))); - - iServer.Rendezvous( stat ); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): iServer.Rendezvous stat = %d\n"), - stat.Int())); - - if ( stat!=KRequestPending ) - { - iServer.Kill(0); // abort startup - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("ERROR: REapSession::ConnectL(): iServer killed\n"))); - } - else - { - iServer.Resume(); // logon OK - start the iServer - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): iServer started OK\n"))); - } - - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): WaitForRequest\n"))); - - User::WaitForRequest(stat); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): WaitForRequest got, stat.Int()=%d\n"), - stat.Int())); - - error = ( iServer.ExitType()==EExitPanic ) ? KErrGeneral : stat.Int(); - iServer.Close(); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): Server closed, error=%d\n"), - error)); - } - - - // create active object receive handler and add it to scheduler - CleanupClosePushL(*this); // Close if next operations leave - - User::LeaveIfError(error); - - iSendHandler = new (ELeave) CSendHandler(iTools, *this); //*aHandler, - CActiveScheduler::Add(iSendHandler); - - iProcessHandler = new (ELeave) CEapClientProcessHandler(iTools, *this); //*aHandler, - CleanupStack::Pop(this); - CActiveScheduler::Add(iProcessHandler); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): calls CreateSession()\n"))); - - error = CreateSession(ServerName,Version(), KMaxEapMessageSlots); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::ConnectL(): CreateSession(), error=%d\n"), - error)); - - if (error != KErrNone) - { - User::Leave(error); - } - - EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::ConnectL(): calls process_data(%d)"), - aIfRequest)); - - eap_status_e status = process_data(aIfRequest, aConfigurationData, aConfigurationDataLength); - - EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::ConnectL(): process_data(%d) returns status=%d, iStatus.Int()=%d"), - aIfRequest, - status, - iStatus.Int())); - - EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::ConnectL(): calls iSendHandler->Receive()"))); - - iSendHandler->Receive(); -} - -//---------------------------------------------------------------- - -EAP_FUNC_EXPORT void REapSession::Close() - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::Close()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::Close()"); - - // destroy receiver-handler - delete iSendHandler; - iSendHandler = 0; - - delete iProcessHandler; - iProcessHandler = 0; - - // destroy iServer session - iServer.Close(); - RSessionBase::Close(); - } - -//---------------------------------------------------------------- - -/** - * From eap_am_message_if_c - * Initialize interface to EAPOL or WAPI. - * @since S60 v9.2 - */ - -EAP_FUNC_EXPORT bool REapSession::get_is_valid() - { - EAP_TRACE_DEBUG_SYMBIAN((_L("REapSession::get_is_valid"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::get_is_valid()"); - - return ETrue; - } - -//---------------------------------------------------------------- - -/// Function receives the data message from lower layer. -/// Data is formatted to Attribute-Value Pairs. -/// Look at eap_tlv_header_c and eap_tlv_message_data_c. -EAP_FUNC_EXPORT eap_status_e REapSession::process_data(const TEapRequests aMessageType, const void * const data, const u32_t length) - { - EAP_TRACE_DATA_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::process_data()"), - data, - length)); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::process_data(): calls iEapMessageQueue->AddMessage(): iEapMessageQueue=0x%08x\n"), - iEapMessageQueue)); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::process_data()"); - - TInt error = iEapMessageQueue->AddMessage(aMessageType, data, length); - - if (error != KErrNone) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("ERROR: REapSession::process_data(): failed = %d\n"), - error)); - return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(error)); - } - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::process_data(): calls iProcessHandler->Activate(): iProcessHandler=0x%08x\n"), - iProcessHandler)); - - iProcessHandler->Activate(); - - return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(error)); - } - -//---------------------------------------------------------------- - -void REapSession::Receive(TDes8& aBuffer, TRequestStatus& aStatus) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::Receive()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::Receive()"); - - TIpcArgs args( &aBuffer ); - - SendReceive( EEapIfReqReceive, args, aStatus ); - } - -//---------------------------------------------------------------- - -void REapSession::CancelReceive() - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::CancelReceive()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::CancelReceive()"); - - SendReceive(EEapIfCancelReceive, iStatus); - } - -//---------------------------------------------------------------- - -const EapMessageBuffer * REapSession::GetFirstMessage() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::GetFirstMessage()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::GetFirstMessage()"); - - return iEapMessageQueue->GetFirstMessage(); -} - -//---------------------------------------------------------------- - -TInt REapSession::DeleteFirstMessage() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::DeleteFirstMessage()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::DeleteFirstMessage()"); - - return iEapMessageQueue->DeleteFirstMessage(); -} - -//---------------------------------------------------------------- - -void REapSession::Process(const EapMessageBuffer * const buffer, TRequestStatus &aStatus) const -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::Process(): calls SendReceive(), aRequestType=%d=%s\n"), - buffer->GetRequestType(), - EapServerStrings::GetEapRequestsString(buffer->GetRequestType()))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: REapSession::Process()"); - - TIpcArgs args( buffer->GetData() ); - - SendReceive(buffer->GetRequestType(), args, aStatus); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("REapSession::Process(): end iStatus=%d\n"), - iStatus.Int())); -} - -//---------------------------------------------------------------- -//---------------------------------------------------------------- -//---------------------------------------------------------------- - -/* - CSendHandler -*/ - -// construct/destruct - -CSendHandler::CSendHandler( - abs_eap_am_tools_c * const tools, - REapSession& aSession) - : CActive(0) - , iTools(tools) - , iSession(aSession) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::CSendHandler()\n"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::CSendHandler()"); - - } - -//---------------------------------------------------------------- - -CSendHandler::~CSendHandler() - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::~CSendHandler()\n"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::~CSendHandler()"); - - Cancel(); - } - -//---------------------------------------------------------------- - -// operation - -void CSendHandler::Receive() - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::Receive()\n"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::Receive()"); - - iSession.Receive(iBuffer, iStatus); - - if(!IsActive()) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::Receive(): calls SetActive()\n"))); - - SetActive(); - } - } - -//---------------------------------------------------------------- - -// from CActive - -void CSendHandler::RunL() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::RunL(): iStatus=%d\n"), - iStatus.Int())); - EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::RunL()"); - - if (iStatus.Int() == KErrNone) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::RunL(): iStatus = KErrNone, calls send_data()\n"))); - - iSession.iClient->send_data(iBuffer); - - // initiate next receive - Receive(); - } - else if (iStatus.Int() == KErrCancel) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::RunL(): iStatus = KErrCancel, calls Close()\n"))); - - iSession.Close(); - } - else - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::RunL(): does nothing\n"))); - - } -} - -//---------------------------------------------------------------- - -void CSendHandler::DoCancel() - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::DoCancel()\n"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::DoCancel()"); - - iSession.CancelReceive(); - } - -//---------------------------------------------------------------------------- - -TInt CSendHandler::RunError(TInt aError) -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CSendHandler::RunError(): aError=%d, this=0x%08x\n"), - aError, - this)); - EAP_TRACE_RETURN_STRING(iTools, "returns: CSendHandler::RunError()"); - - Cancel(); - - return aError; -} - -//---------------------------------------------------------------- -//---------------------------------------------------------------- -//---------------------------------------------------------------- - -void CEapolPacketHandler::EapolHandleL(const TDesC8& /* data */) - { - EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapolPacketHandler::EapolHandleL(): (do nothing now)"))); - } - -//---------------------------------------------------------------- -//---------------------------------------------------------------- -//---------------------------------------------------------------- - -CEapClientProcessHandler::CEapClientProcessHandler( - abs_eap_am_tools_c * const tools, - REapSession& aSession) - : CActive(0) - , iTools(tools) - , iSession(aSession) - , iProcessPending(false) -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::CEapClientProcessHandler()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::CEapClientProcessHandler()"); - -} - -//---------------------------------------------------------------- - -CEapClientProcessHandler::~CEapClientProcessHandler() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::~CEapClientProcessHandler()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::~CEapClientProcessHandler()"); - - Cancel(); -} - -//---------------------------------------------------------------- - -// from CActive -void CEapClientProcessHandler::RunL() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (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"))); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::RunL()\n"))); - - EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::RunL()"); - - TInt error(KErrNone); - - if (iProcessPending == true) - { - error = iSession.DeleteFirstMessage(); - if (error != KErrNone) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("ERROR: CEapClientProcessHandler::RunL(): iSession.DeleteFirstMessage() failed = %d\n"), - error)); - - User::Leave(error); - } - } - - const EapMessageBuffer * buffer = iSession.GetFirstMessage(); - - if (buffer != 0) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::RunL(): calls SendReceive(), buffer->GetRequestType()=%d=%s\n"), - buffer->GetRequestType(), - EapServerStrings::GetEapRequestsString(buffer->GetRequestType()))); - - TIpcArgs args( buffer->GetData() ); - - iSession.Process( buffer, iStatus ); - - SetActive(); - - iProcessPending = true; - } - else - { - iProcessPending = false; - } - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::RunL(): end error=%d, iStatus=%d\n"), - error, - iStatus.Int())); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (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"))); -} - -//---------------------------------------------------------------- - -void CEapClientProcessHandler::Activate() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::Activate()\n"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::Activate()"); - - if(!IsActive()) - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::Activate(): calls User::RequestComplete()\n"))); - - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); - - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::Activate(): calls SetActive()\n"))); - - SetActive(); - } - else - { - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::Activate(): Already active.\n"))); - } -} - -//---------------------------------------------------------------- - -void CEapClientProcessHandler::DoCancel() -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::DoCancel()\n"))); - EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::DoCancel()"); -} - -//---------------------------------------------------------------------------- - -TInt CEapClientProcessHandler::RunError(TInt aError) -{ - EAP_TRACE_DEBUG( - iTools, - TRACE_FLAGS_DEFAULT, - (EAPL("CEapClientProcessHandler::RunError(): aError=%d, this=0x%08x\n"), - aError, - this)); - EAP_TRACE_RETURN_STRING(iTools, "returns: CEapClientProcessHandler::RunError()"); - - Cancel(); - - return aError; -} - -//---------------------------------------------------------------- -//---------------------------------------------------------------- -//---------------------------------------------------------------- - -/* - DLL harness -*/ -#ifndef EKA2 -EAP_FUNC_EXPORT TInt E32Dll(TDllReason) - { - return KErrNone; - } -#endif - -//---------------------------------------------------------------- -// end -