browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpConnHandler.h
changeset 0 dd21522fd290
child 58 220a17280356
child 68 92a765b5b3e7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpConnHandler.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,446 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  ?Description
+*
+*/
+
+
+
+#ifndef HTTPCONNHANDLER_H
+#define HTTPCONNHANDLER_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <es_sock.h>
+#include <http.h>
+#include <CommDbConnPref.h>
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// DATA TYPES
+//enum ?declaration
+//typedef ?declaration
+//extern ?data_type;
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+class CHttpClientAppInstance;
+class CHttpClientApp;
+class CHttpConnHandler;
+
+// CLASS DECLARATION
+
+class MConnectionCallback
+    {
+    public:
+
+        virtual void Connected() = 0;
+        virtual void Suspended() = 0;
+        // called if the connection is closed
+        // from outside (e.g. network loss)
+        virtual void Disconnected() = 0;
+        virtual void ConnectionFailed( TInt aError ) = 0;
+    };
+
+class MShutdownObserver
+    {
+    public:
+
+        virtual void ShutDown( TBool aFromDestructor = EFalse ) = 0;
+    };
+
+/**
+*  Connection handler's shutdown timer.
+*/
+NONSHARABLE_CLASS( CHttpConnShutdownTimer ) : public CActive
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CHttpConnShutdownTimer* NewL( MShutdownObserver* aObserver );
+
+        /**
+        * Destructor.
+        */
+        ~CHttpConnShutdownTimer();
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CHttpConnShutdownTimer( MShutdownObserver* aObserver );
+
+        /**
+        * Default Symbian 2nd phase constructor .
+        */
+        void ConstructL();
+
+    public: // New functions
+
+        /**
+        * Starts the timer.
+        * @param 
+        * @return
+        */
+        void Start( TInt aTimeOut );
+
+    private: // From CActive
+
+        /**
+        * Cancels the timer.
+        * @param 
+        * @return
+        */
+        void DoCancel();
+
+        /**
+        * Handles an active object’s request completion event.
+        * @param 
+        * @return
+        */
+        void RunL();
+
+    private: // Data
+
+        RTimer iTimer;
+        MShutdownObserver* iObserver;   // owned
+    };
+
+class MConnectionObserver
+    {
+    public:
+
+        virtual void ConnectionStageChanged( TInt aStage ) = 0;
+        virtual void ConnectionError( TInt aError ) = 0;
+    };
+
+/**
+*  ?one_line_short_description.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since Series 60 v2.8
+*/
+NONSHARABLE_CLASS( CHttpConnStageNotifier ) : public CActive
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CHttpConnStageNotifier* NewL( CHttpConnHandler* aConnHandler );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CHttpConnStageNotifier();
+
+    public: // New functions
+        
+        /**
+        * Starts connection stage notification
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void Start();
+
+    public: // Functions from base classes
+
+        /**
+        * methods from CActive
+        */
+	    void DoCancel();
+	    void RunL();
+        
+    protected:  // New functions
+        
+    protected:  // Functions from base classes
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CHttpConnStageNotifier( CHttpConnHandler* aConnHandler );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // CHttpConnStageNotifier( const CHttpConnStageNotifier& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // CHttpConnStageNotifier& operator=( const CHttpConnStageNotifier& );
+
+    public:     // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+    
+    protected:  // Data
+
+        CHttpConnHandler* iConnHandler;     // pointer to CHttpConnHandler.
+                                            // Not owned by this class!
+        TNifProgressBuf iProgressBuf;
+
+    private:    // Data
+
+    public:     // Friend classes
+    protected:  // Friend classes
+    private:    // Friend classes
+    };
+
+/**
+*  ?one_line_short_description.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since Series 60 v2.8
+*/
+NONSHARABLE_CLASS( CHttpConnHandler ) : public CActive,
+                                        public MConnectionObserver,
+                                        public MShutdownObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CHttpConnHandler* NewL( CHttpClientApp* aClientApp );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CHttpConnHandler();
+
+    public: // New functions
+        
+        /**
+        * Starts asynchronous connect to the network.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void ConnectL();
+
+        /**
+        * Disconnects from the network. Counts how many download still
+        * using this connection. If there is no more, starts disconnection 
+        * timer.
+        * @since Series 60 v2.8
+        * @param aExit if ETrue disconnects at once
+        * @return none.
+        */
+        void Disconnect( TBool aAtOnce = EFalse,
+                         CHttpDownload* aDownload = NULL );
+
+        /**
+        * Returns associated IAP id.
+        * @since Series 60 v2.8
+        * @return IAPid used to create connection
+        */
+        TUint32 IapId() const;
+
+        /**
+        * Returns associated client application.
+        * @since Series 60 v2.8
+        * @return pointer to the client application. Ownership not passed.
+        */
+        CHttpClientApp* ClientApp() const;
+
+        /**
+        * Returns associated client application instance.
+        * @since Series 60 v2.8
+        * @return pointer to the client application instance. Ownership not passed.
+        */
+        CHttpClientAppInstance* ClientAppInst() const;
+
+        /**
+        * Returns the HTTP session.
+        * @since Series 60 v2.8
+        * @return HTTP session
+        */
+        RHTTPSession& Session();
+
+        /**
+        * Returns the RConnection.
+        * @since Series 60 v2.8
+        * @return reference to the RConnection
+        */
+        RConnection& Connection();
+
+        /**
+        * See EDlMgrConnectionName.
+        * @since Series 60 v2.8
+        * @return none. Leaves on failure.
+        */
+        HBufC* ConnectionNameL( TBool& aDelete );
+
+        /**
+        * See EDlMgrAPName.
+        * @since Series 60 v2.8
+        * @return none. Leaves on failure.
+        */
+        void APNameL( TPtrC16& aValue );
+
+        /**
+        * Returns the connection state.
+        * @since Series 60 v2.8
+        * @return ETrue if connected
+        */
+        TBool IsConnected();
+
+        /**
+        * Associates connection handler with the given client application
+        * instance.
+        * @since Series 60 v2.8
+        * @param aClientInst client instance to use this connection handler
+        * @return none.
+        */
+        void SetClientAppInst( CHttpClientAppInstance* aClientInst );
+
+        /**
+        * Sets IAP id to be used to create connection.
+        * Cannot be called after connection is created.
+        * @since Series 60 v2.8
+        * @param IAP id to be used to create connection.
+        * @return none.
+        */
+        void SetIapId( TUint32 aIapId );
+
+        /**
+        * Set connection name to be used to clone an already exist connection
+        * IAP id is ignored in this case.
+        */
+        void SetConnectionNameL( const TDesC& aConnName );
+
+    public: // Functions from base classes
+
+        /**
+        * methods from CActive
+        */
+        void DoCancel();
+        void RunL();
+
+        /**
+        * methods from CHttpConnStageNotifier
+        */
+        void ConnectionStageChanged( TInt aStage );
+        void ConnectionError( TInt aError );
+
+        /**
+        * methods from MShutdownObserver
+        */
+        void ShutDown( TBool aFromDestructor = EFalse );
+        
+    protected:  // New functions
+        
+        /**
+        * Initializes HTTP session.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void InitSessionL();
+
+        /**
+        * Sets connection info in HTTP session.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void SetConnectionInfoL();
+
+        /**
+        * Called if connection is successfully created.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void Connected();
+
+        /**
+        * Returns the number of downloads using this connection handler.
+        * @since Series 60 v2.8
+        * @return number of downloads using this connection handler
+        */
+        TInt Referencies();
+        
+        /**
+        * Updates iIapId after connection made.
+        * @since Series 60 v3.0
+        * @return None.
+        */
+        void UpdateIapId();
+
+    protected:  // Functions from base classes
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CHttpConnHandler( CHttpClientApp* aClientApp );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    public:     // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+    
+    protected:  // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+        RHTTPSession    iHttpSession;
+        RConnection     iConnection;
+        TCommDbConnPref iPref;
+        TUint32         iIapId;             // See EDlMgrIap
+        CHttpClientAppInstance* iClientInst;// Associated client app instance. not owned
+        CHttpClientApp* iClientApp;         // This is needed because instance can be
+                                            // closed while associated conn handler 
+                                            // stays active. not owned
+        CHttpConnStageNotifier* iConnNotif; // Connection stage notifier. owner
+        CHttpConnShutdownTimer* iShutDown;  // Shutdown timer after last reference is closed.
+                                            // owned
+
+        TInt    iConnStage;
+        HBufC*  iConnName;                  // owned
+
+    private:    // Data
+
+        TBool iNewConnection;
+        
+        // Reserved pointer for future extension
+        //TAny* iReserved;
+
+    public:     // Friend classes
+        //?friend_class_declaration;
+    protected:  // Friend classes
+        //?friend_class_declaration;
+    private:    // Friend classes
+        //?friend_class_declaration;
+
+    };
+
+#endif      // HTTPCONNHANDLER_H   
+            
+// End of File