browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownload.h
changeset 0 dd21522fd290
child 13 10e98eab6f85
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownload.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,1122 @@
+/*
+* 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:  Implements one download in DownloadManager
+*
+*/
+
+
+
+#ifndef HTTPDOWNLOAD_H
+#define HTTPDOWNLOAD_H
+
+//  INCLUDES
+#include "HttpClientAppInstance.h"
+#include "HttpConnHandler.h"
+#include "DownloadDataServ.h"
+
+#include <HttpDownloadMgrCommon.h>
+#include <e32base.h>
+#include <es_sock.h>
+#include <http.h>
+
+// CONSTANTS
+const TInt KDownloadNameMaxSize = 256;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// DATA TYPES
+//enum ?declaration
+//typedef ?declaration
+//extern ?data_type;
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+
+// CLASS DECLARATION
+class RFs;
+class RFile;
+class CFileMan;
+class CHeaderField;
+class CHttpStorage;
+
+
+/**
+*  ?one_line_short_description.
+*  ?other_description_lines
+*
+*  @lib ?library
+*  @since Series 60 v2.8
+*/
+NONSHARABLE_CLASS( CHttpDownload ): public CActive
+                                  , public MConnectionCallback
+                                  , public MHTTPTransactionCallback
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CHttpDownload* NewL( const TDesC8& aUrl,
+                                    CHttpClientApp *aClientApp,
+                                    TInt32 aId,
+                                    CHttpClientAppInstance* aClientAppInstance = NULL );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CHttpDownload();
+
+    public: // New functions
+
+        /**
+        * Starts download process.
+        * @since Series 60 v3.2
+        * @return none.
+        */
+        IMPORT_C void Attach( CHttpClientAppInstance* aClientAppInstance );
+      
+        /**
+        * Starts download process.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        IMPORT_C void StartL();
+
+        /**
+        * Pauses the download process.
+        * @since Series 60 v2.8
+        * @param bStore if ETrue download state is stored into file
+        * @return none. Leaves on error.
+        */
+        IMPORT_C void PauseL( TBool bStore = EFalse );
+
+        /**
+        * Resets to the download.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        IMPORT_C void Reset();
+
+        /**
+        * Deletes the download. Every reference to this object 
+        * becomes invalid after this function returns.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        IMPORT_C void Delete( CHttpClientAppInstance* aClAppInstance );
+
+        /**
+        * Deletes the info file associated with the download.
+        * This can be called only after the download is completed, 
+        *  since deletion of the file is illegal when the download is not yet complete.
+        * @since Series 60 v3.2
+        * @return none.
+        */
+		IMPORT_C void DeleteInfoFile( CHttpClientAppInstance* aClAppInstance );
+
+        /**
+        * Moves/renames download content file. Destination can be
+        * specified with EDlAttrDestFilename
+        * @since Series 60 v2.8
+        * @param none
+        * @return none. Leaves on error:
+        * KErrNotReady - if download is not completed yet
+        * KErrInUse - if move is in progress
+        */
+        IMPORT_C void MoveL();
+
+        /**
+		* Gets the value for a TInt attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aValue On completion, contains the requested TInt attribute.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not integer
+		*/
+		IMPORT_C void GetIntAttributeL( THttpDownloadAttrib aAttribute, 
+									    TInt32& aValue );
+
+        /**
+		* Gets the value for a TBool attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aValue On completion, contains the requested TBool attribute.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not boolean
+		*/
+		IMPORT_C void GetBoolAttributeL( THttpDownloadAttrib aAttribute, 
+                                         TBool& aValue );
+
+		/**
+		* Gets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aValue On completion, contains the requested string. Use a 16-bit descriptor!
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+        * - KErrNotFound if requested attribute is not initialized. This can make
+        * easier to differentiate between that string is zero length or not allocated yet.
+		*/
+		IMPORT_C HBufC* GetStringAttributeL( THttpDownloadAttrib aAttribute, 
+                                             TBool& aDelete );
+
+		/**
+		* Gets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aValue On completion, contains the requested string. Use a 16-bit descriptor!
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+        * - KErrNotFound if requested attribute is not initialized. This can make it
+        * easier to differentiate between that string is zero length or not allocated yet.
+		*/
+		IMPORT_C HBufC8* GetString8AttributeL( THttpDownloadAttrib aAttribute, 
+                                               TBool& aDelete );
+
+        /**
+        * 
+        */
+        IMPORT_C RFile* GetFileHandleAttributeL();
+
+        /**
+		* Sets the value for a TInt attribute.
+		* @param aAttribute Identifies the attribute to be set.
+		* @param aValue The value to be set.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not integer
+		*/
+		IMPORT_C void SetIntAttributeL( THttpDownloadAttrib aAttribute, 
+                                        const TInt32 aValue );
+		
+		/**
+		* Sets the value for a TBool attribute.
+		* This method can be used to stop a connection (KConnectionStop).
+		* @param aAttribute Identifies the attribute to be set.
+		* @param aValue The value to be set.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not boolean
+		*/
+		IMPORT_C void SetBoolAttributeL( THttpDownloadAttrib aAttribute, 
+                                         const TBool aValue );
+		
+		/**
+		* Sets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be set.
+		* @param aValue The string value to be set. Must be a 16-bit descriptor!.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+		*/
+		IMPORT_C void SetStringAttributeL( THttpDownloadAttrib aAttribute, 
+                                           const TDesC16& aValue );
+
+		/**
+		* Sets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be set.
+		* @param aValue The string value to be set. Must be a 16-bit descriptor!.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+		*/
+		IMPORT_C void SetStringAttributeL( THttpDownloadAttrib aAttribute, 
+                                           const TDesC8& aValue );
+
+        /**
+        * 
+        */
+        IMPORT_C void SetFileHandleAttributeL( RFile* aFile );
+        
+        /**
+        * Returns the associated client application instance.
+        * @since Series 60 v2.8
+        * @return associated client application instance
+        */
+        IMPORT_C CHttpClientAppInstance* ClientAppInstance() const;
+
+        /**
+        * Called only from the server when a leave trapped.
+        * This is the place where client app can be informed
+        * about this error if not done before.
+        * @since Series 60 v2.8
+        * @param aError Error code from a previous leave
+        * @return none
+        */
+        IMPORT_C void OnError( TInt aError,
+                               THttpDownloadMgrError aDlError = EGeneral );
+
+        /**
+		* Gets the value for a TInt attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aMoIndex Identifies the media object index.
+		* @param aValue On completion, contains the requested TInt attribute.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not integer
+		*/
+		IMPORT_C void GetIntAttributeL( THttpDownloadAttrib aAttribute, 
+									    TInt32& aMoIndex,
+									    TInt32& aValue );
+
+        /**
+		* Gets the value for a TBool attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aMoIndex Identifies the media object index.
+		* @param aValue On completion, contains the requested TBool attribute.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not boolean
+		*/
+		IMPORT_C void GetBoolAttributeL( THttpDownloadAttrib aAttribute, 
+		                                 TInt32& aMoIndex,
+                                         TBool& aValue );
+        
+        /**
+		* Gets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aMoIndex Identifies the media object index.
+		* @param aValue On completion, contains the requested string. Use a 16-bit descriptor!
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+        * - KErrNotFound if requested attribute is not initialized. This can make
+        * easier to differentiate between that string is zero length or not allocated yet.
+		*/
+		IMPORT_C HBufC* GetStringAttributeL( THttpDownloadAttrib aAttribute, 
+		                                     TInt32& aMoIndex,
+                                             TBool& aDelete );
+        
+        /**
+		* Gets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be retrived.
+		* @param aMoIndex Identifies the media object index.
+		* @param aValue On completion, contains the requested string. Use a 16-bit descriptor!
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+        * - KErrNotFound if requested attribute is not initialized. This can make it
+        * easier to differentiate between that string is zero length or not allocated yet.
+		*/
+		IMPORT_C HBufC8* GetString8AttributeL( THttpDownloadAttrib aAttribute, 
+		                                       TInt32& aMoIndex,
+                                               TBool& aDelete );
+
+		/**
+		* Sets the value for a string attribute.
+		* @param aAttribute Identifies the attribute to be set.
+		* @param aMOIndex - media object index.
+		* @param aValue The string value to be set. Must be a 16-bit descriptor!.
+        * @return void. Leaves on error:
+        * - KErrArgument if requested attribute is unknown or not string
+		*/
+        IMPORT_C void SetStringAttributeL( THttpDownloadAttrib aAttribute, const TInt32 aMOIndex,
+								                  const TDesC16& aValue );
+
+        /**
+		* Sets the Download data (media info).
+		*/
+        IMPORT_C void SetDownloadDataAttributeL(HBufC8* dlData);
+        
+        /**
+        * Sets the media object data (track info).
+        */
+        IMPORT_C void SetTrackDataAttributeL(TInt aIndex, HBufC8* dlData);
+
+        /**
+        * Detach the given client instance from the download.
+        * @param aInstance client app instance to be detached
+        * @return ETrue if download is still attached to another instance
+        */                                
+        IMPORT_C TBool DetachClientInstance( CHttpClientAppInstance* aInstance );
+
+        /**
+        * Return the client application where this download is created.
+        * @since Series 60 v2.8
+        * @return client application where this download is created
+        */
+        CHttpClientApp* ClientApp() const;
+
+        /**
+        * Returns the associated PD client application instance.
+        * @since Series 60 v3.2
+        * @return associated PD client application instance
+        */
+        CHttpClientAppInstance* PDClientAppInstance() const;
+
+        /**
+        * Returns the unique download id.
+        * @since Series 60 v2.8
+        * @return unique id of this download
+        */
+        TInt Id() const;
+
+        /**
+        * Returns the state of this download. 
+        * @since Series 60 v2.8
+        * @return state of this download
+        */
+        THttpDownloadState State() const;
+
+        /**
+        * Returns the progress state of the download.
+        * @since Series 60 v2.8
+        * @return progress state of this download
+        */
+        THttpProgressState ProgState() const;
+
+        /**
+        * Returns associated connection handler.
+        * @since Series 60 v2.8
+        * @return associated connection handler
+        */
+        CHttpConnHandler* ConnHandler() const;
+
+        /**
+        * Return EDlAttrNoMedia
+        * @since Series 60 v2.8
+        * @return ETrue if media is removed
+        */
+        TBool NoMedia() const;
+
+        /**
+        * Called when media card removed.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void MediaRemoved( TUint aUid, TBool aDontCheckMediaUid = EFalse );
+
+        /**
+        * Called when media card inserted.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void MediaInserted( TUint aUid );
+
+        /**
+        * Returns the current download destination drive id.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        TInt GetDestinationDriveID() const;
+        
+        /**
+        * Associates download with the given client instance.
+        * @since Series 60 v2.8
+        * @param aInstance client instance this download to be associated with
+        * @param aNoMoveEvent if ETrue move event disabled
+        * @return none.
+        */
+        void SetClientInstance( CHttpClientAppInstance* aInstance,
+                                TBool aNoMoveEvent = EFalse );
+
+        
+        /**
+        * Associates download with the given connection handler
+        * @since Series 60 v2.8
+        * @param aConnHandler connection handler this download to be associated with
+        * @return ?description
+        */
+        void SetConnHandler( CHttpConnHandler* aConnHandler );
+
+        /**
+        * Returns pausable state of the download
+        */
+        TBool Pausable() const;
+        
+        /**
+        * Sets a new download name. Triggers EHttpProgDlNameChanged event.
+        * @param aNewName new download name
+        * @return none. Leaves on error.
+        */
+        void SetDownloadNameL( const TDesC& aNewName );
+
+        void Ref() { ++iRefCount; }
+
+        void Deref() { if( --iRefCount == 0 ) delete this; }
+        
+    public: // Functions from base classes
+
+        /**
+        * methods from MHTTPTransactionCallback
+        */
+        virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+        virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
+
+        /**
+        * methods from CActive
+        */
+	    virtual void DoCancel();
+	    virtual void RunL();
+        virtual TInt RunError(TInt aError);
+    
+        /**
+        * methods from MConnectionCallback
+        */
+        void Connected();
+        void Suspended();
+        void Disconnected();
+        void ConnectionFailed( TInt aError );
+        
+    protected:  // New functions
+
+        /**
+        * Does real reset on download
+        * @since Series 60 v2.8
+        * @param aOnDelete if ETrue function called on delete
+        * @return none.
+        */
+        void DoReset( TBool aOnDelete = EFalse );
+
+        /**
+        * Stores download info into file.
+        * @since Series 60 v2.8
+        * @return none. Leave on error.
+        */
+        void StoreDownloadInfoL();
+
+        /**
+        * Loads download info from file.
+        * @since Series 60 v2.8
+        * @return none. Leaves on failure.
+        */
+        void LoadDownloadInfoL();
+
+        /**
+        * Checks that (if known) that content
+        * is still valid or expired.
+        * @since Series Series60
+        * @return ETrue if content is expired
+        */
+        TBool IsExpired();
+
+        /**
+        * Called if download completed.
+        * @since Series 60 v2.8
+        * @param ?arg1 ?description
+        * @return ?description
+        */
+        void OnCompletedL();
+        
+       
+       /**
+        * Checks that if content type is of file storage type 
+        * @return ETrue if content is of file storage type
+        */
+        TBool IsContentFileStorageType();
+        
+        /**
+        * Reinitialize download. 
+        * @since Series 60 v2.8
+        */
+        void ReInitializeDownload();
+
+        /**
+        * Cancels transaction.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void CancelTransaction();
+
+        /**
+        * Pauses the download process.
+        * @since Series 60 v2.8
+        * @param aDisconnect if ETrue download disconnects
+        * @return none. Leaves on error.
+        */
+        void InternalPauseL( TBool aDisconnect = EFalse );
+
+        /**
+        * Set download status and calls event callback function.
+        * @since Series 60 v2.8
+        * @param aProgState see THttpProgressState
+        * @param aStatus see THttpDownloadState
+        * @param aErrorId see THttpDownloadMgrError
+        * @param aGlobalErrorId global error id
+        * @return none.
+        */
+        void SetDownloadStatus( THttpProgressState aProgState,
+                                THttpDownloadState aStatus = EHttpDlInprogress,
+                                THttpDownloadMgrError aErrorId = ENoError,
+                                TInt aGlobalErrorId = KErrUnknown );
+
+        /**
+        * Called when response header received. 
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void ResponseHeaderReceivedL();
+
+        /**
+        * Called when a new body chunk received.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void ResponseBodyReceivedL( const TDesC8& aBuf );
+
+        /**
+        * Start connection creation process.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void Connect();
+
+        /**
+        * Disconnects download from the network.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void Disconnect();
+
+        /**
+        * Requesting header.
+        * @param aStringPool stringpool of HTTP session
+        * @param aHeaders request header of the transaction
+        * @param ETrue if HEAD method used.
+        * @return none. Leaves on error.
+        */
+        void SetRequestHeaderL( RStringPool& aStringPool,
+                                RHTTPHeaders& aHeaders,
+                                TBool aHeadMethod );
+
+        /**
+        * Disables pipelining of the transaction.
+        * @since Series 60 v2.8
+        * @param aStringPool stringpool of HTTP session
+        * @return none. Leaves on error.
+        */
+        void DisablePipeliningL( RStringPool& aStringPool );
+
+        /**
+        * Sets transaction property.
+        * @param aStringPool stringpool of HTTP session
+        * @param aPropertyName name of the property
+        * @param aToken property value
+        * @return none. Leaves on error.
+        */
+        void SetPropertyL( RStringPool& aStringPool,
+                           RStringF aPropertyName, 
+                           const TDesC8& aToken );
+
+        /**
+        * Sets transaction property.
+        * @param aPropertyName name of the property
+        * @param aValue property value
+        * @return none. Leaves on error.
+        */
+        void SetPropertyL( RStringF aPropertyName, 
+                           const TInt aValue );
+
+        /**
+        * Add client app's own fields to request header
+        * @since Series 60 v2.8
+        * @param aStringPool stringpool of HTTP session
+        * @param aHeaders request header of the transaction
+        * @return none. Leaves of error
+        */
+        void SetRequestHeaderAddOnL( RStringPool& aStringPool,
+                                     RHTTPHeaders& aHeaders );
+        /**
+        * Set credential properties of transaction
+        * @since Series 60 v2.8
+        * @param aStringPool stringpool of HTTP session
+        * @return none. Leaves of error
+        */
+        void SetCredentialsInfoL( RStringPool& aStringPool );
+
+        /**
+        * Set 'Range' field in request header.
+        * @since Series 60 v2.8
+        * @param aStringPool stringpool of HTTP session
+        * @param aHeaders request header of the transaction
+        * @return none. Leaves of error
+        */
+        void SetRangeFieldL( RStringPool& aStringPool,
+                             RHTTPHeaders& aHeaders );
+
+        /**
+        * Sets the given header field with the expire value
+        * @since Series 60 v2.8
+        * @param aField header field to be set
+        * @param aHeaders request header of the transaction
+        * @return ?description
+        */
+        void SetExpireToFieldL( RStringF& aField, 
+                                RStringPool& aStringPool,
+                                RHTTPHeaders& aHeaders );
+
+        /**
+        * Rebuilds the url with scheme and port
+        * @since Series 60 v2.8
+        * @return none. Leaves of error
+        */
+        void ParseRequestedUrlL();
+
+        /**
+        * Creates the download name from the url
+        * @since Series 60 v2.8
+        * @return none. Leaves of error
+        */
+        void ParseDownloadNameL();
+
+        /**
+        * Store entire response header with raw data in iHeaders array
+        * @since Series 60 v2.8
+        * @return none. Leaves of error
+        */
+        void StoreResponseHeaderL();
+
+        /**
+        * Saves credentials info to memory for next submit.
+        * Credential info are deleted in destructor and never
+        * persisted.
+        * @since Series 60 v2.8
+        * @param aStringPool stringpool of HTTP session
+        * @return none. Leaves of error
+        */
+        void SaveCredentialsL( RStringPool aStringPool );
+
+        /**
+        * Builds up the request and submits the transaction.
+        * @since Series 60 v2.8
+        * @return none. Leaves of error
+        */
+        void RequestContentL();
+
+    protected:  // Functions from base classes
+        
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CHttpDownload( CHttpClientApp *aClientApp,
+                       TInt32 aId,
+                       CHttpClientAppInstance* aClientAppInstance );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL( const TDesC8& aUrl );
+
+        // Prohibit copy constructor if not deriving from CBase.
+        // CHttpDownload( const CHttpDownload& );
+        // Prohibit assigment operator if not deriving from CBase.
+        // CHttpDownload& operator=( const CHttpDownload& );
+
+        /**
+        * Called when content type received in response header.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void ContentTypeReceivedL();
+
+        /**
+        * Handles HTTP error 401
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void HttpResponse401L();
+
+        /**
+        * Handles HTTP error 407
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void HttpResponse407L();
+
+        /**
+        * Search for and return a field in response header
+        * @since Series 60 v2.8
+        * @param aFieldName name of the field
+        * @return index to the field in iHeaders or KErrNotFound
+        */
+        TInt FindHeaderField( CArrayPtrFlat<CHeaderField>* aHeaders,
+                              const TDesC8& aFieldName ) const;
+
+        /**
+        * Converts download name to unique one.
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void ConvertDownloadNameUniqueL();
+
+        /**
+        * Creates a unique, indexed name
+        * @since Series 60 v2.8
+        * @return none. Leaves on error.
+        */
+        void CreateIndexedNameL( HBufC* &aUniqueName, 
+                                 TDesC& aOrgName, 
+                                 TInt& aIndex );
+
+        /**
+        * Stores response header received by client application.
+        * It is used only in case of continue download.
+        * @param aResponseHeader see EDlAttrResponseHeader
+        * @return none. Leaves on error.
+        */
+        void ContinueDownloadStoreResponseHeaderL( 
+                                                const TDesC8& aResponseHeader );
+
+        /**
+        * Parses content type and media type from the response header.
+        * @return none. Leaves on error.
+        */
+        void ParseContentTypeL( RStringPool& aStrPool );
+
+        /**
+        * Parses content disposition from the response header.
+        * @return none. Leaves on error.
+        */
+        void ParseContentDispositionL( RStringPool& aStrPool );
+
+        /**
+        * Called mainly from SetDownloadStatus. This function passes
+        * the download statuses to the event handler
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void TriggerEvent( THttpDownloadState aDlState,
+                           THttpProgressState aProgState = EHttpProgNone );
+
+        /**
+        * Checks that in current situation the download is pausable, or not.
+        * Triggers event to client if pausable attribute changes.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void UpdatePausable();
+
+        /**
+        * Do some (re)initialization before a forced restart.
+        * @since Series 60 v2.8
+        * @return none.
+        */
+        void ForcedRestartL();
+
+        /**
+        * Returns the raw data of the requested header field.
+        * @since Series 60 v2.8
+        * @return HBufC8* buffer with raw data of header field.
+        */
+        HBufC8* HeaderFieldL( CArrayPtrFlat<CHeaderField>* aHeaders, 
+                              TInt aFieldIndex );
+
+#ifdef DEAD_CODE
+        /**
+        * Checks the response header on 206 response, if the
+        * content is really what we requested and hasn't changed
+        * since last request.
+        * Checked field: date
+        * @return ETrue if content is probably not modified
+        */
+        TBool CheckIfContentUnModified();
+#endif
+
+        /**
+        * Checks the max length of the string attribute
+        * since last request.
+        * Checked field: date
+        * @return none.
+        */
+        void CheckAttribMaxLengthL( THttpDownloadAttrib aAttribute, 
+	                                const TDesC16& aValue );
+
+        /**
+        * Checks the max length of the string attribute
+        * since last request.
+        * Checked field: date
+        * @return none.
+        */
+        void CheckAttribMaxLengthL( THttpDownloadAttrib aAttribute, 
+	                                const TDesC8& aValue );
+
+        /**
+        * Set cookie transaction property
+        * @param aStringPool stringpool of HTTP session
+        * @return none. Leaves of error.
+        */
+        void SetCookiesL( RStringPool& aStringPool );
+
+        /**
+        * Client side transaction completed.
+        */
+        void DownloadSucceededL();
+
+        /**
+        * Parses input request header add-on and stores it in request headers array.
+        * @param aValue Request header add-on from client application
+        * @return None. Leaves on error.
+        */
+        void ParseRequestHeaderAddOnL( const TDesC8& aValue );
+
+        /**
+        * Load headers from file
+        */
+        void LoadHeadersL( RFile& aFile, CArrayPtrFlat<CHeaderField>* aHeaders );
+
+        /**
+        * Append headers to buffer
+        */
+        void AppendHeadersL( TPtr8& aBuf, CArrayPtrFlat<CHeaderField>* aHeaders );
+
+        /**
+        * Add the given header in the header array
+        * @return None. Leaves on error.
+        */
+        void AddHeaderL( THttpDownloadAttrib aAttribute, 
+			             const TDesC8& aValue,
+                         const TInt aConversionTable[][2],
+                         CArrayPtrFlat<CHeaderField>* aHeaders );
+
+        /**
+        * Handles permanent redirection event
+        * @param aNewUrl new URL after redirection
+        * @return None. Leaves on error.
+        */
+        void RedirectedPermanentlyL( const TDesC8& aNewUrl );
+        
+        /**
+        * Handles temporary redirection event
+        * @param aNewUrl new URL after redirection
+        * @return None. Leaves on error.
+        */
+        void RedirectedTemporaryL( const TDesC8& aNewUrl );
+        
+        /**
+        * Check that the content is supported multipart
+        * @param aBuf new chunk of message body
+        * @return TBool. Leaves on error.
+        */        
+        TBool IsMultipartSupportedL( const TDesC8& aBuf );
+        
+        /**
+        * Gets the specified attribute from media type
+        * @param aAttribute Required attribute
+        * @return TPtrC8. Leaves on error - KErrNotFound.
+        */                
+        TPtrC8 GetParamFromMediaTypeL( const TDesC8& aAttribute );
+        
+        /**
+        * Escape decoded URL may contain characters that cannot
+        * be used to create filename. These characters are replaced
+        * with KUrlFixChar
+        * @return none. Leaves on error.
+        */
+        void FixDownloadNameL();
+        
+        /**
+        * Set iCodDownload = aValue
+        */       
+        void SetCodFlag( TBool aValue );
+        
+        
+        /**
+        * Check the contenttype and returns TRUE if drm
+        */         
+        void CheckRealDRMContentType();
+        
+        /**
+        * Self completes the active object
+        */
+        void SelfComplete( TInt aReason = KErrNone );
+        
+        /**
+        *check for correct drive to move from cenrep
+        */
+        void UpdateDestFileNameL();
+
+        /**
+        * notify DcfRepository for new/deleted files
+        */
+        void UpdateDCFRepositoryL( const TDesC& aFileName );
+        
+        /**
+        * Move completed media object files to gallery when delete is called
+        * @param aMediaObjectIndex media object index to be moved
+        * @return error code
+        */
+        TInt MoveInDelete(TInt aMediaObjectIndex);
+
+        /**
+        * Initiates a move for downloaded media object files to gallery/download folder
+        * @param aMediaObjectIndex media object index to be moved
+        */
+        void MoveDownloadedMediaObjectL(TInt aMediaObjectIndex);
+        
+        /**
+        * Moves downloaded media object file to gallery/download folder
+        * @param aMediaObjectIndex media object index to be moved
+        */
+        void MoveDownloadedMediaObjectSyncL(TInt aMediaObjectIndex);
+        
+        /**
+        * Calls ConvertDownloadNameUniqueL to create unique name based on source file name
+        * and destination path. 
+        */
+        void FindUniqueDestinationFileNameL( TDesC& srcFile, HBufC*& destPath );
+
+        /**
+        * Notifies gallery about new file
+        * @param aFileName file name
+        */        
+        void CHttpDownload::NotifyMediaGalleryL( const TDesC& aFileName );
+        
+        /**
+        * ConvertDownloadNameUniqueL
+        */        
+        void CHttpDownload::ConvertDownloadNameUniqueL( HBufC*& filePath,
+                                            			HBufC*& fileName,
+                                            			HBufC*& fileExtn);
+        
+    public:     // Data
+        // ?one_line_short_description_of_data
+        //?data_declaration;
+    
+    protected:  // Data
+
+        TInt32  iId;    // unique id of the download
+        CHttpClientApp* iClientApp;
+        CHttpClientAppInstance* iClAppInstance;    // pointer to the client app's 
+                                            // preferencies class
+		CHttpClientAppInstance* iPDClAppInstance;
+        TInt32   iUserData;     // EDlAttrUserData
+
+        HBufC8* iUrl;           // EDlAttrReqUrl
+        HBufC8* iRedirUrl;      // EDlAttrRedirUlr
+        HBufC8* iCurrentUrl;    // EDlAttrCurrentUrl
+        HBufC*  iDlName;        // EDlAttrName
+        TInt32  iPort;          // EDlAttrPort
+        TInt    iTargetApp;     // EDlAttrTargetApp
+        THttpMethod iMethod;    // EDlAttrMethod
+
+        TInt    iAuthScheme;    // EDlAttrAuthScheme
+        HBufC8* iHttpRealm;     // EDlAttrRealm
+        HBufC8* iHttpUsername;  // EDlAttrUsername
+        HBufC8* iHttpPassword;  // EDlAttrPassword
+        HBufC8* iHttpProxyRealm;// EDlAttrProxyRealm
+        HBufC8* iHttpProxyUsername;  // EDlAttrProxyUsername
+        HBufC8* iHttpProxyPassword;  // EDlAttrProxyPassword
+        HBufC8* iHttpNonce;     // Nonce-value used in digest authentication
+                                // Received from HTTP server, non-accessible from
+                                // outside
+
+        TInt32  iPreferencies;
+
+        TBool   iDisconnectOnPause;     // EDlAttrDisconnectOnPause
+        TBool   iDisconnectOnReset;     // EDlAttrDisconnectOnReset
+        TInt    iCodDownload;           // See EDlCodDownload this is a bool attrib but needs to increment!
+        TInt32  iFotaPckgId;            // EDlAttrFotaPckgId
+
+        CArrayPtrFlat<CHeaderField>* iResponseHeaders;  // Response header
+        CArrayPtrFlat<CHeaderField>* iRequestHeaders;   // Additional request header
+                                                        // See ERequestHeaderAddon
+        CArrayPtrFlat<CHeaderField>* iEntityHeaders;
+        CArrayPtrFlat<CHeaderField>* iGeneralHeaders;
+
+        // the following members are initialized from
+        // HTTP response header.
+        TInt32      iStatusCode;        // EDlAttrStatusCode
+        HBufC8*     iContentType;       // EDlAttrContentType
+        HBufC8*     iDispositionType;         // EDlAttrDispositionType (e.g.:"inline", "attachment")
+        HBufC*		iAttachmentFileName;      // EDlAttrFileNameParm
+        HBufC8*     iMediaType;         // EDlAttrMediaType
+        TDateTime   iDate;
+        TDateTime   iExpires;
+        TTimeIntervalSeconds    iMaxAge;
+
+        CHttpConnHandler* iConnHandler; // pointer to the CHttpConnHandler.
+                                        // Not owned.
+        RHTTPTransaction    iTrans;
+        TBool               iTransValid;// iTrans is a valid transaction
+
+        THttpDownloadState  iDlState;       // EDlAttrState
+        THttpProgressState  iProgState;     // EDlAttrProgressState
+
+        THttpDownloadMgrAction  iAction;    // EDlAttrAction
+        THttpRestartActions iRestartAction; // EDlAttrRestartAction
+        
+        TInt    iLastError;             // EDlAttrErrorId
+        TInt    iGlobalErrorId;         // EDlAttrGlobalErrorId
+
+        TBool   iNoContentTypeCheck;    // EDlAttrNoContentTypeCheck
+
+        TInt    iDontFireEvent;
+
+        CFileMan*   iFileMan;           // used in MoveL
+
+        TBool   iNoMedia;               // See EDlAttrNoMedia
+        TBool   iContinueDownload;      // See EDlContinue
+
+        CHttpStorage*   iStorage;       // Stores received body data
+        
+        HBufC8*  iHashedMsgBody;        // EDlAttrHashedMsgBody
+
+		TBool	iUseAttachmentFileName;	// Content disposition type = "attachment"
+		TBool	iUseInlineFileName;		// Content disposition type = "inline"
+
+		TBool   iCodPdAvailable;		// COD Progerssive download is available
+
+        TBool   iUpdatedDDUriSet;       //True if updated DD URI is set from COD Eng
+        HBufC8* iDDType;                // EDlAttrDDType
+        
+        CDownloadDataServ* iCodDlData;// COD download info
+        
+        TFileName iFname;               ///< File name.
+
+    private:    // Data
+
+        TBool   iNoRealError;           // It's set in Get/SetAttrib functions. Indicates
+                                        // that if a leave occures it doesn't have any
+                                        // real effect on download process and nothing
+                                        // to do in the OnError()
+        TBool   iRedirect;              // Transaction redirected.
+                                        // Restore iCurrentUrl to iUrl after transaction abnormally
+                                        // completed (paused, failed)
+        TBool   iPausable;              // EDlAttrPausable 
+
+        TBool   iDlStartedByClient;     // Download started by client app via ::StartL.
+                                        // In some cases the download is restarted by the engine.
+        TBool   iSilentMode;            // EDlAttrSilent
+        TBool   iHidden;                // EDlAttrHidden
+
+        TBool   iUseCookies;
+        
+        TBool   iPausableDRM;           // Set to ETrue if KDRMOldContentType is found in response header.
+        TBool   iDrmContentLengthValid; //
+      
+       
+        HBufC8* iHeaderOfMultipart;     // Header of multipart
+        TBool   iMultiPart;
+
+        TBool   iDlNameChanged;         //Set if download name has changed        
+        TBool   iContTypeRecognitionAvailSent;
+
+        HBufC8* iDownloadInfo;          // contains download info
+
+        TInt    iRefCount;
+        
+        TBool    iMoveInProgress;
+        
+        TInt    iMoLength;              //Multiple Media Object Length
+        TInt    iActiveDownload;        // Currenlty active Cod Download
+        TInt    iActivePlayedDownload;  // Currenlty actively played Cod Download
+        TInt	iMOMoved;				// index for bulk move
+        TBool   iMoDownloadCompleted;   //MO download Completed.But Move will be issued by PD Client
+        
+    public:     // Friend classes
+        //?friend_class_declaration;
+    protected:  // Friend classes
+
+        friend class CHttpStorage;
+
+    private:    // Friend classes
+        //?friend_class_declaration;
+    };
+
+#endif      // HTTPDOWNLOAD_H   
+            
+// End of File