diff -r 75a71fdb4c92 -r 7d11f9a6646f devicediagnostics/diagplugins/diagbrowserplugin/src/diagbrowserpluginmodel.cpp --- a/devicediagnostics/diagplugins/diagbrowserplugin/src/diagbrowserpluginmodel.cpp Tue Feb 02 00:03:17 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,846 +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 model class for the Browser Test Plugin, which -* tests HTTP functionality. -* -*/ - - -// System Include Files -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include // CRepository -#include // RCmManager -#include // RCmDestination -#include // RCmConnectionMethod -#include // Connection Manager Defs -#include // Connection Manager Defs -#include // RSocketServ, RConnection -#include // RStringPool -#include // HTTP Strings -#include // RHTTPConnectionInfo -#include // RHTTPSession -#include // RHTTPTransaction -#include // THTTPEvent -#include // TUriParser8 -#include // CLogEvent -#include // CLogFilter -#include // CDiagResultsDatabaseItem -#include // Debugging Macros -#include // CDiagLogEventEraser -#include -// User Include Files -#include "diagbrowserpluginmodel.h" // CDiagBrowserPluginModel -#include "diagbrowserpluginmodelobserver.h" // CDiagBrowserPluginModelObserver -#include "diagbrowserpluginprivatecrkeys.h" // CenRep keys -#include "diagbrowserplugin.pan" // Panic -#include "diagbrowserplugin.hrh" - -#include -// Local Constants -const TInt KConnArrayGranularity = ( 3 ); -const TInt KMicroSecondsInMilliseconds = ( 1000 ); -const TInt KHttpResponseCodeOk = ( 200 ); -#ifdef __WINS__ -const TInt KEmulatorDynamicIpApId = ( 11 ); -#endif // __WINS__ - - -// ============================ GLOBAL FUNCTIONS ============================= - -// --------------------------------------------------------------------------- -// Static two-phase constructor. -// --------------------------------------------------------------------------- -// -CDiagBrowserPluginModel* CDiagBrowserPluginModel::NewL( - MDiagBrowserPluginModelObserver& aObserver ) - { - LOGSTRING( "CDiagBrowserPluginModel::NewL()" ) - - CDiagBrowserPluginModel* self = new( ELeave ) CDiagBrowserPluginModel( - aObserver ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CDiagBrowserPluginModel::~CDiagBrowserPluginModel() - { - LOGSTRING( "CDiagBrowserPluginModel::~CDiagBrowserPluginModel()" ) - - // Stop any outstanding requests. - Cancel(); - - // Free memory reserved by the model. - delete iTimer; - delete iLogEraser; - delete iWaitDialog; - // Close any open sessions. - iHttpTransaction.Close(); - iHttpSession.Close(); - iConnection.Close(); - iSocketServ.Close(); - } - -// --------------------------------------------------------------------------- -// Initiates the browser test. -// --------------------------------------------------------------------------- -// -void CDiagBrowserPluginModel::RunBrowserTestL() - { - LOGSTRING( "CDiagBrowserPluginModel::RunBrowserTestL()" ) - - // Mark the start time for removing the logs. - iStartTime.UniversalTime(); - iRetryCount = 0; - iTimerCalled = 0; - // Read Central Repository keys. - if ( !ReadCenRepKeysL() ) - { - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - return; - } - - /* Read APN data. - GetConnectionMethodL( iPrimaryConnection ); - GetConnectionMethodL( iSecondaryConnection );*/ - //iTimeoutValue = 30000; - // Open the connection. - if ( !OpenAndStartConnectionL() ) - { - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - return; - } - } - -// --------------------------------------------------------------------------- -// Returns the total number of execution steps. -// --------------------------------------------------------------------------- -TUint CDiagBrowserPluginModel::TotalSteps() - { - LOGSTRING( "CDiagBrowserPluginModel::TotalSteps()" ) - return EDiagBrowserStateMax; - } - -// --------------------------------------------------------------------------- -// The default constructor. -// --------------------------------------------------------------------------- -// -CDiagBrowserPluginModel::CDiagBrowserPluginModel( - MDiagBrowserPluginModelObserver& aObserver ) -: CActive( EPriorityStandard ), - iObserver( aObserver ) - { - LOGSTRING( "CDiagBrowserPluginModel::CDiagBrowserPluginModel()" ) - CActiveScheduler::Add( this ); - } - -// --------------------------------------------------------------------------- -// The second phase constructor. -// --------------------------------------------------------------------------- -// -void CDiagBrowserPluginModel::ConstructL() - { - LOGSTRING( "CDiagBrowserPluginModel::ConstructL()" ) - - // Open the connection to the Socket Server. - User::LeaveIfError( iSocketServ.Connect() ); - User::LeaveIfError( iConnection.Open( iSocketServ ) ); - idialogOn = EFalse; idialogDismissed = EFalse; - } - -// --------------------------------------------------------------------------- -// Reads and stores the browser test's Central Repository Keys. -// --------------------------------------------------------------------------- -// -TBool CDiagBrowserPluginModel::ReadCenRepKeysL() - { - LOGSTRING( "CDiagBrowserPluginModel::ReadCenRepKeysL()" ) - - // Create a Central Repository object. - CRepository* repository = CRepository::NewLC( - KCRUidDiagBrowserTestPlugin ); - - // Get the data. - /* if ( repository->Get( KDiagBrowserApnPrimary, - iPrimaryConnection.iApn ) != KErrNone || - repository->Get( KDiagBrowserApnSecondary, - iSecondaryConnection.iApn ) != KErrNone || - repository->Get( KDiagBrowserProxyAddress, - iProxyAddress ) != KErrNone || - repository->Get( KDiagBrowserProxyPort, - iProxyPort ) != KErrNone ||*/ - if( repository->Get( KDiagBrowserResponseTimeout, - iTimeoutValue ) != KErrNone || - repository->Get( KDiagBrowserUri, - iUri ) != KErrNone ) - { - LOGSTRING( "CDiagBrowserPluginModel::ReadCenRepKeysL() - CenRep read" - L" failed." ) - - CleanupStack::PopAndDestroy( repository ); - return EFalse; - } - - /* LOGSTRING3( - "CDiagBrowserPluginModel::ReadCenRepKeysL() - Primary APN '%S'" - L" Secondary APN '%S'", - &iPrimaryConnection.iApn, - &iSecondaryConnection.iApn ) - - LOGSTRING3( - "CDiagBrowserPluginModel::ReadCenRepKeysL() - Proxy '%S:%d'", - &iProxyAddress, - iProxyPort )*/ - - LOGSTRING3( - "CDiagBrowserPluginModel::ReadCenRepKeysL() - Timeout %d, Uri '%S'", - iTimeoutValue, - &iUri ) - - CleanupStack::PopAndDestroy( repository ); - return ETrue; - } - -// --------------------------------------------------------------------------- -// Finds the connection method that corresponds to the data supplied in the -// argument. -// --------------------------------------------------------------------------- -// -void CDiagBrowserPluginModel::GetConnectionMethodL( - TBrowserConnectionMethodData& aData ) - { - LOGSTRING( "CDiagBrowserPluginModel::GetConnectionMethodL()" ) - - // Look for matching connection methods. - RCmManager connManager; - connManager.OpenLC(); - - // Get a list of all the destinations. - RArray< TUint32 > connArray = RArray< TUint32 >( KConnArrayGranularity ); - CleanupClosePushL( connArray ); - connManager.AllDestinationsL( connArray ); - - // Look through all the destinations' connection methods and see if any of - // them match the CenRep data. - for ( TInt i = 0; i < connArray.Count() && !aData.iIsValid ; i++ ) - { - RCmDestination destination = connManager.DestinationL( - connArray[ i ] ); - CleanupClosePushL( destination ); - - LOGSTRING4( "CDiagBrowserPluginModel::GetConnectionMethodL() -" - L" Destination %d / %d, %d method(s)", - i + 1, - connArray.Count(), - destination.ConnectionMethodCount() ) - - // Don't use any hidden destinations, because they are not visible to - // the user. - if ( destination.IsHidden() ) - { - LOGSTRING( "CDiagBrowserPluginModel::GetConnectionMethodL() -" - L" Skipping hidden destination" ) - CleanupStack::PopAndDestroy(); // destination - continue; - } - for ( TInt j = 0; - j < destination.ConnectionMethodCount() && !aData.iIsValid; - 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, aData ) ) - CleanupStack::PopAndDestroy(); // method - } - - CleanupStack::PopAndDestroy(); // destination - } - - // Get a list of all the uncategorized connection methods. - connArray.Reset(); - connManager.ConnectionMethodL( connArray ); - LOGSTRING2( "CDiagBrowserPluginModel::GetConnectionMethodL() -" - L" Checking %d uncategorized method(s)", - connArray.Count() ) - - // Look through all the uncategorized connection methods and see if any - // of them match match the CenRep data. - for ( TInt i = 0; i < connArray.Count() && !aData.iIsValid; 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, aData ) ) - CleanupStack::PopAndDestroy(); // method - } - - CleanupStack::PopAndDestroy(); // connArray - CleanupStack::PopAndDestroy(); // connManager - } - -// --------------------------------------------------------------------------- -// Checks if the connection method matches the data supplied in the argument. -// --------------------------------------------------------------------------- -// -void CDiagBrowserPluginModel::CheckConnectionMatchL( - const RCmConnectionMethod& aMethod, - TBrowserConnectionMethodData& aData ) const - { - LOGSTRING( "CDiagBrowserPluginModel::CheckConnectionMatchL()" ) - - HBufC* name = aMethod.GetStringAttributeL( - CMManager::ECmName ); - CleanupStack::PushL( name ); - -#ifdef __WINS__ - HBufC* apn = HBufC::NewL( 1 ); -#else - HBufC* apn = aMethod.GetStringAttributeL( - CMManager::EPacketDataAPName ); -#endif // __WINS__ - CleanupStack::PushL( apn ); - - TInt type = aMethod.GetIntAttributeL( - CMManager::ECmBearerType ); - - TBool hidden = aMethod.GetBoolAttributeL( - CMManager::ECmHidden ); - - HBufC* proxy = aMethod.GetStringAttributeL( - CMManager::ECmProxyServerName ); - CleanupStack::PushL( proxy ); - - TInt port = aMethod.GetIntAttributeL( - CMManager::ECmProxyPortNumber ); - - TUint apId = aMethod.GetIntAttributeL( - CMManager::ECmIapId ); - - LOGSTRING4( - "CDiagBrowserPluginModel::CheckConnectionMatchL() - CM" - L" Name '%S', Type '0x%08x', Hidden '%d'", name, type, hidden ) - - LOGSTRING5( "CDiagBrowserPluginModel::CheckConnectionMatchL() - CM" - L" APN '%S', Proxy '%S:%d', Id %d", apn, proxy, port, apId ) - -#ifdef __WINS__ - if ( apId == KEmulatorDynamicIpApId ) -#else - if ( apn->Compare( aData.iApn ) == 0 && - proxy->Compare( iProxyAddress ) == 0 && - port == iProxyPort && - type == KUidPacketDataBearerType && - !hidden ) -#endif // __WINS__ - { - aData.iApId = apId; - aData.iMethodName.Copy( *name ); - aData.iIsValid = ETrue; - - LOGSTRING2( "CDiagBrowserPluginModel::CheckConnectionMatchL() - Found" - L" AP with id %d.", aData.iApId ) - } - - CleanupStack::PopAndDestroy( proxy ); - CleanupStack::PopAndDestroy( apn ); - CleanupStack::PopAndDestroy( name ); - } - -// --------------------------------------------------------------------------- -// Starts or resets the connection timeout timer. -// --------------------------------------------------------------------------- -// -void CDiagBrowserPluginModel::StartConnectionTimerL() - { - LOGSTRING( "CDiagBrowserPluginModel::StartConnectionTimerL()" ) - - // Create the timer, or cancel an existing timer. - if ( !iTimer ) - { - iTimer = CPeriodic::NewL( EPriorityHigh ); - } - else - { - iTimer->Cancel(); - } - - // Start the timer. - iTimer->Start( - TTimeIntervalMicroSeconds32( - iTimeoutValue * KMicroSecondsInMilliseconds ), - TTimeIntervalMicroSeconds32( 0 ), - TCallBack( TimerExpired, this ) ); - iTimerCalled++; - } - -// --------------------------------------------------------------------------- -// Updates the plugin's state and reports progress to the observer. -// --------------------------------------------------------------------------- -// -void CDiagBrowserPluginModel::SetStateL( TDiagBrowserState aTargetState ) - { - LOGSTRING3( "CDiagBrowserPluginModel::SetStateL( %d ) - iState %d", - aTargetState, - iState ) - - // Check for bad state transitions. - switch ( aTargetState ) - { - case EDiagBrowserStateConnectingBearer: - __ASSERT_ALWAYS( iState == EDiagBrowserStateInitial, - Panic( EDiagBrowserPluginBadState ) ); - break; - - case EDiagBrowserStateConnectingServer: - __ASSERT_ALWAYS( iState == EDiagBrowserStateConnectingBearer, - Panic( EDiagBrowserPluginBadState ) ); - break; - - case EDiagBrowserStateErasingLog: - __ASSERT_ALWAYS( iState != EDiagBrowserStateInitial, - Panic( EDiagBrowserPluginBadState ) ); - break; - - default: - Panic( EDiagBrowserPluginBadState ); - } - - // Update the state. Send progress to the observer. - iState = aTargetState; - iObserver.TestProgressL( aTargetState ); - } - -// --------------------------------------------------------------------------- -// Callback function for handling timer events. -// --------------------------------------------------------------------------- -// -TInt CDiagBrowserPluginModel::TimerExpired( TAny* aPtr ) - { - LOGSTRING2( "CDiagBrowserPluginModel::TimerExpired( 0x%x )", aPtr ) - - __ASSERT_ALWAYS( aPtr, Panic( EDiagBrowserPluginInternal ) ); - - CDiagBrowserPluginModel* myThis = - static_cast< CDiagBrowserPluginModel* >( aPtr ); - - // Stop the timer to prevent further undesired callbacks. - myThis->iTimer->Cancel(); - myThis->TimerCleanUp(); - // Try to continue test execution by retrying the secondary connection. - //TRAPD( error, myThis->RetryConnectionL() ); - return KErrNone; - } -void CDiagBrowserPluginModel::TimerCleanUp() -{ - - if (iState == EDiagBrowserStateConnectingBearer) - { - if(iTimerCalled<=1) - StartConnectionTimerL(); - else - iConnection.Stop( RConnection::EStopAuthoritative ); - } - else if (iState == EDiagBrowserStateConnectingServer) - iHttpTransaction.Cancel(); - -} -// --------------------------------------------------------------------------- -// Opens the network connection. This may be called multiple times if a -// retry is necessary. -// --------------------------------------------------------------------------- -TBool CDiagBrowserPluginModel::OpenAndStartConnectionL() - { - LOGSTRING( "CDiagBrowserPluginModel::OpenAndStartConnectionL()" ) - - // Check if there is a valid connection to use. - /*if ( !iPrimaryConnection.iIsValid && !iSecondaryConnection.iIsValid ) - { - LOGSTRING( "CDiagBrowserPluginModel::OpenAndStartConnectionL() - No" - L" valid connections." ) - return EFalse; - } - */ - - // Reset the connection. - iHttpTransaction.Close(); - iHttpSession.Close(); - iConnection.Stop(); - iState = EDiagBrowserStateInitial; - - iConnectionPrefs.SetDialogPreference(ECommDbDialogPrefPrompt);//ECommDbDialogPrefDoNotPrompt ECommDbDialogPrefPrompt - LOGSTRING("SetDialogPreference( ECommDbDialogPrefPrompt)"); - iConnectionPrefs.SetDirection( ECommDbConnectionDirectionOutgoing ); - //iConnectionPrefs.SetIapId( iapID ); - //iConnectionPrefs.SetBearerSet(ECommDbBearerGPRS); - iConnection.Start( iConnectionPrefs, iStatus ); - SetActive(); - ShowProgressNoteL(); - // Start the timer and set the state to notify progress. - StartConnectionTimerL(); - SetStateL( EDiagBrowserStateConnectingBearer ); - return ETrue; - } - -// --------------------------------------------------------------------------- -// Handles ending the test by deleting the logs, if necessary, and informing -// the observer. -// --------------------------------------------------------------------------- -void CDiagBrowserPluginModel::HandleTestEndL( - CDiagResultsDatabaseItem::TResult aResult ) - { - LOGSTRING2( "CDiagBrowserPluginModel::HandleTestEndL( %d )", aResult ) - - // Store the result, to return when log deletion completes. - iResult = aResult; - - // Delete the logs, if necessary. - if ( iState != EDiagBrowserStateInitial ) - { - if ( !iLogEraser ) - { - iLogEraser = CDiagLogEventEraser::NewL( *this ); - } - - // Set the filter for log erasing. - TUid eventType; - TTime now; - eventType.iUid = KLogPacketDataEventType; - now.UniversalTime(); - - CLogFilter& filter = iLogEraser->Filter(); - filter.SetEventType( eventType ); - filter.SetStartTime( iStartTime ); - filter.SetEndTime( now ); - - // Erase the logs from the test, asynchronously. - SetStateL( EDiagBrowserStateErasingLog ); - iLogEraser->StartAsyncEraseLogsL(); - } - else - { - iObserver.TestEndL( iResult ); - } - - - // clear the dialogue only if dialog is running. - if(idialogOn) - iWaitDialog->ProcessFinishedL(); - } -// ---------------------------------------------------------------------------- -// CDiagDataNetworkTestPDPEngine::ShowVibrationNoteL -// -// Progress Note -// ---------------------------------------------------------------------------- - -void CDiagBrowserPluginModel::ShowProgressNoteL() - { - if ( iWaitDialog ) - { - delete iWaitDialog; - iWaitDialog = NULL; - } - - - // WAIT NOTE DIALOG - iWaitDialog = new (ELeave) CAknWaitDialog( - (REINTERPRET_CAST(CEikDialog**, &iWaitDialog)), - ETrue); - - iWaitDialog->PrepareLC(R_BROWSER_PLUGIN_WAIT_NOTE); - iWaitDialog->SetCallback(this); - iWaitDialog->RunLD(); - idialogOn = ETrue; - LOGSTRING("CDiagBrowserPluginModel::ShowProgressNoteL()"); - - } - -//********************************************************* -// CallBack from AKnWaitDialog when Cancel is pressed -//********************************************************* - -void CDiagBrowserPluginModel::DialogDismissedL( TInt aButtonId ) - { - LOGSTRING2("CDiagBrowserPluginModel::DialogDismissedL() = %d",aButtonId); - - if (aButtonId == EBrowserTestCancel && idialogOn) - { - // cancel the tests based on which point the dialog is dismissed - LOGSTRING2("CDiagBrowserPluginModel::DialogDismissed @ iState= %d",iState); - if (iState == EDiagBrowserStateConnectingBearer) - iConnection.Stop( RConnection::EStopAuthoritative ); - else if (iState == EDiagBrowserStateConnectingServer) - iHttpTransaction.Cancel(); - iWaitDialog = NULL; - idialogOn = EFalse; - idialogDismissed = ETrue; - } - } -// --------------------------------------------------------------------------- -// Attempts to continue test execution by retrying with the secondary -// connection. -// --------------------------------------------------------------------------- -void CDiagBrowserPluginModel::RetryConnectionL() - { - LOGSTRING( "CDiagBrowserPluginModel::RetryConnectionL()" ); - - if (iRetryCount < 1 && !idialogDismissed) - { - if ( OpenAndStartConnectionL() ) - { - iRetryCount++; - return; - } - } - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - } - -// --------------------------------------------------------------------------- -// From class CActive. -// Active object run handler. -// --------------------------------------------------------------------------- -void CDiagBrowserPluginModel::RunL() - { - LOGSTRING( "CDiagBrowserPluginModel::RunL()" ) - - __ASSERT_ALWAYS( iState == EDiagBrowserStateConnectingBearer, - Panic( EDiagBrowserPluginBadState ) ); - - // Stop the timer. - if ( iTimer ) - { - iTimer->Cancel(); - } - - if (iStatus == KErrConnectionTerminated ) - { - HandleTestEndL( CDiagResultsDatabaseItem::ESkipped ); - return; - } - // Check if the connection succeeded. - if ( iStatus != KErrNone ) - { - LOGSTRING2( - "CDiagBrowserPluginModel::RunL() - connection failed. Error %d", - iStatus.Int() ) - LOGSTRING( "retry if possible()" ); - // Retry, if possible. - //RetryConnectionL(); - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - return; - } - - // Open the HTTP Session. - iHttpSession.OpenL(); - - // Associate the HTTP session with the open connection. - RStringPool pool = iHttpSession.StringPool(); - RHTTPConnectionInfo connInfo = iHttpSession.ConnectionInfo(); - connInfo.SetPropertyL( pool.StringF( HTTP::EHttpSocketServ, - RHTTPSession::GetTable() ), - THTTPHdrVal( iSocketServ.Handle() ) ); - TInt connectionPtr = reinterpret_cast< TInt >( &iConnection ); - connInfo.SetPropertyL( pool.StringF( HTTP::EHttpSocketConnection, - RHTTPSession::GetTable() ), - THTTPHdrVal( connectionPtr ) ); - - // Copy the URI to an 8-bit descriptor. Directly getting an 8-bit - // descriptor from Central Repository does not seem to work properly. - TBuf8< KMaxStringLength > uri8; - uri8.Copy( iUri ); - - TUriParser8 uriParser; - if ( uriParser.Parse( uri8 ) != KErrNone ) - { - LOGSTRING2( - "CDiagBrowserPluginModel::RunL() - parsing the uri '%S' failed.", - &iUri ) - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - return; - } - - // Create an HTTP transaction, setting the model as the callback object. - iHttpTransaction = iHttpSession.OpenTransactionL( uriParser, *this ); - iHttpTransaction.SubmitL(); - LOGSTRING2( "CDiagBrowserPluginModel::RunL() - HTTP transaction submitted" - L" for '%S'", - &iUri ) - - // Start the timer and set the state to notify progress. - StartConnectionTimerL(); - SetStateL( EDiagBrowserStateConnectingServer ); - } - -// --------------------------------------------------------------------------- -// From class CActive. -// Handles leaves in the active object's RunL function. -// --------------------------------------------------------------------------- -TInt CDiagBrowserPluginModel::RunError( TInt aError ) - { - LOGSTRING2( "CDiagBrowserPluginModel::RunError( %d )", aError ) - - // Try to continue test execution by retrying the secondary connection. - //TRAPD( error, RetryConnectionL() ); - //return error; - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// From class CActive. -// Active object cancel. -// --------------------------------------------------------------------------- -void CDiagBrowserPluginModel::DoCancel() - { - LOGSTRING( "CDiagBrowserPluginModel::DoCancel()" ) - - // Does not have an asynchronous cancel, but this functions as Cancel. - iConnection.Stop( RConnection::EStopAuthoritative ); - } - -// --------------------------------------------------------------------------- -// From class MHTTPTransactionCallback. -// Called when an event occurs on an HTTP transaction. -// --------------------------------------------------------------------------- -void CDiagBrowserPluginModel::MHFRunL( RHTTPTransaction aTransaction, - const THTTPEvent& aEvent ) - { - LOGSTRING2( "CDiagBrowserPluginModel::MHFRunL() - aEvent.iStatus %d", - aEvent.iStatus ) - - __ASSERT_ALWAYS( iState == EDiagBrowserStateConnectingServer, - Panic( EDiagBrowserPluginBadState ) ); - __ASSERT_ALWAYS( aTransaction.Id() == iHttpTransaction.Id(), - Panic( EDiagBrowserPluginTransaction ) ); - - // Failed status. - if ( aEvent == THTTPEvent::EFailed ) - { - LOGSTRING( "CDiagBrowserPluginModel::MHFRunL() - Response failed." ) - //RetryConnectionL(); - //return; - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - } - - // Skip non-success / non-failure statuses. - if ( aEvent != THTTPEvent::EGotResponseHeaders && - aEvent != THTTPEvent::EGotResponseBodyData && - aEvent != THTTPEvent::EResponseComplete && - aEvent != THTTPEvent::ESucceeded && - aEvent != THTTPEvent::ERequestComplete ) - { - LOGSTRING( "CDiagBrowserPluginModel::MHFRunL() - Unused event." ) - return; - } - - // Stop the request, so we don't get any further callbacks. - iHttpTransaction.Cancel(); - - // Get the HTTP response code and check it. - RHTTPResponse response = aTransaction.Response(); - if ( response.StatusCode() != KHttpResponseCodeOk ) - { - LOGSTRING2( "CDiagBrowserPluginModel::MHFRunL() - status code is %d", - response.StatusCode() ) - HandleTestEndL( CDiagResultsDatabaseItem::EFailed ); - } - else - { - LOGSTRING( - "CDiagBrowserPluginModel::MHFRunL() - connection succeeded" ) - HandleTestEndL( CDiagResultsDatabaseItem::ESuccess ); - } - } - -// --------------------------------------------------------------------------- -// From class MHTTPTransactionCallback. -// Called when an error occurs on an HTTP transaction. -// --------------------------------------------------------------------------- -TInt CDiagBrowserPluginModel::MHFRunError( TInt aError, - RHTTPTransaction aTransaction, - const THTTPEvent& /* aEvent */ ) - { - LOGSTRING2( "CDiagBrowserPluginModel::MHFRunError( %d )", aError ) - - __ASSERT_ALWAYS( iState == EDiagBrowserStateConnectingServer, - Panic( EDiagBrowserPluginBadState ) ); - __ASSERT_ALWAYS( aTransaction.Id() == iHttpTransaction.Id(), - Panic( EDiagBrowserPluginTransaction ) ); - - // Try to continue test execution by retrying the secondary connection. - TRAPD( error, RetryConnectionL() ); - return error; - } - -// --------------------------------------------------------------------------- -// From class MDiagLogEventEraserObserver. -// This function checks if the log event needs to be deleted. -// --------------------------------------------------------------------------- -TBool CDiagBrowserPluginModel::IsEventToBeDeleted( const CLogEvent& aEvent ) - { - LOGSTRING( "CDiagBrowserPluginModel::IsEventToBeDeleted()" ) - - if ( ( iPrimaryConnection.iUsed && aEvent.RemoteParty().Compare( - iPrimaryConnection.iMethodName ) == 0 ) || - ( iSecondaryConnection.iUsed && aEvent.RemoteParty().Compare( - iSecondaryConnection.iMethodName ) == 0 ) ) - { - // The name matches, so delete the log entry. - return ETrue; - } - - return EFalse; - } - -// --------------------------------------------------------------------------- -// From class MDiagLogEventEraserObserver. -// This function notifies that the erase operation is complete. -// --------------------------------------------------------------------------- -void CDiagBrowserPluginModel::CompleteEventEraseL( TInt aError ) - { - LOGSTRING2( - "CDiagBrowserPluginModel::CompleteEventEraseL( %d )", aError ) - - __ASSERT_ALWAYS( iState == EDiagBrowserStateErasingLog, - Panic( EDiagBrowserPluginBadState ) ); - - // The error code is ignored, because it's not part of the criteria for - // the test to pass. We are deleting logs asynchronously, so the browser - // portion of the test has already stored a result in iResult. - iState = EDiagBrowserStateInitial; - - // dialog dismissed with Cancel - - if (idialogDismissed) - iResult = CDiagResultsDatabaseItem::ESkipped; - - LOGSTRING2( "CDiagBrowserPluginModel::dialogDismissed = %d)", idialogDismissed) - iObserver.TestEndL( iResult ); - } - -// End of File