smsprotocols/smsstack/smsprot/Test/TE_Smsprt/TE_smsprt.cpp
changeset 0 3553901f7fa8
child 14 7ef16719d8cb
equal deleted inserted replaced
-1:000000000000 0:3553901f7fa8
       
     1 // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 /**
       
    17  @file
       
    18 */
       
    19 #include <commsdattypesv1_1.h>
       
    20 
       
    21 #include "TE_smsprtbase.h"
       
    22 #include "smsulog.h"
       
    23 #include "logcheck.h"
       
    24 #include "TE_smsprt.h"
       
    25 #include <sacls.h>
       
    26 #include <exterror.h>
       
    27 
       
    28 #include <emsformatie.h>
       
    29 #include <logwraplimits.h>
       
    30 #include <smspver.h>
       
    31 
       
    32 using namespace CommsDat;
       
    33 
       
    34 #if defined (__WINS__)
       
    35 #define PDD_NAME _L("ECDRV")
       
    36 #define LDD_NAME _L("ECOMM")
       
    37 #else
       
    38 #define PDD_NAME _L("EUART1")
       
    39 #define LDD_NAME _L("ECOMM")
       
    40 #endif
       
    41 
       
    42 
       
    43 TVerdict CTestSimpleTxAndRx::doTestStepL()
       
    44 /**
       
    45  *  Test a simple Transmit and Receive of a TPDU
       
    46  */
       
    47 	{
       
    48 	INFO_PRINTF1(_L("Test Simple Tx and Rx SMS"));
       
    49 
       
    50 	RSocketServ socketServer;
       
    51 	PrepareRegTestLC(socketServer, 0);
       
    52 
       
    53 	RSocket socket;
       
    54 	iSmsStackTestUtils->OpenSmsSocketL(socketServer,socket,ESmsAddrRecvAny);
       
    55 	CleanupClosePushL(socket);
       
    56 
       
    57     // Create comms database object
       
    58 	
       
    59 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
    60 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
    61 #else
       
    62 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
    63 #endif
       
    64 	CleanupStack::PushL(db);
       
    65 
       
    66 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
    67 
       
    68     // EReceiveUnstoredClientAck
       
    69 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
    70 	CleanupStack::PushL(smsReceiveModeField);
       
    71 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
    72 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
    73 	smsReceiveModeField->ModifyL(*db);
       
    74 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
    75 	CleanupStack::PopAndDestroy(db);
       
    76 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
    77 
       
    78 	//Set destination and SC numbers
       
    79 	iTelephoneNumber=KPekka;
       
    80 	iServiceCenterNumber=KRadiolinjaSC;
       
    81 
       
    82 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
    83 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
    84 	CleanupStack::PushL(smsMessage);
       
    85 
       
    86 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
    87 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
    88 
       
    89 	//Send SMS
       
    90 	SendSmsL(smsMessage,socket);
       
    91 
       
    92 	CleanupStack::PopAndDestroy(smsMessage);
       
    93 
       
    94 	//Receive SMS
       
    95 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
    96 	WaitForRecvL(socket);
       
    97 	smsMessage = RecvSmsL(socket);
       
    98 
       
    99 	INFO_PRINTF1(_L("incoming SMS") );
       
   100 
       
   101 	CleanupStack::PushL(smsMessage);
       
   102 	TestSmsContentsL(smsMessage,KTestMsg1);
       
   103 
       
   104 	//Save the received message to the SMS storage
       
   105 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
   106 	WriteSmsToSimL(*smsMessage, socket);
       
   107 
       
   108 	CleanupStack::PopAndDestroy(smsMessage);
       
   109 
       
   110 	// Enumerate messages from Store
       
   111 	RPointerArray<CSmsMessage> messages;
       
   112 	ReadSmsStoreL(socket, messages);
       
   113 	messages.ResetAndDestroy();
       
   114 
       
   115 	CleanupStack::PopAndDestroy(&socket);
       
   116 	
       
   117 	CleanupStack::PopAndDestroy(&socketServer);
       
   118 
       
   119 	return TestStepResult() ;
       
   120 	}
       
   121 
       
   122 
       
   123 TVerdict CTestBinaryTxAndRx::doTestStepL()
       
   124 /**
       
   125  *  Test a binary Transmit and Receive of a TPDU
       
   126  */
       
   127 	{
       
   128 	INFO_PRINTF1(_L("Test Binary Tx and Rx SMS"));
       
   129 
       
   130 	RSocketServ socketServer;
       
   131 	PrepareRegTestLC(socketServer, 142);
       
   132 
       
   133 	RSocket socket;
       
   134 	iSmsStackTestUtils->OpenSmsSocketL(socketServer,socket,ESmsAddrRecvAny);
       
   135 	CleanupClosePushL(socket);
       
   136 
       
   137     // Create comms database object
       
   138 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
   139 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
   140 #else
       
   141 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
   142 #endif
       
   143 	CleanupStack::PushL(db);
       
   144 
       
   145 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
   146 
       
   147     // EReceiveUnstoredClientAck
       
   148 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
   149 	CleanupStack::PushL(smsReceiveModeField);
       
   150 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
   151 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
   152 	smsReceiveModeField->ModifyL(*db);
       
   153 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
   154 	CleanupStack::PopAndDestroy(db);
       
   155 		                          
       
   156 
       
   157 	//Set destination and SC numbers
       
   158 	iTelephoneNumber=KPekka;
       
   159 	iServiceCenterNumber=KRadiolinjaSC;
       
   160 		
       
   161 	const TInt KTestPDUSize = 128;
       
   162 	TBuf<KTestPDUSize> arrBuf;
       
   163 	arrBuf.SetLength(KTestPDUSize);
       
   164 	for(TInt i = 0; i < KTestPDUSize; ++i)
       
   165 		{			
       
   166 		arrBuf[i] = i;
       
   167 		}
       
   168 		
       
   169 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   170 	CSmsMessage* smsMessage=CreateSmsMessageL(arrBuf, alphabet);
       
   171 	CleanupStack::PushL(smsMessage);
       
   172 
       
   173 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   174 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   175 	
       
   176 	//Send first SMS
       
   177 	SendSmsL(smsMessage,socket);
       
   178 	CleanupStack::PopAndDestroy(smsMessage);
       
   179 		
       
   180 	TBuf<KTestPDUSize> arrBuf2;
       
   181 	arrBuf2.SetLength(KTestPDUSize);
       
   182 	for(TInt i = 0; i < KTestPDUSize; ++i)
       
   183 		{		
       
   184 		arrBuf2[i] = 128 + i;
       
   185 		}
       
   186 		
       
   187 	smsMessage=CreateSmsMessageL(arrBuf2, alphabet);
       
   188 	CleanupStack::PushL(smsMessage);
       
   189 	
       
   190 	//Send second SMS
       
   191 	SendSmsL(smsMessage,socket);
       
   192 	CleanupStack::PopAndDestroy(smsMessage);		
       
   193 				
       
   194 	//Receive first SMS
       
   195 	INFO_PRINTF1(_L("waiting for incoming first SMS...") );
       
   196 	WaitForRecvL(socket);
       
   197 	smsMessage = RecvSmsL(socket);
       
   198 
       
   199 	INFO_PRINTF1(_L("incoming first SMS") );
       
   200 	
       
   201 	CleanupStack::PushL(smsMessage);
       
   202 	TestSmsContentsL(smsMessage, arrBuf, ETrue);	
       
   203 
       
   204 	//Save the received message to the SMS storage
       
   205 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
   206 	WriteSmsToSimL(*smsMessage, socket);
       
   207 
       
   208 	CleanupStack::PopAndDestroy(smsMessage);
       
   209 			
       
   210 	//Receive second SMS
       
   211 	INFO_PRINTF1(_L("waiting for incoming second SMS...") );
       
   212 	WaitForRecvL(socket);
       
   213 	smsMessage = RecvSmsL(socket);
       
   214 
       
   215 	INFO_PRINTF1(_L("incoming second SMS") );
       
   216 	
       
   217 	CleanupStack::PushL(smsMessage);
       
   218 	TestSmsContentsL(smsMessage, arrBuf2, ETrue);	
       
   219 
       
   220 	//Save the received message to the SMS storage
       
   221 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
   222 	WriteSmsToSimL(*smsMessage, socket);
       
   223 
       
   224 	CleanupStack::PopAndDestroy(smsMessage);				
       
   225 	
       
   226 	// Enumerate messages from Store
       
   227 	RPointerArray<CSmsMessage> messages;
       
   228 	ReadSmsStoreL(socket, messages);
       
   229 	messages.ResetAndDestroy();
       
   230 
       
   231 	CleanupStack::PopAndDestroy(&socket);
       
   232 	
       
   233 	CleanupStack::PopAndDestroy(&socketServer);	 
       
   234 
       
   235 	return TestStepResult() ;	 	
       
   236 	}	
       
   237 
       
   238 
       
   239 TVerdict CTestStatusReport::doTestStepL()
       
   240 /**
       
   241  *  Test a simple Transmit and Receive with status reporting
       
   242  */
       
   243 	{
       
   244 	INFO_PRINTF1(_L("Test Tx an SMS and then receive a status report"));
       
   245 
       
   246 	RSocketServ socketServer;
       
   247 	PrepareRegTestLC(socketServer, 1);
       
   248 
       
   249 	RSocket socket;
       
   250 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   251 
       
   252 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
   253 
       
   254 	//Set destination and SC numbers
       
   255 	iTelephoneNumber=KPekka;
       
   256 	iServiceCenterNumber=KRadiolinjaSC;
       
   257 
       
   258 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   259 	CSmsMessage* smsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
   260 	CleanupStack::PushL(smsMessage);
       
   261 
       
   262 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   263 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   264 
       
   265 	//Send SMS
       
   266 	SendSmsL(smsMessage,socket);
       
   267 
       
   268 	CleanupStack::PopAndDestroy(smsMessage);
       
   269 
       
   270 	//Create and send the second SMS
       
   271 
       
   272 	_LIT(KTest7bitMsg,"test message, length 23"); //7 bits test message, length 23 characters
       
   273 
       
   274 	//Set destination number
       
   275 	iTelephoneNumber=KOther;
       
   276 
       
   277 	alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
   278 	smsMessage=CreateSmsWithStatusReportReqL(KTest7bitMsg, alphabet);
       
   279 	CleanupStack::PushL(smsMessage);
       
   280 
       
   281 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   282 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   283 
       
   284 	//Send SMS
       
   285 	SendSmsL(smsMessage,socket);
       
   286 
       
   287 	CleanupStack::PopAndDestroy(smsMessage);
       
   288 
       
   289 	//Create and send the third SMS
       
   290 
       
   291 	//Set destination number
       
   292 	iTelephoneNumber=KOther;
       
   293 
       
   294 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   295 	smsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
   296 	CleanupStack::PushL(smsMessage);
       
   297 
       
   298 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   299 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   300 
       
   301 	//Send SMS
       
   302 	SendSmsL(smsMessage,socket);
       
   303 
       
   304 	CleanupStack::PopAndDestroy(smsMessage);
       
   305 
       
   306 	//Create and send the fourth SMS
       
   307 
       
   308 	//Set destination and SC numbers
       
   309 	iTelephoneNumber=KLocalNumber;
       
   310 	iServiceCenterNumber=KRadiolinjaSC;
       
   311 
       
   312 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   313 	smsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
   314 	CleanupStack::PushL(smsMessage);
       
   315 
       
   316 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   317 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   318 
       
   319 	//Send SMS
       
   320 	SendSmsL(smsMessage,socket);
       
   321 
       
   322 	CleanupStack::PopAndDestroy(smsMessage);
       
   323 
       
   324 	// Create and send the 5th SMS. Here the submit PDU contains an international number
       
   325 	// and the Status Report that will be received contains the local version of that number
       
   326 
       
   327 	_LIT(KTestInternationalSMSWithLocalSRMsg, "Test international number");
       
   328 
       
   329 	//Set destination and SC numbers
       
   330 	iTelephoneNumber = KInternationalTestNumber;
       
   331 
       
   332 	alphabet = TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
   333 	smsMessage = CreateSmsWithStatusReportReqL(KTestInternationalSMSWithLocalSRMsg, alphabet);
       
   334 	CleanupStack::PushL(smsMessage);
       
   335 
       
   336 	INFO_PRINTF2(_L("Destination number:..... %S"), &iTelephoneNumber);
       
   337 	INFO_PRINTF2(_L("ServiceCenter number:... %S"), &iServiceCenterNumber);
       
   338 
       
   339 	//Send SMS
       
   340 	SendSmsL(smsMessage, socket);
       
   341 
       
   342 	CleanupStack::PopAndDestroy(smsMessage);
       
   343 
       
   344 	//
       
   345 	// PDEF137451
       
   346 	//Create and send the sixth SMS
       
   347 	//
       
   348 	
       
   349 	//Set destination and SC numbers
       
   350 	iTelephoneNumber=KPekka;
       
   351 	iServiceCenterNumber=KRadiolinjaSC;
       
   352 
       
   353 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   354 	smsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
   355 	CleanupStack::PushL(smsMessage);
       
   356 
       
   357 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   358 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   359 
       
   360 	//Send SMS
       
   361 	SendSmsL(smsMessage,socket);
       
   362 
       
   363 	CleanupStack::PopAndDestroy(smsMessage);
       
   364 
       
   365 	//
       
   366 	//Create and send the seventh SMS (7-bit)
       
   367 	//
       
   368 	
       
   369 	//Set destination number
       
   370 	iTelephoneNumber=KOther;
       
   371 
       
   372 	alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
   373 	smsMessage=CreateSmsWithStatusReportReqL(KTest7bitMsg, alphabet);
       
   374 	CleanupStack::PushL(smsMessage);
       
   375 
       
   376 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   377 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   378 
       
   379 	//Send SMS
       
   380 	SendSmsL(smsMessage,socket);
       
   381 
       
   382 	CleanupStack::PopAndDestroy(smsMessage);
       
   383 	
       
   384 	//
       
   385 	
       
   386 
       
   387 	//Receive status report
       
   388 	TSmsServiceCenterAddress telephoneNumber;
       
   389 	telephoneNumber.Copy( KOther );
       
   390 	RecvStatusReportL(telephoneNumber, socket);
       
   391 	telephoneNumber = KLocalNumber;
       
   392 	RecvStatusReportL(telephoneNumber, socket);
       
   393 	telephoneNumber = KOther;
       
   394 	RecvStatusReportL(telephoneNumber, socket);
       
   395 	telephoneNumber.Copy( KPekka );
       
   396 	RecvStatusReportL(telephoneNumber, socket);
       
   397 	// CSmsPDUProcessor::DecodeAndProcessPDUL sets the address of the SR
       
   398 	// to the same as that of the original submit. So we expect the
       
   399 	// received SR to have an international number, despite the SR PDU
       
   400 	// having a local number.
       
   401 	telephoneNumber.Copy(KInternationalTestNumber);
       
   402 	RecvStatusReportL(telephoneNumber, socket);
       
   403 
       
   404 	// truncated user data, 8-bit:
       
   405 	telephoneNumber.Copy( KPekka );
       
   406 	RecvStatusReportL(telephoneNumber, socket);
       
   407 	// truncated user data, 7-bit:
       
   408 	telephoneNumber.Copy( KOther );			
       
   409 	RecvStatusReportL(telephoneNumber, socket);
       
   410 
       
   411 	CleanupStack::PopAndDestroy(&socket);
       
   412 	CleanupStack::PopAndDestroy(&socketServer);
       
   413 
       
   414 
       
   415 	return TestStepResult() ;
       
   416 	}
       
   417 
       
   418 
       
   419 TVerdict CTestTxWithError::doTestStepL()
       
   420 /**
       
   421  *  Test a simple Transmit and Receive. This test case tests different errors from TSY.
       
   422  */
       
   423 	{
       
   424 	INFO_PRINTF1(_L("Test Tx an SMS, completed with error"));
       
   425 
       
   426 	RSocketServ socketServer;
       
   427 	PrepareRegTestLC(socketServer, 2);
       
   428 
       
   429 	RSocket socket;
       
   430 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   431 
       
   432 	RSocket socket2;
       
   433 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket2,ESmsAddrSendOnly);
       
   434 
       
   435 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
   436 
       
   437 	//Set destination and SC numbers
       
   438 	iTelephoneNumber=KPekka;
       
   439 	iServiceCenterNumber=KSoneraSC;
       
   440 
       
   441 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   442 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
   443 	CleanupStack::PushL(smsMessage);
       
   444 
       
   445 	//Set Status report request
       
   446 	CSmsSubmit& submitPdu=(CSmsSubmit&)smsMessage->SmsPDU();
       
   447 	submitPdu.SetStatusReportRequest(ETrue);
       
   448 
       
   449 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   450 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   451 
       
   452 	INFO_PRINTF1(_L("waiting 2 secs for smsprot to load"));
       
   453 	User::After(2000000);
       
   454 
       
   455 	//Try sending, Tsy returns error
       
   456 	SendSmsCancelL(smsMessage,socket, socket2);
       
   457 
       
   458 //	SendSmsErrorL(smsMessage,socket);
       
   459 
       
   460 	INFO_PRINTF1(_L("Try again sending the SMS"));
       
   461 	//Now sending succeeds KErrNone
       
   462 	SendSmsL(smsMessage,socket);
       
   463 
       
   464 	//set reject duplicates to false
       
   465 	submitPdu.SetRejectDuplicates(EFalse);
       
   466 	INFO_PRINTF1(_L("Try sending duplicate SMS when Reject Duplicate is False"));
       
   467 	SendSmsL(smsMessage,socket);
       
   468 	TEST(submitPdu.RejectDuplicates() == EFalse);
       
   469     		
       
   470 	//set reject duplicates to true
       
   471 	submitPdu.SetRejectDuplicates(ETrue);
       
   472 	INFO_PRINTF1(_L("Try sending duplicate SMS when Reject Duplicate is True"));
       
   473 	SendSmsL(smsMessage,socket);
       
   474 	TEST(submitPdu.RejectDuplicates());
       
   475 	TEST(ETrue);
       
   476 
       
   477 	// Set reply path to False
       
   478     submitPdu.SetReplyPath(EFalse);
       
   479 	INFO_PRINTF1(_L("Try sending SMS when Reply Path is False"));    
       
   480 	SendSmsL(smsMessage,socket);
       
   481 	TEST(submitPdu.ReplyPath() == EFalse);
       
   482 
       
   483 	// Set reply path to True
       
   484     submitPdu.SetReplyPath(ETrue);
       
   485 	INFO_PRINTF1(_L("Try sending SMS when Reply Path is True"));    
       
   486 	SendSmsL(smsMessage,socket);
       
   487 	TEST(submitPdu.ReplyPath());
       
   488 	TEST(ETrue);
       
   489 
       
   490 	CleanupStack::PopAndDestroy(smsMessage);
       
   491 	
       
   492 	//Receive SMS
       
   493 	INFO_PRINTF1(_L("waiting for incoming SMS..."));
       
   494 	WaitForRecvL(socket);
       
   495 	smsMessage = RecvSmsL(socket);
       
   496 
       
   497 	INFO_PRINTF1(_L("incoming SMS") );
       
   498 
       
   499 	CleanupStack::PushL(smsMessage);
       
   500 
       
   501 	TestSmsContentsL(smsMessage,KTestMsg1);
       
   502 
       
   503 	CleanupStack::PopAndDestroy(3); // socket, socket2, smsMessage
       
   504 	CleanupStack::PopAndDestroy(&socketServer);
       
   505 
       
   506 	return TestStepResult() ;
       
   507 	}
       
   508 
       
   509 
       
   510 TVerdict CTestTxFailed::doTestStepL()
       
   511 /**
       
   512  *  Test sending an SMS, transmit will be failed with different error codes
       
   513  */
       
   514 	{
       
   515 	INFO_PRINTF1(_L("Test Tx an SMS, failed with different error codes"));
       
   516 
       
   517 	RSocketServ socketServer;
       
   518 	PrepareRegTestLC(socketServer, 3);
       
   519 
       
   520 	RSocket socket;
       
   521 	TInt ret;
       
   522 
       
   523 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   524 
       
   525 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
   526 
       
   527 	//Set destination and SC numbers
       
   528 	iTelephoneNumber=KPekka;
       
   529 	iServiceCenterNumber=KSoneraSC;
       
   530 
       
   531 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   532 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
   533 	CleanupStack::PushL(smsMessage);
       
   534 
       
   535 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   536 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   537 
       
   538 	//Try sending, Dummy Tsy returns RP-error
       
   539 	TInt i;
       
   540 	for (i=0; i <25; i++)
       
   541 		{
       
   542 		ret = SendSmsErrorL(smsMessage,socket);
       
   543 		}
       
   544 
       
   545 	//Try sending, Dummy Tsy returns RP-error with corrupted or wrong submit report PDU
       
   546 	for (i=0; i <2; i++)
       
   547 		{
       
   548 		ret = SendSmsErrorL(smsMessage,socket);
       
   549 		}
       
   550 
       
   551 	//Try sending, Dummy Tsy returns general error
       
   552 	for (i=0; i <3; i++)
       
   553 		{
       
   554 		ret = SendSmsErrorL(smsMessage,socket);
       
   555 		}
       
   556 
       
   557 	//Try sending, check expected error code
       
   558 	ret = SendSmsErrorL(smsMessage,socket);
       
   559 	TEST(ret== KErrGsmSMSMemCapacityExceeded);
       
   560 
       
   561 
       
   562 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
   563 	CleanupStack::PopAndDestroy(&socketServer);
       
   564 
       
   565 	return TestStepResult() ;
       
   566 	}
       
   567 
       
   568 
       
   569 TVerdict CTestMatchingToObserver::doTestStepL()
       
   570 /**
       
   571  *  Test a simple Receive of a single TPDU containing a simple text
       
   572  */
       
   573 	{
       
   574 	INFO_PRINTF1(_L("Test Messages matching to correct observer"));
       
   575 
       
   576 	RSocketServ socketServer;
       
   577 	PrepareRegTestLC(socketServer, 4);
       
   578 
       
   579 	RSocket socket1;
       
   580 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket1,ESmsAddrRecvAny);
       
   581 
       
   582 	RSocket socket2;
       
   583 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket2,ESmsAddrSendOnly);
       
   584 
       
   585 	_LIT(KTestMsg1,"test message, 8bits, length 30"); //8 bits test message, length 30 chars
       
   586 	_LIT(KTestMsg2,"test message, length 23"); //7 bits test message, length 23 characters
       
   587 
       
   588 	TBuf8<128> match;
       
   589 	match.Copy(KTestMsg2);
       
   590 
       
   591 	RSocket socket3;
       
   592 	TInt ret=socket3.Open(socketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol);
       
   593 	TEST(ret == KErrNone);
       
   594 	CleanupClosePushL(socket3);
       
   595 
       
   596 	TSmsAddr smsaddr;
       
   597 	smsaddr.SetSmsAddrFamily(ESmsAddrMatchText);
       
   598 	smsaddr.SetTextMatch(_L8("test message, len"));
       
   599 	ret=socket3.Bind(smsaddr);
       
   600 	TEST(ret == KErrNone);
       
   601 
       
   602 	smsaddr.SetTextMatch(_L8("test message, 8bi"));
       
   603 	ret=socket1.Bind(smsaddr);
       
   604 	TEST(ret == KErrNone);
       
   605 
       
   606 //
       
   607 	//Set destination and SC numbers
       
   608 	iTelephoneNumber=KPekka;
       
   609 	iServiceCenterNumber=KRadiolinjaSC;
       
   610 
       
   611 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
   612 	CSmsMessage* smsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
   613 	CleanupStack::PushL(smsMessage);
       
   614 
       
   615 	INFO_PRINTF2(_L("Destination number:..... %S"), &iTelephoneNumber);
       
   616 	INFO_PRINTF2(_L("ServiceCenter number:... %S"), &iServiceCenterNumber);
       
   617 
       
   618 	//Send SMS
       
   619 	SendSmsL(smsMessage,socket2);
       
   620 
       
   621 	CleanupStack::PopAndDestroy(smsMessage);
       
   622 
       
   623 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
   624 
       
   625 	//Set receiving status report to socket2
       
   626 	TSmsAddr smsaddr2;
       
   627 
       
   628 	//ESmsAddrStatusReport
       
   629 	smsaddr2.SetSmsAddrFamily(ESmsAddrStatusReport);
       
   630 	ret=socket2.Bind(smsaddr2);
       
   631 	TEST(ret == KErrNone);
       
   632 
       
   633 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
   634 
       
   635 	smsMessage = RecvSmsL(socket3);
       
   636 	INFO_PRINTF1(_L("incoming SMS") );
       
   637 
       
   638 	CleanupStack::PushL(smsMessage);
       
   639 
       
   640 	TestSmsContentsL(smsMessage,KTestMsg2);
       
   641 
       
   642 	CleanupStack::PopAndDestroy(smsMessage);
       
   643 
       
   644 //Receive a message to socket1
       
   645 	smsMessage = RecvSmsL(socket1);
       
   646 
       
   647 	INFO_PRINTF1(_L("incoming SMS") );
       
   648 
       
   649 	CleanupStack::PushL(smsMessage);
       
   650 
       
   651 	TestSmsContentsL(smsMessage,KTestMsg1);
       
   652 
       
   653 	CleanupStack::PopAndDestroy(smsMessage);
       
   654 
       
   655 //Receive a status report message to socket2
       
   656 
       
   657 	smsMessage = RecvSmsL(socket2);
       
   658 
       
   659 	INFO_PRINTF1(_L("incoming SMS") );
       
   660 
       
   661 	//Check the status report
       
   662 
       
   663 	CleanupStack::PushL(smsMessage);
       
   664 	if (smsMessage->Type()==CSmsPDU::ESmsStatusReport)
       
   665 		{
       
   666 		INFO_PRINTF1(_L("Received status report"));
       
   667 		TSmsServiceCenterAddress telephoneNumber=smsMessage->ToFromAddress();
       
   668 		TEST(telephoneNumber==KPekka);
       
   669 		INFO_PRINTF2(_L("Message delivered to %S"),&telephoneNumber);
       
   670 		}
       
   671 
       
   672 	CleanupStack::PopAndDestroy(4); // socket1, socket2, socket3, smsMessage
       
   673 	CleanupStack::PopAndDestroy(&socketServer);
       
   674 
       
   675 	return TestStepResult() ;
       
   676 	}
       
   677 
       
   678 
       
   679 TVerdict CTestCommandMessages::doTestStepL()
       
   680 /**
       
   681  *  Test first transmit of a message, then send Command message to enable status reporting to previously sent
       
   682  *  message and then receive a status report when previously sent message is delivered to recipient.
       
   683  */
       
   684 	{
       
   685 	INFO_PRINTF1(_L("Test Command messages"));
       
   686 
       
   687 	RSocketServ socketServer;
       
   688 	PrepareRegTestLC(socketServer, 5);
       
   689 
       
   690 	RSocket socket;
       
   691 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   692 
       
   693 	_LIT(KTest7bitMsg,"test message, length 23"); //7 bits test message, length 23 characters
       
   694 
       
   695 	//Set destination and SC numbers
       
   696 	iTelephoneNumber=KPekka;
       
   697 	iServiceCenterNumber=KSoneraSC;
       
   698 
       
   699 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
   700 	CSmsMessage* smsMessage=CreateSmsMessageL(KTest7bitMsg,alphabet);
       
   701 	CleanupStack::PushL(smsMessage);
       
   702 
       
   703 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   704 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   705 
       
   706 	//Send the message
       
   707 	INFO_PRINTF1(_L("Sending a message..."));
       
   708 	SendSmsL(smsMessage,socket);
       
   709 
       
   710 	//Send the command message
       
   711 	//Enable status report request
       
   712 	CSmsBuffer* buffer=CSmsBuffer::NewL();
       
   713 	CSmsMessage* smsCommand=CSmsMessage::NewL(iFs, CSmsPDU::ESmsCommand, buffer);
       
   714 	CleanupStack::PushL(smsCommand);
       
   715 	smsCommand->SetToFromAddressL(smsMessage->ToFromAddress());
       
   716 	smsCommand->SetServiceCenterAddressL(smsMessage->ServiceCenterAddress());
       
   717 	smsCommand->SetTime(smsMessage->Time());
       
   718 	CSmsCommand& command=(CSmsCommand&) smsCommand->SmsPDU();
       
   719 	command.SetCommandType(TSmsCommandType::ESmsCommandTypeEnableStatusReportRequest);
       
   720 
       
   721 	//Set status report request for Command message
       
   722 	CSmsSubmit& submitPdu=(CSmsSubmit&)smsCommand->SmsPDU();
       
   723 	submitPdu.SetStatusReportRequest(EFalse);
       
   724 
       
   725 	INFO_PRINTF1(_L("Sending command message..."));
       
   726 	SendCommandSmsL(smsCommand, socket);
       
   727 	CleanupStack::PopAndDestroy(smsCommand);
       
   728 
       
   729 	//Receive status report
       
   730 	TSmsServiceCenterAddress telephoneNumber;
       
   731 	telephoneNumber.Copy( KPekka );
       
   732 	RecvStatusReportL(telephoneNumber, socket);
       
   733 
       
   734 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
   735     CleanupStack::PopAndDestroy(&socketServer);
       
   736 
       
   737 	return TestStepResult() ;
       
   738 	}
       
   739 
       
   740 
       
   741 TVerdict CTestSimpleRx::doTestStepL()
       
   742 /**
       
   743  *  Test a simple Receive of a single TPDU containing a simple text
       
   744  */
       
   745 	{
       
   746 	INFO_PRINTF1(_L("Test Simple Rx SMS with Client ACK"));
       
   747 
       
   748 	RSocketServ socketServer;
       
   749 	PrepareRegTestLC(socketServer, 6);
       
   750 
       
   751 	RSocket socket;
       
   752 	TSmsAddr smsaddr;
       
   753 	smsaddr.SetSmsAddrFamily(ESmsAddrMatchText);
       
   754 	smsaddr.SetTextMatch(_L8("test message, 8b"));
       
   755 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socket, smsaddr);
       
   756 
       
   757 	RSocket socketRecvAny;
       
   758 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socketRecvAny, ESmsAddrRecvAny);
       
   759 
       
   760 	INFO_PRINTF1(_L("waiting for incoming SMS No. 1...") );
       
   761 	WaitForRecvL(socket);
       
   762 	CSmsMessage* smsMessage = RecvSmsFailedL(socket);
       
   763 
       
   764 	INFO_PRINTF1(_L("incoming SMS") );
       
   765 
       
   766 	CleanupStack::PushL(smsMessage);
       
   767 
       
   768 	_LIT(KTestMsg1,"Test message, 8bits, length 30");
       
   769 	TestSmsContentsL(smsMessage,KTestMsg1);
       
   770 
       
   771 	CleanupStack::PopAndDestroy(smsMessage);
       
   772 
       
   773 	INFO_PRINTF1(_L("waiting for incoming SMS No. 2...") );
       
   774 	WaitForRecvL(socketRecvAny);
       
   775 	smsMessage = RecvSmsFailedL(socketRecvAny);
       
   776 
       
   777 	INFO_PRINTF1(_L("incoming SMS") );
       
   778 
       
   779 	CleanupStack::PushL(smsMessage);
       
   780 
       
   781 	_LIT(KTestMsg2,"Sest message, 8bits, length 30");
       
   782 	TestSmsContentsL(smsMessage,KTestMsg2);
       
   783 
       
   784 	CleanupStack::PopAndDestroy(3); // socket, socketRecvAny, smsMessage
       
   785     CleanupStack::PopAndDestroy(&socketServer);
       
   786 
       
   787 	return TestStepResult() ;
       
   788 	}
       
   789 
       
   790 
       
   791 TVerdict CTest7bitMessTest::doTestStepL()
       
   792 /**
       
   793  *  Test a simple Transmit and Receive of a single TPDU containing a single character
       
   794  */
       
   795 	{
       
   796 	INFO_PRINTF1(_L("Test Tx and Rx 7 bit SMS with Client ACK"));
       
   797 
       
   798 	RSocketServ socketServer;
       
   799 	PrepareRegTestLC(socketServer, 7);
       
   800 
       
   801 	RSocket socket;
       
   802 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   803 
       
   804 	_LIT(KTest7bitMsg,"test message, length 23"); //7 bits test message, length 23 characters
       
   805 	//Set destination and SC numbers
       
   806 	iTelephoneNumber=KPekka;
       
   807 	iServiceCenterNumber=KSoneraSC;
       
   808 
       
   809 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
   810 	CSmsMessage* smsMessage=CreateSmsMessageL(KTest7bitMsg,alphabet);
       
   811 	CleanupStack::PushL(smsMessage);
       
   812 
       
   813 	//Set status report request
       
   814 	CSmsSubmit& submitPdu=(CSmsSubmit&)smsMessage->SmsPDU();
       
   815 	submitPdu.SetStatusReportRequest(ETrue);
       
   816 
       
   817 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
   818 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
   819 
       
   820 	//Send the message
       
   821 	SendSmsL(smsMessage,socket);
       
   822 	CleanupStack::PopAndDestroy(smsMessage);
       
   823 
       
   824 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
   825 	WaitForRecvL(socket);
       
   826 	smsMessage = RecvSmsL(socket);
       
   827 
       
   828 	INFO_PRINTF1(_L("incoming SMS") );
       
   829 
       
   830 	CleanupStack::PushL(smsMessage);
       
   831 	TestSmsContentsL(smsMessage,KTest7bitMsg);
       
   832 
       
   833 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
   834     CleanupStack::PopAndDestroy(&socketServer);
       
   835 
       
   836 	return TestStepResult() ;
       
   837 	}
       
   838 
       
   839 
       
   840 TVerdict CTestClassMessages::doTestStepL()
       
   841 /**
       
   842  *  Test Send and receive messages of different classes
       
   843  *  TODO - why do I have to send a class 2 sms before the class 1 and 3 sms
       
   844  */
       
   845     {
       
   846 
       
   847     INFO_PRINTF1(_L("Send and receive messages with different classes"));
       
   848 
       
   849 	RSocketServ socketServer;
       
   850 	PrepareRegTestLC(socketServer, 8);
       
   851 	
       
   852 	RSocket socket;
       
   853 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   854 
       
   855 	iTelephoneNumber=KPekka;
       
   856 	iServiceCenterNumber=KSoneraSC;
       
   857 
       
   858 	INFO_PRINTF1(_L("Sending message..."));
       
   859 	TTestCase Class0msg(_L("Class 0 message"));
       
   860     Class0msg.SetSmsClass(TSmsDataCodingScheme::ESmsClass0);
       
   861     SendAndRecvTestMessageL(Class0msg,socket);
       
   862 
       
   863     TTestCase Class2msg(_L("Class 2 message"));
       
   864     Class2msg.SetSmsClass(TSmsDataCodingScheme::ESmsClass2);
       
   865     SendAndRecvTestMessageL(Class2msg,socket);
       
   866 
       
   867 	INFO_PRINTF1(_L("Sending message..."));
       
   868     TTestCase Class1msg(_L("Class 1 message"));
       
   869     Class1msg.SetSmsClass(TSmsDataCodingScheme::ESmsClass1);
       
   870     SendAndRecvTestMessageL(Class1msg,socket);
       
   871 
       
   872 	INFO_PRINTF1(_L("Sending message..."));
       
   873     TTestCase Class3msg(_L("Class 3 message"));
       
   874     Class3msg.SetSmsClass(TSmsDataCodingScheme::ESmsClass3);
       
   875     SendAndRecvTestMessageL(Class3msg,socket);
       
   876 
       
   877 	CleanupStack::PopAndDestroy(&socket);
       
   878     CleanupStack::PopAndDestroy(&socketServer);
       
   879 
       
   880 	return TestStepResult() ;
       
   881 	}
       
   882 
       
   883 
       
   884 TVerdict CTestRxConcatenated::doTestStepL()
       
   885 /**
       
   886  *  Test reception of a concatenated SMS message spanning 3 TPDUs
       
   887  *  with the TSY requiring the SMS Stack to ACK each TPDU
       
   888  */
       
   889 	{
       
   890 	INFO_PRINTF1(_L("Test Rx Three Part Concatenated Message"));
       
   891 
       
   892 	RSocketServ socketServer;
       
   893 	PrepareRegTestLC(socketServer, 9);
       
   894 
       
   895 	RSocket socket;
       
   896 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   897 
       
   898 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
   899 	WaitForRecvL(socket);
       
   900 	CSmsMessage* smsMessage = RecvSmsL(socket);
       
   901 	CleanupStack::PushL(smsMessage);
       
   902 	INFO_PRINTF1(_L("incoming SMS") );
       
   903 
       
   904 	_LIT(KLongText,"3 PDU test SMS message. "
       
   905 L"3 PDU test SMS message. "
       
   906 L"3 PDU test SMS message. "
       
   907 L"3 PDU test SMS message. "
       
   908 L"3 PDU test SMS message. "
       
   909 L"3 PDU test SMS message. "
       
   910 L"3 PDU test SMS message. "
       
   911 L"3 PDU test SMS message. "
       
   912 L"3 PDU test SMS message. "
       
   913 L"3 PDU test SMS message. "
       
   914 L"3 PDU test SMS message. "
       
   915 L"3 PDU test SMS message. "
       
   916 L"3 PDU test SMS message. "
       
   917 L"3 PDU test SMS message. "
       
   918 L"3 PDU test SMS message. "
       
   919 L"3 PDU test SMS message. "
       
   920 L"3 PDU test SMS message. "
       
   921 L"The End.");
       
   922 	TestSmsContentsL(smsMessage,KLongText);
       
   923 
       
   924 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
   925     CleanupStack::PopAndDestroy(&socketServer);
       
   926 
       
   927 	return TestStepResult() ;
       
   928 	}
       
   929 
       
   930 
       
   931 TVerdict CTestRxDuplicate::doTestStepL()
       
   932 /**
       
   933  *  Test reception of a concatenated SMS message spanning 3 TPDUs
       
   934  *  with the TSY requiring the SMS Stack to ACK each TPDU, where the second
       
   935  *  PDU is repeated even though correctly ACKed by the SMS Stack.
       
   936  */
       
   937 	{
       
   938 	INFO_PRINTF1(_L("Test Rx Three Part Concatenated Message with 2nd TPDU Duplicated"));
       
   939 
       
   940 	RSocketServ socketServer;
       
   941 	PrepareRegTestLC(socketServer, 10);
       
   942 
       
   943 	RSocket socket;
       
   944 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   945 
       
   946 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
   947 	WaitForRecvL(socket);
       
   948 	CSmsMessage* smsMessage = RecvSmsL(socket);
       
   949 	CleanupStack::PushL(smsMessage);
       
   950 	INFO_PRINTF1(_L("incoming SMS") );
       
   951 
       
   952 	_LIT(KLongText,"3 PDU test SMS message. "
       
   953 L"3 PDU test SMS message. "
       
   954 L"3 PDU test SMS message. "
       
   955 L"3 PDU test SMS message. "
       
   956 L"3 PDU test SMS message. "
       
   957 L"3 PDU test SMS message. "
       
   958 L"3 PDU test SMS message. "
       
   959 L"3 PDU test SMS message. "
       
   960 L"3 PDU test SMS message. "
       
   961 L"3 PDU test SMS message. "
       
   962 L"3 PDU test SMS message. "
       
   963 L"3 PDU test SMS message. "
       
   964 L"3 PDU test SMS message. "
       
   965 L"3 PDU test SMS message. "
       
   966 L"3 PDU test SMS message. "
       
   967 L"3 PDU test SMS message. "
       
   968 L"3 PDU test SMS message. "
       
   969 L"The End.");
       
   970 	TestSmsContentsL(smsMessage,KLongText);
       
   971 
       
   972 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
   973     CleanupStack::PopAndDestroy(&socketServer);
       
   974 
       
   975 	return TestStepResult() ;
       
   976 	}
       
   977 
       
   978 
       
   979 TVerdict CTestRxRingToneA::doTestStepL()
       
   980 /**
       
   981  *  Test reception of a concatenated SMS Ringing Tone message spanning 3 TPDUs
       
   982  *  with the TSY requiring the SMS Stack to ACK each TPDU.
       
   983  */
       
   984 	{
       
   985 	INFO_PRINTF1(_L("Test Rx Three Part Concatenated SMS Ringing Tone Message"));
       
   986 
       
   987 	RSocketServ socketServer;
       
   988 	PrepareRegTestLC(socketServer, 11);
       
   989 
       
   990 	RSocket socket;
       
   991 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
   992 
       
   993 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
   994 	WaitForRecvL(socket);
       
   995 	CSmsMessage* smsMessage = RecvSmsL(socket);
       
   996 	CleanupStack::PushL(smsMessage);
       
   997 	INFO_PRINTF1(_L("incoming SMS") );
       
   998 
       
   999 	const TUint16 KRingingTonePDUA[]= {
       
  1000 	0x02, 0x4A, 0x3A, 0x75, 0x09, 0x85, 0x91, 0xA5, 0xB9, 0x95,
       
  1001 	0xC9, 0xA5, 0x95, 0x0D, 0xBD, 0xC1, 0xE4, 0x04, 0x01, 0xD5,
       
  1002 	0x28, 0x61, 0x0A, 0x32, 0xC2, 0xCC, 0x22, 0x82, 0xCC, 0x22,
       
  1003 	0xC4, 0x99, 0x42, 0x88, 0xB1, 0x26, 0x58, 0x58, 0x84, 0x58,
       
  1004 	0x59, 0x86, 0x58, 0x59, 0x86, 0x18, 0x59, 0x86, 0x18, 0x59,
       
  1005 	0x85, 0x58, 0x61, 0x86, 0xD8, 0x61, 0x86, 0x50, 0x59, 0x0A,
       
  1006 	0x2C, 0x83, 0x2C, 0x2C, 0xC2, 0x28, 0x2C, 0xC2, 0x2C, 0x49,
       
  1007 	0x94, 0x28, 0x8B, 0x12, 0x65, 0x85, 0x88, 0x65, 0x86, 0x18,
       
  1008 	0x65, 0x06, 0x58, 0x61, 0x86, 0x50, 0xA2, 0xCD, 0x49, 0x96,
       
  1009 	0x9B, 0x89, 0x94, 0x18, 0x42, 0x88, 0xB1, 0x27, 0x18, 0xA2,
       
  1010 	0x28, 0x22, 0xC4, 0x9C, 0x62, 0x88, 0xB4, 0xCA, 0x08, 0xA0,
       
  1011 	0x9C, 0x08, 0xA1, 0x27, 0x10, 0x61, 0x8A, 0x22, 0xC2, 0x8C,
       
  1012 	0x22, 0xC2, 0x6C, 0x22, 0xC2, 0x6C, 0x22, 0xC4, 0x9C, 0x62,
       
  1013 	0x89, 0xB0, 0xB3, 0x09, 0xB0, 0xA3, 0x09, 0xB0, 0x8B, 0x12,
       
  1014 	0x71, 0x8A, 0x22, 0xC2, 0x8C, 0x22, 0xC4, 0x9C, 0x62, 0x88,
       
  1015 	0xB0, 0xB3, 0x08, 0xB1, 0x27, 0x18, 0xA2, 0x2C, 0x30, 0xC2,
       
  1016 	0x2C, 0x49, 0xC6, 0x28, 0x8B, 0x0C, 0xB0, 0x8B, 0x12, 0x71,
       
  1017 	0x8A, 0x22, 0xC3, 0x2C, 0x30, 0xC2, 0xCC, 0x30, 0xC2, 0x8C,
       
  1018 	0x26, 0xC2, 0x2C, 0x28, 0xC2, 0x70, 0x26, 0xC2, 0x2C, 0x22,
       
  1019 	0x84, 0x10, 0x42, 0x88, 0xA0, 0xA3, 0x08, 0xB1, 0x26, 0x10,
       
  1020 	0xA2, 0x2C, 0x49, 0x86, 0x14, 0x41, 0x86, 0x14, 0x61, 0x12,
       
  1021 	0x17, 0x41, 0x64, 0x1B, 0x41, 0xA6, 0x28, 0x8B, 0x0A, 0x20,
       
  1022 	0x93, 0x08, 0xB0, 0x92, 0x12, 0x6D, 0x0A, 0x24, 0x82, 0xCC,
       
  1023 	0x24, 0xC4, 0x9B, 0x42, 0x89, 0x21, 0x26, 0x10, 0x6D, 0x86,
       
  1024 	0x18, 0x50, 0x86, 0x58, 0xA2, 0x2C, 0x49, 0x96, 0x1B, 0x61,
       
  1025 	0x96, 0x1B, 0x61, 0x96, 0x18, 0x61,	0xB6, 0x28, 0x93, 0x12,
       
  1026 	0x6D, 0x8A, 0x22, 0xC4, 0x9B, 0x61, 0x96, 0x18, 0x61, 0x96,
       
  1027 	0x28, 0x8B, 0x12, 0x65, 0x86, 0x18, 0x65, 0x8A, 0x24, 0xC4,
       
  1028 	0x99, 0x61, 0x86, 0x19, 0x62, 0x8A, 0x31, 0x26, 0x58, 0x61,
       
  1029 	0x86, 0x58, 0xA2, 0xCC, 0x49, 0x96, 0x18, 0x61, 0x96, 0x28,
       
  1030 	0xB3, 0x0A, 0x30, 0x93, 0x0A, 0x30, 0x8B, 0x12, 0x6D, 0x86,
       
  1031 	0x18, 0xA2, 0x2D, 0x49, 0xB8, 0x1B, 0x61, 0x96, 0x19, 0x28 };
       
  1032 
       
  1033 	TPtrC ringingTonePDUA(KRingingTonePDUA,sizeof(KRingingTonePDUA)/sizeof(TUint16));
       
  1034 	TestSmsContentsL(smsMessage,ringingTonePDUA);
       
  1035 
       
  1036 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
  1037     CleanupStack::PopAndDestroy(&socketServer);
       
  1038 
       
  1039 	return TestStepResult() ;
       
  1040 	}
       
  1041 
       
  1042 
       
  1043 TVerdict CTestTxRxConcatenated::doTestStepL()
       
  1044 /**
       
  1045  *  Test transmition and reception of a concatenated SMS message spanning 3 TPDUs
       
  1046  */
       
  1047 
       
  1048 	{
       
  1049 	INFO_PRINTF1(_L("Test Tx and Rx SMS with 3 PDU message"));
       
  1050 
       
  1051 	RSocketServ socketServer;
       
  1052 	PrepareRegTestLC(socketServer, 12);
       
  1053 
       
  1054 	RSocket socket;
       
  1055 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  1056 
       
  1057 	_LIT(KLongText,"3 PDU test SMS message. "
       
  1058 L"3 PDU test SMS message. "
       
  1059 L"3 PDU test SMS message. "
       
  1060 L"3 PDU test SMS message. "
       
  1061 L"3 PDU test SMS message. "
       
  1062 L"3 PDU test SMS message. "
       
  1063 L"3 PDU test SMS message. "
       
  1064 L"3 PDU test SMS message. "
       
  1065 L"3 PDU test SMS message. "
       
  1066 L"3 PDU test SMS message. "
       
  1067 L"3 PDU test SMS message. "
       
  1068 L"3 PDU test SMS message. "
       
  1069 L"3 PDU test SMS message. "
       
  1070 L"3 PDU test SMS message. "
       
  1071 L"3 PDU test SMS message. "
       
  1072 L"3 PDU test SMS message. "
       
  1073 L"3 PDU test SMS message. "
       
  1074 L"The End.");
       
  1075 
       
  1076 	//Set destination and SC numbers
       
  1077 	iTelephoneNumber=KRegTestNumber;
       
  1078 	iServiceCenterNumber=KVodafoneSC;
       
  1079 
       
  1080 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;//changed to 7 bits
       
  1081 //	CSmsMessage* smsMessage=CreateSmsMessageL(KLongText,alphabet);
       
  1082 	CSmsMessage* smsMessage=CreateSmsWithStatusReportReqL(KLongText,alphabet);
       
  1083 
       
  1084 	CleanupStack::PushL(smsMessage);
       
  1085 	SendSmsL(smsMessage,socket);
       
  1086 	CleanupStack::PopAndDestroy(smsMessage);
       
  1087 
       
  1088 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  1089 	WaitForRecvL(socket);
       
  1090 	smsMessage = RecvSmsL(socket);
       
  1091 
       
  1092 	INFO_PRINTF1(_L("incoming SMS"));
       
  1093 
       
  1094 	CleanupStack::PushL(smsMessage);
       
  1095 	TestSmsContentsL(smsMessage,KLongText);
       
  1096 	CleanupStack::PopAndDestroy(smsMessage);
       
  1097 
       
  1098 	TSmsServiceCenterAddress telephoneNumber;
       
  1099 	telephoneNumber.Copy( KRegTestNumber );
       
  1100 	RecvStatusReportL(telephoneNumber, socket);
       
  1101 
       
  1102 	// TX & RX 8 bit conc msg
       
  1103 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  1104 	smsMessage=CreateSmsMessageL(KLongText,alphabet);
       
  1105 
       
  1106 	CleanupStack::PushL(smsMessage);
       
  1107 	SendSmsL(smsMessage,socket);
       
  1108 	CleanupStack::PopAndDestroy(smsMessage);
       
  1109 
       
  1110 	INFO_PRINTF1(_L("waiting for incoming SMS..."));
       
  1111 	WaitForRecvL(socket);
       
  1112 	smsMessage = RecvSmsL(socket);
       
  1113 
       
  1114 	INFO_PRINTF1(_L("incoming SMS") );
       
  1115 
       
  1116 	CleanupStack::PushL(smsMessage);
       
  1117 	TestSmsContentsL(smsMessage,KLongText);
       
  1118 	CleanupStack::PopAndDestroy(smsMessage);
       
  1119 
       
  1120 	// TX & RX 16 bit conc msg
       
  1121 	_LIT(KLongText2,"3 PDU test SMS message. "
       
  1122 L"3 PDU test SMS message. "
       
  1123 L"3 PDU test SMS message. "
       
  1124 L"3 PDU test SMS message. "
       
  1125 L"3 PDU test SMS message. "
       
  1126 L"The End.");
       
  1127 
       
  1128 	alphabet=TSmsDataCodingScheme::ESmsAlphabetUCS2;
       
  1129 	smsMessage=CreateSmsMessageL(KLongText2,alphabet);
       
  1130 
       
  1131 	CleanupStack::PushL(smsMessage);
       
  1132 	SendSmsL(smsMessage,socket);
       
  1133 	CleanupStack::PopAndDestroy(smsMessage);
       
  1134 
       
  1135 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  1136 	WaitForRecvL(socket);
       
  1137 	smsMessage = RecvSmsL(socket);
       
  1138 
       
  1139 	INFO_PRINTF1(_L("incoming SMS"));
       
  1140 
       
  1141 	CleanupStack::PushL(smsMessage);
       
  1142 	TestSmsContentsL(smsMessage,KLongText2);
       
  1143 
       
  1144 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
  1145     CleanupStack::PopAndDestroy(&socketServer);
       
  1146 
       
  1147 	return TestStepResult();
       
  1148 	}
       
  1149 
       
  1150 
       
  1151 TVerdict CTestParamStorage::doTestStepL()
       
  1152 /**
       
  1153  *  Test retrieving and storing the sms parameters
       
  1154  */
       
  1155 	{
       
  1156 	INFO_PRINTF1(_L("Test the parameter storage"));
       
  1157 
       
  1158 	RSocketServ socketServer;
       
  1159 	PrepareRegTestLC(socketServer, 13);
       
  1160 
       
  1161 	TInt ret(KErrNone);
       
  1162     TRequestStatus status;
       
  1163 
       
  1164 //
       
  1165 // Retrieve SMS parameters
       
  1166 //
       
  1167 	// Open the socket for SIM operations
       
  1168 	RSocket socket;
       
  1169 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  1170 
       
  1171     RSmsSocketReadStream readstream(socket);
       
  1172 
       
  1173 	//Create the smspList
       
  1174 	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
       
  1175 	CleanupStack::PushL(smspList);
       
  1176 
       
  1177 	INFO_PRINTF1(_L("waiting 2 secs for smsprot to load"));
       
  1178 	User::After(2000000);
       
  1179 
       
  1180     // Make read SMS params request to the SMS Stack.
       
  1181     socket.Ioctl(KIoctlReadSmsParams,status,NULL, KSolSmsProv);
       
  1182     INFO_PRINTF1(_L("waiting for SMS parameters..."));
       
  1183     User::WaitForRequest(status);
       
  1184 	TEST(status.Int() == KErrNone);
       
  1185 
       
  1186     // Read list from stream and make acknowledgement to the SMS Stack
       
  1187     readstream >> *smspList;
       
  1188     socket.Ioctl(KIoctlCompleteReadSmsParams, status, NULL,KSolSmsProv);
       
  1189     User::WaitForRequest(status);
       
  1190 	TEST(status.Int() == KErrNone);
       
  1191 
       
  1192 	CleanupStack::PopAndDestroy(smspList);
       
  1193 
       
  1194 //
       
  1195 // Store SMS parameters
       
  1196 //
       
  1197 	smspList=CMobilePhoneSmspList::NewL();
       
  1198 	CleanupStack::PushL(smspList);
       
  1199 
       
  1200 	RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy;
       
  1201 
       
  1202 	entryToTsy.iText = DMMTSY_SMSP_STORE_TEXT1;
       
  1203 	entryToTsy.iValidParams = DMMTSY_SMSP_STORE_VALID_PARAMS1;
       
  1204     entryToTsy.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TON_0;
       
  1205     entryToTsy.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_DESTINATION_NP_0;
       
  1206 	entryToTsy.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TEL_NUMBER_0;
       
  1207 	entryToTsy.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY1;
       
  1208     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_1;
       
  1209     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_1;
       
  1210 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_1;
       
  1211 	entryToTsy.iProtocolId = DMMTSY_SMSP_STORE_PID1;
       
  1212 	entryToTsy.iDcs = DMMTSY_SMSP_STORE_DCS1;
       
  1213 
       
  1214     // Add 6 entries to the list
       
  1215 	TInt i = 0;
       
  1216 
       
  1217     for(i=0; i<6; i++)
       
  1218 		{
       
  1219         entryToTsy.iIndex = i;
       
  1220 	    smspList->AddEntryL(entryToTsy);
       
  1221 		}
       
  1222 
       
  1223     INFO_PRINTF1(_L("storing the SMS parameters..."));
       
  1224 
       
  1225     // Write parameter list to the stream and make write SMS parameters request to the SMS Stack.
       
  1226     ret = iSmsStackTestUtils->StoreParamsL(*smspList,socket,EFalse);
       
  1227     TEST_CHECKL(ret,KErrArgument,_L("Status values doesn't match"));
       
  1228 
       
  1229     // Writing failed because SIM tsy's SMS parameter store can contain only 5 SMSP sets.
       
  1230 
       
  1231     // Delete one entry from SMSP list and try to write the list again.
       
  1232     smspList->DeleteEntryL(5);
       
  1233 
       
  1234     ret = iSmsStackTestUtils->StoreParamsL(*smspList,socket,EFalse);
       
  1235 	TEST(ret == KErrNone);
       
  1236 
       
  1237 //
       
  1238 // Retrieve SMS parameters again
       
  1239 //
       
  1240 	CMobilePhoneSmspList* smspList2=CMobilePhoneSmspList::NewL();
       
  1241 	CleanupStack::PushL(smspList2);
       
  1242 
       
  1243     // Test first canceling of Read SMS Parameters request
       
  1244     socket.Ioctl(KIoctlReadSmsParams,status,NULL,KSolSmsProv);
       
  1245     socket.CancelIoctl();
       
  1246     User::WaitForRequest(status);
       
  1247 
       
  1248 		// originl code was
       
  1249 	// GLOBAL_CHECKPOINT_CODE(status.Int());
       
  1250 	// thus always assumes that the cancelling will be missed,
       
  1251 	// but with the change due defect (DEF40029) to smsppara.cpp,
       
  1252 	// see CSmsReadParams::Start this however is not true.
       
  1253 	TEST_CHECKL(status.Int(),KErrCancel,_L("Status values doesn't match"));
       
  1254 
       
  1255 
       
  1256 	// Now read SMS parameters
       
  1257 	socket.Ioctl(KIoctlReadSmsParams,status,NULL,KSolSmsProv);
       
  1258 	INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  1259 	User::WaitForRequest(status);
       
  1260 	TEST(status.Int() == KErrNone);
       
  1261 
       
  1262 	// Read list from stream and make acknowledgement to the SMS Stack
       
  1263 	readstream >> *smspList2;
       
  1264 	socket.Ioctl(KIoctlCompleteReadSmsParams,status,NULL, KSolSmsProv);
       
  1265 	User::WaitForRequest(status);
       
  1266 	TEST(status.Int() == KErrNone);
       
  1267 
       
  1268 	ret = iSmsStackTestUtils->TestParameters(*smspList,*smspList2);
       
  1269 	TEST(ret == KErrNone);
       
  1270 
       
  1271 	CleanupStack::PopAndDestroy(2);	//smspList,smspList2
       
  1272 
       
  1273 //
       
  1274 // Store SMS parameters again
       
  1275 //
       
  1276 	smspList=CMobilePhoneSmspList::NewL();
       
  1277 	CleanupStack::PushL(smspList);
       
  1278 
       
  1279 	RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy2;
       
  1280 
       
  1281 	entryToTsy2.iText = DMMTSY_SMSP_STORE_TEXT2;
       
  1282 	entryToTsy2.iValidParams = DMMTSY_SMSP_STORE_VALID_PARAMS2;
       
  1283 	entryToTsy2.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_ORIGINATOR_TON_2;
       
  1284 	entryToTsy2.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_ORIGINATOR_NP_2;
       
  1285 	entryToTsy2.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_ORIGINATOR_TEL_NUMBER_2;
       
  1286 	entryToTsy2.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY2;
       
  1287 	entryToTsy2.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_2;
       
  1288 	entryToTsy2.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_2;
       
  1289 	entryToTsy2.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_2;
       
  1290 	entryToTsy2.iProtocolId = DMMTSY_SMSP_STORE_PID2;
       
  1291 	entryToTsy2.iDcs = DMMTSY_SMSP_STORE_DCS2;
       
  1292 
       
  1293 	// Add 5 entries to the list
       
  1294 	for(i=0; i<5; i++)
       
  1295 		{
       
  1296 		entryToTsy2.iIndex = i;
       
  1297 		smspList->AddEntryL(entryToTsy2);
       
  1298 		}
       
  1299 
       
  1300 	INFO_PRINTF1(_L("storing the SMS parameters...") );
       
  1301 
       
  1302 	// Test canceling of Write SMS Parameters request
       
  1303 	ret = iSmsStackTestUtils->StoreParamsL(*smspList,socket,ETrue);
       
  1304 	TEST_CHECKL(ret,KErrCancel,_L("Status values doesn't match"));
       
  1305 
       
  1306 	// Make Write SMS Parameters request
       
  1307 	ret = iSmsStackTestUtils->StoreParamsL(*smspList,socket,EFalse);
       
  1308 	TEST(ret == KErrNone);
       
  1309 
       
  1310 	CleanupStack::PopAndDestroy(2); // socket,smspList
       
  1311     CleanupStack::PopAndDestroy(&socketServer);
       
  1312 
       
  1313 	return TestStepResult();
       
  1314 	}
       
  1315 
       
  1316 
       
  1317 TVerdict CTestSmsStore::doTestStepL()
       
  1318 /**
       
  1319  *  Test Sms message storage
       
  1320  */
       
  1321 	{
       
  1322 	INFO_PRINTF1(_L("Test the SMS storage"));
       
  1323 
       
  1324 	RSocketServ socketServer;
       
  1325 	PrepareRegTestLC(socketServer, 14);
       
  1326 
       
  1327 	// Open the socket
       
  1328 	RSocket socket;
       
  1329 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  1330 
       
  1331 	// Enumerate messages
       
  1332 	RPointerArray<CSmsMessage> messages;
       
  1333 	CleanupResetAndDestroyPushL(messages);
       
  1334 	ReadSmsStoreL(socket, messages);
       
  1335 //	const TInt beforeCount = messages.Count();
       
  1336 
       
  1337 	const CSmsMessage* message = messages[0];
       
  1338 
       
  1339 	TInt ret = DeleteSmsL(*message, socket);
       
  1340 	TEST(ret == KErrNone);
       
  1341 
       
  1342 	//Try to delete the same message again!
       
  1343 	ret = DeleteSmsL(*message, socket);
       
  1344 	TEST(ret == KErrNone);
       
  1345 
       
  1346 	//Delete concatenated msg that has one pdu missing
       
  1347 	message = messages[2];
       
  1348 	ret = DeleteSmsL(*message, socket);
       
  1349 	TEST(ret == KErrNone);
       
  1350 
       
  1351 	messages.ResetAndDestroy();
       
  1352 
       
  1353 	// Create and store the message
       
  1354 	_LIT(KStoreMsg1,"SIM TEST MESSAGE 1");
       
  1355 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  1356 	CSmsMessage* smsmessage=CreateSmsMessageL(KStoreMsg1,alphabet);
       
  1357 	CleanupStack::PushL(smsmessage);
       
  1358 
       
  1359 	smsmessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  1360 	WriteSmsToSimL(*smsmessage, socket);
       
  1361 	CleanupStack::PopAndDestroy(smsmessage);
       
  1362 
       
  1363 	// Create and store another message
       
  1364 	_LIT(KStoreMsg2,"ME TEST MESSAGE 2");
       
  1365 	alphabet=TSmsDataCodingScheme::ESmsAlphabetUCS2;
       
  1366 	smsmessage=CreateSmsMessageL(KStoreMsg2,alphabet);
       
  1367 	CleanupStack::PushL(smsmessage);
       
  1368 
       
  1369 	smsmessage->SetStorage(CSmsMessage::ESmsPhoneStorage);
       
  1370 	WriteSmsToSimL(*smsmessage, socket);
       
  1371 
       
  1372 	CleanupStack::PopAndDestroy(smsmessage);
       
  1373 
       
  1374 	// Enumerate messages
       
  1375 	ReadSmsStoreL(socket, messages);
       
  1376 
       
  1377 	//Check that count of messages matches to supposed count
       
  1378 	TEST(messages.Count()==4);
       
  1379 
       
  1380 	CleanupStack::PopAndDestroy(&messages);
       
  1381 	CleanupStack::PopAndDestroy(&socket);
       
  1382     CleanupStack::PopAndDestroy(&socketServer);
       
  1383 
       
  1384 	return TestStepResult() ;
       
  1385 	}
       
  1386 
       
  1387 
       
  1388 TVerdict CTestSmsStoreList::doTestStepL()
       
  1389 /**
       
  1390  *  Test Sms message storage
       
  1391  */
       
  1392 	{
       
  1393 	INFO_PRINTF1(_L("Test the SMS storage - read SmsList"));
       
  1394 
       
  1395 	RSocketServ socketServer;
       
  1396 	PrepareRegTestLC(socketServer, 15);
       
  1397 
       
  1398 	// Open the socket for SIM operations
       
  1399 	RSocket socket;
       
  1400 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  1401 
       
  1402 	// Enumerate messages
       
  1403 	RPointerArray<CSmsMessage> messages;
       
  1404 	CleanupResetAndDestroyPushL(messages);
       
  1405 	ReadSmsStoreL(socket, messages);
       
  1406 //	const TInt beforeCount = messages.Count();
       
  1407 
       
  1408 	const CSmsMessage* message = messages[1];
       
  1409 
       
  1410 	TInt ret = DeleteSmsL(*message, socket);
       
  1411 	TEST(ret == KErrNone);
       
  1412 
       
  1413 	//Try to delete the same message again!
       
  1414 	ret = DeleteSmsL(*message, socket);
       
  1415 	TEST(ret == KErrNone);
       
  1416 
       
  1417 	//Delete concatenated msg that has one pdu duplicated
       
  1418 	message = messages[4];
       
  1419 	ret = DeleteSmsL(*message, socket);
       
  1420 	TEST(ret == KErrNone);
       
  1421 
       
  1422 	messages.ResetAndDestroy();
       
  1423 
       
  1424 	// Create and store the message
       
  1425 	_LIT(KStoreMsg1,"SIM TEST MESSAGE 1");
       
  1426 	iTelephoneNumber=KOther;
       
  1427 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  1428 	CSmsMessage* smsmessage=CreateSmsMessageL(KStoreMsg1,alphabet);
       
  1429 	smsmessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  1430 	smsmessage->SetStatus(NMobileSmsStore::EStoredMessageUnsent);
       
  1431 
       
  1432 	CleanupStack::PushL(smsmessage);
       
  1433 
       
  1434 	WriteSmsToSimL(*smsmessage, socket);
       
  1435 	CleanupStack::PopAndDestroy(smsmessage);
       
  1436 
       
  1437 	// Create and store another message
       
  1438 	_LIT(KStoreMsg2,"COMB TEST MESSAGE 2");
       
  1439 	alphabet=TSmsDataCodingScheme::ESmsAlphabetUCS2;
       
  1440 	smsmessage=CreateSmsMessageL(KStoreMsg2,alphabet);
       
  1441 	smsmessage->SetStorage(CSmsMessage::ESmsCombinedStorage);
       
  1442 	smsmessage->SetStatus(NMobileSmsStore::EStoredMessageUnsent);
       
  1443 
       
  1444 	CleanupStack::PushL(smsmessage);
       
  1445 
       
  1446 	WriteSmsToSimL(*smsmessage, socket);
       
  1447 	CleanupStack::PopAndDestroy(smsmessage);
       
  1448 
       
  1449 	// Create and store third message
       
  1450 	_LIT(KStoreMsg3,"ME TEST MESSAGE 3");
       
  1451 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  1452 	smsmessage=CreateSmsMessageL(KStoreMsg3,alphabet);
       
  1453 	smsmessage->SetStorage(CSmsMessage::ESmsPhoneStorage);
       
  1454 	smsmessage->SetStatus(NMobileSmsStore::EStoredMessageUnsent);
       
  1455 
       
  1456 	CleanupStack::PushL(smsmessage);
       
  1457 
       
  1458 	WriteSmsToSimL(*smsmessage, socket);
       
  1459 
       
  1460 
       
  1461 	CleanupStack::PopAndDestroy(smsmessage);
       
  1462 
       
  1463 	// Enumerate messages
       
  1464 	TEST(messages.Count() == 0);
       
  1465 	ReadSmsStoreL(socket, messages);
       
  1466 
       
  1467 	//Check that count of messages matches to supposed count
       
  1468 	TEST(messages.Count()==6);
       
  1469 
       
  1470 	CleanupStack::PopAndDestroy(&messages);
       
  1471 	CleanupStack::PopAndDestroy(&socket);
       
  1472     CleanupStack::PopAndDestroy(&socketServer);
       
  1473 
       
  1474 	return TestStepResult() ;
       
  1475 	}
       
  1476 
       
  1477 
       
  1478 TVerdict CTestDeleteSms::doTestStepL()
       
  1479 /**
       
  1480  *  Try to delete message without enumerating the store before it.
       
  1481  */
       
  1482 	{
       
  1483 	INFO_PRINTF1(_L("Test deleting message from SMS storage"));
       
  1484 
       
  1485 	RSocketServ socketServer;
       
  1486 	PrepareRegTestLC(socketServer, 15); //script number can be this!
       
  1487 
       
  1488 	// Open the socket
       
  1489 	RSocket socket;
       
  1490 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  1491 
       
  1492 	_LIT(KStoreMsg1,"HELLO CHRIS");
       
  1493 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  1494 	CSmsMessage* smsmessage=CreateSmsMessageL(KStoreMsg1,alphabet);
       
  1495 	CleanupStack::PushL(smsmessage);
       
  1496 
       
  1497 	//Try to delete the message without enumerating first!
       
  1498 	TRequestStatus status;
       
  1499 
       
  1500 	RSmsSocketWriteStream writestream(socket);
       
  1501 	writestream << *smsmessage;
       
  1502 	writestream.CommitL();
       
  1503 
       
  1504 	socket.Ioctl(KIoctlDeleteSmsMessage, status, NULL, KSolSmsProv);
       
  1505 	User::WaitForRequest(status);
       
  1506 
       
  1507 	INFO_PRINTF2(_L("Delete Sms - returned %d"), status.Int());
       
  1508 
       
  1509 	TEST(status.Int() == KErrArgument);
       
  1510 
       
  1511 	CleanupStack::PopAndDestroy(2); //socket, smsmessage
       
  1512     CleanupStack::PopAndDestroy(&socketServer);
       
  1513 
       
  1514 	return TestStepResult() ;
       
  1515 	}
       
  1516 
       
  1517 
       
  1518 TVerdict CTestSocketBinding::doTestStepL()
       
  1519 /**
       
  1520  *  Test opening and binding the socket to different SMS Address types
       
  1521  */
       
  1522 	{
       
  1523 	INFO_PRINTF1(_L("Test Open & Bind the Socket"));
       
  1524 
       
  1525 	RSocketServ socketServer;
       
  1526 	PrepareRegTestLC(socketServer, 16);
       
  1527 
       
  1528 	RSocket socket1;
       
  1529 	RSocket socket2;
       
  1530 
       
  1531 	TInt ret1=socket1.Open(socketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol);
       
  1532 	TEST(ret1 == KErrNone);
       
  1533 	CleanupClosePushL(socket1);
       
  1534 	TSmsAddr smsaddr1;
       
  1535 
       
  1536 	TInt ret2=socket2.Open(socketServer,KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol);
       
  1537 	TEST(ret2 == KErrNone);
       
  1538 	CleanupClosePushL(socket2);
       
  1539 	TSmsAddr smsaddr2;
       
  1540 
       
  1541 	//ESmsAddrUnbound
       
  1542 	smsaddr1.SetSmsAddrFamily(ESmsAddrUnbound);
       
  1543 	ret1=socket1.Bind(smsaddr1);
       
  1544 	TEST(ret1 == KErrNone);
       
  1545 
       
  1546 	smsaddr2.SetSmsAddrFamily(ESmsAddrUnbound);
       
  1547 	ret2=socket2.Bind(smsaddr2);
       
  1548 	TEST(ret2 == KErrNone);
       
  1549 
       
  1550 	//ESmsAddrSendOnly
       
  1551 	smsaddr1.SetSmsAddrFamily(ESmsAddrSendOnly);
       
  1552 	ret1=socket1.Bind(smsaddr1);
       
  1553 	TEST(ret1 == KErrNone);
       
  1554 
       
  1555 	smsaddr2.SetSmsAddrFamily(ESmsAddrSendOnly);
       
  1556 	ret2=socket1.Bind(smsaddr2);
       
  1557 	TEST(ret2 == KErrNone);
       
  1558 
       
  1559 	//ESmsAddrMessageIndication
       
  1560 	smsaddr1.SetSmsAddrFamily(ESmsAddrMessageIndication);
       
  1561 	ret1=socket1.Bind(smsaddr1);
       
  1562 	TEST(ret1 == KErrNone);
       
  1563 
       
  1564 	//  client can  re-bind
       
  1565 	smsaddr2.SetSmsAddrFamily(ESmsAddrMessageIndication);
       
  1566 	ret2=socket1.Bind(smsaddr2);
       
  1567 	TEST(ret2==KErrNone);
       
  1568 
       
  1569 	//ESmsAddrMatchIEI
       
  1570 	smsaddr1.SetSmsAddrFamily(ESmsAddrMatchIEI);
       
  1571 	smsaddr1.SetIdentifierMatch(CSmsInformationElement::ESmsIEIConcatenatedShortMessages8BitReference);
       
  1572 	ret1=socket1.Bind(smsaddr1);
       
  1573 	TEST(ret1 == KErrNone);
       
  1574 
       
  1575 	smsaddr2.SetSmsAddrFamily(ESmsAddrMatchIEI);
       
  1576 	smsaddr2.SetIdentifierMatch(CSmsInformationElement::ESmsIEISpecialSMSMessageIndication);
       
  1577 	ret2=socket1.Bind(smsaddr2);
       
  1578 	TEST(ret2 == KErrNone);
       
  1579 
       
  1580 	//ESmsAddrMatchText
       
  1581 	smsaddr1.SetSmsAddrFamily(ESmsAddrMatchText);
       
  1582 	smsaddr1.SetTextMatch(_L8("test message, len"));
       
  1583 	ret1=socket1.Bind(smsaddr1);
       
  1584 	TEST(ret1 == KErrNone);
       
  1585 
       
  1586 	smsaddr2.SetSmsAddrFamily(ESmsAddrMatchText);
       
  1587 	smsaddr2.SetTextMatch(_L8("test message,"));
       
  1588 	ret2=socket1.Bind(smsaddr2);
       
  1589 	TEST(ret2 == KErrNone);
       
  1590 
       
  1591 	//ESmsAddrRecvAny
       
  1592 	smsaddr1.SetSmsAddrFamily(ESmsAddrRecvAny);
       
  1593 	ret1=socket1.Bind(smsaddr1);
       
  1594 	TEST(ret1 == KErrNone);
       
  1595 
       
  1596 //  Only one client could bind to ESmsAddrRecvAny at a time
       
  1597 //  This address type is returned with KErrAlreadyExists
       
  1598 	smsaddr2.SetSmsAddrFamily(ESmsAddrRecvAny);
       
  1599 	ret2=socket2.Bind(smsaddr2);
       
  1600 	TEST(ret2==KErrAlreadyExists);
       
  1601 
       
  1602 	//ESmsAddrStatusReport
       
  1603 	smsaddr1.SetSmsAddrFamily(ESmsAddrStatusReport);
       
  1604 	ret1=socket1.Bind(smsaddr1);
       
  1605 	TEST(ret1 == KErrNone);
       
  1606 
       
  1607 //  Only one client could bind to ESmsAddrStatusReport at a time
       
  1608 //  This address type is returned with KErrAlreadyExists
       
  1609 	smsaddr2.SetSmsAddrFamily(ESmsAddrStatusReport);
       
  1610 	ret2=socket2.Bind(smsaddr2);
       
  1611 	TEST(ret2 == KErrAlreadyExists);
       
  1612 
       
  1613 	//ESmsAddrLocalOperation
       
  1614 	smsaddr1.SetSmsAddrFamily(ESmsAddrLocalOperation);
       
  1615 	ret1=socket1.Bind(smsaddr1);
       
  1616 	TEST(ret1 == KErrNone);
       
  1617 
       
  1618 	smsaddr2.SetSmsAddrFamily(ESmsAddrLocalOperation);
       
  1619 	ret2=socket2.Bind(smsaddr2);
       
  1620 	TEST(ret2 == KErrNone);
       
  1621 
       
  1622 	CleanupStack::Pop(&socket2);
       
  1623 	CleanupStack::Pop(&socket1);
       
  1624     CleanupStack::PopAndDestroy(&socketServer);
       
  1625 
       
  1626 	INFO_PRINTF1(_L("All bindings ok!"));
       
  1627 	return TestStepResult() ;
       
  1628 	}
       
  1629 
       
  1630 
       
  1631 TVerdict CTestSmsEventLogger::doTestStepL()
       
  1632 /**
       
  1633  *  Test SMS event logger
       
  1634  */
       
  1635 	{
       
  1636 	INFO_PRINTF1(_L("Test SMS event logger"));
       
  1637 
       
  1638 	RSocketServ socketServer;
       
  1639 	PrepareRegTestLC(socketServer, 17);
       
  1640 
       
  1641 	RSocket socket;
       
  1642 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  1643 
       
  1644 	CLogEvent* logEvent=CLogEvent::NewL();
       
  1645 	CleanupStack::PushL(logEvent);
       
  1646 
       
  1647 //
       
  1648 // Test logging of sending and receiving events
       
  1649 //
       
  1650 	//Set destination and SC numbers
       
  1651 	iTelephoneNumber=KPekka;
       
  1652 	iServiceCenterNumber=KRadiolinjaSC;
       
  1653 
       
  1654 	_LIT(KTest7bitMsg,"test message, length 23"); //7 bits test message, length 23 characters
       
  1655 
       
  1656 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  1657 	CSmsMessage* sendSmsMessage=CreateSmsMessageL(KTest7bitMsg,alphabet);
       
  1658     CleanupStack::PushL(sendSmsMessage);
       
  1659 
       
  1660 	//Send SMS-SUBMIT
       
  1661 	SendSmsL(sendSmsMessage,socket);
       
  1662 
       
  1663 	//Receive SMS-DELIVER
       
  1664 	WaitForRecvL(socket);
       
  1665 	CSmsMessage* receiveSmsMessage = RecvSmsL(socket);
       
  1666 	CleanupStack::PushL(receiveSmsMessage);
       
  1667 
       
  1668 	//Get sent message's log event
       
  1669 	iSmsStackTestUtils->GetLogEventL(*logEvent,receiveSmsMessage->LogServerId()-1);
       
  1670 
       
  1671 	//Check contents of log event
       
  1672 	INFO_PRINTF1(_L("Checking sent messages log event.") );
       
  1673 	if((logEvent->Description() != _L("Short message")) ||
       
  1674 	   (logEvent->Direction() != _L("Outgoing")) ||
       
  1675 	   (logEvent->Status() != _L("Sent")) ||
       
  1676 	   (logEvent->Subject() != _L("test message, length 23")) ||
       
  1677 	   (logEvent->Number() != sendSmsMessage->ToFromAddress()))
       
  1678 		TEST(KErrArgument);
       
  1679 
       
  1680 	//Get received message's log event
       
  1681 	iSmsStackTestUtils->GetLogEventL(*logEvent,receiveSmsMessage->LogServerId());
       
  1682 
       
  1683 	//Check contents of log event
       
  1684 	INFO_PRINTF1(_L("Checking received messages log event.") );
       
  1685 	if((logEvent->Description() != _L("Short message")) ||
       
  1686 	   (logEvent->Direction() != _L("Incoming")) ||
       
  1687 	   (logEvent->Status() != _L("Delivered")) ||
       
  1688 	   (logEvent->Subject() != _L("test message, length 23")) ||
       
  1689 	   (logEvent->Number() != receiveSmsMessage->ToFromAddress()))
       
  1690 		TEST(KErrArgument);
       
  1691 
       
  1692     CleanupStack::PopAndDestroy(2); //sendSmsMessage, receiveSmsMessage
       
  1693 
       
  1694 //
       
  1695 // Test event logging when sending SMS with SMS-STATUS-REPORT request
       
  1696 //
       
  1697 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  1698 
       
  1699 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  1700 	sendSmsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
  1701 	CleanupStack::PushL(sendSmsMessage);
       
  1702 
       
  1703 	//Send SMS-SUBMIT with SMS-STATUS-REPORT request
       
  1704 	SendSmsL(sendSmsMessage,socket);
       
  1705 
       
  1706 	//Receive SMS-DELIVER
       
  1707 	WaitForRecvL(socket);
       
  1708 	receiveSmsMessage = RecvSmsL(socket);
       
  1709 	CleanupStack::PushL(receiveSmsMessage);
       
  1710 
       
  1711 	//Get sent message's log event
       
  1712 	iSmsStackTestUtils->GetLogEventL(*logEvent,receiveSmsMessage->LogServerId()-1);
       
  1713 
       
  1714 	//Check contents of log event
       
  1715 	INFO_PRINTF1(_L("Checking sent messages log event before status report received.") );
       
  1716 	if((logEvent->Description() != _L("Short message")) ||
       
  1717 	   (logEvent->Direction() != _L("Outgoing")) ||
       
  1718 	   (logEvent->Status() != _L("Pending")) ||
       
  1719 	   (logEvent->Subject() != _L("Data Message")) ||
       
  1720 	   (logEvent->Number() != sendSmsMessage->ToFromAddress()))
       
  1721 		TEST(KErrArgument);
       
  1722 
       
  1723 	//Get received message's log event
       
  1724 	TInt logServerId = receiveSmsMessage->LogServerId();
       
  1725 	iSmsStackTestUtils->GetLogEventL(*logEvent,receiveSmsMessage->LogServerId());
       
  1726 
       
  1727 	//Check contents of log event
       
  1728 	INFO_PRINTF1(_L("Checking received messages log event.") );
       
  1729 	if((logEvent->Description() != _L("Short message")) ||
       
  1730 	   (logEvent->Direction() != _L("Incoming")) ||
       
  1731 	   (logEvent->Status() != _L("Delivered")) ||
       
  1732 	   (logEvent->Subject() != _L("Data Message")) ||
       
  1733 	   (logEvent->Number() != receiveSmsMessage->ToFromAddress()))
       
  1734 		TEST(KErrArgument);
       
  1735 
       
  1736 	//Receive SMS-STATUS-REPORT
       
  1737 	CleanupStack::PopAndDestroy(receiveSmsMessage);
       
  1738 	WaitForRecvL(socket);
       
  1739 	receiveSmsMessage = RecvSmsL(socket);
       
  1740 	CleanupStack::PushL(receiveSmsMessage);
       
  1741 
       
  1742 	//Status report received. Get sent message's log event again.
       
  1743 	//Status report's LogServerId should be same as submit's LogServerId
       
  1744 	iSmsStackTestUtils->GetLogEventL(*logEvent,receiveSmsMessage->LogServerId());
       
  1745 
       
  1746 	//Check contents of log event
       
  1747 	INFO_PRINTF1(_L("Checking sent messages log event after status report received.") );
       
  1748 	if((logEvent->Description() != _L("Short message")) ||
       
  1749 	   (logEvent->Direction() != _L("Outgoing")) ||
       
  1750 	   (logEvent->Status() != _L("Delivered")) ||
       
  1751 	   (logEvent->Subject() != _L("Data Message")) ||
       
  1752 	   (logEvent->Number() != sendSmsMessage->ToFromAddress()))
       
  1753 		TEST(KErrArgument);
       
  1754 
       
  1755     // validate that log entry  has been updated with the time the
       
  1756     // SMS was actually received by the destination mobile, ie the
       
  1757     // Status Report's discharge time. This has been set to be in 
       
  1758     // 2020 to ensure that the SMS does not have a time stamp
       
  1759     // which is earlier than the time it was sent  by the originator- this would
       
  1760     // result in the event log entry being purged from the logging system.
       
  1761     TTime time = logEvent->Time();
       
  1762     TDateTime dateTime = time.DateTime();
       
  1763     
       
  1764     if((dateTime.Year()   != 2020) ||
       
  1765        (dateTime.Month()  != 10) ||
       
  1766        (dateTime.Day()    != 1)  ||
       
  1767        (dateTime.Hour()   != 13) ||
       
  1768        (dateTime.Minute() != 38) ||
       
  1769        (dateTime.Second() != 18) )     
       
  1770         TEST(KErrArgument); 
       
  1771 	
       
  1772 //
       
  1773 // Test logging when senging fails.
       
  1774 //
       
  1775 
       
  1776 	//Send SMS-SUBMIT
       
  1777 	SendSmsErrorL(sendSmsMessage,socket);
       
  1778 
       
  1779 	//TSY returned KErrGsmSMSNetworkFailure error to the send request.
       
  1780     //Get and check event information.
       
  1781 	iSmsStackTestUtils->GetLogEventL(*logEvent,logServerId+1);
       
  1782 
       
  1783 	//Check contents of log event
       
  1784 	INFO_PRINTF1(_L("Checking log event of unsuccessful send event.") );
       
  1785 	if((logEvent->Description() != _L("Short message")) ||
       
  1786 	   (logEvent->Direction() != _L("Outgoing")) ||
       
  1787 	   (logEvent->Status() != _L("Not sent")) ||
       
  1788 	   (logEvent->Subject() != _L("Data Message")) ||
       
  1789 	   (logEvent->Number() != sendSmsMessage->ToFromAddress()))
       
  1790 		TEST(KErrArgument);
       
  1791 
       
  1792     CleanupStack::PopAndDestroy(2); //sendSmsMessage, receiveSmsMessage
       
  1793 
       
  1794 //
       
  1795 // Test event logging when an intermittent concatenated message status report received.
       
  1796 //
       
  1797 	_LIT(KLongText,"3 PDU test SMS message. "
       
  1798 L"3 PDU test SMS message. "
       
  1799 L"3 PDU test SMS message. "
       
  1800 L"3 PDU test SMS message. "
       
  1801 L"3 PDU test SMS message. "
       
  1802 L"3 PDU test SMS message. "
       
  1803 L"3 PDU test SMS message. "
       
  1804 L"3 PDU test SMS message. "
       
  1805 L"3 PDU test SMS message. "
       
  1806 L"3 PDU test SMS message. "
       
  1807 L"3 PDU test SMS message. "
       
  1808 L"3 PDU test SMS message. "
       
  1809 L"3 PDU test SMS message. "
       
  1810 L"3 PDU test SMS message. "
       
  1811 L"3 PDU test SMS message. "
       
  1812 L"3 PDU test SMS message. "
       
  1813 L"3 PDU test SMS message. "
       
  1814 L"The End.");
       
  1815 
       
  1816 	//Set destination and SC numbers
       
  1817 	iTelephoneNumber=KRegTestNumber;
       
  1818 	iServiceCenterNumber=KVodafoneSC;
       
  1819 
       
  1820 	alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  1821 	sendSmsMessage=CreateSmsWithStatusReportReqL(KLongText,alphabet);
       
  1822 	CleanupStack::PushL(sendSmsMessage);
       
  1823 
       
  1824 	//Send concatenated message that contains 3 PDU's.
       
  1825 	SendSmsL(sendSmsMessage,socket);
       
  1826 
       
  1827     //Get and check event information.
       
  1828 	iSmsStackTestUtils->GetLogEventL(*logEvent,logServerId+2);
       
  1829 
       
  1830 	//Check contents of log event
       
  1831 	INFO_PRINTF1(_L("Checking concatenated sent messages log event before status report received.") );
       
  1832 	if((logEvent->Description() != _L("Short message")) ||
       
  1833 	   (logEvent->Direction() != _L("Outgoing")) ||
       
  1834 	   (logEvent->Status() != _L("Pending")) ||
       
  1835 	   (logEvent->Subject() != _L("3 PDU test SMS message. 3 PDU te")) ||
       
  1836 	   (logEvent->Number() != sendSmsMessage->ToFromAddress()))
       
  1837 		TEST(KErrArgument);
       
  1838 
       
  1839 	//Receive SMS-STATUS-REPORT
       
  1840 	WaitForRecvL(socket);
       
  1841 	receiveSmsMessage = RecvSmsL(socket);
       
  1842 	CleanupStack::PushL(receiveSmsMessage);
       
  1843 
       
  1844     //Get and check event information.
       
  1845 	iSmsStackTestUtils->GetLogEventL(*logEvent,receiveSmsMessage->LogServerId());
       
  1846 
       
  1847 	//Check contents of log event
       
  1848 	INFO_PRINTF1(_L("Status report has TP-ST value 'Connection rejected by SME'.") );
       
  1849 	INFO_PRINTF1(_L("Checking concatenated sent messages log event again."));
       
  1850 	if((logEvent->Description() != _L("Short message")) ||
       
  1851 	   (logEvent->Direction() != _L("Outgoing")) ||
       
  1852 	   (logEvent->Status() != _L("Failed")) ||
       
  1853 	   (logEvent->Subject() != _L("3 PDU test SMS message. 3 PDU te")) ||
       
  1854 	   (logEvent->Number() != sendSmsMessage->ToFromAddress()))
       
  1855 		TEST(KErrArgument);
       
  1856 
       
  1857     time = logEvent->Time();
       
  1858     dateTime = time.DateTime();
       
  1859     
       
  1860     if((dateTime.Year()   != 2020) ||
       
  1861        (dateTime.Month()  != 10) ||
       
  1862        (dateTime.Day()    != 1)  ||
       
  1863        (dateTime.Hour()   != 13) ||
       
  1864        (dateTime.Minute() != 38) ||
       
  1865        (dateTime.Second() != 18) )     
       
  1866         TEST(KErrArgument); 
       
  1867 	
       
  1868 	CleanupStack::PopAndDestroy(4); // sendSmsMessage, receiveSmsMessage, logEvent, socket
       
  1869     CleanupStack::PopAndDestroy(&socketServer);
       
  1870 
       
  1871 	return TestStepResult() ;
       
  1872 	}
       
  1873 
       
  1874 
       
  1875 TVerdict CTestBearerChange::doTestStepL()
       
  1876 /**
       
  1877  *  @test Test changing the GPRS bearer while sending and receiving concatenated messages
       
  1878  *  The idea is to change bearer midway through sending the PDUs making up the complete
       
  1879  *  message.  Buffer size of 500 => 4 PDU message
       
  1880  */
       
  1881     {
       
  1882     INFO_PRINTF1(_L("Testing tx & rx while changing the SMS Bearer"));
       
  1883 
       
  1884 	RSocketServ socketServer;
       
  1885 	PrepareRegTestLC(socketServer, 18);
       
  1886 	
       
  1887 
       
  1888 	iTelephoneNumber=KPekka;
       
  1889 	iServiceCenterNumber=KRadiolinjaSC; //maybe not needed...
       
  1890 
       
  1891 	// Create message
       
  1892     const TInt KTestMessageBufferSize=500;
       
  1893     HBufC* messageBuffer=HBufC::New(KTestMessageBufferSize);
       
  1894     CleanupStack::PushL(messageBuffer);
       
  1895     TPtr bufferPtr=messageBuffer->Des();
       
  1896     FillDes(bufferPtr,KTestMessageBufferSize);
       
  1897     CSmsMessage* smsMessage=CreateSmsMessageL(bufferPtr,
       
  1898             TSmsDataCodingScheme::ESmsAlphabet7Bit);
       
  1899     CleanupStack::PushL(smsMessage);
       
  1900     CSmsMessage* rxSmsMessage=NULL;
       
  1901 
       
  1902     // Open socket
       
  1903     RSocket socket;
       
  1904 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  1905 
       
  1906     RMobileSmsMessaging::TMobileSmsBearer smsBearer;
       
  1907 
       
  1908     INFO_PRINTF1(_L("Testing bearer change to GPRS only setting"));
       
  1909 
       
  1910     // Send message & change bearer
       
  1911     smsBearer=RMobileSmsMessaging::ESmsBearerPacketOnly;
       
  1912 	iSmsStackTestUtils->SendSmsAndChangeBearerL(smsMessage,socket, smsBearer);
       
  1913 
       
  1914 	// Receive message
       
  1915 	rxSmsMessage=RecvSmsL(socket);
       
  1916 	CleanupStack::PushL(rxSmsMessage);
       
  1917 	TestSmsContentsL(rxSmsMessage,bufferPtr);
       
  1918 	CleanupStack::PopAndDestroy(rxSmsMessage);  // rxSmsMessage
       
  1919 
       
  1920 	INFO_PRINTF1(_L("Testing bearer change to CSD only setting"));
       
  1921 
       
  1922 	// Send message & change bearer
       
  1923 	smsBearer=RMobileSmsMessaging::ESmsBearerCircuitOnly;
       
  1924 	iSmsStackTestUtils->SendSmsAndChangeBearerL(smsMessage,socket, smsBearer);
       
  1925 
       
  1926 	// Receive message
       
  1927 	rxSmsMessage=RecvSmsL(socket);
       
  1928 	CleanupStack::PushL(rxSmsMessage);
       
  1929 	TestSmsContentsL(rxSmsMessage,bufferPtr);
       
  1930 	CleanupStack::PopAndDestroy(rxSmsMessage);  // rxSmsMessage
       
  1931 
       
  1932 	INFO_PRINTF1(_L("Testing bearer change to GPRS preferred setting"));
       
  1933 
       
  1934 	// Send message & change bearer
       
  1935 	smsBearer=RMobileSmsMessaging::ESmsBearerPacketPreferred;
       
  1936 	iSmsStackTestUtils->SendSmsAndChangeBearerL(smsMessage,socket, smsBearer);
       
  1937 
       
  1938 	// Receive message
       
  1939 	rxSmsMessage=RecvSmsL(socket);
       
  1940 	CleanupStack::PushL(rxSmsMessage);
       
  1941 	TestSmsContentsL(rxSmsMessage,bufferPtr);
       
  1942 	CleanupStack::PopAndDestroy(rxSmsMessage);  // rxSmsMessage
       
  1943 
       
  1944 	INFO_PRINTF1(_L("Testing bearer change to CSD preferred setting"));
       
  1945 
       
  1946 	// Send message & change bearer
       
  1947 	smsBearer=RMobileSmsMessaging::ESmsBearerCircuitPreferred;
       
  1948 	iSmsStackTestUtils->SendSmsAndChangeBearerL(smsMessage,socket, smsBearer);
       
  1949 
       
  1950 	// Receive message
       
  1951 	rxSmsMessage=RecvSmsL(socket);
       
  1952 	CleanupStack::PushL(rxSmsMessage);
       
  1953 	TestSmsContentsL(rxSmsMessage,bufferPtr);
       
  1954 	CleanupStack::PopAndDestroy(rxSmsMessage);  // rxSmsMessage
       
  1955 
       
  1956 	CleanupStack::PopAndDestroy(3); // messageBuffer, smsMessage, CleanupCloseItem
       
  1957     CleanupStack::PopAndDestroy(&socketServer);
       
  1958 
       
  1959  	return TestStepResult() ;
       
  1960 	}
       
  1961 
       
  1962 	
       
  1963 TVerdict CTestRestoreBearer::doTestStepL()
       
  1964 /**
       
  1965 @test Test attempt to set the bearer which returns an error reverts
       
  1966       the bearer back to the previous setting.
       
  1967 */
       
  1968 	{
       
  1969     // Set the initial bearer value in CommDB
       
  1970     RMobileSmsMessaging::TMobileSmsBearer newBearer;
       
  1971     newBearer = RMobileSmsMessaging::ESmsBearerCircuitPreferred;
       
  1972     iSmsStackTestUtils->ChangeBearerL(newBearer);
       
  1973 
       
  1974 	// Starts the smsstack
       
  1975 	RSocketServ socketServer;
       
  1976 	INFO_PRINTF1(_L("Connecting to SocketServer ..."));
       
  1977 	TInt ret = socketServer.Connect(KSocketMessageSlots);
       
  1978 	CleanupClosePushL(socketServer);
       
  1979 
       
  1980     // Open socket
       
  1981     RSocket socket;
       
  1982 	iSmsStackTestUtils->OpenSmsSocketL(socketServer,socket,ESmsAddrRecvAny);
       
  1983     
       
  1984     // Attempt to change the bearer
       
  1985     newBearer = RMobileSmsMessaging::ESmsBearerPacketPreferred;
       
  1986     iSmsStackTestUtils->ChangeBearerL(newBearer);
       
  1987     INFO_PRINTF2(_L("Changing bearer in CommDB global settings to %d"), newBearer);
       
  1988     
       
  1989     // Wait 2 seconds for CSmspSetBearer to complete and revert the bearer
       
  1990     User::After(2000000);
       
  1991     
       
  1992     // With simtsy, setting the bearer to any value is not
       
  1993     // supported, therefore the smsstack should revert 
       
  1994     // back to the previous bearer setting.
       
  1995     INFO_PRINTF1(_L("Bearer should be reverted back to previous supported setting."));
       
  1996     INFO_PRINTF1(_L("The initial supported setting is obtained from CommDB."));
       
  1997     RMobileSmsMessaging::TMobileSmsBearer retrievedBearer;
       
  1998     iSmsStackTestUtils->GetBearerL(retrievedBearer);
       
  1999     
       
  2000     TEST(retrievedBearer == RMobileSmsMessaging::ESmsBearerCircuitPreferred);
       
  2001     
       
  2002 	CleanupStack::PopAndDestroy(); //socketServer
       
  2003  	return TestStepResult();	
       
  2004 	} 
       
  2005 
       
  2006 
       
  2007 TVerdict CTestRecvModeChange::doTestStepL()
       
  2008 /**
       
  2009  *  @test Test changing the recv mode while sending and receiving concatenated messages
       
  2010  *  
       
  2011  */
       
  2012     {
       
  2013     INFO_PRINTF1(_L("Testing tx & rx while changing the SMS Receive mode"));
       
  2014 
       
  2015 	RSocketServ socketServer;
       
  2016 	PrepareRegTestLC(socketServer, 19);
       
  2017 	
       
  2018 
       
  2019 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  2020 
       
  2021 	//Set destination and SC numbers
       
  2022 	iTelephoneNumber=KPekka;
       
  2023 	iServiceCenterNumber=KRadiolinjaSC; //maybe not needed...
       
  2024 
       
  2025 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  2026 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  2027 
       
  2028     CleanupStack::PushL(smsMessage);
       
  2029     CSmsMessage* rxSmsMessage=NULL;
       
  2030 
       
  2031     // Open socket
       
  2032     RSocket socket;
       
  2033 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2034 
       
  2035     // Create comms database object
       
  2036 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  2037 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  2038 #else
       
  2039 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  2040 #endif
       
  2041     CleanupStack::PushL(db);
       
  2042 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveModeUnspecified"));
       
  2043 
       
  2044     // Send message & wait a sec(!)
       
  2045     SendSmsL(smsMessage,socket);
       
  2046 
       
  2047     // EReceiveModeUnspecified
       
  2048 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  2049 	CleanupStack::PushL(smsReceiveModeField);
       
  2050 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  2051 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveModeUnspecified;
       
  2052 	smsReceiveModeField->ModifyL(*db);
       
  2053 
       
  2054     // Receive message
       
  2055     rxSmsMessage=RecvSmsL(socket);
       
  2056     CleanupStack::PushL(rxSmsMessage);
       
  2057     TestSmsContentsL(rxSmsMessage,KTestMsg1);
       
  2058     CleanupStack::PopAndDestroy();  // rxSmsMessage
       
  2059 
       
  2060     INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredPhoneAck"));
       
  2061 
       
  2062     // Send message & wait a sec(!)
       
  2063     SendSmsL(smsMessage,socket);
       
  2064 
       
  2065     // UnstoredPhoneAck
       
  2066 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredPhoneAck;
       
  2067 	smsReceiveModeField->ModifyL(*db);
       
  2068 
       
  2069     // Receive message
       
  2070     rxSmsMessage=RecvSmsL(socket);
       
  2071     CleanupStack::PushL(rxSmsMessage);
       
  2072     TestSmsContentsL(rxSmsMessage,KTestMsg1);
       
  2073     CleanupStack::PopAndDestroy();  // rxSmsMessage
       
  2074 
       
  2075     INFO_PRINTF1(_L("Testing recv mode change to EReceiveUnstoredClientAck"));
       
  2076 
       
  2077     // Send message & wait a sec(!)
       
  2078     SendSmsL(smsMessage,socket);
       
  2079 
       
  2080     // UnstoredClientAck
       
  2081 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  2082 	smsReceiveModeField->ModifyL(*db);
       
  2083 
       
  2084     // Receive message
       
  2085     rxSmsMessage=RecvSmsL(socket);
       
  2086     CleanupStack::PushL(rxSmsMessage);
       
  2087     TestSmsContentsL(rxSmsMessage,KTestMsg1);
       
  2088     CleanupStack::PopAndDestroy();  // rxSmsMessage
       
  2089 
       
  2090     INFO_PRINTF1(_L("Testing recv mode change to EReceiveStored"));
       
  2091 
       
  2092     // Send message & wait a sec(!)
       
  2093     SendSmsL(smsMessage,socket);
       
  2094 
       
  2095     // Stored
       
  2096 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveStored;
       
  2097 	smsReceiveModeField->ModifyL(*db);
       
  2098 
       
  2099     // Receive message
       
  2100     rxSmsMessage=RecvSmsL(socket);
       
  2101     CleanupStack::PushL(rxSmsMessage);
       
  2102     TestSmsContentsL(rxSmsMessage,KTestMsg1);
       
  2103     CleanupStack::PopAndDestroy();  // rxSmsMessage
       
  2104 
       
  2105     INFO_PRINTF1(_L("Testing recv mode change to EReceiveEither"));
       
  2106 
       
  2107     // Send message & wait a sec(!)
       
  2108     SendSmsL(smsMessage,socket);
       
  2109 
       
  2110     // Either
       
  2111 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveEither;
       
  2112 	smsReceiveModeField->ModifyL(*db);
       
  2113 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  2114 
       
  2115     // Receive message
       
  2116     rxSmsMessage=RecvSmsL(socket);
       
  2117     CleanupStack::PushL(rxSmsMessage);
       
  2118     TestSmsContentsL(rxSmsMessage,KTestMsg1);
       
  2119     CleanupStack::PopAndDestroy();  // rxSmsMessage
       
  2120 
       
  2121     // Cleanup
       
  2122     CleanupStack::PopAndDestroy(3); // smsMessage, socket, db
       
  2123     CleanupStack::PopAndDestroy(&socketServer);
       
  2124 
       
  2125 	return TestStepResult() ;
       
  2126     }
       
  2127 
       
  2128 
       
  2129 TVerdict CTestTsyCaps::doTestStepL()
       
  2130 /**
       
  2131  *  Test sms stack when tsy doesn't support anything
       
  2132  */
       
  2133 	{
       
  2134 	INFO_PRINTF1(_L("Test Sms stack when Tsy supports nothing"));
       
  2135 
       
  2136 	RSocketServ socketServer;
       
  2137 	PrepareRegTestLC(socketServer, 20);
       
  2138 	
       
  2139 
       
  2140 	RSocket socket;
       
  2141 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2142 
       
  2143 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  2144 
       
  2145 	//Set destination and SC numbers
       
  2146 	iTelephoneNumber=KPekka;
       
  2147 	iServiceCenterNumber=KRadiolinjaSC;
       
  2148 
       
  2149 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  2150 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  2151 	CleanupStack::PushL(smsMessage);
       
  2152 
       
  2153 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  2154 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  2155 
       
  2156 	//Send SMS
       
  2157 	SendSmsErrorL(smsMessage,socket);
       
  2158 
       
  2159 	//Try to store the message to the SMS store, tsy doesn't support this
       
  2160 	User::After(1000000);
       
  2161 
       
  2162 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  2163 
       
  2164 	INFO_PRINTF1(_L("Write message"));
       
  2165 
       
  2166 	TRequestStatus status;
       
  2167 
       
  2168 	RSmsSocketWriteStream writestream(socket);
       
  2169 	writestream << *smsMessage;
       
  2170 	writestream.CommitL();
       
  2171 
       
  2172 	socket.Ioctl(KIoctlWriteSmsMessage,status,NULL, KSolSmsProv);
       
  2173 	User::WaitForRequest(status);
       
  2174 	INFO_PRINTF2(_L("Write Sms - returned %d"), status.Int());
       
  2175 	TEST(status.Int() == KErrNotSupported);
       
  2176 
       
  2177 	CleanupStack::PopAndDestroy(smsMessage);
       
  2178 
       
  2179 	// Try to enumerate messages from Store, tsy doesn't support reading
       
  2180 	INFO_PRINTF1(_L("Enumerating messages"));
       
  2181 
       
  2182 	TPckgBuf<TUint> sbuf;
       
  2183 	sbuf()=0;
       
  2184 
       
  2185 	socket.Ioctl(KIoctlEnumerateSmsMessages,status,&sbuf, KSolSmsProv);
       
  2186 	User::WaitForRequest(status);
       
  2187 	INFO_PRINTF2(_L("Enumerate store - returned %d"), status.Int());
       
  2188 	TEST(status.Int() == KErrNotSupported);
       
  2189 
       
  2190 	// Try to read sms parameters, tsy doesn't support this
       
  2191 
       
  2192 	TSmsAddr smsaddr;
       
  2193 	smsaddr.SetSmsAddrFamily(ESmsAddrLocalOperation);
       
  2194 	TInt ret=socket.Bind(smsaddr);
       
  2195 	TEST(ret == KErrNone);
       
  2196 
       
  2197     socket.Ioctl(KIoctlReadSmsParams,status,NULL, KSolSmsProv);
       
  2198     INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  2199     User::WaitForRequest(status);
       
  2200 	INFO_PRINTF2(_L("Read Sms parameters - returned %d"), status.Int());
       
  2201 	TEST(status.Int() == KErrNotSupported);
       
  2202 
       
  2203 
       
  2204 //
       
  2205 // Try to store SMS parameters, tsy doesn't support this
       
  2206 //
       
  2207 	CMobilePhoneSmspList* smspList=CMobilePhoneSmspList::NewL();
       
  2208 	CleanupStack::PushL(smspList);
       
  2209 
       
  2210 	RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy;
       
  2211 
       
  2212 	entryToTsy.iText = DMMTSY_SMSP_STORE_TEXT1;
       
  2213 	entryToTsy.iValidParams = DMMTSY_SMSP_STORE_VALID_PARAMS1;
       
  2214     entryToTsy.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TON_0;
       
  2215     entryToTsy.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_DESTINATION_NP_0;
       
  2216 	entryToTsy.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TEL_NUMBER_0;
       
  2217 	entryToTsy.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY1;
       
  2218     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_1;
       
  2219     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_1;
       
  2220 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_1;
       
  2221 	entryToTsy.iProtocolId = DMMTSY_SMSP_STORE_PID1;
       
  2222 	entryToTsy.iDcs = DMMTSY_SMSP_STORE_DCS1;
       
  2223 
       
  2224 	entryToTsy.iIndex = 0;
       
  2225 	smspList->AddEntryL(entryToTsy);
       
  2226 
       
  2227     INFO_PRINTF1(_L("storing the SMS parameters...") );
       
  2228 
       
  2229 	TRAP(ret,writestream << *smspList);
       
  2230 	TEST(ret == KErrNone);
       
  2231 	TRAP(ret,writestream.CommitL());
       
  2232 	TEST(ret == KErrNone);
       
  2233 
       
  2234 	socket.Ioctl(KIoctlWriteSmsParams,status,NULL, KSolSmsProv);
       
  2235  	User::WaitForRequest(status);
       
  2236 	INFO_PRINTF2(_L("Write Sms parameters - returned %d"), status.Int());
       
  2237 	TEST(status.Int() == KErrNotSupported);
       
  2238 
       
  2239 	CleanupStack::PopAndDestroy(2); //socket, smspList
       
  2240     CleanupStack::PopAndDestroy(&socketServer);
       
  2241 
       
  2242 	return TestStepResult() ;
       
  2243 	}
       
  2244 
       
  2245 TVerdict CTestOOMSendSms::doTestStepL()
       
  2246 /**
       
  2247  *  Test out of memory handling, Send Sms
       
  2248  */
       
  2249 	{
       
  2250 	INFO_PRINTF1(_L("Test out of memory handling"));
       
  2251 #ifdef _DEBUG
       
  2252 
       
  2253 	INFO_PRINTF1(_L("OOM test: Send Sms"));
       
  2254 	RSocketServ socketServer;
       
  2255 	PrepareRegTestLC(socketServer, 21);
       
  2256 	
       
  2257 	
       
  2258 	RSocket socket;
       
  2259 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2260 
       
  2261 	//Set destination and SC numbers
       
  2262 	iTelephoneNumber=KPekka;
       
  2263 	iServiceCenterNumber=KRadiolinjaSC;
       
  2264 
       
  2265 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  2266 
       
  2267 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  2268 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  2269 	CleanupStack::PushL(smsMessage);
       
  2270 
       
  2271 	TInt count=0;
       
  2272 	TInt ret=KErrNoMemory;
       
  2273 	TInt successfullSends=0;  //maximum expected number of succeeded sends is 2 in TSY config file
       
  2274 	while ((ret==KErrNoMemory || ret==KErrEof || count < 18) && (successfullSends<2))
       
  2275 		{
       
  2276 		socketServer.__DbgFailNext(count);
       
  2277 		socketServer.__DbgMarkHeap();
       
  2278 		TRAP(ret,SendSmsDontCheckReturnValueL(smsMessage,socket));
       
  2279 		socketServer.__DbgMarkEnd(0);
       
  2280 		if(ret==KErrNone)
       
  2281 			successfullSends++;
       
  2282 		count++;
       
  2283 		}
       
  2284 	
       
  2285 	TEST(ret == KErrNone);
       
  2286 
       
  2287 	socketServer.__DbgFailNext(-1); // Reset heap
       
  2288 
       
  2289 	CleanupStack::PopAndDestroy(2);	//smsMessage, socket
       
  2290 
       
  2291 	CleanupStack::PopAndDestroy(&socketServer);
       
  2292 
       
  2293 #endif
       
  2294 	return TestStepResult() ;
       
  2295 	}
       
  2296 
       
  2297 TVerdict CTestOOMWriteSms::doTestStepL()
       
  2298 /**
       
  2299  *  Test out of memory handling, Write Sms to store
       
  2300  */
       
  2301 	{
       
  2302 	INFO_PRINTF1(_L("OOM test: Write Sms to Store"));
       
  2303 #ifdef _DEBUG
       
  2304 
       
  2305 	RSocketServ socketServer;
       
  2306 	PrepareRegTestLC(socketServer, 22);
       
  2307 	
       
  2308 		
       
  2309 	RSocket socket;
       
  2310 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2311 
       
  2312 	// Create and store the message
       
  2313 	_LIT(KStoreMsg1,"HELLO CHRIS");
       
  2314 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  2315 	CSmsMessage* smsMessage=CreateSmsMessageL(KStoreMsg1,alphabet);
       
  2316 	CleanupStack::PushL(smsMessage);
       
  2317 
       
  2318 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  2319 
       
  2320 	TInt count=0;
       
  2321 	TInt ret=KErrNoMemory;
       
  2322 	while (ret==KErrNoMemory || ret==KErrEof || count < 8)
       
  2323 		{
       
  2324 		socketServer.__DbgFailNext(count);
       
  2325 		socketServer.__DbgMarkHeap();
       
  2326 		TRAP(ret,WriteSmsLeaveIfErrorL(*smsMessage,socket););
       
  2327 		socketServer.__DbgMarkEnd(0);
       
  2328 		count++;
       
  2329 		}
       
  2330 
       
  2331 	socketServer.__DbgFailNext(-1); // Reset heap
       
  2332 	TEST(ret == KErrNone);
       
  2333 	CleanupStack::PopAndDestroy(2);	//smsMessage, socket
       
  2334 
       
  2335 	//Ensure socket server session is closed to remove cache
       
  2336     CleanupStack::PopAndDestroy(&socketServer);
       
  2337 
       
  2338 #endif
       
  2339 	return TestStepResult() ;
       
  2340 	}
       
  2341 
       
  2342 
       
  2343 TVerdict CTestOOMReadSms::doTestStepL()
       
  2344 /**
       
  2345  *  Test out of memory handling, Read SMS messages
       
  2346  */
       
  2347 	{
       
  2348 	INFO_PRINTF1(_L("OOM test: Read, SMS store ReadAll not supported."));
       
  2349 #ifdef _DEBUG
       
  2350 
       
  2351 	RSocketServ socketServer;
       
  2352 	PrepareRegTestLC(socketServer, 23);
       
  2353 	
       
  2354 	
       
  2355 	RSocket socket;
       
  2356 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2357 
       
  2358 	TInt count, i(0);
       
  2359 
       
  2360 	RSmsSocketReadStream readstream(socket);
       
  2361 	TRequestStatus status;
       
  2362 
       
  2363 	CSmsMessage* smsMessage = NULL;
       
  2364 
       
  2365 	TInt numberOfMessages(0);
       
  2366 	smsMessage = CreateSmsMessageL(_L(""),TSmsDataCodingScheme::ESmsAlphabet7Bit);
       
  2367 	CleanupStack::PushL(smsMessage);
       
  2368 
       
  2369 	count=0;
       
  2370 	TInt ret=KErrNoMemory;
       
  2371 	while (ret==KErrNoMemory || ret==KErrEof || count < 10)
       
  2372 		{
       
  2373 		socketServer.__DbgFailNext(count);
       
  2374 		socketServer.__DbgMarkHeap();
       
  2375 		TRAP(ret,numberOfMessages=MakeReadSmsStoreRequestL(socket););
       
  2376 		socketServer.__DbgMarkEnd(0);
       
  2377 		
       
  2378 		if (ret==KErrNone)
       
  2379 			{
       
  2380 			for (i=0; i<numberOfMessages; i++)
       
  2381 				{
       
  2382 				TRAPD(ret,readstream >> *smsMessage);
       
  2383 				TEST(ret == KErrNone);
       
  2384 				socket.Ioctl(KIoctlReadMessageSucceeded,status,NULL, KSolSmsProv);
       
  2385 				User::WaitForRequest(status);
       
  2386 				}
       
  2387 			}
       
  2388 		count++;
       
  2389 		}
       
  2390 
       
  2391 	CleanupStack::PopAndDestroy(smsMessage);
       
  2392 	TEST(ret == KErrNone);
       
  2393 	socketServer.__DbgFailNext(-1); // Reset heap
       
  2394 
       
  2395 	INFO_PRINTF2(_L("%d enumerated messages"), numberOfMessages);
       
  2396 
       
  2397 	//Check that test client can read all messages from the stream
       
  2398 	for(i=0; i< numberOfMessages; i++)
       
  2399 		{
       
  2400 		CSmsBuffer* buffer=CSmsBuffer::NewL();
       
  2401 		smsMessage=CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver,buffer);
       
  2402 		CleanupStack::PushL(smsMessage);
       
  2403 
       
  2404 		readstream >> *smsMessage;
       
  2405 		socket.Ioctl(KIoctlReadMessageSucceeded, status, NULL, KSolSmsProv);
       
  2406 		User::WaitForRequest(status);
       
  2407 		TEST(status.Int() == KErrNone);
       
  2408 
       
  2409 		CleanupStack::PopAndDestroy(smsMessage);
       
  2410 		}
       
  2411 
       
  2412 	CleanupStack::PopAndDestroy(&socket);	//socket
       
  2413 
       
  2414 	//Ensure socket server session is closed to remove cache
       
  2415     CleanupStack::PopAndDestroy(&socketServer);
       
  2416 
       
  2417 #endif
       
  2418 	return TestStepResult() ;
       
  2419 	}
       
  2420 
       
  2421 
       
  2422 TVerdict CTestOOMReadSmsList::doTestStepL()
       
  2423 /**
       
  2424  *  Test out of memory handling, Read SMS messages from store
       
  2425  */
       
  2426 	{
       
  2427 	INFO_PRINTF1(_L("OOM test: Read, SMS store ReadAll not supported."));
       
  2428 #ifdef _DEBUG
       
  2429 
       
  2430 	RSocketServ socketServer;
       
  2431 	PrepareRegTestLC(socketServer, 24);
       
  2432 	
       
  2433 
       
  2434 	RSocket socket;
       
  2435 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2436 
       
  2437 	TInt count, i(0);
       
  2438 
       
  2439 	RSmsSocketReadStream readstream(socket);
       
  2440 	TRequestStatus status;
       
  2441 
       
  2442 	CSmsMessage* smsMessage = NULL;
       
  2443 
       
  2444 	TInt numberOfMessages(0);
       
  2445 	smsMessage = CreateSmsMessageL(_L(""),TSmsDataCodingScheme::ESmsAlphabet7Bit);
       
  2446 	CleanupStack::PushL(smsMessage);
       
  2447 
       
  2448 	count=0;
       
  2449 	TInt ret=KErrNoMemory;
       
  2450 	while (ret==KErrNoMemory || ret==KErrEof || count < 10)
       
  2451 		{
       
  2452 		
       
  2453 		socketServer.__DbgFailNext(count);
       
  2454 		socketServer.__DbgMarkHeap();
       
  2455 		TRAP(ret,numberOfMessages=MakeReadSmsStoreRequestL(socket););
       
  2456 		socketServer.__DbgMarkEnd(0);
       
  2457 		
       
  2458 		if (ret==KErrNone)
       
  2459 			{
       
  2460 			//Check that test client can read all messages from the stream
       
  2461 			for (i=0; i<numberOfMessages; i++)
       
  2462 				{
       
  2463 				TRAPD(ret,readstream >> *smsMessage);
       
  2464 				TEST(ret == KErrNone);
       
  2465 				socket.Ioctl(KIoctlReadMessageSucceeded,status,NULL, KSolSmsProv);
       
  2466 				User::WaitForRequest(status);
       
  2467 				TEST(status.Int() == KErrNone);
       
  2468 				}
       
  2469 			}
       
  2470 		count++;
       
  2471 		}
       
  2472 
       
  2473 	CleanupStack::PopAndDestroy(smsMessage);
       
  2474 
       
  2475 	TEST(ret == KErrNone);
       
  2476 
       
  2477 	socketServer.__DbgFailNext(-1); // Reset heap
       
  2478 
       
  2479 	INFO_PRINTF2(_L("%d enumerated messages"), numberOfMessages);
       
  2480 
       
  2481 	CleanupStack::PopAndDestroy(&socket);	//socket
       
  2482 
       
  2483 	//Ensure socket server session is closed to remove cache
       
  2484     CleanupStack::PopAndDestroy(&socketServer);
       
  2485 
       
  2486 #endif
       
  2487 	return TestStepResult() ;
       
  2488 	}
       
  2489 
       
  2490 
       
  2491 TVerdict CTestOOMDeleteSms::doTestStepL()
       
  2492 /**
       
  2493  *  Test out of memory handling, Delete SMS message
       
  2494  */
       
  2495 	{
       
  2496 	INFO_PRINTF1(_L("OOM test: Delete SMS message."));
       
  2497 #ifdef _DEBUG
       
  2498 
       
  2499 	RSocketServ socketServer;
       
  2500 	PrepareRegTestLC(socketServer, 25);
       
  2501 	
       
  2502 
       
  2503 	RSocket socket;
       
  2504 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  2505 
       
  2506 	// First get one message from store.
       
  2507 	RPointerArray<CSmsMessage> messages;
       
  2508 	CleanupResetAndDestroyPushL(messages);
       
  2509 	ReadSmsStoreL(socket, messages);
       
  2510 
       
  2511 	TInt count=0;
       
  2512 	TInt i (0);
       
  2513 	TInt ret=0;
       
  2514 	while (ret==KErrNoMemory || ret==KErrEof || i<messages.Count())
       
  2515 		{
       
  2516 		socketServer.__DbgFailNext(count);
       
  2517 		socketServer.__DbgMarkHeap();
       
  2518 		TRAP(ret,DeleteSmsLeaveIfErrorL(*messages[i],socket));
       
  2519 		socketServer.__DbgMarkEnd(0);
       
  2520 		
       
  2521 		if(ret == KErrNone)
       
  2522 			//Deleting was successfull. Delete next message.
       
  2523 
       
  2524 			i++;
       
  2525 		else if(ret == KErrNotFound)
       
  2526 			//SMS Prot has deleted message, but returned KErrNoMemory.
       
  2527 			//When test harness tried to delete same message again, SMS stack
       
  2528 			//returned KErrNotFound.
       
  2529 			TEST(ret == KErrNone);
       
  2530 		count++;
       
  2531 		}
       
  2532 
       
  2533 	socketServer.__DbgFailNext(-1); // Reset heap
       
  2534 	messages.ResetAndDestroy();
       
  2535 	ReadSmsStoreL(socket, messages);
       
  2536 
       
  2537 	TEST(messages.Count()== 0);
       
  2538 	CleanupStack::PopAndDestroy(2);	//messages,socket
       
  2539 
       
  2540 	//Ensure socket server session is closed to remove cache
       
  2541     CleanupStack::PopAndDestroy(&socketServer);
       
  2542     
       
  2543 #endif
       
  2544 	return TestStepResult() ;
       
  2545 	}
       
  2546 
       
  2547 
       
  2548 TVerdict CTestOOMSmsParams::doTestStepL()
       
  2549 /**
       
  2550  *  Test out of memory handling, Retrieve and store SMS parameters
       
  2551  */
       
  2552 	{
       
  2553 	INFO_PRINTF1(_L("OOM test: Read and Store Sms params."));
       
  2554 #ifdef _DEBUG
       
  2555 
       
  2556 	RSocketServ socketServer;
       
  2557 	PrepareRegTestLC(socketServer, 26);
       
  2558 	
       
  2559 
       
  2560 	RSocket socket;
       
  2561 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  2562 
       
  2563 	TInt count;
       
  2564 
       
  2565 	RSmsSocketReadStream readstream(socket);
       
  2566 	TRequestStatus status;
       
  2567 
       
  2568 	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
       
  2569 	CleanupStack::PushL(smspList);
       
  2570 
       
  2571 	INFO_PRINTF1(_L("Retrieve SMS parameters."));
       
  2572 
       
  2573 	count=0;
       
  2574 	TInt ret=KErrNoMemory;
       
  2575 	while (ret==KErrNoMemory || ret==KErrEof || count < 8)
       
  2576 		{
       
  2577 		socketServer.__DbgFailNext(count);
       
  2578 		socketServer.__DbgMarkHeap();		
       
  2579 		TRAP(ret,iSmsStackTestUtils->MakeParametersReadRequestL(socket););
       
  2580 		socketServer.__DbgMarkEnd(0);
       
  2581 		count++;
       
  2582 		}
       
  2583 	socketServer.__DbgFailNext(-1);	// suppress any lurking heap failure
       
  2584 
       
  2585 	TEST(ret == KErrNone);
       
  2586 
       
  2587 	// Read list from stream and make acknowledgement to the SMS Stack
       
  2588 	readstream >> *smspList;
       
  2589 	socket.Ioctl(KIoctlCompleteReadSmsParams,status,NULL,KSolSmsProv);
       
  2590 	User::WaitForRequest(status);
       
  2591 	TEST(status.Int() == KErrNone);
       
  2592 
       
  2593 	CleanupStack::PopAndDestroy(smspList);
       
  2594 
       
  2595 //
       
  2596 //Store parameters
       
  2597 //
       
  2598 	smspList=CMobilePhoneSmspList::NewL();
       
  2599 	CleanupStack::PushL(smspList);
       
  2600 
       
  2601 	RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy;
       
  2602 	entryToTsy.iText = DMMTSY_SMSP_STORE_TEXT1;
       
  2603 	entryToTsy.iValidParams = DMMTSY_SMSP_STORE_VALID_PARAMS1;
       
  2604 	entryToTsy.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TON_0;
       
  2605 	entryToTsy.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_DESTINATION_NP_0;
       
  2606 	entryToTsy.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TEL_NUMBER_0;
       
  2607 	entryToTsy.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY1;
       
  2608 	entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_1;
       
  2609 	entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_1;
       
  2610 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_1;
       
  2611 	entryToTsy.iProtocolId = DMMTSY_SMSP_STORE_PID1;
       
  2612 	entryToTsy.iDcs = DMMTSY_SMSP_STORE_DCS1;
       
  2613 
       
  2614 	// Add entry to the list
       
  2615 	entryToTsy.iIndex = 0;
       
  2616 	smspList->AddEntryL(entryToTsy);
       
  2617 
       
  2618 	INFO_PRINTF1(_L("Store SMS parameters."));
       
  2619 
       
  2620 	count=0;
       
  2621 	ret=KErrNoMemory;
       
  2622 	while (ret==KErrNoMemory || count < 10)
       
  2623 		{
       
  2624 		socketServer.__DbgFailNext(count);
       
  2625 		socketServer.__DbgMarkHeap();
       
  2626 		TRAP(ret,iSmsStackTestUtils->StoreParamsLeaveIfErrorL(*smspList,socket););
       
  2627 		socketServer.__DbgMarkEnd(0);
       
  2628 		count++;
       
  2629 		}
       
  2630 
       
  2631 	TEST(ret == KErrNone);
       
  2632 
       
  2633 	socketServer.__DbgFailNext(-1); // Reset heap
       
  2634 //
       
  2635 // Retrieve SMS parameters again and test the content of params
       
  2636 //
       
  2637 	//Wait a second, OOM macro is still closing!!
       
  2638 	INFO_PRINTF1(_L("Retrieve parameters again..."));
       
  2639 
       
  2640 	//Create the smspList
       
  2641 	CMobilePhoneSmspList* smspList2 = CMobilePhoneSmspList::NewL();
       
  2642 	CleanupStack::PushL(smspList2);
       
  2643 
       
  2644 	// Make read SMS params request to the SMS Stack.
       
  2645 	socket.Ioctl(KIoctlReadSmsParams,status,NULL, KSolSmsProv);
       
  2646 	INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  2647 	User::WaitForRequest(status);
       
  2648 	TEST(status.Int() == KErrNone);
       
  2649 
       
  2650 	// Read list from stream and make acknowledgement to the SMS Stack
       
  2651 	readstream >> *smspList2;
       
  2652 	socket.Ioctl(KIoctlCompleteReadSmsParams, status, NULL,KSolSmsProv);
       
  2653 	User::WaitForRequest(status);
       
  2654 	TEST(status.Int() == KErrNone);
       
  2655 
       
  2656 	ret = iSmsStackTestUtils->TestParameters(*smspList,*smspList2);
       
  2657 	TEST(ret == KErrNone);
       
  2658 
       
  2659 	CleanupStack::PopAndDestroy(3);  //smspList2, smspList, socket
       
  2660 
       
  2661 	//Ensure socket server session is closed to remove cache
       
  2662     CleanupStack::PopAndDestroy(&socketServer);
       
  2663 
       
  2664 #endif
       
  2665 	return TestStepResult();
       
  2666 	}
       
  2667 
       
  2668 
       
  2669 //
       
  2670 // Integration test harnesses against SIM tsy
       
  2671 //
       
  2672 TVerdict CTestMeStoreDupAndMiss::doTestStepL()
       
  2673 /**
       
  2674  *  Test SIM store containing concatenated messages when
       
  2675  *  some pdu is missing and some pdu is duplicated.
       
  2676  */
       
  2677 	{
       
  2678 	INFO_PRINTF1(_L("Test the ME store containing duplicated and missing pdus"));
       
  2679 
       
  2680 	RSocketServ socketServer;
       
  2681 	PrepareRegTestLC(socketServer, 27);
       
  2682 	
       
  2683 
       
  2684 	// Open the socket for SIM operations
       
  2685 	RSocket enumSocket;
       
  2686 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,enumSocket,ESmsAddrRecvAny);
       
  2687 
       
  2688 	// Enumerate messages
       
  2689 	RPointerArray<CSmsMessage> messages;
       
  2690 	CleanupResetAndDestroyPushL(messages);
       
  2691 	ReadSmsStoreL(enumSocket, messages);
       
  2692 
       
  2693 	TEST(messages.Count() == 0);
       
  2694 	CleanupStack::PopAndDestroy(&messages);
       
  2695 	CleanupStack::PopAndDestroy(&enumSocket);
       
  2696 
       
  2697 	RSocket socket;
       
  2698 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2699 
       
  2700 	INFO_PRINTF1(_L("waiting for 1st incoming SMS...") );
       
  2701 	WaitForRecvL(socket);
       
  2702 	CSmsMessage* smsMessage = RecvSmsL(socket);
       
  2703 	delete smsMessage;
       
  2704 
       
  2705 	INFO_PRINTF1(_L("waiting for 2nd incoming SMS...") );
       
  2706 	WaitForRecvL(socket);
       
  2707 	smsMessage = RecvSmsL(socket);
       
  2708     delete smsMessage;
       
  2709 
       
  2710 	INFO_PRINTF1(_L("waiting for 3rd incoming SMS...") );
       
  2711 	WaitForRecvL(socket);
       
  2712 	smsMessage = RecvSmsL(socket);
       
  2713     delete smsMessage;
       
  2714 
       
  2715 	INFO_PRINTF1(_L("waiting for 4th incoming SMS...") );
       
  2716 	WaitForRecvL(socket);
       
  2717 	smsMessage = RecvSmsL(socket);
       
  2718     delete smsMessage;
       
  2719 
       
  2720 	CleanupStack::PopAndDestroy(&socket);
       
  2721     CleanupStack::PopAndDestroy(&socketServer);
       
  2722 
       
  2723 	INFO_PRINTF1(_L("Additional waiting SMS protocol to get unloaded"));
       
  2724 	User::After(20000000);
       
  2725 	return TestStepResult() ;
       
  2726 	}
       
  2727 
       
  2728 
       
  2729 TVerdict CTestSimStoreDupAndMiss::doTestStepL()
       
  2730 /**
       
  2731  *  Test ME store containing concatenated messages when
       
  2732  *  some pdu is missing and some pdu is duplicated.
       
  2733  */
       
  2734 	{
       
  2735 	INFO_PRINTF1(_L("Test the ME store containing duplicated and missing pdus"));
       
  2736 
       
  2737 	RSocketServ socketServer;
       
  2738 	PrepareRegTestLC(socketServer, 28);
       
  2739 	
       
  2740 
       
  2741 	// Open the socket for SIM operations
       
  2742 	RSocket socket;
       
  2743 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2744 
       
  2745 	// Enumerate messages
       
  2746 	RPointerArray<CSmsMessage> messages;
       
  2747 	CleanupResetAndDestroyPushL(messages);
       
  2748 	ReadSmsStoreL(socket, messages);
       
  2749 
       
  2750 	const CSmsMessage* message = messages[1];
       
  2751 
       
  2752 	TInt ret = DeleteSmsL(*message, socket);
       
  2753 	TEST(ret == KErrNone);
       
  2754 
       
  2755 	//Try to delete the same message again!
       
  2756 	ret = DeleteSmsL(*message, socket);
       
  2757 	TEST(ret == KErrNone);
       
  2758 
       
  2759 	//Delete concatenated msg that has one pdu duplicated
       
  2760 	message = messages[2];
       
  2761 	ret = DeleteSmsL(*message, socket);
       
  2762 	TEST(ret == KErrNone);
       
  2763 
       
  2764 	//Delete concatenated msg that has one pdu duplicated and pdus are in different order
       
  2765 	message = messages[3];
       
  2766 	ret = DeleteSmsL(*message, socket);
       
  2767 	TEST(ret == KErrNone);
       
  2768 
       
  2769 	//Delete concatenated msg that has one pdu missing and pdus are in different order
       
  2770 	message = messages[0];
       
  2771 	ret = DeleteSmsL(*message, socket);
       
  2772 	TEST(ret == KErrNone);
       
  2773 
       
  2774 	messages.ResetAndDestroy();
       
  2775 
       
  2776 	ReadSmsStoreL(socket, messages);
       
  2777 
       
  2778 	TEST(messages.Count() == 4);
       
  2779 
       
  2780 	CleanupStack::PopAndDestroy(&messages);
       
  2781 	CleanupStack::PopAndDestroy(&socket);
       
  2782     CleanupStack::PopAndDestroy(&socketServer);
       
  2783 
       
  2784 	return TestStepResult() ;
       
  2785 	}
       
  2786 
       
  2787 
       
  2788 TVerdict CTestRxCphs::doTestStepL()
       
  2789 /**
       
  2790  *  Test the reception of a CPHS Message Waiting Indication
       
  2791  */
       
  2792 	{
       
  2793 	INFO_PRINTF1(_L("Test Rx Message Waiting Cphs"));
       
  2794 
       
  2795 	RSocketServ socketServer;
       
  2796 	PrepareRegTestLC(socketServer, 30);
       
  2797 	
       
  2798 
       
  2799 	// Open the socket for SIM operations
       
  2800 	RSocket socket;
       
  2801 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrMessageIndication);
       
  2802 
       
  2803 	INFO_PRINTF1(_L("...waiting for incoming Message Waiting Indicator Cphs...") );
       
  2804 	WaitForRecvL(socket);
       
  2805 	CSmsMessage* smsMessage = RecvSmsL(socket);
       
  2806 	CleanupStack::PushL(smsMessage);
       
  2807 	INFO_PRINTF1(_L("incoming Message Waiting Indicator Cphs") );
       
  2808 
       
  2809 	//Ideally we want to test the ton, npi, length and the content of the address byte 3 & 4
       
  2810 	//However, as far as I can see you can't get the npi from the address. (==0?)
       
  2811 	//and we need an example of PDU to get the right address.
       
  2812 	TGsmSmsTelNumber address;
       
  2813 	smsMessage->ParsedToFromAddress(address);
       
  2814 
       
  2815 	TEST(( address.iTypeOfAddress.TON() == EGsmSmsTONAlphaNumeric));
       
  2816 	TEST(( address.iTelNumber.Length()==4));
       
  2817 	TEST(((address.iTelNumber[2] & 0x7E) == 0x10));
       
  2818 	TEST(((address.iTelNumber[3] & 0x7E) == 0x00));
       
  2819 
       
  2820 
       
  2821 	//test for the user data: space and then free-format text
       
  2822 	_LIT(KTestSingleSpace," ");
       
  2823 	TestSmsContentsL(smsMessage,KTestSingleSpace);
       
  2824 	INFO_PRINTF1(_L("Successful Match of Message Waiting Indicator Cphs") );
       
  2825 
       
  2826 	CleanupStack::PopAndDestroy(2); // socket, smsMessage
       
  2827     CleanupStack::PopAndDestroy(&socketServer);
       
  2828 
       
  2829 	return TestStepResult() ;
       
  2830 	}
       
  2831 
       
  2832 
       
  2833 TVerdict CTestInvalidPDUs::doTestStepL()
       
  2834 /**
       
  2835  *  Test receiving invalid pdus.
       
  2836  *  See tsmsprt_config.txt for definition of pdus.
       
  2837  */
       
  2838 	{
       
  2839 	INFO_PRINTF1(_L("Test receiving invalid pdus"));
       
  2840 
       
  2841 	RSocketServ socketServer;
       
  2842 	PrepareRegTestLC(socketServer, 31);
       
  2843 	
       
  2844 
       
  2845 	RSocket socket;
       
  2846 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2847 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  2848 	_LIT(KTestMsg2,"Voicemail waiting");
       
  2849 
       
  2850 	CSmsMessage* smsMessage = NULL;
       
  2851 	TInt i(1);
       
  2852 	//Receive SMSes
       
  2853 	while (i<17)//16 of the PDUs in tsmsprt_config.txt test31
       
  2854 		{       //should be decoded successfully into CSmsMessages
       
  2855 		INFO_PRINTF2(_L("waiting for incoming SMS No. %d..."), i);
       
  2856 		WaitForRecvL(socket);
       
  2857 		smsMessage = RecvSmsL(socket);
       
  2858 
       
  2859 		INFO_PRINTF1(_L("incoming SMS") );
       
  2860 		CleanupStack::PushL(smsMessage);
       
  2861 
       
  2862 		if (i!=10 && i!= 16)
       
  2863 			PrintMessageL(smsMessage);
       
  2864 
       
  2865 		if (i!=4 &&  i!= 10 && i!=12 && i<14)
       
  2866 			TestSmsContentsL(smsMessage,KTestMsg1);
       
  2867 		if (i==12)
       
  2868 			TestSmsContentsL(smsMessage, KTestMsg2);
       
  2869 		CleanupStack::PopAndDestroy(smsMessage);
       
  2870 		i++;
       
  2871 		}
       
  2872 
       
  2873 	CleanupStack::PopAndDestroy(&socket);
       
  2874     CleanupStack::PopAndDestroy(&socketServer);
       
  2875 
       
  2876 	return TestStepResult() ;
       
  2877 	}
       
  2878 
       
  2879 
       
  2880 TVerdict CTestStress::doTestStepL()
       
  2881 /**
       
  2882  *  Test Transmit and Receive large number of different messages
       
  2883  */
       
  2884 	{
       
  2885 	INFO_PRINTF1(_L("Test Tx and Rx large number of messages"));
       
  2886 
       
  2887 	RSocketServ socketServer;
       
  2888 	PrepareRegTestLC(socketServer, 32);
       
  2889 	
       
  2890 
       
  2891 	RSocket socket;
       
  2892 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  2893 
       
  2894 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  2895 
       
  2896 	//Set destination and SC numbers
       
  2897 	iTelephoneNumber=KPekka;
       
  2898 	iServiceCenterNumber=KRadiolinjaSC;
       
  2899 
       
  2900 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  2901 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  2902 	CleanupStack::PushL(smsMessage);
       
  2903 
       
  2904 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  2905 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  2906 
       
  2907 	INFO_PRINTF1(_L("Send large number of messages"));
       
  2908 
       
  2909 	TInt i(0);
       
  2910 	//Send SMSes
       
  2911 	while (i<20)
       
  2912 		{
       
  2913 		SendSmsL(smsMessage,socket);
       
  2914 		i++;
       
  2915 		}
       
  2916 
       
  2917 	CleanupStack::PopAndDestroy(smsMessage);
       
  2918 
       
  2919 	INFO_PRINTF1(_L("Receive large number of messages"));
       
  2920 	//Receive SMSes
       
  2921 	while (i!=0)
       
  2922 		{
       
  2923 		INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  2924 		WaitForRecvL(socket);
       
  2925 		smsMessage = RecvSmsL(socket);
       
  2926 
       
  2927 		INFO_PRINTF1(_L("incoming SMS") );
       
  2928 
       
  2929 		CleanupStack::PushL(smsMessage);
       
  2930 		TestSmsContentsL(smsMessage,KTestMsg1);
       
  2931 		CleanupStack::PopAndDestroy(smsMessage);
       
  2932 		i--;
       
  2933 		}
       
  2934 
       
  2935 	_LIT(KTest7bitMsg,"test message, length 23"); //7 bits test message, length 23 characters
       
  2936 
       
  2937 	//Set destination and SC numbers
       
  2938 	iTelephoneNumber=KPekka;
       
  2939 	iServiceCenterNumber=KSoneraSC;
       
  2940 
       
  2941 	alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  2942 	smsMessage=CreateSmsMessageL(KTest7bitMsg,alphabet);
       
  2943 	CleanupStack::PushL(smsMessage);
       
  2944 
       
  2945 	//Set status report request
       
  2946 	CSmsSubmit& submitPdu=(CSmsSubmit&)smsMessage->SmsPDU();
       
  2947 	submitPdu.SetStatusReportRequest(ETrue);
       
  2948 
       
  2949 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  2950 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  2951 
       
  2952 	INFO_PRINTF1(_L("Send large number of messages"));
       
  2953 	//Send SMSes
       
  2954 	while (i<40)
       
  2955 		{
       
  2956 		SendSmsL(smsMessage,socket);
       
  2957 		i++;
       
  2958 		}
       
  2959 	CleanupStack::PopAndDestroy(smsMessage);
       
  2960 
       
  2961 	//Receive status report
       
  2962 	TSmsServiceCenterAddress telephoneNumber(KPekka);
       
  2963 
       
  2964 	INFO_PRINTF1(_L("Receive large number of messages"));
       
  2965 	//Receive SMSes
       
  2966 	while (i!=0)
       
  2967 		{
       
  2968 		INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  2969 		WaitForRecvL(socket);
       
  2970 		smsMessage = RecvSmsL(socket);
       
  2971 
       
  2972 		INFO_PRINTF1(_L("incoming SMS") );
       
  2973 
       
  2974 		CleanupStack::PushL(smsMessage);
       
  2975 		TestSmsContentsL(smsMessage,KTest7bitMsg);
       
  2976 		CleanupStack::PopAndDestroy(smsMessage);
       
  2977 		i--;
       
  2978 		//Receive status report
       
  2979 		RecvStatusReportL(telephoneNumber, socket);
       
  2980 		}
       
  2981 
       
  2982 //Tx and rx concatenated message & status report
       
  2983 	_LIT(KLongText,"3 PDU test SMS message. "
       
  2984 L"3 PDU test SMS message. "
       
  2985 L"3 PDU test SMS message. "
       
  2986 L"3 PDU test SMS message. "
       
  2987 L"3 PDU test SMS message. "
       
  2988 L"3 PDU test SMS message. "
       
  2989 L"3 PDU test SMS message. "
       
  2990 L"3 PDU test SMS message. "
       
  2991 L"3 PDU test SMS message. "
       
  2992 L"3 PDU test SMS message. "
       
  2993 L"3 PDU test SMS message. "
       
  2994 L"3 PDU test SMS message. "
       
  2995 L"3 PDU test SMS message. "
       
  2996 L"3 PDU test SMS message. "
       
  2997 L"3 PDU test SMS message. "
       
  2998 L"3 PDU test SMS message. "
       
  2999 L"3 PDU test SMS message. "
       
  3000 L"The End.");
       
  3001 
       
  3002 	//Set destination and SC numbers
       
  3003 	iTelephoneNumber=KRegTestNumber;
       
  3004 	iServiceCenterNumber=KVodafoneSC;
       
  3005 
       
  3006 	alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;//changed to 7 bits
       
  3007 	smsMessage=CreateSmsWithStatusReportReqL(KLongText,alphabet);
       
  3008 
       
  3009 	CleanupStack::PushL(smsMessage);
       
  3010 	INFO_PRINTF1(_L("Send concatenated message"));
       
  3011 	SendSmsL(smsMessage,socket);
       
  3012 	CleanupStack::PopAndDestroy(smsMessage);
       
  3013 
       
  3014 	INFO_PRINTF1(_L("Recv concatenated message and status report"));
       
  3015 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  3016 	WaitForRecvL(socket);
       
  3017 	smsMessage = RecvSmsL(socket);
       
  3018 
       
  3019 	INFO_PRINTF1(_L("incoming SMS") );
       
  3020 
       
  3021 	CleanupStack::PushL(smsMessage);
       
  3022 	TestSmsContentsL(smsMessage,KLongText);
       
  3023 	CleanupStack::PopAndDestroy(smsMessage);
       
  3024 
       
  3025 	telephoneNumber.Copy( KRegTestNumber );
       
  3026 	RecvStatusReportL(telephoneNumber, socket);
       
  3027 
       
  3028 //Tx and rx longer concatenated message & status report
       
  3029 	_LIT(KLongText2,"7 PDU test SMS message. "
       
  3030 L"7 PDU test SMS message. "
       
  3031 L"7 PDU test SMS message. "
       
  3032 L"7 PDU test SMS message. "
       
  3033 L"7 PDU test SMS message. "
       
  3034 L"7 PDU test SMS message. "
       
  3035 L"7 PDU test SMS message. "
       
  3036 L"7 PDU test SMS message. "
       
  3037 L"7 PDU test SMS message. "
       
  3038 L"7 PDU test SMS message. "
       
  3039 L"7 PDU test SMS message. "
       
  3040 L"7 PDU test SMS message. "
       
  3041 L"7 PDU test SMS message. "
       
  3042 L"7 PDU test SMS message. "
       
  3043 L"7 PDU test SMS message. "
       
  3044 L"7 PDU test SMS message. "
       
  3045 L"7 PDU test SMS message. "
       
  3046 L"7 PDU test SMS message. "
       
  3047 L"7 PDU test SMS message. "
       
  3048 L"7 PDU test SMS message. "
       
  3049 L"7 PDU test SMS message. "
       
  3050 L"7 PDU test SMS message. "
       
  3051 L"7 PDU test SMS message. "
       
  3052 L"7 PDU test SMS message. "
       
  3053 L"7 PDU test SMS message. "
       
  3054 L"7 PDU test SMS message. "
       
  3055 L"7 PDU test SMS message. "
       
  3056 L"7 PDU test SMS message. "
       
  3057 L"7 PDU test SMS message. "
       
  3058 L"7 PDU test SMS message. "
       
  3059 L"7 PDU test SMS message. "
       
  3060 L"7 PDU test SMS message. "
       
  3061 L"7 PDU test SMS message. "
       
  3062 L"7 PDU test SMS message. "
       
  3063 L"The End.");
       
  3064 
       
  3065 	//Set destination and SC numbers
       
  3066 	iTelephoneNumber=KPekka;
       
  3067 	iServiceCenterNumber=KVodafoneSC;
       
  3068 
       
  3069 	alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  3070 	smsMessage=CreateSmsWithStatusReportReqL(KLongText2,alphabet);
       
  3071 
       
  3072 	CleanupStack::PushL(smsMessage);
       
  3073 	INFO_PRINTF1(_L("Send concatenated message"));
       
  3074 	SendSmsL(smsMessage,socket);
       
  3075 	CleanupStack::PopAndDestroy(smsMessage);
       
  3076 
       
  3077 	INFO_PRINTF1(_L("Recv concatenated message and status report"));
       
  3078 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  3079 	WaitForRecvL(socket);
       
  3080 	smsMessage = RecvSmsL(socket);
       
  3081 
       
  3082 	INFO_PRINTF1(_L("incoming SMS") );
       
  3083 
       
  3084 	CleanupStack::PushL(smsMessage);
       
  3085 	TestSmsContentsL(smsMessage,KLongText2);
       
  3086 
       
  3087 	telephoneNumber.Copy( KPekka );
       
  3088 	RecvStatusReportL(telephoneNumber, socket);
       
  3089 
       
  3090     //
       
  3091     // Validate that log entry has been updated with the time the last 
       
  3092     // SMS PDU was actually received by the destination mobile, ie the discharge time contained in the last
       
  3093     // Status Report which is received. The discharge time for the last PDU has been set to be in 
       
  3094     // 2021 - the discharge time of the previous PDUs has been set to 2020. Choosing dates which
       
  3095     // are well in the future ensures that the SMS Status Reports do not have time stamps
       
  3096     // which are earlier than the time that the corresponding SMS Submit PDUs were sent by
       
  3097     // the originator- this would result in the event log entry being purged from the logging system.
       
  3098     // 
       
  3099     
       
  3100     CLogEvent* logEvent=CLogEvent::NewL();
       
  3101     CleanupStack::PushL(logEvent);
       
  3102         
       
  3103     //Status report received. Get sent message's log event again.
       
  3104     //Status report's LogServerId should be same as submit's LogServerId
       
  3105     iSmsStackTestUtils->GetLogEventL(*logEvent,smsMessage->LogServerId()-1);
       
  3106 
       
  3107     //Check contents of log event
       
  3108     INFO_PRINTF1(_L("Checking sent messages log event after status report received.") );
       
  3109     if((logEvent->Description() != _L("Short message")) ||
       
  3110        (logEvent->Direction() != _L("Outgoing")) ||
       
  3111        (logEvent->Status() != _L("Delivered")) ||
       
  3112        (logEvent->Subject() != _L("Data Message")) )
       
  3113         TEST(KErrArgument);
       
  3114 
       
  3115     TTime time = logEvent->Time();
       
  3116     TDateTime dateTime = time.DateTime();
       
  3117     
       
  3118     if ((dateTime.Year() != 2021 ) ||
       
  3119         (dateTime.Month() != 11)   ||
       
  3120         (dateTime.Day() != 1)      ||
       
  3121         (dateTime.Hour() != 13)    ||
       
  3122         (dateTime.Minute() != 38   ||
       
  3123         (dateTime.Second() != 18)))
       
  3124         TEST(KErrArgument);         
       
  3125     
       
  3126     CleanupStack::PopAndDestroy(logEvent);
       
  3127     CleanupStack::PopAndDestroy(smsMessage);        
       
  3128 	
       
  3129 	CleanupStack::PopAndDestroy(&socket);
       
  3130     CleanupStack::PopAndDestroy(&socketServer);
       
  3131 
       
  3132 	return TestStepResult() ;
       
  3133 	}
       
  3134 
       
  3135 
       
  3136 TVerdict CTestCombinedStore::doTestStepL()
       
  3137 /**
       
  3138  *  Test combined store.
       
  3139  */
       
  3140 	{
       
  3141 	INFO_PRINTF1(_L("Test Combined SMS Store"));
       
  3142 
       
  3143 	RSocketServ socketServer;
       
  3144 	PrepareRegTestLC(socketServer, 33);
       
  3145 	
       
  3146 
       
  3147 	// Open the socket for SIM operations
       
  3148 	RSocket socket;
       
  3149 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3150 
       
  3151 	// Enumerate messages. Concatenated message with constituent PDUs is stored to the SIM, Phone store and
       
  3152 	// Combined store. Also one normal single part message is stored to Combined store.
       
  3153 	RPointerArray<CSmsMessage> messages;
       
  3154 	CleanupResetAndDestroyPushL(messages);
       
  3155 	ReadSmsStoreL(socket, messages);
       
  3156 	TEST(messages.Count()==3);
       
  3157 
       
  3158 	CSmsMessage::TMobileSmsStorage storage = messages[0]->Storage();
       
  3159 	TEST(storage==CSmsMessage::ESmsSIMStorage);
       
  3160 	storage = messages[1]->Storage();
       
  3161 	TEST(storage==CSmsMessage::ESmsCombinedStorage);
       
  3162 
       
  3163 	// Delete messages
       
  3164 	TInt ret = DeleteSmsL(*messages[0], socket);
       
  3165 	TEST(ret == KErrNone);
       
  3166 	ret = DeleteSmsL(*messages[2], socket);
       
  3167 	TEST(ret == KErrNone);
       
  3168 
       
  3169 	ret = DeleteSmsL(*messages[1], socket);
       
  3170 	TEST(ret == KErrNone);
       
  3171 	messages.ResetAndDestroy();
       
  3172 
       
  3173 	// Read messages and check that message store is empty
       
  3174 	ReadSmsStoreL(socket, messages);
       
  3175 	TEST(messages.Count()==0);
       
  3176 	messages.ResetAndDestroy();
       
  3177 
       
  3178 	// Create and write message to the Combined store
       
  3179 	_LIT(KStoreMsg1,"Store MSG to combined store");
       
  3180 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  3181 	CSmsMessage* smsmessage1=CreateSmsMessageL(KStoreMsg1,alphabet);
       
  3182 	CleanupStack::PushL(smsmessage1);
       
  3183 	smsmessage1->SetStorage(CSmsMessage::ESmsCombinedStorage);
       
  3184 	WriteSmsToSimL(*smsmessage1, socket);
       
  3185 
       
  3186 	// Create and write concatenated message to the Combined store
       
  3187 	_LIT(KStoreMsg2,"3 PDU test SMS message. "
       
  3188 L"3 PDU test SMS message. "
       
  3189 L"3 PDU test SMS message. "
       
  3190 L"3 PDU test SMS message. "
       
  3191 L"3 PDU test SMS message. "
       
  3192 L"3 PDU test SMS message. "
       
  3193 L"3 PDU test SMS message. "
       
  3194 L"3 PDU test SMS message. "
       
  3195 L"3 PDU test SMS message. "
       
  3196 L"3 PDU test SMS message. "
       
  3197 L"3 PDU test SMS message. "
       
  3198 L"3 PDU test SMS message. "
       
  3199 L"3 PDU test SMS message. "
       
  3200 L"3 PDU test SMS message. "
       
  3201 L"3 PDU test SMS message. "
       
  3202 L"3 PDU test SMS message. "
       
  3203 L"3 PDU test SMS message. "
       
  3204 L"The End.");
       
  3205 	CSmsMessage* smsmessage2=CreateSmsMessageL(KStoreMsg2,alphabet);
       
  3206 	CleanupStack::PushL(smsmessage2);
       
  3207 	smsmessage2->SetStorage(CSmsMessage::ESmsCombinedStorage);
       
  3208 	WriteSmsToSimL(*smsmessage2, socket);
       
  3209 
       
  3210 	// Read all message and check store info
       
  3211 	ReadSmsStoreL(socket, messages);
       
  3212 	TEST(messages.Count()==2);
       
  3213 
       
  3214 	storage = messages[0]->Storage();
       
  3215 	TEST(storage==CSmsMessage::ESmsCombinedStorage);
       
  3216 	storage = messages[1]->Storage();
       
  3217 	TEST(storage==CSmsMessage::ESmsCombinedStorage);
       
  3218 
       
  3219 	// Delete both messages
       
  3220 	ret = DeleteSmsL(*messages[0], socket);
       
  3221 	TEST(ret == KErrNone);
       
  3222 	ret = DeleteSmsL(*messages[1], socket);
       
  3223 	TEST(ret == KErrNone);
       
  3224 	messages.ResetAndDestroy();
       
  3225 
       
  3226 	// Read messages and check that message store is empty
       
  3227 	ReadSmsStoreL(socket, messages);
       
  3228 	TEST(messages.Count()==0);
       
  3229 
       
  3230 	CleanupStack::PopAndDestroy(4);	//socket, messages, smsmessage1, smsmessage2
       
  3231     CleanupStack::PopAndDestroy(&socketServer);
       
  3232 
       
  3233 	return TestStepResult() ;
       
  3234 	}
       
  3235 
       
  3236 
       
  3237 TVerdict CTestParamsInter::doTestStepL()
       
  3238 /**
       
  3239  *  Test retrieving and storing the sms parameters.
       
  3240  *  Data tests: GT83-T_SmsInter-015 ... GT83-T_SmsInter-022
       
  3241  */
       
  3242 	{
       
  3243 	INFO_PRINTF1(_L("Parameter storage data testing"));
       
  3244 
       
  3245 	RSocketServ socketServer;
       
  3246 	PrepareRegTestLC(socketServer, 34);
       
  3247 	
       
  3248 
       
  3249 	TInt ret(KErrNone);
       
  3250     TRequestStatus status;
       
  3251 
       
  3252 //
       
  3253 // Retrieve SMS parameters
       
  3254 //
       
  3255 	// Open the socket for SIM operations
       
  3256 	RSocket socket;
       
  3257 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  3258 
       
  3259     RSmsSocketReadStream readstream(socket);
       
  3260 
       
  3261 	//Create the smspList
       
  3262 	CMobilePhoneSmspList* smspListOriginal = CMobilePhoneSmspList::NewL();
       
  3263 	CleanupStack::PushL(smspListOriginal);
       
  3264 
       
  3265 	INFO_PRINTF1(_L("waiting 2 secs for smsprot to load"));
       
  3266 	User::After(2000000);
       
  3267 
       
  3268     // Make read SMS params request to the SMS Stack.
       
  3269     socket.Ioctl(KIoctlReadSmsParams,status,NULL, KSolSmsProv);
       
  3270     INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  3271     User::WaitForRequest(status);
       
  3272 	TEST(status.Int() == KErrNone);
       
  3273 
       
  3274     // Read list from stream and make acknowledgement to the SMS Stack
       
  3275 	// Store parameters to return them to SIM at the end of the test
       
  3276     readstream >> *smspListOriginal;
       
  3277     socket.Ioctl(KIoctlCompleteReadSmsParams, status, NULL,KSolSmsProv);
       
  3278     User::WaitForRequest(status);
       
  3279 	TEST(status.Int() == KErrNone);
       
  3280 
       
  3281 //
       
  3282 // Store SMS parameters
       
  3283 //
       
  3284 	CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
       
  3285 	CleanupStack::PushL(smspList);
       
  3286 
       
  3287 	RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy;
       
  3288 
       
  3289 	entryToTsy.iIndex = 0;
       
  3290 	entryToTsy.iText = _L("Test SMS address 1");
       
  3291 	entryToTsy.iValidParams = RMobileSmsMessaging::KSCAIncluded;
       
  3292     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_1;
       
  3293     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_1;
       
  3294 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_1;
       
  3295 
       
  3296     smspList->AddEntryL(entryToTsy);
       
  3297 
       
  3298 	entryToTsy.iIndex = 1;
       
  3299 	entryToTsy.iText = _L("Test SMS address 2");
       
  3300 	entryToTsy.iValidParams = RMobileSmsMessaging::KSCAIncluded | RMobileSmsMessaging::KDestinationIncluded;
       
  3301     entryToTsy.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TON_0;
       
  3302     entryToTsy.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_DESTINATION_NP_0;
       
  3303 	entryToTsy.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TEL_NUMBER_0;
       
  3304     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_2;
       
  3305     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_2;
       
  3306 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_2;
       
  3307 
       
  3308     smspList->AddEntryL(entryToTsy);
       
  3309 
       
  3310 	entryToTsy.iIndex = 2;
       
  3311 	entryToTsy.iText = _L("Test SMS address 3");
       
  3312 	entryToTsy.iValidParams = RMobileSmsMessaging::KSCAIncluded | RMobileSmsMessaging::KDestinationIncluded | RMobileSmsMessaging::KValidityPeriodIncluded;
       
  3313     entryToTsy.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TON_1;
       
  3314     entryToTsy.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_DESTINATION_NP_1;
       
  3315 	entryToTsy.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TEL_NUMBER_1;
       
  3316 	entryToTsy.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY1;
       
  3317     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_3;
       
  3318     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_3;
       
  3319 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_3;
       
  3320 
       
  3321     smspList->AddEntryL(entryToTsy);
       
  3322 
       
  3323 	entryToTsy.iIndex = 3;
       
  3324 	entryToTsy.iText = _L("Test SMS address 4");
       
  3325 	entryToTsy.iValidParams = RMobileSmsMessaging::KSCAIncluded | RMobileSmsMessaging::KDestinationIncluded | RMobileSmsMessaging::KValidityPeriodIncluded | RMobileSmsMessaging::KProtocolIdIncluded;
       
  3326     entryToTsy.iDestination.iTypeOfNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TON_2;
       
  3327     entryToTsy.iDestination.iNumberPlan = DMMTSY_SMS_MESSAGE_DESTINATION_NP_2;
       
  3328 	entryToTsy.iDestination.iTelNumber = DMMTSY_SMS_MESSAGE_DESTINATION_TEL_NUMBER_2;
       
  3329 	entryToTsy.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY1;
       
  3330     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_4;
       
  3331     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_4;
       
  3332 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_4;
       
  3333 	entryToTsy.iProtocolId = DMMTSY_SMSP_STORE_PID1;
       
  3334 	entryToTsy.iDcs = DMMTSY_SMSP_STORE_DCS1;
       
  3335 
       
  3336     smspList->AddEntryL(entryToTsy);
       
  3337 
       
  3338 	entryToTsy.iIndex = 4;
       
  3339 	entryToTsy.iText = _L("Test SMS address 5");
       
  3340 	entryToTsy.iValidParams = RMobileSmsMessaging::KSCAIncluded | RMobileSmsMessaging::KValidityPeriodIncluded | RMobileSmsMessaging::KProtocolIdIncluded | RMobileSmsMessaging::KDcsIncluded;
       
  3341 	entryToTsy.iValidityPeriod = DMMTSY_SMSP_STORE_VALIDITY1;
       
  3342     entryToTsy.iServiceCentre.iTypeOfNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TON_5;
       
  3343     entryToTsy.iServiceCentre.iNumberPlan = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_NP_5;
       
  3344 	entryToTsy.iServiceCentre.iTelNumber = DMMTSY_SMS_MESSAGE_GSMSERVICECENTRE_TEL_NUMBER_5;
       
  3345 	entryToTsy.iProtocolId = DMMTSY_SMSP_STORE_PID1;
       
  3346 	entryToTsy.iDcs = DMMTSY_SMSP_STORE_DCS1;
       
  3347 
       
  3348     smspList->AddEntryL(entryToTsy);
       
  3349 
       
  3350     INFO_PRINTF1(_L("storing the SMS parameters...") );
       
  3351 
       
  3352     // Write parameter list to the stream and make write SMS parameters request to the SMS Stack.
       
  3353     ret = iSmsStackTestUtils->StoreParamsL(*smspList,socket,EFalse);
       
  3354 	TEST(ret == KErrNone);
       
  3355 
       
  3356 //
       
  3357 // Retrieve SMS parameters again
       
  3358 //
       
  3359 	CMobilePhoneSmspList* smspList2=CMobilePhoneSmspList::NewL();
       
  3360 	CleanupStack::PushL(smspList2);
       
  3361 
       
  3362     // Now read SMS parameters
       
  3363     socket.Ioctl(KIoctlReadSmsParams,status,NULL,KSolSmsProv);
       
  3364     INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  3365     User::WaitForRequest(status);
       
  3366 	TEST(status.Int() == KErrNone);
       
  3367 
       
  3368     // Read list from stream and make acknowledgement to the SMS Stack
       
  3369     readstream >> *smspList2;
       
  3370     socket.Ioctl(KIoctlCompleteReadSmsParams,status,NULL, KSolSmsProv);
       
  3371     User::WaitForRequest(status);
       
  3372 	TEST(status.Int() == KErrNone);
       
  3373 
       
  3374 	ret = iSmsStackTestUtils->TestParameters(*smspList,*smspList2);
       
  3375 	TEST(ret == KErrNone);
       
  3376 
       
  3377 	CleanupStack::PopAndDestroy(2);	//smspList,smspList2
       
  3378 
       
  3379 //
       
  3380 // Store original SMS parameters to the SIM
       
  3381 //
       
  3382 
       
  3383     INFO_PRINTF1(_L("storing the original SMS parameters...") );
       
  3384 
       
  3385     // Make Write SMS Parameters request
       
  3386     ret = iSmsStackTestUtils->StoreParamsL(*smspListOriginal,socket,EFalse);
       
  3387 	TEST(ret == KErrNone);
       
  3388 
       
  3389 	CleanupStack::PopAndDestroy(2); // socket,smspListOriginal
       
  3390     CleanupStack::PopAndDestroy(&socketServer);
       
  3391 
       
  3392 	return TestStepResult() ;
       
  3393 	}
       
  3394 
       
  3395 
       
  3396 TVerdict CTestTxRxAlphanumeric::doTestStepL()
       
  3397 /**
       
  3398  *  Test a Tx And Rx of messages with alphanumeric dest/orig addresses
       
  3399  */
       
  3400 	{
       
  3401 	INFO_PRINTF1(_L("Test Tx And Rx SMSes with Alphanumeric originator address"));
       
  3402 
       
  3403 	RSocketServ socketServer;
       
  3404 	PrepareRegTestLC(socketServer, 35);
       
  3405 	
       
  3406 
       
  3407 	RSocket socket;
       
  3408 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3409 
       
  3410 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  3411 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  3412 	CSmsMessage* txSms=NULL;
       
  3413 	CSmsMessage* rxSms=NULL;
       
  3414 	TGsmSmsTelNumber gsmSmsTelNumber;
       
  3415 	TInt i(0);
       
  3416 
       
  3417 	//Set destination and SC numbers
       
  3418 	RArray<TSmsServiceCenterAddress> destinationNumbers;
       
  3419 	CleanupClosePushL(destinationNumbers);
       
  3420 
       
  3421 	destinationNumbers.Append(_L("TooLongAddress")); //not delivered
       
  3422 	destinationNumbers.Append(_L("SONERA"));
       
  3423 	destinationNumbers.Append(_L("S\xD6NER\xC4"));
       
  3424 	destinationNumbers.Append(_L("\xD1\xC5\xE6\xA7\xA3\xA5\xE9\xE7\xDF\xDC\x40"));
       
  3425 	destinationNumbers.Append(_L("\x40\x20\xE0\xC9\xF1\xD8\xF8\xBF\xA4"));
       
  3426 	destinationNumbers.Append(_L("@")); //=0x00
       
  3427 	destinationNumbers.Append(_L(" ")); //=0x20
       
  3428 	destinationNumbers.Append(_L(""));
       
  3429 
       
  3430 	while (i<destinationNumbers.Count())
       
  3431 		{
       
  3432 		iTelephoneNumber=destinationNumbers[i];
       
  3433 
       
  3434 		txSms=CreateSmsMessageL(KTestMsg1,alphabet);
       
  3435 		CleanupStack::PushL(txSms);
       
  3436 
       
  3437 		gsmSmsTelNumber.iTelNumber.Copy(iTelephoneNumber);
       
  3438 
       
  3439 		// Type of number is EGsmSmsTONAlphaNumeric
       
  3440 		gsmSmsTelNumber.iTypeOfAddress.SetTON(EGsmSmsTONAlphaNumeric);
       
  3441 		txSms->SetParsedToFromAddressL(gsmSmsTelNumber);
       
  3442 		INFO_PRINTF1(_L("Send SMS message. Type of number is EGsmSmsTONAlphaNumeric") );
       
  3443 		INFO_PRINTF2(_L("Destination number:...[%S]"),&iTelephoneNumber);
       
  3444 
       
  3445 		//Send SMS
       
  3446 		if(i!=0)
       
  3447 			SendSmsL(txSms,socket);
       
  3448 		else
       
  3449 			SendSmsErrorL(txSms,socket);
       
  3450 
       
  3451 		if(i!=0)
       
  3452 			{
       
  3453 			INFO_PRINTF2(_L("waiting for incoming SMS No. %d..."), i);
       
  3454 			WaitForRecvL(socket);
       
  3455 			rxSms = RecvSmsL(socket);
       
  3456 
       
  3457 			INFO_PRINTF1(_L("incoming SMS") );
       
  3458 			CleanupStack::PushL(rxSms);
       
  3459 
       
  3460 			TestSmsContentsL(rxSms,KTestMsg1);
       
  3461 
       
  3462 			INFO_PRINTF1(_L("Originator address:...["));
       
  3463 			Logger().Write(rxSms->ToFromAddress());
       
  3464 			INFO_PRINTF1(_L("]"));
       
  3465 
       
  3466 			TEST(rxSms->ToFromAddress() == txSms->ToFromAddress());
       
  3467 			INFO_PRINTF1(_L("Orig address matches to destination address!!"));
       
  3468 			INFO_PRINTF1(_L("ServiceCenter number:...["));
       
  3469 			Logger().Write(rxSms->ServiceCenterAddress());
       
  3470 			INFO_PRINTF1(_L("]"));
       
  3471 
       
  3472 			CleanupStack::PopAndDestroy(rxSms);
       
  3473 			}
       
  3474 		CleanupStack::PopAndDestroy(txSms);
       
  3475 		i++;
       
  3476 		}
       
  3477 
       
  3478 	CleanupStack::PopAndDestroy(2); //socket, destinationNumbers
       
  3479     CleanupStack::PopAndDestroy(&socketServer);
       
  3480 
       
  3481 	return TestStepResult() ;
       
  3482 	}
       
  3483 
       
  3484 
       
  3485 TVerdict CTestRxSuspend::doTestStepL()
       
  3486 /**
       
  3487  *  Test suspend receiving messages
       
  3488  */
       
  3489 	{
       
  3490 	const TInt testNumber = 36;
       
  3491 	const TInt smsRxCount = KDefaultMaxmumNumberOfCompleteMessagesInReassemblyStore + 1; //< Number of messages that will cause a suspend
       
  3492 
       
  3493 	//Add smsRxCount SmsRx tags to c:\config.txt, taking KTSmsPrtConfigFileName as input
       
  3494 	CTestConfig* configFile = CTestConfig::NewLC(iFs, KGmsSmsConfigFileDir, KTSmsPrtConfigFileName);
       
  3495 
       
  3496 	TInt i(0);
       
  3497 	for (i = 0; i < smsRxCount; i++)
       
  3498 		{
       
  3499 		_LIT(KTestRxSuspendMessage, "TestRxSuspendMessage %d");
       
  3500 		TBuf<32> buf;
       
  3501 		buf.AppendFormat(KTestRxSuspendMessage, i);
       
  3502 		CSmsMessage* message = iSmsStackTestUtils->CreateSmsMessageLC(CSmsPDU::ESmsDeliver, iTelephoneNumber, buf);
       
  3503 
       
  3504 		iSmsStackTestUtils->AddSmsRxL(*configFile, testNumber, *message, iServiceCenterNumber);
       
  3505 
       
  3506 		CleanupStack::PopAndDestroy(message);
       
  3507 		}
       
  3508 
       
  3509 	//Write the configFile to c:\config.txt
       
  3510 	configFile->WriteFileL(KSimTsyConfigFileName);
       
  3511 
       
  3512 	CTestConfigSection& section = iSmsStackTestUtils->GetSectionL(*configFile, testNumber);
       
  3513 	_LIT8(KTestRxSuspendSmsRxPeriod, "SmsRxPeriod");
       
  3514 	const TInt rxPeriod = section.ItemValue(KTestRxSuspendSmsRxPeriod, 5) + 1;
       
  3515 
       
  3516 	CleanupStack::PopAndDestroy(configFile);
       
  3517 
       
  3518 	RSocketServ socketServer;
       
  3519 	PrepareRegTestLC(socketServer, testNumber);
       
  3520 	
       
  3521 
       
  3522 	RSocket socket;
       
  3523 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3524 
       
  3525 	INFO_PRINTF1(_L("Test suspend receiving messages"));
       
  3526 
       
  3527 	CSmsMessage* smsMessage;
       
  3528 	for (i = 0; i < smsRxCount; i++)
       
  3529 		{
       
  3530 		INFO_PRINTF2(_L("%d Waiting for incoming SMS..."), i);
       
  3531 		WaitForRecvL(socket);
       
  3532 		smsMessage = RecvSmsL(socket, KIoctlReadMessageFailed);
       
  3533 
       
  3534 		PrintSmsMessage(*smsMessage);
       
  3535 		delete smsMessage;
       
  3536 
       
  3537 		INFO_PRINTF3(_L("%d Waiting %d secs for next message"), i, rxPeriod);
       
  3538 		User::After(rxPeriod * 1000000);
       
  3539 		}
       
  3540 
       
  3541 	for (i = 0; i < smsRxCount; i++)
       
  3542 		{
       
  3543 		INFO_PRINTF2(_L("%d Waiting for incoming SMS..."), i);
       
  3544 		WaitForRecvL(socket);
       
  3545 		smsMessage = RecvSmsL(socket, KIoctlReadMessageSucceeded);
       
  3546 
       
  3547 		PrintSmsMessage(*smsMessage);
       
  3548 		delete smsMessage;
       
  3549 		}
       
  3550 
       
  3551 	INFO_PRINTF2(_L("Waiting %d secs to see if other (unexpected) message received"), rxPeriod * 3);
       
  3552 	const TBool otherReceived = TimedWaitForRecvL(socket, rxPeriod * 3 * 1000000);
       
  3553 
       
  3554 	if (otherReceived)
       
  3555 		{
       
  3556 		INFO_PRINTF1(_L("Unexpected message received:"));
       
  3557 		smsMessage = RecvSmsL(socket, KIoctlReadMessageSucceeded);
       
  3558 		PrintSmsMessage(*smsMessage);
       
  3559 		delete smsMessage;
       
  3560 		}
       
  3561 
       
  3562 	TEST(!otherReceived);
       
  3563 
       
  3564 	CleanupStack::PopAndDestroy(&socket);
       
  3565     CleanupStack::PopAndDestroy(&socketServer);
       
  3566 
       
  3567 
       
  3568 	return TestStepResult() ;
       
  3569 	}
       
  3570 
       
  3571 
       
  3572 TVerdict CTestEnumerateCorrupted::doTestStepL()
       
  3573 	{
       
  3574 	RSocketServ socketServer;
       
  3575 	PrepareRegTestLC(socketServer, 37);
       
  3576 	
       
  3577 
       
  3578 	RSocket socket;
       
  3579 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3580 
       
  3581 	// Enumerate messages
       
  3582 	RPointerArray<CSmsMessage> messages;
       
  3583 	CleanupResetAndDestroyPushL(messages);
       
  3584 	ReadSmsStoreL(socket, messages);
       
  3585 
       
  3586 	TInt numberOfMess=messages.Count();
       
  3587 	TEST(numberOfMess==2);//the 3rd message is corrupted and therefore ignored
       
  3588 
       
  3589 	messages.ResetAndDestroy();
       
  3590 	CleanupStack::PopAndDestroy(&messages);
       
  3591 	CleanupStack::PopAndDestroy(&socket);
       
  3592     CleanupStack::PopAndDestroy(&socketServer);
       
  3593 
       
  3594 	return TestStepResult() ;
       
  3595 	}
       
  3596 
       
  3597 
       
  3598 TVerdict CTestCancelling::doTestStepL()
       
  3599 	{
       
  3600 	/*This test harness has been created to reproduce  HOE-573FF6 that has been closed
       
  3601 	This test shows that even if the cancelling operation return KErrCancel, the request is
       
  3602 	still processed
       
  3603 	note: the message count will keep increasing as the socket is not emptied
       
  3604 	*/
       
  3605 	INFO_PRINTF1(_L("Test Cancelling requests"));
       
  3606 	RSocketServ socketServer;
       
  3607 	PrepareRegTestLC(socketServer, 38);
       
  3608 	
       
  3609 
       
  3610 	RSocket socket;
       
  3611 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3612 
       
  3613 	RSocket socket2;
       
  3614 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket2,ESmsAddrLocalOperation);
       
  3615 	RSmsSocketWriteStream writestream(socket);
       
  3616 
       
  3617 	RPointerArray<CSmsMessage> messages;
       
  3618 	CleanupResetAndDestroyPushL(messages);
       
  3619 
       
  3620 	_LIT(KStoreMsg1,"SIM TEST MESSAGE 1");
       
  3621 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  3622 	CSmsMessage* smsmessage=CreateSmsMessageL(KStoreMsg1,alphabet);
       
  3623 	CleanupStack::PushL(smsmessage);
       
  3624 	smsmessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  3625 
       
  3626 	TPckgBuf<TUint> sbuf;
       
  3627 	TRequestStatus status;
       
  3628 //***********************************************************
       
  3629 	INFO_PRINTF1(_L("testing cancel send message"));
       
  3630 
       
  3631 	writestream << *smsmessage;
       
  3632 	writestream.CommitL();
       
  3633 
       
  3634 	socket.Ioctl(KIoctlSendSmsMessage,status,&sbuf, KSolSmsProv);
       
  3635 	INFO_PRINTF1(_L("Cancel"));
       
  3636 	socket.CancelIoctl();
       
  3637 	User::WaitForRequest(status);
       
  3638 	TEST(status.Int()==KErrCancel);
       
  3639 	//need to check here if the message has actually been sent
       
  3640 
       
  3641 
       
  3642 //************************************************************
       
  3643 	INFO_PRINTF1(_L("testing cancel Delete message"));
       
  3644 
       
  3645 	ReadSmsStoreL(socket, messages);
       
  3646 	const CSmsMessage* message = messages[0];
       
  3647 	INFO_PRINTF1(_L("Delete message"));
       
  3648 
       
  3649 	writestream << *message;
       
  3650 	writestream.CommitL();
       
  3651 
       
  3652 	socket.Ioctl(KIoctlDeleteSmsMessage,status,NULL,KSolSmsProv);
       
  3653 	INFO_PRINTF1(_L("Cancel"));
       
  3654 	User::After(300000);
       
  3655 	socket.CancelIoctl();
       
  3656 
       
  3657 	User::WaitForRequest(status);
       
  3658 	TEST(status.Int()==KErrCancel);
       
  3659 	INFO_PRINTF1(_L("Cancel successfully"));
       
  3660 
       
  3661 
       
  3662 //****************************************************
       
  3663 	INFO_PRINTF1(_L("testing cancel write message"));
       
  3664 
       
  3665 	writestream << *smsmessage;
       
  3666 	writestream.CommitL();
       
  3667 	TInt ret;
       
  3668 	ret = CancelWriteSmsToSimL(*smsmessage, socket, 100000);
       
  3669 	TEST(ret==KErrCancel);
       
  3670 
       
  3671 	CleanupStack::PopAndDestroy(smsmessage);
       
  3672 	messages.ResetAndDestroy();
       
  3673 	CleanupStack::PopAndDestroy(&messages);
       
  3674 	CleanupStack::PopAndDestroy(&socket2);
       
  3675 	CleanupStack::PopAndDestroy(&socket);
       
  3676     CleanupStack::PopAndDestroy(&socketServer);
       
  3677 
       
  3678 	return TestStepResult() ;
       
  3679 	}
       
  3680 
       
  3681 
       
  3682 TVerdict CTestSendAndRecvMsgsWithDifferentTON::doTestStepL()
       
  3683 /**
       
  3684  *  @test Send and receive messages with different type of number
       
  3685  */
       
  3686 	{
       
  3687 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigExtraFileName);
       
  3688 	ParseSettingsFromFileL();
       
  3689 	TBool found( ETrue );
       
  3690 	TInt count( 0 );
       
  3691 	while( found )
       
  3692 		{
       
  3693 		//run the test
       
  3694 		found = DoSingleTestCaseL( KTestSendAndRecvMsgsWithDifferentTON, count++ );
       
  3695 		}
       
  3696 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigFileName);
       
  3697 	return TestStepResult() ;
       
  3698 	}
       
  3699 
       
  3700 
       
  3701 TVerdict CTestSendAndReceiveIndicatorMsgs::doTestStepL()
       
  3702 	{
       
  3703 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigExtraFileName);
       
  3704 	ParseSettingsFromFileL();
       
  3705 	TBool found( ETrue );
       
  3706 	TInt count( 0 );
       
  3707 	while( found )
       
  3708 		{
       
  3709 		//run the test
       
  3710 		found = DoSingleTestCaseL( KTestSendAndReceiveIndicatorMsgs, count++ );
       
  3711 		}
       
  3712 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigFileName);
       
  3713 	return TestStepResult() ;
       
  3714 	}
       
  3715 
       
  3716 
       
  3717 TVerdict CTestSendRecvMaxLengthMsg::doTestStepL()
       
  3718     {
       
  3719     INFO_PRINTF1(_L("Sending max length SMS can take a while ... get a cup of coffee or two :-)"));
       
  3720 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigTxRxMaxMsgFileName);
       
  3721 
       
  3722 	ParseSettingsFromFileL();
       
  3723 
       
  3724 	RSocketServ socketServer;
       
  3725 
       
  3726 	PrepareRegTestLC(socketServer, 42);
       
  3727 	
       
  3728 
       
  3729 	RSocket socket;
       
  3730 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3731 
       
  3732 	HBufC* textBuf=HBufC::NewL(39015);
       
  3733 	CleanupStack::PushL(textBuf);
       
  3734 	TPtr textPtr=textBuf->Des();
       
  3735 	TInt i;
       
  3736 	for(i=0;i<255;i++)
       
  3737 		{
       
  3738 		textPtr.Append(KText);
       
  3739 		}
       
  3740 
       
  3741 	SendAndRecvSms7BitL(textPtr,socket);
       
  3742 
       
  3743 	CleanupStack::PopAndDestroy(2);
       
  3744     CleanupStack::PopAndDestroy(&socketServer);
       
  3745 
       
  3746 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigFileName);
       
  3747 
       
  3748 	return TestStepResult() ;
       
  3749     }
       
  3750 
       
  3751 
       
  3752 TVerdict CTestSendAndRecvMsgsWithDifferentPID::doTestStepL()
       
  3753 /**
       
  3754  *  @test Send and receive messages with different type of protocol identifier
       
  3755  */
       
  3756     {
       
  3757 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigExtraFileName);
       
  3758 	ParseSettingsFromFileL();
       
  3759 
       
  3760     INFO_PRINTF1(_L("Send and receive messages with different type of TP-PID"));
       
  3761 
       
  3762 	RSocketServ socketServer;
       
  3763 
       
  3764 	PrepareRegTestLC(socketServer, 41);
       
  3765 	
       
  3766 
       
  3767 	RSocket sendSocket;
       
  3768 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,sendSocket,ESmsAddrSendOnly);
       
  3769 
       
  3770 	_LIT(KTestMsg,"Test message.");
       
  3771 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  3772 	CSmsMessage* sendMessage=CreateSmsMessageL(KTestMsg,alphabet);
       
  3773 	CleanupStack::PushL(sendMessage);
       
  3774     CSmsSubmit& submitPdu=(CSmsSubmit&)sendMessage->SmsPDU();
       
  3775 
       
  3776 // TP-PID is telex (or teletex reduced to telex format)
       
  3777 	submitPdu.SetPIDType(TSmsProtocolIdentifier::ESmsPIDTelematicInterworking);
       
  3778 	submitPdu.SetTelematicDeviceIndicator(TSmsProtocolIdentifier::ESmsTelematicDevice);
       
  3779 	submitPdu.SetTelematicDeviceType(TSmsProtocolIdentifier::ESmsTelex);
       
  3780 	INFO_PRINTF1(_L("Send SMS message. TP-PID is telex (or teletex reduced to telex format)") );
       
  3781 	SendSmsL(sendMessage,sendSocket);
       
  3782 
       
  3783 	RSocket recvSocket;
       
  3784 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,recvSocket,ESmsAddrRecvAny);
       
  3785 
       
  3786 	INFO_PRINTF1(_L("Waiting for incoming SMS...") );
       
  3787 	WaitForRecvL(recvSocket);
       
  3788 	CSmsMessage* recvMessage = RecvSmsL(recvSocket);
       
  3789 	CleanupStack::PushL(recvMessage);
       
  3790 	CSmsDeliver& deliverPdu1=(CSmsDeliver&)recvMessage->SmsPDU();
       
  3791 
       
  3792 	TestSmsContentsL(recvMessage,KTestMsg);
       
  3793 	TEST(deliverPdu1.PIDType() == submitPdu.PIDType());
       
  3794 	TEST(deliverPdu1.TelematicDeviceIndicator() == submitPdu.TelematicDeviceIndicator());
       
  3795 	TEST(deliverPdu1.TelematicDeviceType() == submitPdu.TelematicDeviceType());
       
  3796 
       
  3797 	CleanupStack::PopAndDestroy(2);	//recvSocket,recvMessage
       
  3798 
       
  3799 // TP-PID is Replace Short Message Type 1
       
  3800 	submitPdu.SetPIDType(TSmsProtocolIdentifier::ESmsPIDShortMessageType);
       
  3801 	submitPdu.SetShortMessageType(TSmsProtocolIdentifier::ESmsReplaceShortMessageType1);
       
  3802 	INFO_PRINTF1(_L("Send SMS message. TP-PID is Replace Short Message Type 1") );
       
  3803 	SendSmsL(sendMessage,sendSocket);
       
  3804 
       
  3805 	INFO_PRINTF1(_L("Send another SMS message. TP-PID is Replace Short Message Type 1") );
       
  3806 	SendSmsL(sendMessage,sendSocket);
       
  3807 
       
  3808 	INFO_PRINTF1(_L("Open ESmsAddrRecvAny socket and receive messages") );
       
  3809 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,recvSocket,ESmsAddrRecvAny);
       
  3810 
       
  3811 	INFO_PRINTF1(_L("Waiting for incoming SMS...") );
       
  3812 	WaitForRecvL(recvSocket);
       
  3813 	recvMessage = RecvSmsL(recvSocket);
       
  3814 	CleanupStack::PushL(recvMessage);
       
  3815 	CSmsDeliver& deliverPdu2=(CSmsDeliver&)recvMessage->SmsPDU();
       
  3816 
       
  3817 	TestSmsContentsL(recvMessage,KTestMsg);
       
  3818 	TEST(deliverPdu2.PIDType() == submitPdu.PIDType());
       
  3819 	TEST(deliverPdu2.ShortMessageType() == submitPdu.ShortMessageType());
       
  3820 	CleanupStack::PopAndDestroy(recvMessage);
       
  3821 
       
  3822 	/*If Replace Short Message code is present, then the SMS Stack should check the
       
  3823 	originating address and replace any existing stored message having the same
       
  3824 	Protocol Identifier code and originating address with the new short message and
       
  3825 	other parameter values. Anyway this is optional feature in 23040 standard.*/
       
  3826 	/*INFO_PRINTF1(_L("If SMS Stack supports optional Replace Short Message feature (23040/9.2.3.9)") );
       
  3827 	INFO_PRINTF1(_L("it shouldn't deliver same message again to the test harness.") );
       
  3828 	INFO_PRINTF1(_L("Test was successful if test harness stucks here.") );
       
  3829 	INFO_PRINTF1(_L("Waiting for incoming SMS...") );*/
       
  3830 
       
  3831 	/*I beleive the above is wrong, the sms stack does not care about the PID and just passes the message
       
  3832 	it is up to the applicatio to do that check; therefore the 2 replace messages are received -Pierre*/
       
  3833 
       
  3834 
       
  3835 	WaitForRecvL(recvSocket);
       
  3836 	recvMessage = RecvSmsL(recvSocket);
       
  3837 	CleanupStack::PushL(recvMessage);
       
  3838 	CSmsDeliver& deliverPdu3=(CSmsDeliver&)recvMessage->SmsPDU();
       
  3839 
       
  3840 	TestSmsContentsL(recvMessage,KTestMsg);
       
  3841 	TEST(deliverPdu3.PIDType() == submitPdu.PIDType());
       
  3842 	TEST(deliverPdu3.ShortMessageType() == submitPdu.ShortMessageType());
       
  3843 	CleanupStack::PopAndDestroy(recvMessage);
       
  3844 
       
  3845 	CleanupStack::PopAndDestroy(3);	//socketServer,sendSocket,sendMessage,recvSocket
       
  3846     CleanupStack::PopAndDestroy(&socketServer);
       
  3847 
       
  3848 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigFileName);
       
  3849 	return TestStepResult() ;
       
  3850 	}
       
  3851 
       
  3852 
       
  3853 TVerdict CSmsParamsErrorCases::doTestStepL()
       
  3854  /**
       
  3855   *  Test SMS parameters while error returned from TSY.
       
  3856   *  Manual function moved from t_sms_inter_auto test suite.
       
  3857   */
       
  3858 	{
       
  3859 	INFO_PRINTF1(_L("Test SMS prameters while eror returned from TSY"));
       
  3860 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigExtraFileName);
       
  3861 	const TInt testNumber = 43;         // or any number it reaches
       
  3862 	CTestConfig* configFile = CTestConfig::NewLC(iFs, KGmsSmsConfigFileDir, KTSmsPrtConfigExtraFileName);
       
  3863 	CTestConfigSection& section = iSmsStackTestUtils->GetSectionL(*configFile, testNumber);
       
  3864 	TInt param = section.ItemValue(KSmspEntryValidParams, 2);
       
  3865 	RMobileSmsMessaging::TMobileSmspStoreValidParams smspEntryValidParams = ( RMobileSmsMessaging::TMobileSmspStoreValidParams )param;
       
  3866 	param = section.ItemValue(KSmspEntryScTypeOfNumber, 1);
       
  3867 	RMobilePhone::TMobileTON smspEntryScTypeOfNumber = ( RMobilePhone::TMobileTON )param;
       
  3868 	param = section.ItemValue(KSmspEntryScNumberPlan, 1);
       
  3869 	RMobilePhone::TMobileNPI smspEntryScNumberPlan = ( RMobilePhone::TMobileNPI )param;
       
  3870 	const TDesC8& smspEntryScTelNumber = section.ItemValue(KServiceCentreAddress, (_L8("+358508771010")));
       
  3871 
       
  3872 	TestSmsParamsErrorCasesL(smspEntryValidParams, smspEntryScTypeOfNumber, smspEntryScNumberPlan, smspEntryScTelNumber);
       
  3873 	CleanupStack::PopAndDestroy(configFile);
       
  3874 	iSmsStackTestUtils->CopyConfigFileL(KTSmsPrtConfigFileName);
       
  3875 	return TestStepResult() ;
       
  3876 	}
       
  3877 
       
  3878 void CSmsParamsErrorCases::TestSmsParamsErrorCasesL(
       
  3879 		RMobileSmsMessaging::TMobileSmspStoreValidParams aSmspEntryValidParams,
       
  3880 		RMobilePhone::TMobileTON aSmspEntryScTypeOfNumber,
       
  3881 		RMobilePhone::TMobileNPI aSmspEntryScNumberPlan,
       
  3882 		const TDesC8& aSmspEntryScTelNumber)
       
  3883 /**
       
  3884  *  TSY returns error to retrieve and store requests
       
  3885  */
       
  3886     {
       
  3887     INFO_PRINTF1(_L("TSY returns error to retrieve and store SMSP list requests"));
       
  3888 
       
  3889 	RSocketServ socketServer;
       
  3890 	PrepareRegTestLC(socketServer,43);
       
  3891 	
       
  3892 
       
  3893 	RSocket socket;
       
  3894 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  3895 
       
  3896 	RSmsSocketReadStream readstream(socket);
       
  3897 	TRequestStatus status;
       
  3898 
       
  3899 //
       
  3900 //Retrieve SMSP list
       
  3901 //
       
  3902     // Make read SMS params request to the SMS Stack.
       
  3903     socket.Ioctl(KIoctlReadSmsParams,status,NULL, KSolSmsProv);
       
  3904     INFO_PRINTF1(_L("Waiting for SMS parameters...") );
       
  3905     User::WaitForRequest(status);
       
  3906 	INFO_PRINTF2(_L("Read parameters returned %d"), status.Int());
       
  3907 	if(status.Int() == KErrNone)
       
  3908 		{
       
  3909 		CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
       
  3910 		CleanupStack::PushL(smspList);
       
  3911 		// Read list from stream and make acknowledgement to the SMS Stack
       
  3912 		readstream >> *smspList;
       
  3913 		socket.Ioctl(KIoctlCompleteReadSmsParams, status, NULL,KSolSmsProv);
       
  3914 		User::WaitForRequest(status);
       
  3915 		CleanupStack::PopAndDestroy(smspList);
       
  3916 		}
       
  3917 		TEST(status.Int() == KErrNone);
       
  3918 
       
  3919 //
       
  3920 //Store SMSP list
       
  3921 //
       
  3922 	// Create the smspList
       
  3923     CMobilePhoneSmspList* smspList = CMobilePhoneSmspList::NewL();
       
  3924     CleanupStack::PushL(smspList);
       
  3925 
       
  3926 	// Because of AT-command limitations we can store only SC address to the phone.
       
  3927 	RMobileSmsMessaging::TMobileSmspEntryV1 smspEntry;
       
  3928 	smspEntry.iIndex=0;
       
  3929     smspEntry.iValidParams = aSmspEntryValidParams;
       
  3930     smspEntry.iServiceCentre.iTypeOfNumber = aSmspEntryScTypeOfNumber;
       
  3931     smspEntry.iServiceCentre.iNumberPlan = aSmspEntryScNumberPlan;
       
  3932 	smspEntry.iServiceCentre.iTelNumber.Copy(aSmspEntryScTelNumber);
       
  3933 	smspList->AddEntryL(smspEntry);
       
  3934 
       
  3935 	INFO_PRINTF1(_L("writing SMS parameters..."));
       
  3936 	TInt ret = iSmsStackTestUtils->StoreParamsL(*smspList,socket,EFalse);
       
  3937 	TEST(ret == KErrNone);
       
  3938 
       
  3939 	CleanupStack::PopAndDestroy(smspList);
       
  3940     CleanupStack::PopAndDestroy(&socket);
       
  3941     CleanupStack::PopAndDestroy(&socketServer);
       
  3942 
       
  3943 	}
       
  3944 
       
  3945 
       
  3946 TVerdict CTestResendFailedConcatinatedMessage::doTestStepL()
       
  3947 /**
       
  3948  *  Test that sent PDUs in failed concatenated message are not re-sent"
       
  3949  */
       
  3950 	{
       
  3951 	INFO_PRINTF1(_L(" Test that sent PDUs in failed concatenated message are not re-sent"));
       
  3952 	TLogId logid;
       
  3953 	TLogSmsPduData pduData;
       
  3954 
       
  3955 	RSocketServ socketServer;
       
  3956 	PrepareRegTestLC(socketServer, 44);
       
  3957 	
       
  3958 
       
  3959 	RSocket socket;
       
  3960 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  3961 
       
  3962     // Create comms database object
       
  3963 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  3964 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  3965 #else
       
  3966 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  3967 #endif
       
  3968 	CleanupStack::PushL(db);
       
  3969 
       
  3970 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
  3971 
       
  3972     // EReceiveUnstoredClientAck
       
  3973 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  3974 	CleanupStack::PushL(smsReceiveModeField);
       
  3975 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  3976 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  3977 	smsReceiveModeField->ModifyL(*db);
       
  3978 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  3979 	CleanupStack::PopAndDestroy(db);
       
  3980 
       
  3981 	_LIT(KTestMsg1,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCC");
       
  3982 
       
  3983 	//Set destination and SC numbers
       
  3984 	iTelephoneNumber=KPekka;
       
  3985 	iServiceCenterNumber=KRadiolinjaSC;
       
  3986 
       
  3987 
       
  3988 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  3989 
       
  3990 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  3991 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  3992 
       
  3993 	//Send SMS	- first pdu fails
       
  3994 
       
  3995 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  3996 	CleanupStack::PushL(smsMessage);
       
  3997 	pduData.iType=smsMessage->Type();
       
  3998 	logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  3999 	smsMessage->SetLogServerId(logid);
       
  4000 	INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4001 	SendSmsErrorL(smsMessage,socket);
       
  4002 	SendSmsL(smsMessage,socket);
       
  4003 	CleanupStack::PopAndDestroy(smsMessage);
       
  4004 	//Receive SMS
       
  4005 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4006 	WaitForRecvL(socket);
       
  4007 	smsMessage = RecvSmsL(socket);
       
  4008 
       
  4009 	INFO_PRINTF1(_L("incoming SMS") );
       
  4010 
       
  4011 	CleanupStack::PushL(smsMessage);
       
  4012 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4013 	CleanupStack::PopAndDestroy(smsMessage);
       
  4014 
       
  4015 	//Send SMS	- second pdu fails
       
  4016 
       
  4017 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4018 	CleanupStack::PushL(smsMessage);
       
  4019 	pduData.iType=smsMessage->Type();
       
  4020 	logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  4021 	smsMessage->SetLogServerId(logid);
       
  4022 	INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4023 	SendSmsErrorL(smsMessage,socket);
       
  4024 	SendSmsL(smsMessage,socket);
       
  4025 	CleanupStack::PopAndDestroy(smsMessage);
       
  4026 
       
  4027 	//Receive SMS
       
  4028 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4029 	WaitForRecvL(socket);
       
  4030 	smsMessage = RecvSmsL(socket);
       
  4031 
       
  4032 	INFO_PRINTF1(_L("incoming SMS") );
       
  4033 
       
  4034 	CleanupStack::PushL(smsMessage);
       
  4035 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4036 	CleanupStack::PopAndDestroy(smsMessage);
       
  4037 
       
  4038 
       
  4039 	//Send SMS	- third pdu fails
       
  4040 
       
  4041 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4042 	CleanupStack::PushL(smsMessage);
       
  4043 	pduData.iType=smsMessage->Type();
       
  4044 	logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  4045 	smsMessage->SetLogServerId(logid);
       
  4046 	INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4047 	SendSmsErrorL(smsMessage,socket);
       
  4048 	SendSmsL(smsMessage,socket);
       
  4049 	CleanupStack::PopAndDestroy(smsMessage);
       
  4050 
       
  4051 	//Receive SMS
       
  4052 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4053 	WaitForRecvL(socket);
       
  4054 	smsMessage = RecvSmsL(socket);
       
  4055 
       
  4056 	INFO_PRINTF1(_L("incoming SMS") );
       
  4057 
       
  4058 	CleanupStack::PushL(smsMessage);
       
  4059 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4060 	CleanupStack::PopAndDestroy(smsMessage);
       
  4061 
       
  4062 	//Send SMS	- fourth pdu fails
       
  4063 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4064 	CleanupStack::PushL(smsMessage);
       
  4065 	pduData.iType=smsMessage->Type();
       
  4066 	logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  4067 	smsMessage->SetLogServerId(logid);
       
  4068 	INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4069 	SendSmsErrorL(smsMessage,socket);
       
  4070 	smsMessage->SetLogServerId(KLogNullId);
       
  4071 	SendSmsL(smsMessage,socket);
       
  4072 	CleanupStack::PopAndDestroy(smsMessage);
       
  4073 
       
  4074 	//Receive SMS
       
  4075 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4076 	WaitForRecvL(socket);
       
  4077 	smsMessage = RecvSmsL(socket);
       
  4078 
       
  4079 	INFO_PRINTF1(_L("incoming SMS") );
       
  4080 
       
  4081 	CleanupStack::PushL(smsMessage);
       
  4082 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4083 	CleanupStack::PopAndDestroy(smsMessage);
       
  4084 	CleanupStack::PopAndDestroy(&socket);
       
  4085     CleanupStack::PopAndDestroy(&socketServer);
       
  4086 
       
  4087 	return TestStepResult() ;
       
  4088 	}
       
  4089 
       
  4090 
       
  4091 TVerdict CTestMultipartWapMessage::doTestStepL()
       
  4092 /**
       
  4093  *  test multi-part WAP message
       
  4094  */
       
  4095 	{
       
  4096 
       
  4097 	INFO_PRINTF1(_L("Test receive multi-part WAP message"));
       
  4098 
       
  4099 	RSocketServ socketServer;
       
  4100 	PrepareRegTestLC(socketServer, 45);
       
  4101 	
       
  4102 	RSocket socket;
       
  4103 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4104 
       
  4105 	RSocket wapsock;
       
  4106 	TInt ret=wapsock.Open(socketServer,KWAPSMSAddrFamily,KSockDatagram,KWAPSMSDatagramProtocol);
       
  4107 	TEST(ret == KErrNone);
       
  4108 
       
  4109 	TWapAddr recvWapAddr;
       
  4110 	TBuf8<2048> recvBuf;
       
  4111 	TRequestStatus recvStatus;
       
  4112 	TWapAddr wapAddr;
       
  4113 
       
  4114 	wapAddr.SetWapPort(TWapPortNumber(9204));
       
  4115 	ret=wapsock.Bind(wapAddr);
       
  4116 	TEST(ret == KErrNone);
       
  4117 
       
  4118 	wapsock.RecvFrom(recvBuf,recvWapAddr,0,recvStatus);
       
  4119 
       
  4120 	// Receiving a datagram
       
  4121 	//
       
  4122 	User::WaitForRequest(recvStatus);
       
  4123 	TEST(recvStatus.Int() == KErrNone);
       
  4124 
       
  4125 	TInt len=recvBuf.Length();
       
  4126 	INFO_PRINTF2(_L("Recv datagram length: %d on socket OK"),len);
       
  4127 	INFO_PRINTF1(_L("WAP message contains:"));
       
  4128 
       
  4129 	const TInt KMaxPrintLen = 200;
       
  4130 
       
  4131 	for (TInt pos = 0; pos < len; pos += KMaxPrintLen)
       
  4132 		{
       
  4133 		TBuf<KMaxPrintLen> buf;
       
  4134 		buf.Zero();
       
  4135 		const TInt midLen = Min(KMaxPrintLen, len - pos);
       
  4136 		buf.SetLength(midLen);
       
  4137 		for (TInt i=0; i<midLen; i++)
       
  4138 			buf[i]=recvBuf[pos+i];
       
  4139 		INFO_PRINTF2(_L("%S"), &buf);
       
  4140 		}
       
  4141 
       
  4142 	wapsock.Close();
       
  4143 
       
  4144     CleanupStack::PopAndDestroy(&socket);
       
  4145     CleanupStack::PopAndDestroy(&socketServer);
       
  4146 
       
  4147 	return TestStepResult() ;
       
  4148 	}
       
  4149 
       
  4150 
       
  4151 TVerdict CTestMOSESMessage::doTestStepL()
       
  4152 /**
       
  4153  *  Test a simple Receive of a single TPDU containing a simple text
       
  4154  */
       
  4155 	{
       
  4156 	INFO_PRINTF1(_L("Test receive MOSES message"));
       
  4157 
       
  4158 	RSocketServ socketServer;
       
  4159 	PrepareRegTestLC(socketServer, 46);
       
  4160 	
       
  4161 
       
  4162 	RSocket socketRecvAny;
       
  4163 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socketRecvAny, ESmsAddrRecvAny);
       
  4164 
       
  4165 	INFO_PRINTF1(_L("waiting for incoming SMS ...") );
       
  4166 
       
  4167 	WaitForRecvL(socketRecvAny);
       
  4168 	CSmsMessage* smsMessage = RecvSmsL(socketRecvAny);
       
  4169 
       
  4170 	INFO_PRINTF1(_L("incoming SMS received from: ") );
       
  4171 	Logger().Write(smsMessage->ToFromAddress());
       
  4172 	INFO_PRINTF1(_L(""));
       
  4173 
       
  4174 	CleanupStack::PushL(smsMessage);
       
  4175 
       
  4176 	CleanupStack::PopAndDestroy(2); //  socketRecvAny, smsMessage
       
  4177     CleanupStack::PopAndDestroy(&socketServer);
       
  4178 
       
  4179 	return TestStepResult() ;
       
  4180 	}
       
  4181 
       
  4182 
       
  4183 TVerdict CTestClockBack::doTestStepL()
       
  4184  /**
       
  4185   *  Test clock back
       
  4186   */
       
  4187 {
       
  4188  	INFO_PRINTF1(_L(" Test that turning back time does not result in 2 receipts of same messages"));
       
  4189 
       
  4190  	RSocketServ socketServer;
       
  4191  	PrepareRegTestLC(socketServer, 47);
       
  4192 	
       
  4193 
       
  4194  	RSocket socket;
       
  4195  	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4196 
       
  4197  	// Create comms database object
       
  4198 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  4199 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  4200 #else
       
  4201 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  4202 #endif
       
  4203  	CleanupStack::PushL(db);
       
  4204 
       
  4205  	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
  4206 
       
  4207  	// EReceiveUnstoredClientAck
       
  4208 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  4209 	CleanupStack::PushL(smsReceiveModeField);
       
  4210 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  4211 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  4212 	smsReceiveModeField->ModifyL(*db);
       
  4213 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  4214 	CleanupStack::PopAndDestroy(db);
       
  4215 
       
  4216  	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  4217 
       
  4218  	//Set destination and SC numbers
       
  4219  	iTelephoneNumber=KPekka;
       
  4220  	iServiceCenterNumber=KRadiolinjaSC;
       
  4221 
       
  4222 
       
  4223  	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  4224 
       
  4225  	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  4226  	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  4227 
       
  4228  	// turn clock back for two hours (given in seconds)
       
  4229 	User::SetUTCOffset(-2*60*60);
       
  4230 
       
  4231  	//Send SMS
       
  4232 
       
  4233  	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4234  	CleanupStack::PushL(smsMessage);
       
  4235  	SendSmsL(smsMessage,socket);
       
  4236  	CleanupStack::PopAndDestroy(smsMessage);
       
  4237  	//Receive SMS
       
  4238  	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4239  	WaitForRecvL(socket);
       
  4240  	smsMessage = RecvSmsL(socket);
       
  4241 
       
  4242  	INFO_PRINTF1(_L("incoming SMS") );
       
  4243 
       
  4244  	CleanupStack::PushL(smsMessage);
       
  4245  	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4246  	CleanupStack::PopAndDestroy(smsMessage);
       
  4247 
       
  4248  	INFO_PRINTF2(_L("Waiting %d secs to see if another copy of message received"), 5);
       
  4249  	const TBool otherReceived = TimedWaitForRecvL(socket, 5 * 1000000);
       
  4250 
       
  4251  	TEST(otherReceived ==EFalse);
       
  4252 
       
  4253  	CleanupStack::PopAndDestroy(&socket);
       
  4254     CleanupStack::PopAndDestroy(&socketServer);
       
  4255  
       
  4256 	return TestStepResult() ;
       
  4257 }
       
  4258 
       
  4259 
       
  4260 TVerdict CTestEnumerateNoMessages::doTestStepL()
       
  4261 /**
       
  4262  *  Test enumerating a message store which has no messages in it.
       
  4263  *  There are 3 message stores s13 has 0 messages, S14 has 1 message and S15 has 2 messages
       
  4264  */
       
  4265 {
       
  4266 	INFO_PRINTF1(_L("Test enumerating a message store which has no messages"));
       
  4267 
       
  4268 	RSocketServ socketServer;
       
  4269 	PrepareRegTestLC(socketServer, 48);
       
  4270 	
       
  4271 
       
  4272 	RSocket socket;
       
  4273 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4274 
       
  4275  	// Enumerate messages from Store
       
  4276 	TRequestStatus status;
       
  4277 	TPckgBuf<TUint> sbuf;
       
  4278 	sbuf()=0;
       
  4279 
       
  4280 	//Now enumerate messages from store
       
  4281 	socket.Ioctl(KIoctlEnumerateSmsMessages,status,&sbuf, KSolSmsProv);
       
  4282 	User::WaitForRequest(status);
       
  4283 	TEST(status.Int()==KErrNone);
       
  4284 
       
  4285 	//sbuf() includes the count of messages on Store
       
  4286 	TInt count = sbuf();
       
  4287 	INFO_PRINTF2(_L("%d enumerated messages"), count);
       
  4288 	TEST(count==3);
       
  4289 
       
  4290 	CleanupStack::PopAndDestroy(&socket);
       
  4291     CleanupStack::PopAndDestroy(&socketServer);
       
  4292 
       
  4293 	return TestStepResult() ;
       
  4294 }
       
  4295 
       
  4296 
       
  4297 TVerdict CTestIE::doTestStepL()
       
  4298 /**
       
  4299  *  Test the reception of a CPHS Message Waiting Indication
       
  4300  */
       
  4301 {
       
  4302 	INFO_PRINTF1(_L("Test IE"));
       
  4303 
       
  4304 	RSocketServ socketServer;
       
  4305 	PrepareRegTestLC(socketServer, 52);
       
  4306 	
       
  4307 
       
  4308 	RSocket socket;
       
  4309 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4310 
       
  4311 
       
  4312 	//Set destination and SC numbers
       
  4313 	iTelephoneNumber=KPekka;
       
  4314 	iServiceCenterNumber=KRadiolinjaSC;
       
  4315 	CSmsMessage* smsMessage=NULL;
       
  4316 
       
  4317 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4318 	WaitForRecvL(socket);
       
  4319 	smsMessage = RecvSmsL(socket);
       
  4320 	CleanupStack::PushL(smsMessage);
       
  4321 	CSmsUserData& recvUserData = smsMessage->SmsPDU().UserData();
       
  4322 	TInt numIE=recvUserData.NumInformationElements();
       
  4323 	for(TInt k=0;k<numIE;k++)
       
  4324 		{
       
  4325 		CSmsInformationElement& ie=recvUserData.InformationElement(k);
       
  4326 		TPtr8 ptr(ie.Data());
       
  4327 		INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4328 		}
       
  4329 
       
  4330 	CleanupStack::PopAndDestroy(smsMessage);
       
  4331 	CleanupStack::PopAndDestroy(&socket);
       
  4332     CleanupStack::PopAndDestroy(&socketServer);
       
  4333 
       
  4334 	return TestStepResult() ;
       
  4335 }
       
  4336 
       
  4337 
       
  4338 TVerdict CTestEmailIE::doTestStepL()
       
  4339 /**
       
  4340  *  Test the reception of a CPHS Message Waiting Indication
       
  4341  */
       
  4342 
       
  4343 	{
       
  4344 	INFO_PRINTF1(_L("Test EmailIE"));
       
  4345 	_LIT(KTestMsg1,"MMMMMMMMMM");
       
  4346 	_LIT16(KSmsEmailHeaderShort,"HHHHHH");
       
  4347 	_LIT16(KSmsEmailBodyShort,"BBBBBB");
       
  4348 
       
  4349 	_LIT16(KSmsEmailHeaderLong,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
       
  4350 	_LIT16(KSmsEmailBodyLong,"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
       
  4351 
       
  4352 	RSocketServ socketServer;
       
  4353 	PrepareRegTestLC(socketServer, 53);
       
  4354 	
       
  4355 
       
  4356 	RSocket socket;
       
  4357 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrEmail);
       
  4358 
       
  4359 
       
  4360 	//Set destination and SC numbers
       
  4361 	iTelephoneNumber=KPekka;
       
  4362 	iServiceCenterNumber=KRadiolinjaSC;
       
  4363 	CSmsMessage* smsMessage=NULL;
       
  4364 
       
  4365 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  4366 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4367 	CleanupStack::PushL(smsMessage);
       
  4368 	// case 1 short - one pdu
       
  4369 	smsMessage->AddEmailHeaderL(KSmsEmailHeaderShort,KSmsEmailBodyShort);
       
  4370 	//Send SMS
       
  4371 	SendSmsL(smsMessage,socket);
       
  4372 	CleanupStack::PopAndDestroy(smsMessage);
       
  4373 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4374 	WaitForRecvL(socket);
       
  4375 	smsMessage = RecvSmsL(socket);
       
  4376 	CleanupStack::PushL(smsMessage);
       
  4377 	CSmsUserData& recvUserData = smsMessage->SmsPDU().UserData();
       
  4378 	TInt numIE=recvUserData.NumInformationElements();
       
  4379 	TInt k=0;
       
  4380 	for(k=0;k<numIE;k++)
       
  4381 		{
       
  4382 		CSmsInformationElement& ie=recvUserData.InformationElement(k);
       
  4383 		TPtr8 ptr(ie.Data());
       
  4384 		INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4385 		}
       
  4386 
       
  4387 	TLogId logId(KLogNullId);
       
  4388 	TEST_CHECKL(smsMessage->IsEmailHeader(),ETrue,_L("Message does noty contain E-Mail header"));
       
  4389 	HBufC* bd;
       
  4390 	HBufC* hd;
       
  4391 	if(smsMessage->GetEmailHeaderL(&hd,&bd))
       
  4392 		{
       
  4393 			INFO_PRINTF3(_L(" This is e-mail header:len %d %S"),hd->Length(),hd);
       
  4394 			INFO_PRINTF3(_L(" This is e-mail body: %d %S"),bd->Length(),bd);
       
  4395 			TEST(*hd==KSmsEmailHeaderShort());
       
  4396 			TEST(*bd==KSmsEmailBodyShort());
       
  4397 			logId=smsMessage->LogServerId();
       
  4398 			if(logId!=KLogNullId)
       
  4399 			{
       
  4400 				TLogSmsPduData pduData;
       
  4401 				CLogEvent* logEvent=CLogEvent::NewL();
       
  4402 				CleanupStack::PushL(logEvent);
       
  4403 				iSmsStackTestUtils->GetLogEventL(*logEvent,logId);
       
  4404 				TPckg<TLogSmsPduData> packeddata(pduData);
       
  4405 				packeddata.Copy(logEvent->Data());
       
  4406 				TEST(packeddata().iTotal==1);
       
  4407 				TEST(packeddata().iReceived==1);
       
  4408 				CleanupStack::PopAndDestroy(logEvent);
       
  4409 			}
       
  4410 			delete hd;
       
  4411 			delete bd;
       
  4412 		}
       
  4413 	//
       
  4414 	CleanupStack::PopAndDestroy(smsMessage);
       
  4415 
       
  4416 	// case 2 - long header
       
  4417 
       
  4418 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4419 	CleanupStack::PushL(smsMessage);
       
  4420 
       
  4421 	smsMessage->AddEmailHeaderL(KSmsEmailHeaderLong,KSmsEmailBodyShort);
       
  4422 
       
  4423 	//Send SMS
       
  4424 	SendSmsL(smsMessage,socket);
       
  4425 	CleanupStack::PopAndDestroy(smsMessage);
       
  4426 
       
  4427 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4428 	WaitForRecvL(socket);
       
  4429 	smsMessage = RecvSmsL(socket);
       
  4430 	CleanupStack::PushL(smsMessage);
       
  4431 		{
       
  4432 		CSmsUserData& recvUserData2 = smsMessage->SmsPDU().UserData();
       
  4433 		TInt numIE=recvUserData2.NumInformationElements();
       
  4434 		for(TInt k=0;k<numIE;k++)
       
  4435 			{
       
  4436 			CSmsInformationElement& ie=recvUserData2.InformationElement(k);
       
  4437 			TPtr8 ptr(ie.Data());
       
  4438 			INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4439 			}
       
  4440 		}
       
  4441 
       
  4442 	logId=KLogNullId;
       
  4443 	TEST_CHECKL(smsMessage->IsEmailHeader(),ETrue,_L("Message does noty contain E-Mail header"));
       
  4444 	if(smsMessage->GetEmailHeaderL(&hd,&bd))
       
  4445 			{
       
  4446 			INFO_PRINTF3(_L(" This is e-mail header:len %d %S"),hd->Length(),hd);
       
  4447 			INFO_PRINTF3(_L(" This is e-mail body: %d %S"),bd->Length(),bd);
       
  4448 			TEST(*hd==KSmsEmailHeaderLong());
       
  4449 			TEST(*bd==KSmsEmailBodyShort());
       
  4450 			logId=smsMessage->LogServerId();
       
  4451 			if(logId!=KLogNullId)
       
  4452 				{
       
  4453 				TLogSmsPduData pduData;
       
  4454 				CLogEvent* logEvent=CLogEvent::NewL();
       
  4455 				CleanupStack::PushL(logEvent);
       
  4456 				iSmsStackTestUtils->GetLogEventL(*logEvent,logId);
       
  4457 				TPckg<TLogSmsPduData> packeddata(pduData);
       
  4458 				packeddata.Copy(logEvent->Data());
       
  4459 				TEST(packeddata().iTotal==2);
       
  4460 				TEST(packeddata().iReceived==2);
       
  4461 				CleanupStack::PopAndDestroy(logEvent);
       
  4462 				}
       
  4463 			delete hd;
       
  4464 			delete bd;
       
  4465 			}
       
  4466 	//
       
  4467 	CleanupStack::PopAndDestroy(smsMessage);
       
  4468 
       
  4469 
       
  4470 	// case 3 - short header  long body
       
  4471 
       
  4472 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4473 	CleanupStack::PushL(smsMessage);
       
  4474 
       
  4475 	smsMessage->AddEmailHeaderL(KSmsEmailHeaderShort,KSmsEmailBodyLong);
       
  4476 
       
  4477 	//Send SMS
       
  4478 	SendSmsL(smsMessage,socket);
       
  4479 	CleanupStack::PopAndDestroy(smsMessage);
       
  4480 
       
  4481 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4482 	WaitForRecvL(socket);
       
  4483 	smsMessage = RecvSmsL(socket);
       
  4484 	CleanupStack::PushL(smsMessage);
       
  4485 		{
       
  4486 		CSmsUserData& recvUserData3 = smsMessage->SmsPDU().UserData();
       
  4487 		TInt numIE=recvUserData3.NumInformationElements();
       
  4488 		for(TInt k=0;k<numIE;k++)
       
  4489 			{
       
  4490 			CSmsInformationElement& ie=recvUserData3.InformationElement(k);
       
  4491 			TPtr8 ptr(ie.Data());
       
  4492 			INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4493 			}
       
  4494 		}
       
  4495 
       
  4496 	logId=KLogNullId;
       
  4497 	TEST_CHECKL(smsMessage->IsEmailHeader(),ETrue,_L("Message does noty contain E-Mail header"));
       
  4498 	if(smsMessage->GetEmailHeaderL(&hd,&bd))
       
  4499 			{
       
  4500 			INFO_PRINTF3(_L(" This is e-mail header:len %d %S"),hd->Length(),hd);
       
  4501 			INFO_PRINTF3(_L(" This is e-mail body: %d %S"),bd->Length(),bd);
       
  4502 			TEST(*hd==KSmsEmailHeaderShort());
       
  4503 			TEST(*bd==KSmsEmailBodyLong());
       
  4504 			logId=smsMessage->LogServerId();
       
  4505 			if(logId!=KLogNullId)
       
  4506 				{
       
  4507 				TLogSmsPduData pduData;
       
  4508 				CLogEvent* logEvent=CLogEvent::NewL();
       
  4509 				CleanupStack::PushL(logEvent);
       
  4510 				iSmsStackTestUtils->GetLogEventL(*logEvent,logId);
       
  4511 				TPckg<TLogSmsPduData> packeddata(pduData);
       
  4512 				packeddata.Copy(logEvent->Data());
       
  4513 				TEST(packeddata().iTotal==2);
       
  4514 				TEST(packeddata().iReceived==2);
       
  4515 				CleanupStack::PopAndDestroy(logEvent);
       
  4516 				}
       
  4517 			delete hd;
       
  4518 			delete bd;
       
  4519 			}
       
  4520 	//
       
  4521 	CleanupStack::PopAndDestroy(smsMessage);
       
  4522 
       
  4523 
       
  4524 	// case 4 - long header  long body
       
  4525 
       
  4526 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4527 	CleanupStack::PushL(smsMessage);
       
  4528 
       
  4529 	smsMessage->AddEmailHeaderL(KSmsEmailHeaderLong,KSmsEmailBodyLong);
       
  4530 
       
  4531 	//Send SMS
       
  4532 	SendSmsL(smsMessage,socket);
       
  4533 	CleanupStack::PopAndDestroy(smsMessage);
       
  4534 
       
  4535 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4536 	WaitForRecvL(socket);
       
  4537 	smsMessage = RecvSmsL(socket);
       
  4538 	CleanupStack::PushL(smsMessage);
       
  4539 		{
       
  4540 		CSmsUserData& recvUserData4 = smsMessage->SmsPDU().UserData();
       
  4541 		TInt numIE=recvUserData4.NumInformationElements();
       
  4542 		for(TInt k=0;k<numIE;k++)
       
  4543 			{
       
  4544 			CSmsInformationElement& ie=recvUserData4.InformationElement(k);
       
  4545 			TPtr8 ptr(ie.Data());
       
  4546 			INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4547 			}
       
  4548 		}
       
  4549 
       
  4550 	logId=KLogNullId;
       
  4551 	TEST_CHECKL(smsMessage->IsEmailHeader(),ETrue,_L("Message does noty contain E-Mail header"));
       
  4552 	if(smsMessage->GetEmailHeaderL(&hd,&bd))
       
  4553 			{
       
  4554 			INFO_PRINTF3(_L(" This is e-mail header:len %d %S"),hd->Length(),hd);
       
  4555 			INFO_PRINTF3(_L(" This is e-mail body: %d %S"),bd->Length(),bd);
       
  4556 			TEST(*hd==KSmsEmailHeaderLong());
       
  4557 			TEST(*bd==KSmsEmailBodyLong());
       
  4558 			logId=smsMessage->LogServerId();
       
  4559 			if(logId!=KLogNullId)
       
  4560 				{
       
  4561 				TLogSmsPduData pduData;
       
  4562 				CLogEvent* logEvent=CLogEvent::NewL();
       
  4563 				CleanupStack::PushL(logEvent);
       
  4564 				iSmsStackTestUtils->GetLogEventL(*logEvent,logId);
       
  4565 				TPckg<TLogSmsPduData> packeddata(pduData);
       
  4566 				packeddata.Copy(logEvent->Data());
       
  4567 				TEST(packeddata().iTotal==3);
       
  4568 				TEST(packeddata().iReceived==3);
       
  4569 				CleanupStack::PopAndDestroy(logEvent);
       
  4570 				}
       
  4571 			delete hd;
       
  4572 			delete bd;
       
  4573 			}
       
  4574 	//
       
  4575 	CleanupStack::PopAndDestroy(smsMessage);
       
  4576 
       
  4577 
       
  4578 	// case 5 - long header  long body, unicode
       
  4579 
       
  4580 	smsMessage=CreateSmsMessageL(KTestMsg1,TSmsDataCodingScheme::ESmsAlphabetUCS2);
       
  4581 	CleanupStack::PushL(smsMessage);
       
  4582 
       
  4583 	smsMessage->AddEmailHeaderL(KSmsEmailHeaderLong,KSmsEmailBodyLong);
       
  4584 
       
  4585 	//Send SMS
       
  4586 	SendSmsL(smsMessage,socket);
       
  4587 	CleanupStack::PopAndDestroy(smsMessage);
       
  4588 
       
  4589 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4590 	WaitForRecvL(socket);
       
  4591 	smsMessage = RecvSmsL(socket);
       
  4592 	CleanupStack::PushL(smsMessage);
       
  4593 		{
       
  4594 		CSmsUserData& recvUserData4 = smsMessage->SmsPDU().UserData();
       
  4595 		TInt numIE=recvUserData4.NumInformationElements();
       
  4596 		for(TInt k=0;k<numIE;k++)
       
  4597 			{
       
  4598 			CSmsInformationElement& ie=recvUserData4.InformationElement(k);
       
  4599 			TPtr8 ptr(ie.Data());
       
  4600 			INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4601 			}
       
  4602 		}
       
  4603 
       
  4604 	logId=KLogNullId;
       
  4605 	TEST_CHECKL(smsMessage->IsEmailHeader(),ETrue,_L("Message does noty contain E-Mail header"));
       
  4606 	if(smsMessage->GetEmailHeaderL(&hd,&bd))
       
  4607 			{
       
  4608 			INFO_PRINTF3(_L(" This is e-mail header:len %d %S"),hd->Length(),hd);
       
  4609 			INFO_PRINTF3(_L(" This is e-mail body: %d %S"),bd->Length(),bd);
       
  4610 			TEST(*hd==KSmsEmailHeaderLong());
       
  4611 			TEST(*bd==KSmsEmailBodyLong());
       
  4612 			logId=smsMessage->LogServerId();
       
  4613 			if(logId!=KLogNullId)
       
  4614 				{
       
  4615 				TLogSmsPduData pduData;
       
  4616 				CLogEvent* logEvent=CLogEvent::NewL();
       
  4617 				CleanupStack::PushL(logEvent);
       
  4618 				iSmsStackTestUtils->GetLogEventL(*logEvent,logId);
       
  4619 				TPckg<TLogSmsPduData> packeddata(pduData);
       
  4620 				packeddata.Copy(logEvent->Data());
       
  4621 				TEST(packeddata().iTotal==6);
       
  4622 				TEST(packeddata().iReceived==6);
       
  4623 				CleanupStack::PopAndDestroy(logEvent);
       
  4624 				}
       
  4625 			delete hd;
       
  4626 			delete bd;
       
  4627 			}
       
  4628 	//
       
  4629 	CleanupStack::PopAndDestroy(smsMessage);
       
  4630 
       
  4631 
       
  4632 
       
  4633 	// case 6 - long header  long body, 7bit
       
  4634 
       
  4635 	smsMessage=CreateSmsMessageL(KTestMsg1,TSmsDataCodingScheme::ESmsAlphabet7Bit);
       
  4636 	CleanupStack::PushL(smsMessage);
       
  4637 
       
  4638 	smsMessage->AddEmailHeaderL(KSmsEmailHeaderLong,KSmsEmailBodyLong);
       
  4639 
       
  4640 	//Send SMS
       
  4641 	SendSmsL(smsMessage,socket);
       
  4642 	CleanupStack::PopAndDestroy(smsMessage);
       
  4643 
       
  4644 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4645 	WaitForRecvL(socket);
       
  4646 	smsMessage = RecvSmsL(socket);
       
  4647 	CleanupStack::PushL(smsMessage);
       
  4648 		{
       
  4649 		CSmsUserData& recvUserData4 = smsMessage->SmsPDU().UserData();
       
  4650 		TInt numIE=recvUserData4.NumInformationElements();
       
  4651 		for(TInt k=0;k<numIE;k++)
       
  4652 			{
       
  4653 			CSmsInformationElement& ie=recvUserData4.InformationElement(k);
       
  4654 			TPtr8 ptr(ie.Data());
       
  4655 			INFO_PRINTF4(_L(" %d. ie  is %d %S"),k,ie.Identifier(),&ptr);
       
  4656 			}
       
  4657 		}
       
  4658 
       
  4659 	logId=KLogNullId;
       
  4660 	TEST_CHECKL(smsMessage->IsEmailHeader(),ETrue,_L("Message does noty contain E-Mail header"));
       
  4661 	if(smsMessage->GetEmailHeaderL(&hd,&bd))
       
  4662 			{
       
  4663 			INFO_PRINTF3(_L(" This is e-mail header:len %d %S"),hd->Length(),hd);
       
  4664 			INFO_PRINTF3(_L(" This is e-mail body: %d %S"),bd->Length(),bd);
       
  4665 			TEST(*hd==KSmsEmailHeaderLong());
       
  4666 			TEST(*bd==KSmsEmailBodyLong());
       
  4667 			logId=smsMessage->LogServerId();
       
  4668 			if(logId!=KLogNullId)
       
  4669 				{
       
  4670 				TLogSmsPduData pduData;
       
  4671 				CLogEvent* logEvent=CLogEvent::NewL();
       
  4672 				CleanupStack::PushL(logEvent);
       
  4673 				iSmsStackTestUtils->GetLogEventL(*logEvent,logId);
       
  4674 				TPckg<TLogSmsPduData> packeddata(pduData);
       
  4675 				packeddata.Copy(logEvent->Data());
       
  4676 				TEST(packeddata().iTotal==3);
       
  4677 				TEST(packeddata().iReceived==3);
       
  4678 				CleanupStack::PopAndDestroy(logEvent);
       
  4679 				}
       
  4680 			delete hd;
       
  4681 			delete bd;
       
  4682 			}
       
  4683 	//
       
  4684 	CleanupStack::PopAndDestroy(smsMessage);
       
  4685 	CleanupStack::PopAndDestroy(&socket);
       
  4686     CleanupStack::PopAndDestroy(&socketServer);
       
  4687 
       
  4688 	return TestStepResult() ;
       
  4689 	}
       
  4690 
       
  4691 
       
  4692 
       
  4693 TVerdict CTestMaxReadTimeForSmsStoreList::doTestStepL()
       
  4694 /**
       
  4695  *  Test Sms message storage
       
  4696  */
       
  4697     {
       
  4698     INFO_PRINTF1(_L("Enumerating a phone store list that takes 254 seconds"));
       
  4699 
       
  4700     RSocketServ socketServer;
       
  4701     PrepareRegTestLC(socketServer, 54);
       
  4702 	
       
  4703 
       
  4704     // Open the socket for SIM operations
       
  4705     RSocket socket;
       
  4706     iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4707 
       
  4708     // Enumerate messages
       
  4709 
       
  4710     RPointerArray<CSmsMessage> messages;
       
  4711     CleanupResetAndDestroyPushL(messages);
       
  4712     ReadSmsStoreL(socket, messages);
       
  4713     const TInt count = messages.Count();
       
  4714 
       
  4715     // Check that request successfully retrieved 2 messages
       
  4716     // after 254 seconds.
       
  4717 
       
  4718     TEST(count == 2);
       
  4719 
       
  4720     CleanupStack::PopAndDestroy(&messages);
       
  4721     CleanupStack::PopAndDestroy(&socket);
       
  4722     CleanupStack::PopAndDestroy(&socketServer);
       
  4723 
       
  4724 	return TestStepResult();
       
  4725     }
       
  4726 
       
  4727 
       
  4728 TVerdict CTestSameLogIdMultiplePDU::doTestStepL()
       
  4729 /**
       
  4730  *  Resend Multi PDU SMS message with same log id"
       
  4731  */
       
  4732 	{
       
  4733 	// The test is included with a fix for INC039985
       
  4734 	// - Resending SMS message causes CSmsSegmentationStore panic
       
  4735 	//
       
  4736 	// The test is organised as following:
       
  4737     //
       
  4738 	// For 7 bit alphabet an SMS consisting of a multiple (3) PDU is created,
       
  4739 	// allocated an Log Id number and sent twice, immediately one after the other, to simulate
       
  4740 	// the process of resending of the SMS message.
       
  4741 	// Upon the successful completion of both sending operations, the test should
       
  4742 	// receive exactly the same message back from the SimTsy. The sent and received
       
  4743 	// messages are checked for identity.
       
  4744 	// As indicated  within the initial defect comments  the assertion occurred approx. 50% of the time.
       
  4745     // To increase the chance of catching the defect
       
  4746 	// the above discussed resending operation step is performed twice.
       
  4747 	//
       
  4748 	// This test is based on test 46.
       
  4749 	// This test step uses section #57 of tsmsprt_config.txt file
       
  4750     // which provides the encoded versions of the PDUs, the SIMTSY has to receive and send.
       
  4751 
       
  4752 	INFO_PRINTF1(_L(" Test that sent SMS consisting of Multiple PDUs with the same logId"));
       
  4753 	TLogId logid;
       
  4754 	TLogSmsPduData pduData;
       
  4755 
       
  4756 	RSocketServ socketServer;
       
  4757 	PrepareRegTestLC(socketServer, 57);
       
  4758 	
       
  4759 
       
  4760 	RSocket socket;
       
  4761 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4762 
       
  4763     // Create comms database object
       
  4764 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  4765 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  4766 #else
       
  4767 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  4768 #endif
       
  4769     CleanupStack::PushL(db);
       
  4770 
       
  4771 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
  4772 
       
  4773     // EReceiveUnstoredClientAck
       
  4774 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  4775 	CleanupStack::PushL(smsReceiveModeField);
       
  4776 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  4777 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  4778 	smsReceiveModeField->ModifyL(*db);
       
  4779 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  4780 	CleanupStack::PopAndDestroy(db);
       
  4781 
       
  4782     // Initialization
       
  4783     // Message String
       
  4784 	_LIT(KTestMsg1,"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCC");
       
  4785 
       
  4786 	//Set destination and SC numbers
       
  4787 	iTelephoneNumber=KPekka;
       
  4788 	iServiceCenterNumber=KRadiolinjaSC;
       
  4789 
       
  4790 	// Select an alphabet
       
  4791 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  4792 
       
  4793 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  4794 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  4795 
       
  4796     // Twice send an Sms with the same logid - step 1
       
  4797     // Create a Message
       
  4798 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4799 	CleanupStack::PushL(smsMessage);
       
  4800 	pduData.iType=smsMessage->Type();
       
  4801 
       
  4802 	// Get a log Id
       
  4803 	logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  4804 	smsMessage->SetLogServerId(logid);
       
  4805 	INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4806 
       
  4807 	// Send SMS
       
  4808 	SendSmsL(smsMessage,socket);
       
  4809 	// Send SMS again
       
  4810     SendSmsL(smsMessage,socket);
       
  4811 
       
  4812 	CleanupStack::PopAndDestroy(smsMessage);
       
  4813 
       
  4814 	//Receive SMS
       
  4815 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4816 	WaitForRecvL(socket);
       
  4817 	smsMessage = RecvSmsL(socket);
       
  4818     INFO_PRINTF1(_L("incoming SMS arrived") );
       
  4819 
       
  4820 	CleanupStack::PushL(smsMessage);
       
  4821 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4822 	CleanupStack::PopAndDestroy(smsMessage);
       
  4823 
       
  4824 	// Twice send an Sms with the same logid - step 2
       
  4825 	// Create a Message
       
  4826 	smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4827 	CleanupStack::PushL(smsMessage);
       
  4828 	pduData.iType=smsMessage->Type();
       
  4829 
       
  4830 	// Get a log Id
       
  4831 	logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  4832 	smsMessage->SetLogServerId(logid);
       
  4833 	INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4834 
       
  4835 	// Send SMS
       
  4836 	SendSmsL(smsMessage,socket);
       
  4837 	// Send SMS again
       
  4838     SendSmsL(smsMessage,socket);
       
  4839 
       
  4840 	CleanupStack::PopAndDestroy(smsMessage);
       
  4841 
       
  4842 	//Receive SMS
       
  4843 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4844 	WaitForRecvL(socket);
       
  4845 	smsMessage = RecvSmsL(socket);
       
  4846     INFO_PRINTF1(_L("incoming SMS arrived") );
       
  4847 
       
  4848 	CleanupStack::PushL(smsMessage);
       
  4849 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  4850 	CleanupStack::PopAndDestroy(smsMessage);
       
  4851 	CleanupStack::PopAndDestroy(&socket);
       
  4852     CleanupStack::PopAndDestroy(&socketServer);
       
  4853 
       
  4854 	return TestStepResult();
       
  4855 	}
       
  4856 
       
  4857 
       
  4858 TVerdict CTestSameLogIdSinglePDU::doTestStepL()
       
  4859 /**
       
  4860  *  Resend Single PDU SMS message with same log id"
       
  4861  */
       
  4862 	{
       
  4863     // The test is included with a fix for INC039985
       
  4864 	// - Resending SMS message causes CSmsSegmentationStore panic
       
  4865 	//
       
  4866 	// The test is organised as following:
       
  4867 	//
       
  4868 	// For  every supported alphabet (3 at present) an SMS consisting of a a single PDU is created,
       
  4869 	// allocated an Log Id number and sent twice, immediately one after the other, to simulate
       
  4870 	// the process of resending of the SMS message.
       
  4871 	// Upon the successful completion of both sending operations, the test should
       
  4872 	// receive exactly the same message back from the SimTsy. The sent and received
       
  4873 	// messages are checked for identity.
       
  4874 	// As the initial comments,  when the defect was raised were, that the chances
       
  4875 	// of the defect happening more than 50%, to increase the chance of catching the defect
       
  4876 	// the above discussed resending operation step is performed twice.
       
  4877 	//
       
  4878 	// This test is based on test 46.
       
  4879 	// This test step uses section #58 of tsmsprt_config.txt file
       
  4880     // which provides the encoded versions of the PDUs, the SIMTSY has to receive and send.
       
  4881     //
       
  4882 	INFO_PRINTF1(_L(" Test that sent SMS consisting of single PDUs with the same logId"));
       
  4883 	TLogId logid;
       
  4884 	TLogSmsPduData pduData;
       
  4885 
       
  4886 	RSocketServ socketServer;
       
  4887 	PrepareRegTestLC(socketServer, 58);
       
  4888 	
       
  4889 
       
  4890 	RSocket socket;
       
  4891 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  4892 
       
  4893     // Create comms database object
       
  4894 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  4895 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  4896 #else
       
  4897 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  4898 #endif
       
  4899 	CleanupStack::PushL(db);
       
  4900 
       
  4901 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
  4902 
       
  4903     // EReceiveUnstoredClientAck
       
  4904 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  4905 	CleanupStack::PushL(smsReceiveModeField);
       
  4906 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  4907 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  4908 	smsReceiveModeField->ModifyL(*db);
       
  4909 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  4910 	CleanupStack::PopAndDestroy(db);
       
  4911     // Initialization
       
  4912     // Message String
       
  4913 	_LIT(KTestMsg1,"CCCCCCC");
       
  4914 
       
  4915 	//Set destination and SC numbers
       
  4916 	iTelephoneNumber=KPekka;
       
  4917 	iServiceCenterNumber=KRadiolinjaSC;
       
  4918 
       
  4919 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  4920 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  4921 
       
  4922 	CSmsMessage* smsMessage;
       
  4923 	TSmsDataCodingScheme::TSmsAlphabet alphabet;
       
  4924 
       
  4925 	// Loop through the individual alphabets, using the defined distance
       
  4926 	// between individual entries. The second loop has been intentionally
       
  4927 	// unwound for clarity
       
  4928     for ( TInt nStep = TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  4929           nStep < TSmsDataCodingScheme::ESmsAlphabetReserved;
       
  4930           nStep +=(TSmsDataCodingScheme::ESmsAlphabet8Bit - TSmsDataCodingScheme::ESmsAlphabet7Bit) )
       
  4931         {
       
  4932         alphabet = (TSmsDataCodingScheme::TSmsAlphabet) nStep;
       
  4933         INFO_PRINTF2(_L("Alphabet:..... %d"),alphabet);
       
  4934 
       
  4935         // Twice send an Sms with the same logid - step 1
       
  4936         // Create a Message
       
  4937         smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4938         CleanupStack::PushL(smsMessage);
       
  4939         pduData.iType=smsMessage->Type();
       
  4940 
       
  4941         // Get a log Id
       
  4942         logid=iSmsStackTestUtils->AddLogEventL(*smsMessage, pduData);
       
  4943         smsMessage->SetLogServerId(logid);
       
  4944         INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4945 
       
  4946         // Send SMS
       
  4947         SendSmsL(smsMessage,socket);
       
  4948         // Send SMS again
       
  4949         SendSmsL(smsMessage,socket);
       
  4950 
       
  4951         CleanupStack::PopAndDestroy(smsMessage);
       
  4952 
       
  4953         // Receive SMS
       
  4954         INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4955         WaitForRecvL(socket);
       
  4956         smsMessage = RecvSmsL(socket);
       
  4957         INFO_PRINTF1(_L("incoming SMS arrived") );
       
  4958 
       
  4959         CleanupStack::PushL(smsMessage);
       
  4960         TestSmsContentsL(smsMessage,KTestMsg1);
       
  4961         CleanupStack::PopAndDestroy(smsMessage);
       
  4962 
       
  4963         // Twice send an Sms with the same logid - step 2
       
  4964         // Create a Message
       
  4965         smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  4966         CleanupStack::PushL(smsMessage);
       
  4967         pduData.iType=smsMessage->Type();
       
  4968 
       
  4969         // Get a log Id
       
  4970         logid=iSmsStackTestUtils->AddLogEventL(*smsMessage,pduData);
       
  4971         smsMessage->SetLogServerId(logid);
       
  4972         INFO_PRINTF2(_L("Sends message with log id %d"),logid);
       
  4973 
       
  4974         // Send SMS
       
  4975         SendSmsL(smsMessage,socket);
       
  4976         // Send SMS again
       
  4977         SendSmsL(smsMessage,socket);
       
  4978 
       
  4979         CleanupStack::PopAndDestroy(smsMessage);
       
  4980 
       
  4981         //Receive SMS
       
  4982         INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  4983         WaitForRecvL(socket);
       
  4984         smsMessage = RecvSmsL(socket);
       
  4985         INFO_PRINTF1(_L("incoming SMS arrived") );
       
  4986 
       
  4987         CleanupStack::PushL(smsMessage);
       
  4988         TestSmsContentsL(smsMessage,KTestMsg1);
       
  4989         CleanupStack::PopAndDestroy(smsMessage);
       
  4990         }
       
  4991 
       
  4992 	CleanupStack::PopAndDestroy(&socket);
       
  4993 	CleanupStack::PopAndDestroy(&socketServer);
       
  4994 
       
  4995 
       
  4996 	return TestStepResult();
       
  4997 }
       
  4998 
       
  4999 
       
  5000 CTestLog* CTestLog::NewLC(CSmsStackTestUtils& aUtils, RFs& aFs, CSmsPrtTestStep* aTest, TInt aPriority)
       
  5001 	{
       
  5002 	CTestLog* self = new (ELeave) CTestLog(aUtils, aTest, aPriority);
       
  5003 	CleanupStack::PushL(self);
       
  5004 	self->ConstructL(aFs);
       
  5005 	return self;
       
  5006 	}
       
  5007 
       
  5008 CTestLog::CTestLog(CSmsStackTestUtils& aUtils, CSmsPrtTestStep* aTest, TInt aPriority)
       
  5009 : CActive(aPriority), iUtils(aUtils), iTest(aTest)
       
  5010 	{
       
  5011 	CActiveScheduler::Add(this);
       
  5012 	}
       
  5013 
       
  5014 CTestLog::~CTestLog()
       
  5015 	{
       
  5016 	Cancel();
       
  5017 	delete iMessage;
       
  5018 	delete iLogChecker;
       
  5019 	delete iEventLogger;
       
  5020 	iAddedIds.Close();
       
  5021 	}
       
  5022 
       
  5023 void CTestLog::StartOriginalL()
       
  5024 	{
       
  5025 
       
  5026 	iAddedIds.Reset();
       
  5027 
       
  5028 	iLogChecker->CountOriginalIdsL(iStatus);
       
  5029 	iState = EOriginal;
       
  5030 	SetActive();
       
  5031 	CActiveScheduler::Start();
       
  5032 
       
  5033 	//TEST(KErrNone == iStatus.Int());
       
  5034 	iTest->testBooleanTrue(KErrNone == iStatus.Int(),(TText8*)__FILE__, __LINE__);
       
  5035 
       
  5036 
       
  5037 	}
       
  5038 
       
  5039 void CTestLog::StartCompareL(TInt aExpectError)
       
  5040 	{
       
  5041 	iLogChecker->CompareNewIdsL(iAddedIds, iStatus);
       
  5042 	SetActive();
       
  5043 	CActiveScheduler::Start();
       
  5044 
       
  5045 	//TEST(aExpectError == iStatus.Int());
       
  5046 	iTest->testBooleanTrue(aExpectError == iStatus.Int(),(TText8*)__FILE__, __LINE__);
       
  5047 	}
       
  5048 
       
  5049 _LIT(KLongText,"3 PDU test SMS message. "
       
  5050 L"3 PDU test SMS message. "
       
  5051 L"3 PDU test SMS message. "
       
  5052 L"3 PDU test SMS message. "
       
  5053 L"3 PDU test SMS message. "
       
  5054 L"3 PDU test SMS message. "
       
  5055 L"3 PDU test SMS message. "
       
  5056 L"3 PDU test SMS message. "
       
  5057 L"3 PDU test SMS message. "
       
  5058 L"3 PDU test SMS message. "
       
  5059 L"3 PDU test SMS message. "
       
  5060 L"3 PDU test SMS message. "
       
  5061 L"3 PDU test SMS message. "
       
  5062 L"3 PDU test SMS message. "
       
  5063 L"3 PDU test SMS message. "
       
  5064 L"3 PDU test SMS message. "
       
  5065 L"3 PDU test SMS message. "
       
  5066 L"The End.");
       
  5067 
       
  5068 void CTestLog::StartL()
       
  5069 	{
       
  5070 
       
  5071 	StartOriginalL();
       
  5072 
       
  5073 	iTest->SendSmsL(iMessage,iSocket);
       
  5074 
       
  5075 	//INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  5076 	iTest->Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrInfo, (_L("waiting for incoming SMS...\n")));
       
  5077 
       
  5078 	delete iMessage;
       
  5079 	iMessage = NULL;
       
  5080 
       
  5081 	iTest->WaitForRecvL(iSocket);
       
  5082 	iMessage = iTest->RecvSmsL(iSocket);
       
  5083 
       
  5084 	//INFO_PRINTF1(_L("incoming SMS") );
       
  5085 	iTest->Logger().LogExtra(((TText8*)__FILE__), __LINE__, ESevrInfo, (_L("incoming SMS\n")));
       
  5086 	iTest->TestSmsContentsL(iMessage,KLongText);
       
  5087 
       
  5088 	User::LeaveIfError(iAddedIds.Append(iMessage->LogServerId()));
       
  5089 
       
  5090 	StartCompareL(KErrNone);
       
  5091 
       
  5092 	delete iMessage;
       
  5093 	iMessage = NULL;
       
  5094 
       
  5095 	CleanupStack::PopAndDestroy(&iSocket);
       
  5096 	CleanupStack::PopAndDestroy(&iSocketServer);
       
  5097 	}
       
  5098 
       
  5099 void CTestLog::ConstructL(RFs& aFs)
       
  5100 	{
       
  5101 	iLogChecker = CSmsLogChecker::NewL(aFs, iTest, Priority());
       
  5102 	iEventLogger = CSmsEventLogger::NewL(aFs, Priority());
       
  5103 
       
  5104 	iTest->PrepareRegTestLC(iSocketServer, 50);
       
  5105 
       
  5106 	iTest->iSmsStackTestUtils->OpenSmsSocketLC(iSocketServer,iSocket,ESmsAddrRecvAny);
       
  5107 
       
  5108 	//Set destination and SC numbers
       
  5109 	iTest->iTelephoneNumber=KRegTestNumber;
       
  5110 	iTest->iServiceCenterNumber=KVodafoneSC;
       
  5111 
       
  5112 	iMessage=iTest->CreateSmsWithStatusReportReqL(KLongText,TSmsDataCodingScheme::ESmsAlphabet7Bit);
       
  5113 	}
       
  5114 
       
  5115 void CTestLog::RunL()
       
  5116 	{
       
  5117 	User::LeaveIfError(iStatus.Int());
       
  5118 
       
  5119 	switch (iState)
       
  5120 		{
       
  5121 		case EOriginal:
       
  5122 			iMessage->SetLogServerId(KLogNullId);
       
  5123 			break;
       
  5124 		default:
       
  5125 			break;
       
  5126 		}
       
  5127 
       
  5128 	if (!IsActive())
       
  5129 		Complete(KErrNone);
       
  5130 	}
       
  5131 
       
  5132 
       
  5133 TVerdict CTestConcatenatedMessageLogging::doTestStepL()
       
  5134 	{
       
  5135 	INFO_PRINTF1(_L("Test Tx and Rx SMS with 3 PDU message"));
       
  5136 
       
  5137 
       
  5138 	CTestLog* testLog = CTestLog::NewLC(*iSmsStackTestUtils, iFs,this, CActive::EPriorityStandard);
       
  5139 	testLog->StartL();
       
  5140 	
       
  5141 	CleanupStack::PopAndDestroy(testLog);
       
  5142 
       
  5143 	return TestStepResult();
       
  5144 	}
       
  5145 
       
  5146 
       
  5147 TVerdict CTestEnumerationOfStatusReport::doTestStepL()
       
  5148 	{
       
  5149 	INFO_PRINTF1(_L("Test enumeration of status report"));
       
  5150 
       
  5151 	RSocketServ socketServer;
       
  5152 	PrepareRegTestLC(socketServer, 51);
       
  5153 	
       
  5154 
       
  5155 	RSocket socket;
       
  5156 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  5157 
       
  5158 	CSmsMessage* smsMessage = CreateSmsMessageLC(CSmsPDU::ESmsStatusReport, CSmsBuffer::NewL(), iTelephoneNumber);
       
  5159 
       
  5160 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  5161 
       
  5162 	WriteToSIML(socket, *smsMessage);
       
  5163 
       
  5164  	// Enumerate messages from Store
       
  5165 	TRequestStatus status;
       
  5166 	TPckgBuf<TUint> sbuf;
       
  5167 	sbuf()=0;
       
  5168 
       
  5169 	//Now enumerate messages from store
       
  5170 	socket.Ioctl(KIoctlEnumerateSmsMessages,status,&sbuf, KSolSmsProv);
       
  5171 	User::WaitForRequest(status);
       
  5172 	TEST(status.Int() == KErrNone);
       
  5173 
       
  5174 	//sbuf() includes the count of messages on Store
       
  5175 	TInt count = sbuf();
       
  5176 	INFO_PRINTF2(_L("%d enumerated messages"), count);
       
  5177 	TEST(count==1);
       
  5178 
       
  5179 	CleanupStack::PopAndDestroy(smsMessage);
       
  5180 	CleanupStack::PopAndDestroy(&socket);
       
  5181     CleanupStack::PopAndDestroy(&socketServer);
       
  5182 
       
  5183 	return TestStepResult();
       
  5184 	}
       
  5185 
       
  5186 
       
  5187 TVerdict CTestWriteStatusReportToSIM::doTestStepL()
       
  5188 	{
       
  5189 	INFO_PRINTF1(_L("Test write of status report to SIM"));
       
  5190 
       
  5191 	RSocketServ socketServer;
       
  5192 	PrepareRegTestLC(socketServer, 49);
       
  5193 	
       
  5194 
       
  5195 	RSocket socket;
       
  5196 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrLocalOperation);
       
  5197 
       
  5198 	CSmsMessage* smsMessage = CreateSmsMessageLC(CSmsPDU::ESmsStatusReport, CSmsBuffer::NewL(), iTelephoneNumber);
       
  5199 
       
  5200 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  5201 
       
  5202 	WriteToSIML(socket, *smsMessage);
       
  5203 
       
  5204 	CleanupStack::PopAndDestroy(smsMessage);
       
  5205 	CleanupStack::PopAndDestroy(&socket);
       
  5206     CleanupStack::PopAndDestroy(&socketServer);
       
  5207 
       
  5208 	return TestStepResult();
       
  5209 	}
       
  5210 
       
  5211 
       
  5212 TVerdict CTestTxSmsWithDelayedCompletion::doTestStepL()
       
  5213     {
       
  5214     /**
       
  5215      *  INC045765/DEF46216 - Test that sms stack does not time out if the TSY takes 1 minute
       
  5216      *  59 seconds to complete sending. This test case is cloned from
       
  5217      *  TestSimpleTxAndRxL(), simply removing the message receiption portion
       
  5218      *  and adding a delay to the SIM TSY's completion time in tsms_config.txt.
       
  5219      *  DEF047240 - read sendTryTimeout from ESK file
       
  5220      */
       
  5221 
       
  5222 	INFO_PRINTF1(_L("Test Simple Tx SMS"));
       
  5223 
       
  5224 	RSocketServ socketServer;
       
  5225 	PrepareRegTestLC(socketServer, 60);
       
  5226 	
       
  5227 
       
  5228 	RSocket socket;
       
  5229 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  5230 
       
  5231  	// Create comms database object
       
  5232 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  5233 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  5234 #else
       
  5235 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  5236 #endif
       
  5237 	CleanupStack::PushL(db);
       
  5238 
       
  5239 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
  5240 
       
  5241 	// EReceiveUnstoredClientAck
       
  5242 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  5243 	CleanupStack::PushL(smsReceiveModeField);
       
  5244 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  5245 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  5246 	smsReceiveModeField->ModifyL(*db);
       
  5247 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  5248 	CleanupStack::PopAndDestroy(db);
       
  5249 
       
  5250 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  5251 
       
  5252 	//Set destination and SC numbers
       
  5253 	iTelephoneNumber=KPekka;
       
  5254 	iServiceCenterNumber=KRadiolinjaSC;
       
  5255 
       
  5256 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  5257 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  5258 	CleanupStack::PushL(smsMessage);
       
  5259 
       
  5260 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  5261 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  5262 
       
  5263 	//Send SMS
       
  5264 	SendSmsL(smsMessage,socket);
       
  5265 
       
  5266 	CleanupStack::PopAndDestroy(smsMessage);
       
  5267 
       
  5268 	INFO_PRINTF1(_L("SMS message sent successfully") );
       
  5269 
       
  5270 	CleanupStack::PopAndDestroy(&socket);
       
  5271     CleanupStack::PopAndDestroy(&socketServer);
       
  5272 
       
  5273 	return TestStepResult();
       
  5274 	};
       
  5275 
       
  5276 
       
  5277 TVerdict CTestSmsStoreReadCancel::doTestStepL()
       
  5278 /**
       
  5279  *  Test Sms message storage - cancel during read
       
  5280  */
       
  5281 	{
       
  5282     return TestStepResult() ;
       
  5283 	}
       
  5284 
       
  5285 
       
  5286 TVerdict CTestBindWhenPoweredDownWithPublishSubscribe::doTestStepL()
       
  5287 /**
       
  5288  *  Test bind()ing when powered-down, and subsequent dequeueing of messages upon power-up
       
  5289  *  using Publish and Subscribe
       
  5290  */
       
  5291 	{
       
  5292 	INFO_PRINTF1(_L("Test bind() when powered-down with Publish and Subscribe"));
       
  5293 
       
  5294 	RSocketServ socketServer;
       
  5295 	TInt  ret = socketServer.Connect(KSocketMessageSlots);
       
  5296     TESTL(ret == KErrNone);
       
  5297     CleanupClosePushL(socketServer);
       
  5298 
       
  5299 	// Now switch phone off
       
  5300 	INFO_PRINTF1(_L("switching phone off") );
       
  5301 
       
  5302 	RProperty phonePowerProperty;
       
  5303 	User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
       
  5304 	CleanupClosePushL(phonePowerProperty);
       
  5305 
       
  5306 	// Create the socket and open for SIM operations
       
  5307 	RSocket socket;
       
  5308 	INFO_PRINTF1(_L("binding socket") );
       
  5309 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  5310 
       
  5311 	// knock power off because opening of socket brought it up
       
  5312 	TRequestStatus status;
       
  5313 	TInt phonePowerCheck;
       
  5314 	do
       
  5315     	{
       
  5316        	phonePowerProperty.Subscribe(status);
       
  5317     	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
       
  5318     	User::After(5 * 1000000);	// sleep 5 secs;
       
  5319     	User::WaitForRequest(status);
       
  5320     	TEST(status.Int() == KErrNone);
       
  5321     	User::LeaveIfError(phonePowerProperty.Get(phonePowerCheck));
       
  5322     	}
       
  5323 	while (phonePowerCheck==ESAPhoneOn);
       
  5324 	
       
  5325 	// Set the SimTSY config.
       
  5326 	SetSimTSYTestNumberL(29);
       
  5327 	
       
  5328 	// Briefly wait for receipt on it - this shouldn't happen when powered off
       
  5329 	TBool bRcv = TimedWaitForRecvL(socket, 5* 1000000);
       
  5330 	TEST_CHECKL(bRcv, EFalse, _L("Receive should fail with phone off"));
       
  5331 
       
  5332 	// Power on & wait for rx again
       
  5333 	do
       
  5334     	{
       
  5335        	phonePowerProperty.Subscribe(status);
       
  5336     	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
       
  5337     	User::After(5 * 1000000);	// sleep 5 secs;
       
  5338     	User::WaitForRequest(status);
       
  5339        	TEST(status.Int() == KErrNone);
       
  5340     	User::LeaveIfError(phonePowerProperty.Get(phonePowerCheck));
       
  5341     	}
       
  5342 	while (phonePowerCheck==ESAPhoneOff);
       
  5343 	
       
  5344 	// Briefly wait for receipt on it - this should now happen
       
  5345 	bRcv = TimedWaitForRecvL(socket, 5 * 1000000);
       
  5346 	TEST_CHECKL(bRcv, ETrue, _L("Receive should now succeed with phone on again"));
       
  5347 	CSmsMessage* smsMessage = RecvSmsL(socket);
       
  5348 
       
  5349 	CleanupStack::PushL(smsMessage);
       
  5350 
       
  5351 	TPtrC fromAddr = smsMessage->ToFromAddress();
       
  5352 	INFO_PRINTF2(_L("Received SMS from: %S"), &fromAddr);
       
  5353 	CleanupStack::PopAndDestroy(smsMessage);
       
  5354 	
       
  5355 	CleanupStack::PopAndDestroy(&socket);
       
  5356 	CleanupStack::PopAndDestroy(&phonePowerProperty);
       
  5357     CleanupStack::PopAndDestroy(&socketServer);
       
  5358 
       
  5359 	return TestStepResult() ;
       
  5360 	}
       
  5361 
       
  5362 
       
  5363 TVerdict CTestObserverNotifiedWhenPoweredDownWithPublishSubscribe::doTestStepL()
       
  5364 /**
       
  5365  *  Fix Defect 42937
       
  5366  *  
       
  5367  *  Test that the SMS Stack notifies the ESmsAddrApplication
       
  5368  *  observer when the modem is powered down without a panic.
       
  5369  *  
       
  5370  *  The test creates a socket for 16 Bit Port 245 and
       
  5371  *  then shuts down the power, causing the modem to be turned
       
  5372  *  off. The stack then notifies the observer for port 245,
       
  5373  *  calling function:
       
  5374  *  
       
  5375  *  void CSmsProtocol::NotifyMessageObservers(TInt aStatus)
       
  5376  *  
       
  5377  *  The test passes provided this method completes without a
       
  5378  *  panic.
       
  5379  *  
       
  5380  *  Identical operation of test now using publish and subscribe
       
  5381  */
       
  5382 	{
       
  5383 	INFO_PRINTF1(_L("Test observer when powered-down"));
       
  5384 
       
  5385 	RSocketServ socketServer;
       
  5386 	PrepareRegTestLC(socketServer, 59);
       
  5387 	
       
  5388 
       
  5389 	// Open the socket and bind it to ESmsAddrApplication16BitPort 245
       
  5390 	RSocket socket;
       
  5391 	TSmsAddr addr16;
       
  5392 	addr16.SetSmsAddrFamily(ESmsAddrApplication16BitPort);
       
  5393 	TInt port(245);
       
  5394 	addr16.SetPort(port);
       
  5395 
       
  5396 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,addr16);
       
  5397 
       
  5398 	// Switch phone off, causing the stack to notify the observer
       
  5399 	// corresponding to ESmsAddrApplication16BitPort 245
       
  5400 	INFO_PRINTF1(_L("switching phone off") );
       
  5401 
       
  5402 	RProperty phonePowerProperty;
       
  5403 	User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
       
  5404 	CleanupClosePushL(phonePowerProperty);
       
  5405 
       
  5406 	// knock power off because opening of socket brought it up
       
  5407 	TInt phonePowerCheck;
       
  5408 	TRequestStatus status;
       
  5409 	do
       
  5410     	{
       
  5411        	phonePowerProperty.Subscribe(status);
       
  5412     	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
       
  5413     	User::After(5 * 1000000);	// sleep 5 secs;
       
  5414     	User::WaitForRequest(status);
       
  5415     	TEST(status.Int() == KErrNone);
       
  5416     	User::LeaveIfError(phonePowerProperty.Get(phonePowerCheck));
       
  5417     	}
       
  5418 	while (phonePowerCheck==ESAPhoneOn);
       
  5419 
       
  5420 	// bring power back up
       
  5421 	do
       
  5422     	{
       
  5423        	phonePowerProperty.Subscribe(status);
       
  5424     	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
       
  5425     	User::After(5 * 1000000);	// sleep 5 secs;
       
  5426     	User::WaitForRequest(status);
       
  5427     	TEST(status.Int() == KErrNone);
       
  5428     	User::LeaveIfError(phonePowerProperty.Get(phonePowerCheck));
       
  5429     	}
       
  5430 	while (phonePowerCheck==ESAPhoneOff);
       
  5431 
       
  5432 	CleanupStack::PopAndDestroy(&phonePowerProperty);
       
  5433 	CleanupStack::PopAndDestroy(&socket);
       
  5434     CleanupStack::PopAndDestroy(&socketServer);
       
  5435 
       
  5436 	return TestStepResult();
       
  5437 	}
       
  5438 
       
  5439 
       
  5440 TVerdict CTestSmsCNumberChangeWithPublishSubscribe::doTestStepL()
       
  5441 /**
       
  5442  *  Test SMSC number change
       
  5443  *  Added to verify fix for defect # INC040029.
       
  5444  *  Client requires to change the behaviour of the SMS stack from
       
  5445  *  caching SMS parameters on start up, specifically Service Control
       
  5446  *  centre number to requesting it each time from the TSY.
       
  5447  *  This test harness uses the SimTsy. In order to mimic a change
       
  5448  *  in the Service Centre Number, using the SimTsy, one should initially
       
  5449  *  power the phone down, switch to a different test number, and power up again.
       
  5450  *  During the power up stage the SimTsy initialises itself and was deemed as
       
  5451  *  the only possible way to change the SC number using the SimTsy.
       
  5452  *  
       
  5453  *  The test relies on two test sections[#55 and #56] of the tsmsprt_config.txt
       
  5454  *  file, each of which contains a single Sms parameter entry.The test finally
       
  5455  *  compares the two parameter entries, which should differ.
       
  5456  *  
       
  5457  *  Updated to use publish and subscribe
       
  5458  *  
       
  5459  */
       
  5460     {
       
  5461     INFO_PRINTF1(_L("Test SMSC Number Change with Publish and Subscribe"));
       
  5462 
       
  5463     RSocketServ socketServer;
       
  5464     TRequestStatus status;
       
  5465     PrepareRegTestLC(socketServer, 55);
       
  5466 	
       
  5467 
       
  5468     // Open the socket for SIM operations
       
  5469     RSocket socket1;
       
  5470     iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket1,ESmsAddrLocalOperation);
       
  5471     RSmsSocketReadStream readstream1(socket1);
       
  5472 
       
  5473     // Create the smspList
       
  5474     CMobilePhoneSmspList* smspList1 = CMobilePhoneSmspList::NewL();
       
  5475     CleanupStack::PushL(smspList1);
       
  5476 
       
  5477     // Make read SMS params request to the SMS Stack
       
  5478     socket1.Ioctl(KIoctlReadSmsParams,status,NULL,KSolSmsProv);
       
  5479     INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  5480     User::WaitForRequest(status);
       
  5481     TEST(status.Int() == KErrNone);
       
  5482     INFO_PRINTF1(_L("Received SMS parameters..."));
       
  5483 
       
  5484     // Read list from stream and make acknowledgement to the SMS Stack
       
  5485 
       
  5486     INFO_PRINTF1(_L("About to write to smspList1..."));
       
  5487     readstream1 >> *smspList1;
       
  5488     INFO_PRINTF1(_L("written to smspList1..."));
       
  5489     socket1.Ioctl(KIoctlCompleteReadSmsParams,status,NULL,KSolSmsProv);
       
  5490     User::WaitForRequest(status);
       
  5491     TEST(status.Int() == KErrNone);
       
  5492 
       
  5493     iSmsStackTestUtils->PrintSmspList(*smspList1);
       
  5494 
       
  5495     // Switch phone off/on area
       
  5496     // Init required members
       
  5497     RProperty phonePowerProperty;
       
  5498     User::LeaveIfError(phonePowerProperty.Attach(KUidSystemCategory, KUidPhonePwr.iUid));
       
  5499     CleanupClosePushL(phonePowerProperty);
       
  5500 
       
  5501     // knock power off
       
  5502 	INFO_PRINTF1(_L("switching phone off"));
       
  5503 	TInt phonePowerCheck;
       
  5504 	do
       
  5505     	{
       
  5506        	phonePowerProperty.Subscribe(status);
       
  5507     	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOff));
       
  5508     	User::After(5 * 1000000);	// sleep 5 secs;
       
  5509     	User::WaitForRequest(status);
       
  5510     	TEST(status.Int() == KErrNone);
       
  5511     	User::LeaveIfError(phonePowerProperty.Get(phonePowerCheck));
       
  5512     	}
       
  5513 	while (phonePowerCheck==ESAPhoneOn);
       
  5514 
       
  5515     // Move to new test
       
  5516     RProperty testNumberProperty;
       
  5517     User::LeaveIfError(testNumberProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumber));
       
  5518     CleanupClosePushL(testNumberProperty);
       
  5519 
       
  5520     TInt TestNumber = 56;
       
  5521 
       
  5522     testNumberProperty.Subscribe(status);
       
  5523     User::LeaveIfError(testNumberProperty.Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,TestNumber));
       
  5524     User::WaitForRequest(status);
       
  5525     TEST(status.Int() == KErrNone);
       
  5526     TInt testNumberCheck;
       
  5527     User::LeaveIfError(testNumberProperty.Get(testNumberCheck));
       
  5528     if (TestNumber != testNumberCheck)
       
  5529         User::Leave(KErrNotFound);
       
  5530 
       
  5531     // Power back on
       
  5532     INFO_PRINTF1(_L("switching phone on") );
       
  5533 	do
       
  5534     	{
       
  5535        	phonePowerProperty.Subscribe(status);
       
  5536     	User::LeaveIfError(phonePowerProperty.Set(KUidSystemCategory,KUidPhonePwr.iUid,ESAPhoneOn));
       
  5537     	User::After(5 * 1000000);	// sleep 5 secs;
       
  5538     	User::WaitForRequest(status);
       
  5539     	TEST(status.Int() == KErrNone);
       
  5540     	User::LeaveIfError(phonePowerProperty.Get(phonePowerCheck));
       
  5541     	}
       
  5542 	while (phonePowerCheck==ESAPhoneOff);
       
  5543 
       
  5544     CleanupStack::PopAndDestroy(&testNumberProperty);
       
  5545     CleanupStack::PopAndDestroy(&phonePowerProperty);
       
  5546 
       
  5547     // Open the second socket for SIM operations
       
  5548     RSocket socket2;
       
  5549     iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket2,ESmsAddrLocalOperation);
       
  5550 
       
  5551     RSmsSocketReadStream readstream2(socket2);
       
  5552 
       
  5553     // Create the smspList
       
  5554     CMobilePhoneSmspList* smspList2 = CMobilePhoneSmspList::NewL();
       
  5555     CleanupStack::PushL(smspList2);
       
  5556 
       
  5557     // Make read SMS params request to the SMS Stack
       
  5558     socket2.Ioctl(KIoctlReadSmsParams,status,NULL,KSolSmsProv);
       
  5559     INFO_PRINTF1(_L("waiting for SMS parameters...") );
       
  5560     User::WaitForRequest(status);
       
  5561     TEST(status.Int() == KErrNone);
       
  5562 
       
  5563     // Read list from stream and make acknowledgement to the SMS Stack
       
  5564     readstream2 >> *smspList2;
       
  5565     socket2.Ioctl(KIoctlCompleteReadSmsParams,status,NULL,KSolSmsProv);
       
  5566     User::WaitForRequest(status);
       
  5567     TEST(status.Int() == KErrNone);
       
  5568 
       
  5569     iSmsStackTestUtils->PrintSmspList(*smspList2);
       
  5570 
       
  5571     // Test that the two numbers are different
       
  5572     RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy1;
       
  5573     RMobileSmsMessaging::TMobileSmspEntryV1 entryToTsy2;
       
  5574     entryToTsy1 = smspList1->GetEntryL(0);
       
  5575     entryToTsy2 = smspList2->GetEntryL(0);
       
  5576 
       
  5577     INFO_PRINTF3(_L("Call center Numbers: CS1 <%S> CS2 <%S>"),
       
  5578                                  &entryToTsy1.iServiceCentre.iTelNumber,
       
  5579                                  &entryToTsy2.iServiceCentre.iTelNumber);
       
  5580 
       
  5581     // Real test - both parameters have a vaild SC number and they are different - it leaves if error
       
  5582     TEST(
       
  5583         (entryToTsy1.iValidParams & RMobileSmsMessaging::KSCAIncluded) &&
       
  5584         (entryToTsy2.iValidParams & RMobileSmsMessaging::KSCAIncluded) &&
       
  5585         (entryToTsy1.iServiceCentre.iTelNumber != entryToTsy2.iServiceCentre.iTelNumber)
       
  5586                      );
       
  5587 
       
  5588     // Give memory back
       
  5589     CleanupStack::PopAndDestroy(smspList2);
       
  5590     CleanupStack::PopAndDestroy(&socket2);
       
  5591     CleanupStack::PopAndDestroy(smspList1);
       
  5592     CleanupStack::PopAndDestroy(&socket1);
       
  5593     CleanupStack::PopAndDestroy(&socketServer);
       
  5594 
       
  5595 	return TestStepResult();
       
  5596     }
       
  5597 
       
  5598 
       
  5599 TVerdict CTestStatusReportTime::doTestStepL()
       
  5600 /**
       
  5601  *  Test a simple Transmit and Receive with status reporting, check time stamp
       
  5602  */
       
  5603 	{
       
  5604 	INFO_PRINTF1(_L("Test Tx an SMS and then receive a status report"));
       
  5605 
       
  5606 	RSocketServ socketServer;
       
  5607 	PrepareRegTestLC(socketServer, 62);
       
  5608 	
       
  5609 
       
  5610 	RSocket socket;
       
  5611 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  5612 
       
  5613 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  5614 
       
  5615 	//Set destination and SC numbers
       
  5616 	iTelephoneNumber=KPekka;
       
  5617 	iServiceCenterNumber=KRadiolinjaSC;
       
  5618 
       
  5619 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  5620 	CSmsMessage* smsMessageSend=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
  5621 	CleanupStack::PushL(smsMessageSend);
       
  5622 
       
  5623 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  5624 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  5625 
       
  5626 	//  Get sent sms message time stamp
       
  5627 	TTime timeSend;
       
  5628 	timeSend = smsMessageSend->Time();
       
  5629 
       
  5630 	//Send SMS
       
  5631 	SendSmsL(smsMessageSend,socket);
       
  5632 
       
  5633 	CleanupStack::PopAndDestroy(smsMessageSend);
       
  5634 
       
  5635 	//Receive status report
       
  5636 	TSmsServiceCenterAddress telephoneNumberSC;
       
  5637 	telephoneNumberSC.Copy( KPekka );
       
  5638 
       
  5639 	//Receive SMS
       
  5640 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  5641 	WaitForRecvL(socket);
       
  5642 	CSmsMessage* smsMessageRecv = RecvSmsL(socket);
       
  5643 
       
  5644 	INFO_PRINTF1(_L("incoming SMS") );
       
  5645 
       
  5646 	//Check the status report (timestamp should be 10 seconds later)
       
  5647 	CleanupStack::PushL(smsMessageRecv);
       
  5648 	TBool isSR = (smsMessageRecv->Type()==CSmsPDU::ESmsStatusReport);
       
  5649 
       
  5650 	if (isSR)
       
  5651 		{
       
  5652 		INFO_PRINTF1(_L("Received status report"));
       
  5653 		TSmsServiceCenterAddress telephoneNumberSR=smsMessageRecv->ToFromAddress();
       
  5654 		TEST(telephoneNumberSR==telephoneNumberSC);
       
  5655 		INFO_PRINTF2(_L("Message delivered to %S"),&telephoneNumberSC);
       
  5656 
       
  5657 		//  check time stamp
       
  5658 		TTime timeRecv;
       
  5659 		timeRecv = smsMessageRecv->Time();
       
  5660 
       
  5661 		if (timeRecv < timeSend)
       
  5662 			{
       
  5663 			//  fail condition
       
  5664 			INFO_PRINTF1(_L("Timestamp of received status report earlier than sent SMS!"));
       
  5665 			}
       
  5666 		else if (timeRecv == timeSend)
       
  5667 			{
       
  5668 			//  fail condition
       
  5669 			INFO_PRINTF1(_L("Timestamp of received status report same as sent SMS!"));
       
  5670 			}
       
  5671 		else
       
  5672 			{
       
  5673 			//  pass condition
       
  5674 			INFO_PRINTF1(_L("Timestamp of received status report later than sent SMS!"));
       
  5675 			}
       
  5676 
       
  5677 		TEST(timeRecv > timeSend);
       
  5678 		}
       
  5679 	else
       
  5680 		INFO_PRINTF1(_L("Received SMS is NOT a Status report!"));
       
  5681 
       
  5682 	TEST(isSR==1);
       
  5683 
       
  5684 	CleanupStack::PopAndDestroy(smsMessageRecv);
       
  5685 	CleanupStack::PopAndDestroy(); // socket
       
  5686     CleanupStack::PopAndDestroy(&socketServer);
       
  5687 
       
  5688 	return TestStepResult() ;
       
  5689 	}
       
  5690 
       
  5691 
       
  5692 TVerdict CTestTx8BitWapWithStatus::doTestStepL()
       
  5693 	//  Fix Defect 42714
       
  5694 	//      This test case verifies that 8 Bit Wap messages can
       
  5695 	//      sent with their Status Report Bit set. Hither to this
       
  5696 	//      functionality was only provided for 7 Bit Wap Messages.
       
  5697 	// 	    It was an apparent oversight that the status report
       
  5698 	//      bit could not be set for a 8 Bit Wap Message.
       
  5699 	//
       
  5700 	//      The test has the following stages:
       
  5701 	//      (1) Create the Server
       
  5702 	//      (2) Create a Socket with which to send 8 Bit Wap Messages
       
  5703 	//      (3) Bind that Socket to a particular port number and address
       
  5704 	//      (4) Send Wap Message
       
  5705 	//      (5) Wait for status report
       
  5706 	//
       
  5707 	//      Note: It is not possible to correlate the outgoing Wap Message to
       
  5708 	//      the inbound status message as the interface does not provide
       
  5709 	//      access to the log id. This will be fixed in defect 42716.
       
  5710 	//
       
  5711     {
       
  5712     INFO_PRINTF1(_L("Test sending a 8 Bit Wap Message"));
       
  5713     INFO_PRINTF1(_L("and receiving a status message"));
       
  5714 
       
  5715     RSocketServ socketServer;
       
  5716     RSocket socket;
       
  5717     TRequestStatus status;
       
  5718 
       
  5719     PrepareRegTestLC(socketServer, 63);
       
  5720 	
       
  5721 
       
  5722     socketServer.StartProtocol(KSMSAddrFamily,KSockDatagram,KSMSDatagramProtocol,
       
  5723                                status);
       
  5724 
       
  5725     // (1) Create a Socket for sending wap messages
       
  5726     TInt ret=socket.Open(socketServer,KWAPSMSAddrFamily,KSockDatagram,KWAPSMSDatagramProtocol);
       
  5727     INFO_PRINTF2(_L("Socket return code is %d"),ret);
       
  5728     TESTL(ret == KErrNone);
       
  5729     CleanupClosePushL(socket);
       
  5730 
       
  5731     TWapSmsDataCodingScheme codingScheme = EWapSms8BitDCS;
       
  5732     ret = socket.SetOpt(KWapSmsOptionNameDCS,KWapSmsOptionLevel,codingScheme);
       
  5733     TESTL(ret==KErrNone);
       
  5734 
       
  5735     // (2) Create a socket for receiving status reports
       
  5736     RSocket statusSocket;
       
  5737     iSmsStackTestUtils->OpenSmsSocketLC(socketServer,statusSocket,ESmsAddrStatusReport);
       
  5738     // socket pushed onto stack inside method call.
       
  5739 
       
  5740     // (3) Create a Wap address and bind it to the socket
       
  5741     TWapAddr wapAddr;
       
  5742     wapAddr.SetWapPort(TWapPortNumber(226));
       
  5743     TBuf8<100> buf8;
       
  5744     buf8.Copy(iTelephoneNumber);
       
  5745     // iTelephoneNumber is set up to be the value defined
       
  5746     // in setupgsmsms.txt
       
  5747     wapAddr.SetWapAddress(buf8);
       
  5748     ret = socket.Bind(wapAddr);
       
  5749     TESTL(ret==KErrNone);
       
  5750 
       
  5751     // (4) Send a test message to address specified in setupgsmsms.txt
       
  5752     // and the port specified above
       
  5753      _LIT8(KWapTestMsg,"BEGIN:VCARD\r\nVERSION:2.1\r\nFN:Jal\r\nN:Jal\r\nORG:PanSoftware\r\nTITLE:Director\r\nLABEL:Islington\r\nEND:VCARD\r\n");
       
  5754     socket.SendTo(KWapTestMsg,wapAddr,0,status);
       
  5755     User::WaitForRequest(status);
       
  5756     TESTL(status.Int()==KErrNone);
       
  5757     INFO_PRINTF2(_L("Sent datagram length: %d on socket OK"),KWapTestMsg().Length());
       
  5758 
       
  5759     // (5) Message has been sent successfully, now check that
       
  5760     // status report is received for that address.
       
  5761     INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  5762     WaitForRecvL(statusSocket);
       
  5763     INFO_PRINTF1(_L("received status report...") );
       
  5764 
       
  5765     User::After(200000);
       
  5766 
       
  5767     CleanupStack::PopAndDestroy(&statusSocket);
       
  5768     CleanupStack::PopAndDestroy(&socket);
       
  5769     CleanupStack::PopAndDestroy(&socketServer);
       
  5770 
       
  5771     return TestStepResult();
       
  5772     }
       
  5773 
       
  5774 
       
  5775 TVerdict CTestSimStoreCorruptMessage::doTestStepL()
       
  5776 /**
       
  5777  *  Added to verify fix for DEF039913
       
  5778  *  This test case is testing how the stack processes PDUs that the TSY declares corrupt
       
  5779  *  (by returning KErrCorrupt to the client side active object).
       
  5780  *  
       
  5781  *  The SIM Store has been configured to contain 1 valid PDU, followed by 2 corrupt PDUs
       
  5782  *  and then one final valid PDU. The test checks that both, and only, the 2 valid PDUs
       
  5783  *  are decoded and forwarded to the client.
       
  5784  */
       
  5785 	{
       
  5786 	INFO_PRINTF1(_L("Test to see whether RMobileSimStore ignores corrupted SMSs"));
       
  5787 
       
  5788 	RSocketServ socketServer;
       
  5789 	PrepareRegTestLC(socketServer, 64);
       
  5790 	
       
  5791 
       
  5792 	// Open the socket
       
  5793 	RSocket socket;
       
  5794 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  5795 
       
  5796 	TRequestStatus status;
       
  5797 
       
  5798 	// Enumerate messages
       
  5799 	RPointerArray<CSmsMessage> messages;
       
  5800 	CleanupResetAndDestroyPushL(messages);
       
  5801 	ReadSmsStoreL(socket, messages, status);
       
  5802 
       
  5803 	TEST(status.Int() == KErrNone);
       
  5804 
       
  5805 	TEST(messages.Count()==2);
       
  5806 		
       
  5807 	CleanupStack::PopAndDestroy(&messages);
       
  5808 	CleanupStack::PopAndDestroy(&socket);
       
  5809     CleanupStack::PopAndDestroy(&socketServer);
       
  5810     
       
  5811 	return TestStepResult() ;
       
  5812 	}
       
  5813 
       
  5814  
       
  5815  TVerdict CTestCorruptPduWithNegativeResponse::doTestStepL()
       
  5816  /**
       
  5817   *  Test for DEF47323
       
  5818   *  (1) Configure the sms.esk file so that a corrupt pdu will be negatively acknowledged.
       
  5819   *  (2) Receive a corrupt PDU and negatively acknowledge it.
       
  5820   *  (3) Receive a second valid PDU, positively acknowledge it and forward it to the client.
       
  5821   *  
       
  5822   */
       
  5823  {
       
  5824  	INFO_PRINTF1(_L("TestCorruptPduWithNegativeResponse"));
       
  5825 
       
  5826  	RSocketServ socketServer;
       
  5827  	PrepareRegTestLC(socketServer, 65);
       
  5828 	
       
  5829 
       
  5830  	RSocket socket;
       
  5831  	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  5832 
       
  5833  	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  5834 
       
  5835  	//Set destination and SC numbers
       
  5836  	iTelephoneNumber=KPekka;
       
  5837  	iServiceCenterNumber=KRadiolinjaSC;
       
  5838 
       
  5839  	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  5840  	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  5841  	CleanupStack::PushL(smsMessage);
       
  5842 
       
  5843  	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  5844  	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  5845 
       
  5846  	//Send SMS
       
  5847  	SendSmsL(smsMessage,socket);
       
  5848 
       
  5849  	CleanupStack::PopAndDestroy(smsMessage);
       
  5850 
       
  5851  	//Receive SMS
       
  5852  	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  5853  	WaitForRecvL(socket);
       
  5854  	smsMessage = RecvSmsL(socket);
       
  5855 
       
  5856  	INFO_PRINTF1(_L("incoming SMS") );
       
  5857 
       
  5858  	CleanupStack::PushL(smsMessage);
       
  5859  	TestSmsContentsL(smsMessage,KTestMsg1);
       
  5860 
       
  5861  	CleanupStack::PopAndDestroy(smsMessage);
       
  5862  	CleanupStack::PopAndDestroy(&socket);
       
  5863     CleanupStack::PopAndDestroy(&socketServer);
       
  5864 
       
  5865   	return TestStepResult();
       
  5866  }
       
  5867 
       
  5868 
       
  5869 TVerdict CTestBootTimer::doTestStepL()
       
  5870  /**
       
  5871   *  Test for DEF054033:
       
  5872   *  Check that the sms stack boot timer value can be configured from the
       
  5873   *  smswap.sms.esk file.
       
  5874   *  
       
  5875   *  Test steps:
       
  5876   *  (1) Allow the sms stack to boot and for the boot timer value to
       
  5877   *  be configured from the esk file.
       
  5878   *  (2) Create a default socket using the address ESmsAddrRecvAny (This is
       
  5879   *  intended to be used as the default recepient for text messages
       
  5880   *  but not for wap messages - these are intended to be sent to a wap watcher).
       
  5881   *  (3) Send a wap message. This should be stored in the reassembly store
       
  5882   *  in the expectation that wap stack client will shortly bind a
       
  5883   *  socket. When the wap socket binds, the wap message will be read
       
  5884   *  from the reassembly store and be sent to the wap socket.
       
  5885   *  (4) However for the purposes of this test case, the wap socket never binds,
       
  5886   *  so when the sms stack's boot timer expires after the configured time,
       
  5887   *  the messages are delivered to the default socket.
       
  5888   */
       
  5889 	{
       
  5890     INFO_PRINTF1(_L("Test receive multi-part WAP message"));
       
  5891 
       
  5892     RSocketServ socketServer;
       
  5893     PrepareRegTestLC(socketServer, 45);
       
  5894 	
       
  5895 
       
  5896     RSocket socket;
       
  5897     iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  5898 
       
  5899     TBool msgRcvd = TimedWaitForRecvL(socket, 40000000);
       
  5900 
       
  5901     if (msgRcvd)
       
  5902     {
       
  5903         INFO_PRINTF1(_L("WAP message delivered to messaging application"));
       
  5904         INFO_PRINTF1(_L("on default watcher"));
       
  5905     }
       
  5906     else
       
  5907     {
       
  5908         INFO_PRINTF1(_L("Boot Time did not timeout - Test Failed"));
       
  5909         User::Leave(KErrGeneral);
       
  5910     }
       
  5911 
       
  5912     CleanupStack::PopAndDestroy(&socket);
       
  5913     CleanupStack::PopAndDestroy(&socketServer);
       
  5914 
       
  5915     return TestStepResult() ;
       
  5916 	}
       
  5917 
       
  5918 
       
  5919 TVerdict CTestCSmsMessageTimeStamp::doTestStepL()
       
  5920 /**
       
  5921  *  Creating a CSmsMessage object, checking it's timestamp is set to UTC time
       
  5922  */
       
  5923 
       
  5924 {
       
  5925 	//Get the current UTC offset
       
  5926 	TTime currUTCTime;
       
  5927 	currUTCTime.UniversalTime();
       
  5928 	TTimeIntervalSeconds currUTCOffset=User::UTCOffset();
       
  5929 
       
  5930 	_LIT(KTestMsg,"test message, 8bits, length 30");
       
  5931 	TBool result=ETrue;
       
  5932 
       
  5933 	//--------------------------------------------------------
       
  5934 	//	Set the universal time
       
  5935 	//	UTC=2005/03/07 13h11min, offset=35seconds
       
  5936 	TInt year=2005;
       
  5937 	TMonth month=EMarch;
       
  5938 	TInt day=6;
       
  5939 	TInt hour=13;
       
  5940 	TInt minute=11;
       
  5941 	TInt seconds=0;
       
  5942 	TInt milliseconds=0;
       
  5943 	TDateTime testTime(year,month,day,hour,minute,seconds,milliseconds);
       
  5944 	TTime utcTime(testTime);
       
  5945 	//Offset
       
  5946 	TInt offsetSeconds=35;
       
  5947 	TTimeIntervalSeconds offset(offsetSeconds);
       
  5948 	//Set UTC and offset
       
  5949 	User::SetUTCTimeAndOffset(utcTime,offset);
       
  5950 
       
  5951 	//Create a message
       
  5952 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  5953 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg,alphabet);
       
  5954 	CleanupStack::PushL(smsMessage);
       
  5955 
       
  5956 	//	Test time stamp, Time()
       
  5957 	//	Time must be = UTC, we allow 1 second for Message to be created.
       
  5958 	TTime smsTimeStamp=smsMessage->Time();
       
  5959 	TInt allowableVariance=1;
       
  5960 	TTimeIntervalSeconds secondVariance(allowableVariance);
       
  5961 	TEST(smsTimeStamp<=utcTime+secondVariance && smsTimeStamp>=utcTime-secondVariance);
       
  5962 
       
  5963 	//--------------------------------------------------------
       
  5964 	//SetTime
       
  5965 	//Setup a date time of message
       
  5966 	//Time=2004/12/31 23h45min55sec
       
  5967 	year=2004;
       
  5968 	month=EDecember;
       
  5969 	day=30;
       
  5970 	hour=23;
       
  5971 	minute=45;
       
  5972 	seconds=55;
       
  5973 	milliseconds=0;
       
  5974 	testTime=TDateTime(year,month,day,hour,minute,seconds,milliseconds);
       
  5975 	TTime updatedTime(testTime);
       
  5976 	smsMessage->SetTime(updatedTime);
       
  5977 
       
  5978 	//check the time
       
  5979 	TTime messageTime=smsMessage->Time();
       
  5980 	TEST(messageTime==updatedTime);
       
  5981 
       
  5982 	//--------------------------------------------------------
       
  5983 	//Check offset, Get
       
  5984 	TTimeIntervalSeconds messageOffset(smsMessage->UTCOffset());
       
  5985 	TEST(messageOffset==offset);
       
  5986 
       
  5987 	//--------------------------------------------------------
       
  5988 	//Set offset with message API
       
  5989 	offsetSeconds=60;		//1 minute
       
  5990 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  5991 	TBool ret=smsMessage->SetUTCOffset(offset);
       
  5992 	TEST(ret==result);
       
  5993 	//Check the value has changed
       
  5994 	messageOffset=smsMessage->UTCOffset();
       
  5995 	TEST(offset==messageOffset);
       
  5996 
       
  5997 	//--------------------------------------------------------
       
  5998 	//Exercise boundaries
       
  5999 	//Value 1 less than maximum
       
  6000 	offsetSeconds=78*15*60+899;		//78 fifteen minute blocks in seconds, plus 899 sec
       
  6001 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  6002 	ret=smsMessage->SetUTCOffset(offset);
       
  6003 	TEST(ret==result);
       
  6004 	messageOffset=smsMessage->UTCOffset();
       
  6005 	TEST(offset==messageOffset);
       
  6006 
       
  6007 	//Value on than maximum
       
  6008 	offsetSeconds=79*15*60;		//79 fifteen minute blocks in seconds
       
  6009 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  6010 	ret=smsMessage->SetUTCOffset(offset);
       
  6011 	TEST(ret==result);
       
  6012 	messageOffset=smsMessage->UTCOffset();
       
  6013 	TEST(offset==messageOffset);
       
  6014 
       
  6015 	//Value 1 more than maximum
       
  6016 	offsetSeconds=79*15*60+1;		//78 fifteen minute blocks in seconds, plus 1 sec
       
  6017 	TTimeIntervalSeconds outOfBoundsOffset(offsetSeconds);
       
  6018 	ret=smsMessage->SetUTCOffset(offset);
       
  6019 	TEST(ret==result);
       
  6020 	TEST(outOfBoundsOffset!=messageOffset);
       
  6021 	TEST(offset==messageOffset);
       
  6022 
       
  6023 	//Value -1
       
  6024 	offsetSeconds=-1;		//-1
       
  6025 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  6026 	ret=smsMessage->SetUTCOffset(offset);
       
  6027 	TEST(ret==result);
       
  6028 	messageOffset=smsMessage->UTCOffset();
       
  6029 	TEST(offset==messageOffset);
       
  6030 
       
  6031 	//Negative boundaries
       
  6032 	offsetSeconds=79*15*60*-1;		//79 fifteen minute blocks in seconds, negative
       
  6033 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  6034 	ret=smsMessage->SetUTCOffset(offset);
       
  6035 	TEST(ret==result);
       
  6036 	messageOffset=smsMessage->UTCOffset();
       
  6037 	TEST(offset==messageOffset);
       
  6038 
       
  6039 	//Value 1 less than negative maximum
       
  6040 	offsetSeconds=(79*15*60*-1)-1;		//79 fifteen minute blocks in seconds negative, minus 1 sec
       
  6041 	outOfBoundsOffset=TTimeIntervalSeconds(offsetSeconds);
       
  6042 	ret=smsMessage->SetUTCOffset(offset);
       
  6043 	TEST(ret==result);
       
  6044 	TEST(outOfBoundsOffset!=messageOffset);
       
  6045 	TEST(offset==messageOffset);
       
  6046 
       
  6047 	//Check clearing bits
       
  6048 	offsetSeconds=0xFFFF;		//0 1111 1111 1111 1111
       
  6049 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  6050 	ret=smsMessage->SetUTCOffset(offset);
       
  6051 	TEST(ret==result);
       
  6052 	messageOffset=smsMessage->UTCOffset();
       
  6053 	TEST(offset==messageOffset);
       
  6054 
       
  6055 	//Clear the bits
       
  6056 	offsetSeconds=0x10000;		//1 0000 0000 0000 0000
       
  6057 	offset=TTimeIntervalSeconds(offsetSeconds);
       
  6058 	ret=smsMessage->SetUTCOffset(offset);
       
  6059 	TEST(ret==result);
       
  6060 	messageOffset=smsMessage->UTCOffset();
       
  6061 	TEST(offset==messageOffset);
       
  6062 
       
  6063 	CleanupStack::PopAndDestroy(smsMessage);
       
  6064 	User::SetUTCTimeAndOffset(currUTCTime,currUTCOffset);
       
  6065 
       
  6066 	return TestStepResult();
       
  6067 }
       
  6068 
       
  6069 
       
  6070 TVerdict CTestCSmsMessageWithDeliverPDU::doTestStepL()
       
  6071 {
       
  6072 /**
       
  6073  *  Creating a CSmsMessage object when receiving a message with a deliver PDU
       
  6074  */
       
  6075 	const TInt KMaxAllowanceSeconds=4;
       
  6076 	const TInt KMaxRxPeriod=60;
       
  6077 	TTimeIntervalSeconds allowableDelay(KMaxAllowanceSeconds);
       
  6078 	TTimeIntervalSeconds rxPeriod(KMaxRxPeriod);
       
  6079 
       
  6080 
       
  6081 	INFO_PRINTF1(_L("Test Simple Tx and Rx SMS"));
       
  6082 
       
  6083 	RSocketServ socketServer;
       
  6084 	PrepareRegTestLC(socketServer, 66);
       
  6085 	
       
  6086 
       
  6087 	RSocket socket;
       
  6088 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  6089 
       
  6090 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  6091 
       
  6092 	//Set destination and SC numbers
       
  6093 	iTelephoneNumber=KPekka;
       
  6094 	iServiceCenterNumber=KRadiolinjaSC;
       
  6095 
       
  6096 	//Create the message
       
  6097 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  6098 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  6099 	CleanupStack::PushL(smsMessage);
       
  6100 
       
  6101 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  6102 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  6103 
       
  6104 	//Send SMS
       
  6105 	SendSmsL(smsMessage,socket);
       
  6106 
       
  6107 	CleanupStack::PopAndDestroy(smsMessage);
       
  6108 
       
  6109 	//Receive SMS
       
  6110 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  6111 
       
  6112 	//Wait for first SMS
       
  6113 	WaitForRecvL(socket);
       
  6114 
       
  6115 	//Before we create the message received, we get the UTC time and the offset.
       
  6116 	TTime utcTime;
       
  6117 	utcTime.UniversalTime();
       
  6118 	TTimeIntervalSeconds offset=User::UTCOffset();
       
  6119 
       
  6120 	//Receive first message
       
  6121 	//Messages are received at 1 minute intervals
       
  6122 	smsMessage = RecvSmsL(socket);
       
  6123 	CleanupStack::PushL(smsMessage);
       
  6124 	INFO_PRINTF1(_L("incoming first SMS") );
       
  6125 
       
  6126 	//Checks make on message
       
  6127 	//iTime is within 2 seconds of UTC
       
  6128 	TTime messageTime=smsMessage->Time();
       
  6129 	TEST(messageTime>=utcTime-allowableDelay&&messageTime<=utcTime+allowableDelay);
       
  6130 	TTimeIntervalSeconds messageOffset=smsMessage->UTCOffset();
       
  6131 	TEST(messageOffset==offset);
       
  6132 
       
  6133 	//Receive second message
       
  6134 	//This message will be received after we have set UTC
       
  6135 	//UTC=1999/09/16 22hr35min45sec, offset=55sec
       
  6136 	TInt year=1999;
       
  6137 	TMonth month=ESeptember;
       
  6138 	TInt day=15; //16th
       
  6139 	TInt hour=22;
       
  6140 	TInt minute=35;
       
  6141 	TInt second=45;
       
  6142 	TInt milliseconds=0;
       
  6143 	TDateTime specificDateTime(year,month,day,hour,minute,second,milliseconds);
       
  6144 	TTime specificUTCTime(specificDateTime);
       
  6145 	TInt specificOffsetValue=55;
       
  6146 	TTimeIntervalSeconds specificOffset(specificOffsetValue);
       
  6147 	User::SetUTCTimeAndOffset(specificUTCTime,specificOffset);
       
  6148 
       
  6149 	CleanupStack::PopAndDestroy(smsMessage);
       
  6150 
       
  6151 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  6152 
       
  6153 	//	Wait for second message to arrive.  Must be round 60 seconds
       
  6154 	WaitForRecvL(socket);
       
  6155 
       
  6156 	//Receive second message
       
  6157 	smsMessage = RecvSmsL(socket);
       
  6158 	CleanupStack::PushL(smsMessage);
       
  6159 
       
  6160 	INFO_PRINTF1(_L("incoming second SMS") );
       
  6161 
       
  6162 	//Checks make on message
       
  6163 	messageTime=smsMessage->Time();
       
  6164 	TEST(messageTime>=specificUTCTime+rxPeriod-allowableDelay&&messageTime<=specificUTCTime+rxPeriod+allowableDelay);
       
  6165 	messageOffset=smsMessage->UTCOffset();
       
  6166 	TEST(messageOffset==specificOffset);
       
  6167 	CleanupStack::PopAndDestroy(smsMessage);
       
  6168 
       
  6169 	//Receive three PDU's at 1 minute intervals.
       
  6170 	//We set UTC prior to receiving anything.
       
  6171 	//PDU will contain time center stamp with different offsets.
       
  6172 	//The test checks that the time stamp of the PDU inside the message contains the
       
  6173 	//time stamp of the first PDU received.
       
  6174 
       
  6175 	User::SetUTCOffset(TTimeIntervalSeconds(0));
       
  6176 	WaitForRecvL(socket);
       
  6177 	//Receive third message
       
  6178 	smsMessage = RecvSmsL(socket);
       
  6179 	CleanupStack::PushL(smsMessage);
       
  6180 
       
  6181 	//Check the pdu time stamp offset.
       
  6182 	//Expected UTC = 2001/03/06 10hr19min35sec, offset = 0
       
  6183 	year=2001;
       
  6184 	month=EMarch;
       
  6185 	day=5; 			//6th
       
  6186 	hour=10;
       
  6187 	minute=19;
       
  6188 	second=35;
       
  6189 	milliseconds=0;
       
  6190 
       
  6191 	TDateTime expectedServiceCenterTimeStamp(year,month,day,hour,minute,second,milliseconds);
       
  6192 	TTime expectedTime(expectedServiceCenterTimeStamp);
       
  6193 	TTime timeStamp;
       
  6194 	TInt timeStampOffset=0;
       
  6195 	CSmsDeliver& pdu=static_cast<CSmsDeliver&>(smsMessage->SmsPDU());
       
  6196 	pdu.ServiceCenterTimeStamp(timeStamp,timeStampOffset);
       
  6197 	TEST(timeStampOffset==0);
       
  6198 	TEST(expectedTime==timeStamp);
       
  6199 
       
  6200 	CleanupStack::PopAndDestroy(smsMessage);
       
  6201 	CleanupStack::PopAndDestroy(&socket);
       
  6202     CleanupStack::PopAndDestroy(&socketServer);
       
  6203 
       
  6204 	return TestStepResult();
       
  6205 }
       
  6206 
       
  6207 
       
  6208 TVerdict CTestCSmsMessageWithStatusReportPDU::doTestStepL()
       
  6209 /**
       
  6210  *  Test the timestamp in a statusReport PDU
       
  6211  */
       
  6212 	{
       
  6213 	INFO_PRINTF1(_L("Test Tx an SMS and then receive a status report"));
       
  6214 
       
  6215 	RSocketServ socketServer;
       
  6216 	PrepareRegTestLC(socketServer, 67);
       
  6217 	
       
  6218 
       
  6219 	RSocket socket;
       
  6220 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  6221 
       
  6222 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  6223 
       
  6224 	//Set destination and SC numbers
       
  6225 	iTelephoneNumber=KPekka;
       
  6226 	iServiceCenterNumber=KRadiolinjaSC;
       
  6227 
       
  6228 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  6229 	CSmsMessage* smsMessage=CreateSmsWithStatusReportReqL(KTestMsg1,alphabet);
       
  6230 	CleanupStack::PushL(smsMessage);
       
  6231 
       
  6232 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  6233 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  6234 
       
  6235 	//Send SMS
       
  6236 	SendSmsL(smsMessage,socket);
       
  6237 	CleanupStack::PopAndDestroy(smsMessage);
       
  6238 
       
  6239 	//Receive status report
       
  6240 	TSmsServiceCenterAddress telephoneNumber;
       
  6241 	telephoneNumber.Copy( KPekka );
       
  6242 
       
  6243 	//Wait for status report
       
  6244 	WaitForRecvL(socket);
       
  6245 
       
  6246 	//Get message from socket
       
  6247 	smsMessage = RecvSmsL(socket);
       
  6248 
       
  6249 	//Get the status report
       
  6250 	CleanupStack::PushL(smsMessage);
       
  6251 	TEST(smsMessage->Type()==CSmsPDU::ESmsStatusReport);
       
  6252 	TSmsServiceCenterAddress messageTelephoneNumber=smsMessage->ToFromAddress();
       
  6253 	TEST(telephoneNumber==messageTelephoneNumber);
       
  6254 
       
  6255 	//Check PDU
       
  6256 	TTime timeStamp;
       
  6257 	TInt timeStampOffset;
       
  6258 	CSmsStatusReport& pdu=static_cast<CSmsStatusReport&>(smsMessage->SmsPDU());
       
  6259 	//Expected service center time stamp
       
  6260 	TInt year=2004;
       
  6261 	TMonth month=EJune;
       
  6262 	TInt day=14; 	//15th
       
  6263 	TInt hour=4;
       
  6264 	TInt minute=0;
       
  6265 	TInt second=12;
       
  6266 	TInt milliseconds=0;
       
  6267 	TTimeIntervalSeconds offset(-5);
       
  6268 
       
  6269 	TDateTime expectedServiceCenterTimeStamp(year,month,day,hour,minute,second,milliseconds);
       
  6270 	TTime expectedTime(expectedServiceCenterTimeStamp);
       
  6271 	pdu.ServiceCenterTimeStamp(timeStamp,timeStampOffset);
       
  6272 	TEST(timeStampOffset==offset.Int());
       
  6273 	TEST(expectedTime==timeStamp);
       
  6274 	//TDateTime actualDateTime=timeStamp.DateTime();
       
  6275 
       
  6276 	//and discharge time
       
  6277 	year=2004;
       
  6278 	month=EAugust;
       
  6279 	day=25; 	//26th
       
  6280 	hour=01;
       
  6281 	minute=13;
       
  6282 	second=3;
       
  6283 	milliseconds=0;
       
  6284 	offset=TTimeIntervalSeconds(-9);
       
  6285 	expectedServiceCenterTimeStamp=TDateTime(year,month,day,hour,minute,second,milliseconds);
       
  6286 	expectedTime=TTime(expectedServiceCenterTimeStamp);
       
  6287 
       
  6288 	pdu.DischargeTime(timeStamp,timeStampOffset);
       
  6289 	TEST(timeStampOffset==offset.Int());
       
  6290 	TEST(expectedTime==timeStamp);
       
  6291 	//actualDateTime=timeStamp.DateTime();
       
  6292 
       
  6293 	CleanupStack::PopAndDestroy(smsMessage);
       
  6294 	CleanupStack::PopAndDestroy(&socket);
       
  6295     CleanupStack::PopAndDestroy(&socketServer);
       
  6296 
       
  6297 	return TestStepResult() ;
       
  6298 	}
       
  6299 
       
  6300 TVerdict CTestCSmsMessageWithSubmitPDU::doTestStepL()
       
  6301 /**
       
  6302  *  Test creating a sms message with a submit pdu.  PDU timestamp should reflect
       
  6303  *  UTC value, offset and validity period.
       
  6304  */
       
  6305 	{
       
  6306 	_LIT(KTestMsg,"test message, 8bits, length 30");
       
  6307 	INFO_PRINTF1(_L("Test Tx an SMS and let SIMTSY validate the validityPeriod in the submit pdu"));
       
  6308 
       
  6309 	RSocketServ socketServer;
       
  6310 	PrepareRegTestLC(socketServer, 68);
       
  6311 	
       
  6312 	RSocket socket;
       
  6313 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  6314 
       
  6315 	//--------------------------------------------------------
       
  6316 	//	Set the universal time
       
  6317 	//Setup a date time
       
  6318 	TInt year=2009;
       
  6319 	TMonth month=EMay;
       
  6320 	TInt day=25;
       
  6321 	TInt hour=5;
       
  6322 	TInt minute=40;
       
  6323 	TInt seconds=15;
       
  6324 	TInt milliseconds=0;
       
  6325 	TDateTime testTime(year,month,day,hour,minute,seconds,milliseconds);
       
  6326 	TTime utcTime(testTime);
       
  6327 		
       
  6328 	//Offset
       
  6329 	TInt offsetSeconds=55+(60*20)+(60*60*4);			//55 seconds, 20 min, 4 hours
       
  6330 	TTimeIntervalSeconds offset(offsetSeconds);
       
  6331 	//Set UTC and offset
       
  6332 	User::SetUTCTimeAndOffset(utcTime,offset);		
       
  6333 	//--------------------------------------------------------
       
  6334 	
       
  6335 	//Create a message
       
  6336 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  6337 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg,alphabet);
       
  6338 	CleanupStack::PushL(smsMessage);
       
  6339 
       
  6340 	//	Test validity period of submit pdu
       
  6341 	TEST(smsMessage->Type()==CSmsPDU::ESmsSubmit);
       
  6342 
       
  6343 	//Get submit pdu
       
  6344 	TTimeIntervalMinutes expectedPeriod(24*60);		//default set to 1 day
       
  6345 	CSmsSubmit& pdu=static_cast<CSmsSubmit&>(smsMessage->SmsPDU());
       
  6346 	TTimeIntervalMinutes validityPeriod=pdu.ValidityPeriod();
       
  6347 	TEST(validityPeriod==expectedPeriod);
       
  6348 	TTimeIntervalMinutes newValidityPeriod(24*60*4);
       
  6349 	pdu.SetValidityPeriod(newValidityPeriod);
       
  6350 	//TSmsFirstOctet validityPeriodFormat=TSmsFirstOctet::ESmsVPFSemiOctet;
       
  6351 
       
  6352 	pdu.SetValidityPeriodFormat(TSmsFirstOctet::ESmsVPFSemiOctet);
       
  6353 	
       
  6354 	//Send the message
       
  6355 	SendSmsL(smsMessage,socket);
       
  6356 	TEST(ETrue);
       
  6357 
       
  6358 	CleanupStack::PopAndDestroy(smsMessage);
       
  6359 	//--------------------------------------------------------
       
  6360 	CleanupStack::PopAndDestroy(&socket);
       
  6361     CleanupStack::PopAndDestroy(&socketServer);
       
  6362 
       
  6363 	return TestStepResult() ;
       
  6364 	}
       
  6365 
       
  6366 
       
  6367 TVerdict CTestHandlePID40h::doTestStepL()
       
  6368 /**
       
  6369  *  Test for DEF055800
       
  6370  *  Check that PDUs with PID = 0x40 are acknowledged but not forwarded to
       
  6371  *  the inbox.
       
  6372  */
       
  6373  	{
       
  6374     INFO_PRINTF1(_L("Check that PDUs with PID = 0x40 are acknowledged but not forwarded to the inbox."));
       
  6375 
       
  6376 	RSocketServ socketServer;
       
  6377 	PrepareRegTestLC(socketServer, 69);
       
  6378 
       
  6379 	RSocket socket;
       
  6380 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  6381 
       
  6382 	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  6383 
       
  6384 	//Set destination and SC numbers
       
  6385 	iTelephoneNumber=KPekka;
       
  6386 	iServiceCenterNumber=KRadiolinjaSC;
       
  6387 
       
  6388 	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  6389 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  6390 	CleanupStack::PushL(smsMessage);
       
  6391 
       
  6392 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  6393 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  6394 
       
  6395 	//Send SMS
       
  6396 	SendSmsL(smsMessage,socket);
       
  6397 
       
  6398 	CleanupStack::PopAndDestroy(smsMessage);
       
  6399 
       
  6400 	//Receive 2 PDUs
       
  6401 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  6402 	WaitForRecvL(socket);
       
  6403 	smsMessage = RecvSmsL(socket);
       
  6404 
       
  6405 	INFO_PRINTF1(_L("incoming SMS") );
       
  6406 
       
  6407 	CleanupStack::PushL(smsMessage);
       
  6408 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  6409 
       
  6410 	//Save the received message to the SMS storage
       
  6411 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  6412 	WriteSmsToSimL(*smsMessage, socket);
       
  6413 	CleanupStack::PopAndDestroy(smsMessage);
       
  6414 
       
  6415 	// Enumerate messages from Store
       
  6416 	RPointerArray<CSmsMessage> messages;
       
  6417 	ReadSmsStoreL(socket, messages);
       
  6418 	// The standard PDU should be in the SIM store, along with two other messages
       
  6419 	// The PDU with PID 0x40 should be NOT be present
       
  6420 	TInt count = messages.Count();
       
  6421 	TEST(count==3);
       
  6422 	INFO_PRINTF2(_L("Expecting 3 messages in SIM Store, found %d."),count);
       
  6423 	messages.ResetAndDestroy();
       
  6424 
       
  6425 	CleanupStack::PopAndDestroy(&socket);
       
  6426     CleanupStack::PopAndDestroy(&socketServer);
       
  6427 
       
  6428 	return TestStepResult() ;
       
  6429 	}
       
  6430 
       
  6431 TVerdict CTestDiskSpaceMidRangeClass0Class2::doTestStepPreambleL()
       
  6432     {
       
  6433     CSmsPrtTestStep::doTestStepPreambleL();
       
  6434 
       
  6435 #ifdef _DEBUG    
       
  6436     TInt err = RProperty::Define(KUidPSSMSStackCategory, KUidPSSMSStackFreeDiskSpaceKey, RProperty::EInt);
       
  6437     if ((err != KErrNone) && (err != KErrAlreadyExists))    
       
  6438         {
       
  6439         ERR_PRINTF2(_L("RProperty::Define() failure [err=%d]"), err);
       
  6440         User::Leave(err);
       
  6441         }    
       
  6442 #endif
       
  6443     
       
  6444     return TestStepResult();
       
  6445     }
       
  6446 
       
  6447 /**
       
  6448  *  Receive class0 and class2 messages when DiskSpace in mid range. Only the class 0
       
  6449  *  message will be received initially, but the class 2 will be delivered when the
       
  6450  *  free disk space returns.
       
  6451  *
       
  6452  *  @note This test can only be run when the SMS Stack is in debug mode.
       
  6453  *
       
  6454  */
       
  6455 TVerdict CTestDiskSpaceMidRangeClass0Class2::doTestStepL()
       
  6456 	{
       
  6457 #ifndef _DEBUG
       
  6458 	INFO_PRINTF1(_L("This test can only be run when the SMS Stack is in debug mode."));
       
  6459 #else
       
  6460 	
       
  6461 	//
       
  6462 	// Disk space should be available at the start...
       
  6463 	//
       
  6464 	TInt  diskSpaceStatus(ESmsDiskSpaceUnknown);
       
  6465 	TInt  ret(KErrUnknown);
       
  6466 	
       
  6467 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6468 						 diskSpaceStatus);
       
  6469 	TEST(ret == KErrNone);
       
  6470 	TEST(diskSpaceStatus == ESmsDiskSpaceAvailable);
       
  6471 
       
  6472 	//
       
  6473 	// Setup the .RSC file and free disk space to be in the mid-range...
       
  6474 	//
       
  6475 	TUint highDrop = 4;
       
  6476 	TUint lowDrop = 10;
       
  6477 	TUint freeDrop = 7;
       
  6478 	
       
  6479 	SetHighLowLimitsAndDiskSpaceLevelL(highDrop, lowDrop, freeDrop);
       
  6480 
       
  6481 	//
       
  6482 	// Load the SMS Stack...
       
  6483 	//
       
  6484 	RSocketServ  socketServer;
       
  6485 	PrepareRegTestLC(socketServer, 131);
       
  6486 
       
  6487 	RSocket  socket;
       
  6488 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socket, ESmsAddrRecvAny);
       
  6489 	
       
  6490 	//
       
  6491 	// Attempt to receive an SMS - Class 0 message should arrive...
       
  6492 	//
       
  6493 	INFO_PRINTF1(_L("Receiving SMS message - Class 0 message should arrive..."));
       
  6494 
       
  6495 	TBool  messageReceived;
       
  6496 
       
  6497 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6498 	if (messageReceived)
       
  6499 		{
       
  6500 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6501 
       
  6502 		INFO_PRINTF1(_L("Message received!"));
       
  6503 
       
  6504 		TSmsDataCodingScheme::TSmsClass  msgClass;
       
  6505 
       
  6506 		if (!sms->SmsPDU().DataCodingSchemePresent()  ||
       
  6507 			!sms->SmsPDU().Class(msgClass)  ||
       
  6508 			msgClass != TSmsDataCodingScheme::ESmsClass0)
       
  6509 			{
       
  6510 			INFO_PRINTF1(_L("Message was not Class 0!"));
       
  6511 			TEST(EFalse);
       
  6512 			}
       
  6513 
       
  6514 		delete sms;
       
  6515 		}
       
  6516 	else
       
  6517 		{
       
  6518 		INFO_PRINTF1(_L("Message not received!"));
       
  6519 		TEST(EFalse);
       
  6520 		}
       
  6521 		
       
  6522 	//
       
  6523 	// Disk space should not be available, even though the Class 0 came through okay.
       
  6524 	// Potentially I think this maybe a defect in the Disk Space Monitor class.
       
  6525 	//
       
  6526 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6527 						 diskSpaceStatus);
       
  6528 	TEST(ret == KErrNone);
       
  6529 	TEST(diskSpaceStatus == ESmsDiskSpaceFull);
       
  6530 
       
  6531 	//
       
  6532 	// Attempt to receive an SMS - Class 2 message should not arrive...
       
  6533 	//
       
  6534 	INFO_PRINTF1(_L("Receiving SMS message - Class 2 message should not arrive..."));
       
  6535 
       
  6536 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6537 	if (messageReceived)
       
  6538 		{
       
  6539 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6540 
       
  6541 		INFO_PRINTF1(_L("Message received!"));
       
  6542 		TEST(EFalse);
       
  6543 
       
  6544 		delete sms;
       
  6545 		}
       
  6546 	else
       
  6547 		{
       
  6548 		INFO_PRINTF1(_L("Message not received!"));
       
  6549 		}
       
  6550 
       
  6551 	//
       
  6552 	// Disk space should not be available now...
       
  6553 	//
       
  6554 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6555 						 diskSpaceStatus);
       
  6556 	TEST(ret == KErrNone);
       
  6557 	TEST(diskSpaceStatus == ESmsDiskSpaceFull);
       
  6558 
       
  6559 	//
       
  6560 	// Raise the disk space to above the high limit...
       
  6561 	//
       
  6562     freeDrop = 2;
       
  6563     ReleaseDiskSpaceL();
       
  6564     SetFreeDiskSpaceFromDropLevelL(freeDrop);	
       
  6565 
       
  6566 	//
       
  6567 	// Attempt to receive an SMS - Class 2 message should arrive...
       
  6568 	//
       
  6569 	INFO_PRINTF1(_L("Receiving SMS message - Class 2 message should arrive..."));
       
  6570 
       
  6571 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6572 	if (messageReceived)
       
  6573 		{
       
  6574 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6575 
       
  6576 		INFO_PRINTF1(_L("Message received!"));
       
  6577 
       
  6578 		TSmsDataCodingScheme::TSmsClass  msgClass;
       
  6579 
       
  6580 		if (!sms->SmsPDU().DataCodingSchemePresent()  ||
       
  6581 			!sms->SmsPDU().Class(msgClass)  ||
       
  6582 			msgClass != TSmsDataCodingScheme::ESmsClass2)
       
  6583 			{
       
  6584 			INFO_PRINTF1(_L("Message was not Class 2!"));
       
  6585 			TEST(EFalse);
       
  6586 			}
       
  6587 
       
  6588 		delete sms;
       
  6589 		}
       
  6590 	else
       
  6591 		{
       
  6592 		INFO_PRINTF1(_L("Message not received!"));
       
  6593 		TEST(EFalse);
       
  6594 		}
       
  6595 
       
  6596 	//
       
  6597 	// Disk space should be available now...
       
  6598 	//
       
  6599 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6600 						 diskSpaceStatus);
       
  6601 	TEST(ret == KErrNone);
       
  6602 	TEST(diskSpaceStatus == ESmsDiskSpaceAvailable);
       
  6603 
       
  6604 	//
       
  6605 	// Close the SMS Stack...
       
  6606 	//
       
  6607 	ReleaseDiskSpaceL();
       
  6608 		
       
  6609 	CleanupStack::PopAndDestroy(&socket);
       
  6610     CleanupStack::PopAndDestroy(&socketServer);
       
  6611 #endif
       
  6612 
       
  6613 	return TestStepResult() ;
       
  6614 	} // CTestDiskSpaceMidRangeClass0Class2::doTestStepL
       
  6615 
       
  6616 
       
  6617 /**
       
  6618  *  Post-amble funtion to ensure the environment is reverted to normal.
       
  6619  */
       
  6620 TVerdict CTestDiskSpaceMidRangeClass0Class2::doTestStepPostambleL()
       
  6621 	{
       
  6622 #ifdef _DEBUG	
       
  6623     TInt err = RProperty::Delete(KUidPSSMSStackCategory, KUidPSSMSStackFreeDiskSpaceKey);
       
  6624     if (err != KErrNone && err != KErrNotFound)
       
  6625         {
       
  6626         ERR_PRINTF2(_L("RProperty::Delete() failure [err=%d]"), err);
       
  6627         }   
       
  6628 #endif
       
  6629     
       
  6630 	//
       
  6631 	// Restore the environment to normal and then call the previous post-amble
       
  6632 	// function.
       
  6633 	//
       
  6634 	RemoveLowHighLimitsFromSmsuRscL();
       
  6635 	
       
  6636 	CSmsPrtTestStep::doTestStepPostambleL();
       
  6637 
       
  6638 	return TestStepResult() ;
       
  6639 	} // CTestDiskSpaceMidRangeClass0Class2::doTestStepPostambleL
       
  6640 
       
  6641 TVerdict CTestDiskSpaceLowRangeClass0Class2::doTestStepPreambleL()
       
  6642     {
       
  6643     CSmsPrtTestStep::doTestStepPreambleL();
       
  6644 
       
  6645 #ifdef _DEBUG    
       
  6646     TInt err = RProperty::Define(KUidPSSMSStackCategory, KUidPSSMSStackFreeDiskSpaceKey, RProperty::EInt);
       
  6647     if ((err != KErrNone) && (err != KErrAlreadyExists))    
       
  6648         {
       
  6649         ERR_PRINTF2(_L("RProperty::Define() failure [err=%d]"), err);
       
  6650         User::Leave(err);
       
  6651         }    
       
  6652 #endif
       
  6653     
       
  6654     return TestStepResult();
       
  6655     }
       
  6656 
       
  6657 /**
       
  6658  *  Set the disk space to below the low limit, attempt to receive class 0 and
       
  6659  *  class 2, raise disk space and receive class 0 and class 2.  Class 0 and
       
  6660  *  class 2 messages rejected when disk space below the low limit, received
       
  6661  *  when disk space increases.
       
  6662  *
       
  6663  *  @note This test can only be run when the SMS Stack is in debug mode.
       
  6664  *
       
  6665  */
       
  6666 TVerdict CTestDiskSpaceLowRangeClass0Class2::doTestStepL()
       
  6667 	{
       
  6668 #ifndef _DEBUG
       
  6669 	INFO_PRINTF1(_L("This test can only be run when the SMS Stack is in debug mode."));
       
  6670 #else
       
  6671 	
       
  6672 	//
       
  6673 	// Disk space should be available at the start...
       
  6674 	//
       
  6675 	TInt  diskSpaceStatus(ESmsDiskSpaceUnknown);
       
  6676 	TInt  ret(KErrUnknown);
       
  6677 	
       
  6678 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6679 						 diskSpaceStatus);
       
  6680 	TEST(ret == KErrNone);
       
  6681 	TEST(diskSpaceStatus == ESmsDiskSpaceAvailable);
       
  6682 
       
  6683 	//
       
  6684 	// Setup the .RSC file and free disk space to be in the low-range...
       
  6685 	//
       
  6686     TUint highDrop = 4;
       
  6687     TUint lowDrop = 10;
       
  6688     TUint freeDrop = 11;
       
  6689     
       
  6690     SetHighLowLimitsAndDiskSpaceLevelL(highDrop, lowDrop, freeDrop);
       
  6691 	
       
  6692 	//
       
  6693 	// Load the SMS Stack...
       
  6694 	//
       
  6695 	RSocketServ  socketServer;
       
  6696 	PrepareRegTestLC(socketServer, 132);
       
  6697 
       
  6698 	RSocket  socket;
       
  6699 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socket, ESmsAddrRecvAny);
       
  6700 	
       
  6701 	//
       
  6702 	// Attempt to receive an SMS - Class 0 message should not arrive...
       
  6703 	//
       
  6704 	INFO_PRINTF1(_L("Receiving SMS message - Class 0 message should not arrive..."));
       
  6705 	TBool  messageReceived;
       
  6706 
       
  6707 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6708 	if (messageReceived)
       
  6709 		{
       
  6710 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6711 
       
  6712 		INFO_PRINTF1(_L("Message received!"));
       
  6713 		TEST(EFalse);
       
  6714 
       
  6715 		delete sms;
       
  6716 		}
       
  6717 	else
       
  6718 		{
       
  6719 		INFO_PRINTF1(_L("Message not received!"));
       
  6720 		}
       
  6721 
       
  6722 	//
       
  6723 	// Disk space should not be available...
       
  6724 	//
       
  6725 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6726 						 diskSpaceStatus);
       
  6727 	TEST(ret == KErrNone);
       
  6728 	TEST(diskSpaceStatus == ESmsDiskSpaceFull);
       
  6729 
       
  6730 	//
       
  6731 	// Attempt to receive an SMS - Class 2 message should not arrive...
       
  6732 	//
       
  6733 	INFO_PRINTF1(_L("Receiving SMS message - Class 2 message should not arrive..."));
       
  6734 
       
  6735 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6736 	if (messageReceived)
       
  6737 		{
       
  6738 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6739 
       
  6740 		INFO_PRINTF1(_L("Message received!"));
       
  6741 		TEST(EFalse);
       
  6742 
       
  6743 		delete sms;
       
  6744 		}
       
  6745 	else
       
  6746 		{
       
  6747 		INFO_PRINTF1(_L("Message not received!"));
       
  6748 		}
       
  6749 
       
  6750 	//
       
  6751 	// Disk space should still not be available...
       
  6752 	//
       
  6753 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6754 						 diskSpaceStatus);
       
  6755 	TEST(ret == KErrNone);
       
  6756 	TEST(diskSpaceStatus == ESmsDiskSpaceFull);
       
  6757 
       
  6758 	//
       
  6759 	// Raise the disk space to above the high limit...
       
  6760 	//
       
  6761     freeDrop = 2;
       
  6762     ReleaseDiskSpaceL();
       
  6763     SetFreeDiskSpaceFromDropLevelL(freeDrop);
       
  6764 	
       
  6765 	//
       
  6766 	// Attempt to receive an SMS - Class 0 message should arrive...
       
  6767 	//
       
  6768 	INFO_PRINTF1(_L("Receiving SMS message - Class 0 message should arrive..."));
       
  6769 
       
  6770 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6771 	if (messageReceived)
       
  6772 		{
       
  6773 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6774 
       
  6775 		INFO_PRINTF1(_L("Message received!"));
       
  6776 
       
  6777 		TSmsDataCodingScheme::TSmsClass  msgClass;
       
  6778 
       
  6779 		if (!sms->SmsPDU().DataCodingSchemePresent()  ||
       
  6780 			!sms->SmsPDU().Class(msgClass)  ||
       
  6781 			msgClass != TSmsDataCodingScheme::ESmsClass0)
       
  6782 			{
       
  6783 			INFO_PRINTF1(_L("Message was not Class 0!"));
       
  6784 			TEST(EFalse);
       
  6785 			}
       
  6786 
       
  6787 		delete sms;
       
  6788 		}
       
  6789 	else
       
  6790 		{
       
  6791 		INFO_PRINTF1(_L("Message not received!"));
       
  6792 		TEST(EFalse);
       
  6793 		}
       
  6794 
       
  6795 	//
       
  6796 	// Disk space should be available now...
       
  6797 	//
       
  6798 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6799 						 diskSpaceStatus);
       
  6800 	TEST(ret == KErrNone);
       
  6801 	TEST(diskSpaceStatus == ESmsDiskSpaceAvailable);
       
  6802 
       
  6803 	//
       
  6804 	// Attempt to receive an SMS - Class 2 message should arrive...
       
  6805 	//
       
  6806 	INFO_PRINTF1(_L("Receiving SMS message - Class 2 message should arrive..."));
       
  6807 
       
  6808 	messageReceived = TimedWaitForRecvL(socket, 10*1000000);
       
  6809 	if (messageReceived)
       
  6810 		{
       
  6811 		CSmsMessage*  sms = RecvSmsL(socket);
       
  6812 
       
  6813 		INFO_PRINTF1(_L("Message received!"));
       
  6814 
       
  6815 		TSmsDataCodingScheme::TSmsClass  msgClass;
       
  6816 
       
  6817 		if (!sms->SmsPDU().DataCodingSchemePresent()  ||
       
  6818 			!sms->SmsPDU().Class(msgClass)  ||
       
  6819 			msgClass != TSmsDataCodingScheme::ESmsClass2)
       
  6820 			{
       
  6821 			INFO_PRINTF1(_L("Message was not Class 2!"));
       
  6822 			TEST(EFalse);
       
  6823 			}
       
  6824 
       
  6825 		delete sms;
       
  6826 		}
       
  6827 	else
       
  6828 		{
       
  6829 		INFO_PRINTF1(_L("Message not received!"));
       
  6830 		TEST(EFalse);
       
  6831 		}
       
  6832 
       
  6833 	//
       
  6834 	// Disk space should still be available now...
       
  6835 	//
       
  6836 	ret = RProperty::Get(KUidPSSMSStackCategory, KUidPSSMSStackDiskSpaceMonitorKey,
       
  6837 						 diskSpaceStatus);
       
  6838 	TEST(ret == KErrNone);
       
  6839 	TEST(diskSpaceStatus == ESmsDiskSpaceAvailable);
       
  6840 
       
  6841 	//
       
  6842 	// Close the SMS Stack...
       
  6843 	//
       
  6844 	ReleaseDiskSpaceL();
       
  6845 	
       
  6846 	CleanupStack::PopAndDestroy(&socket);
       
  6847     CleanupStack::PopAndDestroy(&socketServer);
       
  6848 #endif
       
  6849 
       
  6850 	return TestStepResult() ;
       
  6851 	} // CTestDiskSpaceLowRangeClass0Class2::doTestStepL
       
  6852 
       
  6853 
       
  6854 /**
       
  6855  *  Post-amble funtion to ensure the environment is reverted to normal.
       
  6856  */
       
  6857 TVerdict CTestDiskSpaceLowRangeClass0Class2::doTestStepPostambleL()
       
  6858 	{
       
  6859 #ifdef _DEBUG	
       
  6860     TInt err = RProperty::Delete(KUidPSSMSStackCategory, KUidPSSMSStackFreeDiskSpaceKey);
       
  6861     if (err != KErrNone && err != KErrNotFound)
       
  6862         {
       
  6863         ERR_PRINTF2(_L("RProperty::Delete() failure [err=%d]"), err);
       
  6864         }       
       
  6865 #endif
       
  6866     
       
  6867 	//
       
  6868 	// Restore the environment to normal and then call the previous post-amble
       
  6869 	// function.
       
  6870 	//
       
  6871 	RemoveLowHighLimitsFromSmsuRscL();
       
  6872 	
       
  6873 	CSmsPrtTestStep::doTestStepPostambleL();
       
  6874 
       
  6875 	return TestStepResult() ;
       
  6876 	} // CTestDiskSpaceLowRangeClass0Class2::doTestStepPostambleL
       
  6877 
       
  6878 
       
  6879 /**
       
  6880  *  Simple test of receiving a few corrupt PDUs and then one good one.
       
  6881  */
       
  6882 TVerdict CTestCorruptPDUs::doTestStepL()
       
  6883 	{
       
  6884 	//
       
  6885 	// Load the SMS Stack...
       
  6886 	//
       
  6887 	RSocketServ  socketServer;
       
  6888 	PrepareRegTestLC(socketServer, 133);
       
  6889 
       
  6890 	RSocket  socket;
       
  6891 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socket, ESmsAddrRecvAny);
       
  6892 	
       
  6893 	//
       
  6894 	// Attempt to receive the valid SMS...
       
  6895 	//
       
  6896 	WaitForRecvL(socket);
       
  6897 
       
  6898 	CSmsMessage*  sms = RecvSmsL(socket);
       
  6899 
       
  6900 	INFO_PRINTF1(_L("Message received!"));
       
  6901 
       
  6902 	delete sms;
       
  6903 
       
  6904 	//
       
  6905 	// Close the SMS Stack...
       
  6906 	//
       
  6907 	CleanupStack::PopAndDestroy(&socket);
       
  6908     CleanupStack::PopAndDestroy(&socketServer);
       
  6909 
       
  6910 	return TestStepResult() ;
       
  6911 	} // CTestCorruptPDUs::doTestStepL()
       
  6912 
       
  6913 
       
  6914 /**
       
  6915  *  Tests the reception of a series of messages which cause the assembly to become full,
       
  6916  *  SMS reception to be suspended and then resumed.
       
  6917  */
       
  6918 TVerdict CTestCongestedReceive::doTestStepL()
       
  6919 	{
       
  6920 	RSocketServ socketServer;
       
  6921 	PrepareRegTestLC(socketServer, 141);
       
  6922 
       
  6923 	RSocket socket;
       
  6924 	TSmsAddr smsaddr;
       
  6925 	smsaddr.SetSmsAddrFamily(ESmsAddrRecvAny);
       
  6926 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer, socket, smsaddr);
       
  6927 
       
  6928 	for (TInt  count = 1;  count <= 30;  count++)
       
  6929 		{
       
  6930 		INFO_PRINTF2(_L("Waiting for incoming SMS %d..."), count);
       
  6931 
       
  6932 		WaitForRecvL(socket);
       
  6933 		User::After(3*1000000);
       
  6934 
       
  6935 		CSmsMessage*  smsMessage = RecvSmsL(socket);
       
  6936 		delete smsMessage;
       
  6937 		}
       
  6938 
       
  6939 	CleanupStack::PopAndDestroy(&socket);
       
  6940     CleanupStack::PopAndDestroy(&socketServer);
       
  6941 
       
  6942 	return TestStepResult();
       
  6943 	}  // CTestCongestedReceive::doTestStepL()
       
  6944 
       
  6945 
       
  6946 enum TVerdict CTestEncodingPDUonBoundary::doTestStepL()
       
  6947 /**
       
  6948  * INC119830
       
  6949  * * 
       
  6950  * Boundary Test: force the GSMU to attempt to add a format IE
       
  6951  * into a full PDU. This should result in the format IE being 
       
  6952  * encoded into the 2nd PDU.
       
  6953  */
       
  6954 	{
       
  6955 	INFO_PRINTF1(_L("Test Encoding PDU on Boundary"));
       
  6956 
       
  6957 	RSocketServ socketServer;
       
  6958 	PrepareRegTestLC(socketServer, 143);
       
  6959 	RSocket socket;
       
  6960 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  6961 
       
  6962     // Create comms database object
       
  6963 #ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
       
  6964 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_2);
       
  6965 #else
       
  6966 	CMDBSession* db = CMDBSession::NewL(KCDVersion1_1);
       
  6967 #endif
       
  6968 	CleanupStack::PushL(db);
       
  6969 
       
  6970 	INFO_PRINTF1(_L("Testing recvMode change to EReceiveUnstoredClientAck"));
       
  6971 
       
  6972     // EReceiveUnstoredClientAck
       
  6973 	CMDBField<TUint32>* smsReceiveModeField = new(ELeave) CMDBField<TUint32>(KCDTIdSMSReceiveMode);
       
  6974 	CleanupStack::PushL(smsReceiveModeField);
       
  6975 	smsReceiveModeField->SetRecordId(1); //it's GlobalSettingsRecord
       
  6976 	*smsReceiveModeField = RMobileSmsMessaging::EReceiveUnstoredClientAck;
       
  6977 	smsReceiveModeField->ModifyL(*db);
       
  6978 	CleanupStack::PopAndDestroy(smsReceiveModeField);
       
  6979 	CleanupStack::PopAndDestroy(db);
       
  6980 
       
  6981 	//	Create a 149 character message (from 4 30 character messages + 1 29 character message).
       
  6982 	//  Set the encoding to 7 bit encoding. There should be sufficient space in the PDU to
       
  6983 	//  encode the 1st format IE, but this will leave the PDU full. The 2nd format IE
       
  6984 	//  then needs to be added to the next PDU.
       
  6985 	_LIT(KTestMsg1,"test message, 8bits, length 30test message, 8bits, length 30test message, 8bits, length 30test message, 8bits, length 30test message, 8bits, length 3");
       
  6986 
       
  6987 	//Set destination and SC numbers
       
  6988 	iTelephoneNumber=KPekka;
       
  6989 	iServiceCenterNumber=KRadiolinjaSC;
       
  6990 	
       
  6991 	TSmsDataCodingScheme::TSmsAlphabet alphabet7Bit=TSmsDataCodingScheme::ESmsAlphabet7Bit;
       
  6992 		
       
  6993 	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet7Bit);
       
  6994 	CleanupStack::PushL(smsMessage);
       
  6995 
       
  6996 	
       
  6997 	// Create the format object
       
  6998 	CEmsFormatIE* format = CEmsFormatIE::NewL();
       
  6999 	format->SetStartPosition(147);
       
  7000 	format->SetFormatLength(1);
       
  7001 	format->SetAlignment(CEmsFormatIE::ERight);
       
  7002 	CleanupStack::PushL(format);
       
  7003 	smsMessage->AddEMSInformationElementL(*format);
       
  7004 	CleanupStack::PopAndDestroy(format);
       
  7005 
       
  7006 	// Create the format object
       
  7007 	CEmsFormatIE* format1 = CEmsFormatIE::NewL();
       
  7008 	format->SetStartPosition(148);
       
  7009 	format->SetFormatLength(1);
       
  7010 	format->SetAlignment(CEmsFormatIE::ERight);
       
  7011 	CleanupStack::PushL(format1);
       
  7012 	smsMessage->AddEMSInformationElementL(*format1);
       
  7013 	CleanupStack::PopAndDestroy(format1);
       
  7014 
       
  7015 	TInt num = smsMessage->NumMessagePDUsL();
       
  7016 	TEST(num == 2);
       
  7017 	
       
  7018 	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  7019 	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  7020 
       
  7021 	//Send SMS
       
  7022 	SendSmsL(smsMessage,socket);
       
  7023 
       
  7024 	CleanupStack::PopAndDestroy(smsMessage);
       
  7025 
       
  7026 	//Receive SMS
       
  7027 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  7028 	WaitForRecvL(socket);
       
  7029 	smsMessage = RecvSmsL(socket);
       
  7030 	
       
  7031 	INFO_PRINTF1(_L("incoming SMS") );
       
  7032 
       
  7033 	CleanupStack::PushL(smsMessage);
       
  7034 	TestSmsContentsL(smsMessage,KTestMsg1);
       
  7035 
       
  7036 	num = smsMessage->NumMessagePDUsL();	
       
  7037 	TEST(num == 2);
       
  7038 		
       
  7039 	//Save the received message to the SMS storage	
       
  7040 	smsMessage->SetStorage(CSmsMessage::ESmsSIMStorage);
       
  7041 	WriteSmsToSimL(*smsMessage, socket);
       
  7042 
       
  7043 	CleanupStack::PopAndDestroy(smsMessage);
       
  7044 
       
  7045 	// Enumerate messages from Store
       
  7046 	RPointerArray<CSmsMessage> messages;
       
  7047 	ReadSmsStoreL(socket, messages);
       
  7048 	messages.ResetAndDestroy();
       
  7049 
       
  7050 	CleanupStack::PopAndDestroy(&socket);
       
  7051 	CleanupStack::PopAndDestroy(&socketServer);
       
  7052 
       
  7053 	return TestStepResult() ;	
       
  7054 	}
       
  7055 
       
  7056 
       
  7057 /**
       
  7058  *  Tests that a PDU can be received if it has an invalid or reserved IE number.
       
  7059  */
       
  7060 TVerdict CTestReceiveInvalidOrReservedIE::doTestStepL()
       
  7061 	{
       
  7062 	//
       
  7063 	// Open a socket to receive an SMS with SIMTSY...
       
  7064 	//
       
  7065 	RSocketServ  socketServer;
       
  7066 	PrepareRegTestLC(socketServer, 144);
       
  7067 
       
  7068 	RSocket socket;
       
  7069 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7070 	CleanupClosePushL(socket);
       
  7071 
       
  7072 	//
       
  7073 	// Receive the SMS with the reserved IE value.
       
  7074 	//
       
  7075 	WaitForRecvL(socket);
       
  7076 	CSmsMessage*  smsMessage = RecvSmsL(socket);
       
  7077 	CleanupStack::PushL(smsMessage);
       
  7078 
       
  7079 	_LIT(KTestMsg, "I am in an emergency. Please help me.");
       
  7080 	TestSmsContentsL(smsMessage, KTestMsg);
       
  7081 
       
  7082 	CleanupStack::PopAndDestroy(smsMessage);
       
  7083 
       
  7084 	//
       
  7085 	// Close the socket.
       
  7086 	//
       
  7087 	CleanupStack::PopAndDestroy(&socket);
       
  7088 	CleanupStack::PopAndDestroy(&socketServer);
       
  7089 
       
  7090 	return TestStepResult() ;
       
  7091 	} // CTestReceiveInvalidOrReservedIE::doTestStepL
       
  7092 
       
  7093 
       
  7094 /**
       
  7095  *  Tests that standard GSM characters can be sent and received using 7bit
       
  7096  *  without loss of characters.  
       
  7097  */
       
  7098 TVerdict CTestEncoding7bitStandardGSM::doTestStepL()
       
  7099 	{
       
  7100 	RSocketServ  socketServer;
       
  7101 	PrepareRegTestLC(socketServer, 150);
       
  7102 
       
  7103 	RSocket socket;
       
  7104 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7105 	CleanupClosePushL(socket);
       
  7106 
       
  7107 	//
       
  7108 	// Test standard GSM text (default table with no shift characters)...
       
  7109 	//
       
  7110 	iCharSets.Append(KCharacterSetStandard7bitGSM());
       
  7111 	DoEncodingTestL(
       
  7112 		/* Socket */			socket,
       
  7113 		/* Test */				_L("GSM 7bit text"),
       
  7114 		/* Sequences */			3,
       
  7115 		/* Char sets */			iCharSets,
       
  7116 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7117 		/* Encoding to use */	ESmsEncodingNone,
       
  7118 		/* Encoding expected */	ESmsEncodingNone);
       
  7119 	iCharSets.Reset();
       
  7120 
       
  7121 	//
       
  7122 	// Test standard GSM text including default shift characters...
       
  7123 	//
       
  7124 	iCharSets.Append(KCharacterSetStandard7bitGSM());
       
  7125 	iCharSets.Append(KCharacterSetStandard7bitGSMShift());
       
  7126 	DoEncodingTestL(
       
  7127 		/* Socket */			socket,
       
  7128 		/* Test */				_L("GSM 7bit text including default shift characters"),
       
  7129 		/* Sequences */			3,
       
  7130 		/* Char sets */			iCharSets,
       
  7131 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7132 		/* Encoding to use */	ESmsEncodingNone,
       
  7133 		/* Encoding expected */	ESmsEncodingNone);
       
  7134 	iCharSets.Reset();
       
  7135 	
       
  7136     //
       
  7137 	// Clean up and finish...
       
  7138 	//
       
  7139 	CleanupStack::PopAndDestroy(&socket);
       
  7140     CleanupStack::PopAndDestroy(&socketServer);
       
  7141 
       
  7142 	return TestStepResult();
       
  7143 	}  // CTestEncoding7bitStandardGSM::doTestStepL
       
  7144 
       
  7145 
       
  7146 /**
       
  7147  *  Tests that standard 8bit characters can be sent and received without
       
  7148  *  loss of characters.
       
  7149  */
       
  7150 TVerdict CTestEncoding8bitCodePage1252::doTestStepL()
       
  7151 	{
       
  7152 	RSocketServ  socketServer;
       
  7153 	PrepareRegTestLC(socketServer, 151);
       
  7154 
       
  7155 	RSocket socket;
       
  7156 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7157 	CleanupClosePushL(socket);
       
  7158 
       
  7159 	//
       
  7160 	// Test standard 8bit text (really 8bit data)...
       
  7161 	//
       
  7162 	iCharSets.Append(KCharacterSetStandard8bitGSM());
       
  7163 	DoEncodingTestL(
       
  7164 		/* Socket */			socket,
       
  7165 		/* Test */				_L("8bit text"),
       
  7166 		/* Sequences */			2,
       
  7167 		/* Char sets */			iCharSets,
       
  7168 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet8Bit,
       
  7169 		/* Encoding to use */	ESmsEncodingNone,
       
  7170 		/* Encoding expected */	ESmsEncodingNone);
       
  7171 	iCharSets.Reset();
       
  7172 	
       
  7173 	//
       
  7174 	// Clean up and finish...
       
  7175 	//
       
  7176 	CleanupStack::PopAndDestroy(&socket);
       
  7177     CleanupStack::PopAndDestroy(&socketServer);
       
  7178 
       
  7179 	return TestStepResult();
       
  7180 	}  // CTestEncoding8bitCodePage1252::doTestStepL
       
  7181 
       
  7182 
       
  7183 /**
       
  7184  *  Tests that standard unicode characters can be sent and received without
       
  7185  *  loss of characters.
       
  7186  */
       
  7187 TVerdict CTestEncodingUnicode::doTestStepL()
       
  7188 	{
       
  7189 	RSocketServ  socketServer;
       
  7190 	PrepareRegTestLC(socketServer, 152);
       
  7191 
       
  7192 	RSocket socket;
       
  7193 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7194 	CleanupClosePushL(socket);
       
  7195 
       
  7196 	//
       
  7197 	// Test unicode text (not really GSM specific)...
       
  7198 	//
       
  7199 	iCharSets.Append(KCharacterSetVariousUCS2());
       
  7200 	DoEncodingTestL(
       
  7201 		/* Socket */			socket,
       
  7202 		/* Test */				_L("various UCS2 characters"),
       
  7203 		/* Sequences */			2,
       
  7204 		/* Char sets */			iCharSets,
       
  7205 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabetUCS2,
       
  7206 		/* Encoding to use */	ESmsEncodingNone,
       
  7207 		/* Encoding expected */	ESmsEncodingNone);
       
  7208 	iCharSets.Reset();
       
  7209 
       
  7210 	//
       
  7211 	// Clean up and finish...
       
  7212 	//
       
  7213 	CleanupStack::PopAndDestroy(&socket);
       
  7214     CleanupStack::PopAndDestroy(&socketServer);
       
  7215 
       
  7216 	return TestStepResult();
       
  7217 	}  // CTestEncodingUnicode::doTestStepL
       
  7218 
       
  7219 
       
  7220 /**
       
  7221  *  Tests that unconvertible GSM characters can be sent using 7bit by being
       
  7222  *  set to the replacement character.
       
  7223  */
       
  7224 TVerdict CTestEncoding7bitUnconvertibleGSM::doTestStepL()
       
  7225 	{
       
  7226 	RSocketServ  socketServer;
       
  7227 	PrepareRegTestLC(socketServer, 153);
       
  7228 
       
  7229 	RSocket socket;
       
  7230 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7231 	CleanupClosePushL(socket);
       
  7232 
       
  7233 	//
       
  7234 	// Test various characters not supported in the 7bit ASCII text (either
       
  7235 	// default GSM, shifted GSM, downgraded by the internal converter or
       
  7236 	// downgraded by the PREQ2090 converter.
       
  7237 	//
       
  7238 	iCharSets.Append(KCharacterSetUnconvertible7bitGSM());
       
  7239 	DoEncodingTestL(
       
  7240 		/* Socket */			socket,
       
  7241 		/* Test */				_L("unconvertible-GSM 7bit text"),
       
  7242 		/* Sequences */			3,
       
  7243 		/* Char sets */			iCharSets,
       
  7244 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7245 		/* Encoding to use */	ESmsEncodingNone,
       
  7246 		/* Encoding expected */	ESmsEncodingNone);
       
  7247 	iCharSets.Reset();
       
  7248 
       
  7249 	//
       
  7250 	// Clean up and finish...
       
  7251 	//
       
  7252 	CleanupStack::PopAndDestroy(&socket);
       
  7253     CleanupStack::PopAndDestroy(&socketServer);
       
  7254 
       
  7255 	return TestStepResult();
       
  7256 	}  // CTestEncoding7bitUnconvertibleGSM::doTestStepL
       
  7257 
       
  7258 
       
  7259 /**
       
  7260  *  Tests that non-standard GSM characters can be sent and received using 7bit
       
  7261  *  with downgraded conversions.
       
  7262  */
       
  7263 TVerdict CTestEncoding7bitNonStandardGSM::doTestStepL()
       
  7264 	{
       
  7265 	RSocketServ  socketServer;
       
  7266 	PrepareRegTestLC(socketServer, 154);
       
  7267 
       
  7268 	RSocket socket;
       
  7269 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7270 	CleanupClosePushL(socket);
       
  7271 
       
  7272 	//
       
  7273 	// Test downgrades that were part of the internal converter
       
  7274 	// (e.g. pre-PREQ2090)...
       
  7275 	//
       
  7276 	iCharSets.Append(KCharacterSetDowngrading7bitGSM());
       
  7277 	DoEncodingTestL(
       
  7278 		/* Socket */			socket,
       
  7279 		/* Test */				_L("non-GSM 7bit text (non-PREQ2090)"),
       
  7280 		/* Sequences */			3,
       
  7281 		/* Char sets */			iCharSets,
       
  7282 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7283 		/* Encoding to use */	ESmsEncodingNone,
       
  7284 		/* Encoding expected */	ESmsEncodingNone);
       
  7285 	iCharSets.Reset();
       
  7286 	
       
  7287 	//
       
  7288 	// Test downgrades that were part of the new PREQ2090 converter...
       
  7289 	//
       
  7290 	iCharSets.Append(KCharacterSetDowngrading7bitGSMExtended());
       
  7291 	DoEncodingTestL(
       
  7292 		/* Socket */			socket,
       
  7293 		/* Test */				_L("non-GSM 7bit text (PREQ2090)"),
       
  7294 		/* Sequences */			3,
       
  7295 		/* Char sets */			iCharSets,
       
  7296 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7297 		/* Encoding to use */	ESmsEncodingNone,
       
  7298 		/* Encoding expected */	ESmsEncodingNone);
       
  7299 	iCharSets.Reset();
       
  7300 
       
  7301 	//
       
  7302 	// Clean up and finish...
       
  7303 	//
       
  7304 	CleanupStack::PopAndDestroy(&socket);
       
  7305     CleanupStack::PopAndDestroy(&socketServer);
       
  7306 
       
  7307 	return TestStepResult();
       
  7308 	}  // CTestEncoding7bitNonStandardGSM::doTestStepL
       
  7309 
       
  7310 
       
  7311 /**
       
  7312  *  Tests that Turkish characters can be sent and received using 7bit without
       
  7313  *  loss of characters.
       
  7314  */
       
  7315 TVerdict CTestEncoding7bitTurkishNationalLanguage::doTestStepL()
       
  7316 	{
       
  7317 	RSocketServ  socketServer;
       
  7318 	PrepareRegTestLC(socketServer, 155);
       
  7319 
       
  7320 	RSocket socket;
       
  7321 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7322 	CleanupClosePushL(socket);
       
  7323 
       
  7324 	//
       
  7325 	// Test Turkish GSM text (no alternative encoding)...
       
  7326 	//
       
  7327 	iCharSets.Append(KCharacterSetDowngradingTurkish7bitGSM());
       
  7328 	DoEncodingTestL(
       
  7329 		/* Socket */			socket,
       
  7330 		/* Test */				_L("Turkish GSM text (no alternative encoding)"),
       
  7331 		/* Sequences */			40,
       
  7332 		/* Char sets */			iCharSets,
       
  7333 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7334 		/* Encoding to use */	ESmsEncodingNone,
       
  7335 		/* Encoding expected */	ESmsEncodingNone);
       
  7336 	iCharSets.Reset();
       
  7337 
       
  7338 	//
       
  7339 	// Test Turkish GSM text (Turkish shift table)...
       
  7340 	//
       
  7341 	iCharSets.Append(KCharacterSetTurkish7bitGSMShift());
       
  7342 	DoEncodingTestL(
       
  7343 		/* Socket */			socket,
       
  7344 		/* Test */				_L("Turkish GSM text (Turkish shift table)"),
       
  7345 		/* Sequences */			25,
       
  7346 		/* Char sets */			iCharSets,
       
  7347 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7348 		/* Encoding to use */	ESmsEncodingTurkishSingleShift,
       
  7349 		/* Encoding expected */	ESmsEncodingTurkishSingleShift);
       
  7350 	iCharSets.Reset();
       
  7351 	
       
  7352 	//
       
  7353 	// Test Turkish GSM text (Turkish locking table)...
       
  7354 	//
       
  7355 	iCharSets.Append(KCharacterSetTurkish7bitGSMLocking());
       
  7356 	DoEncodingTestL(
       
  7357 		/* Socket */			socket,
       
  7358 		/* Test */				_L("Turkish GSM text (Turkish locking table)"),
       
  7359 		/* Sequences */			25,
       
  7360 		/* Char sets */			iCharSets,
       
  7361 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7362 		/* Encoding to use */	ESmsEncodingTurkishLockingShift,
       
  7363 		/* Encoding expected */	ESmsEncodingTurkishLockingShift);
       
  7364 	iCharSets.Reset();
       
  7365 	
       
  7366 	//
       
  7367 	// Test Turkish GSM text (Turkish locking and shift table)...
       
  7368 	//
       
  7369 	// In practice the algorithm will pick shift as it is cheaper.
       
  7370 	//
       
  7371 	//iCharSets.Append(KCharacterSetTurkish7bitGSMLocking());
       
  7372 	iCharSets.Append(KCharacterSetTurkish7bitGSMShift());
       
  7373 	DoEncodingTestL(
       
  7374 		/* Socket */			socket,
       
  7375 		/* Test */				_L("Turkish GSM text (Turkish locking and shift table)"),
       
  7376 		/* Sequences */			40,
       
  7377 		/* Char sets */			iCharSets,
       
  7378 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7379 		/* Encoding to use */	ESmsEncodingTurkishLockingAndSingleShift,
       
  7380 		/* Encoding expected */	ESmsEncodingTurkishSingleShift);
       
  7381 	iCharSets.Reset();
       
  7382 
       
  7383 	//
       
  7384 	// Test normal GSM text but with Turkish locking and shift table...
       
  7385 	//
       
  7386 	iCharSets.Append(KCharacterSetStandard7bitGSM());
       
  7387 	iCharSets.Append(KCharacterSetStandard7bitGSMShift());
       
  7388 	DoEncodingTestL(
       
  7389 		/* Socket */			socket,
       
  7390 		/* Test */				_L("normal GSM text but with Turkish locking and shift table"),
       
  7391 		/* Sequences */			3,
       
  7392 		/* Char sets */			iCharSets,
       
  7393 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7394 		/* Encoding to use */	ESmsEncodingTurkishLockingAndSingleShift,
       
  7395 		/* Encoding expected */	ESmsEncodingNone);
       
  7396 	iCharSets.Reset();
       
  7397 	
       
  7398 	//
       
  7399 	// Test Turkish GSM text with other downgrades (Turkish locking and shift table)...
       
  7400 	//
       
  7401 	iCharSets.Append(KCharacterSetTurkish7bitGSMShift());
       
  7402 	iCharSets.Append(KCharacterSetNonTurkishDowngrading7bitGSMChars());
       
  7403 	DoEncodingTestL(
       
  7404 		/* Socket */			socket,
       
  7405 		/* Test */				_L("Turkish GSM text with other downgrades (Turkish locking and shift table)"),
       
  7406 		/* Sequences */			3,
       
  7407 		/* Char sets */			iCharSets,
       
  7408 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7409 		/* Encoding to use */	ESmsEncodingTurkishLockingAndSingleShift,
       
  7410 		/* Encoding expected */	ESmsEncodingTurkishSingleShift);
       
  7411 	iCharSets.Reset();
       
  7412 
       
  7413 	//
       
  7414 	// Clean up and finish...
       
  7415 	//
       
  7416 	CleanupStack::PopAndDestroy(&socket);
       
  7417     CleanupStack::PopAndDestroy(&socketServer);
       
  7418 
       
  7419 	return TestStepResult();
       
  7420 	}  // CTestEncoding7bitTurkishNationalLanguage::doTestStepL
       
  7421 
       
  7422 
       
  7423 /**
       
  7424  *  Generates various messages with some Turkish and unconvertible characters,
       
  7425  *  sends/receives them and compares the contents.
       
  7426  */
       
  7427 TVerdict CTestEncoding7bitTurkishAndUnconvertible::doTestStepL()
       
  7428 	{
       
  7429 	RSocketServ  socketServer;
       
  7430 	PrepareRegTestLC(socketServer, 156);
       
  7431 
       
  7432 	RSocket socket;
       
  7433 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7434 	CleanupClosePushL(socket);
       
  7435 
       
  7436 	//
       
  7437 	// Test mix of Turkish and unconvertible characters...
       
  7438 	//
       
  7439 	iCharSets.Append(KCharacterSetTurkish7bitGSMShift());
       
  7440 	iCharSets.Append(KCharacterSetNonTurkishDowngrading7bitGSMChars());
       
  7441 	iCharSets.Append(KCharacterSetUnconvertible7bitGSM());
       
  7442 	DoEncodingTestL(
       
  7443 		/* Socket */			socket,
       
  7444 		/* Test */				_L("Turkish 7bit and unicode (to be downgraded)"),
       
  7445 		/* Sequences */			1,
       
  7446 		/* Char sets */			iCharSets,
       
  7447 		/* DCS */				TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7448 		/* Encoding to use */	ESmsEncodingTurkishLockingAndSingleShift,
       
  7449 		/* Encoding expected */	ESmsEncodingTurkishSingleShift);
       
  7450 	iCharSets.Reset();
       
  7451 	
       
  7452 	//
       
  7453 	// Clean up and finish...
       
  7454 	//
       
  7455 	CleanupStack::PopAndDestroy(&socket);
       
  7456     CleanupStack::PopAndDestroy(&socketServer);
       
  7457 
       
  7458 	return TestStepResult();
       
  7459 	}  // CTestEncoding7bitTurkishAndUnconvertible::doTestStepL
       
  7460 
       
  7461 
       
  7462 /**
       
  7463  *  Generates three messages using the three encodings (7bit, 8bit and 16bit).
       
  7464  *  Each message is three PDUs long and use the same DCS throughout. Then the
       
  7465  *  SIMTSY will return 3 mixed PDUs (each one starting with a different DCS).
       
  7466  *  The test ensures they are received correctly.
       
  7467  */
       
  7468 TVerdict CTestReceivingMessageWithDifferentEncodings::doTestStepL()
       
  7469 	{
       
  7470 	RSocketServ  socketServer;
       
  7471 	PrepareRegTestLC(socketServer, 157);
       
  7472 
       
  7473 	RSocket socket;
       
  7474 	iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7475 	CleanupClosePushL(socket);
       
  7476 
       
  7477 	//
       
  7478 	// Generate 3 messages for each encoding type that will require 3 PDUs...
       
  7479 	//
       
  7480 	_LIT(KTestPhrase7bit,  "I like apples! ");
       
  7481 	_LIT(KTestPhrase8bit,  "I like pears! ");
       
  7482 	_LIT(KTestPhrase16bit, "I like bananas! ");
       
  7483 	TInt  pduSize7bit   = (160 - 8);
       
  7484 	TInt  pduSize8bit   = (140 - 6);
       
  7485 	TInt  pduSize16bit  = (70 - 3);
       
  7486 	TInt  repeats7bit   = ((pduSize7bit * 3) / KTestPhrase7bit().Length());
       
  7487 	TInt  repeats8bit   = ((pduSize8bit * 3) / KTestPhrase8bit().Length());
       
  7488 	TInt  repeats16bit  = ((pduSize16bit * 3) / KTestPhrase16bit().Length());
       
  7489 	HBufC*  msg7BitBuf  = HBufC::NewLC(pduSize7bit * 3);
       
  7490 	HBufC*  msg8BitBuf  = HBufC::NewLC(pduSize8bit * 3);
       
  7491 	HBufC*  msg16BitBuf = HBufC::NewLC(pduSize16bit * 3);
       
  7492 	TPtr  msg7BitPtr    = msg7BitBuf->Des();
       
  7493 	TPtr  msg8BitPtr    = msg8BitBuf->Des();
       
  7494 	TPtr  msg16BitPtr   = msg16BitBuf->Des();
       
  7495 	TInt  count;
       
  7496 	
       
  7497 	for (count = 0;  count < repeats7bit;  count++)
       
  7498 		{
       
  7499 		msg7BitPtr.Append(KTestPhrase7bit);
       
  7500 		}
       
  7501 	
       
  7502 	for (count = 0;  count < repeats8bit;  count++)
       
  7503 		{
       
  7504 		msg8BitPtr.Append(KTestPhrase8bit);
       
  7505 		}
       
  7506 	
       
  7507 	for (count = 0;  count < repeats16bit;  count++)
       
  7508 		{
       
  7509 		msg16BitPtr.Append(KTestPhrase16bit);
       
  7510 		}
       
  7511 	
       
  7512 	//
       
  7513 	// Send all three messages and receive them to ensure they are valid...
       
  7514 	//
       
  7515 	CSmsMessage*  smsMessage;
       
  7516 	TInt  pdus;
       
  7517 	
       
  7518 	smsMessage = CreateSmsMessageL(msg7BitPtr, TSmsDataCodingScheme::ESmsAlphabet7Bit);
       
  7519 	CleanupStack::PushL(smsMessage);
       
  7520 	pdus = smsMessage->NumMessagePDUsL();
       
  7521 	TESTCHECK(pdus, 3);
       
  7522 	TRAPD(sendErr, SendSmsL(smsMessage, socket));
       
  7523 	TESTCHECK(sendErr, KErrNone);
       
  7524 	CleanupStack::PopAndDestroy(smsMessage);
       
  7525 	
       
  7526 	smsMessage = RecvSmsL(socket);
       
  7527 	CleanupStack::PushL(smsMessage);
       
  7528 	TestSmsContentsL(smsMessage, msg7BitPtr);
       
  7529 	CleanupStack::PopAndDestroy(smsMessage);
       
  7530 	
       
  7531 	smsMessage = CreateSmsMessageL(msg8BitPtr, TSmsDataCodingScheme::ESmsAlphabet8Bit);
       
  7532 	CleanupStack::PushL(smsMessage);
       
  7533 	pdus = smsMessage->NumMessagePDUsL();
       
  7534 	TESTCHECK(pdus, 3);
       
  7535 	TRAP(sendErr, SendSmsL(smsMessage, socket));
       
  7536 	TESTCHECK(sendErr, KErrNone);
       
  7537 	CleanupStack::PopAndDestroy(smsMessage);
       
  7538 	
       
  7539 	smsMessage = RecvSmsL(socket);
       
  7540 	CleanupStack::PushL(smsMessage);
       
  7541 	TestSmsContentsL(smsMessage, msg8BitPtr);
       
  7542 	CleanupStack::PopAndDestroy(smsMessage);
       
  7543 	
       
  7544 	smsMessage = CreateSmsMessageL(msg16BitPtr, TSmsDataCodingScheme::ESmsAlphabetUCS2);
       
  7545 	CleanupStack::PushL(smsMessage);
       
  7546 	pdus = smsMessage->NumMessagePDUsL();
       
  7547 	TESTCHECK(pdus, 3);
       
  7548 	TRAP(sendErr, SendSmsL(smsMessage, socket));
       
  7549 	TESTCHECK(sendErr, KErrNone);
       
  7550 	CleanupStack::PopAndDestroy(smsMessage);
       
  7551 	
       
  7552 	smsMessage = RecvSmsL(socket);
       
  7553 	CleanupStack::PushL(smsMessage);
       
  7554 	TestSmsContentsL(smsMessage, msg16BitPtr);
       
  7555 	CleanupStack::PopAndDestroy(smsMessage);
       
  7556 	
       
  7557 	//
       
  7558 	// Now receive the multi-DCS messages (that we mixed up by hand in SIMTSY)...
       
  7559 	//
       
  7560 	HBufC*  incomingBuf = HBufC::NewLC(160 * 3);
       
  7561 	TPtr  incomingPtr   = incomingBuf->Des();
       
  7562 	
       
  7563 	INFO_PRINTF1(_L("Waiting for the first mixed up SMS (7bit/8bit/16bit)..."));
       
  7564 	
       
  7565 	incomingPtr.Zero();
       
  7566 	incomingPtr.Append(msg7BitPtr.Mid(0, 153));
       
  7567 	incomingPtr.Append(msg8BitPtr.Mid(134, 134));
       
  7568 	incomingPtr.Append(msg16BitPtr.Mid(134));
       
  7569 	
       
  7570 	smsMessage = RecvSmsL(socket);
       
  7571 	CleanupStack::PushL(smsMessage);
       
  7572 	TestSmsContentsL(smsMessage, incomingPtr);
       
  7573 	CleanupStack::PopAndDestroy(smsMessage);
       
  7574 	
       
  7575 	INFO_PRINTF1(_L("Waiting for the second  mixed up SMS (8bit/16bit/7bit)..."));
       
  7576 	
       
  7577 	incomingPtr.Zero();
       
  7578 	incomingPtr.Append(msg8BitPtr.Mid(0, 134));
       
  7579 	incomingPtr.Append(msg16BitPtr.Mid(67, 67));
       
  7580 	incomingPtr.Append(msg7BitPtr.Mid(306));
       
  7581 	
       
  7582 	smsMessage = RecvSmsL(socket);
       
  7583 	CleanupStack::PushL(smsMessage);
       
  7584 	TestSmsContentsL(smsMessage, incomingPtr);
       
  7585 	CleanupStack::PopAndDestroy(smsMessage);
       
  7586 	
       
  7587 	INFO_PRINTF1(_L("Waiting for the third  mixed up SMS (16bit/7bit/8bit)..."));
       
  7588 	
       
  7589 	incomingPtr.Zero();
       
  7590 	incomingPtr.Append(msg16BitPtr.Mid(0, 67));
       
  7591 	incomingPtr.Append(msg7BitPtr.Mid(153, 153));
       
  7592 	incomingPtr.Append(msg8BitPtr.Mid(268));
       
  7593 	
       
  7594 	smsMessage = RecvSmsL(socket);
       
  7595 	CleanupStack::PushL(smsMessage);
       
  7596 	TestSmsContentsL(smsMessage, incomingPtr);
       
  7597 	CleanupStack::PopAndDestroy(smsMessage);
       
  7598 	
       
  7599 	//
       
  7600 	// Clean up and finish...
       
  7601 	//
       
  7602 	CleanupStack::PopAndDestroy(incomingBuf);
       
  7603 	CleanupStack::PopAndDestroy(msg16BitBuf);
       
  7604 	CleanupStack::PopAndDestroy(msg8BitBuf);
       
  7605 	CleanupStack::PopAndDestroy(msg7BitBuf);
       
  7606 	CleanupStack::PopAndDestroy(&socket);
       
  7607     CleanupStack::PopAndDestroy(&socketServer);
       
  7608 
       
  7609 	return TestStepResult();
       
  7610 	}  // CTestReceivingMessageWithDifferentEncodings::doTestStepL
       
  7611 
       
  7612 
       
  7613 /**
       
  7614  *  Generates a message which is requested but not read before the socket is closed.
       
  7615  *  On re-request the message should still be available to the client to be read.
       
  7616  */
       
  7617 TVerdict CTestReceivingMessageAfterSocketClosure::doTestStepL()
       
  7618 	{
       
  7619 	INFO_PRINTF1(_L("Test re-requesting to receive a message after socket closure."));
       
  7620 
       
  7621 	RSocketServ socketServer;
       
  7622 	PrepareRegTestLC(socketServer, 159);
       
  7623 
       
  7624 	// Open the socket for SIM operations.
       
  7625 	RSocket socket;
       
  7626 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  7627 
       
  7628 	// Wait for SMS message receipt.
       
  7629 	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  7630 	WaitForRecvL(socket);
       
  7631 	
       
  7632 	// Close socket before reading the message.
       
  7633 	CleanupStack::PopAndDestroy(&socket);
       
  7634 	
       
  7635 	// Bind the socket again
       
  7636 	INFO_PRINTF1(_L("binding socket again; checking for receipt") );
       
  7637 	iSmsStackTestUtils->OpenSmsSocketLC(socketServer,socket,ESmsAddrRecvAny);
       
  7638 
       
  7639 	// Briefly wait for receipt on it - this should now happen again.
       
  7640 	TBool bRcv = TimedWaitForRecvL(socket, 5 * 1000000);
       
  7641 	TEST_CHECKL(bRcv, ETrue, _L("Receive after re-bind should succeed."));
       
  7642 	
       
  7643 	// Read the 1st SMS.
       
  7644 	CSmsMessage* smsMessage1 = RecvSmsL(socket);
       
  7645 
       
  7646 	CleanupStack::PushL(smsMessage1);
       
  7647 
       
  7648 	TPtrC fromAddr1 = smsMessage1->ToFromAddress();
       
  7649 	INFO_PRINTF2(_L("1st received SMS from: %S"), &fromAddr1);
       
  7650 	
       
  7651 	// Now read the second SMS to make sure it is still available
       
  7652 	bRcv = TimedWaitForRecvL(socket, 5 * 1000000);
       
  7653 	TEST_CHECKL(bRcv, ETrue, _L("Receive after reading 1st message should also succeed."));
       
  7654 	
       
  7655 	CSmsMessage* smsMessage2 = RecvSmsL(socket);
       
  7656 
       
  7657     CleanupStack::PushL(smsMessage2);
       
  7658 
       
  7659     TPtrC fromAddr2 = smsMessage2->ToFromAddress();
       
  7660     INFO_PRINTF2(_L("2st received SMS from: %S"), &fromAddr2);
       
  7661 
       
  7662 	CleanupStack::PopAndDestroy(smsMessage2);
       
  7663 	CleanupStack::PopAndDestroy(smsMessage1);
       
  7664 	CleanupStack::PopAndDestroy(&socket);
       
  7665 	CleanupStack::PopAndDestroy(&socketServer);
       
  7666 
       
  7667 	return TestStepResult() ;
       
  7668 	}  // CTestReceivingMessageAfterSocketClosure::doTestStepL
       
  7669 
       
  7670 TVerdict CTestSimpleTxAndRxWithLoggingDisabled::doTestStepL()
       
  7671 /**
       
  7672  * Test that a simple SMS can be transmitted and received
       
  7673  *  when the logging subsystem is disabled.
       
  7674  */
       
  7675 	{
       
  7676  	INFO_PRINTF1(_L("Test Simple Tx and Rx SMS"));
       
  7677  
       
  7678  	RSocketServ socketServer;
       
  7679  	PrepareRegTestLC(socketServer, 158);
       
  7680  
       
  7681  	RSocket socket;
       
  7682  	iSmsStackTestUtils->OpenSmsSocketL(socketServer,socket,ESmsAddrRecvAny);
       
  7683  	CleanupClosePushL(socket);
       
  7684  
       
  7685  	iSmsStackTestUtils->DisableLogging();
       
  7686  	
       
  7687  	_LIT(KTestMsg1,"test message, 8bits, length 30");
       
  7688  
       
  7689  	//Set destination and SC numbers
       
  7690  	iTelephoneNumber=KPekka;
       
  7691  	iServiceCenterNumber=KRadiolinjaSC;
       
  7692  
       
  7693  	TSmsDataCodingScheme::TSmsAlphabet alphabet=TSmsDataCodingScheme::ESmsAlphabet8Bit;
       
  7694  	CSmsMessage* smsMessage=CreateSmsMessageL(KTestMsg1,alphabet);
       
  7695  	CleanupStack::PushL(smsMessage);
       
  7696  
       
  7697  	INFO_PRINTF2(_L("Destination number:..... %S"),&iTelephoneNumber);
       
  7698  	INFO_PRINTF2(_L("ServiceCenter number:... %S"),&iServiceCenterNumber);
       
  7699  
       
  7700  	//Send SMS
       
  7701  	SendSmsL(smsMessage,socket);
       
  7702  
       
  7703  	CleanupStack::PopAndDestroy(smsMessage);
       
  7704  
       
  7705  	//Receive SMS
       
  7706  	INFO_PRINTF1(_L("waiting for incoming SMS...") );
       
  7707  	WaitForRecvL(socket);
       
  7708  	smsMessage = RecvSmsL(socket);
       
  7709  
       
  7710  	INFO_PRINTF1(_L("incoming SMS") );
       
  7711  
       
  7712  	CleanupStack::PushL(smsMessage);
       
  7713  	TestSmsContentsL(smsMessage,KTestMsg1);
       
  7714  	CleanupStack::PopAndDestroy(smsMessage);
       
  7715  
       
  7716  	iSmsStackTestUtils->EnableLogging();	
       
  7717  	
       
  7718  	CleanupStack::PopAndDestroy(&socket);
       
  7719  	
       
  7720  	CleanupStack::PopAndDestroy(&socketServer);
       
  7721  
       
  7722  	return TestStepResult() ;
       
  7723  	}
       
  7724 
       
  7725 /**
       
  7726  *  Tests that Spanish, Portuguese and Turkish character converters are being used.
       
  7727  */
       
  7728 TVerdict CTestEncoding7bitNationalLanguages::doTestStepL()
       
  7729     {
       
  7730     RSocketServ  socketServer;
       
  7731     PrepareRegTestLC(socketServer, 160);
       
  7732 
       
  7733     RSocket socket;
       
  7734     iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7735     CleanupClosePushL(socket);
       
  7736 
       
  7737     //
       
  7738     // Test use of Spanish GSM text using shift table...
       
  7739     // Some of the characters chosen dont appear in Portuguese or Turkish table
       
  7740     //
       
  7741     iCharSets.Append(KCharacterSetSpanish7bitGSMShift()); 
       
  7742     DoEncodingTestL(
       
  7743         /* Socket */            socket,
       
  7744         /* Test */              _L("Spanish GSM text (Spanish shift table)"),
       
  7745         /* Sequences */         1,
       
  7746         /* Char sets */         iCharSets,
       
  7747         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7748         /* Encoding to use */   ESmsEncodingSpanishSingleShift,
       
  7749         /* Encoding expected */ ESmsEncodingSpanishSingleShift);
       
  7750     iCharSets.Reset();  
       
  7751     
       
  7752     //
       
  7753     // Test use of Portuguese GSM text using shift table...
       
  7754     // Some of the characters chosen dont appear in Spanish or Turkish table
       
  7755     //
       
  7756     iCharSets.Append(KCharacterSetPortuguese7bitGSMShift()); 
       
  7757     DoEncodingTestL(
       
  7758         /* Socket */            socket,
       
  7759         /* Test */              _L("Portuguese GSM text (Portuguese shift table)"),
       
  7760         /* Sequences */         1,
       
  7761         /* Char sets */         iCharSets,
       
  7762         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7763         /* Encoding to use */   ESmsEncodingPortugueseSingleShift,
       
  7764         /* Encoding expected */ ESmsEncodingPortugueseSingleShift);
       
  7765     iCharSets.Reset();  
       
  7766     
       
  7767     //
       
  7768     // Test use of Portuguese GSM text using locking shift table...
       
  7769     // Some of the characters chosen dont appear in Spanish or Turkish table
       
  7770     //
       
  7771     iCharSets.Append(KCharacterSetPortuguese7bitGSMLocking()); 
       
  7772     DoEncodingTestL(
       
  7773         /* Socket */            socket,
       
  7774         /* Test */              _L("Portuguese GSM text (Portuguese locking shift table)"),
       
  7775         /* Sequences */         1,
       
  7776         /* Char sets */         iCharSets,
       
  7777         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7778         /* Encoding to use */   ESmsEncodingPortugueseLockingShift,
       
  7779         /* Encoding expected */ ESmsEncodingPortugueseLockingShift);
       
  7780     iCharSets.Reset();  
       
  7781     
       
  7782     //
       
  7783     // Test use of Turkish GSM text using shift table...
       
  7784     // Some of the characters chosen dont appear in Spanish or Portuguese table
       
  7785     //
       
  7786     iCharSets.Append(KCharacterSetTurkish7bitGSMShift()); 
       
  7787     DoEncodingTestL(
       
  7788         /* Socket */            socket,
       
  7789         /* Test */              _L("Turkish GSM text (Turkish shift table)"),
       
  7790         /* Sequences */         1,
       
  7791         /* Char sets */         iCharSets,
       
  7792         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7793         /* Encoding to use */   ESmsEncodingTurkishSingleShift,
       
  7794         /* Encoding expected */ ESmsEncodingTurkishSingleShift);
       
  7795     iCharSets.Reset();  
       
  7796     
       
  7797     //
       
  7798     // Test use of Turkish GSM text using locking shift table...
       
  7799     // Some of the characters chosen dont appear in Spanish or Portuguese table
       
  7800     //
       
  7801     iCharSets.Append(KCharacterSetTurkish7bitGSMLocking()); 
       
  7802     DoEncodingTestL(
       
  7803         /* Socket */            socket,
       
  7804         /* Test */              _L("Turkish GSM text (Turkish locking shift table)"),
       
  7805         /* Sequences */         1,
       
  7806         /* Char sets */         iCharSets,
       
  7807         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7808         /* Encoding to use */   ESmsEncodingTurkishLockingShift,
       
  7809         /* Encoding expected */ ESmsEncodingTurkishLockingShift);
       
  7810     iCharSets.Reset();  
       
  7811     
       
  7812     //
       
  7813     // Clean up and finish...
       
  7814     //
       
  7815     CleanupStack::PopAndDestroy(&socket);
       
  7816     CleanupStack::PopAndDestroy(&socketServer);
       
  7817 
       
  7818     return TestStepResult();
       
  7819     }  // CTestEncoding7bitNationalLanguages::doTestStepL
       
  7820 
       
  7821 /**
       
  7822  *  Tests that Portuguese character converters creates a multi PDU SMS message correctly.
       
  7823  */
       
  7824 TVerdict CTestEncodingMultiPDUwith7bitNationalLanguages::doTestStepL()
       
  7825     {
       
  7826     RSocketServ  socketServer;
       
  7827     PrepareRegTestLC(socketServer, 161);
       
  7828 
       
  7829     RSocket socket;
       
  7830     iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7831     CleanupClosePushL(socket);
       
  7832 
       
  7833     //
       
  7834     // Test use of Portuguese GSM text using locking shift table...
       
  7835     // Check that when one byte remains in the last PDU that adding a 2 byte character 
       
  7836     // creates a new PDU with the 2 byte character and does not split the character between PDUs
       
  7837     //
       
  7838     // First add all the character types to ensure that the header in the PDU contains 
       
  7839     // all the necessary information elements
       
  7840     iCharSets.Append(KCharacterSetPortuguese7bitGSMExt());
       
  7841     iCharSets.Append(KCharacterSetPortuguese7bitGSMLocking());   
       
  7842     // Once sufficient characters are added to create a PDU with one free byte 
       
  7843     // add a two byte shift character 
       
  7844     iAdditionalCharSets.Append(KCharacterSetPortuguese7bitGSMExt());
       
  7845     DoEncodingTestL(
       
  7846         /* Socket */            socket,
       
  7847         /* Test */              _L("Portuguese GSM text (Portuguese lock table)"),
       
  7848         /* characters */        198,
       
  7849         /* Char sets */         iCharSets,
       
  7850         /* additional characters */        1,
       
  7851         /* Char sets */         iAdditionalCharSets,   
       
  7852         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7853         /* Encoding to use */   ESmsEncodingPortugueseLockingAndSingleShift,
       
  7854         /* Encoding expected */ ESmsEncodingPortugueseLockingShift);
       
  7855     iCharSets.Reset(); 
       
  7856     iAdditionalCharSets.Reset();
       
  7857 
       
  7858     //
       
  7859     // Clean up and finish...
       
  7860     //
       
  7861     CleanupStack::PopAndDestroy(&socket);
       
  7862     CleanupStack::PopAndDestroy(&socketServer);
       
  7863 
       
  7864     return TestStepResult();
       
  7865     }  // CTestEncodingMultiPDUwith7bitNationalLanguages::doTestStepL
       
  7866 
       
  7867 /**
       
  7868  * Test Turkish, Portuguese and Spanish Character Downgrading
       
  7869  */
       
  7870 TVerdict CTestEncodingDowngradedWith7bitNationalLanguages::doTestStepL()
       
  7871     {
       
  7872     
       
  7873     RSocketServ  socketServer;
       
  7874     PrepareRegTestLC(socketServer, 162); 
       
  7875 
       
  7876     RSocket socket;
       
  7877     iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7878     CleanupClosePushL(socket);
       
  7879 
       
  7880     //
       
  7881     // Test Turkish GSM text (no alternative encoding)...
       
  7882     //
       
  7883     iCharSets.Append(KCharacterSetDowngradingTurkish7bitGSM());
       
  7884     DoEncodingTestL(
       
  7885         /* Socket */            socket,
       
  7886         /* Test */              _L("Turkish GSM text (no alternative encoding)"),
       
  7887         /* Sequences */         40,
       
  7888         /* Char sets */         iCharSets,
       
  7889         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7890         /* Encoding to use */   ESmsEncodingNone,
       
  7891         /* Encoding expected */ ESmsEncodingNone);
       
  7892     iCharSets.Reset();
       
  7893     
       
  7894     //
       
  7895     // Test Spanish GSM text (no alternative encoding)...
       
  7896     //
       
  7897     iCharSets.Append(KCharacterSetDowngradingSpanish7bitGSM());
       
  7898     DoEncodingTestL(
       
  7899         /* Socket */            socket,
       
  7900         /* Test */              _L("Spanish GSM text (no alternative encoding)"),
       
  7901         /* Sequences */         25,
       
  7902         /* Char sets */         iCharSets,
       
  7903         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7904         /* Encoding to use */   ESmsEncodingNone,
       
  7905         /* Encoding expected */ ESmsEncodingNone);
       
  7906     iCharSets.Reset();
       
  7907     
       
  7908     //
       
  7909     // Test Portuguese GSM text (no alternative encoding)...
       
  7910     //
       
  7911     iCharSets.Append(KCharacterSetDowngradingPortuguese7bitGSM());
       
  7912     DoEncodingTestL(
       
  7913         /* Socket */            socket,
       
  7914         /* Test */              _L("Portuguese GSM text (no alternative encoding)"),
       
  7915         /* Sequences */         20,
       
  7916         /* Char sets */         iCharSets,
       
  7917         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7918         /* Encoding to use */   ESmsEncodingNone,
       
  7919         /* Encoding expected */ ESmsEncodingNone);
       
  7920     iCharSets.Reset();
       
  7921 
       
  7922     //
       
  7923     // Clean up and finish...
       
  7924     //
       
  7925     CleanupStack::PopAndDestroy(&socket);
       
  7926     CleanupStack::PopAndDestroy(&socketServer);
       
  7927 
       
  7928     return TestStepResult();
       
  7929     }  // CTestEncodingDowngradedWith7bitNationalLanguages::doTestStepL()
       
  7930 
       
  7931 /**
       
  7932  * Test Portuguese GSM text (Portuguese locking and shift table)...
       
  7933  */
       
  7934 TVerdict CTestOptimumEncodingWithLockingAndShift7bitNationalLanguages::doTestStepL()
       
  7935     {
       
  7936 
       
  7937     RSocketServ  socketServer;
       
  7938     PrepareRegTestLC(socketServer, 163); 
       
  7939 
       
  7940     RSocket socket;
       
  7941     iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7942     CleanupClosePushL(socket);
       
  7943 
       
  7944     // Test to ensure ESmsEncodingPortugueseSingleShift is selected
       
  7945     // two Portuguese shift (& standard) characters are added for every locking (& shift)
       
  7946     // character - the result is Portuguese Single Shift
       
  7947     iCharSets.Append(KCharacterSetPortuguese7bitGSMShiftAndStd1());
       
  7948     iCharSets.Append(KCharacterSetPortuguese7bitGSMShiftAndStd2());
       
  7949     // now add the Portuguese Locking Shift characters, note that these characters
       
  7950     // also occur in the Single Shift table
       
  7951     iCharSets.Append(KCharacterSetPortuguese7bitGSMShift());
       
  7952     DoEncodingTestL(
       
  7953          /* Socket */            socket,
       
  7954          /* Test */              _L("Portuguese GSM text (Portuguese single shift table)"),
       
  7955          /* Sequences */         1,
       
  7956          /* Char sets */         iCharSets,  
       
  7957          /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7958          /* Encoding to use */   ESmsEncodingPortugueseLockingAndSingleShift,
       
  7959          /* Encoding expected */ ESmsEncodingPortugueseSingleShift);
       
  7960     iCharSets.Reset(); 
       
  7961     
       
  7962     //
       
  7963     // Clean up and finish...
       
  7964     //
       
  7965     CleanupStack::PopAndDestroy(&socket);
       
  7966     CleanupStack::PopAndDestroy(&socketServer);
       
  7967 
       
  7968     return TestStepResult();
       
  7969     }  // CTestOptimumEncodingWithLockingAndShift7bitNationalLanguages::doTestStepL()
       
  7970 
       
  7971 /**
       
  7972  * Test normal GSM text but with Turkish locking and shift table...
       
  7973  */
       
  7974 TVerdict CTestOptimumEncodingWithLockingAndDowngrade7bitNationalLanguages::doTestStepL()
       
  7975     {
       
  7976     
       
  7977     RSocketServ  socketServer;
       
  7978     PrepareRegTestLC(socketServer, 164); 
       
  7979 
       
  7980     RSocket socket;
       
  7981     iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  7982     CleanupClosePushL(socket);
       
  7983     
       
  7984     // Add characters in the standard table, but request ESmsEncodingTurkishLockingAndSingleShift 
       
  7985     iCharSets.Append(KCharacterSetStandard7bitGSM());
       
  7986     iCharSets.Append(KCharacterSetStandard7bitGSMShift());
       
  7987     DoEncodingTestL(
       
  7988         /* Socket */            socket,
       
  7989         /* Test */              _L("normal GSM text but with Turkish locking and shift table"),
       
  7990         /* Sequences */         1,
       
  7991         /* Char sets */         iCharSets,
       
  7992         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  7993         /* Encoding to use */   ESmsEncodingTurkishLockingAndSingleShift,
       
  7994         /* Encoding expected */ ESmsEncodingNone);
       
  7995     iCharSets.Reset();
       
  7996     
       
  7997     //
       
  7998     // Clean up and finish...
       
  7999     //
       
  8000     CleanupStack::PopAndDestroy(&socket);
       
  8001     CleanupStack::PopAndDestroy(&socketServer);
       
  8002 
       
  8003     return TestStepResult();
       
  8004     }  // CTestOptimumEncodingWithLockingAndDowngrade7bitNationalLanguages::doTestStepL()
       
  8005 
       
  8006 /**
       
  8007  * Test Turkish GSM text with other downgrades (Turkish locking and shift table)...
       
  8008  */
       
  8009 TVerdict CTestOptimumEncodingWithLockingAndUnconvertible7bitNationalLanguages::doTestStepL()
       
  8010     {
       
  8011     
       
  8012     RSocketServ  socketServer;
       
  8013     PrepareRegTestLC(socketServer, 165); 
       
  8014 
       
  8015     RSocket socket;
       
  8016     iSmsStackTestUtils->OpenSmsSocketL(socketServer, socket, ESmsAddrRecvAny);
       
  8017     CleanupClosePushL(socket);
       
  8018 
       
  8019     // Add Turkish shift characters
       
  8020     iCharSets.Append(KCharacterSetTurkish7bitGSMShift());
       
  8021     // Add Non- Turkish characters that will be downgraded
       
  8022     iCharSets.Append(KCharacterSetNonTurkishDowngrading7bitGSMChars());
       
  8023     DoEncodingTestL(
       
  8024         /* Socket */            socket,
       
  8025         /* Test */              _L("Turkish GSM text with other downgrades (Turkish locking and shift table)"),
       
  8026         /* Sequences */         1,
       
  8027         /* Char sets */         iCharSets,
       
  8028         /* DCS */               TSmsDataCodingScheme::ESmsAlphabet7Bit,
       
  8029         /* Encoding to use */   ESmsEncodingTurkishLockingAndSingleShift,
       
  8030         /* Encoding expected */ ESmsEncodingTurkishSingleShift);
       
  8031     iCharSets.Reset();
       
  8032 
       
  8033     //
       
  8034     // Clean up and finish...
       
  8035     //
       
  8036     CleanupStack::PopAndDestroy(&socket);
       
  8037     CleanupStack::PopAndDestroy(&socketServer);
       
  8038 
       
  8039     return TestStepResult();
       
  8040     }  // CTestOptimumEncodingWithLockingAndUnconvertible7bitNationalLanguages::doTestStepL
       
  8041