devicediagnostics/diagplugins/diagpdptestengine/src/diagpdptestengine.cpp
changeset 0 3ce708148e4d
--- /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 <DiagFrameworkDebug.h>                 // debug macros
+#include "diagpdptestengine.h"
+#include <cmpluginpacketdatadef.h>
+//#include <AknLists.h>
+//#include <BADESCA.H >
+//#include <aknPopup.h> 
+// 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<TUint32> 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<TConnectionInfo> 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