diff -r 9f5ae1728557 -r db3f5fa34ec7 messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsSmsScripts.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsSmsScripts.cpp Wed Nov 03 22:41:46 2010 +0530 @@ -0,0 +1,411 @@ +// Copyright (c) 2003-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: +// + +/** + @file +*/ +#include +#include +#include +#include +#include +#include + +#include "CMtfTestActionUtilsSmsScripts.h" +#include "CMtfTestActionUtilsConfigFileParser.h" +#include "CMtfTestCase.h" +#include "TestFrameworkActionsUtils.h" + + + + + +// Constants to read the values out of the settings file + +// Service Centre +_LIT(KScriptItemSC, "SC"); + +// Default Service Centre +_LIT(KScriptItemDefaultSC, "DefaultSC"); + +// Bearer +_LIT(KScriptItemBearer, "SmsBearer"); + +// Encoding +_LIT(KScriptItemEncoding, "Encoding"); + +// Delivery Report +_LIT(KScriptItemDeliveryReport, "DeliveryReport"); + +// Reply Quoted +_LIT(KScriptItemReplyQuoted, "ReplyQuoted"); + +// Description Length +_LIT(KScriptItemDescriptionLength, "DescriptionLength"); + +// Can concatenate +_LIT(KScriptItemCanConcatenate, "CanConcatenate"); + +// Reply Path +_LIT(KScriptItemReplyPath, "ReplyPath"); + +// Reject duplicate +_LIT(KScriptItemRejectDuplicate, "RejectDuplicate"); + +// Validity period +_LIT(KScriptItemValidityPeriod, "ValidityPeriod"); + +// Delivery +_LIT(KScriptItemDelivery, "Delivery"); + +// Status Report Handling +_LIT(KScriptItemStatusReportHandling, "StatusReportHandling"); + +// Special Message Handling +_LIT(KScriptItemSpecialMessageHandling, "SpecialMessageHandling"); + +// Commdb Action +_LIT(KScriptItemSmsCommdbAction, "CommdbAction"); + +// Sms Bearer Action +_LIT(KScriptItemSmsBearerAction, "SmsBearerAction"); + +// Message Conversion +_LIT(KScriptItemSmsMessageConversion, "MessageConversion"); + +// Validity Period Format +_LIT(KScriptItemSmsValidityPeriodFormat, "ValidityPeriodFormat"); + +// Class2 Folder +_LIT(KScriptItemClass2Folder, "Class2Folder"); + +// Recipient +_LIT(KRecipient, "Recipients"); + +// Message Body +_LIT(KMessageBody, "Message"); + +//Bio Uid +_LIT(KBioUId, "BioUIdType"); + +//Last Segment Delivery Report +_LIT(KLastSegmentDeliveryReport, "LastSegmentDeliveryReport"); + + +class MDummySessionObserver : public MMsvSessionObserver + { +public: + void HandleSessionEventL(TMsvSessionEvent,TAny*,TAny*,TAny*) {}; + }; + + + +void CMtfTestActionUtilsSmsScripts::ReadSmsSettingsFromConfigurationFileL(CMtfTestCase& aTestCase, const TDesC& aSettingsFile, CSmsSettings& aSmsSettings) + { + CMtfTestActionUtilsConfigFileParser* scriptFileParser = CMtfTestActionUtilsConfigFileParser::NewL(aSettingsFile); + CleanupStack::PushL(scriptFileParser); + + TPtrC stringPtr; + TInt intValue; + + // Service Centre + if(scriptFileParser->GetFieldAsString(KScriptItemSC, stringPtr) == KErrNone) + { + // get the addresses from the config file + TLex detailsToParse(stringPtr); + TPtrC scName; + TPtrC scNumber; + + detailsToParse.SkipSpaceAndMark(); + while(!detailsToParse.Eos()) + { + scName.Set(_L("Unknown")); // default SC name + + while(detailsToParse.Peek() != ';' && !detailsToParse.Eos()) // SCs' details separated by semi-colon + { + if(detailsToParse.Peek() == ',') // name and number separated by comma + { // has a name specified + scName.Set(detailsToParse.MarkedToken()); + detailsToParse.Inc(); + detailsToParse.SkipSpaceAndMark(); + } + else + detailsToParse.Inc(); + } + + scNumber.Set(detailsToParse.MarkedToken()); + + // add the address to the SCs list + + aSmsSettings.AddServiceCenterL(scName, scNumber); + + + detailsToParse.Inc(); + detailsToParse.SkipSpaceAndMark(); + } + } + + // Default Service Centre + if(scriptFileParser->GetFieldAsInteger(KScriptItemDefaultSC, intValue) == KErrNone) + { + + aSmsSettings.SetDefaultServiceCenter(intValue); + + } + + // Bearer + if(scriptFileParser->GetFieldAsString(KScriptItemBearer, stringPtr) == KErrNone) + { + CSmsSettings::TMobileSmsBearer smsBearer = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetSmsBearer(smsBearer); + } + + // Encoding + if(scriptFileParser->GetFieldAsString(KScriptItemEncoding, stringPtr) == KErrNone) + { + TSmsDataCodingScheme::TSmsAlphabet characterSet = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetCharacterSet(characterSet); + } + + // Delivery Report + if(scriptFileParser->GetFieldAsString(KScriptItemDeliveryReport, stringPtr) == KErrNone) + { + if (stringPtr.CompareF(_L("NO")) == 0) + { + aSmsSettings.SetDeliveryReport(EFalse); + } + else if (stringPtr.CompareF(_L("YES")) == 0) + { + aSmsSettings.SetDeliveryReport(ETrue); + } + } + + // Reply quoted + if(scriptFileParser->GetFieldAsString(KScriptItemReplyQuoted, stringPtr) == KErrNone) + { + if (stringPtr.CompareF(_L("NO")) == 0) + { + aSmsSettings.SetReplyQuoted(EFalse); + } + else if (stringPtr.CompareF(_L("YES")) == 0) + { + aSmsSettings.SetReplyQuoted(ETrue); + } + } + + // Description length + if(scriptFileParser->GetFieldAsInteger(KScriptItemDescriptionLength, intValue) == KErrNone) + { + aSmsSettings.SetDescriptionLength(intValue); + } + + + // Can Concatenate + if(scriptFileParser->GetFieldAsString(KScriptItemCanConcatenate, stringPtr) == KErrNone) + { + if (stringPtr.CompareF(_L("NO")) == 0) + { + aSmsSettings.SetCanConcatenate(EFalse); + } + else if (stringPtr.CompareF(_L("YES")) == 0) + { + aSmsSettings.SetCanConcatenate(ETrue); + } + } + + // Reply path + if(scriptFileParser->GetFieldAsString(KScriptItemReplyPath, stringPtr) == KErrNone) + { + if (stringPtr.CompareF(_L("NO")) == 0) + { + aSmsSettings.SetReplyPath(EFalse); + } + else if (stringPtr.CompareF(_L("YES")) == 0) + { + aSmsSettings.SetReplyPath(ETrue); + } + } + + // Reject duplicate + if(scriptFileParser->GetFieldAsString(KScriptItemRejectDuplicate, stringPtr) == KErrNone) + { + if (stringPtr.CompareF(_L("NO")) == 0) + { + aSmsSettings.SetRejectDuplicate(EFalse); + } + else if (stringPtr.CompareF(_L("YES")) == 0) + { + aSmsSettings.SetRejectDuplicate(ETrue); + } + } + + // Validity period, value is read in minutes + if(scriptFileParser->GetFieldAsInteger(KScriptItemValidityPeriod, intValue) == KErrNone) + { + aSmsSettings.SetValidityPeriod(TTimeIntervalMinutes(intValue)); + } + + // Delivery + if(scriptFileParser->GetFieldAsString(KScriptItemDelivery, stringPtr) == KErrNone) + { + TSmsDelivery delivery = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetDelivery(delivery); + } + + // Status Report Handling + if(scriptFileParser->GetFieldAsString(KScriptItemStatusReportHandling, stringPtr) == KErrNone) + { + CSmsSettings::TSmsReportHandling statusReportHandling = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetStatusReportHandling(statusReportHandling); + } + + // Special Message Handling + if(scriptFileParser->GetFieldAsString(KScriptItemSpecialMessageHandling, stringPtr) == KErrNone) + { + CSmsSettings::TSmsReportHandling specialMessageHandling = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetSpecialMessageHandling(specialMessageHandling); + } + + // Commdb action + if(scriptFileParser->GetFieldAsString(KScriptItemSmsCommdbAction, stringPtr) == KErrNone) + { + CSmsSettings::TSmsSettingsCommDbAction commdbAction = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetCommDbAction(commdbAction); + } + + // Sms Bearer Action + if(scriptFileParser->GetFieldAsString(KScriptItemSmsBearerAction, stringPtr) == KErrNone) + { + CSmsSettings::TSmsSettingsCommDbAction smsBearerAction = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetSmsBearerAction(smsBearerAction); + } + + // Message Conversion + if(scriptFileParser->GetFieldAsString(KScriptItemSmsMessageConversion, stringPtr) == KErrNone) + { + TSmsPIDConversion messageConversion = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetMessageConversion(messageConversion); + } + + // Vailidity Period Format + if(scriptFileParser->GetFieldAsString(KScriptItemSmsValidityPeriodFormat, stringPtr) == KErrNone) + { + TSmsFirstOctet::TSmsValidityPeriodFormat valPeriodFormat = ObtainValueParameterL(aTestCase, stringPtr); + aSmsSettings.SetValidityPeriodFormat(valPeriodFormat); + } + + // Class2 Folder + if(scriptFileParser->GetFieldAsString(KScriptItemClass2Folder, stringPtr) == KErrNone) + { + // Try to find a folder with that name + MDummySessionObserver obser; + CMsvSession* session = CMsvSession::OpenSyncL(obser); + CleanupStack::PushL(session); + + CMsvEntry* entry = CMsvEntry::NewL(*session, KMsvLocalServiceIndexEntryId, TMsvSelectionOrdering(KMsvGroupByStandardFolders||KMsvGroupByType,EMsvSortByNone)); + CleanupStack::PushL(entry); + entry->SetEntryL(KMsvLocalServiceIndexEntryId); // Search only the local folders + + TMsvSelectionOrdering order; + order.SetShowInvisibleEntries(ETrue); + entry->SetSortTypeL(order); + + CMsvEntrySelection* selection = entry->ChildrenL(); + CleanupStack::PushL(selection); + + TBool found = EFalse; + TInt count = selection->Count(); + for (TInt i=0; iSetEntryL((*selection)[i]); + if ((stringPtr.CompareF(entry->Entry().iDescription) == 0) || + (stringPtr.CompareF(entry->Entry().iDetails) == 0)) + { + found = ETrue; + break; + } + } + + TMsvId entryId = KMsvGlobalInBoxIndexEntryId; + if (found) + entryId = entry->Entry().Id(); + else + User::Leave(KErrNotFound); + + aSmsSettings.SetClass2Folder(entryId); + + CleanupStack::PopAndDestroy(3, session); // selection, entry, session + } + + //Last Segment Delivery Report + if(scriptFileParser->GetFieldAsString(KLastSegmentDeliveryReport, stringPtr) == KErrNone) + { + if (stringPtr.CompareF(_L("NO")) == 0) + { + aSmsSettings.SetLastSegmentDeliveryReport(EFalse); + } + else if (stringPtr.CompareF(_L("YES")) == 0) + { + aSmsSettings.SetLastSegmentDeliveryReport(ETrue); + } + } + + CleanupStack::PopAndDestroy(scriptFileParser); + } + + + + +TInt CMtfTestActionUtilsSmsScripts::SetSmsHeaderInfoFromConfigurationFileL(CMtfTestCase& aTestCase, const TDesC& aSettingsFile, CSmsHeader& aSmsHeader) + { + CMtfTestActionUtilsConfigFileParser* scriptFileParser = CMtfTestActionUtilsConfigFileParser::NewL(aSettingsFile); + CleanupStack::PushL(scriptFileParser); + + // Recipient Number: If the recipient number is not present in the file, Leave. + TPtrC stringPtr; + User::LeaveIfError(scriptFileParser->GetFieldAsString(KRecipient,stringPtr)); + + CSmsNumber* recipientNumber = CSmsNumber::NewL(); + CleanupStack::PushL(recipientNumber); + recipientNumber->SetAddressL(stringPtr); + aSmsHeader.Recipients().AppendL(recipientNumber); + + //Bio UId Type + if((scriptFileParser->GetFieldAsString(KBioUId,stringPtr)) == KErrNone) + { + TBioMsgIdType bioIdType = ObtainValueParameterL(aTestCase, stringPtr); + aSmsHeader.SetBioMsgIdType(bioIdType); + } + else + { + aSmsHeader.SetBioMsgIdType(); //Sets the message's BIO message type identifier as EBioMsgIdNbs + } + + CleanupStack::Pop(2); + return KErrNone; + } + +TInt CMtfTestActionUtilsSmsScripts::GetSmsMessageBodyL(const TDesC& aSettingsFile, TPtrC& aMessageBody) + { + CMtfTestActionUtilsConfigFileParser* scriptFileParser = CMtfTestActionUtilsConfigFileParser::NewL(aSettingsFile); + CleanupStack::PushL(scriptFileParser); + + // Check if SMS message body is specified in the data file, if not leave + TInt returnValue; + returnValue = scriptFileParser->GetFieldAsString(KMessageBody, aMessageBody); + CleanupStack::Pop(scriptFileParser); + + return returnValue; + }