diff -r 000000000000 -r c8830336c852 eapol/eapol_framework/eapol_symbian/am/type/protected_setup/EapProtectedSetupInterface.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eapol/eapol_framework/eapol_symbian/am/type/protected_setup/EapProtectedSetupInterface.cpp Thu Dec 17 08:47:43 2009 +0200 @@ -0,0 +1,290 @@ +/* +* Copyright (c) 2001-2006 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. +* +*/ + + +// This is enumeration of EAPOL source code. +#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) + #undef EAP_FILE_NUMBER_ENUM + #define EAP_FILE_NUMBER_ENUM 174 + #undef EAP_FILE_NUMBER_DATE + #define EAP_FILE_NUMBER_DATE 1127594498 +#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) + +// INCLUDE FILES +#include "EapProtectedSetupInterface.h" +#include "eap_am_type_protected_setup_symbian.h" + +#include +#include + +// ================= MEMBER FUNCTIONS ======================= + +CEapProtectedSetupInterface::CEapProtectedSetupInterface(abs_eap_am_tools_c* const aTools, eap_am_type_protected_setup_symbian_c* const aParent) +: CActive(CActive::EPriorityStandard) +, iParent(aParent) +, m_am_tools(aTools) +, iQueryId(EQueryNone) +, iMMETELConnectionStatus(EFalse) +{ + EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); + EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); +} + +//-------------------------------------------------- + +CEapProtectedSetupInterface* CEapProtectedSetupInterface::NewL(abs_eap_am_tools_c* const aTools, + eap_am_type_protected_setup_symbian_c* const aParent) +{ + CEapProtectedSetupInterface* self = new(ELeave) CEapProtectedSetupInterface(aTools, aParent); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; +} + +//-------------------------------------------------- + +void CEapProtectedSetupInterface::ConstructL() +{ + EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); + + CActiveScheduler::Add(this); + + EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); +} + +//-------------------------------------------------- + +CEapProtectedSetupInterface::~CEapProtectedSetupInterface() +{ + EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); + + if(IsActive()) + { + Cancel(); + } + + DisconnectMMETel(); + + EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); +} + +//-------------------------------------------------- + +void CEapProtectedSetupInterface::QueryDeviceParametersL() +{ + EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ProtectedSetup interface: Querying Device Parametes.\n"))); + + iQueryId = EQueryDeviceParams; + + // Create MMETEl connection. + User::LeaveIfError( CreateMMETelConnectionL() ); + + iPhone.GetPhoneId( iStatus, iDeviceId ); + + if( !IsActive() ) + { + SetActive(); + } + + EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); +} + +//-------------------------------------------------- + +void CEapProtectedSetupInterface::DoCancel() +{ + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::DoCancel() - Cancelling MMETEL query.\n") ) ); + + if(iQueryId == EQueryDeviceParams) + { + // Cancel the request for device id. + iPhone.CancelAsyncRequest(EMobilePhoneGetPhoneId); + } + else + { + // This should not happen. + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::DoCancel(): SOME BIG PROBLEM \n"))); + } + + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::DoCancel(): CANCELLED the REQUEST \n"))); +} + +//-------------------------------------------------- + +void CEapProtectedSetupInterface::RunL() +{ + EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); + + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::RunL(). iStatus.Int() =%d \n"), iStatus.Int() )); + + TInt error = KErrNone; + eap_status_e completion_status(eap_status_ok); + + if (iStatus.Int() == KErrNone) + { + switch( iQueryId ) + { + case EQueryDeviceParams: + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::RunL():: Got Device ID reply.\n"))); + + EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Manufacturer"), + iDeviceId.iManufacturer.Ptr(), + iDeviceId.iManufacturer.Size())); + + EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Model"), + iDeviceId.iModel.Ptr(), + iDeviceId.iModel.Size())); + + EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Revision"), + iDeviceId.iRevision.Ptr(), + iDeviceId.iRevision.Size())); + + EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("SerialNumber"), + iDeviceId.iSerialNumber .Ptr(), + iDeviceId.iSerialNumber .Size())); + + // Complete. This happens only if completion_status is eap_status_ok so far. + TRAP(error, iParent->complete_protected_setup_device_paramsL(iDeviceId, completion_status)); + + break; + + default: + + // Some problem + // This should not happen. + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Unknown query completed.\n"))); + break; + } + } + else + { + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Got error reply.\n"))); + + switch( iQueryId ) + { + case EQueryDeviceParams: + + // Error with Device id request. Complete the request with error. + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Error in device parameters query.\n"))); + + TRAP(error, iParent->complete_protected_setup_device_paramsL( + iDeviceId, + m_am_tools->convert_am_error_to_eapol_error(iStatus.Int()))); + break; + + default: + + // Some problem + // This should not happen. + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Unknown query failed.\n"))); + + break; + + } + } + + DisconnectMMETel(); + + EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); +} + +//-------------------------------------------------- + +TInt CEapProtectedSetupInterface::CreateMMETelConnectionL() +{ + EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Creating MMETel connection.\n"))); + + TInt errorCode = KErrNone; + + // MMETel need to be connected only once. + if( !iMMETELConnectionStatus ) + { + RTelServer::TPhoneInfo phoneInfo; + TInt phoneCount = 0; + + // Connect to ETel server + User::LeaveIfError( iServer.Connect() ); + + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Connected to ETel server.\n"))); + + // This function loads an ETel TSY module, mmtsy. + errorCode = iServer.LoadPhoneModule( KMmTsyModuleName ); + + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Loaded phone module.\n"))); + + if ( errorCode != KErrNone && errorCode != KErrAlreadyExists ) + { + User::Leave( errorCode ); + } + + iServer.SetExtendedErrorGranularity( RTelServer::EErrorExtended ); + + // This function retrieves the total number of phones supported by all + // the currently loaded ETel (TSY) modules. + User::LeaveIfError( iServer.EnumeratePhones( phoneCount ) ); + + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Number of phones supported by the loaded ETel = %d.\n"), phoneCount)); + + // This function retrieves information associated with the specified phone + while ( ( phoneCount-- ) && ( phoneInfo.iName != KMmTsyPhoneName ) ) + { + User::LeaveIfError( iServer.GetPhoneInfo( phoneCount, phoneInfo ) ); + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Got phone info.\n"))); + } + + // This function opens a phone subsession by name. ("DefaultPhone"). + User::LeaveIfError( iPhone.Open( iServer, phoneInfo.iName ) ); + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Opened phone subsession.\n"))); + + // MMETel connected and the phone module loaded fine. + iMMETELConnectionStatus = ETrue; + } + else + { + // MMETel already connected. + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("MMETel connected once already.\n"))); + } + + EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); + return errorCode; +} + +//-------------------------------------------------- + +void CEapProtectedSetupInterface::DisconnectMMETel() +{ + if( iMMETELConnectionStatus ) + { + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Closing RMobilePhone and MMETEL.\n"))); + + iPhone.Close(); + iServer.Close(); // Phone module is unloaded automatically when RTelServer session is closed + + iMMETELConnectionStatus = EFalse; + } + else + { + EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("RMobilePhone and MMETEL already closed.\n"))); + } +} + +//-------------------------------------------------- + +// End of file.