diff -r 000000000000 -r 3ce708148e4d devicediagnostics/diagplugins/diagpdptestengine/src/diagpdptestengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devicediagnostics/diagplugins/diagpdptestengine/src/diagpdptestengine.cpp Thu Dec 17 08:40:12 2009 +0200 @@ -0,0 +1,388 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: This is the class module for the PDP Test Engine +* +*/ + + +// INCLUDE FILES +#include // debug macros +#include "diagpdptestengine.h" +#include +//#include +//#include +//#include +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +//const TInt KConnArrayGranularity = ( 3 ); + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS ============================== + +// ========================= MEMBER FUNCTIONS ================================ + + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::CDiagPDPTestEngine() +// +// C++ default constructor +// ---------------------------------------------------------------------------- +CDiagPDPTestEngine::CDiagPDPTestEngine() + : CActive(CActive::EPriorityUserInput) + { + // no implementation needed + } + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::~CDiagPDPTestEngine() +// +// C++ default destructor +// ---------------------------------------------------------------------------- +CDiagPDPTestEngine::~CDiagPDPTestEngine() + { + // no implementation needed + } + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::RunL() +// +// Handle asynchronous requests +// ---------------------------------------------------------------------------- +void CDiagPDPTestEngine::RunL() + { + // no implementation needed + } + + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::DoCancel() +// +// Handle cancellation of asynchronous requests +// ---------------------------------------------------------------------------- +void CDiagPDPTestEngine::DoCancel() + { + // no implementation needed + } + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::CheckAPNsInConnectionManagerL() +// +// +// ---------------------------------------------------------------------------- +TBool CDiagPDPTestEngine::CheckAPNsInConnectionManagerL() + { + LOGSTRING( "CDiagPDPTestEngine::CheckAPNsInConnectionManagerL()" ); + /*RArray idArray; + CleanupClosePushL( idArray ); + + CDesCArrayFlat* nameArray = new (ELeave) CDesCArrayFlat(16); + CleanupStack::PushL( nameArray ); + + // Get IAP names and ids from the database + CCommsDatabase* TheDb = CCommsDatabase::NewL( EDatabaseTypeIAP ); + CleanupStack::PushL( TheDb ); + + TheDb->ShowHiddenRecords(); + + CCommsDbTableView* view = TheDb->OpenTableLC( TPtrC(IAP) ); + + TBuf<40> name; + TUint32 id,aId; + TInt res = view->GotoFirstRecord(); + while( res == KErrNone ) + { + view->ReadTextL( TPtrC(COMMDB_NAME), name ); + view->ReadUintL( TPtrC(COMMDB_ID), id ); + + idArray.Insert( id, 0 ); + nameArray->InsertL( 0, name ); + + res = view->GotoNextRecord(); + RDebug::Print(_L("IAP name, id: %S, %d"), &name, id); + } + + CleanupStack::PopAndDestroy( view ); // view + CleanupStack::PopAndDestroy( TheDb ); // TheDb + + // Create listbox and PUSH it. + CEikTextListBox* list = new(ELeave) CAknSinglePopupMenuStyleListBox; + CleanupStack::PushL( list ); + + // Create popup list and PUSH it. + CAknPopupList* popupList = CAknPopupList::NewL( + list, R_AVKON_SOFTKEYS_OK_CANCEL, + AknPopupLayouts::EMenuWindow); + CleanupStack::PushL( popupList ); + + // initialize listbox. + list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect ); + list->CreateScrollBarFrameL( ETrue ); + list->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + + // Set listitems. + CTextListBoxModel* model = list->Model(); + model->SetItemTextArray( nameArray ); + model->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + // Set title + popupList->SetTitleL( _L("Select IAP:") ); + + // Show popup list. + TInt popupOk = popupList->ExecuteLD(); + CleanupStack::Pop( popupList ); // popupList + if ( popupOk ) + { + TInt index = list->CurrentItemIndex(); + aId = idArray[index]; + } + + CleanupStack::PopAndDestroy( 3, &idArray ); // list, nameArray, idArray + + if(popupOk != EFalse) + { + iIAPiddefault = aId; + } + return popupOk;*/ + + + /*CCommsDatabase* cdb = CCommsDatabase::NewL(EDatabaseTypeIAP); + CleanupStack::PushL(cdb); + LOGSTRING("CCommsDatabase::NewL"); + CApDataHandler* apDataHandler = CApDataHandler::NewLC(*cdb); + LOGSTRING("CApDataHandler::NewLC"); + iIAPiddefault = apDataHandler->DefaultL(EFalse); + LOGSTRING2( "CApDataHandler->Default %d",iIAPiddefault ); + CleanupStack::PopAndDestroy(2); + LOGSTRING( "pop/destroy 2"); + return ETrue;*/ +/* LOGSTRING( "CDiagPDPTestEngine::CheckAPNsInConnectionManagerL()" ) + + // Reset the arrays to hold valid IAP Ids + iPrimaryAPNIapIdArray.Reset();; + iSecondaryAPNIapIdArray.Reset(); + + // Opens a session with the connection manager + RCmManager connManager; + connManager.OpenLC(); + LOGSTRING( "CDiagPDPTestEngine session with connection manager opened." ) + + // create a conneciton array to hold the Ids of connections + RArray< TUint32 > connArray = RArray< TUint32 >( KConnArrayGranularity ); + CleanupClosePushL( connArray ); + + // Get a list of all the destinations + LOGSTRING( "CDiagPDPTestEngine Get a list of all the destinations." ) + connManager.AllDestinationsL( connArray ); + TInt numberOfDestinations = connArray.Count(); + LOGSTRING2( "CDiagPDPTestEngine number of destinations = %d", numberOfDestinations ) + + + // Look through all the destinations' connection methods and see if any of + // them match the CenRep data. + for ( TInt i = 0; i < numberOfDestinations; i++ ) + { + RCmDestination destination = connManager.DestinationL( connArray[ i ] ); + CleanupClosePushL( destination ); + + // Don't use any hidden destinations, because they are not visible to + // the user. + if ( destination.IsHidden() ) + { + LOGSTRING2( "CDiagPDPTestEngine: Destination number %d is hidden, hence ignoring it", i) + CleanupStack::PopAndDestroy(); // destination + continue; + } + + // get the number of connection methods with this destination + TInt numberOfConnectionMethods = destination.ConnectionMethodCount(); + LOGSTRING3( "CDiagPDPTestEngine For destination %d, number of connection methods are %d", i, numberOfConnectionMethods ) + + for ( TInt j = 0; j < numberOfConnectionMethods; j++ ) + { + RCmConnectionMethod method = destination.ConnectionMethodL( j ); + CleanupClosePushL( method ); + + // This call is trapped because not all connection methods support + // the data we're querying, and the leave should not be propagated + // up because that would not be a reason for test failure. + TRAP_IGNORE( CheckConnectionMatchL( method ) ) + CleanupStack::PopAndDestroy(); // method + } + + CleanupStack::PopAndDestroy(); // destination + } + + + // Get a list of all the uncategorized connection methods. + LOGSTRING( "CDiagPDPTestEngine : Get a list of all the uncategorized connection methods." ) + connArray.Reset(); + connManager.ConnectionMethodL( connArray ); + + TInt numberOfUncategorizedConnectionMethods = connArray.Count(); + LOGSTRING2( "CDiagPDPTestEngine : number of uncategorized connection methods = %d", numberOfUncategorizedConnectionMethods) + + // Look through all the uncategorized connection methods and see if any + // of them match match the CenRep data. + for ( TInt i = 0; i < numberOfUncategorizedConnectionMethods; i++ ) + { + RCmConnectionMethod method = connManager.ConnectionMethodL( connArray[ i ] ); + CleanupClosePushL( method ); + + // This call is trapped because not all connection methods support + // the data we're querying, and the leave should not be propagated + // up because that would not be a reason for test failure. + TRAP_IGNORE( CheckConnectionMatchL( method) ) + CleanupStack::PopAndDestroy(); // method + } + + CleanupStack::PopAndDestroy(); // connArray + CleanupStack::PopAndDestroy(); // connManager + + // check if atleast one occurrence each of the primary APN or the secondary APN was found in CommsDB + if( (iPrimaryAPNIapIdArray.Count() > 0) || (iSecondaryAPNIapIdArray.Count() > 0) ) + { + return ETrue; + } + else + { + return EFalse; + } + */ + return ETrue; //compiler warning + } + + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::CheckConnectionMatchL() +// +// +// ---------------------------------------------------------------------------- + +void CDiagPDPTestEngine::CheckConnectionMatchL(const RCmConnectionMethod& aMethod) + { + LOGSTRING( "CDiagBrowserPluginModel::CheckConnectionMatchL()" ) + + HBufC* name = aMethod.GetStringAttributeL( + CMManager::ECmName ); + CleanupStack::PushL( name ); + + HBufC* apn = aMethod.GetStringAttributeL( + CMManager::EPacketDataAPName ); + + CleanupStack::PushL( apn ); + + TInt type = aMethod.GetIntAttributeL( + CMManager::ECmBearerType ); + + TBool hidden = aMethod.GetBoolAttributeL( + CMManager::ECmHidden ); + + TUint32 apId = aMethod.GetIntAttributeL( + CMManager::ECmIapId ); + + LOGSTRING5( + "CDiagBrowserPluginModel::CheckConnectionMatchL() " + L" Name '%S', APN '%S' ,Type '0x%08x', Hidden '%d'", name, apn, type, hidden ) + + + if ( ( apn->Compare( iCenrepPrimaryAPN ) == 0 ) && + type == KUidPacketDataBearerType && + !hidden ) + { + LOGSTRING( "CDiagBrowserPluginModel connection matches primary APN, adding to primary IAP array" ) + iPrimaryAPNIapIdArray.Append(apId); + } + + if ( ( apn->Compare( iCenrepSecondaryAPN ) == 0 ) && + type == KUidPacketDataBearerType && + !hidden ) + { + LOGSTRING( "CDiagBrowserPluginModel connection matches secondary APN, adding to secondary IAP array" ) + iSecondaryAPNIapIdArray.Append(apId); + } + + CleanupStack::PopAndDestroy( apn ); + CleanupStack::PopAndDestroy( name ); + } + + +// ---------------------------------------------------------------------------- +// CDiagPDPTestEngine::FindActiveConnectionsL() +// +// this function returns ETrue if an already active connection is found using +// the IAP ids which match with the specified APNs, else it returns EFalse +// ---------------------------------------------------------------------------- +TBool CDiagPDPTestEngine::FindActiveConnectionsL() + { + LOGSTRING( "CDiagPDPTestEngine::FindActiveConnectionsL"); + TBool result = EFalse; + TUint connectionCount = 0; + TPckgBuf connectionInfo; + User::LeaveIfError( + iConnection.EnumerateConnections(connectionCount)); + LOGSTRING("iConnection.EnumerateConnections"); + if(connectionCount > 0) + { + // there is atleast one active connection + + // iterate through each active connection + for(TUint count = 1 ; count <= connectionCount; count++) + { + User::LeaveIfError( + iConnection.GetConnectionInfo(count, connectionInfo)); + + // test if the IAP Id of this active connection matches with one of the IAP ids in + // primary array or secondary array + /*if( ((iPrimaryAPNIapIdArray.Find( connectionInfo().iIapId)) != KErrNotFound ) || + ((iSecondaryAPNIapIdArray.Find( connectionInfo().iIapId)) != KErrNotFound ) )*/ + if (iIAPiddefault == connectionInfo().iIapId) + { + // the IAP ID of the current active connection has matched with the one of the IAPs in primary array or secondary array + // data connection has PASSED + LOGSTRING("IAP ID of the current active connection has matched"); + result = ETrue; + break; //break from the for loop + } + else + { + // do nothing, look for next active connection + } + } + } + else + { + // no active connection found + result = EFalse; + } + + return result; + } + + + +// End of File