diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgsrvnstore/server/inc/MSVSERV.H --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/inc/MSVSERV.H Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,731 @@ +// Copyright (c) 2000-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: +// + +#ifdef _DEBUG +#undef _NO_SERVER_LOGGING_ +#endif + +#if !defined(__MSVSERV_H__) +#define __MSVSERV_H__ + +#include +#include +#include +#include +#include +#include "MSVROPS.H" +#include "indexcontext.h" +#include "MSVOP.H" +#include +#include "CMsvChangeBuffer.h" +#include +#include "TMsvServerStoreManager.h" +#include "msvindexadapter.h" +#include "msventryfreepool.h" + +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + #include "msvinifile.h" + #include "msvpreferreddrivelist.h" + #include "cmsvdiskchangenotifier.h" +#else + #include "diskchange.h" +#endif // #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + #include "msvmessagedbadapter.h" + #include "cmsvconverterwaiter.h" +#endif + + +#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + _LIT(KMsvDbFile, "\\messaging.db"); +#else + _LIT(KMsvDbFile, "[1000484B]messaging.db"); +#endif // #if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + +// Remove these to remove server logging +//#define _NO_SERVER_LOGGING_ +#define _NO_SERVER_LOGGING_SERIAL_ + +_LIT(KServerINIFile,"\\private\\1000484b\\msgs.ini"); + + +// Code added for PREQ 557. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + const TUint KMsvInvalidDriveId = 999; +#endif + +// forward declarations +class CMsvServer; +class CMsvServerSession; +class CBaseServerMtm; +class CMsvBackupHandler; +class CMsvMailinitWaiter; + +class CMSvSearchSortCacheManager; +class CMsvSearchSortDeltaCache; +class CMsvIndexAdapter; + +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + class CMsvDiskChangeNotifier; + class CMsvPreferredDriveList; +#endif + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + class CMsvConverterWaiter; +#endif +// Client panics +/** +@internalComponent +@released +*/ +enum TMsvClientPanic + { + EMsvBadRequest=1, + EMsvDuplicatedChangeRequest=2, + EMsvBadDescriptorWrite=3, + EMsvBadDescriptorRead=4, + EMsvIncorrectEntry=5, + EMsvReleasingUnknownEntry=6, + EMsvLockedStoresOnExit=7, + EMsvOutstandingOperationsOnExit=8, + EMsvReleasingUnknownStore=9, + EMsvNoEntriesInDeleteSelection=10, + EMsvRemovingNonLocalEntry=11, + EMsvProgressBufferExceeds256=12, + EMsvNoEntriesInMoveSelection=13, + EMsvNoEntriesInCopySelection=14, + EMsvNoEntriesInChangeAttributesSelection=15, + EMsvNoEntriesInChangeSelection=16 + }; + +const TInt KMsvMessageDriveStreamVersionNumber = 3; +const TUid KUidMsvMessageDriveStream = {0x1000163E}; + +//********************************** +// CMsvMtmOperationQueue +//********************************** +// +// +// + + +class CMsvMtmOperationQueue: public CArrayPtrFlat +/** +@internalComponent +@released +*/ + { +public: + CMsvMtmOperationQueue(TUid aMtmUid, TMsvId aServiceId); + ~CMsvMtmOperationQueue(); + // + inline TUid MtmUid() const; + inline TMsvId ServiceId() const; +public: + CBaseServerMtm* iMtm; +private: + TUid iMtmUid; + TMsvId iServiceId; + CArrayFixFlat iSessionIdArray; + // +friend class CMsvServer; + }; + + + +//********************************** +// CMsvTimer +//********************************** +// +// +// + +class CMsvTimer : public CTimer +/** +@internalComponent +@released +*/ + { +public: + static CMsvTimer* NewL(CMsvServer& aServer, TBool aCloseServer); +private: + CMsvTimer(CMsvServer& aServer, TBool aCloseServer); + void RunL(); +private: + CMsvServer& iServer; + TBool iCloseServer; + }; + +//********************************** +// CMsvServer +//********************************** +// +// Main message server object +// + +// This is used for testing +/** +@internalComponent +@released +*/ +enum TMsvFailure + { + EHeapFailure, + EDiskFailure + }; + +class TCapabilitySet; + +// Commit (and notify) interval for bulk transactions +// Kept as a #define so that it will always match the type of +// the value to which it is compared. +#define KBulkCommitInterval 16 +class CMsvServer : public CPolicyServer, public MMsvOperationObserver, public MMsvContextObserver, public MMsvDiskChangeObserver +/** +@internalComponent +@released +*/ + { +public: + enum {EPriority=950}; + +public: + IMPORT_C TInt ChangeDrive(TInt aDrive, TRequestStatus* aStatus); + IMPORT_C TInt CopyStore(const TDriveUnit& aDrive, TRequestStatus* aStatus); + IMPORT_C TInt DeleteStore(const TDriveUnit& aDrive, TRequestStatus* aStatus); + ~CMsvServer(); + // + virtual CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + // + void NotifyChanged(TMsvServerChangeNotificationType aChangeType, const CMsvEntrySelection& aSelection, TInt aParameter1=0, TInt aParameter2=0); + void NotifyChanged(TMsvServerChangeNotificationType aChangeType, TMsvId aId=KMsvNullIndexEntryId, TInt aParameter1=0, TInt aParameter2=0); + void NotifyChanged(TMsvServerChangeNotificationType aChangeType, TUid aMtmTypeUid); + void QueueNotifyChanged(TMsvServerChangeNotificationType aChangeType); + + IMPORT_C static CMsvServer* NewL(); + static CMsvServer* NewL(TBool aDebug); + inline const CMsvIndexAdapter& IndexAdapter() const; + inline CMsvIndexAdapter& IndexAdapter(); + +// Code added for 557. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + void UpdateRepositoryL(); + IMPORT_C void CreateIndexL(); + void PrepareDriveForDeletionL(TDriveNumber aDrive); + void RemoveDriveFromListL(TDriveNumber aDriveNumber); + void AddDriveToListL(TDriveNumber aDriveNumber, TUint& aPriority, CMsvServerSession* aCurrentSession = NULL); + void UpdateDrivePriorityL(TDriveNumber aDriveNumber, TUint& aNewPriority); + void ChangeDriveComplete(TInt aError, TBool aRunMailInit, TDriveNumber aNewDrive); + void UpdateDriveStatusL(const TDriveUnit& aDrive, TDriveState aStatus); + #if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + static void ResetRepositoryL(); + #endif +#else + static void CurrentConfigL(RFs& aFs, TMsvConfig& aConfig); + IMPORT_C void CreateIndexL(TBool aSync = EFalse); +#endif // #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + + inline RFs& FileSession(); + inline TInt SessionId(); + inline const CServerMtmDllRegistry& Registry() const; + // + // operation related + void StartOperationL(CMsvMtmOperation& aOperation, TInt aSessionId, const RMessage2& aMessage, TBool aHasCapability); + // from MMsvOperationObserver + void OperationCompleted(TMsvId aServiceId, TMsvOp aOpId); + void OperationCancelled(const CMsvMtmOperation& aOperation); + // + void ClosingSession(TInt aSessionId); + void CheckAndClose(); + // + TInt FillRegisteredMtmDllArray(TUid aMtmDllTypeUid,CRegisteredMtmDllArray& aRegisteredMtmDllArray); // Fill array with Dlls whose second uid is aMtmDllTypeUid + TInt InstallMtmGroup(const TDesC& aFullName,TUid& aMtmTypeUid); + TInt DeInstallMtmGroup(const TDesC& aFullName,TUid& aMtmTypeUid); + CMtmGroupData* GetMtmGroupDataL(TUid aMtmTypeUid) const; + void GetMtmRequiredCapabilitiesL(TUid aMtmTypeUid, TCapabilitySet& aCaps) const; + // + TInt GetAndMakeFileDirectory(TMsvId aId, TDes& aDirectory); + TInt GetFileDirectoryListing(TMsvId aId, TDes& aDirectory, CDir*& aDir); + TInt AddEntry(TMsvEntry& aEntry, TSecureId aOwnerId, TBool aAutoAssignId, TBool aBulk=EFalse); + TInt ChangeEntry(const TMsvEntry& aEntry, TSecureId aOwnerId, TBool aForcedUpdate, TBool aBulk=EFalse); + void RemoveEntry(TMsvId aId); + void CloseServer(const RMessage2& aMessage); + void AttemptDelayedUpdating(); + void StopServiceL(const RMessage2& aMessage); + void ServiceActive(const RMessage2& aMessage); + const TDesC8& ServiceProgressL(TMsvId aServcieId); + inline TInt CheckEntries(const CMsvEntrySelection& aEntries); + TInt CheckEntries(const CMsvEntrySelection& aEntries, TInt aStartIndex, TInt aEndIndex); + // + TInt GetEntryName(TMsvId aId, TDes& aFileName, TBool aFolderRequired); + TInt AddEntry(CMsvIndexContext* const& aContext, TMsvEntry& aEntry, TSecureId aOwnerId, TBool aAutoAssignId, TBool aBulk=EFalse); + // + void SetFailure(TMsvFailure aType, TInt aArg1, TInt aArg2, TInt); + TInt OutstandingOperations(); + // + inline CMsvTimer& Delay() const; + inline TBool HasContext() const; + inline CMsvIndexContext& Context() const; + inline CMsvIndexContext* NewContext() const; + inline void DeleteNewContext(); + inline TMsvServerChangeNotificationType StartupState() const; + + + void SetStartupState(TMsvServerChangeNotificationType aState); + const TDriveUnit &Drive() const; + + void MailinitFinished(TInt aError, TDriveNumber aDriveNum); + + MRegisteredMtmDllObserver& MtmObserver() const; + // +#ifndef _NO_SERVER_LOGGING_ + void Log(TRefByValue aFmt, ...); +#endif + //Notifies observers of changes to a group of entries + //(e.g. during bulk synchronisation of email headers) + void NotifyChangedBulkL(); + + // completes any outstanding bulk transactions + void CompleteBulkTransaction(void); + // + // This function is for the CMsvServerSession class to access the public + // methods ConnectAndShareFileSessionL() and CloseFileSession() + TMsvServerStoreManager& ServerStoreManager(); + + void PoliceReadEntryL(const RMessage2& aMsg, TSecureId aOwnerId, const char* aContextText); + void PoliceReadEntryL(const RMessage2& aMsg, TMsvId aId, const char* aContextText); + void PoliceCreateEntryL(const RMessage2& aMsg, TMsvEntry aEntry, TBool& aIsLocal, const char* aContextText); + void PoliceModifyEntryL(const RMessage2& aMsg, TMsvEntry aEntry, TBool& aIsLocal, const char* aContextText); + void PoliceModifyEntryL(const RMessage2& aMsg, TMsvId aId, TBool& aIsLocal, const char* aContextText); + void PoliceModifyEntryL(const RMessage2& aMsg, TMsvId aId, const char* aContextText); + void PoliceMoveEntriesL(const RMessage2& aMsg, const CMsvEntrySelection& aSelection, TMsvId aTarget, TMsvId aSource, TBool& aTargetIsLocal, TBool& aSourceIsLocal, const char* aContextText); + void PoliceCopyEntriesL(const RMessage2& aMsg, const CMsvEntrySelection& aSelection, TMsvId aTarget, TBool& aTargetIsLocal, const char* aContextText); + void PoliceMtmTransferCommandL(const RMessage2& aMsg, TUid aMtm, const char* aContextText); + void PoliceStopServiceL(const RMessage2& aMsg, TUid aMtm, const char* aContextText); + + void PoliceCopyMoveUnderOutboxL(const RMessage2& aMsg, const CMsvEntrySelection& aSelection, const char* aContextText); + void PoliceCreateModifyEntryL(const RMessage2& aMsg, CMsvIndexAdapter::TMsvServerEntryInfo aEntryInfo, TBool aCreate, TBool& aIsLocal, const char* aContextText); + TBool ProtectedFolder(TMsvId aFolder) const; + TBool ProtectedRemoteServices() const; + void GetCapsEntryCreateModifyL(const RMessage2& aMsg, TMsvId aFolder, TUid aMtm, TSecureId aOwnerId, TBool aCreateEntry, TBool aLocal, TCapabilitySet& aCaps); + void GetCapsForMtmL(TUid aMtm, TCapabilitySet& aCaps); + void GetNonOperationMtmDataL(TMsvId aServiceId, TNonOperationMtmDataType aMtmDataType, TPtrC8& aResultBuffer); + void PoliceSearchSortQueryReadRequestL(const RMessage2& aMsg, const char* aContextText); + void CreateSearchSortCacheL(); + + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + inline const CMsvMessageDBAdapter& MessageDBAdapter() const; + inline CMsvMessageDBAdapter& MessageDBAdapter(); +#endif + +private: + CMsvServer(TInt aPriority, TBool aDebug); + void ConstructL(); + +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + + #if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + void DiskRemoved(const TDriveUnit& aDrive, TBool aTestRemoval = EFalse); + void DiskInserted(const TDriveUnit& aDrive, TBool aTestInsert = EFalse); + void DoDiskInsertedL(const TDriveUnit& aDrive, TBool aTestInsert); + void DoDiskRemovedL(const TDriveUnit& aDrive, TBool aTestRemoval); + #else + void DiskRemoved(const TDriveUnit& aDrive); + void DiskInserted(const TDriveUnit& aDrive); + void DoDiskInsertedL(const TDriveUnit& aDrive); + void DoDiskRemovedL(const TDriveUnit& aDrive); + #endif + void CreatePreferredDriveListL(); + void DiskChanged(const TDriveUnit& aDrive); + void RunMailInitExe(TDriveNumber aDriveNum); +#else + TBool DiskRemoved(const TDriveUnit& aDrive); + TBool DiskInserted(const TDriveUnit& aDrive); + TBool DiskChanged(const TDriveUnit& aDrive, TUint aUniqueId); + static void BuildDefaultIniFileL(TMsvConfig& aConfig); + void RunMailInitExe(); +#endif // #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + + void CreateRegistriesL(); + void CreateIndexFromResources(); + // + void DoNotify(TMsvServerChangeNotificationType aChangeType,TBool aQueue = EFalse); + void DoChangeDriveL(TInt aDrive, TRequestStatus* aStatus); + // + TInt CheckMtmStatus(TMsvId aServiceId, TBool& aRunning); + void QueueOperationL(CMsvMtmOperation& aOperation, TInt aSessionId); + CBaseServerMtm* LoadMtmL(const CMsvMtmOperation& aOperation); + TBool SessionIdInQueue(CMsvMtmOperationQueue& aQueue, TInt aSessionId) const; + inline void AddSessionIdToQueueL(CMsvMtmOperationQueue& aQueue, TInt aSessionId); + // + void StartNextOperation(CMsvMtmOperationQueue* aQueue, TInt aQueueIndex); + void DoRemoveEntriesL(TMsvId aId); + // + CSession2* DoNewSessionL(const RMessage2 &aMessage); + // + void StartObserverExes(); + // + TInt GetEntryName(const CMsvIndexContext& aContext, TMsvId aId, TDes& aFileName, TBool aFolderRequired); + // + void ContextComplete(TInt aError, TBool aRunMailInit); + // + void SuspendSendingMessagesL(); + +#ifndef _NO_SERVER_LOGGING_ + void CreateLogL(); + mutable RFileLogger iLog; +#else + TInt8 iBCSpacer[sizeof(RFileLogger)]; +#endif + + void DoNotifyChangedBulkL(TMsvServerChangeNotificationType aChangeType, const CMsvEntrySelection& aEntriesToNotify); + + // +private: + TInt iSessionNumber; + RFs iFs; + TMsvNotifBuffer iChange; + CServerMtmDllRegistry* iServerMtmReg; + CMtmRegistryControl* iMtmRegControl; + CArrayPtrFlat iMtmOperationQueueArray; +#ifdef MSG_SERV_AUTO_CLOSE + CMsvTimer* iCloseTimer; +#endif + CMsvTimer* iDelayTimer; + TBool iCloseServer; + // + CMsvIndexContext* iNewContext; + CMsvIndexContext* iContext; + + TMsvServerChangeNotificationType iStartupState; + TFileName iIndexFileName; + TDriveUnit iIndexDrive; + TInt iLoadError; + TBool iDebug; + + // + CMsvBackupHandler* iBackup; + TMsvServerStoreManager iServerStoreManager; + RArray iProtectedFolders; + TBool iRemoteServicesProtected; + CMsvMailinitWaiter* iMailinitWaiter; + //variables for bulk creation of entries + CMsvEntrySelection* iBulkCreationSelection; + CMsvEntrySelection* iBulkChangeSelection; + TBool iReleasedForRestore; + TBuf<2> iSystemDrive; + + // Reference to freepool object. + CMsvEntryFreePool* iFreePoolInstance; + + // Search Sort Cache Manager + CMSvSearchSortCacheManager* iSearchSortCacheManager; + +// Code added for PREQ 557. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + CMsvPreferredDriveList* iDriveList; + RPointerArray iNotifier; + #if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + friend class CTestMsvServer; + friend class CTestIndexContext; + #endif +#else + CMsvNotifyDiskChange* iNotify; +#endif + + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + CMsvMessageDBAdapter* iMessageDBAdapter; + #if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + friend class CTestMessageConverterWaiter; + #endif +#endif + +#if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + TMsvServerChangeNotificationType iNotification; //record notification sent for test purposes + friend class CTestOOMSearchSortCacheManager; + friend class CTestSearchSortDBadapter; +#endif + }; + + +//********************************** +// TMtmGroupRefCount +//********************************** +// +// +// + +class TMtmGroupRefCount +/** +@internalComponent +@released +*/ + { +public: + TMtmGroupRefCount(TUid aMtmTypeUid); +public: + TUid iMtmTypeUid; + TInt iRefCount; + }; + +//********************************** +// CMsvOperationData +//********************************** +// +// +// + +class CMsvOperationData : public CBase +/** +@internalComponent +@released +*/ + { +public: + CMsvOperationData(TMsvOp aOpId); + ~CMsvOperationData(); + inline TMsvOp OperationId() const; +public: + HBufC8* iBuffer; +private: + TMsvOp iOpId; + }; + +//********************************** +// CMsvServerSession +//********************************** +// +// +// + +class CMsvServerSession : public CSession2 +/** +@internalComponent +@released +*/ + { +public: + CMsvServerSession(CMsvServer& aServer); + ~CMsvServerSession(); + static CMsvServerSession* NewL(CMsvServer& aServer, const RMessage2 &aMessage); + virtual void ServiceL(const RMessage2 &aMessage); + // callback from server + void NotifyChangedL(TMsvNotifBuffer& iChangeBuffer, TBool aQueue = EFalse); + void StopOperations(TMsvId aServiceId); + // + TBool IsInUse(TUid aMtmTypeUid); + inline TBool IsAnObserver(); + inline TInt SessionId(); + inline TInt HaveOutstandingOperations(); + inline const TDesC& ProcessName() const; + inline TBool ReceiveEntryEvents() const; + // +private: + void DoServiceL(const RMessage2& aMessage); + void ConstructL(const RMessage2& aMessage); + void QueueSessionEventRequestL(const RMessage2 &aMessage); + void CancelSessionEventRequest(const RMessage2 &aMessage); + void SendNotificationL(const RMessage2& aMessage); + void GetEntryL(const RMessage2 &aMessage); + void GetChildrenL(const RMessage2 &aMessage); + void GetRemainingChildrenL(const RMessage2 &aMessage); + void LockEntryL(const RMessage2 &aMessage); + void ReleaseEntryL(const RMessage2 &aMessage); + void ReadStoreL(const RMessage2 &aMessage); + void LockStoreL(const RMessage2 &aMessage); + void ReleaseStoreL(const RMessage2 &aMessage); + void DecStoreReaderCountL(const RMessage2 &aMessage); + + void CancelOperationL(const RMessage2 &aMessage); + void OperationCompletionL(const RMessage2 &aMessage); + void OperationProgressL(const RMessage2 &aMessage); + void OperationSystemProgressL(const RMessage2 &aMessage); + void OperationMtmL(const RMessage2 &aMessage); + // + void ChangeEntryL(const RMessage2 &aMessage); + void ChangeEntriesL(const RMessage2 &aMessage); + void DoChangeLocalEntryL(const TMsvEntry& aEntry, TMsvOp aOpId, const RMessage2 &aMessage, TSecureId aOwnerId); + void DoChangeRemoteEntryL(const TMsvEntry& aEntry, TMsvOp aOpId, const RMessage2 &aMessage); + void DoChangeLocalEntriesL(CMsvEntrySelection*& aSelection, TMsvOp aOpId, const RMessage2 &aMessage, TSecureId aOwnerId, TInt aMark); + void DoChangeRemoteEntriesL(CMsvEntrySelection*& aSelection, TMsvOp aOpId, const RMessage2 &aMessage,TInt aMark); + // + void CreateEntryL(const RMessage2 &aMessage); + void DoCreateLocalEntryL(const TMsvEntry& aEntry, TMsvOp aOpId, const RMessage2 &aMessage, TSecureId aOwnerId); + void DoCreateRemoteEntryL(const TMsvEntry& aEntry, TMsvOp aOpId, const RMessage2 &aMessage); + // + void MakeEntryFileDirectoryL(const RMessage2 &aMessage); + // + void TransferCommandL(const RMessage2 &aMessage); + // + void MoveEntriesL(const RMessage2 &aMessage); + void DoMoveLocalEntriesL(CMsvEntrySelection*& aSelection, TMsvId aTarget, TMsvOp aOpId, const RMessage2 &aMessage); + void DoMoveRemoteEntriesL(CMsvEntrySelection*& aSelection, TMsvOp aOpId, TMsvId aTarget, const RMessage2 &aMessage, TBool aSourceLocal, TBool aTargetLocal, TBool aHasCapability); + // + void DeleteEntriesL(const RMessage2 &aMessage); + void DoDeleteLocalEntriesL(CMsvEntrySelection*& aSelection, TMsvOp aOpId, const RMessage2 &aMessage); + void DoDeleteRemoteEntriesL(CMsvEntrySelection*& aSelection, TMsvOp aOpId, const RMessage2 &aMessage); + // + void CopyEntriesL(const RMessage2 &aMessage); + void DoCopyLocalEntriesL( CMsvEntrySelection*& aSelection, TMsvId aTarget, TMsvOp aOpId, const RMessage2 &aMessage); + void DoCopyRemoteEntriesL(CMsvEntrySelection*& aSelection, TMsvId aTarget, TMsvOp aOpId, const RMessage2 &aMessage, TBool aSourceLocal, TBool aTargetLocal, TBool aHasCapability); + // + void CopyOperationDataL(const RMessage2 &aMessage); + void CopyCommandDataL(const RMessage2 &aMessage); + HBufC8* RecoverOperationData(TMsvOp aOpId); + // + void PackEntryAndWriteBufferL(const RMessage2 &aMessage, TInt aParam, const TMsvEntry& aEntry, const TMsvId& aServiceId); + // + void WriteBufferL(const RMessage2 &aMessage, TInt aParam); + void WriteL(const RMessage2 &aMessage, TInt aParam, const TDesC8& aDes); + // + inline void ReadMainBufferL(const RMessage2 &aMessage, TInt aParam); + void ReadBufferL(const RMessage2 &aMessage, TInt aParam, HBufC8*& aBuffer); + void ReadL (const RMessage2 &aMessage, TInt aParam, TDes8& aDes); + // + void FillRegisteredMtmDllArray(const RMessage2 &aMessage); + void DoFillRegisteredMtmDllArrayL(const RMessage2 &aMessage); + void MtmGroupL(const RMessage2 &aMessage, TBool aInstall); + void UseMtmGroup(const RMessage2 &aMessage); + void ReleaseMtmGroup(const RMessage2 &aMessage); + void GetMtmGroupDataL(const RMessage2 &aMessage); + void GetMtmRequiredCapabilitiesL(const RMessage2& aMessage); + // + void ServiceProgressL(const RMessage2 &aMessage); + // + void RemoveEntry(const RMessage2& aMessage); + void MessageFolderL(const RMessage2 &aMessage); + void ChangeAttributesL(const RMessage2& aMessage); + void GetChildIdsL(const RMessage2& aMessage); + void CopyStoreL(const RMessage2 &aMessage); + void DeleteStoreL(const RMessage2 &aMessage); + void OutstandingOperationsL(const RMessage2& aMessage); + void GetNotifySequenceL(const RMessage2& aMessage); + // + void SetReceiveEntryEvents(const RMessage2 &aMessage); + // + void PanicClient(const RMessage2 &aMessage, TMsvClientPanic aPanic) const; + void ChangeDriveL(const RMessage2 &aMessage); + void CreateAttachmentForWriteL(const RMessage2 &aMessage); + void ReplaceAttachmentForWriteL(const RMessage2 &aMessage); + void OpenAttachmentL(const RMessage2 &aMessage); + void OpenAttachmentForWriteL(const RMessage2 &aMessage); + void DeleteAttachmentL(const RMessage2 &aMessage); + void RenameAttachmentL(const RMessage2 &aMessage); + void FileExistsL(const RMessage2 &aMessage); + void GetAttachmentFilePathL(const RMessage2& aMessage); + void OpenFileStoreForReadL(const RMessage2 &aMessage); + void OpenTempStoreFileL(const RMessage2 &aMessage); + void ReplaceFileStoreL(const RMessage2 &aMessage); + void DeleteFileStoreL(const RMessage2 &aMessage); + void FileStoreExistsL(const RMessage2 &aMessage) const; + void ConnectAndShareFileSessionLC(RFs& aFs ); + void UpdateOwnerIdL(TMsvId aId, TSecureId aOwnerId); + void BodyTextFilePathL(const RMessage2 &aMessage); + void OpenPlainTextFileL(const RMessage2 &aMessage); + void CreatePlainTextFileL(const RMessage2 &aMessage); + void DeletePlainTextFileL(const RMessage2& aMessage); + void ReplacePlainTextFileL(const RMessage2 &aMessage); + void GetNonOperationMtmDataL(const RMessage2 &aMessage); + +// Code added for PREQ 1667. + void SearchSortOnHeaderAndBodytMsgL(const RMessage2 &aMessage); + void SendSearchSortIndexEntryResultL(const RMessage2 &aMessage); + void SearchSortOnIndexEntryL(const RMessage2& aMessage); + void SendResultOrIdsToSearchL(const RMessage2& aMessage); + void GetSearchSortResultCountL(const RMessage2& aMessage); + void GetResultInIteratorL(const RMessage2& aMessage); + void GetNextEntryInIteratorL(const RMessage2& aMessage); + void GetQueryIDL(const RMessage2& aMessage); + void QueryUnMarkedL(const RMessage2& aMessage); + void UpdateSearchSortCacheWithSortFiledL(const RMessage2& aMessage); + void GetResultForQueryIDL(const RMessage2& aMessage); + void GetSearchSortProgressInfoL(const RMessage2& aMessage); + void SearchSortOperationCancelL(const RMessage2& aMessage); + void UpdateSearchSortResultsAndSortByEntryL(const RMessage2& aMessage); + void CopyQueryDataL(const RMessage2& aMessage); + +// Code added for PREQ 557. API for preferred drive list. +#if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + void GetChildrenAllL(const RMessage2 &aMessage); + void GetChildIdsAllL(const RMessage2& aMessage); + void MessageDrive(const RMessage2 &aMessage); + void CurrentDriveInfoL(const RMessage2 &aMessage); + void DriveListL(const RMessage2 &aMessage); + void AvailableDriveListL(const RMessage2 &aMessage); + void AddDriveL(const RMessage2 &aMessage); + void RemoveDriveL(const RMessage2 &aMessage); + void UpdateDrivePriorityL(const RMessage2 &aMessage); + #if (defined SYMBIAN_MESSAGESTORE_UNIT_TESTCODE) + void ResetRepositoryL(const RMessage2 &aMessage); + void PrintCache(const RMessage2 &aMessage); + #endif +#endif // #if (defined SYMBIAN_MSGS_ENHANCED_REMOVABLE_MEDIA_SUPPORT) + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + void CreateHeaderTableL(const RMessage2 &aMessage); + void DoesStoreExistsL(const RMessage2 &aMessage); + void LastErrorMessageL(const RMessage2 &aMessage); + + void CreateBodyEntryL(const RMessage2 &aMessage); + void LoadBodyEntryL(const RMessage2 &aMessage); + void UpdateBodyEntryL(const RMessage2 &aMessage); + void DeleteBodyEntryL(const RMessage2 &aMessage); + + void CreateHeaderEntryL(const RMessage2 &aMessage); + void LoadHeaderEntryL(const RMessage2 &aMessage); + void DeleteHeaderEntryL(const RMessage2 &aMessage); + void UpdateHeaderEntryL(const RMessage2 &aMessage); + void DoesAnyStoreExists(const RMessage2 &aMessage); + void DoesHeaderTableExist(const RMessage2 aMessage); + // Converter API's + void GetConvertibleDriveListL(const RMessage2 &aMessage); + void ConvertMessageStoreL(const RMessage2 &aMessage); + void CancelConversionRequestL(const RMessage2 &aMessage); + void GetConversionStatus(const RMessage2 &aMessage); + TBool FoundUnSupportedDrives(); +#endif // #if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + + +private: + TInt iSessionId; + CMsvServer& iMsvServer; + RMessage2 iQueuedMessage; + TBool iRequestQueued; + TBool iObserverOnly; + HBufC8* iBuffer; + CMsvChangeBuffer* iChangeBuffer; + CArrayPtrFlat iOperations; + CArrayFixFlat iMtmGroupRefCountArray; + CArrayPtrFlat iOperationDataArray; + TMsvChildrenDetails iChildrenDetails; + CArrayPtrSeg* iChildrenSelection; + CMsvEntrySelection* iChildrenSelectionIds; + CMsvEntrySelection iLockedStores; + TName iProcessName; + TBool iReceiveEntryEvents; + +#if (defined SYMBIAN_MESSAGESTORE_HEADER_BODY_USING_SQLDB) + TPtrC iLastDBErrorMessage; + CMsvConverterWaiter* iConverterWaiter; +#endif + }; + +#include "MSVSERV.INL" + +#endif