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: