diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgsrvnstore/server/src/MSVSTD.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgsrvnstore/server/src/MSVSTD.CPP Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,524 @@ +// Copyright (c) 1998-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: +// + +#include + +#include "MSVSTD.H" +#include "MSVRCPT.H" +#include "MSVIDS.H" +#include "MSVUIDS.H" +#include "MSVPANIC.H" + +const TInt KMessageSelectionGranularity=32; + +_LIT(KDefaultSubjectSkipString,": "); + +//********************************** +// TMsvEntry +//********************************** + +EXPORT_C TMsvEntry::TMsvEntry() +: iId(KMsvNullIndexEntryId), iParentId(KMsvNullIndexEntryId), iData(KMsvEntryMediumPriority), +iPcSyncCount(0), iReserved(0), +iServiceId(KMsvNullIndexEntryId), iRelatedId(KMsvNullIndexEntryId), +iType(KUidMsvNullEntry), iMtm(KUidMsvNullEntry), +iSize(0), iError(KErrNone), iBioType(0), +iMtmData1(0), iMtmData2(0), iMtmData3(0) +/** Default constructor. + +Initialises the new object to null values: 0 for integer values, KMsvNullIndexEntryId +for IDs, and KUidMsvNullEntry for UIDs. */ + { + } + +EXPORT_C TMsvEntry::TMsvEntry(const TMsvEntry& aEntry) +/** Copy constructor. + +It creates a simple copy of the entry, so the TPtrC members iDescription and iDetails +will point to the same descriptor data in the original and new objects. + +@param aEntry The entry to copy */ + { + Copy(aEntry); + } + +EXPORT_C TMsvEntry& TMsvEntry::operator=(const TMsvEntry& aEntry) +/** Overloaded assignment operator. + +This acts similarly to the copy constructor: i.e. it makes a simple copy of entry, +so the TPtrC entry description and details members will point to the same +descriptor data in the original and new objects. + +@param aEntry The entry from which to assign +@return Object after assignment */ + { + Copy(aEntry); + return *this; + } + +EXPORT_C TBool TMsvEntry::operator==(const TMsvEntry& aEntry) const +/** Overloaded equality operator. + +This tests whether the fields of the specified entry are equal to those of this +object. The contents, rather than pointer values, of the TPtrC members are +compared. + +@param aEntry The entry with which to compare +@return ETrue if the entries are equal, else EFalse */ + { + TInt size=sizeof(*this)-2*sizeof(TPtrC); + TBool equal = !(Mem::Compare((TUint8*)&aEntry, size, (TUint8*)this, size)); + equal &= (aEntry.iDescription==this->iDescription); + equal &= (aEntry.iDetails==this->iDetails); + return equal; + } + + +void TMsvEntry::Copy(const TMsvEntry& aEntry) + { + Mem::Copy(this,&aEntry,sizeof(*this)); + } + + +EXPORT_C TMsvPriority TMsvEntry::Priority() const +/** Gets the value of the message priority field. + +@return The value of the message priority field */ + { + if (iData&KMsvEntryHighPriority) + return EMsvHighPriority; + else if (iData&KMsvEntryMediumPriority) + return EMsvMediumPriority; + else + return EMsvLowPriority; + } + +EXPORT_C void TMsvEntry::SetPriority(TMsvPriority aPriority) +/** Sets the message priority. + +@param aPriority Value for the message priority */ + { + switch (aPriority) + { + case EMsvHighPriority: + iData = (iData & ~KMsvEntryPriorityMask) | KMsvEntryHighPriority; + break; + case EMsvMediumPriority: + iData = (iData & ~KMsvEntryPriorityMask) | KMsvEntryMediumPriority; + break; + default: + iData = (iData & ~KMsvEntryPriorityMask) | KMsvEntryLowPriority; + } + } + + +EXPORT_C void TMsvEntry::InternalizeL(RReadStream& aStream) +/** Reads an externalised object from the specified stream. + +@param aStream Stream from which to read */ + { + iId = aStream.ReadInt32L(); + iParentId = aStream.ReadInt32L(); + iData = aStream.ReadInt32L(); + iPcSyncCount= aStream.ReadInt32L(); + iReserved = aStream.ReadInt32L(); + // + iServiceId = aStream.ReadInt32L(); + iRelatedId = aStream.ReadInt32L(); + aStream >> iType; + aStream >> iMtm; + // + TInt64 time; + aStream >> time; + iDate = time; + // + iSize = aStream.ReadInt32L(); + iError = aStream.ReadInt32L(); + iBioType = aStream.ReadInt32L(); + // + iMtmData1 = aStream.ReadInt32L(); + iMtmData2 = aStream.ReadInt32L(); + iMtmData3 = aStream.ReadInt32L(); + } + + + +EXPORT_C void TMsvEntry::ExternalizeL(RWriteStream& aStream) const +/** Writes the object into the stream specified. + +@param aStream Stream to which to write */ + { + aStream.WriteUint32L(iId); + aStream.WriteUint32L(iParentId); + aStream.WriteUint32L(iData & KMsvEntryPersistedFlags); + aStream.WriteUint32L(iPcSyncCount); + aStream.WriteUint32L(iReserved); + // + aStream.WriteUint32L(iServiceId); + aStream.WriteUint32L(iRelatedId); + aStream << iType; + aStream << iMtm; + // + aStream << iDate.Int64(); + // + aStream.WriteUint32L(iSize); + aStream.WriteUint32L(iError); + aStream.WriteUint32L(iBioType); + // + aStream.WriteUint32L(iMtmData1); + aStream.WriteUint32L(iMtmData2); + aStream.WriteUint32L(iMtmData3); + } + + +/** Compares if the flag settings in two index entries are the same. The +Connected and Pending Delete flags are not used in the comparison, as they +indicate temporary conditions of the entry. + +@param aEntry Index entry to compare against +@return True if the flags settings are equal, otherwise false +*/ +EXPORT_C TBool TMsvEntry::PermanentDataUnchanged(const TMsvEntry& aEntry) const +// +// Returns true if the permanent data is equal +// + { + TMsvEntry self=*this; + TMsvEntry that=aEntry; + self.iData &= KMsvEntryPersistedFlags; + that.iData &= KMsvEntryPersistedFlags; + return self==that; + } + +/** Gets the pending conditions flag. + +@return +The value for the pending conditions flag. +*/ +EXPORT_C TBool TMsvEntry::PendingConditions() const + { + return iData & KMsvEntryPendingConditionsFlag; + } + +/** Sets the pending conditions flag. + +@param aScheduled +The value for the pending conditions flag. +*/ +EXPORT_C void TMsvEntry::SetPendingConditions(TBool aPendingConditions) + { + iData = (iData & ~KMsvEntryPendingConditionsFlag) | (aPendingConditions ? KMsvEntryPendingConditionsFlag : KMsvEntryClearFlag); + } + +/** Gets the integer value of iMtmData1 + +@return the integer value of iMtmData1 +*/ +EXPORT_C TInt32 TMsvEntry::MtmData1() const + { + return iMtmData1; + } + +/** Gets the integer value of iMtmData2 + +@return the integer value of iMtmData2 +*/ +EXPORT_C TInt32 TMsvEntry::MtmData2() const + { + return iMtmData2; + } + +/** Gets the integer value of iMtmData3 + +@return the integer value of iMtmData3 +*/ +EXPORT_C TInt32 TMsvEntry::MtmData3() const + { + return iMtmData3; + } + +/** Sets the value of iMtmData1. This API should only be called +by Symbian Software Ltd. + +@param aMtmData Value of the data to be stored in iMtmData1 + +@internalTechnology +*/ +EXPORT_C void TMsvEntry::SetMtmData1(TInt32 aMtmData) + { + iMtmData1 = aMtmData; + } + +/** Sets the value of iMtmData2. This API should only be called +by Symbian Software Ltd. + +@param aMtmData Value of the data to be stored in iMtmData2 + +@internalTechnology +*/ +EXPORT_C void TMsvEntry::SetMtmData2(TInt32 aMtmData) + { + iMtmData2 = aMtmData; + } + +/** Sets the value of iMtmData3. This API should only be called +by Symbian Software Ltd. + +@param aMtmData Value of the data to be stored in iMtmData3 + +@internalTechnology +*/ +EXPORT_C void TMsvEntry::SetMtmData3(TInt32 aMtmData) + { + iMtmData3 = aMtmData; + } + +//********************************** +// CMsvEntrySelection +//********************************** + +EXPORT_C CMsvEntrySelection::CMsvEntrySelection() + : CArrayFixFlat(KMessageSelectionGranularity) +/** Creates an empty array. */ + { + } + + +EXPORT_C CMsvEntrySelection* CMsvEntrySelection::CopyL() const +/** Creates a new CMsvEntrySelection object with the same contents as the current +object. The client should delete the object when it is no longer required. + +@leave KErrNoMemory A memory allocation failed. +@return New CMsvEntrySelection with same selection as current object */ + { + CMsvEntrySelection* newSelection = CopyLC(); + CleanupStack::Pop(); + return newSelection; + } + +EXPORT_C CMsvEntrySelection* CMsvEntrySelection::CopyLC() const +/** Creates a new CMsvEntrySelection object with the same contents as the current +object. The client should delete the object when it is no longer required. + +The function leaves the new object on the cleanup stack. + +@leave KErrNoMemory A memory allocation failed. +@return New CMsvEntrySelection with same selection as current object */ + { + CMsvEntrySelection* newSelection = new (ELeave) CMsvEntrySelection; + CleanupStack::PushL(newSelection); + if (Count()) + { + newSelection->ResizeL(Count(), KMsvNullIndexEntryId); + Mem::Copy(newSelection->Back(0), Back(0), Count()*sizeof(TMsvId)); + } + return newSelection; + } + + +EXPORT_C TInt CMsvEntrySelection::Find(TMsvId aId) const +/** Finds an item in the array by its entry ID. + +@param aId ID to find +@return The index of the position of the entry in the array, or KErrNotFound +if the selection does not contain the ID. */ + { + TInt count=Count(); + if (count) + { + const TMsvId* ptr = End(0); + while (count--) + if (*(--ptr)==aId) + break; + return count; + } + else + return KErrNotFound; + } + + +//********************************** +// TMsvSelectionOrdering +//********************************** + +EXPORT_C TMsvSelectionOrdering::TMsvSelectionOrdering() +:iGrouping(0), iSortType(EMsvSortByNone) +,iSubjectSkipString(KDefaultSubjectSkipString) +/** Default constructor. + +Creates a new object with no grouping, and sets the sorting to EMsvSortByNone. */ + {} + +EXPORT_C TMsvSelectionOrdering::TMsvSelectionOrdering(TInt aGroupingKey, TMsvSorting aSorting, TBool aShowInvisible) +: iGrouping(aGroupingKey), iSortType(aSorting) +,iSubjectSkipString(KDefaultSubjectSkipString) + +/** Creates a new object, sets the group, sort order, and show-invisibility options +to those specified in the parameters. + +@param aGroupingKey A bitmask of grouping options. For the values to use, +see TMsvGrouping. +@param aSorting Sorting order. +@param aShowInvisible Determines whether invisible entries are included in +the selection */ + { + SetShowInvisibleEntries(aShowInvisible); + } + +EXPORT_C void TMsvSelectionOrdering::InternalizeL(RReadStream& aStream) +/** Reads an externalised object from the specified stream. + +@param aStream Stream from which to read */ + { + iGrouping = aStream.ReadInt32L(); + iSortType = (TMsvSorting) aStream.ReadInt32L(); + if (iSortTypeEMsvSortByDescriptionReverse) + iSortType=EMsvSortByNone; + aStream >> iSubjectSkipString; + } + +EXPORT_C void TMsvSelectionOrdering::ExternalizeL(RWriteStream& aStream) const +/** Writes the object into the specified stream. + +@param aStream Stream to which to write */ + { + aStream.WriteInt32L(iGrouping); + aStream.WriteInt32L((TInt)iSortType); + aStream << iSubjectSkipString; + } + +EXPORT_C TBool TMsvSelectionOrdering::operator==(const TMsvSelectionOrdering& aOrdering) const + /** Tests two TMsvSelectionOrdering objects for equality. + + Two TMsvSelectionOrdering objects are equal if the same grouping and sorting + options have been set on each. + + @param aOrdering The object with which to compare + @return ETrue if the objects are equal, else EFalse */ + { + return (aOrdering.iGrouping==iGrouping && aOrdering.iSortType==iSortType && iSubjectSkipString == aOrdering.iSubjectSkipString); +// TInt size=sizeof(*this); +// return !(Mem::Compare((TUint8*)&aOrdering, size, (TUint8*)this, size)); + } + +EXPORT_C const TDesC& TMsvSelectionOrdering::SubjectSkipString() const +/** Get the current subject skip string + +@return The current subject skip string*/ + { + return iSubjectSkipString; + } + +EXPORT_C void TMsvSelectionOrdering::SetSubjectSkipString(const TDesC& aSubjectSkipString) +/** Set the subject skip string up to maximum length of KMaxSubjectSkipStringLength + +@panic USER 11, if the length of the descriptor aSubjectSkipString is greater than + KMaxSubjectSkipStringLength (defined in ) */ + { + //Check whether SubjectSkipString is empty. If so set it to default + if(aSubjectSkipString.Length() == 0) + { + iSubjectSkipString = KDefaultSubjectSkipString; + } + else + { + iSubjectSkipString = aSubjectSkipString; + } + + } + +//********************************** +// CMsvRecipient +//********************************** + + +EXPORT_C CMsvRecipient::CMsvRecipient() +/** Protected base class default constructor. */ + {} + +EXPORT_C void CMsvRecipient::InternalizeL(RReadStream& aStream) + /** Internalises the object from a read stream. + + @param aStream The stream from which the object should be internalised. */ + { + iStatus = (TRecipientStatus)aStream.ReadInt32L(); + iError = aStream.ReadInt32L(); + iRetries = aStream.ReadInt32L(); + TInt64 time; + aStream >> time; + iTime = time; + } + +EXPORT_C void CMsvRecipient::ExternalizeL(RWriteStream& aStream) const + /** Externalises the object to a write stream. + + @param aStream Stream to which the object should be externalised. */ + { + aStream.WriteInt32L((TInt)iStatus); + aStream.WriteInt32L(iError); + aStream.WriteInt32L(iRetries); + aStream << iTime.Int64(); + } + +//********************************** +// CMsvEntryFilter +//********************************** + +EXPORT_C CMsvEntryFilter* CMsvEntryFilter::NewLC() +/** Allocates and constructs a new entry filter, and leaves the pointer on the +cleanup stack. + +For default values, see the NewL() function. + +@return Pointer to the newly created entry filter. */ + { + CMsvEntryFilter* self = new(ELeave)CMsvEntryFilter(); + CleanupStack::PushL(self); + return self; + } + +EXPORT_C CMsvEntryFilter* CMsvEntryFilter::NewL() +/** Allocates and constructs a new entry filter. + +Default values are as follows: + +1. service: KMsvNullIndexEntryId + +2. MTM: KNullUid + +3. entry type: KNullUid + +4. last change date: no date + +5. sort order defaults to EMsvSortByNone + +These values mean that entries with any values for service, MTM, type and +last change date will be returned, with no grouping or sort MTM. + +@return Pointer to the newly created entry filter. */ + { + CMsvEntryFilter* self = NewLC(); + CleanupStack::Pop(); // self + return self; + } + +CMsvEntryFilter::CMsvEntryFilter() +: iServiceId(KMsvNullIndexEntryId), iMtm(KNullUid), iType(KNullUid), iSortMtm(KNullUid) + { + } + +// +// DLL entry point +