devicediagnostics/diagplugins/diagbrowserplugin/inc/diagbrowserpluginmodel.h
changeset 0 3ce708148e4d
--- /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