messagingfw/msgtestfw/TestActionUtils/src/CMtfTestActionUtilsSmsScripts.cpp
changeset 62 db3f5fa34ec7
parent 0 8e480a14352b
--- /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 <smutset.h>
+#include <msvapi.h>
+#include <smuthdr.h>
+#include <e32std.h>
+#include <txtfmlyr.h>
+#include <txtrich.h>
+
+#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<CSmsSettings::TMobileSmsBearer>(aTestCase, stringPtr);
+		aSmsSettings.SetSmsBearer(smsBearer);
+		}
+
+	// Encoding
+	if(scriptFileParser->GetFieldAsString(KScriptItemEncoding, stringPtr) == KErrNone)
+		{
+		TSmsDataCodingScheme::TSmsAlphabet characterSet = ObtainValueParameterL<TSmsDataCodingScheme::TSmsAlphabet>(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<TSmsDelivery>(aTestCase, stringPtr);
+		aSmsSettings.SetDelivery(delivery);
+		}
+	
+	// Status Report Handling
+	if(scriptFileParser->GetFieldAsString(KScriptItemStatusReportHandling, stringPtr) == KErrNone)
+		{
+		CSmsSettings::TSmsReportHandling statusReportHandling = ObtainValueParameterL<CSmsSettings::TSmsReportHandling>(aTestCase, stringPtr);
+		aSmsSettings.SetStatusReportHandling(statusReportHandling);
+		}
+
+	// Special Message Handling
+	if(scriptFileParser->GetFieldAsString(KScriptItemSpecialMessageHandling, stringPtr) == KErrNone)
+		{
+		CSmsSettings::TSmsReportHandling specialMessageHandling = ObtainValueParameterL<CSmsSettings::TSmsReportHandling>(aTestCase, stringPtr);
+		aSmsSettings.SetSpecialMessageHandling(specialMessageHandling);
+		}
+
+	// Commdb action
+	if(scriptFileParser->GetFieldAsString(KScriptItemSmsCommdbAction, stringPtr) == KErrNone)
+		{
+		CSmsSettings::TSmsSettingsCommDbAction commdbAction = ObtainValueParameterL<CSmsSettings::TSmsSettingsCommDbAction>(aTestCase, stringPtr);
+		aSmsSettings.SetCommDbAction(commdbAction);
+		}
+		
+	// Sms Bearer Action
+	if(scriptFileParser->GetFieldAsString(KScriptItemSmsBearerAction, stringPtr) == KErrNone)
+		{
+		CSmsSettings::TSmsSettingsCommDbAction smsBearerAction = ObtainValueParameterL<CSmsSettings::TSmsSettingsCommDbAction>(aTestCase, stringPtr);
+		aSmsSettings.SetSmsBearerAction(smsBearerAction);
+		}
+
+	// Message Conversion
+	if(scriptFileParser->GetFieldAsString(KScriptItemSmsMessageConversion, stringPtr) == KErrNone)
+		{
+		TSmsPIDConversion messageConversion = ObtainValueParameterL<TSmsPIDConversion>(aTestCase, stringPtr);
+		aSmsSettings.SetMessageConversion(messageConversion);
+		}
+	
+	// Vailidity Period Format
+	if(scriptFileParser->GetFieldAsString(KScriptItemSmsValidityPeriodFormat, stringPtr) == KErrNone)
+		{
+		TSmsFirstOctet::TSmsValidityPeriodFormat valPeriodFormat = ObtainValueParameterL<TSmsFirstOctet::TSmsValidityPeriodFormat>(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; i<count; i++) 
+			{	
+			entry->SetEntryL((*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<TBioMsgIdType>(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;
+	}