diff -r 000000000000 -r c53acadfccc6 metadataengine/server/inc/mdsserversession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/metadataengine/server/inc/mdsserversession.h Mon Jan 18 20:34:07 2010 +0200 @@ -0,0 +1,436 @@ +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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 is Metadata engine server session file* +*/ + + +#ifndef __MDESERVERSESSION_H__ +#define __MDESERVERSESSION_H__ + +// INCLUDE FILES +#include + +#include "mdscommoninternal.h" +#include "mdcserializationbuffer.h" + +// FORWARD DECLARATIONS +class CMdSServer; +class CMdSFindEngine; +class CMdCSerializationBuffer; + +// CLASS DECLARATION +/** +* CServerSession. +* An instance of class CServerSession is created for each client. +*/ +class CMdSServerSession : public CSession2 + { + public: // Constructors and destructors + + /** + * NewL. + * Two-phased constructor. + * @param aClient The Client's thread. + * @param aServer The server. + * @return Pointer to created CMdEServerSession object. + */ + static CMdSServerSession* NewL( CMdSServer& aServer ); + + /** + * NewLC. + * Two-phased constructor. + * @param aClient The Client's thread. + * @param aServer The server. + * @return Pointer to created CMdEServerSession object. + */ + static CMdSServerSession* NewLC( CMdSServer& aServer ); + + /** + * ~CMdEServerSession. + * Destructor. + */ + virtual ~CMdSServerSession(); + + /** + * Cache a notification for an entry; + * @param aId notification ID + * @param aCompleteCode complete code + * @param aData serialized notification data, ownership of data changes + * even if method leaves + */ + void CacheNotificationL(TInt aId, TUint32 aCompleteCode, CMdCSerializationBuffer* aData); + + CMdSServer& GetServer() const; + + private: // Internal helper methods + /** + * Check that all queries are complete. + */ + void QueriesCompleteL(); + + protected: // Methods for own use + + /** + * Adds items to database. + * @param aMessage Message from client + */ + void AddL( const RMessage2& aMsg ); + + /** + * Adds relation to database. + * @param aMessage message from client + */ + void AddRelationDefL(const RMessage2 &aMsg); + + /** + * Adds event to database. + * @param aMessage message from client + */ + void AddEventDefL(const RMessage2 &aMsg); + + /** + * Removes item from database. + * @param aMessage Message from client + */ + void RemoveL( const RMessage2& aMsg ); + + /** + * Removes item from database. + * @param aMessage Message from client + */ + void RemoveByUriL( const RMessage2& aMsg, TBool aRemoveEvents ); + + /** + * Finds item from database. + * @param aMessage Message from client + */ + void FindL( const RMessage2& aMsg ); + + /** + * Finds item from database. + * @param aMessage Message from client + */ + void FindAsyncL( const RMessage2& aMsg ); + + /** + * Finds item from database. + * @param aMessage Message from client + */ + void FindContinueAsyncL( const RMessage2& aMsg ); + + /** + * Finds item from database and completes message. + * @param aMessage Message from client + */ + void FindCancel( const RMessage2& aMsg, TInt aError ); + + /** + * Get object's "base" values from database and completes message. + * @param aMessage Message from client + */ + void CheckObjectL( const RMessage2& aMsg ); + + /** + * Transfers data from server to client. + * @param aMessage Message from client + */ + void GetDataL( const RMessage2& aMsg ); + + /** + * Cancels the modifying of object and unlocks the object. + * @param aMessage Message from client + */ + void CancelObjectL( const RMessage2& aMsg ); + + /** + * Commits the modified items to database. + * @param aMessage Message from client + */ + void UpdateL( const RMessage2& aMsg ); + + /** + * Registers the client for notifications. + * @param aMessage Message from client + */ + void RegisterL( const RMessage2& aMsg ); + + /** + * Continues registration for an existing client. + * @param aMessage Message from client + */ + void ListenL( const RMessage2& aMsg ); + + /** + * Unregisters a client for notifications. + * @param aMessage Message from client + */ + void UnregisterL( const RMessage2& aMsg ); + + /** + * Executes session shutdown. + * @param aMessage Message from client + */ + void ShutdownL( const RMessage2& aMsg ); + + /** + * Import metadata. + * @param aMessage Message from client + */ + void ImportMetadataL( const RMessage2& aMsg ); + + /** + * Export metadata + * @param aMessage Message from client + */ + void ExportMetadataL( const RMessage2& aMsg ); + + /** + * Import schema + */ + void ImportSchemaL( const RMessage2& aMsg ); + + /** + * Add memory card media ID + * @param aMessage Message from client where first argument is media ID + */ + void AddMemoryCardL(const RMessage2& aMessage); + + /** + * Get the latest memory card's media ID + * + * @param aMessage Message from client where first argument is returned + * Media ID + * @leave KErrNotFound Not memory cards exist at all + */ + void GetMemoryCardL(const RMessage2& aMessage); + + /** + * Check if the memory card's media ID exist in DB + * @param aMessage Message from client where first argument is media ID + * and second is exists boolean value + */ + void CheckMemoryCardL(const RMessage2& aMessage); + + /** + * Set media's media ID, drive and present state to DB. + * + * @param aMessage Message from client where first argument is media ID + * and second is drive and third is present state + */ + void SetMediaL(const RMessage2& aMessage); + + /** + * Check if the media's with given media ID exist in DB and return + * drive and present state. + * + * @param aMessage Message from client where first argument is media + * ID, second is media ID, third is drive and fourth + * is exists boolean value + */ + void GetMediaL(const RMessage2& aMessage); + + /** + * Get present medias' media IDs and drives. + * + * @param aMessage Message from client where first argument is media + * count and second is media infos + */ + void GetPresentMediasL(const RMessage2& aMessage); + + /** + * Sets files object to present state. + * @param aMessage Message from client where first argument is media ID + * and file count, second argument is URIs, third + * argument is TMdSFileInfos and fourth argument is + * result buffer, which are sent back to client + */ + void SetFilesToPresentL(const RMessage2& aMessage); + + /** + * Sets all file objects which has given media ID to not present state. + * + * @param aMessage Message from client where first argument is media ID + */ + void SetFilesToNotPresentL(const RMessage2& aMessage); + + /** + * Removes all file objects which has given media ID and are in not + * present. + * + * @param aMessage Message from client where first argument is media ID + */ + void RemoveFilesNotPresentL(const RMessage2& aMessage); + + /** + * Gets schema version. + * + * @param aMessage message from client where first argument is major + * version number and second is minor version number + */ + void GetSchemaVersionL(const RMessage2& aMessage); + + /** + * Set object to "present" state by GUID. + * + * @param aMessage message from client where first argument is GUID + * high and second is GUID low + * + * @leave KErrNotFound MdE can't find object in "not present" state + * with matching GUID + */ + void SetObjectToPresentByGuidL(const RMessage2& aMessage); + + /** + * Change path of objects, which match to the old path, to the new + * path. + * + * @param aMessage message from client where first argument is the old + * path and second is the new path + */ + void ChangePathL(const RMessage2& aMessage); + + /** + * Change C-drive media id to MdS_Medias table and update all objects that have the old id. + */ + void ChangeMediaIdL( const RMessage2& aMessage ); + + /** + * Set "binary composing to file" pending flag to objects. + * + * @param aMessage message from client where first argument is + * serialized array of object IDs + */ + void SetPendingL(const RMessage2& aMessage); + + /** + * Reset "binary composing to file" pending flag to objects. + * + * @param aMessage message from client where first argument is + * serialized array of object IDs + */ + void ResetPendingL(const RMessage2& aMessage); + + /** + * Get count of objects with "binary composing to file" pending flag + * + * @param aMessage message from client where first argument is + * serialized object def ID + * + * @return if >= 0, object count is returned, otherwise error code is + * returned + */ + TInt GetPendingCountL(const RMessage2& aMessage); + + /** + * Get IDs from objects with "binary composing to file" pending flag + * + * @param aMessage message from client where first argument is + * serialized object def ID and second argument is + * returned object ID count and third is serialized + * array for object IDs + * + * @return if > 0, buffer is not large enough for objects ID from DB, + * otherwise error code is returned + */ + TInt GetPendingL(const RMessage2& aMessage); + + public: // Functions from base classes + + /** + * From CSession2, ServiceL. + * Service request from client. + * @param aMessage Message from client + * (containing requested operation and any data). + */ + void ServiceL( const RMessage2& aMessage ); + + /** + * SizeToRemoteL. + * Writes size to slave process. + * @param aMessage Message from client + * @param aRemote, pointer to client's variable. + * @param aHierarchy hierarchy that's size is to be transmitted + */ + static void SizeToRemoteL( const RMessage2& aMsg, TInt aMessageSlot, TInt aSize); + + private: // Constructors and destructors + + /** + * CMdSServerSession. + * C++ default constructor. + * @param aClient The Client's thread. + * @param aServer The server. + */ + CMdSServerSession( CMdSServer& aServer ); + + /** + * ConstructL. + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * Internal function to handle service request from client. + * @param aMessage Message from client + * (containing requested operation and any data). + */ + void ServiceFunctionL( const RMessage2& aMessage ); + + CMdCSerializationBuffer* CombineBuffersL( + CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer ); + + CMdCSerializationBuffer* CombineItemBuffersL( + CMdCSerializationBuffer& aLeftBuffer, CMdCSerializationBuffer& aRightBuffer ); + + private: // Data + + /** + * iServer, reference to the server. + */ + CMdSServer& iServer; + + /** + * Find engine + */ + RPointerArray iFindEngines; + + class CNotificationCacheItem : public CBase + { + public: + CNotificationCacheItem( TInt aId, TUint32 aCode, + CMdCSerializationBuffer* aData ) : + iId( aId ), + iCode( aCode ), + iData( aData ) + { + } + + ~CNotificationCacheItem() + { + delete iData; + } + + public: + const TInt iId; + const TUint32 iCode; + CMdCSerializationBuffer* iData; + }; + + /** + * Cache of notification events + */ + RPointerArray iNotificationCache; + }; + +#endif // __MDESERVERSESSION_H__