diff -r 238255e8b033 -r 84d9eb65b26f messagingappbase/smsmtm/clientmtm/src/SMUTSET.CPP --- a/messagingappbase/smsmtm/clientmtm/src/SMUTSET.CPP Fri Apr 16 14:56:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,849 +0,0 @@ -// Copyright (c) 1999-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 "SMCMMAIN.H" -#include "SMUTSET.H" - -#include -#include -#include -#include -#include -using namespace CommsDat; - - - -// Compile time check to see if the enums RMobileSmsMessaging::TMobileSmsBearer and CSmsSettings::TMobileSmsBearer -// are equivalent. - -#undef C_ASSERT -#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] - -C_ASSERT(RMobileSmsMessaging::ESmsBearerPacketOnly==CSmsSettings::ESmsBearerPacketOnly); -C_ASSERT(RMobileSmsMessaging::ESmsBearerCircuitOnly==CSmsSettings::ESmsBearerCircuitOnly); -C_ASSERT(RMobileSmsMessaging::ESmsBearerPacketPreferred==CSmsSettings::ESmsBearerPacketPreferred); -C_ASSERT(RMobileSmsMessaging::ESmsBearerCircuitPreferred==CSmsSettings::ESmsBearerCircuitPreferred); - -const TInt16 KMsgFileSmsMessageSettingsVersion = 1; -const TInt16 KMsgFileSmsNumberVersion = 2; -const TInt KSmcmSCAddressGranularity = 8; - - -/** -Constructor. -*/ -CSmsMessageSettings::CSmsMessageSettings() -: CBase(), - iValidityPeriodFormat(TSmsFirstOctet::ESmsVPFSemiOctet) - { - } - -/** -Internalises the settings from a read stream. - -@param aReadStream -The stream from which the settings should be internalised. -*/ -EXPORT_C void CSmsMessageSettings::InternalizeL(RReadStream& aReadStream) - { - aReadStream.ReadInt16L(); // version - not used yet - - iValidityPeriod = aReadStream.ReadInt32L(); - iValidityPeriodFormat = (TSmsFirstOctet::TSmsValidityPeriodFormat) aReadStream.ReadInt8L(); - iAlphabet = (TSmsDataCodingScheme::TSmsAlphabet) aReadStream.ReadInt16L(); - iMsgFlags = aReadStream.ReadUint32L(); - iMessageConversion = (TSmsPIDConversion) aReadStream.ReadInt16L(); - } - -/** -Externalises the settings to a write stream. - -@param aWriteStream -The stream to which the settings should be externalised. -*/ -EXPORT_C void CSmsMessageSettings::ExternalizeL(RWriteStream& aWriteStream) const - { - aWriteStream.WriteInt16L(KMsgFileSmsMessageSettingsVersion); - aWriteStream.WriteInt32L(iValidityPeriod.Int()); - aWriteStream.WriteInt8L(iValidityPeriodFormat); - aWriteStream.WriteInt16L(iAlphabet); - aWriteStream.WriteUint32L(iMsgFlags); - aWriteStream.WriteInt16L(iMessageConversion); - } - -/** -Copies the settings stored in the specified object into this object. - -@param aSettings -The settings to be copied. -*/ -EXPORT_C void CSmsMessageSettings::CopyL(const CSmsMessageSettings& aSettings) - { - iMsgFlags = aSettings.iMsgFlags; - iMessageConversion = aSettings.iMessageConversion; - iAlphabet = aSettings.iAlphabet; - SetValidityPeriod(aSettings.ValidityPeriod()); - SetValidityPeriodFormat(aSettings.ValidityPeriodFormat()); - } - -/** -Returns SMS message settings flag - -@return -SMS message settings flag -*/ -TUint32 CSmsMessageSettings::MessageFlags() const - { - return iMsgFlags; - } - -/** -Sets SMS message settings flag - -@param aMsgFlags -SMS message settings flag -*/ -void CSmsMessageSettings::SetMessageFlags(TUint32 aMsgFlags) - { - iMsgFlags = aMsgFlags; - } - -/* - * CSmsSettings - */ - -/** -Allocates and constructs an SMS settings object. - -Initialises all member data to their default values. - -@return -The newly constructed SMS settings object. -*/ -EXPORT_C CSmsSettings* CSmsSettings::NewL() - { - CSmsSettings* self = CSmsSettings::NewLC(); - CleanupStack::Pop(self); - return self; - } - -/** -Allocates and constructs an SMS settings object. - -Initialises all member data to their default values. - -@return -The newly constructed SMS settings object. -*/ -EXPORT_C CSmsSettings* CSmsSettings::NewLC() - { - CSmsSettings* self = new (ELeave) CSmsSettings(); - CleanupStack::PushL(self); - self->ConstructL(); - return self; - } - -/** -Constructor. -*/ -CSmsSettings::CSmsSettings() -: CSmsMessageSettings(), - iDefaultSC(-1), - iStatusReportHandling(EDoNotWatchForReport), - iSpecialMessageHandling(EDoNotWatchForReport), - iCommDbAction(ENone), - iSmsBearerAction(ENone), - iSmsBearer(ESmsBearerCircuitPreferred), - iClass2Folder(KMsvGlobalInBoxIndexEntryId), - iDescriptionLength(KSmsDescriptionLength) - { - } - -/** -Destructor. -*/ -EXPORT_C CSmsSettings::~CSmsSettings() - { - if (iServiceCenters) - { - iServiceCenters->ResetAndDestroy(); - delete iServiceCenters; - } - } - -/** -Second phase construction. -*/ -void CSmsSettings::ConstructL() - { - iServiceCenters = new (ELeave) CArrayPtrFlat(KSmcmSCAddressGranularity); - } - - -void CSmsSettings::StoreToCommDbL() const - { - if (iCommDbAction != EStoreToCommDb && iSmsBearerAction != EStoreToCommDb) - return; // nothing to store to the Comm DB - - CMDBSession *dbSession = CMDBSession::NewL(CMDBSession::LatestVersion()); - CleanupStack::PushL(dbSession); - CMDBRecordSet globalSettingsRecord(KCDTIdGlobalSettingsRecord); - TRAPD(err, globalSettingsRecord.LoadL(*dbSession)); - if(err != KErrNone) - { - User::Leave(KErrNotFound); - } - - if (iCommDbAction == EStoreToCommDb) - { - CCDModemBearerRecord *modemRecord = (CCDModemBearerRecord*)(CCDRecordBase::RecordFactoryL(KCDTIdModemBearerRecord)); - CleanupStack::PushL(modemRecord); - modemRecord->SetRecordId(((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iModemForPhoneServicesAndSMS); - modemRecord->LoadL(*dbSession); - - if (iDefaultSC > -1 && iServiceCenters->Count()) - { - const TPtrC address = GetServiceCenter(iDefaultSC).Address(); - modemRecord->iMessageCentreNumber.SetMaxLengthL(address.Length()); - modemRecord->iMessageCentreNumber = address; - } - else - { - modemRecord->iMessageCentreNumber = KNullDesC; - } - - const TUint32 valPeriod = (TUint32) ValidityPeriod().Int(); - modemRecord->iMessageValidityPeriod = valPeriod; - - const TBool delReport = DeliveryReport() ? ETrue : EFalse; - modemRecord->iMessageDeliveryReport = delReport; - modemRecord->ModifyL(*dbSession); - CleanupStack::PopAndDestroy(modemRecord); - } - - if (iSmsBearerAction == EStoreToCommDb) - { - ((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iSMSBearer = iSmsBearer; - ((CCDGlobalSettingsRecord*)globalSettingsRecord.iRecords[0])->iSMSBearer.ModifyL(*dbSession); - } - - CleanupStack::PopAndDestroy(dbSession); - } - - -/** -Gets the number of Service Centre addresses stored in this object. - -@return -The number of addresses. -*/ -EXPORT_C TInt CSmsSettings::ServiceCenterCount() const - { - return iServiceCenters->Count(); - } - -/** -Gets the Service Centre address at the specified index in the list. - -@param aIndex -The index of the specified address. - -@return -The indexed address. -*/ -EXPORT_C CSmsServiceCenter& CSmsSettings::GetServiceCenter(TInt aIndex) const - { - return *iServiceCenters->At(aIndex); - } - -/** -Appends a service centre address (name and number) to the list. - -@param aName -The Service Centre name - -@param aNumber -The Service Centre number. -*/ -EXPORT_C void CSmsSettings::AddServiceCenterL(const TDesC& aName,const TDesC& aNumber) - { - - CSmsServiceCenter* recipient=CSmsServiceCenter::NewL(); - CleanupStack::PushL(recipient); - recipient->SetNameL(aName); - recipient->SetAddressL(aNumber); - - iServiceCenters->AppendL(recipient); - CleanupStack::Pop(recipient); - - if (iServiceCenters->Count() == 1 || iDefaultSC < 0) - iDefaultSC = 0; - } - -/** -Removes the service centre address with index aIndex from the array of service -centre addresses that are stored in the object. - -@param aIndex -The index of the Service Centre address to remove. -*/ -EXPORT_C void CSmsSettings::RemoveServiceCenter(TInt aIndex) - { - delete iServiceCenters->At(aIndex); - iServiceCenters->Delete(aIndex); - - if (iDefaultSC == aIndex) - { - iDefaultSC = iServiceCenters->Count() ? 0 : -1; - } - else if (iDefaultSC > aIndex) - { - iDefaultSC--; - } - } - -/** -Gets the index of the default service centre address for this service. - -@return -The index of the default service centre address. -*/ -EXPORT_C TInt CSmsSettings::DefaultServiceCenter() const - { - return iDefaultSC; - } - -/** -Sets the index of the default service centre address for this service. - -@param aDefaultSC -An index into the list of the default service centre address. - -@panic SMCM 7 -The specified index is negative or beyond the maximum index (debug only). -*/ -EXPORT_C void CSmsSettings::SetDefaultServiceCenter(TInt aDefaultSC) - { - __ASSERT_DEBUG(aDefaultSC>=0, Panic(ESmscDefaultSCOutOfRange)); - __ASSERT_DEBUG(aDefaultSCCount(), Panic(ESmscDefaultSCOutOfRange)); - - iDefaultSC=aDefaultSC; - } - -void CSmsSettings::RemoveSCAddresses() - { - iServiceCenters->ResetAndDestroy(); - } - -/** -Copies the SMS settings stored in the specified object into this object. - -@param aSmsSettings -The SMS Settings to be copied. -*/ -EXPORT_C void CSmsSettings::CopyL(const CSmsSettings& aSmsSettings) - { - CSmsMessageSettings::CopyL(aSmsSettings); - - iServiceCenters->ResetAndDestroy(); - const TInt count = aSmsSettings.ServiceCenterCount(); - for (TInt i=0; i < count; i++) - { - CSmsServiceCenter* scNumber = CSmsServiceCenter::NewL(aSmsSettings.GetServiceCenter(i)); - CleanupStack::PushL(scNumber); - iServiceCenters->AppendL(scNumber); - CleanupStack::Pop(scNumber); - } - - iDelivery = aSmsSettings.iDelivery; - iDefaultSC = aSmsSettings.iDefaultSC; - iSpecialMessageHandling = aSmsSettings.iSpecialMessageHandling; - iStatusReportHandling = aSmsSettings.iStatusReportHandling; - iSetFlags = aSmsSettings.iSetFlags; - iCommDbAction = aSmsSettings.iCommDbAction; - iSmsBearerAction = aSmsSettings.iSmsBearerAction; - iSmsBearer = aSmsSettings.iSmsBearer; - iClass2Folder = aSmsSettings.iClass2Folder; - iDescriptionLength = aSmsSettings.iDescriptionLength; - } - -/** -Returns SMS settings flag - -@return -SMS settings flag -*/ -TUint32 CSmsSettings::SettingsFlags() const - { - return iSetFlags; - } - -/** -Sets SMS settings flag - -@param aSetFlags -SMS settings flag -*/ -void CSmsSettings::SetSettingsFlags(TUint32 aSetFlags) - { - iSetFlags = aSetFlags; - } - -/* - * CSmsNumber - */ - -/** -Creates and allocates a new CSmsNumber object. - -@return -The new object. -*/ -EXPORT_C CSmsNumber* CSmsNumber::NewL() - { - return new(ELeave) CSmsNumber(); - } - -/** -Creates and allocates a new CSmsNumber object, copying an existing object. - -@param aSmsNumber -The object to be copied. - -@return -The new object. -*/ -EXPORT_C CSmsNumber* CSmsNumber::NewL(const CSmsNumber& aSmsNumber) - { - CSmsNumber* number=new(ELeave) CSmsNumber(); - CleanupStack::PushL(number); - number->CopyL(aSmsNumber); - CleanupStack::Pop(number); - return number; - } - -/** -Destructor. -*/ -EXPORT_C CSmsNumber::~CSmsNumber() - { - delete iNumber; - delete iName; - } - -/** -Internalises the object from a read stream. - -@param aStream -The stream from which the object should be internalised. -*/ -EXPORT_C void CSmsNumber::InternalizeL( RReadStream& aStream) - { - TInt16 version = aStream.ReadInt16L(); - - CMsvRecipient::InternalizeL(aStream); - - HBufC* number = HBufC::NewL(aStream, KSmcmSmsNumberMaxNumberLength); - delete iNumber; - iNumber = number; - - HBufC* name = HBufC::NewL(aStream, KSmcmSmsNumberMaxNameLength); - delete iName; - iName = name; - - iLogId = aStream.ReadInt32L(); - - if( version >= 2 ) - { - iDeliveryStatus = (TSmsAckStatus) aStream.ReadInt8L(); - } - else - { - iDeliveryStatus = ENoAckRequested; - } - } - -/** -Externalises the object to a write stream. - -@param aStream -The stream to which the object should be externalised. -*/ -EXPORT_C void CSmsNumber::ExternalizeL( RWriteStream& aStream) const - { - aStream.WriteInt16L(KMsgFileSmsNumberVersion); - - CMsvRecipient::ExternalizeL(aStream); - - aStream << Address(); - aStream << Name(); - - aStream.WriteInt32L(iLogId); - aStream.WriteInt8L(iDeliveryStatus); - } - -/** -Constructor. -*/ -CSmsNumber::CSmsNumber() -: iLogId(KLogNullId) - { - } - -/** -Copies settings from another CSmsNumber object. - -@param aSmsNumber -The object to be copied. - -@return -This object with the updated settings. -*/ -EXPORT_C CSmsNumber& CSmsNumber::CopyL(const CSmsNumber& aSmsNumber) - { - SetNameL(aSmsNumber.Name()); - SetAddressL(aSmsNumber.Address()); - SetLogId(aSmsNumber.LogId()); - SetAckStatus(ESmsAckTypeDelivery, aSmsNumber.AckStatus(ESmsAckTypeDelivery)); - return *this; - } - -/** -Gets the recipient address. - -The address is a telephone number. It is limited to a maximum length specified -by KSmcmSmsNumberMaxNumberLength. - -@see KSmcmSmsNumberMaxNumberLength - -@return -A descriptor with the recipient address. -*/ -EXPORT_C TPtrC CSmsNumber::Address() const - { - TPtrC number = iNumber ? iNumber->Des() : TPtrC(); - return number; - } - -/** -Gets the recipient name. - -@return -A descriptor with the recipient name. -*/ -EXPORT_C TPtrC CSmsNumber::Name() const - { - TPtrC name = iName ? iName->Des() : TPtrC(); - return name; - } - -/** -Sets the recipient address. - -The address is a telephone number. It is limited to a maximum length specified -by KSmcmSmsNumberMaxNumberLength. - -@see KSmcmSmsNumberMaxNumberLength - -@param aAddress -The recipient address. -*/ -EXPORT_C void CSmsNumber::SetAddressL(const TDesC& aAddress) - { - TPtrC clippedNumber = LimitStringSize(aAddress, KSmcmSmsNumberMaxNumberLength); - HBufC* number = clippedNumber.AllocL(); - delete iNumber; - iNumber = number; - } - -/** -Sets the recipient email address, The address here is a email address. - -@param aAddress -The recipient address. -@param aEmailFields -Encapsulates the address fields for Email sent over SMS. -@param aAlias -*/ - -// For address information separation (start) -const TUint KMsgSmsAddressStartChar ('<'); -// For address information separation (end) -const TUint KMsgSmsAddressEndChar ('>'); - -void CSmsNumber::SetEmailAddressL(const TDesC& aAddress, CSmsEmailFields* aEmailFields, const TDesC& aAlias) - { - if ( aAlias.Length() > 0 ) - { - HBufC* aliasBuf = HBufC::NewLC( aAddress.Length() + aAlias.Length() + 3 ); - TPtr aliasTPtr = aliasBuf->Des(); - aliasTPtr.Append( aAlias ); - aliasTPtr.Append( CEditableText::ESpace ); - aliasTPtr.Append( KMsgSmsAddressStartChar ); - aliasTPtr.Append( aAddress ); - aliasTPtr.Append( KMsgSmsAddressEndChar ); - aEmailFields->AddAddressL( aliasTPtr ); - - CleanupStack::PopAndDestroy( aliasBuf ); - } - else - { - aEmailFields->AddAddressL( aAddress ); - } - } - -/** -Sets the recipient name. - -The name is limited to a maximum length specified by KSmcmSmsNumberMaxNameLength. - -@see KSmcmSmsNumberMaxNameLength - -@param aName -The recipient name. -*/ -EXPORT_C void CSmsNumber::SetNameL(const TDesC& aName) - { - TPtrC clippedName = LimitStringSize(aName, KSmcmSmsNumberMaxNameLength); - HBufC* name = clippedName.AllocL(); - delete iName; - iName = name; - } - -/** -Gets the delivery status for this recipient. - -@return -The current delivery status for this recipient. - -@see CSmsNumber::TSmsDeliveryStatus -*/ -EXPORT_C CSmsNumber::TSmsAckStatus CSmsNumber::AckStatus(TSmsAckType aAckType) const - { - TSmsAckStatus status = ENoAckRequested; - switch( aAckType ) - { - case ESmsAckTypeDelivery: - status = iDeliveryStatus; - break; - default: - // Use the default... - break; - } - return status; - } - -/** -Sets the delivery status for this recipient. - -@param -aDeliveryStatus The new delivery status for this recipient. - -@see CSmsNumber::TSmsDeliveryStatus -*/ -EXPORT_C void CSmsNumber::SetAckStatus(TSmsAckType aAckType, TSmsAckStatus aAckStatus) - { - switch( aAckType ) - { - case ESmsAckTypeDelivery: - iDeliveryStatus = aAckStatus; - break; - default: - // Do nothing - fail gracefully - break; - } - } - -/** -Returns a limited version of the input string. - -The output string is limited by the maximum length specified or the actual# -length of the input string, withever is the shortest. - -@param aString -The input string to be limited. - -@param aMaxLength -The maximum length - -@return -The input string limited by the shortest value between its original length or -the maximum length specified. -*/ -TPtrC CSmsNumber::LimitStringSize(const TPtrC& aString, TInt aMaxLength) const - { - if (aString.Length() <= aMaxLength) - return aString; - else - return aString.Left(aMaxLength); - } - -/** -Creates and allocates a new CSmsServiceCenter object. - -@return -The new object. -*/ -EXPORT_C CSmsServiceCenter* CSmsServiceCenter::NewL() - { - return new(ELeave) CSmsServiceCenter(); - } - -/** -Creates and allocates a new CSmsServiceCenter object, copying an existing object. - -@param CSmsServiceCenter -The object to be copied. - -@return -The new object. -*/ -EXPORT_C CSmsServiceCenter* CSmsServiceCenter::NewL(const CSmsServiceCenter& aSmsSc) - { - CSmsServiceCenter* sc = new(ELeave) CSmsServiceCenter(); - CleanupStack::PushL(sc); - sc->CopyL(aSmsSc); - CleanupStack::Pop(sc); - return sc; - } - -/** -Destructor. -*/ -EXPORT_C CSmsServiceCenter::~CSmsServiceCenter() - { - delete iNumber; - delete iName; - } - -/** -Constructor. -*/ -CSmsServiceCenter::CSmsServiceCenter() - { - } - -/** -Copies settings from another CSmsServiceCenter object. - -@param aSmsSc -The object to be copied. - -@return -This object with the updated settings. -*/ -EXPORT_C CSmsServiceCenter& CSmsServiceCenter::CopyL(const CSmsServiceCenter& aSmsSc) - { - SetNameL(aSmsSc.Name()); - SetAddressL(aSmsSc.Address()); - return *this; - } - -/** -Gets the recipient address. - -The address is a telephone number. It is limited to a maximum length specified -by KSmcmSmsNumberMaxNumberLength. - -@see KSmcmSmsNumberMaxNumberLength - -@return -A descriptor with the recipient address. -*/ -EXPORT_C TPtrC CSmsServiceCenter::Address() const - { - TPtrC number = iNumber ? iNumber->Des() : TPtrC(); - return number; - } - -/** -Gets the recipient name. - -@return -A descriptor with the recipient name. -*/ -EXPORT_C TPtrC CSmsServiceCenter::Name() const - { - TPtrC name = iName ? iName->Des() : TPtrC(); - return name; - } - -/** -Sets the recipient address. - -The address is a telephone number. It is limited to a maximum length specified -by KSmcmSmsNumberMaxNumberLength. - -@see KSmcmSmsNumberMaxNumberLength - -@param aAddress -The recipient address. -*/ -EXPORT_C void CSmsServiceCenter::SetAddressL(const TDesC& aAddress) - { - TPtrC clippedNumber = LimitStringSize(aAddress, KSmcmSmsNumberMaxNumberLength); - HBufC* number = clippedNumber.AllocL(); - delete iNumber; - iNumber = number; - } - -/** -Sets the recipient name. - -The name is limited to a maximum length specified by KSmcmSmsNumberMaxNameLength. - -@see KSmcmSmsNumberMaxNameLength - -@param aName -The recipient name. -*/ -EXPORT_C void CSmsServiceCenter::SetNameL(const TDesC& aName) - { - TPtrC clippedName = LimitStringSize(aName, KSmcmSmsNumberMaxNameLength); - HBufC* name = clippedName.AllocL(); - delete iName; - iName = name; - } - -/** -Returns a limited version of the input string. - -The output string is limited by the maximum length specified or the actual# -length of the input string, withever is the shortest. - -@param aString -The input string to be limited. - -@param aMaxLength -The maximum length - -@return -The input string limited by the shortest value between its original length or -the maximum length specified. -*/ -TPtrC CSmsServiceCenter::LimitStringSize(const TPtrC& aString, TInt aMaxLength) const - { - if (aString.Length() <= aMaxLength) - { - return aString; - } - else - { - return aString.Left(aMaxLength); - } - } -