diff -r 000000000000 -r b497e44ab2fc syncmlfw/ds/hostserver/dshostserverbase/inc/Nsmldshostsession.h --- /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 +#include + +#include +#include +#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& aFilters ); + + /** + * Write filters to stream. + * @param aStream. Stream to write + * @param aFilters. filters to write. + */ + static void ExternalizeFiltersL( RWriteStream& aStream, const RPointerArray& 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