--- /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