browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownloadManagerServerEngine.h
changeset 0 dd21522fd290
child 24 9993978961bf
child 36 0ed94ceaa377
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownloadManagerServerEngine.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,422 @@
+/*
+* 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:  
+*       This class implements download manager.
+*
+*/
+
+
+
+#ifndef HTTPDOWNLOADMANAGER_H
+#define HTTPDOWNLOADMANAGER_H
+
+//  INCLUDES
+#include "HttpDownload.h"
+
+#include <HttpDownloadMgrCommon.h>
+#include <e32std.h>
+#include <f32file.h>
+
+#include <e32property.h>
+#include <UikonInternalPSKeys.h>
+
+// CONSTANTS
+const TInt KMaxDriveListStrLen = KMaxDrives << 1;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// DATA TYPES
+//enum ?declaration
+//typedef ?declaration
+//extern ?data_type;
+
+// FUNCTION PROTOTYPES
+#if defined(_DEBUG)
+void DMPanic( TInt aPanicCode );
+#else
+#define DMPanic( a )
+#endif
+
+// FORWARD DECLARATIONS
+class CHttpDownload;
+class CHttpClientApp;
+class CHttpClientAppInstance;
+class RFs;
+class CDocumentHandler;
+
+// CLASS DECLARATION
+
+NONSHARABLE_CLASS( MMMCObserver )
+    {
+    public:
+    
+        virtual void MMCModeChanged( TBool aAllowed ) = 0;
+    };
+    
+NONSHARABLE_CLASS( CMMCNotifier ) : public CActive
+	{
+	public:
+	
+		/**
+		* constructor
+		*/
+		CMMCNotifier( RProperty* aProperty );
+		
+		/**
+		* Destructor
+		*/
+		virtual ~CMMCNotifier();
+		
+		void StartObserving( MMMCObserver* aObserver );
+		
+	public: // from CActive
+	
+	    virtual void RunL();
+	    virtual void DoCancel();
+	
+	private:
+	
+		RProperty* iProperty;
+		MMMCObserver* iObserver;
+	};
+
+typedef struct
+    {
+    TInt    iDriveLetter;
+    TInt    iDriveId;
+    TBool   iRemovable;
+    }TDriveStr;
+    
+/**
+*  This class maintains the list of all existing downloads and applications
+*  they initiated from.
+*
+*  @lib DManager.lib
+*  @since S60 2.8
+*/
+NONSHARABLE_CLASS( CHttpDownloadManagerServerEngine ) : public CBase
+                                                       ,public MMMCObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        IMPORT_C static CHttpDownloadManagerServerEngine* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CHttpDownloadManagerServerEngine();
+
+    public: // New functions
+        
+        /**
+        * Closes the engine.
+        * @since Series 60 v2.8
+        * @param aStore if ETrue 
+        * @return none.
+        */
+        IMPORT_C void CloseEngine( TBool aStore = ETrue );
+
+        /**
+        * Creates a new client application instance
+        * @since Series 60 v2.8
+        * @param aAppUid UId of the client application
+        * @param aObserver download state observer
+        * @param aGetAllPendingDownloads if ETrue this instance gets all non-attached downloads
+        * @return pointer to the created instance. Ownership now passed.
+        */
+        IMPORT_C CHttpClientAppInstance* CreateNewClientAppInstanceL( 
+                                        TUint32 aAppUid, 
+                                        MDownloadStateObserver* aObserver,
+                                        TBool aGetAllPendingDownloads );
+
+        /**
+        * Closes the given client application instance.
+        * @since Series 60 v2.8
+        * @param aAppInst client instance to be closed
+        * @return none.
+        */
+        IMPORT_C void CloseClientInstance( CHttpClientAppInstance* aAppInst );
+
+        /**
+        * Returns the number of active download in the engine. 
+        * @since Series 60 v2.8
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        EXPORT_C TInt ActiveDownloads() const;
+
+        /**
+        * Calculates the total size of all on-going downloads in the 
+        * Download manager. Downloads which have been completed are not
+        * taken to be part of this size.
+        * @since Series 60 v3.2
+        * @return TInt : Total size of all downloads currently under progress. 
+        */
+		TInt AllDownloadsSizeL( const CHttpDownload *aDownload ) const;
+
+
+        /**
+        * Calculates the total size of all on-going downloads in the current 
+        * drive (where current download is in progress)
+        * @since Series 60 v3.2
+        * @return TInt : Total size of all downloads currently under progress in the drive. 
+        */
+		TInt AllDownloadsSizeInDriveL( const CHttpDownload *aDownload, TInt aDriveId ) const;
+
+        /**
+        * Search for download identified with id in every 
+        * client application and check if download with the
+        * aDownloadId has been attached already. It is not allowed to
+		* attach the same download to more than one application.
+        * @since Series 60 v3.2
+        * @param aDownload id of the download to be search for
+        * @return Bool ETrue - if the download has been attached already. 
+        */
+		TBool IsAttachedAlready(TInt32 aDownloadId);
+
+        /**
+        * Search for download identified with id in every 
+        * client application.
+        *
+        * @since Series 60 v3.2
+        * @param aDownload id of the download to be found
+        * @return download identified with id
+        */
+        CHttpDownload* FindDownload( TInt32 aDownloadId );
+
+        /**
+        * Returns the client specific folder.
+        * @since Series 60 v2.8
+        * @param aClientApp client application
+        * @param aFolder private folder of the client application
+        * @return none.
+        */
+        void ClientAppFolder( const CHttpClientApp* aClientApp, 
+                              TDes& aFolder );
+
+        /**
+        * Returns the client specific folder w/o the drive letter.
+        * @since Series 60 v2.8
+        * @param aClientApp client application
+        * @param aFolder private folder of the client application
+        * @return none.
+        */
+        void ClientAppFolderWithoutDriveLetter( const CHttpClientApp* aClientApp, 
+                                                TDes& aFolder );
+
+        /**
+        * Returns the folder name of the download info files.
+        * @since Series 60 v2.8
+        * @param aDownload download
+        * @param aFolder private folder of the download
+        * @return none.
+        */
+        void DownloadInfoFolder( const CHttpClientApp* aClientApp, 
+                                 TDes& aFolder ) const;
+
+        /**
+        * Returns the folder name of the download info files.
+        * @since Series 60 v2.8
+        * @param aDownload download
+        * @param aFolder private folder of the download
+        * @return none.
+        */
+        void CODDownloadInfoFolder( const CHttpClientApp* aClientApp, 
+                                 TDes& aFolder ) const;
+                                 
+        /**
+        * Returns the folder name of the download content files.
+        * @since Series 60 v2.8
+        * @param aDownload download
+        * @param aFolder private folder of the download
+        * @return none.
+        */
+        void DownloadContentFolder( const CHttpClientApp* aClientApp, 
+                                    TDes& aFolder ) const;
+
+        /**
+        * Return the clients app's COD folder
+        */
+        void CodFolder( const CHttpClientApp* aClientApp, 
+                        TDes& aFolder ) const;
+
+#ifdef DEAD_CODE        
+        /**
+        * Returns every download maintained in the engine.
+        * @since Series 60 v2.8
+        * @return array of every download in the engine.
+        */
+        CArrayPtrFlat<CHttpDownload>* AllDownloadsL() const;
+#endif
+
+        /**
+        * Returns the engine's own RFs
+        * @since Series 60 v2.8
+        * @return reference to the engine's own RFs
+        */
+        RFs& Fs();
+
+        /**
+        * Returns a connected socket server.
+        * @since Series 60 v2.8
+        * @return reference to the socket server
+        */
+        RSocketServ& SocketServ();
+
+        /**
+        * Returns a global unique download id
+        * @since Series 60 v2.8
+        * @return global unique download id
+        */
+        TInt NextDownloadId();
+        
+        /**
+        * Returns the server's document handler
+        * @return pointer to a document instance
+        */
+        CDocumentHandler* DocHandler() const;
+
+        /**
+        * Returns a Bool
+        * @since Series 60 v3.2
+        * @return Bool
+        */
+        TBool IsEngineClosing()const { return iEngineClosing; };
+
+#ifdef RD_MULTIPLE_DRIVE
+        /**
+        * Query the dynamic drive list.
+        */
+        HBufC8* QueryDynDriveListLC();
+#endif
+
+        /**
+        *
+        */
+        TBool ProgressiveDownloadFeature(){ return iFeatProgressiveDownload; }
+
+    public: // Functions from base classes
+
+        void MMCModeChanged( TBool aAllowed );
+
+    protected:  // New functions
+        
+        /**
+        * Creates a new client application.
+        * @since Series 60 v2.8
+        * @param aAppUid UId of the new client application
+        * @return created client application. Ownership not passed.
+        */
+        CHttpClientApp* CreateNewClientAppL( TUint32 aAppUid );
+
+        /**
+        * Loads client from file. Not used. For later implemenations.
+        * @since Series 60 v2.8
+        * @return none. Leaves on failure.
+        */
+        void LoadClientsL();
+
+        /**
+        * Converts folder name to client id.
+        * @since Series 60 v2.8
+        * @param aClientDir folder of the client application
+        * @return id of the client application
+        */
+        TUint32 CheckClientDirName( TDesC& aClientDir );
+
+        /**
+        * Set iMMCUniqueID with unique id of MMC card inserted into the phone.
+        * KErrNotFound is not inserted.
+        */
+        void QueryMMCUniqueId();
+
+        /**
+        * Query the drive list from the CentRep.
+        */
+        void QueryDriveListL();
+
+        /**
+        * Returns iMMCUniqueID
+        * @return iMMCUniqueID
+        */
+        TUint MMCUniqueId() const;
+        
+        /**
+        *
+        */
+        TInt CheckFreeDiskSpaceL( HBufC* aFilename, TInt aLength );
+
+    protected:  // Functions from base classes
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CHttpDownloadManagerServerEngine();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    public:     // Data
+
+        TBuf<KMaxDriveListStrLen> iDriveLettersCenRep;
+        
+    protected:  // Data
+
+        CArrayPtrFlat<CHttpClientApp>* iClientApps;
+        RFs                 iRfs;
+
+		RProperty *iProperty;
+		CMMCNotifier *iMMCNotifier;
+
+        RSocketServ         iSocketServ;
+        
+        TInt        iNextDownloadId;
+
+        // KErrNotFound is not present
+        TUint iMMCUniqueID;
+        
+        CDocumentHandler*   iDocHandler;
+
+        TBool               iEngineClosing;
+        
+        TBool               iFeatProgressiveDownload;
+
+    private:    // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+         
+        // Reserved pointer for future extension
+        //TAny* iReserved;
+
+    public:     // Friend classes
+        //?friend_class_declaration;
+    protected:  // Friend classes
+        // to provide access to client apps array
+        //?friend_class_declaration;
+    private:    // Friend classes
+        //?friend_class_declaration;
+
+    };
+
+#endif      // HTTPDOWNLOADMANAGER_H
+            
+// End of File