smsprotocols/smsstack/smsprot/Test/TE_Smsprt/Te_SmsTestSteps.cpp
changeset 20 244d7c5f118e
parent 19 1f776524b15c
child 23 6b1d113cdff3
--- a/smsprotocols/smsstack/smsprot/Test/TE_Smsprt/Te_SmsTestSteps.cpp	Fri Mar 19 09:55:57 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1766 +0,0 @@
-// Copyright (c) 2006-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:
-// This file contains utility functions used by the SMS test steps.  The actual SMS test steps are 
-// declared in Te_SMSTestSteps.h and are defined in their own file with appropriate name.
-// These utilities proved quite extensive functionality.  If a SMS test step you need is not 
-// available, before creating a new one, check through these functions;  You might find something
-// you can simply plug into your new test step.
-// 
-//
-
-/**
- @file
-*/
-
-#include "Te_SmsTestSteps.h"
-#include "TE_smsprtbase.h"
-#include <sacls.h>
-#include <smspver.h>
-
-
-#if defined (__WINS__)
-#define PDD_NAME _L("ECDRV")
-#define PDD_NAME2 _L("ECDRV")
-#define LDD_NAME _L("ECOMM")
-#else
-#define PDD_NAME _L("EUART1")
-#define LDD_NAME _L("ECOMM")
-#endif
-
-// Here are the section names
-_LIT8(KSetupTelNumbers,           "Defaults");
-
-// Here are the item names
-_LIT8(KServiceCenter,               "ServiceCenter");
-_LIT8(KTelefoneNumber,              "TelephoneNumber");
-
-// Location of directory for reserving disk space
-_LIT(KTempDiskSpaceDirName, "C:\\sms\\temp\\");
-
-// Location and name of the RSC file.
-_LIT(KSMSUResourceDir, "C:\\private\\101f7989\\sms\\");
-_LIT(KSMSUResourceFile, "C:\\private\\101f7989\\sms\\smsu.rsc");
-
-
-
-CSMSTestSteps::~CSMSTestSteps()
-{
-	iFs.Close();			
-}
-
-
-/**
-	Creates the file server session and marks the heap
-*/
-TVerdict CSMSTestSteps::doTestStepPreambleL()
-	{
-	RDebug::Print(_L("%S"), &TestStepName());
-	
-	User::LeaveIfError(iFs.Connect());	
-	
-	__UHEAP_MARK;
-			
-	return TestStepResult();
-	}
-
-/**
-	Closes file server session and unmarks the heap	
-*/
-TVerdict CSMSTestSteps::doTestStepPostambleL()
-	{
-		
-	__UHEAP_MARKEND;
-	
-	iFs.Close();	
-
-	return TestStepResult();
-	}
-	
-void CSMSTestSteps::ParseSettingsFromFileL()
-	{
-	CTestConfig* configFile = CTestConfig::NewLC(iFs,KGmsSmsConfigFileDir,KGmsSmsConfigFileName);
-	const CTestConfigSection* cfgFile = configFile->Section(KSetupTelNumbers);
-	if (cfgFile == NULL)
-		{
-		User::Leave(KErrNotFound);
-		}
-
-	const CTestConfigItem* item = cfgFile->Item(KServiceCenter,0);
-	if (item == NULL)
-		{
-		User::Leave(KErrNotFound);
-		}
-
-	iServiceCenterNumber.Copy(item->Value());
-
-	item = cfgFile->Item(KTelefoneNumber,0);
-	if (item == NULL)
-		{
-		User::Leave(KErrNotFound);
-		}
-
-	iTelephoneNumber.Copy(item->Value());
-
-	// beginning of the destruction
-	CleanupStack::PopAndDestroy(configFile);//configFile
-	}
-
-void CSMSTestSteps::SetSimTSYTestNumberL(TInt aTestNumber)
-/**
-	Set the SIM TSY Test number 
-	@param aTestNumber is the test number in SIM TSY config file
-*/
-	{	
-	INFO_PRINTF2(_L("Setting SIMTSY test number to %d"), aTestNumber);
-
-	//
-	// Set the property...
-	//
-	User::LeaveIfError(RProperty::Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,aTestNumber));
-
-	//
-	// Check the property is set...
-	//
-	TInt  testNumberCheck;
-
-	User::LeaveIfError(RProperty::Get(KUidPSSimTsyCategory,KPSSimTsyTestNumber,testNumberCheck));
-	if (aTestNumber != testNumberCheck)
-		{
-	    INFO_PRINTF3(_L("Test number property set to %d, but value returned is %d"),aTestNumber,testNumberCheck);
-		User::Leave(KErrNotFound);
-		}
-	}
-//-----------------------------------------------------------------------------
-void CSMSTestSteps::WaitForInitializeL()
-/**
- *  Initialize the phone for the tsy. IF this is not called, message sends will complete with KErrNotReady
- */
-	{
-#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
-	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
-#else
-	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
-#endif
-	CleanupStack::PushL(db);
-
-	TName tsy;
-	TUint32 modemId = 0;
-
-	CMDBField<TUint32>* globalSettingsField = new(ELeave) CMDBField<TUint32>(KCDTIdModemPhoneServicesSMS);
-	CleanupStack::PushL(globalSettingsField);
-	globalSettingsField->SetRecordId(1);
-	globalSettingsField->LoadL(*db);
-	modemId = *globalSettingsField;
-	CleanupStack::PopAndDestroy(globalSettingsField);
-
-	CMDBField<TDesC>* tsyField = new(ELeave) CMDBField<TDesC>(KCDTIdTsyName);
-	CleanupStack::PushL(tsyField);
-	tsyField->SetRecordId(modemId);
-	tsyField->SetMaxLengthL(KMaxTextLength);
-	tsyField->LoadL(*db);
-	tsy = *tsyField;
-	CleanupStack::PopAndDestroy(tsyField);
-
-	CleanupStack::PopAndDestroy(db);
-
-	INFO_PRINTF2(_L("Using TSY \"%S\"Loading RTelServer..."), &tsy);
-
-	RTelServer server;
-	User::LeaveIfError(server.Connect());
-	CleanupClosePushL(server);
-	User::LeaveIfError(server.LoadPhoneModule(tsy));
-
-	// Find the phone corresponding to this TSY and open a number of handles on it
-	TInt numPhones;
-	User::LeaveIfError(server.EnumeratePhones(numPhones));
-	RPhone phone;
-	TBool found=EFalse;
-
-	while (numPhones--)
-		{
-		TName phoneTsy;
-		User::LeaveIfError(server.GetTsyName(numPhones,phoneTsy));
-		if (phoneTsy.CompareF(tsy)==KErrNone)
-			{
-			INFO_PRINTF1(_L("Found RPhone..."));
-			found = ETrue;
-			RTelServer::TPhoneInfo info;
-			User::LeaveIfError(server.GetPhoneInfo(numPhones,info));
-			User::LeaveIfError(phone.Open(server,info.iName));
-			CleanupClosePushL(phone);
-			INFO_PRINTF1(_L("Initializing..."));
-			const TInt err = phone.Initialise();
-			TTimeIntervalMicroSeconds32 InitPause=9000000;  //Required Pause to Allow SMSStack to Complete its Async Init
-			User::After(InitPause);							//call to the TSY and finish its StartUp.
-			INFO_PRINTF2(_L("Completed Initialize [err=%d]"), err);
-			User::LeaveIfError(err);
-			CleanupStack::PopAndDestroy(&phone);
-			break;
-			}
-		}
-
-	TEST(found);
-	CleanupStack::PopAndDestroy(&server);
-	}
-
-
-
-void CSMSTestSteps::PrepareRegTestLC(RSocketServ& aSocketServer, TInt aTestNumber)
-/**
- *  Run a specified test.
- *  The test number is passed via property KUidPSSimTsyCategory. This will notify the SIM tsy
- *  SIM tsy uses test number to parse correct script from config.txt
- *  @param aTestNumber The test number corresponding the test case
- */
-	{
-	//
-	// Set the SIM.TSY test number...
-	//
-	RProperty testNumberProperty;
-	User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber));
-	CleanupClosePushL(testNumberProperty);
-
-	TRequestStatus status;
-	testNumberProperty.Subscribe(status);
-	INFO_PRINTF2(_L("Setting Sim.Tsy test number to %d"), aTestNumber);
-	User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,aTestNumber));
-	User::WaitForRequest(status);
-	TEST(status.Int() == KErrNone);
-
-	TInt testNumberCheck;
-	User::LeaveIfError(testNumberProperty.Get(testNumberCheck));
-	if (aTestNumber != testNumberCheck)
-		{
-	    INFO_PRINTF3(_L("Test number property set to [%d], but value returned is [%d]"),aTestNumber,testNumberCheck);
-		User::Leave(KErrNotFound);
-		}
-
-	CleanupStack::PopAndDestroy(&testNumberProperty);
-
-	//
-	// Connect to the Socket Server...
-	//
-	TInt  ret = aSocketServer.Connect(KSocketMessageSlots);
-    TESTL(ret == KErrNone);
-	CleanupClosePushL(aSocketServer);
-
-	//
-	// Delete segmentation and reassembly store files before the test...
-	//
-	_LIT(KReassemblyStoreName,"C:\\Private\\101F7989\\sms\\smsreast.dat");
-	_LIT(KSegmentationStoreName,"C:\\Private\\101F7989\\sms\\smssegst.dat");
-	_LIT(KWapReassemblyStoreName,"C:\\Private\\101F7989\\sms\\wapreast.dat");
-
-	iFs.Delete(KWapReassemblyStoreName);
-	iFs.Delete(KReassemblyStoreName);
-	iFs.Delete(KSegmentationStoreName);
-
-	}
-	
-CSmsMessage* CSMSTestSteps::CreateSmsMessageL(const TDesC& aDes, TSmsDataCodingScheme::TSmsAlphabet aAlphabet, CSmsPDU::TSmsPDUType aType)
-/**
- *  Create a uninitialised SMS message
- *  @param aDes contains text that will be inserted to the pdu
- *  @param aAlphabet describes the alphabet of the pdu
- *  @return CSmsMessage* :Pointer to the created CSmsMessage object.
- */
-	{
-	CSmsBuffer* buffer=CSmsBuffer::NewL();
-	CSmsMessage* smsMessage=CSmsMessage::NewL(iFs, aType, buffer);
-	CleanupStack::PushL(smsMessage);
-
-	TSmsUserDataSettings smsSettings;
-	smsSettings.SetAlphabet(aAlphabet);
-	smsSettings.SetTextCompressed(EFalse);
-	smsMessage->SetUserDataSettingsL(smsSettings);
-
-	smsMessage->SetToFromAddressL(iTelephoneNumber);
-	smsMessage->SmsPDU().SetServiceCenterAddressL(iServiceCenterNumber);
-	buffer->InsertL(0,aDes);
-	CleanupStack::Pop(smsMessage);
-	return smsMessage;
-	}
-
-CSmsMessage* CSMSTestSteps::CreateSmsWithStatusReportReqL(const TDesC& aDes, TSmsDataCodingScheme::TSmsAlphabet aAlphabet)
-/**
- *  Create a uninitialised SMS message with Status Report request
- *  @param aDes contains text that will be inserted to the pdu
- *  @param aAlphabet describes the alphabet of the pdu
- *  @return CSmsMessage* :Pointer to the created CSmsMessage object.
- */
-	{
-	CSmsMessage* smsMessage=CreateSmsMessageL(aDes, aAlphabet);
-
-	CleanupStack::PushL(smsMessage);
-
-	//Set Status report request
-	CSmsSubmit& submitPdu=(CSmsSubmit&)smsMessage->SmsPDU();
-	submitPdu.SetStatusReportRequest(ETrue);
-
-	CleanupStack::Pop(smsMessage);
-	return smsMessage;
-	}
-
-CSmsMessage* CSMSTestSteps::RecvSmsL(RSocket& aSocket, TInt aIoctl)
-/**
- *  Receive an Sms
- *  @param aSocket is used to stream the sms message from the socket server
- *  @return CSmsMessage* :Sms message from Sms stack
- *  @leave Leaves if streaming the message from the socket server doesn't succeed
- */
-	{
-	CSmsBuffer* buffer=CSmsBuffer::NewL();
-	CSmsMessage* smsMessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsSubmit,buffer);
-	CleanupStack::PushL(smsMessage);
-
-	RSmsSocketReadStream readstream(aSocket);
-	TRAPD(ret,readstream >> *smsMessage);
-	
-	INFO_PRINTF2(_L("Return from streaming message over socket %d"),ret );
-	
-	TPckgBuf<TUint> sbuf;
-	TRequestStatus status;
-
-	if(ret==KErrNone)
-		{
-		aSocket.Ioctl(aIoctl, status, &sbuf, KSolSmsProv);
-		User::WaitForRequest(status);
-		CleanupStack::Pop(smsMessage);	
-		}
-	//An error has occured, No message has been received, so return a NULL
-	else
-		{
-		aSocket.Ioctl(KIoctlReadMessageFailed, status, &sbuf, KSolSmsProv);
-		User::WaitForRequest(status);
-		TEST(status.Int() == KErrNone);
-		User::Leave(ret);
-		}	
-	return smsMessage;	
-	}
-	
-	
-	
-
-CSmsMessage* CSMSTestSteps::RecvSmsFailedL(RSocket& aSocket)
-/**
- *  Receive an Sms, first nack the receive several times before succeeding
- *  @param aSocket is used to stream the sms message from the socket server
- *  @return CSmsMessage* :Sms message from Sms stack
- *  @leave Leaves if streaming the message from the socket server doesn't succeed
- *  @leave Leaves if nack of receiving is completed with error code
- *  @leave Leaves if ack of receiving is completed with error code
- */
-	{
-	CSmsBuffer* buffer=CSmsBuffer::NewL();
-	CSmsMessage* smsMessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsSubmit,buffer);
-	CleanupStack::PushL(smsMessage);
-	RSmsSocketReadStream readstream(aSocket);
-
-	TPckgBuf<TUint> sbuf;
-	TRequestStatus status;
-
-	for(TInt i=0; i<10; i++)
-		{
-		TRAPD(ret,readstream >> *smsMessage);
-		TEST(ret == KErrNone);
-		aSocket.Ioctl(KIoctlReadMessageFailed, status, &sbuf, KSolSmsProv);
-		User::WaitForRequest(status);
-		TEST(status.Int() == KErrNone);
-		}
-
-	TRAPD(ret,readstream >> *smsMessage);
-	TEST(ret == KErrNone);
-	aSocket.Ioctl(KIoctlReadMessageSucceeded, status, NULL, KSolSmsProv);
-	User::WaitForRequest(status);
-	TEST(status.Int() == KErrNone);
-
-	CleanupStack::Pop(smsMessage);
-	return smsMessage;
-	}
-
-void CSMSTestSteps::SendSmsL(const CSmsMessage* aSms, RSocket& aSocket)
-/**
- *  Stream aSms out to the socket server
- *  @param aSms contains the sms tpdu that will be streamed to the sms stack
- *  @param aSocket is used to stream the aSms to the sms stack
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if sending is completed with error code
- */
-	{
-	TBool tryAgain = ETrue;
-	TInt sendTry (0);
-	TRequestStatus status = KErrNone;
-
-	while (tryAgain && sendTry < 3)
-		{
-		RSmsSocketWriteStream writestream(aSocket);
-		TRAPD(ret,writestream << *aSms);
-
-		TRAP(ret,writestream.CommitL());
-
-		TPckgBuf<TUint> sbuf;
-		aSocket.Ioctl(KIoctlSendSmsMessage,status,&sbuf, KSolSmsProv);
-		User::WaitForRequest(status);
-		INFO_PRINTF2(_L("SendSmsL - sendSmsMessage returned %d"), status.Int());
-		if (status.Int() != KErrNone)
-			{
-			tryAgain = ETrue;
-			INFO_PRINTF1(_L("Try again... "));
-			sendTry++;
-			}
-		else tryAgain = EFalse;
-		}
-
-	TEST(status.Int() == KErrNone);
-	PrintMessageL(aSms);
-	if (status.Int() != KErrNone)
-		{
-		User::Leave(status.Int());
-		}
-	}
-
-void CSMSTestSteps::SendSmsCancelL(CSmsMessage* aSms, RSocket& aSocket1, RSocket& aSocket2)
-/**
- *  Stream Sms out to the socket server by two RSmsSocketWriteStream object.
- *  The first request is canceled and then the second request is completed with error code.
- *  @param aSms contains the sms tpdu that will be streamed to the sms stack
- *  @param aSocket1 The socket used with message that will be canceled
- *  @param aSocket2 The socket used with message that will be completed with error code
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if sending is completed with KErrNone
- */
-	{
-	RSmsSocketWriteStream writestream(aSocket1);
-	TRAPD(ret,writestream << *aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	TPckgBuf<TUint> sbuf;
-	TRequestStatus status1,status2;
-
-	//stream to socket2
-	RSmsSocketWriteStream writestream2(aSocket2);
-	TRAP(ret,writestream2 << *aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream2.CommitL());
-	TEST(ret == KErrNone);
-
-	aSocket1.Ioctl(KIoctlSendSmsMessage,status1,&sbuf, KSolSmsProv);
-	aSocket2.Ioctl(KIoctlSendSmsMessage,status2,&sbuf, KSolSmsProv);
-
-	User::After(2000000);
-
-	// Test cancel first
-	aSocket1.CancelIoctl();
-	User::WaitForRequest(status1);
-	TEST(status1.Int()==KErrCancel);
-
-	User::After(50000);
-
-
-	User::WaitForRequest(status2);
-
-	INFO_PRINTF2(_L("SendSmsL - sendSmsMessage returned %d"),status2.Int());
-	PrintMessageL(aSms);
-
-	//Ensure the request is completed with error code ;)
-	TEST(status2.Int() != KErrNone);
-	INFO_PRINTF2(_L("Sending failed! %d"), status2.Int());
-	}
-
-TInt CSMSTestSteps::SendSmsErrorL(CSmsMessage* aSms, RSocket& aSocket)
-/**
- *  Stream aSms out to the socket server. Sending is completed with error code.
- *  @param aSms contains the sms tpdu that will be streamed to the sms stack
- *  @param aSocket is used to stream the aSms to the sms stack
- *  @return error code
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if sending is completed with KErrNone
- */
-	{
-	RSmsSocketWriteStream writestream(aSocket);
-	TRAPD(ret,writestream << *aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	TPckgBuf<TUint> sbuf;
-	TRequestStatus status;
-
-  	User::After(50000);
-	// test cancel first
-	aSocket.Ioctl(KIoctlSendSmsMessage,status,&sbuf, KSolSmsProv);
-	aSocket.CancelIoctl();
-	User::WaitForRequest(status);
-	TEST(status.Int()==KErrCancel);
-
-	//Now send again, completed with error
-	TRAP(ret,writestream << *aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	aSocket.Ioctl(KIoctlSendSmsMessage,status,&sbuf, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("SendSmsL - sendSmsMessage returned %d"), status.Int());
-	PrintMessageL(aSms);
-	INFO_PRINTF2(_L("Sending failed! %d"), status.Int());
-	TEST(status.Int() != KErrNone);
-	return status.Int();
-	}
-
-void CSMSTestSteps::SendCommandSmsL(CSmsMessage* aSms, RSocket& aSocket)
-/**
- *  Stream command message out to the socket server and wait for the return status
- *  @param aSms contains the sms tpdu that will be streamed to the sms stack
- *  @param aSocket is used to stream the aSms to the sms stack
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if sending is completed with error code
- */
-	{
-	RSmsSocketWriteStream writestream(aSocket);
-	TRAPD(ret,writestream << *aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	TRequestStatus status;
-	TPckgBuf<TUint> sbuf;
-	aSocket.Ioctl(KIoctlSendSmsMessage,status,&sbuf,KSolSmsProv);
-
-	User::WaitForRequest(status);
-
-	INFO_PRINTF2(_L("SendCommandSmsL, sendSms returned %d"), status.Int());
-	User::After(1000000);
-	TEST(status.Int() == KErrNone);
-
-	}
-
-void CSMSTestSteps::SendAndRecvTestMessageL(const TTestCase& aTestCase, RSocket& aSocket)
-/**
- *  Send a test message. This method is used to send and receive different DCS type messages
- *  @param aTestCase has information about the used test message, e.g. message data and DCS
- *  @leave Leaves if any of the leaving functions used at this function leaves
- */
-	{
-	SendTestMessageL(aTestCase, aSocket);
-
-	WaitForRecvL(aSocket);
-	CSmsMessage* smsMessage = RecvSmsL(aSocket);
-	CleanupStack::PushL(smsMessage);
-	TestMessageContentsL(smsMessage,aTestCase);
-	CleanupStack::PopAndDestroy(smsMessage);
-	}
-
-void CSMSTestSteps::SendTestMessageL(const TTestCase& aTestCase, RSocket& aSocket)
-/**
- *  Send a test message
- *  Assumes recv is already done.
- *  @param aTestCase has information about the used test message, e.g. message data and DCS
- *  @leave Leaves if any of the leaving functions used at this function leaves
- */
-	{
-	CSmsMessage* smsMessage = CreateSmsMessageL(aTestCase.iMsg, TSmsDataCodingScheme::ESmsAlphabet7Bit);
-	CleanupStack::PushL(smsMessage);
-
-	CSmsPDU& pdu = smsMessage->SmsPDU();
-	CSmsUserData& userData = pdu.UserData();
-
-	if (aTestCase.iMatchType == ESmsAddrMatchIEI)
-		userData.AddInformationElementL(aTestCase.iIdentifierMatch,_L8("98"));
-
-	if (aTestCase.iTestSmsClass)
-		{
-		pdu.SetBits7To4(TSmsDataCodingScheme::ESmsDCSTextUncompressedWithClassInfo);
-		pdu.SetClass(ETrue,aTestCase.iSmsClass);
-		}
-
-	if (aTestCase.iTestValidityPeriod && pdu.Type()==CSmsPDU::ESmsSubmit)
-		{
-		CSmsSubmit* submitPdu = static_cast<CSmsSubmit*>(&pdu);
-		submitPdu->SetValidityPeriod(aTestCase.iValidityPeriod);
-		}
-
-	if (aTestCase.iTestIndicators && pdu.Type()==CSmsPDU::ESmsSubmit)
-		{
-		SetIndicatorL(aTestCase, smsMessage);
-		}
-
-	SendSmsL(smsMessage, aSocket);
-	CleanupStack::PopAndDestroy(smsMessage);
-	}
-
-void CSMSTestSteps::SendSmsDontCheckReturnValueL(CSmsMessage* aSms, RSocket& aSocket)
-/**
- *  Stream aSms out to the socket server and don't check return value.
- *  @param aSms contains the sms tpdu that will be streamed to the sms stack
- *  @param aSocket is used to stream the aSms to the sms stack
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if sending is completed with KErrNone
- */
-	{
-	RSmsSocketWriteStream writestream(aSocket);
-	writestream << *aSms;
-	writestream.CommitL();
-
-	TPckgBuf<TUint> sbuf;
-	TRequestStatus status;
-	aSocket.Ioctl(KIoctlSendSmsMessage,status,&sbuf, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("Send SMS message returned %d"), status.Int());
-	if(status.Int() != KErrNone)
-		{
-		User::Leave(status.Int());
-		}
-	}
-
-void CSMSTestSteps::SendAndRecvSms7BitL(const TDesC& aDes, RSocket& aSocket)
-/**
- *  Send and receive one 7bit sms
- *  @param aDes contains the text to be send
- *  @leave Leaves if DoSendAndRecvSmsL leaves
- */
-	{
-	DoSendAndRecvSmsL(aDes,TSmsDataCodingScheme::ESmsAlphabet7Bit, aSocket);
-	}
-
-void CSMSTestSteps::DoSendAndRecvSmsL(const TDesC& aDes, TSmsDataCodingScheme::TSmsAlphabet aAlphabet, RSocket& aSocket)
-/**
- *  Send and recv one sms,
- *  then check that the sent message corresponds with the received message
- *  @param aDes contains the text that will be inserted to the pdu at CreateSmsMessageL
- *  @param aAlphabet describes the alphabet of the pdu that will be created at CreateSmsMessageL
- *  @leave Leaves if any of the leaving functions used at this function leaves
- */
-	{
-	CSmsMessage* smsMessage=CreateSmsMessageL(aDes, aAlphabet);
-	CleanupStack::PushL(smsMessage);
-	SendSmsL(smsMessage, aSocket);
-	CleanupStack::PopAndDestroy(smsMessage); //destroyed because created again in RecvSmsL
-
-	INFO_PRINTF1(_L("waiting for incoming SMS...") );
-	WaitForRecvL( aSocket);
-	smsMessage = RecvSmsL( aSocket);
-
-	INFO_PRINTF1(_L("incoming SMS") );
-
-	CleanupStack::PushL(smsMessage);
-	TestSmsContentsL(smsMessage,aDes);
-
-	User::After(1000000);
-
-	CleanupStack::PopAndDestroy(smsMessage);
-	}
-
-void CSMSTestSteps::PrintMessageL(const CSmsMessage* aSms)
-/**
- *  Print the content of SMS to the console
- */
-	{
-	CSmsBuffer& smsbuffer = (CSmsBuffer&)aSms->Buffer();
-	const TInt len = smsbuffer.Length();
-	HBufC* hbuf = HBufC::NewL(len);
-	TPtr ptr = hbuf->Des();
-	smsbuffer.Extract(ptr,0,len);
-
-	INFO_PRINTF1(_L("SMS contains..."));
-
-	for (TInt j = 0; j < len; j++)
-		{
-		if (ptr[j] < 0x20  ||  ptr[j] > 0xFF)
-			{
-			ptr[j] = 0x007F;
-			}
-		}
-   	INFO_PRINTF2(_L("%S"), &ptr);
-
-	delete hbuf;
-	}
-
-void CSMSTestSteps::PrintSmsMessage(const CSmsMessage& aMessage)
-	{
-	TBuf<255> buf;
-	aMessage.Buffer().Extract(buf, 0, Min(aMessage.Buffer().Length(), 255));
-	INFO_PRINTF2(_L("%S"), &buf);
-	}
-
-TSmsStatus::TSmsStatusValue CSMSTestSteps::RecvStatusReportL(TSmsServiceCenterAddress& aRecipientNumber, RSocket& aSocket)
-/**
- * Receive a Status report
- * @param aRecipientNumber The supposed recipient number
- * @param aSocket is used to stream the sms message from the socket server
- */
-	{
-	//Receive SMS
-	INFO_PRINTF1(_L("waiting for incoming status report...") );
-	WaitForRecvL(aSocket);
-	CSmsMessage* smsMessage = RecvSmsL(aSocket);
-
-	INFO_PRINTF1(_L("incoming SMS") );
-
-	//Check the status report
-	CleanupStack::PushL(smsMessage);
-	TBool isSR = (smsMessage->Type()==CSmsPDU::ESmsStatusReport);
-
-	if (isSR)
-		{
-		INFO_PRINTF1(_L("Received status report"));
-		TSmsServiceCenterAddress telephoneNumber=smsMessage->ToFromAddress();
-		TEST(telephoneNumber==aRecipientNumber);
-		INFO_PRINTF2(_L("Message delivered to %S"), &telephoneNumber);
-		}
-	else
-		{
-		INFO_PRINTF1(_L("Received SMS is NOT a Status report!"));
-		}
-
-	TEST(isSR==1);
-	
-	//Get the status report
-	CSmsStatusReport& statusReport = static_cast<CSmsStatusReport&>(smsMessage->SmsPDU()); 
-	TSmsStatus::TSmsStatusValue status = statusReport.Status();
-	
-	CleanupStack::PopAndDestroy(smsMessage);
-	
-	return status;
-	}
-
-void CSMSTestSteps::WaitForRecvL(RSocket& aSocket)
-/**
- *  Wait for an Sms to be received
- *  @param aSocket The status is return to this socket
- *  @leave Leaves if receiving is completed with error code
- */
-	{
-	TPckgBuf<TUint> sbuf;
-	sbuf()=KSockSelectRead;
-	TRequestStatus status;
-	aSocket.Ioctl(KIOctlSelect,status,&sbuf,KSOLSocket);
-	User::WaitForRequest(status);
-	TEST(status.Int() == KErrNone);
-	}
-
-void CSMSTestSteps::TestSmsContentsL(CSmsMessage* aSms, const TDesC& aDes, TBool aIgnorePrintOutput)
-/**
- *  Check that aSms contains text that matches to aDes
- *  @param aSms SMS message that has been come from SMS stack
- *  @param aDes SMS message's text that is defined at client side
- *  @leave Leaves if aSms doesn't match to aDes
- */
-	{
-	CSmsBufferBase& smsBuffer=aSms->Buffer();
-	TInt bufLen=smsBuffer.Length();
-	
-	INFO_PRINTF2(_L("Length of buffer is : %d"),bufLen);
-		
-	HBufC* textBuf=HBufC::NewL(bufLen);
-	CleanupStack::PushL(textBuf);
-	TPtr textPtr(textBuf->Des());
-	smsBuffer.Extract(textPtr,0,bufLen);
-
-	INFO_PRINTF1(_L("Comparing messages..."));
-	TInt  compareResult = textPtr.Compare(aDes);
-
-	if (!aIgnorePrintOutput)
-		{
-		TInt  bufLen2 = aDes.Length();
-		HBufC*  textBuf2 = HBufC::NewL(aDes.Length());
-		CleanupStack::PushL(textBuf2);
-		TPtr textPtr2(textBuf2->Des());
-		TInt  index;
-		
-		for (index = 0;  index < bufLen;  index++)
-			{
-			if (textPtr[index] < 0x20  ||  textPtr[index] > 0xff)
-				{
-				textPtr[index] = 0x007f;
-				}
-			}
-		INFO_PRINTF2(_L("%S"), &textPtr);
-
-		INFO_PRINTF1(_L("with expected"));
-
-		textPtr2.Copy(aDes);
-		for (index = 0;  index < bufLen2;  index++)
-			{
-			if (textPtr2[index] < 0x20  ||  textPtr2[index] > 0xff)
-				{
-				textPtr2[index] = 0x007f;
-				}
-			}
-		INFO_PRINTF2(_L("%S"), &textPtr2);
-
-		CleanupStack::PopAndDestroy(textBuf2);
-		}
-		
-	TEST(compareResult == 0);
-	if (compareResult != 0)
-		{
-		INFO_PRINTF1(_L("No Match!"));	
-		}
-	else
-		{
-		INFO_PRINTF1(_L("Incoming matches outgoing!"));	
-		}
-	
-	CleanupStack::PopAndDestroy(textBuf);
-	}
-
-void CSMSTestSteps::TestMessageContentsL(CSmsMessage* aSms, const TTestCase& aTestCase)
-/**
- *  Check the sms matches the expected test result
- *  @param aSms has the message to be tested with aTestCase.iMsg
- *  @param aTestCase has information about the used test message, e.g. message data and DCS
- *  @leave Leaves if TSmsClass isn't defined at the pdu
- *  @leave Leaves if class of pdu doesn't match to supposed class (aTestCase.iSmsClass)
- */
-	{
-	TestSmsContentsL(aSms,aTestCase.iMsg);
-	CSmsPDU& pdu = aSms->SmsPDU();
-
-	if (aTestCase.iTestSmsClass)
-		{
-		TSmsDataCodingScheme::TSmsClass smsClass;
-		TBool isDefined = pdu.Class(smsClass);
-		TEST(isDefined);
-		TEST(smsClass == aTestCase.iSmsClass);
-		}
-	if (aTestCase.iTestIndicators)
-		{
-		TEST(pdu.Bits7To4() == aTestCase.iBits7To4);
-		TEST(pdu.IndicationType() == aTestCase.iIndicationType);
-		TEST(pdu.IndicationState() == aTestCase.iIndicationState);
-		}
-
-	}
-
-void CSMSTestSteps::WriteSmsToSimL(CSmsMessage& aSms, RSocket& aSocket)
-/**
- *  This method stores SMS messages to the SMS storage.
- *  @param aSms SMS message that will be stored
- *  @param aSocket Used to stream SMS message to the sms stack
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if store request is completed with error code
- */
-	{
-	INFO_PRINTF1(_L("Write message"));
-
-	TRequestStatus status;
-
-	RSmsSocketWriteStream writestream(aSocket);
-	TRAPD(ret,writestream << aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	aSocket.Ioctl(KIoctlWriteSmsMessage,status,NULL,KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("WriteSmsToSimL - returned %d"), status.Int());
-	}
-
-void CSMSTestSteps::WriteSmsLeaveIfErrorL(const CSmsMessage& aSms, RSocket& aSocket)
-/**
- *  This method stores SMS messages to the SMS storage.
- *  @param aSms SMS message that will be stored
- *  @param aSocket Used to stream SMS message to the sms stack
- */
-	{
-	TRequestStatus status;
-	RSmsSocketWriteStream writestream(aSocket);
-	writestream << aSms;
-	writestream.CommitL();
-	aSocket.Ioctl(KIoctlWriteSmsMessage,status,NULL, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("Write SMS message returned %d"), status.Int());
-	if(status.Int() != KErrNone)
-		{
-		User::Leave(status.Int());
-		}
-	}
-
-void CSMSTestSteps::ReadSmsStoreL(RSocket& aSocket, RPointerArray<CSmsMessage>& aMessages)
-/**
- *  This method retrieves SMS messages from SMS storage and print them out.
- *  @param aSocket Used to stream SMS messages from the socket server
- *  @param aMessages Sms messages will be streamed to this array
- *  @leave Leaves if first request is NOT completed with KErrCancel
- *  @leave Leaves if second request is completed with error code
- *  @leave Leaves if streaming the message from the socket server doesn't succeed
- *  @leave Leaves if nack of reading is completed with error code
- *  @leave Leaves if ack of reading is completed with error code
- */
-	{
-	TRequestStatus status;
-	ReadSmsStoreL(aSocket, aMessages, status);
-	}
-
-void CSMSTestSteps::ReadSmsStoreL(RSocket& aSocket, RPointerArray<CSmsMessage>& aMessages, TRequestStatus& aStatus)
-/**
- *  This method retrieves SMS messages from SMS storage and print them out.
- *  @param aSocket Used to stream SMS messages from the socket server
- *  @param aMessages Sms messages will be streamed to this array
- *  @param aStatus Status of request to enumerate messages from store
- *  @leave Leaves if first request is NOT completed with KErrCancel
- *  @leave Leaves if second request is completed with error code
- *  @leave Leaves if streaming the message from the socket server doesn't succeed
- *  @leave Leaves if nack of reading is completed with error code
- *  @leave Leaves if ack of reading is completed with error code
- */
-	{
-	INFO_PRINTF1(_L("Enumerating messages"));
-
-	TPckgBuf<TUint> sbuf;
-	sbuf()=0;
-
-	// test cancel first - due to Lubbock problems canceled out
-	aSocket.Ioctl(KIoctlEnumerateSmsMessages,aStatus,&sbuf, KSolSmsProv);
-	aSocket.CancelIoctl();
-	User::WaitForRequest(aStatus);
-	TEST(aStatus.Int()==KErrCancel);
-
-	User::After(2000000);
-	//Now enumerate messages from store
-	aSocket.Ioctl(KIoctlEnumerateSmsMessages,aStatus,&sbuf, KSolSmsProv);
-	User::WaitForRequest(aStatus);
-	TEST(aStatus.Int() == KErrNone);
-	User::After(2000000);
-	
-	//sbuf() includes the count of messages on Store
-	TInt count = sbuf();
-	INFO_PRINTF2(_L("%d enumerated messages"), count);
-
-	RSmsSocketReadStream readstream(aSocket);
-
-	//Read each message from the stream
-	for(TInt i=0; i< count; i++)
-		{
-		CSmsBuffer* buffer=CSmsBuffer::NewL();
-		CSmsMessage* smsmessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer);
-		CleanupStack::PushL(smsmessage);
-
-		TRAPD(ret,readstream >> *smsmessage);
-		TEST(ret == KErrNone);
-		aSocket.Ioctl(KIoctlReadMessageFailed, aStatus, NULL, KSolSmsProv);
-		User::WaitForRequest(aStatus);
-		TEST(aStatus.Int() == KErrNone);
-
-		TRAP(ret,readstream >> *smsmessage);
-		TEST(ret == KErrNone);
-		aSocket.Ioctl(KIoctlReadMessageSucceeded, aStatus, NULL, KSolSmsProv);
-		User::WaitForRequest(aStatus);
-		TEST(aStatus.Int() == KErrNone);
-
-		Logger().Write(smsmessage->ToFromAddress());
-		INFO_PRINTF1(_L("     "));
-		Logger().Write(smsmessage->ServiceCenterAddress());
-		INFO_PRINTF1(_L(""));
-
-		if(smsmessage->Storage() == CSmsMessage::ESmsSIMStorage)
-			{
-			INFO_PRINTF1(_L("Store: SIM"));
-			}
-		else if (smsmessage->Storage() == CSmsMessage::ESmsPhoneStorage)
-			{
-			INFO_PRINTF1(_L("Store: Phone"));
-			}
-		else if (smsmessage->Storage() == CSmsMessage::ESmsCombinedStorage)
-			{
-			INFO_PRINTF1(_L("Store: Combined"));
-			}
-		else
-			{
-			INFO_PRINTF1(_L("Store: Unknown"));
-			}
-
-		switch (smsmessage->Status())
-			{
-			case RMobileSmsStore::EStoredMessageUnread:
-				INFO_PRINTF1(_L("Status: Unread"));
-				break;
-
-			case RMobileSmsStore::EStoredMessageRead:
-				INFO_PRINTF1(_L("Status: Read"));
-				break;
-
-			case RMobileSmsStore::EStoredMessageUnsent:
-				INFO_PRINTF1(_L("Status: Unsent"));
-				break;
-
-			case RMobileSmsStore::EStoredMessageSent:
-				INFO_PRINTF1(_L("Status: Sent"));
-				break;
-
-			case RMobileSmsStore::EStoredMessageDelivered:
-				INFO_PRINTF1(_L("Status: Delivered"));
-				break;
-
-			case RMobileSmsStore::EStoredMessageUnknownStatus:
-			default:
-				INFO_PRINTF1(_L("Status: Unknown"));
-				break;
-			}
-
-        PrintMessageL(smsmessage);
-		User::LeaveIfError(aMessages.Append(smsmessage));
-		CleanupStack::Pop(smsmessage);
-		}
-
-	}
-
-
-TInt CSMSTestSteps::DeleteSmsL(const CSmsMessage& aSms, RSocket& aSocket)
-/**
- *  This method deletes SMS message from the SMS storage.
- *  @param aSms SMS message that will be deleted
- *  @param aSocket Used to stream SMS message to the sms stack
- *  @leave Leaves if delete request is completed with error code (except KErrNotFound)
- *  @return TInt :error code
- */
-	{
-	INFO_PRINTF1(_L("Delete message"));
-
-	TRequestStatus status;
-
-	RSmsSocketWriteStream writestream(aSocket);
-	TRAPD(ret,writestream << aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	aSocket.Ioctl(KIoctlDeleteSmsMessage, status, NULL, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("DeleteSmsL - returned %d"), status.Int());
-
-	if (status.Int()!=KErrArgument)
-		{
-		TEST(status.Int() == KErrNone);
-		}
-
-	return status.Int();
-	}
-
-void CSMSTestSteps::DeleteSmsLeaveIfErrorL(const CSmsMessage& aSms, RSocket& aSocket)
-/**
- *  This method deletes SMS message from the SMS storage.
- *  @param aSms SMS message that will be deleted
- *  @param aSocket Used to stream SMS message to the sms stack
- */
-	{
-	TRequestStatus status;
-	RSmsSocketWriteStream writestream(aSocket);
-	writestream << aSms;
-	writestream.CommitL();
-	aSocket.Ioctl(KIoctlDeleteSmsMessage, status, NULL, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("Delete SMS returned %d"), status.Int());
-	if(status.Int() != KErrNone)
-		{
-		User::Leave(status.Int());
-		}
-	}
-
-void CSMSTestSteps::SetIndicatorL(const TTestCase& aTestCase, CSmsMessage* aSms)
-/**
- *  
- */
-	{
-	TSmsDataCodingScheme::TSmsAlphabet alphabet;
-	if (aTestCase.iBits7To4 == TSmsDataCodingScheme::ESmsDCSMessageWaitingIndicationUCS2)
-		alphabet = TSmsDataCodingScheme::ESmsAlphabetUCS2;
-	else
-		alphabet = TSmsDataCodingScheme::ESmsAlphabet7Bit;
-
-	TSmsUserDataSettings smsSettings;
-	smsSettings.SetAlphabet(alphabet);
-	smsSettings.SetTextCompressed(EFalse);
-	aSms->SetUserDataSettingsL(smsSettings);
-
-	CSmsPDU& pdu = aSms->SmsPDU();
-	pdu.SetBits7To4(aTestCase.iBits7To4);
-	pdu.SetIndicationType(aTestCase.iIndicationType);
-	pdu.SetIndicationState(aTestCase.iIndicationState);
-
-	}
-
-void CSMSTestSteps::FillDes(TDes& aDes,TInt aLength)
-/**
- *  Fill aDes with randomly generated 7bit data
- *  @param aDes will be filled with random data
- *  @param aLength has the length to be set to aDes
- */
-	{
-	TText baseChar='A';
-
-	aDes.SetLength(aLength);
-	for (TInt i=0; i<aLength; i++)
-		{
-		aDes[i]=TText(baseChar + i%26);
-		}
-	}
-
-TInt CSMSTestSteps::MakeReadSmsStoreRequestL(RSocket& aSocket)
-/**
- *  This method retrieves SMS messages from SMS storage.
- *  Main purpose is to test out of memory conditions.
- *  @param aSocket Used to stream SMS messages from the sms stack
- *  @param aMessages reference to CSmsMessage pointer array.
- */
-	{
-	TRequestStatus status;
-	TPckgBuf<TUint> sbuf;
-	sbuf()=0;
-
-	//Now enumerate messages from SIM
-	aSocket.Ioctl(KIoctlEnumerateSmsMessages,status,&sbuf, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("Read SMS returned %d"), status.Int());
-	if(status.Int() != KErrNone)
-		{
-		User::Leave(status.Int());
-		}
-
-	//sbuf() includes the count of messages on SIM
-	return sbuf();
-	}
-
-TBool CSMSTestSteps::TimedWaitForRecvL(RSocket& aSocket, TUint aDelay)
-/**
- *  Wait for up to the delay for an Sms to be received
- *  @param aSocket The status is return to this socket
- *  @param aDelay Maximum time to wait for receipt
- *  @return ETrue if data received
- *  @leave Leaves if receiving is completed with error code
- */
-	{
-	TRequestStatus timerStatus;
-	RTimer timer;
-	timer.CreateLocal();
-	timer.After(timerStatus, TTimeIntervalMicroSeconds32(aDelay));
-
-	TPckgBuf<TUint> sbuf;
-	sbuf()=KSockSelectRead;
-	TRequestStatus ioctlStatus;
-	aSocket.Ioctl(KIOctlSelect, ioctlStatus, &sbuf, KSOLSocket);
-	User::WaitForRequest(timerStatus, ioctlStatus);
-	TBool retval = EFalse;
-	if(ioctlStatus == KRequestPending)
-		{
-		// if timer elapsed but ESock request is still pending
-		aSocket.CancelIoctl();
-		User::WaitForRequest(ioctlStatus);
-		}
-	else
-		{
-		// ESock request is done. Cancel timer
-		timer.Cancel();
-		User::WaitForRequest(timerStatus);
-		// check ESock error status
-		if(ioctlStatus.Int() == KErrNone)
-			{
-			retval=ETrue;             
-			}
-		}
-	timer.Close();
-	return retval;
-	}
-
-TInt CSMSTestSteps::CancelWriteSmsToSimL(CSmsMessage& aSms, RSocket& aSocket, TInt aDelay)
-/**
- *  This method stores SMS messages to the SMS storage.
- *  @param aSms SMS message that will be stored
- *  @param aSocket Used to stream SMS message to the sms stack
- *  @leave Leaves if streaming the message to the socket server doesn't succeed
- *  @leave Leaves if store request is completed with error code
- */
-	{
-	INFO_PRINTF1(_L("Write message"));
-
-	TRequestStatus status;
-
-	RSmsSocketWriteStream writestream(aSocket);
-	TRAPD(ret,writestream << aSms);
-	TEST(ret == KErrNone);
-	TRAP(ret,writestream.CommitL());
-	TEST(ret == KErrNone);
-
-	aSocket.Ioctl(KIoctlWriteSmsMessage,status,NULL, KSolSmsProv);
-	INFO_PRINTF1(_L("Cancel"));
-	User::After(aDelay);
-	aSocket.CancelIoctl();
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("WriteSmsToSimL - returned %d"), status.Int());
-
-	return status.Int();
-	}
-
-TBool CSMSTestSteps::DoSingleTestCaseL( const TDesC8& aSection, TInt aCount )
-	{
-	CTestConfig* configFile = CTestConfig::NewLC(iFs, KGmsSmsConfigFileDir, KConfigFilename);
-
-	TBuf8<64> sectionName(aSection);
-	sectionName.AppendNum(aCount);
-	const CTestConfigSection* section = NULL;
-	TBool found( ETrue );
-
-	if ( ( section = configFile->Section( sectionName ) ) != NULL )
-		{
-		if ( aSection == KTestSendAndRecvMsgsWithDifferentTON )
-			{
-			TInt num( 1 );
-			CArrayFixFlat<TInt>* alphabetArray = new ( ELeave ) CArrayFixFlat<TInt>( 1 );
-			CleanupStack::PushL(alphabetArray);
-			CArrayFixFlat<TInt>* typeOfNumberArray = new ( ELeave ) CArrayFixFlat<TInt>( 1 );
-			CleanupStack::PushL(typeOfNumberArray);
-
-			TBuf8<32> itemName( KAlphabet );
-			itemName.AppendNum( num );
-
-			TInt param  = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-			while ( param != KErrNotFound )
-				{
-				alphabetArray->AppendL(param);
-				itemName = KAlphabet;
-				itemName.AppendNum( ++num );
-				param = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-				}
-			num = 1;
-			itemName = KTypeOfNumber;
-			itemName.AppendNum( num );
-
-			param  = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-			while ( param != KErrNotFound )
-				{
-				typeOfNumberArray->AppendL(param);
-				itemName = KTypeOfNumber;
-				itemName.AppendNum( ++num );
-				param = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-				}
-
-			RPointerArray<CSmsPduDbMessage> array;
-			CleanupResetAndDestroyPushL(array);
-			ReadPduL( sectionName, array );
-			TestSendAndRecvMsgsWithDifferentTONL( array, alphabetArray, typeOfNumberArray );
-			CleanupStack::PopAndDestroy(&array);
-			CleanupStack::PopAndDestroy(typeOfNumberArray);
-			CleanupStack::PopAndDestroy(alphabetArray);
-			}
-		else if ( aSection == KTestSendAndReceiveIndicatorMsgs )
-			{
-			TInt num( 1 );
-			CArrayFixFlat<TInt>* indicationTypeArray = new ( ELeave ) CArrayFixFlat<TInt>( 1 );
-			CleanupStack::PushL(indicationTypeArray);
-			CArrayFixFlat<TInt>* dcsBits7To4Array = new ( ELeave ) CArrayFixFlat<TInt>( 1 );
-			CleanupStack::PushL(dcsBits7To4Array);
-			CArrayFixFlat<TInt>* indicationStateArray = new ( ELeave ) CArrayFixFlat<TInt>( 1 );
-			CleanupStack::PushL(indicationStateArray);
-
-			TBuf8<32> itemName( KIndicationType );
-			itemName.AppendNum( num );
-
-			TInt param  = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-			while ( param != KErrNotFound )
-				{
-				indicationTypeArray->AppendL(param);
-				itemName = KIndicationType;
-				itemName.AppendNum( ++num );
-				param = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-				}
-			num = 1;
-			itemName = KDCSBits7To4;
-			itemName.AppendNum( num );
-
-			param  = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-			while ( param != KErrNotFound )
-				{
-				dcsBits7To4Array->AppendL(param);
-				itemName = KDCSBits7To4;
-				itemName.AppendNum( ++num );
-				param = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-				}
-			num = 1;
-			itemName = KIndicationState;
-			itemName.AppendNum( num );
-
-			param  = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-			while ( param != KErrNotFound )
-				{
-				indicationStateArray->AppendL(param);
-				itemName = KIndicationState;
-				itemName.AppendNum( ++num );
-				param = section->ItemValue( (TPtrC8)itemName, KErrNotFound );
-				}
-
-			RPointerArray<CSmsPduDbMessage> array;
-			CleanupResetAndDestroyPushL(array);
-			ReadPduL( sectionName, array );
-			TestSendAndReceiveIndicatorMsgsL( array, indicationStateArray, dcsBits7To4Array, indicationTypeArray );
-			CleanupStack::PopAndDestroy(&array);
-			CleanupStack::PopAndDestroy(indicationStateArray);
-			CleanupStack::PopAndDestroy(dcsBits7To4Array);
-			CleanupStack::PopAndDestroy(indicationTypeArray);
-			}
-		else
-			found = EFalse;
-		}
-	else
-		found = EFalse;
-
-    CleanupStack::PopAndDestroy(configFile);//configFile
-	return found;
-	}
-
-void CSMSTestSteps::TestSendAndRecvMsgsWithDifferentTONL( const RPointerArray<CSmsPduDbMessage>& aArray,
-												   const CArrayFixFlat<TInt>* aAlphabetArray,
-												   const CArrayFixFlat<TInt>* aTypeOfNumberArray )
-    {
-    INFO_PRINTF1(_L("Send and receive messages with different type of number"));
-
-	RSocketServ socketServer;
-	PrepareRegTestLC(socketServer, 39);
-
-	RSocket socket;
-	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
-
-	TSmsDataCodingScheme::TSmsAlphabet alphabet = ( TSmsDataCodingScheme::TSmsAlphabet )aAlphabetArray->At(0);
-
-	TInt bufLen=aArray[0]->iSmsMessage->Buffer().Length();
-	HBufC* textBuf=HBufC::NewL(bufLen);
-	CleanupStack::PushL(textBuf);
-	TPtr testText(textBuf->Des());
-	aArray[0]->iSmsMessage->Buffer().Extract(testText,0,bufLen);
-
-	CSmsMessage* sendMessage=CreateSmsMessageL(testText,alphabet);
-	CleanupStack::PushL(sendMessage);
-    CSmsSubmit& submitPdu=(CSmsSubmit&)sendMessage->SmsPDU();
-	TGsmSmsTelNumber gsmSmsTelNumber;
-	gsmSmsTelNumber.iTelNumber.Append(iTelephoneNumber);
-	if(gsmSmsTelNumber.iTelNumber.Length() > 0 && gsmSmsTelNumber.iTelNumber[0] == '+')
-	{
-		// Remove "+" sign from telephony number
-		gsmSmsTelNumber.iTelNumber.Delete(0,1);
-		gsmSmsTelNumber.iTelNumber.Trim();
-	}
-
-	for ( TInt i = 0; i < aTypeOfNumberArray->Count(); i++ )
-		{
-
-		gsmSmsTelNumber.iTypeOfAddress.SetTON( ( TGsmSmsTypeOfNumber )aTypeOfNumberArray->At(i) );
-		sendMessage->SetParsedToFromAddressL(gsmSmsTelNumber);
-
-		if ( ( TGsmSmsTypeOfNumber )aTypeOfNumberArray->At(i) == EGsmSmsTONSubscriberNumber )
-			{
-			submitPdu.SetPIDType(TSmsProtocolIdentifier::ESmsPIDShortMessageType);
-			submitPdu.SetShortMessageType(TSmsProtocolIdentifier::ESmsReturnCallMesage);
-			}
-		INFO_PRINTF2(_L("Send SMS message. Type of number is %d"), aTypeOfNumberArray->At(i) );
-		SendSmsL(sendMessage,socket);
-
-		INFO_PRINTF1(_L("Waiting for incoming SMS...") );
-		WaitForRecvL(socket);
-		CSmsMessage* recvMessage = RecvSmsL(socket);
-		delete recvMessage;
-
-		}
-
-	CleanupStack::PopAndDestroy(sendMessage);
-	CleanupStack::PopAndDestroy(textBuf);
-    CleanupStack::PopAndDestroy(&socket);
-    CleanupStack::PopAndDestroy(&socketServer);
-
-
-	}
-
-void CSMSTestSteps::TestSendAndReceiveIndicatorMsgsL( const RPointerArray<CSmsPduDbMessage>& aArray,
-											   const CArrayFixFlat<TInt>* aIndicationStateArray,
-											   const CArrayFixFlat<TInt>* aDcsBits7To4Array,
-											   const CArrayFixFlat<TInt>* aIndicationTypeArray )
-/**
- *  @test Send and receive different indicator messages
- *  TODO ESmsDCSMessageWaitingIndicationDiscardMessage test doesn't work with Nokia 6210 because phone
- *  doesn't route incoming message to the MM TSY.
- */
-    {
-
-    INFO_PRINTF1(_L("Send and receive different indicator messages"));
-
-	RSocketServ socketServer;
-	PrepareRegTestLC(socketServer, 40);
-
-	RSocket socket;
-	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
-
-	for ( TInt i = 0; i < aArray.Count(); i++ )
-		{
-
-		TSmsDataCodingScheme::TSmsIndicationState indicationState =
-			( TSmsDataCodingScheme::TSmsIndicationState )aIndicationStateArray->At(i);
-		TSmsDataCodingScheme::TSmsDCSBits7To4 dcsBits7To4Array =
-			( TSmsDataCodingScheme::TSmsDCSBits7To4 )aDcsBits7To4Array->At(i);
-		TSmsDataCodingScheme::TSmsIndicationType indicationType =
-			( TSmsDataCodingScheme::TSmsIndicationType )aIndicationTypeArray->At(i);
-
-		TInt bufLen=aArray[i]->iSmsMessage->Buffer().Length();
-		HBufC* textBuf=HBufC::NewL(bufLen);
-		CleanupStack::PushL(textBuf);
-		TPtr testText(textBuf->Des());
-		aArray[i]->iSmsMessage->Buffer().Extract(testText,0,bufLen);
-
-		TTestCase msg(testText, indicationType, dcsBits7To4Array, indicationState );
-
-		SendAndRecvTestMessageL(msg,socket);
-
-		CleanupStack::PopAndDestroy(textBuf);
-		}
-
-    CleanupStack::PopAndDestroy(&socket);
-    CleanupStack::PopAndDestroy(&socketServer);
-
-    }
-
-void CSMSTestSteps::ReadPduL( TBuf8<64> aSectionName, RPointerArray<CSmsPduDbMessage>& aArray )
-	{
-	CSmsPduDatabase* db = CSmsPduDatabase::NewL(iFs, aSectionName, KConfigFilename, KConfigFileDir);
-	CleanupStack::PushL(db);
-
-	db->GetMessageL(aArray, CSmsPDU::ESmsSubmit);
-
-	CleanupStack::PopAndDestroy(db);
-	}
-
-
-CSmsMessage* CSMSTestSteps::CreateSmsMessageLC(CSmsPDU::TSmsPDUType aType, CSmsBuffer* aBuffer, const TDesC& aAddress)
-	{
-	CSmsMessage* msg = CSmsMessage::NewL(iFs, aType, aBuffer);
-	CleanupStack::PushL(msg);
-
-	if (aAddress.Length() != 0)
-		{
-		msg->SetToFromAddressL(aAddress);
-		}
-
-	return msg;
-	}
-
-
-void CSMSTestSteps::WriteToSIML(RSocket& aSocket, const CSmsMessage& aMsg)
-	{
-	TRequestStatus status;
-
-	RSmsSocketWriteStream writestream(aSocket);
-	writestream << aMsg;
-	writestream.CommitL();
-
-	aSocket.Ioctl(KIoctlWriteSmsMessage,status,NULL, KSolSmsProv);
-	User::WaitForRequest(status);
-	INFO_PRINTF2(_L("Write Sms - returned %d"), status.Int());
-	if (status.Int() != KErrNone)
-		{
-		INFO_PRINTF1(_L("Test has not written message to SIM successfully"));
-		}
-	TEST(status.Int() == KErrNone);
-	}
-
-
-/*
-These functions were grabbed from SMSStackTestUtils.dll
-*/
-void CSMSTestSteps::OpenSmsSocketL(RSocketServ& aSocketServer, RSocket& aSocket, TSmsAddrFamily aFamily)
-/**
- *  Initialise an RSocket for SMS, aSocket is NOT pushed to CleanupStack.
- *  @param aSocketServer reference to the socket server object
- *  @param aSocket The socket that will be opened
- *  @param aFamily The sms address family
- */
-	{
-	TSmsAddr smsaddr;
-	smsaddr.SetSmsAddrFamily(aFamily);
-	OpenSmsSocketL(aSocketServer, aSocket, smsaddr);
-	}
-
-void CSMSTestSteps::OpenSmsSocketL(RSocketServ& aSocketServer, RSocket& aSocket, TSmsAddr& aSmsAddr)
-/*
- *  Initialise an RSocket for SMS, aSocket is NOT pushed to CleanupStack.
- *  @param aSocketServer reference to the socket server object
- *  @param aSocket The socket that will be opened
- *  @param aSmsAddr The sms address to bind to
- */
-	{
-	TInt ret=aSocket.Open(aSocketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol);
-	TEST(ret==KErrNone);
-	CleanupClosePushL(aSocket);
-	ret=aSocket.Bind(aSmsAddr);
-	TEST(ret==KErrNone);
-	CleanupStack::Pop(&aSocket);
-	}
-
-/*
-	Utility for creating a SMS message from test data (ini) file
-*/
-CSmsMessage* CSMSTestSteps::CreateSMSL()
-{
-	INFO_PRINTF1(_L("Creating SMS...") );
-	
-	TInt codingScheme;
-	GetIntFromConfig(ConfigSection(), _L("messageCoding"), codingScheme);
-	
-	TCodingScheme dataCodingScheme = (TCodingScheme)codingScheme;	
-	
-	TSmsDataCodingScheme::TSmsAlphabet alphabet;
-	if (dataCodingScheme == ESevenBit)
-		{	
-		//8 bit coding scheme
-		alphabet = TSmsDataCodingScheme::ESmsAlphabet7Bit;
-		}
-
-	else 
-		{
-		alphabet = TSmsDataCodingScheme::ESmsAlphabet8Bit;
-		}		
-	
-	TPtrC messageText;
-	GetStringFromConfig(ConfigSection(), _L("message"), messageText);
-	CSmsMessage *iSms = CreateSmsMessageL(messageText,alphabet);
-	
-	INFO_PRINTF1(_L("SMS created") );
-	PrintMessageL(iSms);
-	
-	return iSms;
-
-}
-
-/**
- * Sets high and low limits in .RSC file and then reserves disk space to match requested levels.
- * 
- * Checks the current free space and then sets the high and low marks
- * to be aHighDrop MB and aLowDrop MB below the current free space 
- * level.
- * 
- * Then diskspace is reserved to aFreeDrop MB below the current free
- * space level.
- * 
- * If the current free space level is greater then aMax then the 
- * current free space level is set to aMax
- * 
- * If the current free space level is less than aLowDrop MB then this
- * method leaves with KErrArgument.
- * 
- * @param   aHighDrop   The number of MB below the current free space level for the high level mark (in the .RSC file)
- * @param   aLowDrop    The number of MB below the current free space level for the low level mark (in the .RSC file)  
- * @param   aFreeDrop   The number of MB below the current free space level to set the free space to ;
- *                      if aFreeDrop == 0, then SetFreeDiskSpaceL() is not called
- * @param   aMax        The maximum level for the high limit allowed
- * 
- * @return  The max current free space level used.
- * 
- * @leave   KErrArgument if the current free diskspace level is less than aLowDrop MB
- * @leave   KErrArgument if aMax is not greater than aLowDrop MB
- * @leave   KErrArgument if aHighDrop >= aLowDrop  
- */
-TUint64 CSMSTestSteps::SetHighLowLimitsAndDiskSpaceLevelL(TUint aHighDrop, TUint aLowDrop, TUint aFreeDrop, TUint64 aMax/*=0x7fffffff*/)
-    {
-    INFO_PRINTF5(_L("Setting High-Low limits and Diskspace levels [aHighDrop=%u, aLowDrop=%u, aFreeDrop=%u, aMax=%ld]"), 
-            aHighDrop, aLowDrop, aFreeDrop, aMax);
-    
-    __ASSERT_ALWAYS( (aMax > (aLowDrop*1024*1024)), User::Leave(KErrArgument));
-    __ASSERT_ALWAYS( (aLowDrop > aHighDrop), User::Leave(KErrArgument));
-    
-    ReleaseDiskSpaceL();
-   
-    TVolumeInfo  volumeInfo;
-    User::LeaveIfError(iFs.Volume(volumeInfo, EDriveC));
-    INFO_PRINTF2(_L("  Drive C currently has %ld bytes free."), volumeInfo.iFree);
-    
-    TUint64 current = volumeInfo.iFree;
-    if( current < (aLowDrop*1024*1024) )
-        {
-        INFO_PRINTF1(_L("  Drive C already has too little free space!"));
-        User::Leave(KErrArgument);
-        }
-    if( current > aMax )
-        {
-        current = aMax;
-        }
-    TUint64 high = current - (aHighDrop*1024*1024);
-    TUint64 low  = current - (aLowDrop*1024*1024);    
-        
-    SetLowHighLimitsInSmsuRscL(low, high);
-
-    if( aFreeDrop > 0 )
-        {       
-        TUint64 free = current - (aFreeDrop*1024*1024);    
-        SetFreeDiskSpaceL(free);       
-        }
-    
-    return current;
-    }
-
-void CSMSTestSteps::SetFreeDiskSpaceFromDropLevelL(TUint aFreeDrop)
-    {
-    if( aFreeDrop == 0)
-        {
-        return;
-        }
-    
-    TVolumeInfo  volumeInfo;
-    User::LeaveIfError(iFs.Volume(volumeInfo, EDriveC));
-    TUint64 current = volumeInfo.iFree;
-    if( current > 0x7fffffff )
-        {
-        current = 0x7fffffff;
-        }         
-    TUint64 free = current - (aFreeDrop*1024*1024);
-    SetFreeDiskSpaceL(free);   
-    }
-
-/**
- *  Reserves disk space so that a specified amount of free disk space is
- *  available.
- *
- *  @param aNewFreeValue  Amount of free space required.
- */
-void CSMSTestSteps::SetFreeDiskSpaceL(TInt64 aNewFreeValue)
-    {
-    
-#ifndef _DEBUG
-    ERR_PRINTF1(_L("Unexpected call: CSMSTestSteps::SetFreeDiskSpaceL() is expected to be called only in DEBUG mode."));
-    User::Leave(KErrNotSupported);
-#else
- 
-    INFO_PRINTF2(_L("Setting Drive C free disk space to %ld bytes."), aNewFreeValue);    
-    
-    __ASSERT_DEBUG( (aNewFreeValue <= 0x7fffffff), User::Leave(KErrArgument));
-
-    TInt err = RProperty::Set(KUidPSSMSStackCategory, KUidPSSMSStackFreeDiskSpaceKey, (TInt)aNewFreeValue);
-    if (err != KErrNone)
-        {
-        ERR_PRINTF2(_L("RProperty::Set() failure [err=%d]"), err);
-        User::Leave(err);
-        }
-#endif           
-    } // CSMSTestSteps::SetFreeDiskSpaceL
-
-/**
- *  Release all reserved disk space.
- */
-void CSMSTestSteps::ReleaseDiskSpaceL()
-	{
-	
-#ifndef _DEBUG
-    ERR_PRINTF1(_L("Unexpected call: CSMSTestSteps::ReleaseDiskSpaceL() is expected to be called only in DEBUG mode."));
-    User::Leave(KErrNotSupported);
-#else
-
-    INFO_PRINTF1(_L("CSMSTestSteps::ReleaseDiskSpaceL()"));
-    
-    TVolumeInfo  volumeInfo;
-    User::LeaveIfError(iFs.Volume(volumeInfo, EDriveC));
-    TUint64 current = volumeInfo.iFree;
-    if( current > 0x7fffffff )
-        {
-        current = 0x7fffffff;
-        }         
-    
-    SetFreeDiskSpaceL(current);
-#endif    
-	} // CSMSTestSteps::ReleaseDiskSpaceL
-
-
- /**
-  *  Set high and low limits in .RSC file. When the SMS Stack starts the limits
-  *  will be loaded as if set by the licensee.
-  *
-  *  @param aLowLimit   Low limit value.
-  *  @param aHighLimit  High limit value.
-  *
-  *  @note Only works in debug mode for security reasons.
-  */ 
-void CSMSTestSteps::SetLowHighLimitsInSmsuRscL(TInt64 aLowLimit, TInt64 aHighLimit)
-	{
-	INFO_PRINTF3(_L("Setting high and low .RSC limits to %ld and %ld."),
-				 aHighLimit, aLowLimit);
-
-	__ASSERT_ALWAYS(aLowLimit  < 0x7fffffff, User::Leave(KErrArgument));
-	__ASSERT_ALWAYS(aHighLimit < 0x7fffffff, User::Leave(KErrArgument));
-	__ASSERT_ALWAYS(aLowLimit  < aHighLimit, User::Leave(KErrArgument));
-
-	//
-	// Data for the SMSU resource file. The low limit is written at position
-	// 20 and the high limit at position 24.
-	//
-	const TInt  smsuRscSize = 34;
-	TChar  smsuRscData[smsuRscSize] =
-				{0x6b, 0x4a, 0x1f, 0x10, 0x00, 0x00, 0x00, 0x00,
-   	 			 0x00, 0x00, 0x00, 0x00, 0x19, 0xfd, 0x48, 0xe8,
-				 0x01, 0x04, 0x00, 0x00, 0x78, 0x56, 0x34, 0x12,
-				 0x87, 0x65, 0x43, 0x21, 0x14, 0x00, 0x18, 0x00, 
-   		 		 0x1c, 0x00};
-    						  
-	smsuRscData[20] = (aLowLimit  >>  0) & 0xff;
-	smsuRscData[21] = (aLowLimit  >>  8) & 0xff;
-	smsuRscData[22] = (aLowLimit  >> 16) & 0xff;
-	smsuRscData[23] = (aLowLimit  >> 24) & 0xff;
-	smsuRscData[24] = (aHighLimit >>  0) & 0xff;
-	smsuRscData[25] = (aHighLimit >>  8) & 0xff;
-	smsuRscData[26] = (aHighLimit >> 16) & 0xff;
-	smsuRscData[27] = (aHighLimit >> 24) & 0xff;
-
-	TBuf8<smsuRscSize>  smsuRscBuffer;
-
-	for (TInt index = 0;  index < smsuRscSize;  index++)
-		{
-		smsuRscBuffer.Append(smsuRscData[index]);
-		}
-
-	//
-	// Ensure the target directory exists...
-	//
-	TInt  ret;
-	
-	ret = iFs.MkDir(KSMSUResourceDir);
-	if (ret != KErrNone  &&  ret != KErrAlreadyExists)
-		{
-		User::Leave(ret);
-		}
-
-	//
-	// Write the RSC file to the private C:\ directory...
-	//
-	RFile  file;
-
-	User::LeaveIfError(file.Replace(iFs, KSMSUResourceFile, EFileWrite));
-	CleanupClosePushL(file);
-	User::LeaveIfError(file.Write(smsuRscSize, smsuRscBuffer));
-	CleanupStack::PopAndDestroy(&file);
-	} // CSMSTestSteps::SetLowHighLimitsInSmsuRscL
-
-
-/**
- *  Removes the low and high limits and returns the SMSU.RSC to defauls.
- */
-void CSMSTestSteps::RemoveLowHighLimitsFromSmsuRscL()
-	{
-	INFO_PRINTF1(_L("Removing .RSC limits."));
-
-	//
-	// Remove the RSC file...
-	//
-	TInt  ret;
-	
-	ret = iFs.Delete(KSMSUResourceFile);
-	if (ret != KErrNone  &&  ret != KErrNotFound)
-		{
-		User::Leave(ret);
-		}
-	} // CSMSTestSteps::RemoveLowHighLimitsFromSmsuRscL