diff -r 000000000000 -r dd21522fd290 browserutilities/downloadmgr/DownloadMgrClntSrv/inc/DownloadMgrServer.h --- /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 +#include + +// 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