diff -r 000000000000 -r dd21522fd290 browserutilities/downloadmgr/DownloadMgrServEng/Inc/HttpDownload.h --- /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 +#include +#include +#include + +// 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* 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* 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* aHeaders ); + + /** + * Append headers to buffer + */ + void AppendHeadersL( TPtr8& aBuf, CArrayPtrFlat* 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* 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* iResponseHeaders; // Response header + CArrayPtrFlat* iRequestHeaders; // Additional request header + // See ERequestHeaderAddon + CArrayPtrFlat* iEntityHeaders; + CArrayPtrFlat* 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