--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browserutilities/downloadmgr/DownloadMgrClntSrv/inc/DownloadMgrServer.h Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,960 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains the definition of the Download Mgr Server.
+*
+*/
+
+
+#ifndef __DOWNLOADMGR_SERVER_H__
+#define __DOWNLOADMGR_SERVER_H__
+
+// INCLUDES
+#include <HttpDownloadManagerServerEngine.h>
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CHttpClientAppInstance;
+class CHttpDownload;
+class CDownloadSubSession;
+class CDownloadMgrEventQueue;
+class CDefaultAttrib;
+class CDownloadMgrServer;
+
+// DATA TYPES
+// panic reasons
+enum TDownloadMgrSvrPanic
+ {
+ EBadRequest,
+ EBadDescriptor,
+ EDescriptorNonNumeric,
+ EMainSchedulerError,
+ ESvrCreateServer,
+ ECreateTrapCleanup,
+ EBadCounterRemove,
+ EBadSubsessionHandle,
+ EMultipleInitDownloadEvent
+ };
+
+// CLASS DECLARATION
+/**
+* Download manager server's shutdown timer.
+*/
+NONSHARABLE_CLASS( CDownloadMgrShutdown ) : public CActive
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CDownloadMgrShutdown* NewL( CDownloadMgrServer* aServer );
+
+ /**
+ * Destructor.
+ */
+ ~CDownloadMgrShutdown();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CDownloadMgrShutdown( CDownloadMgrServer* aServer );
+
+ /**
+ * Default Symbian 2nd phase constructor .
+ */
+ void ConstructL();
+
+ public: // New functions
+
+ /**
+ * Starts the timer.
+ * @param
+ * @return
+ */
+ void Start();
+
+ private: // From CActive
+
+ /**
+ * Cancels the timer.
+ * @param
+ * @return
+ */
+ void DoCancel();
+ /**
+ * Handles an active object’s request completion event.
+ * @param
+ * @return
+ */
+ void RunL();
+
+ private: // Data
+
+ RTimer iTimer;
+ CDownloadMgrServer* iServer;
+ };
+
+/**
+* Download manager server.
+*/
+NONSHARABLE_CLASS( CDownloadMgrServer ) : public CPolicyServer
+
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CDownloadMgrServer* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CDownloadMgrServer();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CDownloadMgrServer();
+
+ /**
+ * Default Symbian 2nd phase constructor .
+ */
+ void ConstructL();
+
+ public: // From CServer2
+
+ /**
+ * Creates a server-side client session object.
+ * @param aVersion Version information supplied by the client.
+ * @return A pointer to the newly created server-side client session.
+ */
+ CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+
+ public: // New functions
+
+ /**
+ * Creates the object container.
+ * @param -
+ * @return A pointer to the newly created CObjectCon.
+ */
+ CObjectCon* NewContainerL();
+
+ /**
+ * Removes the specified object container from this container index
+ * and deletes it.
+ * @param aCon A pointer to the object container to be removed.
+ * @return None.
+ */
+ void RemoveContainer( CObjectCon* aCon );
+
+ /**
+ * Create Client App Instance owned by CDownloadMgrSession.
+ * @param aAppUid app uid of the cleant
+ * @param aGetAllPendingDownloads
+ * @return A pointer to the newly created CHttpClientAppInstance.
+ */
+ CHttpClientAppInstance* CreateNewClientAppInstanceL(
+ TUint32 aAppUid,
+ MDownloadStateObserver& aObserver,
+ TBool aGetAllPendingDownloads );
+
+ /**
+ * Closes Client App Instance owned by CDownloadMgrSession.
+ * @param aAppInst client app instance
+ * @return None.
+ */
+ void CloseClientInstance( CHttpClientAppInstance* aAppInst );
+
+ /**
+ * Keeps count of client sessions. Cancels shutdown timer.
+ * @param -
+ * @return None.
+ */
+ void IcrementSessions();
+
+ /**
+ * Keeps count of client sessions. Starts shutdown timer if needed.
+ * @param -
+ * @return None.
+ */
+ void DecrementSessions();
+
+ /**
+ * Generates and returns a unique session id
+ */
+ TInt NextSessionId();
+
+ /**
+ * returns number of active sessions
+ */
+ TInt SessionsCount() {return iSessionCount;}
+
+ public:
+
+ /**
+ * Panics the server thread associated with this session.
+ * @param aPanic The panic number
+ * @return None.
+ */
+ static void PanicServer( TDownloadMgrSvrPanic aPanic );
+
+ /**
+ * Returns the number of active download in the engine.
+ * @since Series 60 v2.8
+ * @param ?arg1 ?description
+ * @return ?description
+ */
+ TInt ActiveDownloads() const;
+
+ private: // Data
+
+ // A container for object containers
+ CObjectConIx* iContainerIndex; ///< Owned.
+ // The Download Mgr Server Engine
+ CHttpDownloadManagerServerEngine* iDmEngine; ///< Owned.
+ // The number of sessions
+ TInt iSessionCount;
+ // Shutdown timer
+ CDownloadMgrShutdown* iShutdown; ///< Owned.
+ // next unique session id
+ TInt iNextSessionId;
+
+ public: // Friend classes
+
+ friend class CHttpDownloadManagerServerEngine;
+ };
+
+/**
+* This class represents the server side client app instance.
+*/
+NONSHARABLE_CLASS( CDownloadMgrSession ) :
+ public CSession2,
+ public MDownloadStateObserver
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CDownloadMgrSession* NewL( CDownloadMgrServer* aServer );
+
+ /**
+ * Destructor.
+ */
+ ~CDownloadMgrSession();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CDownloadMgrSession();
+
+ /**
+ * Default Symbian 2nd phase constructor.
+ */
+ void ConstructL( CDownloadMgrServer* aServer) ;
+
+ public: // New functions
+
+ /**
+ * Returns the subsession identified by the handle.
+ * @param aHandle the handle number that represents
+ * the subsession in the object index.
+ * @return None.
+ */
+ CDownloadSubSession* DownloadFromHandle( TUint aHandle );
+
+ /**
+ * Dispatch request.
+ * @param aMessage The message containing the client request
+ * @return None.
+ */
+ void DispatchMessageL( const RMessage2& aMessage );
+
+ /**
+ * Sets the current message.
+ * @param aMessage The message containing the client request
+ * @return None.
+ */
+ void SetCurrentMessage( const RMessage2& aMessage );
+
+ /**
+ * Gets the current message.
+ * @param -
+ * @return The current message.
+ */
+ const RMessage2& CurrentMessage() const;
+
+ /**
+ * Creates a new download and subsession.
+ * Writes the handle of the subsession to the client's address space
+ * @param -
+ * @return None.
+ */
+ void NewDownloadL();
+
+ /**
+ * Attach this session to the client, writes the handle of the
+ * current downloads to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void DownloadMgrAttachL();
+
+ /**
+ * Attach a client to an existing download (PD download)
+ * @param -
+ * @return None.
+ */
+ void AttachToDownloadL();
+
+ /**
+ * Create a download subsession with CHttpDownload.
+ * @param aDownload
+ * @param aDefAttrib - indicates if default setting attrib is needed
+ * @return None.
+ */
+ void CreateDownloadL( CHttpDownload* aDownload, TBool aDefAttrib = EFalse );
+
+ /**
+ * Attach a download subsession to the client.
+ * @param -
+ * @return None.
+ */
+ void DownloadAttachL();
+
+ /**
+ * Delete the download subsession identified by the handle.
+ * @param aHandle the handle number that represents
+ * the subsession in the object index.
+ * @return None.
+ */
+ void DeleteDownload( TUint aHandle );
+
+ /**
+ * Panics the client thread associated with this session.
+ * @param aPanic The panic number
+ * @return None.
+ */
+ void PanicClient( TInt aPanic ) const;
+
+ /**
+ * Pauses all download.
+ * @param -
+ * @return None.
+ */
+ void PauseAllL();
+
+ /**
+ * Starts all download.
+ * @param -
+ * @return None.
+ */
+ void StartAllL();
+
+ /**
+ * Resets all download.
+ * @param -
+ * @return None.
+ */
+ void ResetAll();
+
+ /**
+ * Deletes all download.
+ * @param -
+ * @return None.
+ */
+ void DeleteAll();
+
+ /**
+ * Disconnects the instance's connection and pauses all downloads.
+ * @since Series 60 2.8
+ * @return none
+ */
+ void Disconnect();
+
+ /**
+ * Sets the IAP to the app instance reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetIapIdL();
+
+ /**
+ * Gets the IAP from the app instace and write to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetIapId();
+
+ /**
+ * Copies data from an 8 bit descriptor in the server address space
+ * to the client thread’s address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param aMessage This is the message of which param is set.
+ * @param An 8 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Write( TInt aParam, RMessage2 aMessage, TDesC8& aDes );
+
+ /**
+ * Copies data from an 8 bit descriptor in the server address space
+ * to the client thread’s address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param aMessage This is the message of which param is set.
+ * @param A 16 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Write( TInt aParam, RMessage2 aMessage, TDesC16& aDes );
+
+ /**
+ * Copies data from the client thread’s address space into an 8 bit
+ * descriptor in the server address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param aDes An 8 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Read( TInt aParam, TPtr8& aDes );
+
+ /**
+ * Copies data from the client thread’s address space into an 8 bit
+ * descriptor in the server address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param aDes An 8 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Read( TInt aParam, TPtr16& aDes );
+
+ /**
+ * Creates the app instance we are representing if needed.
+ * @param aAppUid application uid
+ * @param None.
+ */
+ void CreateClientAppInstanceL( TUint32 aAppUid );
+
+ /**
+ * Copies unique handle in the server address space
+ * to the client thread’s address space.
+ * @param aHandle the handle number that represents
+ * the subsession in the object index.
+ * @return None.
+ */
+ void WriteHandle( TInt aHandle );
+
+ /**
+ * Initializes the session's event handler.
+ * @param aMessage the message which should be completed.
+ * @return None.
+ */
+ void InitSessionEvent( const RMessage2& aMessage );
+
+ /**
+ * Cancels the moved event handler.
+ * @param -
+ * @return None.
+ */
+ void CancelMovedEvent();
+
+ /**
+ * Creates a new subsession with download and send event to the client.
+ * @param -
+ * @return ETrue, if event was requested and sent.
+ */
+ TBool CreateSubSessionAndSendEventL( CHttpDownload* aDownload,
+ TInt32 aDownloadState,
+ TInt32 aProgressState,
+ TInt32 aMoIndex );
+
+ /**
+ * Removes download from the event queue.
+ * @param aDownload
+ * @return None.
+ */
+ void RemoveFromQueue( CHttpDownload* aDownload );
+
+ /**
+ * Return the session Id.
+ * @return id of the session
+ */
+ TInt SessionId() const;
+
+ /**
+ * Return the client app instance.
+ * @return client app instance
+ */
+ CHttpClientAppInstance* ClientAppInstance()const;
+
+ public: // from MDownloadStateObserver
+
+ /**
+ * Indicates an event occoured by the download.
+ * @param aDownload The download object which the event occured.
+ * @return None.
+ */
+ void Event( CHttpDownload* aDownload,
+ THttpDownloadState aDlState,
+ THttpProgressState aProgState,
+ TInt32 aMoIndex );
+
+ /**
+ *
+ * @param aDownload The download object which the event occured.
+ * @return None.
+ */
+ void SetComplete( TBool aComplete );
+
+ protected:
+
+ /**
+ * Called if the event needs to be vompleted
+ * @param aErrorStatus Leave code or KErrNone
+ * @return None.
+ */
+ void EventComplete( TInt aErrorStatus );
+
+ /**
+ * Initialize the session with the parameters got from client side.
+ * Write the number of the attachable downloads to the
+ * client's address space.
+ * @param -
+ * @return None.
+ */
+ void InitializeL();
+
+ /**
+ * Gets the value for a TInt attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetIntAttributeL();
+
+ /**
+ * Gets the value for a TBool attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetBoolAttributeL();
+
+ /**
+ * Gets the value for a string attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetStringAttributeL();
+
+ /**
+ * Gets the value for a string attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetString8AttributeL();
+
+ /**
+ * Sets the value for a TInt attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetIntAttributeL();
+
+ /**
+ * Sets the value for a TBool attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetBoolAttributeL();
+
+ /**
+ * Sets the value for a string attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetStringAttributeL();
+
+ /**
+ * Sets the value for a string attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetString8AttributeL();
+
+ private: // from CSession
+
+ /**
+ * Handles the servicing of client requests to the server..
+ * @param aMessage The message containing the client request.
+ * @return None.
+ */
+ void ServiceL( const RMessage2& aMessage );
+
+ private: // Data
+
+ // To the current message
+ RMessage2 iCurrentMessage;
+ // Object container for this session
+ CObjectCon* iObjectContainer; ///< Owned.
+ // Object index which stores objects (CDownloadSubSession instances)
+ // for this session
+ CObjectIx* iObjectIx; ///< Owned.
+ // Pointer to owning server
+ CDownloadMgrServer* iDownloadMgrServer; ///< NOT Owned.
+ // The client app instance which we are representing
+ CHttpClientAppInstance* iClientAppInstance; ///< Owned.
+ // Queue the events comes from the engine.
+ CDownloadMgrEventQueue* iEventQueue; ///< Owned.
+ // Indicates if the request may be completed
+ TBool iComplete;
+ // Used by moved event handler, the message which should be completed.
+ RMessage2 iEventMessage; ///< NOT Owned.
+ // Indicates the moved event is initialized.
+ TBool iEvent;
+ // Initialization parameters set by the client side
+ TBool iIsMaster;
+ // Unique id of the session
+ TInt iSessionId;
+ };
+
+/**
+* This class represents the server side download object.
+*/
+NONSHARABLE_CLASS( CDownloadSubSession ) : public CObject
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CDownloadSubSession * NewL( CDownloadMgrSession* aSession,
+ CHttpDownload* aDownload );
+
+ /**
+ * destructor.
+ */
+ ~CDownloadSubSession();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CDownloadSubSession();
+
+ /**
+ * Default Symbian 2nd phase constructor.
+ */
+ void ConstructL( CDownloadMgrSession *aSession,
+ CHttpDownload* aDownload );
+
+ public: // New functions
+
+ /**
+ * Closes the subsession.
+ * @param -
+ * @return None.
+ */
+ void CloseDownload();
+
+ /**
+ * Closes the completed subsession.
+ * @param -
+ * @return None.
+ */
+ void CloseCompletedDownload();
+
+ /**
+ * Starts the download.
+ * @param -
+ * @return None.
+ */
+ void StartL();
+
+ /**
+ * Pauses the download.
+ * @param -
+ * @return None.
+ */
+ void PauseL();
+
+ /**
+ * Resets the download.
+ * @param -
+ * @return None.
+ */
+ void Reset();
+
+ /**
+ * Deletes the download.
+ * @param -
+ * @return None.
+ */
+ void Delete();
+
+ /**
+ * Moves the downloaded content.
+ * @param -
+ * @return None.
+ */
+ void MoveL();
+
+ /**
+ * Returns the current message - gotten from session.
+ * @param -
+ * @return RMessage2& gotten from the session.
+ */
+ const RMessage2& Message() const;
+
+ /**
+ * Initializes the download's event handler.
+ * @param aMessage the message which should be completed.
+ * @return None.
+ */
+ void InitDownloadEvent( const RMessage2& aMessage );
+
+ /**
+ * Cancels the download's event handler.
+ * @param -
+ * @return None.
+ */
+ void CancelDownloadEvent();
+
+ /**
+ * Indicates an event occoured by the download.
+ * @param aDownloadState
+ * @param aProgressState
+ * @return TBool True if the event was sent.
+ */
+ TBool EventL( TInt32 aDownloadState, TInt32 aProgressState, TInt32 aMoIndex );
+
+ /**
+ * Called if a leave from the download is trapped
+ * @param aError Leave code
+ * @return None.
+ */
+ void OnError( TInt aError,
+ THttpDownloadMgrError aDlError = EGeneral );
+
+ /**
+ * Called if the event needs to be vompleted
+ * @param aErrorStatus Leave code or KErrNone
+ * @return None.
+ */
+ void EventComplete( TInt aErrorStatus );
+
+ /**
+ * Gets the value for a TInt attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetIntAttributeL();
+
+ /**
+ * Gets the value for a TBool attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetBoolAttributeL();
+
+ /**
+ * Gets the value for a string attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetStringAttributeL();
+
+ /**
+ * Gets the value for a string attribute writing to the client's address space.
+ * @param -
+ * @return None.
+ */
+ void GetString8AttributeL();
+
+ /**
+ * Gets the file handle from the download.
+ */
+ void GetFileHandleAttributeL();
+
+ /**
+ * Sets the value for a TInt attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetIntAttributeL();
+
+ /**
+ * Sets the value for a TBool attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetBoolAttributeL();
+
+ /**
+ * Sets the value for a string attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetStringAttributeL();
+
+ /**
+ * Sets the value for a string attribute reading from the client's address space.
+ * @param -
+ * @return None.
+ */
+ void SetString8AttributeL();
+
+ /**
+ * Sets the file handle for the download.
+ */
+ void SetFileHandleAttributeL();
+
+ /**
+ * Sets the download data (media info).
+ */
+ void SetDownloadDataAttributeL();
+
+ /**
+ * Sets the media object data (track info).
+ */
+ void SetTrackDataAttributeL();
+
+ /**
+ * Sets default attributes.
+ * @param -
+ * @return None.
+ */
+ void SetDefAttributesL();
+
+ /**
+ * Copies data from an 8 bit descriptor in the server address space
+ * to the client thread’s address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param A 16 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Write( TInt aParam, TDesC8& aDes );
+
+ /**
+ * Copies data from an 8 bit descriptor in the server address space
+ * to the client thread’s address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param An 8 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Write( TInt aParam, TDesC16& aDes );
+
+ /**
+ * Copies data from the client thread’s address space into an 8 bit
+ * descriptor in the server address space.
+ * @param aParam This is a value between 0 and 3 and indicates
+ * which of the four arguments in the original client message
+ * contains the pointer to the descriptor.
+ * @param aDes A 16 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Read( TInt aParam, TDes8& aDes );
+
+ /**
+ * Copies data from the client thread’s address space into an 8 bit
+ * descriptor in the server address space.
+ * @param aPtr A pointer to a valid address within the client
+ * thread’s address space.
+ * @param aDes An 8 bit descriptor in the server address space.
+ * @return None.
+ */
+ void Read( TInt aParam, TDes16& aDes );
+
+ /**
+ * Checks the identity of the download objects.
+ * @param aDownload The download object.
+ * @return True if the specified aDownload equals with the represented one.
+ */
+ TBool IsDownload( CHttpDownload* aDownload );
+
+ /**
+ * Returns a pointer to the download.
+ * @param .
+ * @return CHttpDownload*.
+ */
+ CHttpDownload* Download();
+
+ /**
+ * Returns the handle number.
+ * @param -
+ * @return TUint.
+ */
+ TUint Handle();
+
+ /**
+ * Sets the handle number.
+ * @param aHandle handle number.
+ * @return None.
+ */
+ void SetHandle( TUint aHandle );
+
+ /**
+ * Dispatches download message
+ * @since Series v2.8 Series60
+ * @param aMessage FThe current message.
+ * @return none. Leaves on error.
+ */
+ void DispatchMessageL( const RMessage2& aMessage );
+
+ /**
+ * Buffers attributes which need when a client deletes download.
+ * @param None.
+ * @return None.
+ */
+ void BufferAttributesL();
+
+ /**
+ * Create a package for attributes. Part of IPC optimalization.
+ * @param aBuffered - indicates that all the buffered attributes needs to be passed.
+ * @return HBufC8*.
+ */
+ HBufC8* CreateAttribPackL( TBool aBuffered = EFalse);
+
+ protected: // Data
+ // Session owning us.
+ CDownloadMgrSession* iSession; // NOT Owned.
+
+ private: // Data
+ // The download we are representing
+ CHttpDownload* iDownload; ///< NOT Owned.
+ // Used by event handler, the message which should be completed.
+ RMessage2 iMessage; ///< NOT Owned.
+ // Indicates the event is initialized.
+ TBool iEvent;
+ // Unique handle of the subsession
+ TUint iHandle;
+
+ CArrayPtrFlat< CDefaultAttrib >* iAttribs;
+ };
+
+#endif /* __DOWNLOADMGR_SERVER_H__ */
\ No newline at end of file