syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldshostsession.h
changeset 0 b497e44ab2fc
child 12 9e9792ae22e3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldshostsession.h	Thu Dec 17 09:07:52 2009 +0200
@@ -0,0 +1,703 @@
+/*
+* Copyright (c) 2005 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:  Session for DS host server.
+*
+*/
+
+
+#ifndef __NSMLDSHOSTSERVERSESSION_H__
+#define __NSMLDSHOSTSERVERSESSION_H__
+
+// ------------------------------------------------------------------------------------------------
+// Includes
+// ------------------------------------------------------------------------------------------------
+#include <e32base.h>
+#include <stringpool.h>
+
+#include <nsmldsconstants.h>
+#include <nsmlconstants.h>
+#include "nsmldshostconstants.h"
+#include "nsmldshostitem.h"
+#include "nsmldsitemmodificationset.h"
+#include "Nsmldsasyncrequesthandler.h"
+#include "Nsmldsdataproviderarray.h"
+
+// ------------------------------------------------------------------------------------------------
+// Class forwards
+// ------------------------------------------------------------------------------------------------
+class CSyncMLFilter;
+class CSmlDataProvider;
+class CSmlDataStore;
+
+// ------------------------------------------------------------------------------------------------
+// Class declarations
+// ------------------------------------------------------------------------------------------------ 
+// ------------------------------------------------------------------------------------------------
+// class CNSmlDSHostSession
+//
+// @lib nsmldshostserver.lib
+// ------------------------------------------------------------------------------------------------
+class CNSmlDSHostSession : public CSession2
+	{
+private:	//DATA TYPES and INNER CLASSES
+	typedef CNSmlDSAsyncCallBack::TCallBackOperation TCallBackOperation;
+	
+	// ------------------------------------------------------------------------------------------------
+	// reads from and writes to memory through pointer.
+	//
+	// @lib nsmldshostserver.lib
+	// ------------------------------------------------------------------------------------------------
+	class TMemPtr
+	    {
+	public:
+	// ------------------------------------------------------------------------------------------------
+	// Buffer + dynamic streams for that buffer. 
+	//
+	// @lib nsmldshostserver.lib
+	// ------------------------------------------------------------------------------------------------
+		struct TStreamBuffers
+			{
+			CBufBase* iBuffer;
+			RWriteStream* iWrite;
+			RReadStream* iRead;
+			};
+			
+	public: //Constructor
+
+		TMemPtr();
+	private:
+	    TMemPtr( const TMemPtr& op );
+	public:
+
+		/**
+		* pointer to memory
+		* @return TPtr8. Pointer to memory.
+		*/
+	    TPtr8 Des();
+	    
+		/**
+		* pointer to memory area.
+		* @param aPos. Start position.
+		* @param aLength. Length of memory area.
+		* @return TPtr8. Pointer to memory.
+		*/    
+	    TPtr8 Mid( TInt aPos, TInt aLength );
+	    
+	    /**
+		* copies memory to aDest buffer.
+		* @param aDest. destination for copy.
+		*/
+	    void CopyTo(TDes8& aDest) const;
+	    
+	    /**
+		* write stream to memory.
+		* @return RWriteStream&. write stream to memory.
+		*/
+	    RWriteStream& WriteStreamLC() const;
+	    
+   	    /**
+		* write stream with dynamic buffer.
+		* @return RWriteStream&. write stream to memory.
+		*/
+	    TStreamBuffers* StreamBufferLC() const;
+	    
+	    /**
+		* read stream to memory.
+		* @return RReadStream&. read stream to memory.
+		*/
+	    RReadStream& ReadStreamLC() const;
+	    
+	    /**
+		* Adjusts memory so that at least needed size is reserved.
+		* @param iNeededSize. Memory needed for chunk in bytes.
+		*/
+	    void AdjustChunkIfNeededL( TInt iNeededSize );
+	    
+	    /**
+		* size of memory area.
+		* @return TInt. size of memory area.
+		*/
+	    TInt Size() const;
+	private:
+	
+		/**
+		* Changes the number of bytes committed to the chunk
+		* @param aNewSize. The number of bytes to be committed to this chunk
+		* @return TInt. status code
+		*/
+		TInt Adjust( TInt aNewSize );
+
+		/**
+		* handles clean up of write stream.
+		* @param aP. write stream.
+		*/
+	    static void CleanupWriteStream( TAny* aP );
+	    
+		/**
+		* handles clean up of read stream.
+		* @param aP. read stream.
+		*/    
+	    static void CleanupReadStream( TAny* aP );
+	    
+		/**
+		* handles clean up of stream buffer.
+		* @param aP. read stream.
+		*/
+	    static void CleanupStreamBuffer( TAny* aP );
+	    
+   		/**
+		* restores chunk memory.
+		* @param aP. pointer to TMemPtr
+		*/
+	    static void CancelAdjust( TAny* aP );
+	    
+		/**
+		* modifiable pointer to memory.
+		* @return TUint8*. pointer to memory.
+		*/    
+	    TUint8* Ptr8();
+	    
+		/**
+		* const pointer to memory.
+		* @return const TUint8*. read pointer to memory.
+		*/    
+	    const TUint8* Ptr8() const;
+
+		/**
+		* modifiable pointer to memory.
+		* @return TAny*. pointer to memory.
+		*/    
+	    TAny* Ptr() const;
+	    
+	public:
+		RChunk iChunk;
+		
+#ifdef __HOST_SERVER_MTEST__
+		TInt iChunkSize;
+#endif
+	    };
+	    
+	typedef CNSmlDSHostSession::TMemPtr::TStreamBuffers TStreamBuffers;
+	    
+	// ------------------------------------------------------------------------------------------------
+	// for transporting item parameters over IPC.
+	//
+	// @lib nsmldshostserver.lib
+	// ------------------------------------------------------------------------------------------------
+	class CNSmlServerDSHostItem : public CNSmlDSHostItem
+		{
+	public:	//Constructor
+
+	    /**
+	    * Two-phased constructor.
+	    */
+		static CNSmlServerDSHostItem* NewLC();
+	public: //New functions
+
+		/**
+		* reference to uid member
+		* @return TSmlDbItemUid&. reference to uid
+		*/
+		TSmlDbItemUid& Uid();
+		
+		/**
+		* reference to fieldchange member.
+		* @return TBool&. reference to fieldchange member.
+		*/	
+		TBool& FieldChange();
+		
+		/**
+		* reference to size member.
+		* @return TInt&. reference to size member.
+		*/
+		TInt& Size();
+		
+		/**
+		* reference to parent uid member.
+		* @return TSmlDbItemUid&. reference to parent uid member.
+		*/	
+		TSmlDbItemUid& ParentUid();
+	public:		//Data
+
+		TBuf8<64> iMimeTypePtr;
+		TBuf8<64> iMimeVerPtr;
+		TSmlDbItemUid* iCreateItemUid; //uid for CSmlDataStore::CreateItemL
+		};
+	
+public: //constructors and destructors
+
+    /**
+	* Creates new instance of CNSmlDSHostSession.
+	* @param aServer. the server instance, owner of session.
+	* @return CNSmlDSHostSession*. Created instance.
+	*/
+	static CNSmlDSHostSession* NewL( CNSmlDSHostServer& aServer);
+	~CNSmlDSHostSession();
+	
+    /**
+	* Handles the servicing of a client request that has been passed to the server.
+	* @param aMessage. message to service.
+	*/
+public:	//Functions from base classes.
+
+	void ServiceL( const RMessage2 &aMessage );
+	
+private:	// New methods
+	
+    /**
+	* Checks the message, then calls the correct method to service the message.
+	* @param aMessage. Message to dispatch. 
+	* @param aCompleteRequest. set to ETrue, if message should be completed after calling this method.
+	* EFalse, if request is asynchronous, and completion is done by an active object.
+	*/	
+	void DispatchMessageL( const RMessage2 &aMessage, TBool& aCompleteRequest );
+	
+	/**
+	* C++ constructor.
+	* @param aServer.the server instance, owner of session.
+	*/
+	CNSmlDSHostSession( CNSmlDSHostServer& aServer);
+
+    /**        
+    * Symbian 2nd phase constructor
+    */
+	void ConstructL();
+		
+    /**
+	* saves shared memory chunk handle from client for later use.
+	* @param aMessage.Message to service.
+	*/
+	void HandleChunk( const RMessage2& aMessage );
+	
+    /**
+	* Creates data providers. Sends status code for each to client.
+	* @param aMessage. Message to service.
+	*/
+    void CreateDataProvidersL( const RMessage2& aMessage );
+    
+    /**
+	* Creates data providers except those sent from client. Sends created data provider ids to client.
+	* @param aMessage. Message to service.
+	*/
+    void CreateDataProvidersExceptL( const RMessage2& aMessage );
+    
+    /**
+	* Creates one data provider, stores it, if creation succeeds.
+	* @param aId. Data provider id to data provider to create.
+	*/
+    void CreateDataProviderL(TSmlDataProviderId aId);
+    
+    /**
+	* Sends Data provider information to client.
+	* @param aMessage. Message to service.
+	*/
+    void DPInformationL( const RMessage2& aMessage );
+        
+    /**
+	* Calls CSmlDataProvider::SupportsOperation() and sends the result to client.
+	* @param aMessage. Message to service.
+	*/
+    void SupportsOperationL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataProvider::StoreFormatL() and sends the result to client.
+	* @param aMessage. Message to service.
+	*/
+    void StoreFormatL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataProvider::ListStoresLC() and sends the result to client.
+	* @param aMessage. Message to service.
+	*/
+    void ListStoresL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataProvider::DefaultStoreL() and sends the result to client.
+	* @param aMessage. Message to service.
+	*/
+    void DefaultStoreL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataProvider::SupportedServerFiltersL().
+	* @param aMessage. Message to service.
+	*/
+    void SupportedServerFiltersL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataProvider::CheckServerFiltersL().
+	* @param aMessage. Message to service.
+	*/
+    void CheckServerFiltersL( const RMessage2& aMessage );
+    
+    /*
+    * Calls CSmlDataProvider::CheckSupportedServerFiltersL.
+    * @param aMessage. Message to service.
+    */
+    void CheckSupportedServerFiltersL( const RMessage2& aMessage );
+    
+    /**
+	* get filters
+	* @param aMessage. Message to service.
+	*/    
+    void GetFiltersL( const RMessage2& aMessage );
+    
+    /**
+	* Opens the data store requested in message.
+	* @param aMessage. Message to service.If open succeeds,
+	* the data store is stored for later use.
+	*/
+    void OpenL( const RMessage2& aMessage );
+    
+    /**
+	* Called after OpenL request completes. 
+	* @param aDSAO. object, that handled the request.
+	* @param aOperation. Operation to perform.
+	*/
+    TInt OpenFinishedL( CNSmlDSAsyncCallBack* aDSAO, TCallBackOperation aOperation );
+    
+    /**
+	* Calls CSmlDataStore::CancelRequest.
+	* @param aMessage.
+	*/
+    void CancelRequestL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::BeginTransactionL
+	* @param aMessage.
+	*/    
+    void BeginTransactionL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::CommitTransactionL
+	* @param aMessage.
+	*/        
+    void CommitTransactionL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::RevertTransaction
+	* @param aMessage.
+	*/
+    void RevertTransactionL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::BeginBatchL
+	* @param aMessage.
+	*/
+    void BeginBatchL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::CommitBatchL. 
+	* @param aMessage.
+	*/
+    void CommitBatchL( const RMessage2& aMessage );
+    
+    /**
+	* Called after CommitBatchL request completes. 
+	* @param aDSAO. object, that handled the request.
+	* @param aOperation. Operation to perform.
+	*/
+    TInt CommitBatchRequestFinishedL( CNSmlDSAsyncCallBack* aDSAO, TCallBackOperation aOperation );
+    
+    /**
+	* Calls CSmlDataStore::CancelBatch
+	* @param aMessage.
+	*/    
+    void CancelBatchL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::SetRemoteStoreFormatL
+	* @param aMessage.
+	*/
+    void SetRemoteDataStoreFormatL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::SetRemoteMaxObjectSize
+	* @param aMessage.
+	*/    
+    void SetRemoteMaxObjectSizeL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::MaxObjectSize
+	* @param aMessage.
+	*/
+    void MaxObjectSizeL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::OpenItemL(). 
+	* @param aMessage.
+	*/
+    void OpenItemL( const RMessage2& aMessage );
+    
+    /**
+	* Called after OpenItemL request completes. 
+	* @param aDSAO. object, that handled to request.
+	* @param aOperation. Operation to perform.
+	*/
+    TInt OpenItemRequestFinishedL( CNSmlDSAsyncCallBack* iDSAO, TCallBackOperation aOperation );
+    
+    /**
+	* Creates an CNSmlServerDSHostItem instance with values read from shared memory chunk.
+	* Leaves object to cleanup stack.
+	* @return CNSmlServerDSHostItem*. Instance created.
+	*/
+    CNSmlServerDSHostItem* DataStoreItemParamsLC();
+    
+    /**
+	* write data store items to shared memoy chunk.
+	* @param dshi. Object, that contains data store item - variables.
+	*/    
+    void WriteDataStoreItemParamsL( CNSmlDSHostItem* dshi );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::CreateItemL. 
+	* @param aMessage.
+	*/
+    void CreateItemL( const RMessage2& aMessage );
+    
+    /**
+	* Called after CreateItemL request completes. 
+	* @param aDSAO. object, that handled the request.
+	* @param aOperation. Operation to perform.
+	*/    
+    TInt CreateItemRequestFinishedL( CNSmlDSAsyncCallBack* aDSAO, TCallBackOperation aOperation );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::ReplaceItemL
+	* @param aMessage.
+	*/
+    void ReplaceItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::ReadItemL
+	* @param aMessage.
+	*/
+    void ReadItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::WriteItemL
+	* @param aMessage.
+	*/
+    void WriteItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::CommitItemL. 
+	* @param aMessage.
+	*/
+    void CommitItemL( const RMessage2& aMessage );
+    
+    /**
+	* Called after CommitItemL request completes. 
+	* @param aDSAO. object, that handled the request.
+	* @param aOperation. Operation to perform.
+	*/
+    TInt CommitItemRequestFinishedL( CNSmlDSAsyncCallBack* aDSAO, TCallBackOperation aOperation );
+    
+    /**
+	* Calls CSmlDataStore::CloseItem
+	* @param aMessage.
+	*/
+    void CloseItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::MoveItemL
+	* @param aMessage.
+	*/
+    void MoveItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::DeleteItemL
+	* @param aMessage.
+	*/
+    void DeleteItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::SoftDeleteItemL
+	* @param aMessage.
+	*/
+    void SoftDeleteItemL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::DeleteAllItemsL
+	* @param aMessage.
+	*/
+    void DeleteAllItemsL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::HasSyncHistory
+	* @param aMessage.
+	*/
+    void HasSyncHistoryL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::AddedItems
+	* @param aMessage.
+	*/
+    void AddedItemsL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::DeletedItems
+	* @param aMessage.
+	*/
+    void DeletedItemsL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::SoftDeletedItems
+	* @param aMessage.
+	*/    
+    void SoftDeleteItemsL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::ModifiedItems
+	* @param aMessage.
+	*/    
+    void ModifiedItemsL( const RMessage2& aMessage );
+    
+    /**
+	* Calls CSmlDataStore::MovedItems
+	* @param aMessage.
+	*/
+    void MovedItemsL( const RMessage2& aMessage );
+    
+    /**
+	* calls asynchronously MovedItems, ModifiedItems, SoftDeletedItems, DeletedItems, AddedItems
+	* @param aMessage.
+	*/
+    void AllItemsL( const RMessage2& aMessage );
+    
+    /**
+	* Called after OpenL request completes. 
+	* @param aDSAO. object, that handled the request.
+	*/
+    void AllItemsRequestFinishedL( CNSmlDSChangedItemsFetcher* aDSAO );
+    
+    /**
+	* Calls CSmlDataStore:: ResetChangeInfoL
+	* @param aMessage.
+	*/    
+    void ResetChangeInfoL( const RMessage2& aMessage );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::CommitChangeInfoL
+	* @param aMessage.
+	*/
+    void CommitChangesL( const RMessage2& aMessage);
+    
+    /**
+	* Called after CommitChangesL request completes. 
+	* @param aDSAO. object, that handled the request.
+	* @param aOperation. Operation to perform.
+	*/
+    TInt CommitChangesRequestFinishedL( CNSmlDSAsyncCallBack* aDSAO, TCallBackOperation aOperation );
+    
+    /**
+	* Calls asynchronously CSmlDataStore::CommitChangeInfoL
+	* @param aMessage.
+	*/    
+    void CommitAllChangesL( const RMessage2& aMessage );
+    
+    /**
+    * Updates server id to adapter log.
+    * @param aMessage.
+    */
+    void UpdateServerIdL( const RMessage2& aMessage );
+
+    /**
+	* searches data provider using its aId. 
+	* @param aId. Data provider id to data provider to search. Leaves if not found.
+	* @return CSmlDataProvider*. Data provider found. 
+	*/
+    CSmlDataProvider* DataProviderL( TSmlDataProviderId aId );
+    
+    /**
+	* searches data provider item using data provider id. 
+	* @param aId. Data provider id to data provider to search. Leaves if not found.
+	* @return TNSmlDSDataProviderElement*. Data provider found. 
+	*/
+    TNSmlDSDataProviderElement* DataProviderItemL( TSmlDataProviderId aId );
+    
+    /**
+	* finds data store from aMessage. Leaves if not found.
+	* @param aMessage.
+	* @return CSmlDataStore*. The data store requested in aMessage.
+	*/
+    CSmlDataStore* DataStoreL( const RMessage2& aMessage );
+    
+    /**
+	* finds data store element from aMessage. Leaves if not found.
+	* @param aMessage.
+	* @return TNSmlDSDataStoreElement*. The data store requested in aMessage.
+	*/
+    TNSmlDSDataStoreElement* DataStoreItemL( const RMessage2& aMessage );
+    
+    /**
+	* Is data store created.
+	* @param aMessage. Message, that contains the data store. 
+	* @return ETrue if data store in aMessage is created, EFalse if not.
+	*/
+    TBool HasDataStoreL( const RMessage2& aMessage );
+    
+    /**
+	* Retrieves data store name from message.
+	* @param aMessage.
+	* @return HBufC*. Data store name from aMessage.
+	*/
+	static HBufC* DataStoreNameLC( const RMessage2& aMessage );
+	
+    /**
+	* Read filters from stream.
+	* @param aStream. stream, where filters are read.
+	* @param aFilters. Receives filters read from stream.
+	*/
+	static void InternalizeFiltersL( RReadStream& aStream, RPointerArray<CSyncMLFilter>& aFilters );
+	
+    /**
+	* Write filters to stream.
+	* @param aStream. Stream to write
+	* @param aFilters. filters to write.
+	*/
+	static void ExternalizeFiltersL( RWriteStream& aStream, const RPointerArray<CSyncMLFilter>& aFilters );
+	
+
+    /**
+	* Panics the client
+	* @param aMessage. Message from client to panic.
+	* @param aReason. Reason code.
+	*/
+    void PanicClient( const RMessage2& aMessage, TInt aReason ) const;
+    
+    /**
+	* returns shared memory chunk pointer.
+	* @return shared memory chunk pointer.
+	*/
+    TMemPtr& MemPtrL();
+
+    /**
+	* copies data from stream buffer to chunk
+	* @param aMemPtr. pointer to chunk
+	* @param aSb. contains data to copy
+	*/
+    void StreamBufferToChunkL( TMemPtr& aMemPtr, TStreamBuffers* aSb );
+    
+private:	//Data
+
+	TMemPtr iMemPtr;
+	CNSmlDSHostServer& iServer;
+    RNSmlDSDataProviderArray iDataProviders;
+    RStringPool iStringPool;
+	};
+	
+#include "Nsmldshostsession.inl"
+#endif // __NSMLDSHOSTSERVERSESSION_H__
+
+// End of File