ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h
changeset 0 ba25891c3a9e
child 4 3eebb1e54d3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/engine/transport/inc/catalogshttpdownloadmanagerimpl.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,347 @@
+/*
+* Copyright (c) 2006-2008 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:  
+*
+*/
+
+
+#ifndef C_CATALOGSHTTPDOWNLOADMANAGER_H
+#define C_CATALOGSHTTPDOWNLOADMANAGER_H
+
+#include <DownloadMgrClient.h>
+
+#include "catalogstransportoperationid.h"
+#include "catalogshttpsession.h"    // RCatalogsHttpOperationArray
+#include "catalogshttpsessionmanager.h"
+#include "catalogsconnectionmethod.h"
+#include "catalogsaccesspointobserver.h"
+
+class MCatalogsHttpConfig;
+class CCatalogsHttpConfig;
+class CCatalogsHttpDownload;
+class MCatalogsHttpOperation;
+class MCatalogsHttpObserver;
+class MCatalogsHttpSessionManager;
+class MCatalogsHttpTransactionManager;
+class CCatalogsHttpConnectionManager;
+class CCatalogsHttpSession;
+class CCatalogsConnection;
+class CCatalogsNetworkManager;
+
+/**
+ * HTTP file download manager
+ *
+ */
+class CCatalogsHttpDownloadManager :       
+    public CActive, 
+    public MHttpDownloadMgrObserver,
+    public MCatalogsAccessPointObserver  
+    {
+    public: // Constructors and destructor
+    
+        /**
+        * Creator
+        *
+        * @param aSessionId Session ID
+        * @return A new download manager
+        */
+        static CCatalogsHttpDownloadManager* NewL( 
+            MCatalogsHttpSessionManager& aManager, 
+            CCatalogsHttpSession& aSession,
+            TInt32 aSessionId,
+            MCatalogsHttpTransactionManager& aTransactionManager,
+            CCatalogsHttpConnectionManager& aConnectionManager,
+            TBool aCleanup );
+        
+        
+        /**
+        * Destructor
+        */
+        virtual ~CCatalogsHttpDownloadManager();
+        
+    public: // New methods
+    
+	    /**
+	    * Creates a new download operation
+	    * 
+	    * @param aUrl URL to download
+	    * @param aStart If true, download is started automatically. Otherwise
+	    * the caller must start it explicitly. Default: true
+	    * @param aObserver Observer for the download. Must be given if the 
+	    * default observer in the session configuration is NULL. Default: NULL
+	    * 
+	    * @return A new download operation
+	    */
+        MCatalogsHttpOperation* CreateDownloadL( const TDesC16& aUrl,
+            TBool aStart, MCatalogsHttpObserver* aObserver );
+
+        MCatalogsHttpOperation* CreateDownloadL( const TDesC8& aUrl,
+            TBool aStart, MCatalogsHttpObserver* aObserver );
+        
+        /**
+        * Download getter
+        *
+        * Returns the download that matches the id or NULL
+        * 
+        * @param aId Download ID
+        * @return Download or NULL
+        */
+        MCatalogsHttpOperation* Download( 
+            const TCatalogsTransportOperationId& aId ) const;
+        
+        
+        /**
+        * Returns a list of current downloads
+        * @return Download list
+        */
+        const RCatalogsHttpOperationArray& CurrentDownloads() const;
+        
+        
+        /**
+        * Returns an array of downloads restored from the previous session. 
+        *
+        * The client should always call this method and either delete the 
+        * downloads or restore them after setting the observer for them.
+        *
+        * @return Array of restored downloads
+        */
+        const RCatalogsHttpOperationArray& RestoredDownloads() const;
+        
+        
+        /**
+        * Cancels all downloads
+        */
+        void CancelAll();
+                        
+        
+        /**
+         * 
+         */                
+        void NotifyCancelAll();
+
+        /**
+         * Deletes restored downloads
+         */
+        void DeleteRestoredDownloads();
+        
+        /**
+        * Default download configuration getter
+        *
+        * @return Default download configuration
+        */
+        MCatalogsHttpConfig& DefaultConfig() const;
+        
+        
+        /**
+         * Moves a download from restored downloads to current downloads
+         *
+         * @param aDownload Download to move
+         * @return KErrNone if successful, otherwise a Symbian error code
+         * @note A restored download is moved to current downloads
+         * when it is started but this method can be used to move it there
+         * earlier.
+         */
+        TInt MoveRestoredDlToCurrentDls( 
+            MCatalogsHttpOperation& aDownload );
+        
+    public: 
+
+        void AddRef();
+
+
+        TInt Release();    
+        
+        void SetConnectionMethodL( 
+            const TCatalogsConnectionMethod& aMethod );
+
+
+        void SetConnectionL(
+            CCatalogsConnection& aConnection );
+            
+        TInt32 SessionId() const;
+    
+        
+        void RemoveDownload( MCatalogsHttpOperation* aDownload );
+    
+    
+        MCatalogsHttpOperation* CreateDlTransactionL( 
+            const TDesC8& aUrl, 
+            MCatalogsHttpObserver& aObserver,
+            const CCatalogsHttpConfig& aConfig );
+    
+    
+        TInt StartOperation( MCatalogsHttpOperation* aOperation );
+
+        TInt PauseOperation( MCatalogsHttpOperation* aOperation );
+                
+        TInt CompleteOperation( MCatalogsHttpOperation* aOperation );
+    
+        
+        void ReportConnectionStatus( TBool aActive );
+        
+        TInt OperationPriorityChanged( MCatalogsHttpOperation* aOperation );
+        
+        
+        CCatalogsHttpConnectionCreator& ConnectionCreatorL();
+    
+
+        CCatalogsHttpConnectionManager& ConnectionManager();
+                
+        CDocumentHandler& DocumentHandler();
+        
+        TInt NewDownloadId();
+        
+        RHttpDownload& CreatePlatformDownloadL( const TDesC8& aUrl );
+    
+    public: // From MHttpDownloadMngrObserver
+     
+        /**
+        * Handles events from Download manager 
+        */
+        virtual void HandleDMgrEventL( RHttpDownload& aDownload,
+			THttpDownloadEvent aEvent );    
+
+
+    public: // from MCatalogsAccessPointObserver
+    
+        virtual void HandleAccessPointEventL( 
+            const TCatalogsConnectionMethod& aAp,
+            const TCatalogsAccessPointEvent& aEvent );
+    
+    
+    protected: // CActive
+    
+        virtual void RunL();
+        virtual void DoCancel();
+        virtual TInt RunError( TInt aError );
+                    
+    private: // Constructors
+    
+        /**
+        * Constructor
+        */        
+        CCatalogsHttpDownloadManager( 
+            MCatalogsHttpSessionManager& aManager, 
+            CCatalogsHttpSession& aSession,
+            TInt32 aSessionId, 
+            MCatalogsHttpTransactionManager& aTransactionManager,
+            CCatalogsHttpConnectionManager& aConnectionManager );
+        
+        /**
+        * 2nd phase constructor
+        */
+        void ConstructL( TBool aCleanup );
+        
+        
+    private:
+    
+        /**
+        * Restores downloads from previous session
+        */
+        void RestoreDownloadsL();
+        
+        
+        /**
+        * Searches for the given download from the given array and returns
+        * an index to it or KErrNotFound.
+        *
+        * @param aArray Array to search from
+        * @param aDownload Download to find
+        * @return Index to the download in iDownloads
+        */      
+        TInt FindInDownloads( 
+            const RCatalogsHttpOperationArray& aArray,
+            RHttpDownload* aDownload ) const;
+
+
+        /**
+        * Searches for the given download from the given array and returns
+        * an index to it or KErrNotFound.
+        *
+        * @param aArray Array to search from
+        * @param aDownload Download to find
+        * @return Index to the download in iDownloads
+        */      
+        TInt FindInDownloads( 
+            const RCatalogsHttpOperationArray& aArray,
+            MCatalogsHttpOperation* aDownload ) const;
+ 
+
+    private:
+    
+        /**
+         * Download events
+         */
+        class TDownloadEvent        
+            {
+        public:
+            RHttpDownload* iDownload;   // not owned
+			THttpDownloadEvent iEvent;
+			
+			TDownloadEvent( RHttpDownload& aDownload, 
+			    THttpDownloadEvent& aEvent ) :
+			    iDownload( &aDownload ), iEvent( aEvent ) 
+			        {
+			        }
+            };
+
+
+        /**
+         * Sets this object active if event queue has unhandled events
+         */
+        void ContinueEventHandling();
+        
+        /**
+         * Removes events from event queue that belong to the same 
+         * RHttpDownload as aEvent
+         */
+        void RemoveUnhandledEvents( 
+            const TDownloadEvent& aEvent );
+
+        void RemoveUnhandledProgressEvents( 
+            const TDownloadEvent& aEvent );
+
+        /**
+         * Deletes downloads that have not been paused by the user
+         */
+        void DeleteHangingDownloads();
+        
+        
+    private:
+    
+        MCatalogsHttpSessionManager& iManager;
+        CCatalogsHttpSession& iSession;
+        MCatalogsHttpTransactionManager& iTrManager;
+        CCatalogsHttpConnectionManager& iConnectionManager;
+        CCatalogsNetworkManager* iNetworkManager; // Not owned
+        TInt32 iSessionId;
+        RHttpDownloadMgr iDmgr;
+        
+        // All downloads except those that are in Restored
+        RCatalogsHttpOperationArray iDownloads;
+        RCatalogsHttpOperationArray iRestoredDownloads;
+                
+        CCatalogsHttpConfig* iDefaultConfig;    // owned
+        TBool iCancellingAll;
+        
+        TInt iRefCount;
+        
+        RFs iFs;
+        TCatalogsConnectionMethod iCurrentAp;
+
+        RArray<TDownloadEvent> iEventQueue;
+        TInt iCurrentDlId; // id of the last created download
+    };
+
+#endif // C_CATALOGSHTTPDOWNLOADMANAGER_H