williamr@2: // Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #if !defined(__MCLIENT_H__) williamr@2: #define __MCLIENT_H__ williamr@2: williamr@2: #if !defined(__E32BASE_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__MSVSTD_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__MSVIPC_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__MSVREG_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: // Forward declarations williamr@2: class CMsvClientEntry; williamr@2: class TCapabilitySet; williamr@2: class TMsvSystemProgress; williamr@2: williamr@2: //********************************** williamr@2: //RMsvSession williamr@2: //********************************** williamr@2: // williamr@2: // NOTE most functions are exported for test purposes only williamr@2: // williamr@2: /** williamr@2: Low level client-side API to access the message server. williamr@2: williamr@2: It should not be used directly by client applications. They should use higher-level helper classes such as williamr@2: CMsvSession, CMsEntry, and CMsvStore. These helper classes access the message server through RMsvServerSession. williamr@2: williamr@2: @internalTechnology williamr@2: */ williamr@2: class RMsvServerSession : public RSessionBase, public MRegisteredMtmDllObserver, public MMsvStoreManager williamr@2: { williamr@2: public: williamr@2: IMPORT_C RMsvServerSession(); williamr@2: IMPORT_C virtual ~RMsvServerSession(); williamr@2: IMPORT_C TInt Connect(RFs& aFs); williamr@2: IMPORT_C TVersion Version() const; williamr@2: // Synchronous message williamr@2: IMPORT_C TInt GetEntry(TMsvId aId, TMsvId& aService, TMsvEntry& aEntry); williamr@2: IMPORT_C TInt GetChildren(TMsvId aId, CArrayPtrFlat& aEntries, const TMsvSelectionOrdering& aOrdering); williamr@2: IMPORT_C TInt LockEntry(TMsvId aId); williamr@2: IMPORT_C TInt ReleaseEntry(TMsvId aId); williamr@2: IMPORT_C TInt ReadStore(TMsvId aId); williamr@2: IMPORT_C TInt LockStore(TMsvId aId); williamr@2: IMPORT_C TInt ReleaseStore(TMsvId aId); williamr@2: TInt DecStoreReaderCount(TMsvId aId); williamr@2: IMPORT_C TInt OperationProgress(TMsvOp aId, TDes8& aProgress); williamr@2: IMPORT_C TInt OperationSystemProgress(TMsvOp aId, TMsvSystemProgress& aProgress); williamr@2: IMPORT_C TInt OperationCompletion(TMsvOp aId, TDes8& aProgress); williamr@2: IMPORT_C TInt CancelOperation(TMsvOp aId, TDes8& aProgress); williamr@2: IMPORT_C TInt CancelSessionEventRequest(); williamr@2: IMPORT_C TInt OperationMtmL(TMsvId aId1, TMsvId aId2, TUid& aMtm, TMsvId& aService); williamr@2: inline TInt OperationMtmL(TMsvId aId1, TUid& aMtm, TMsvId& aService); williamr@2: IMPORT_C void CreateEntryL(const TMsvEntry& aEntry, TMsvOp aOperationId, TSecureId aOwnerId); williamr@2: IMPORT_C void ChangeEntryL(const TMsvEntry& aEntry, TMsvOp aOperationId, TSecureId aOwnerId); williamr@2: IMPORT_C void MoveEntriesL(const CMsvEntrySelection& aSelection, TMsvId aTarget, TMsvOp aOperationId); williamr@2: IMPORT_C void CopyEntriesL(const CMsvEntrySelection& aSelection, TMsvId aTarget, TMsvOp aOperationId); williamr@2: IMPORT_C void DeleteEntriesL(const CMsvEntrySelection& aSelection, TMsvOp aOperationId); williamr@2: IMPORT_C void ChangeAttributesL(const CMsvEntrySelection& aSelection, TUint aSetAttributes, TUint aClearAttributes); williamr@2: IMPORT_C void GetChildIdsL(TMsvId aId, const CMsvEntryFilter& aFilter, CMsvEntrySelection& aSelection); williamr@2: TInt OutstandingOperationsL(); williamr@2: // Asynchronous messages williamr@2: IMPORT_C void CreateEntryL(const TMsvEntry& aEntry, TMsvOp aOperationId, TSecureId aOwnerId, TRequestStatus& aRequestStatus); williamr@2: IMPORT_C void ChangeEntryL(const TMsvEntry& aEntry, TMsvOp aOperationId, TSecureId aOwnerId, TRequestStatus& aRequestStatus); williamr@2: IMPORT_C void DeleteEntriesL(const CMsvEntrySelection& aSelection, TMsvOp aOperationId, TRequestStatus& aRequestStatus); williamr@2: IMPORT_C void MoveEntriesL(const CMsvEntrySelection& aSelection, TMsvId aTarget, TMsvOp aOperationId, TRequestStatus& aRequestStatus); williamr@2: IMPORT_C void CopyEntriesL(const CMsvEntrySelection& aSelection, TMsvId aTarget, TMsvOp aOperationId, TRequestStatus& aRequestStatus); williamr@2: IMPORT_C void TransferCommandL(const CMsvEntrySelection& aSelection, TInt aCommandId, const TDesC8& aParameter, TMsvOp aOperationId, TRequestStatus& aStatus); williamr@2: IMPORT_C TInt TransferCommandL(const CMsvEntrySelection& aSelection, TInt aCommandId, const TDesC8& aParameter, TMsvOp aOperationId); williamr@2: IMPORT_C void QueueSessionEventRequest(TDes8& aChange, TDes8& aSequence, TRequestStatus& aRequestStatus); williamr@2: void ChangeDriveL(TInt aDrive, TMsvOp aOperationId, TRequestStatus& aRequestStatus); williamr@2: void CopyStoreL(const TDriveUnit& aDrive, TMsvOp aOperationId, TRequestStatus& aStatus); williamr@2: void DeleteStoreL(const TDriveUnit& aDrive, TMsvOp aOperationId, TRequestStatus& aStatus); williamr@2: // MTM williamr@2: IMPORT_C TInt FillRegisteredMtmDllArray(TUid aMtmDllTypeUid,CRegisteredMtmDllArray& aRegisteredMtmDllArray,TTimeIntervalMicroSeconds32 aTimeoutMicroSeconds32); // Fill array with Dlls whose second uid is aMtmDllTypeUid williamr@2: IMPORT_C TInt InstallMtmGroup(const TDesC& aFullName); williamr@2: IMPORT_C TInt DeInstallMtmGroup(const TDesC& aFullName); williamr@2: IMPORT_C TInt UseMtmGroup(TUid aMtmTypeUid); williamr@2: IMPORT_C TInt ReleaseMtmGroup(TUid aMtmTypeUid); williamr@2: IMPORT_C CMtmGroupData* GetMtmGroupDataL(TUid aMtmTypeUid); williamr@2: void GetMtmRequiredCapabilitiesL(TUid aMtmTypeUid, TCapabilitySet& aCapSet) const; williamr@2: TBool GetAndClearIndexCorruptFlagL(); williamr@2: TBool DriveContainsStoreL(TDriveUnit aDrive); williamr@2: // Server williamr@2: IMPORT_C void CloseMessageServer(); williamr@2: IMPORT_C void RemoveEntry(TMsvId aId); williamr@2: IMPORT_C TInt GetMessageDirectory(TDes& aDirectory); williamr@2: TInt SetSessionAsObserver(); williamr@2: TUint32 NotifySequenceL(); williamr@2: IMPORT_C TInt SetReceiveEntryEvents(TBool aReceive); williamr@2: // Services williamr@2: IMPORT_C TInt StopService(TMsvId aServiceId); williamr@2: IMPORT_C TBool ServiceActive(TMsvId aServiceId); williamr@2: IMPORT_C TInt ServiceProgress(TMsvId aServiceId, TDes8& aProgress); williamr@2: // williamr@2: IMPORT_C void SetFailure(TInt aType, TInt aArg1 = 0, TInt aArg2 = 0, TInt aArg3 = 0); williamr@2: TInt GetMessageDrive(); williamr@2: williamr@2: TInt GetNonOperationMtmData(TMsvId aServiceId, const TNonOperationMtmDataType& aType, TDes8& aMtmData); williamr@2: williamr@2: // from MMsvStoreManager williamr@2: IMPORT_C TBool CreateAttachmentForWriteL(TMsvId aEntryId, TDes& aFilename, RFile& aFile); williamr@2: IMPORT_C void ReplaceAttachmentForWriteL(TMsvId aEntryId, TDes& aFilename, RFile& aFile); williamr@2: IMPORT_C void OpenAttachmentL(TMsvId aEntryId, const TDesC& aFilePath, RFile& aFile); williamr@2: IMPORT_C void OpenAttachmentForWriteL(TMsvId aEntryId, const TDesC& aFilePath, RFile& aFile); williamr@2: IMPORT_C TInt DeleteAttachment(TMsvId aEntryId, const TDesC& aFilePath); williamr@2: IMPORT_C TInt RenameAttachment(TMsvId aEntryId, const TDesC& aOldFilePath, const TDesC& aNewName); williamr@2: IMPORT_C TBool FileExistsL(const TDesC& aFilePath); williamr@2: IMPORT_C void AttachmentFilePathL(TMsvId aEntryId, TDes& aFilePath); williamr@2: IMPORT_C TInt OpenFileStoreForRead(TMsvId aEntryId, RFile& aFile); williamr@2: IMPORT_C void OpenTempStoreFileL(TMsvId aEntryId, RFile& aFile); williamr@2: IMPORT_C void ReplaceFileStoreL(TMsvId aEntryId); williamr@2: IMPORT_C void DeleteFileStoreL(TMsvId aEntryId); williamr@2: IMPORT_C TBool FileStoreExistsL(TMsvId aEntryId) const; williamr@2: IMPORT_C TBool MessageStoreDrivePresentL(); williamr@2: IMPORT_C TBool CreateShareProtectedAttachmentForWriteL(TMsvId aEntryId, TDes& aFilename, RFile& aFile); williamr@2: IMPORT_C void BodyTextFilePathL(TMsvId aBodyTextId, TDes& aFilePath); williamr@2: IMPORT_C void OpenBodyTextFileForReadL(RFile& aFile, TMsvId aBodyTextId, const TDesC& aFilePath); williamr@2: IMPORT_C void CreatePlainTextFileL(RFile& aFile, TMsvId aBodyTextId); williamr@2: IMPORT_C void DeletePlainTextFileL(TMsvId aBodyTextId); williamr@2: IMPORT_C void ReplacePlainTextFileL(TMsvId aBodyTextId); williamr@2: private: williamr@2: void DoGetChildrenL(TMsvId aId, CArrayPtrFlat& aEntries, const TMsvSelectionOrdering& aOrdering); williamr@2: void DoGetRemainingChildrenL(TPckgBuf& aDetails, CArrayPtrFlat& aEntries); williamr@2: void PackEntryIntoBufferL(const TMsvEntry& aEntry); williamr@2: void SendEntryDataL(TMsvOp aOperationId, const TMsvEntry& aEntry); williamr@2: void SendOperationDataL(TMsvOp aOperationId, const CMsvEntrySelection& aSelection, TInt aParameter1=0, TInt aParameter2=0); williamr@2: void SendCommandDataL(TMsvOp aOperationId, const CMsvEntrySelection& aSelection, TInt aCommand, const TDesC8& aParameter); williamr@2: void TestSlotAvailableL(); williamr@2: void PackOperationDataL(const CMsvEntrySelection& aSelection, TInt aParameter1, TInt aParameter2); williamr@2: void DoGetEntryL(TMsvId aId, TMsvId& aService, TMsvEntry& aEntry); williamr@2: williamr@2: private: williamr@2: HBufC8* iBuffer; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Gets the MTM that would perform an operation on a specified entry. williamr@2: williamr@2: @param aId1 ID of the entry williamr@2: @param aMtm On return, the UID of the MTM that would be used williamr@2: @param aService On return, the ID of the service that would be used williamr@2: @return System wide error code williamr@2: williamr@2: @capability None williamr@2: */ williamr@2: inline TInt RMsvServerSession::OperationMtmL(TMsvId aId1, TUid& aMtm, TMsvId& aService) williamr@2: { williamr@2: return OperationMtmL(aId1, aId1, aMtm, aService); williamr@2: } williamr@2: williamr@2: #endif // __MCLIENT_H__