williamr@2: /* williamr@2: * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: This file contains the definition of the Client interface of Download Mgr Server. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef __DOWNLOADMGR_CLIENT_H__ williamr@2: #define __DOWNLOADMGR_CLIENT_H__ williamr@2: williamr@2: // INCLUDES williamr@2: #include <e32base.h> williamr@2: #include <f32file.h> williamr@2: #include <HttpDownloadMgrCommon.h> williamr@2: #include <http.h> williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CDownloadMgrHandler; williamr@2: class RHttpDownload; williamr@2: class MHttpDownloadMgrObserver; williamr@2: class CDefaultAttrib; williamr@2: class CRHttpDownloadExtension; williamr@2: class CRHttpDownloadMgrExtension; williamr@2: class CRHttpDlExtension; williamr@2: class CEikonEnv; williamr@2: class CTransactionObserver; williamr@2: class THttpTransactionCallback; williamr@2: class CCodDownload; williamr@2: class CCodObserver; williamr@2: williamr@2: /** williamr@2: * Calculate a hash and in the form of a 32 character hex result. williamr@2: * @param aMessage Source. williamr@2: * @param aHash Hash value. williamr@2: * @return None. williamr@2: */ williamr@2: void HashL( const TDesC8& aMessage, TDes8& aHash ); williamr@2: williamr@2: // TYPEDEFS williamr@2: typedef CArrayPtrFlat< RHttpDownload > CDownloadArray; williamr@2: typedef CArrayPtrFlat< MHttpDownloadMgrObserver > CDownloadMgrObserver; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * Contains download states williamr@2: * williamr@2: * @lib - williamr@2: * @since Series 60 2.8 williamr@2: */ williamr@2: NONSHARABLE_CLASS( THttpDownloadEvent ) williamr@2: { williamr@2: public: // Data williamr@2: // download state williamr@2: THttpDownloadState iDownloadState; williamr@2: // download progress state williamr@2: THttpProgressState iProgressState; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Provides the interface for notification of events from a Download Manager williamr@2: * session and its subsessions. williamr@2: * williamr@2: * @lib - williamr@2: * @since Series 60 2.8 williamr@2: */ williamr@2: class MHttpDownloadMgrObserver williamr@2: { williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: * Indicates an event. williamr@2: * @param aDownload The download with which the event occured. williamr@2: * @param aEvent Event type. williamr@2: * @return None. williamr@2: */ williamr@2: virtual void HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent ) = 0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Provides the interface for sending next uri to williamr@2: * the client when downloading OMA or COD. williamr@2: * williamr@2: * @lib - williamr@2: * @since Series 60 3.0 williamr@2: */ williamr@2: class MHttpDownloadMgrNextUriObserver williamr@2: { williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: * Send next uri to the client. The client can then handle it. williamr@2: * @param aDownload Reference to the download. williamr@2: * @param aUri Next URI of the OMA or COD download. williamr@2: * @return None. williamr@2: */ williamr@2: virtual void NextUriL( RHttpDownload& aDownload, const TDesC8& aUri ) = 0; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Creates a download manager session and performs operations on it williamr@2: * williamr@2: * @lib - williamr@2: * @since Series 60 2.8 williamr@2: */ williamr@2: NONSHARABLE_CLASS( RHttpDownloadMgr ) : public RSessionBase, williamr@2: public MHttpDownloadMgrObserver williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * C++ default constructor. williamr@2: */ williamr@2: IMPORT_C RHttpDownloadMgr(); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Creates a download manager session. williamr@2: * @param aAppUid Client application's UID. williamr@2: * @param aObserver Observer williamr@2: * @param aMaster Indicates whether (if ETrue) this instance williamr@2: * inherints all downloads of other instances. (stand-alone app flag). williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C void ConnectL( TUid aAppUid, williamr@2: MHttpDownloadMgrObserver& aObserver, williamr@2: TBool aMaster ); williamr@2: williamr@2: /** williamr@2: * Gives version information. williamr@2: * @param - williamr@2: * @return TVersion Contains version information. williamr@2: */ williamr@2: IMPORT_C TVersion Version() const; williamr@2: williamr@2: /** williamr@2: * Closes download manager session. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C void Close(); williamr@2: williamr@2: /** williamr@2: * Returns a list of the current downloads. williamr@2: * @param - williamr@2: * @return CDownloadArray williamr@2: */ williamr@2: IMPORT_C const CDownloadArray& CurrentDownloads() const; williamr@2: williamr@2: /** williamr@2: * Creates a new download subsession. williamr@2: * @param aUrl The url to be downloaded. williamr@2: * @param aResult The result is true if the download is created. williamr@2: * If the URL is already being downloaded the seult is false. williamr@2: * @return RHttpDownload& williamr@2: */ williamr@2: IMPORT_C RHttpDownload& CreateDownloadL( const TDesC8& aUrl, TBool& aResult ); williamr@2: williamr@2: /** williamr@2: * Creates a new download subsession. It creates a new one even williamr@2: * if the URL is already beeing downloaded. williamr@2: * @param aUrl The url to be downloaded. williamr@2: * If the URL is already being downloaded the seult is false. williamr@2: * @return RHttpDownload& williamr@2: */ williamr@2: IMPORT_C RHttpDownload& CreateDownloadL( const TDesC8& aUrl ); williamr@2: williamr@2: /** williamr@2: * Creates a new download in client side. williamr@2: * @param aHttpTransaction http transaction. williamr@2: * @param aResult The result is true if the download is created. williamr@2: * If the URL is already being downloaded the seult is false. williamr@2: */ williamr@2: IMPORT_C RHttpDownload& CreateClientSideDownloadL( TInt aHttpTransaction,TBool& aResult ); williamr@2: williamr@2: /** williamr@2: * Creates a new download subsession for COD. williamr@2: * @param aUrl The url from the COD is downloaded. williamr@2: * @param aBuf The COD descriptor. williamr@2: * @param aMimeType The mimetype. williamr@2: * @param aEikEnv Eikon environment or NULL. Can be NULL if download williamr@2: * does not require UI functionality. williamr@2: * @param aResult The result is true if the download is created. williamr@2: * If the URL is already being downloaded the seult is false. williamr@2: * @return RHttpDownload& williamr@2: */ williamr@2: IMPORT_C RHttpDownload& CreateCodDownloadL( const TDesC8& aUrl, williamr@2: const TDesC8& aBuf, williamr@2: const TDesC8& aMimeType, williamr@2: CEikonEnv* aEikEnv, williamr@2: TBool& aResult ); williamr@2: williamr@2: /** williamr@2: * Finds if the download is already created williamr@2: * @since 2.8 williamr@2: * @param aUrl given URL williamr@2: * @param aMsgBody Message body from post operation williamr@2: * @return Returns a pointer to the found download or null. williamr@2: * This pointer is NOT owned by the client! williamr@2: */ williamr@2: IMPORT_C RHttpDownload* FindDownload( const TDesC8& aUrl, const TDesC8& aMsgBody ); williamr@2: williamr@2: /** williamr@2: * Pauses all downloads. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt PauseAll(); williamr@2: williamr@2: /** williamr@2: * Resumes all downloads. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt StartAll(); williamr@2: williamr@2: /** williamr@2: * Resets all downloads. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt ResetAll(); williamr@2: williamr@2: /** williamr@2: * Deletes all downloads. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt DeleteAll(); williamr@2: williamr@2: /** williamr@2: * Disconnect the http connection and pauses all downloads. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt Disconnect(); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TInt attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TInt attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetIntAttribute( const TUint aAttribute, TInt32& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TBool attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TBool attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetBoolAttribute( const TUint aAttribute, TBool& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TDes16 attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TDes16 attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetStringAttribute( const TUint aAttribute, TDes16& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TDes8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TDes8 attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetStringAttribute( const TUint aAttribute, TDes8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TInt attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetIntAttribute( const TUint aAttribute, TInt32 aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TBool attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetBoolAttribute( const TUint aAttribute, TBool aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TDesC attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetStringAttribute( const TUint aAttribute, const TDesC16& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TDesC8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetStringAttribute( const TUint aAttribute, const TDesC8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for the default TInt attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetDefaultIntAttribute( const TUint aAttribute, TInt32 aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for the default TBool attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetDefaultBoolAttribute( const TUint aAttribute, TBool aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for the default TDesC attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetDefaultStringAttribute( const TUint aAttribute, const TDesC16& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for the default TDesC8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetDefaultStringAttribute( const TUint aAttribute, const TDesC8& aValue ); williamr@2: williamr@2: /** williamr@2: * Adds client to the observer list. williamr@2: * @param aObserver Observer. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C void AddObserverL( MHttpDownloadMgrObserver& aObserver ); williamr@2: williamr@2: /** williamr@2: * Removes client from the observer list. williamr@2: * @param aObserver Observer. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C void RemoveObserver( MHttpDownloadMgrObserver& aObserver ); williamr@2: williamr@2: /** williamr@2: * Set next uri observer. williamr@2: * @param aObserver Observer. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C void SetNextUriObserver( MHttpDownloadMgrNextUriObserver* aObserver ); williamr@2: williamr@2: protected: // from MHttpDownloadMgrObserver williamr@2: williamr@2: /** williamr@2: * Indicates an event. williamr@2: * @param aDownload The download with which the event occured. williamr@2: * @param aEvent Event type. williamr@2: * @return None. williamr@2: */ williamr@2: void HandleDMgrEventL( RHttpDownload& aDownload, THttpDownloadEvent aEvent ); williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: * Indicates the session's event. williamr@2: * @param aHandle Unique identifier of server side subsession. williamr@2: * @param aEvent Event type. williamr@2: * @return None. williamr@2: */ williamr@2: void HandleSessionEventL( TInt aHandle, THttpDownloadEvent aEvent ); williamr@2: williamr@2: private: // New functions williamr@2: williamr@2: /** williamr@2: * Creates a download manager session. williamr@2: * @param aAppUid Client application's UID. williamr@2: * @param aObserver Observer williamr@2: * @param aMaster Indicates whether (if ETrue) this instance williamr@2: * inherints all downloads of other instances. (stand-alone app flag). williamr@2: * @return None. williamr@2: */ williamr@2: void DoConnectL( TUid aAppUid, williamr@2: MHttpDownloadMgrObserver& aObserver, williamr@2: TBool aMaster ); williamr@2: williamr@2: /** williamr@2: * Initializes the download manager session. williamr@2: * @param aAppUid Client app's UID. williamr@2: * @param aObserver Observer to add to the observer list. williamr@2: * @param aMaster Indicates whether (if ETrue) this instance williamr@2: * inherints all downloads of other instances. (stand-alone app flag). williamr@2: * @return None. williamr@2: */ williamr@2: void InitializeL( TUid aAppUid, williamr@2: MHttpDownloadMgrObserver& aObserver, williamr@2: TBool aMaster ); williamr@2: williamr@2: protected: // New functions williamr@2: williamr@2: /** williamr@2: * Adds the created download to the list. If it is already added, williamr@2: * then it will do nothing. williamr@2: * @param aElement Download subsession. williamr@2: * @return RHttpDownload& reference to the added item in the list. williamr@2: */ williamr@2: RHttpDownload& AddToArrayL( RHttpDownload* aElement ); williamr@2: williamr@2: private: // New functions williamr@2: williamr@2: /** williamr@2: * Removes the download from the list. williamr@2: * @param aElement Download subsession. williamr@2: * @return None. williamr@2: */ williamr@2: void RemoveFromArray( RHttpDownload* aElement ); williamr@2: williamr@2: /** williamr@2: * Finds the download in the list. williamr@2: * @param aElement Download subsession. williamr@2: * @param aIndex Index of the element found. williamr@2: * @return KErrNone if found, KErrNotFound otherwise.. williamr@2: */ williamr@2: TInt FindInArray( RHttpDownload* aElement, TInt& aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Returns a reference to the download identified by a handle. williamr@2: * @param aHandle Handle identifier. williamr@2: * @return RHttpDownload& williamr@2: */ williamr@2: RHttpDownload& DownloadFromHandleL( TUint aHandle ); williamr@2: williamr@2: /** williamr@2: * Finds observer based on index. williamr@2: * @param aObserver Observer found. williamr@2: * @param aIndex Index. williamr@2: * @return TInt williamr@2: */ williamr@2: TInt FindObserver( MHttpDownloadMgrObserver& aObserver, TInt& aIndex ) const; williamr@2: williamr@2: /** williamr@2: * Attach client to the session. williamr@2: * @param aBuf Buffer to the subsession IDs. williamr@2: * @return None. williamr@2: */ williamr@2: void AttachL( TDes8& aBuf ); williamr@2: williamr@2: /** williamr@2: * Close a download subsession. williamr@2: * @param aElement Download subsession. williamr@2: * @return None. williamr@2: */ williamr@2: void CloseDownload( RHttpDownload* aElement ); williamr@2: williamr@2: /** williamr@2: * Packes the default values of the attributes. williamr@2: * @param - williamr@2: * @return bbuffer of the packed attribs. williamr@2: */ williamr@2: HBufC8* PackedDefaultAttributesLC(); williamr@2: williamr@2: /** williamr@2: * Sets the default value for the TInt32 attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: void DoSetDefaultAttributeL( const TUint aAttribute, TInt32 aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the default value for the TBool attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: void DoSetDefaultAttributeL( const TUint aAttribute, TBool aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the default value for the TDesC8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: void DoSetDefaultAttributeL( const TUint aAttribute, const TDesC8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the default value for the TDesC16 attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: void DoSetDefaultAttributeL( const TUint aAttribute, const TDesC16& aValue ); williamr@2: williamr@2: /** williamr@2: * Start session's event notification. williamr@2: * @param aStatus Handler's request status. williamr@2: * @return None. williamr@2: */ williamr@2: void StartSessionEventNotification( const TDesC8& aDownloadState, williamr@2: const TDesC8& aProgressState, williamr@2: const TDesC8& aHandle, williamr@2: TRequestStatus& aStatus ); williamr@2: williamr@2: /** williamr@2: * Cancels session's event notification. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: void CancelSessionEventNotification(); williamr@2: williamr@2: /** williamr@2: * Leave version of FindDownload williamr@2: */ williamr@2: RHttpDownload* DoFindDownloadL( const TDesC8& aUrl, const TDesC8& aMsgBody ); williamr@2: williamr@2: /** williamr@2: * Gets the number of client side download. williamr@2: * @param aValue Num of client side download williamr@2: * @return Error code. williamr@2: */ williamr@2: TInt NumberOfClientSideDownload( TInt32& aValue ); williamr@2: williamr@2: /** williamr@2: * Tells that event is being broadcasted. williamr@2: * @param None williamr@2: * @return TBool. williamr@2: */ williamr@2: TBool IsEventBroadcasting(); williamr@2: williamr@2: /** williamr@2: * Do-Indicates the session's event. williamr@2: * @param aHandle Unique identifier of server side subsession. williamr@2: * @param aEvent Event type. williamr@2: * @return None. williamr@2: */ williamr@2: void DoHandleSessionEventL( TInt aHandle, THttpDownloadEvent aEvent ); williamr@2: williamr@2: /** williamr@2: * Broadcasts an event. williamr@2: * @param aDownload The download with which the event occured. williamr@2: * @param aEvent Event type. williamr@2: * @return None. williamr@2: */ williamr@2: void BroadcastEvent( RHttpDownload& aDownload, williamr@2: THttpDownloadEvent aEvent ); williamr@2: williamr@2: /** williamr@2: * Returns the next uri observer from the extension calss. williamr@2: * @return Next uri observer. williamr@2: */ williamr@2: MHttpDownloadMgrNextUriObserver* NextUriObserver() const; williamr@2: williamr@2: /** williamr@2: * Returns the session id williamr@2: * @return session id williamr@2: */ williamr@2: TInt SessionId() const; williamr@2: williamr@2: /** williamr@2: * Broadcast deleting event. williamr@2: * @param aDownload download is beenig deleted. williamr@2: * @return None. williamr@2: */ williamr@2: // void BroadcastDeleting( RHttpDownload& aDownload ); williamr@2: williamr@2: /** williamr@2: * Returns the the event priority flag williamr@2: * @return TInt williamr@2: */ williamr@2: TInt EventPriorityFlag() const; williamr@2: williamr@2: /** williamr@2: * Increments the event priority flas williamr@2: * @return void williamr@2: */ williamr@2: void IncrementEventPriorityFlag(); williamr@2: williamr@2: /** williamr@2: * Decrements the event priority flag williamr@2: * @return void williamr@2: */ williamr@2: void DecrementEventPriorityFlag(); williamr@2: williamr@2: private: // Data williamr@2: // The client application UID. williamr@2: TUid iAppUid; williamr@2: // List of downloads. williamr@2: CDownloadArray* iDownloadArray; ///< Owned. williamr@2: // List of observers. williamr@2: CDownloadMgrObserver* iObservers; ///< Owned. williamr@2: // Default attributes. williamr@2: CArrayPtrFlat< CDefaultAttrib >* iDefaultAttribs; ///< Owned. williamr@2: // Moved event handler williamr@2: CDownloadMgrHandler* iManagerHandler; ///< Owned. williamr@2: // Extension class williamr@2: CRHttpDownloadMgrExtension* iExtension; ///< Owned. williamr@2: williamr@2: public: // Friend classes williamr@2: williamr@2: friend class RHttpDownload; williamr@2: friend class CDownloadMgrHandler; williamr@2: friend class CTransactionObserver; williamr@2: friend class CCodObserver; williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Creates a download manager subsession and performs operations on it williamr@2: * williamr@2: * @lib - williamr@2: * @since Series 60 2.8 williamr@2: */ williamr@2: NONSHARABLE_CLASS( RHttpDownload ): public RSubSessionBase williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Cod download progress states williamr@2: */ williamr@2: enum TCodProgressState williamr@2: { williamr@2: ENotActive, williamr@2: EPaused, williamr@2: EInProgress williamr@2: }; williamr@2: private: williamr@2: williamr@2: /** williamr@2: * C++ default constructor. williamr@2: */ williamr@2: RHttpDownload( RHttpDownloadMgr* aServer ); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Starts downloading. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt Start(); williamr@2: williamr@2: /** williamr@2: * Pauses downloading. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt Pause(); williamr@2: williamr@2: /** williamr@2: * Resets downloading. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt Reset(); williamr@2: williamr@2: /** williamr@2: * Deletes downloading. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt Delete(); williamr@2: williamr@2: /** williamr@2: * Moves downloaded content to the previously specified location williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt Move(); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TInt attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TInt attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetIntAttribute( const TUint aAttribute, TInt32& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TBool attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TBool attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetBoolAttribute( const TUint aAttribute, TBool& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TDes16 attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TDes16 attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetStringAttribute( const TUint aAttribute, TDes16& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TDes8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aValue On completion, contains the requested TDes8 attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetStringAttribute( const TUint aAttribute, TDes8& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the download's destination file's handle. williamr@2: * @param aFile RFile that adopts file handle from download. williamr@2: */ williamr@2: IMPORT_C TInt GetFileHandleAttribute( RFile& aFile ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TInt attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetIntAttribute( const TUint aAttribute, TInt32 aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TDesC attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetBoolAttribute( const TUint aAttribute, TBool aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TDesC attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetStringAttribute( const TUint aAttribute, const TDesC16& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TDesC8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetStringAttribute( const TUint aAttribute, const TDesC8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the download's destination file handle. williamr@2: * @param aFile RFile to be transfered to server. williamr@2: * @return KErrNotSupported on non-support platform. williamr@2: * @return KErrBadHandle is file is not opened. williamr@2: */ williamr@2: IMPORT_C TInt SetFileHandleAttribute( RFile& aFile ); williamr@2: /** williamr@2: * Gets the value for a TInt attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aMoIndex Identifies the media object index. williamr@2: * @param aValue On completion, contains the requested TInt attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetIntAttribute( const TUint aAttribute, const TInt32& aMoIndex, TInt32& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TBool attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aMoIndex Identifies the media object index. williamr@2: * @param aValue On completion, contains the requested TBool attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetBoolAttribute( const TUint aAttribute, const TInt32& aMoIndex, TBool& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TDes16 attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aMoIndex Identifies the media object index. williamr@2: * @param aValue On completion, contains the requested TDes16 attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetStringAttribute( const TUint aAttribute, const TInt32& aMoIndex, TDes16& aValue ); williamr@2: williamr@2: /** williamr@2: * Gets the value for a TDes8 attribute. williamr@2: * @param aAttribute Identifies the attribute to be retrived. williamr@2: * @param aMoIndex Identifies the media object index. williamr@2: * @param aValue On completion, contains the requested TDes8 attribute. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt GetStringAttribute( const TUint aAttribute, const TInt32& aMoIndex, TDes8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the value for a TDesC attribute. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aMoIndex Identifies the media object index. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetStringAttribute(const TUint aAttribute, const TInt32& aMoIndex, const TDesC16& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the download data (media information). williamr@2: * @param sizeBytes The length of descriptor (second parameter) in bytes. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetDownloadDataAttribute( const TDesC8& aValue ); williamr@2: williamr@2: /** williamr@2: * Sets the download data (media information). williamr@2: * @param sizeBytes The length of descriptor (second parameter) in bytes. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: IMPORT_C TInt SetTrackDataAttribute( const TInt aIndex, const TDesC8& aValue ); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Closes download subsession. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: void Close(); williamr@2: williamr@2: williamr@2: /** williamr@2: * Indicates whether the download is closed. williamr@2: * @param - None williamr@2: * @return TBool - ETrue if download is closed else EFalse. williamr@2: */ williamr@2: TBool IsClosed() williamr@2: { williamr@2: return iClosed; williamr@2: } williamr@2: williamr@2: /** williamr@2: * Resume COD download. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: void ResumeCodDownloadL() ; williamr@2: williamr@2: /** williamr@2: * Get Downloaded Size of product. williamr@2: * @param - williamr@2: * @return TInt. williamr@2: */ williamr@2: TInt GetProductDownloadedSize(); williamr@2: williamr@2: private: // New functions williamr@2: williamr@2: /** williamr@2: * Closes download subsession. This is called internally to close the sub session when the download williamr@2: * is completed. Only the subsession will be closed but retains the RHttpDownload object. williamr@2: * @return none. williamr@2: */ williamr@2: void CloseSubSession(); williamr@2: williamr@2: /** williamr@2: * This is called internally to save the downloaded subsession before closing the subsession williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: void SaveDownloadInfoL(); williamr@2: williamr@2: /** williamr@2: * Creates download subsession. williamr@2: * @param aUrl The url to be downloaded. williamr@2: * @return None. williamr@2: */ williamr@2: void CreateL( const TDesC8& aUrl, const TPtr8 aPackedAttribs ); williamr@2: williamr@2: /** williamr@2: * Attaches subsession to the server subsession by handle. williamr@2: * @param aHandle A handle which identifies the server subsession. williamr@2: * @return None. williamr@2: */ williamr@2: void AttachL( TInt aHandle ); williamr@2: williamr@2: /** williamr@2: * Start event notification. williamr@2: * @param aDownloadState State. williamr@2: * @param aProgressState Progress. williamr@2: * @param aEventAttrib Packed attribs williamr@2: * @param aStatus Handler's request status. williamr@2: * @return None. williamr@2: */ williamr@2: void StartEventNotification( TDes8& aDownloadState, williamr@2: TDes8& aProgressState, williamr@2: TDes8& aEventAttrib, williamr@2: TRequestStatus& aStatus ); williamr@2: williamr@2: /** williamr@2: * Cancels event notification. williamr@2: * @param - williamr@2: * @return None. williamr@2: */ williamr@2: void CancelEventNotification(); williamr@2: williamr@2: /** williamr@2: * Returns true if the handle is equals with the stored one. williamr@2: * @param aHandle Handle. williamr@2: * @return TBool. williamr@2: */ williamr@2: TBool IsDownload( TInt aHandle ); williamr@2: williamr@2: /** williamr@2: * Returns true if the params belongs to this download. williamr@2: * @since 2.8 williamr@2: * @param aParsedReqUrl given URL williamr@2: * @param aMsgBody Message body from post operation williamr@2: * @return TBool williamr@2: */ williamr@2: TBool IsDownloadL( const TUriParser8& aParsedReqUrl, williamr@2: const TDesC8& aMsgBody ); williamr@2: williamr@2: /** williamr@2: * Sets the default value for the attributes. williamr@2: * @param aDownload The download which default attributes to be set. williamr@2: * @return None. williamr@2: */ williamr@2: void SetDefaultAttributesL( const TDesC8& aPackedAttribs ); williamr@2: williamr@2: /** williamr@2: * Buffers attributes which need when a client deletes download. williamr@2: * @param None. williamr@2: * @return None. williamr@2: */ williamr@2: void BufferAttributesL(); williamr@2: williamr@2: /** williamr@2: * Sets event type. williamr@2: * @param aEventType. williamr@2: * @return None. williamr@2: */ williamr@2: void SetEventType( THttpDownloadState aEventType ); williamr@2: williamr@2: /** williamr@2: * Sets http transaction. williamr@2: * @param aHttpTransaction. williamr@2: * @return None. williamr@2: */ williamr@2: void SetHttpTransactionL( TInt aHttpTransaction ); williamr@2: williamr@2: /** williamr@2: * Delete http transaction. williamr@2: * @param . williamr@2: * @return None. williamr@2: */ williamr@2: void DeleteTransaction(); williamr@2: williamr@2: /** williamr@2: * Initialize OMA DD download. williamr@2: * @param aBuf The descriptor. williamr@2: * @param aType Descriptor data type. williamr@2: * @param aEikEnv Eikon environment or NULL. Can be NULL if download williamr@2: * does not require UI functionality. If download needs UI but NULL is williamr@2: * passed here, the download fails with EFailedPermanent KErrCancel. williamr@2: * @return None. williamr@2: */ williamr@2: void InitCodDownloadL( const TDesC8& aBuf, williamr@2: const TDesC8& aMimeType, williamr@2: CEikonEnv* aEikEnv ); williamr@2: williamr@2: /** williamr@2: * Initialize paused OMA DD download. williamr@2: * @param aAppUid App UID of the client. williamr@2: * @return None. williamr@2: */ williamr@2: void InitPausedCodDownloadL( const TUid aAppUid ); williamr@2: williamr@2: /** williamr@2: * Starts COD download. williamr@2: * @return None. williamr@2: */ williamr@2: void DoStartCodL(); williamr@2: williamr@2: /** williamr@2: * Checks the mime type of a completed content. williamr@2: * Creates a cod download if it is considered as OMA DD. williamr@2: * The return value is the result of the checking. williamr@2: * Leaves in case of failure. williamr@2: * @return TBool. williamr@2: */ williamr@2: TBool CheckContentTypeAndCreateCodDownloadL(); williamr@2: williamr@2: /** williamr@2: * Sets the error value. williamr@2: * @param aAttribute Identifies the attribute to be set. williamr@2: * @param aValue The value to be set. williamr@2: * @return None. williamr@2: */ williamr@2: TInt SetOnError( TInt aError, williamr@2: THttpDownloadMgrError aDlError = EGeneral ); williamr@2: williamr@2: #ifdef DEAD_CODE williamr@2: /** williamr@2: * Allocate buffer for event attribute. Part of IPC optimalization. williamr@2: * @return HBufC8. williamr@2: */ williamr@2: HBufC8* AllocEventAttribBufL(); williamr@2: #endif williamr@2: williamr@2: /** williamr@2: * Unpack event attribute package. williamr@2: * @param aPack Packed attributes. williamr@2: * @return None. williamr@2: */ williamr@2: void UnpackEventAttribL( const TDesC8& aPack ); williamr@2: williamr@2: /** williamr@2: * True if it is a client side download williamr@2: * @param - williamr@2: * @return TBool. williamr@2: */ williamr@2: TBool IsClientSideDownload() const; williamr@2: williamr@2: /** williamr@2: * Tells that download should be deleted. williamr@2: * @param None williamr@2: * @return TBool. williamr@2: */ williamr@2: TBool IsToBeDeleted(); williamr@2: williamr@2: /** williamr@2: * Starts downloading. williamr@2: * @param None williamr@2: * @return None. williamr@2: */ williamr@2: void DoStartL(); williamr@2: williamr@2: /** williamr@2: * Returns the the event priority flag from session williamr@2: * @return TInt williamr@2: */ williamr@2: TInt EventPriorityFlag() const; williamr@2: williamr@2: /** williamr@2: * ETrue if download should be deleted on COD completion. williamr@2: * @return TBool williamr@2: */ williamr@2: TBool IsDeleteCodWhenDone() const; williamr@2: williamr@2: /** williamr@2: * Sets COD in progress flag. williamr@2: * @return None williamr@2: */ williamr@2: void SetCodInProgress( TCodProgressState aVal ); williamr@2: williamr@2: /** williamr@2: * Attach to an existing download. williamr@2: * @param aDlId Download ID. williamr@2: * @return None. williamr@2: */ williamr@2: void AttachToDownloadL( const TInt32 aDlId ); williamr@2: williamr@2: /** williamr@2: * Sets COD in progress flag. williamr@2: * @return iExtension williamr@2: */ williamr@2: TInt32 ActiveMoIndex() const; williamr@2: williamr@2: /** williamr@2: * To stop waiting loop of AS williamr@2: * @return None. williamr@2: */ williamr@2: void StopWaitingAS(); williamr@2: williamr@2: private: // Data williamr@2: // Event notification handler. williamr@2: CDownloadMgrHandler* iDownloadHandler; ///< Owned. williamr@2: // Download manager session. williamr@2: RHttpDownloadMgr* iDownloadMgr; ///< NOT Owned. williamr@2: // Unique identifier of server side subsession. williamr@2: TInt iHandle; williamr@2: // Extension class williamr@2: CRHttpDownloadExtension* iExtension; ///< Owned. williamr@2: williamr@2: CTransactionObserver* iTransactionObserver; williamr@2: RHTTPTransaction* iHttpTransaction; williamr@2: // Descriptor Based download COD/DD williamr@2: CCodDownload* iCodDownload; ///< Owned. williamr@2: // Cod observer williamr@2: CCodObserver* iCodObserver; ///< Owned. williamr@2: // Client Side Download williamr@2: TBool iClientSideDownload; williamr@2: // Boolean flag which indicates download closure williamr@2: TBool iClosed; williamr@2: // Boolean flag which indicates download subsession closure williamr@2: TBool iClosedSubSession; williamr@2: // Extension class to cache the cloased subsession williamr@2: CRHttpDlExtension* iDlExtension; ///< Owned. williamr@2: williamr@2: CActiveSchedulerWait* iWait; williamr@2: williamr@2: // Boolean flag which indicates Active Scheduler is Ready williamr@2: TBool iASReady; williamr@2: williamr@2: public: // Friend classes williamr@2: williamr@2: friend class CDownloadMgrHandler; williamr@2: friend class RHttpDownloadMgr; williamr@2: friend class RHttpDownloadMgrApiExt; williamr@2: friend class CTransactionObserver; williamr@2: friend class CCodObserver; williamr@2: friend class CDownloadMgrHandler; williamr@2: williamr@2: }; williamr@2: williamr@2: #endif /* __DOWNLOADMGR_CLIENT_H__ */ williamr@2: