devicediagnostics/diagplugins/diagdatanetworkplugin/src/diagdatanetworktestpdpengine.cpp
changeset 18 7d11f9a6646f
parent 4 75a71fdb4c92
child 21 c707676bf59f
--- a/devicediagnostics/diagplugins/diagdatanetworkplugin/src/diagdatanetworktestpdpengine.cpp	Tue Feb 02 00:03:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,568 +0,0 @@
-/*
-* 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 module for the Diagnostics Data Network Test PDP-Engine
-*
-*/
-
-
-// INCLUDES
-
-// Class Declaration 
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-#include <logfilterandeventconstants.hrh>
-#endif
-#include "diagdatanetworktestpdpengine.h"   // CDiagDataNetworkTestPDPEngine
-
-// System includes
-#include <centralrepository.h>              // CRepository
-#include <logcli.h>                         // CLogFilter   
-#include <DiagNetworkRegStatusWatcher.h>    // CDiagNetworkRegStatusWatcher
-#include <DiagFrameworkDebug.h>             // LOGSTRING
-#include <diaglogeventeraser.h>             // CDiagLogEventEraser
-
-// User includes
-#include "diagdatanetworkprivatecrkeys.h"
-#include <devdiagdatanetworktestpluginrsc.rsg>
-#include	"diagdatanetworktestplugin.hrh"
-
-// EXTERNAL DATA STRUCTURES
-
-// EXTERNAL FUNCTION PROTOTYPES
-
-// CONSTANTS
-
-// MACROS
-
-// LOCAL CONSTANTS AND MACROS
-
-// MODULE DATA STRUCTURES
-
-// LOCAL FUNCTION PROTOTYPES
-
-// FORWARD DECLARATIONS
-
-// ============================= LOCAL FUNCTIONS ==============================
-
-// ========================= MEMBER FUNCTIONS ================================
-
-// ---------------------------------------------------------------------------
-// Symbian OS default constructor
-// ---------------------------------------------------------------------------   
-CDiagDataNetworkTestPDPEngine* CDiagDataNetworkTestPDPEngine::NewL(
-    MDiagDataNetworkTestCallBackInterface& aInterface)
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::NewL()")
-    
-    CDiagDataNetworkTestPDPEngine* self = 
-                        new (ELeave) CDiagDataNetworkTestPDPEngine(aInterface);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-    return self;    
-    }
-
-
-// ----------------------------------------------------------------------------
-// Standard C++ Constructor
-// NOTE that CActive(CActive::EPriorityUserInput) is called in 
-// CDiagPDPTestEngine::CDiagPDPTestEngine()
-// ----------------------------------------------------------------------------
-//
-CDiagDataNetworkTestPDPEngine::CDiagDataNetworkTestPDPEngine(
-                    MDiagDataNetworkTestCallBackInterface& aInterface) 
-    :iInterface(aInterface)
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::CDiagDataNetworkTestPDPEngine()")
-    
-    // Add this object to active scheduler
-    CActiveScheduler::Add( this );         
-    }
-    
-// ---------------------------------------------------------------------------
-// Symbian OS second phase constructor
-// ---------------------------------------------------------------------------    
-void CDiagDataNetworkTestPDPEngine::ConstructL()
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::ConstructL()")
-    SetStateL( EStateUnknown );
-    idialogOn = EFalse;
-	idialogDismissed = EFalse;
-    }
-    
-
-// ----------------------------------------------------------------------------
-// Destructor
-// ----------------------------------------------------------------------------    
-CDiagDataNetworkTestPDPEngine::~CDiagDataNetworkTestPDPEngine()
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::~CDiagDataNetworkTestPDPEngine()")
-            
-    // call CActive::DoCancel() to stop any ongoing async request
-    Cancel();
-    
-    delete iLogEventEraser;
-    iLogEventEraser = NULL;
-    
-    delete iNetRegStatusWatcher;
-    iNetRegStatusWatcher = NULL;        
-        
-    iPrimaryAPNIapIdArray.Close();
-    iSecondaryAPNIapIdArray.Close();    
-      
-    iConnection.Close();
-    iSocketServ.Close();     
-    if ( iWaitDialog )
-    delete iWaitDialog;   
-    }
-
-
-// ----------------------------------------------------------------------------
-// This function reports the total steps of the engine class
-// ----------------------------------------------------------------------------    
-TUint CDiagDataNetworkTestPDPEngine::TotalSteps()
-    {
-    return EStateMax;
-    }    
-
-
-// ---------------------------------------------------------------------------
-// CDiagDataNetworkTestPDPEngine::RunDataNetworkTestL()
-//
-// This function is the entry point to Data Network Test.
-// --------------------------------------------------------------------------- 
-void CDiagDataNetworkTestPDPEngine::RunDataNetworkTestL()
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::RunDataNetworkTestL()")
-    
-    delete iNetRegStatusWatcher;
-    iNetRegStatusWatcher = NULL;    
-    
-    iNetRegStatusWatcher = CDiagNetworkRegStatusWatcher::NewL(*this);
-    
-    // start the network registration status observer
-    // the initial network registration status wiil be obtained via
-    // callback interface InitialNetworkRegistrationStatusL()
-    SetStateL( EStateWaitForInitialNetworkRegStatus );
-    iNetRegStatusWatcher->StartObserver();
-    }
-    
-    
-// ----------------------------------------------------------------------------
-// This function is used to inform the intial network registration status
-// ----------------------------------------------------------------------------
-void CDiagDataNetworkTestPDPEngine::InitialNetworkRegistrationStatusL( 
-    const TBool& aRegistered )
-    {    
-    if( aRegistered )
-        {
-        LOGSTRING("CDiagDataNetworkTestPDPEngine::InitialNetworkRegistrationStatusL() aRegistered == ETrue")
-        
-        StartPdpEstablishmentL();
-        }
-    else
-        {
-        LOGSTRING("CDiagDataNetworkTestPDPEngine::InitialNetworkRegistrationStatusL() aRegistered == EFalse")
-        
-        // intial registration status is not registered
-        // report the test result as Failed
-        ReportResultToPluginL( EFalse );        
-        }
-    }
-    
-// ----------------------------------------------------------------------------
-// This interface is used to inform the clients of any changes in the network 
-// registration
-// ----------------------------------------------------------------------------
-void CDiagDataNetworkTestPDPEngine::NetworkRegistrationStatusChangeL( 
-    const TBool& aRegistered )
-    {
-    if(!aRegistered)
-        {
-        // device has lost network coverage, 
-        LOGSTRING("CDiagDataNetworkTestPDPEngine::NetworkRegistrationStatusChangeL() aRegistered == EFalse")
-        LOGSTRING("device has lost network coverage")
-        
-        // stop the observer and fail the test
-        iNetRegStatusWatcher->StopObserver();
-        
-        // cancel any ongoing asynchronous request
-        Cancel();
-        
-        ReportResultToPluginL(CDiagResultsDatabaseItem::EFailed);
-        }
-    else
-        {
-        // continue the test, device is still registered
-        LOGSTRING("CDiagDataNetworkTestPDPEngine::NetworkRegistrationStatusChangeL() aRegistered == ETrue")
-        }        
-    }
-    
-    
-// ----------------------------------------------------------------------------
-// This function is used to start checking if connection parameters exist
-// and then connection establishment, if necessary
-// ----------------------------------------------------------------------------  
-void CDiagDataNetworkTestPDPEngine::StartPdpEstablishmentL()
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::StartPdpEstablishmentL()");
-        
-    SetStateL( EStateCheckingConnecitonParams );
-    
-    //TInt err = KErrGeneral;
-    User::LeaveIfError(iSocketServ.Connect());
-    User::LeaveIfError(iConnection.Open(iSocketServ));
-    
-    LOGSTRING("CDiagDataNetworkTestPDPEngine : socket server session opened OK ");  
-    
-    // Check for Active Connections 
-    
-    TUint connectionCount = 0;
-    TPckgBuf<TConnectionInfo> connectionInfo;
-    User::LeaveIfError(iConnection.EnumerateConnections(connectionCount));
-    LOGSTRING("iConnection.EnumerateConnections");
-    // if connection active report pass.
-    if(connectionCount > 0)
-    ReportResultToPluginL( ETrue );
-    else
-                EstablishPDPContextL();
-
-    }    
-
-// ---------------------------------------------------------------------------
-// This function is the concrete implementation of pure virtual function
-// CDiagPDPTestEngine::ReadAPNsFromCenrepL(). Here the primary and secondary APNs
-// are read from the central repository. The function sets the reference argument
-// aError as KErrNone if both APNs are found in the cenrep.
-// ---------------------------------------------------------------------------    
-    
-void CDiagDataNetworkTestPDPEngine::ReadAPNsFromCenrepL(TInt& aError)
-    {      
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::ReadAPNsFromCenrepL()");
-         
-    TInt errPrimary = KErrGeneral;
-    TInt errSeondary = KErrGeneral;
-           
-    CRepository  *cenRep;
-    cenRep = CRepository::NewL( KCRUidDiagDataNetworkTestPlugin );    
-    CleanupStack::PushL( cenRep );        
-    iCenrepPrimaryAPN.Zero();
-    iCenrepSecondaryAPN.Zero();
-    errPrimary = cenRep->Get( KDiagDataNetworkTestPluginPrimaryAPN,iCenrepPrimaryAPN );
-    errSeondary = cenRep->Get( KDiagDataNetworkTestPluginSecondaryAPN,iCenrepSecondaryAPN);
-    
-    // check both APNs exist in Cenrep
-    if(errPrimary == KErrNone && errSeondary == KErrNone  )
-        {
-        aError = KErrNone;
-        }        
-    else
-        {
-        aError = KErrGeneral;
-        }
-    CleanupStack::PopAndDestroy(cenRep);  
-    cenRep = NULL; 
-    
-    
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::ReadAPNsFromCenrepL()  Primary APN = ");
-    LOGTEXT(iCenrepPrimaryAPN)
-
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::ReadAPNsFromCenrepL()  Secondary APN = ");
-    LOGTEXT(iCenrepSecondaryAPN)
-    }
-    
-// ----------------------------------------------------------------------------
-// CDiagDataNetworkTestPDPEngine::EstablishPDPContextL
-//
-// This the entry point to start establishing PDP context
-// ----------------------------------------------------------------------------       
-void CDiagDataNetworkTestPDPEngine::EstablishPDPContextL()
-    {   
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::EstablishPDPContextL()")
- 
-        SetStateL( EStateWaitForConnectionCompletion );
-
-        iPref.SetDialogPreference(ECommDbDialogPrefPrompt);
-        //iPref.SetDialogPreference( ECommDbDialogPrefDoNotPrompt );
-        iPref.SetDirection( ECommDbConnectionDirectionOutgoing );   
-        //TConnPref iPref(TConnPref::EConnPrefCommDb);
-        iConnection.Start(iPref, iStatus);
-        SetActive();
-        TInt userResponse;
-        ShowProgressNoteL( userResponse );
-    } 
-
-
-// ----------------------------------------------------------------------------
-// CDiagDataNetworkTestPDPEngine::ShowVibrationNoteL
-//
-// Progress Note
-// ----------------------------------------------------------------------------
-
-TBool CDiagDataNetworkTestPDPEngine::ShowProgressNoteL(TInt aUserResponse)
-    {
-	if ( iWaitDialog )
-	{
-	delete iWaitDialog;
-	iWaitDialog = NULL;
-	}
-
-
-	// WAIT NOTE DIALOG
-	iWaitDialog = new (ELeave) CAknWaitDialog(
-							(REINTERPRET_CAST(CEikDialog**, &iWaitDialog)), 
-							ETrue);
-
-	iWaitDialog->PrepareLC(R_DATANW_PLUGIN_WAIT_NOTE);
-	iWaitDialog->SetCallback(this);
-	TBool isDialogDismissedByUser = iWaitDialog->RunLD();
-	idialogOn = ETrue;
-	return isDialogDismissedByUser;
-    }
-    
-    
-//*********************************************************
-//*********************************************************
-// CallBack from AKnWaitDialog when Cancel is pressed
-//*********************************************************
-//*********************************************************
-
-void CDiagDataNetworkTestPDPEngine::DialogDismissedL( TInt aButtonId )
-{
-	LOGSTRING2("CDiagDataNetworkTestPDPEngine::DialogDismissedL() = %d",aButtonId);
-
-	 
-	if(aButtonId == EDataNetworkTestCancel)
-	{
-	
-	
-	if (idialogOn)
-		{
-		iConnection.Stop(RConnection::EStopAuthoritative);
-	//	delete iWaitDilaog;
-	//	iWaitDialog = NULL;
-		idialogOn = EFalse; 
-		idialogDismissed = ETrue;
-		}
-		
-	 TInt   cancelButtonId;
-     TBool  cancelResult = EFalse;
-     iPrevState = iEngineState;
-     SetStateL(EStateWaitDialogOn);
-	 cancelResult= iInterface.DisplayDialog(cancelButtonId);
-	 
-	 iWaitDialog = NULL;
-	 
-	 if ( !cancelResult )
-	 {
-	 SetStateL(iPrevState);
-	 return;
-	 }
-	 
-	if(cancelButtonId == -2)
-		{
-		
-		SetStateL(EStateCancelTest);
-		TRequestStatus* status = &iStatus;
-		// Complete own request
-		User::RequestComplete( status, KErrNone );
-		SetActive();
-		
-		//ReportResultToPluginL( CDiagResultsDatabaseItem::ECancelled );
-		//HandleOngoingConnectionRequestL();
-		
-		}
-     else
-		{	 
-		SetStateL(EStateDialogDismissed);
-		TRequestStatus* status = &iStatus;
-		// since this is a Cancel to start the test again
-		// lets start believing that the DialogDismiss Cancel was never pressed
-		idialogDismissed = EFalse;
-		// Complete own request
-		User::RequestComplete( status, KErrNone );
-		SetActive();
-		}
-	 }
-}
-// ---------------------------------------------------------------------------
-// CDiagDataNetworkTestPDPEngine::RunL()
-//
-// Concrete implementation of CActive::DoCancel(). This function handles the asynchronous events.
-// ---------------------------------------------------------------------------     
-void CDiagDataNetworkTestPDPEngine::RunL()
-    {
-    switch(iEngineState)
-        {   
-        case EStateWaitForConnectionCompletion:
-            {
-            HandleOngoingConnectionRequestL();
-            }
-            break;
-        case EStateWaitDialogOn:
-        	break;
-        case EStateCancelTest:
-        	ReportResultToPluginL( CDiagResultsDatabaseItem::ECancelled );
-        	break;
-        case EStateDialogDismissed:
-        	EstablishPDPContextL();
-        	break;
-        default:
-            break;
-        };      
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::RunL()");  
-    }   
-    
-// ---------------------------------------------------------------------------
-// CDiagDataNetworkTestPDPEngine::DoCancel()
-//
-// This function handles cancel request from CActive
-// ---------------------------------------------------------------------------     
-void CDiagDataNetworkTestPDPEngine::DoCancel()
-    {
-    if( iNetRegStatusWatcher )
-        {        
-        iNetRegStatusWatcher->StopObserver();
-        }
-    if (iEngineState != EStateCancelTest)    
-    iConnection.Stop();
-    }
-    
-  
-// ---------------------------------------------------------------------------
-// CDiagDataNetworkTestPDPEngine::HandleOngoingConnectionRequestL()
-//
-// This function handles ongoing asynchronous connection request and issues
-// new request if required.
-// ---------------------------------------------------------------------------     
-void CDiagDataNetworkTestPDPEngine::HandleOngoingConnectionRequestL()
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::HandleOngoingConnectionRequestL()")
-    
-    if( iStatus == KErrNone || iStatus == KErrAlreadyExists )
-        {        
-        // connection established, report SUCCESS to the plugin        
-        LOGSTRING("Connection established")
-        LOGSTRING2("current IAP id = %d", iIAPiddefault)
-        StartLogEraseOperationL( ETrue ); // ETrue means the test has Passed
-        }
-    else
-        ReportResultToPluginL( EFalse );
-      
-    }    
-    
-// ----------------------------------------------------------------------------
-// This function starts the log event erase process
-// ----------------------------------------------------------------------------    
-void CDiagDataNetworkTestPDPEngine::StartLogEraseOperationL(TBool aTestResult)
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::StartLogEraseOperationL()")
-
-    iTestResult = aTestResult;
-    SetStateL( EStateWaitForLogErase );
-    
-    TUid PacketEventType = { KLogPacketDataEventType };
-    
-    delete iLogEventEraser;
-    iLogEventEraser = NULL;
-    iLogEventEraser = CDiagLogEventEraser::NewL(*this);
-    
-    CLogFilter& LogFilter = iLogEventEraser->Filter();
-    LogFilter.SetEventType(PacketEventType);
-    LogFilter.SetStartTime(iStartTime);
-    
-    // start the log erasing process
-    iLogEventEraser->StartAsyncEraseLogsL();
-    }
-    
-// ----------------------------------------------------------------------------    
-// This callback interface is used to determine if the log event is to be 
-// deleted or not
-// ----------------------------------------------------------------------------
-TBool CDiagDataNetworkTestPDPEngine::IsEventToBeDeleted( const CLogEvent& aEvent )
-    {
-    LOGSTRING("CDiagDataNetworkTestPDPEngine::IsEventToBeDeleted()")
-    
-    TBool isEntryDeleted = EFalse;
-    
-    TBuf<KCommsDbSvrMaxFieldLength> eventAPNName;
-    eventAPNName.Zero();
-    eventAPNName.Copy(aEvent.RemoteParty()); 
-    
-    LOGSTRING("Log event APN name = ")  
-    LOGTEXT(eventAPNName)  
-    
-    if( (eventAPNName.Compare( iCenrepPrimaryAPN )==0) || 
-        (eventAPNName.Compare( iCenrepSecondaryAPN )==0) )    
-        {
-        // APN is matched, delete the log event entry
-        isEntryDeleted = ETrue;
-                 
-        }
-
-    LOGSTRING2("Log event deleted = %d", isEntryDeleted )        
-    return isEntryDeleted;      
-    }
-
-
-// ----------------------------------------------------------------------------    
-// This callback interface is used to notify that log events are erased
-// ----------------------------------------------------------------------------
-void CDiagDataNetworkTestPDPEngine::CompleteEventEraseL( TInt /*aError*/)
-    {
-    ReportResultToPluginL(iTestResult);
-    }
-
-
-// ---------------------------------------------------------------------------
-// This function is sets the state of the engine and also reports the progress
-// step
-// --------------------------------------------------------------------------- 
-void CDiagDataNetworkTestPDPEngine::SetStateL(TPDPEngineState aState)
-    {
-    LOGSTRING2("CDiagDataNetworkTestPDPEngine::SetStateL(), aState = %d", aState)
-    
-    iEngineState = aState;
-    iInterface.ReportTestProgL( iEngineState );
-    }
-
-// ---------------------------------------------------------------------------
-// This function is used to report the result of the test back to the plug-in
-// class
-// --------------------------------------------------------------------------- 
-void CDiagDataNetworkTestPDPEngine::ReportResultToPluginL(TBool aResult)
-    {
-    LOGSTRING2("CDiagDataNetworkTestPDPEngine::ReportResultToPluginL(), aResult = %d", aResult)
-    // Remove the waitDialog
-    if(idialogOn)
-    iWaitDialog->ProcessFinishedL(); 
-    
-    // Dialog dismissed by cancel
-    if (idialogDismissed)
-    {
-    	iInterface.ReportTestResultL( CDiagResultsDatabaseItem::ESkipped );
-    	return;
-    }
-    if(aResult)
-        {
-        iInterface.ReportTestResultL( CDiagResultsDatabaseItem::ESuccess );
-        }        
-    else
-        {
-        iInterface.ReportTestResultL( CDiagResultsDatabaseItem::EFailed ); 
-        }               
-    }
-
-
-// End of File
-