--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devicediagnostics/diagplugins/diagbrowserplugin/inc/diagbrowserpluginmodel.h Thu Dec 17 08:40:12 2009 +0200
@@ -0,0 +1,357 @@
+/*
+* 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 declaration of the Browser Test Plugin Model.
+*
+*/
+
+
+#ifndef DIAGBROWSERPLUGINMODEL_H
+#define DIAGBROWSERPLUGINMODEL_H
+
+// System Include Files
+#include <e32base.h> // CActive
+#include <commdbconnpref.h> // TCommDbConnPref
+#include <es_sock.h> // RSocketServ, RConnection
+#include <http/rhttpsession.h> // RHTTPSession
+#include <http/rhttptransaction.h> // RHTTPTransaction
+#include <http/mhttptransactioncallback.h> // MHTTPTransactionCallback
+#include <DiagResultsDatabaseItem.h> // CDiagResultsDatabaseItem
+#include <diaglogeventeraserobserver.h> // MDiagLogEventEraserObserver
+#include <AknWaitDialog.h>
+// Forward Declarations
+class MDiagBrowserPluginModelObserver;
+class CPeriodic;
+class CDiagLogEventEraser;
+class RCmConnectionMethod;
+
+// Local Constants
+const TInt KMaxStringLength = ( 512 );
+
+/**
+ * Diagnostics Browser Test Plugin Model.
+ * This class defines the model for the browser test plugin. This class is
+ * used to validate end-to-end browser (HTTP) functionality.
+ *
+ * @lib euser.lib
+ * @lib commonengine.lib
+ * @lib centralrepository.lib
+ * @lib cmmanager.lib
+ * @lib commdb.lib
+ * @lib inetprotutil.lib
+ * @lib http.lib
+ * @lib esock.lib
+ * @lib flogger.lib
+ * @lib logcli.lib
+ * @lib diagframework.lib
+ */
+class CDiagBrowserPluginModel : public CActive,
+ public MHTTPTransactionCallback,
+ public MDiagLogEventEraserObserver,
+ public MProgressDialogCallback
+ {
+
+public: // New functions
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aObserver The model observer to report events to.
+ * @return An instance of CDiagBrowserPluginModel.
+ */
+ static CDiagBrowserPluginModel* NewL(
+ MDiagBrowserPluginModelObserver& aObserver );
+
+ /**
+ * Destructor.
+ */
+ ~CDiagBrowserPluginModel();
+
+ /**
+ * Initiates the browser test.
+ */
+ void RunBrowserTestL();
+
+ /**
+ * Returns the total number of execution steps.
+ *
+ * @return The total number of execution steps.
+ */
+ static TUint TotalSteps();
+
+
+private: // Data types
+
+ /**
+ * Enumerates the states in the browser test. These are also used to
+ * report test progress information.
+ */
+ enum TDiagBrowserState
+ {
+ EDiagBrowserStateInitial = 0,
+ EDiagBrowserStateConnectingBearer,
+ EDiagBrowserStateConnectingServer,
+ EDiagBrowserStateErasingLog,
+ EDiagBrowserStateMax
+ };
+
+ /**
+ * Holds information about the connection methods used in the test.
+ */
+ struct TBrowserConnectionMethodData
+ {
+ /** The access point of this connection method. */
+ TBuf< KMaxStringLength > iApn;
+
+ /** The name of this connection method. */
+ TBuf< KMaxStringLength > iMethodName;
+
+ /** The access point id of this connection method. */
+ TUint iApId;
+
+ /** Indicates if this connection method contains valid data. */
+ TBool iIsValid;
+
+ /** Indicates if this connection method was attempted. */
+ TBool iUsed;
+ };
+
+
+private: // New functions
+
+ /**
+ * The default constructor.
+ */
+ CDiagBrowserPluginModel( MDiagBrowserPluginModelObserver& aObserver );
+
+ /**
+ * Two-phased constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Reads and stores the browser test's Central Repository Keys.
+ *
+ * @return ETrue if the operation succeeded, EFalse otherwise.
+ */
+ TBool ReadCenRepKeysL();
+
+ /**
+ * Finds the connection method that corresponds to the data supplied in the
+ * argument. Updates the argument object with the connection method data.
+ *
+ * @param aData The connection method data to search with and update.
+ */
+ void GetConnectionMethodL( TBrowserConnectionMethodData& aData );
+
+ /**
+ * Checks if the connection method matches the data supplied in the
+ * argument. Updates the argument object with the connection method data.
+ *
+ * @param aMethod The connection method to compare with.
+ * @param aData The connection method data to search with and update.
+ */
+ void CheckConnectionMatchL( const RCmConnectionMethod& aMethod,
+ TBrowserConnectionMethodData& aData ) const;
+
+ /**
+ * Starts or resets the connection timeout timer.
+ */
+ void StartConnectionTimerL();
+
+ /**
+ * Updates the plugin's state and reports progress to the observer.
+ *
+ * @param aTargetState The new state to transition to.
+ */
+ void SetStateL( TDiagBrowserState aTargetState );
+
+ /**
+ * Callback function for handling timer events.
+ *
+ * @param aPtr A pointer to the instance of the browser test model.
+ * @return An error code for the CPeriodic framework.
+ */
+ static TInt TimerExpired( TAny* aPtr );
+
+ /**
+ * Opens the network connection. May be called multiple times if a retry
+ * is necessary.
+ *
+ * @return ETrue if the operation succeeded, EFalse otherwise.
+ */
+ TBool OpenAndStartConnectionL();
+
+ /**
+ * Handles ending the test by deleting the logs, if necessary, and
+ * informing the observer.
+ *
+ * @param aResult The test result to complete with.
+ */
+ void HandleTestEndL( CDiagResultsDatabaseItem::TResult aResult );
+
+ /**
+ * Retries the connection on the secondary access point, if available, or
+ * fails the test.
+ */
+ void RetryConnectionL();
+
+ /**
+ * Wait Dialog
+ *
+ */
+ void ShowProgressNoteL();
+ void TimerCleanUp();
+
+private: // from MProgressDialogCallback
+
+ /**
+ * Called when the progress dialog is dismissed.
+ *
+ * @param aButtonId - indicate which button made dialog to dismiss
+ */
+ virtual void DialogDismissedL( TInt aButtonId );
+
+private: // From base class CActive
+
+ /**
+ * From CActive.
+ * Handles active object completion events.
+ */
+ virtual void RunL();
+
+ /**
+ * From CActive.
+ * Handles leaves in the active object's RunL function.
+ */
+ virtual TInt RunError( TInt aError );
+
+ /**
+ * From CActive.
+ * Handle active object cancel event.
+ */
+ virtual void DoCancel();
+
+
+private: // From base class MHTTPTransactionCallback
+
+ /**
+ * From MHTTPTransactionCallback.
+ * Called when an event occurs on an HTTP transaction.
+ *
+ * @param aTransaction The transaction the event occured on.
+ * @param aEvent The event that occurred.
+ */
+ virtual void MHFRunL( RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+ /**
+ * From MHTTPTransactionCallback.
+ * Called when an error occurs on an HTTP transaction.
+ *
+ * @param aError The error code.
+ * @param aTransaction The transaction the error occured on.
+ * @param aEvent The event that occurred.
+ * @return An error code indicating if this error was handled.
+ */
+ virtual TInt MHFRunError( TInt aError,
+ RHTTPTransaction aTransaction,
+ const THTTPEvent& aEvent );
+
+
+private: // From base class MDiagLogEventEraserObserver
+
+ /**
+ * This function is called to check if the log event needs to be deleted.
+ *
+ * @param aEvent The event to check.
+ * @return ETrue if the log event should be deleted, EFalse otherwise.
+ */
+ virtual TBool IsEventToBeDeleted( const CLogEvent& aEvent );
+
+ /**
+ * This function is called to notify that the erase operation is complete.
+ *
+ * @param aError Error code to indicate erase failure, or KErrNone.
+ */
+ virtual void CompleteEventEraseL( TInt aError );
+
+
+private: // Data
+
+ /** The socket server session used by the test. */
+ RSocketServ iSocketServ;
+
+ /** The network connection used by the test. */
+ RConnection iConnection;
+
+ /** The HTTP session used by the test. */
+ RHTTPSession iHttpSession;
+
+ /** The HTTP transaction used by the test. */
+ RHTTPTransaction iHttpTransaction;
+
+ /** The connection preferences, used to establish the data connection. */
+ TCommDbConnPref iConnectionPrefs;
+
+ /** The timeout timer. Own. */
+ CPeriodic* iTimer;
+
+ /** The log eraser, used to remove the data usage from the OS log. Own. */
+ CDiagLogEventEraser* iLogEraser;
+
+ /** The state of the test. */
+ TDiagBrowserState iState;
+
+ /** The time testing started. Used to filter logs for deletion. */
+ TTime iStartTime;
+
+ /** The primary connection method's data. */
+ TBrowserConnectionMethodData iPrimaryConnection;
+
+ /** The secondary connection method's data. */
+ TBrowserConnectionMethodData iSecondaryConnection;
+
+ /** The address of the proxy server to use (from CenRep). */
+ TBuf< KMaxStringLength > iProxyAddress;
+
+ /** The port of the proxy server to use (from CenRep). */
+ TInt iProxyPort;
+
+ /** The timeout value to use (from CenRep). */
+ TInt iTimeoutValue;
+
+ /** The web page to retrieve (from CenRep). */
+ TBuf< KMaxStringLength > iUri;
+
+ /** The test result to return. Used to hold the result while deleting logs
+ * asynchronously.
+ */
+ CDiagResultsDatabaseItem::TResult iResult;
+
+ /** The model's observer, where events are reported. */
+ MDiagBrowserPluginModelObserver& iObserver;
+ // Retrycount
+ TInt iRetryCount,iTimerCalled;
+
+ /**
+ *
+ * Wait Dialog
+ *
+ */
+
+ CAknWaitDialog* iWaitDialog;
+ TBool idialogOn,idialogDismissed;
+ };
+
+#endif // DIAGBROWSERPLUGINMODEL_H