telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTest3g_2.cpp
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserver/etelpacketdata/Te_EtelPacket/Te_EtelPacketTest3g_2.cpp	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,632 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// EtelPacketTest3G_2.cpp
+// JetStream Packet data tests.
+// This file tests the 3G (WCDMA) Packet Context functionality - TestCase 3G.2
+// 
+//
+
+// Symbian OS includes
+#include <e32base.h>
+
+#include <etelpckt.h>
+#include <pcktcs.h>
+
+#include "Te_EtelPacketTestStepBase.h"
+
+#include "testdef.h"
+
+#include "Te_EtelPacketTest3g_2.h"
+#include "Te_etelpckt_defs.h"
+
+CEtelPacketTest3G_2::CEtelPacketTest3G_2()
+/**
+ * Constructor
+ * Stores the name of this test case.
+ */
+	{
+	SetTestStepName(_L("3GPacketContext"));
+	}
+
+
+CEtelPacketTest3G_2::~CEtelPacketTest3G_2()
+/**
+ * Destructor
+ */
+	{}
+
+enum TVerdict CEtelPacketTest3G_2::doTestStepL( void )
+/**
+ * Test step 3G.2 calls the 3G Packet Context (RPacketContext) methods
+ */
+{
+	RPhone pcktPhone;
+	TInt ret=pcktPhone.Open(iTelServer,DPCKTTSY_PHONE_NAME);
+	CHECKPOINT(ret,KErrNone,CHP_OPEN_PHONE);
+
+	RPacketService wcdmaService;
+	ret=wcdmaService.Open(pcktPhone);
+    CHECKPOINT(ret,KErrNone,CHP_SRVS_CASE("A.3G1"));
+
+// Open a Primary context
+	RPacketContext primaryContext;
+	TName contextName;
+	
+	ret=primaryContext.OpenNewContext(wcdmaService, contextName);
+	CHECKPOINT(ret,KErrNone,CHP_CNTXT_CASE("B.3G1"));
+
+// Open a Secondary context. An arbitrary value of 20 is assigned for the buffer size.
+// Using a TName object would incur a great load on the stack, which is unnecessary for
+// this test code.
+	RPacketContext wcdmaContext;
+	TBuf<20> secondaryContextName;
+
+	ret=wcdmaContext.OpenNewSecondaryContext(wcdmaService, contextName, secondaryContextName);
+	CHECKPOINT(ret,KErrNone,CHP_CNTXT_CASE("B.3G2"));
+
+	TRequestStatus reqStatus;
+	
+//Creating Traffic Flow Template (TFT)
+	wcdmaContext.CreateNewTFT(reqStatus, DPCKTTSY_TFT_NO_FILTERS);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_SRVS_CASE("B.3G9"));
+	
+//Cancel Creating Traffic Flow Template (TFT)
+	wcdmaContext.CreateNewTFT(reqStatus, DPCKTTSY_TFT_NO_FILTERS);
+	wcdmaContext.CancelAsyncRequest(EPacketContextCreateNewTFT);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_SRVS_CASE("B.3G9"));
+	
+//Deleting Traffic Flow Template
+	wcdmaContext.DeleteTFT(reqStatus);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_SRVS_CASE("B.3G10"));
+	
+//Cancel Deleting Traffic Flow Template
+	wcdmaContext.DeleteTFT(reqStatus);
+	wcdmaContext.CancelAsyncRequest(EPacketContextDeleteTFT);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_SRVS_CASE("B.3G10"));
+
+// Enumerate Packet filters
+	TInt filterCount;
+
+	wcdmaContext.EnumeratePacketFilters(reqStatus, filterCount);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G3"));
+	CHECKPOINT(filterCount,DPCKTTSY_NUMBER_OF_PACKET_FILTERS,CHP_CNTXT_CASE("B.3G3"));
+
+// Cancel Request
+	wcdmaContext.EnumeratePacketFilters(reqStatus, filterCount);
+	wcdmaContext.CancelAsyncRequest(EPacketContextEnumeratePacketFilters);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G3"));
+
+// Get Packet filter information
+	TInt filterIndex=1;
+	RPacketContext::TPacketFilterV2 packetFilterInfo;
+	RPacketContext::TPacketFilterV2Pckg packetFilterInfoPckg(packetFilterInfo);
+
+	wcdmaContext.GetPacketFilterInfo(reqStatus, filterIndex, packetFilterInfoPckg);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G4"));
+	
+	CHECKPOINT(packetFilterInfo.iId,DPCKTTSY_FILTER_ID1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iEvaluationPrecedenceIndex,DPCKTTSY_EVALUATION_PRECEDENCE_INDEX1,CHP_CNTXT_CASE("B.3G4"));
+
+	CHECKPOINT(packetFilterInfo.iSrcAddr[0],DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_0,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcAddr[1],DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcAddr[2],DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_2,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcAddr[3],DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_3,CHP_CNTXT_CASE("B.3G4"));
+
+	CHECKPOINT(packetFilterInfo.iSrcAddrSubnetMask[0],DPCKTTSY_DOMAIN_SUBNET_MASK1_0,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcAddrSubnetMask[1],DPCKTTSY_DOMAIN_SUBNET_MASK1_1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcAddrSubnetMask[2],DPCKTTSY_DOMAIN_SUBNET_MASK1_2,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcAddrSubnetMask[3],DPCKTTSY_DOMAIN_SUBNET_MASK1_3,CHP_CNTXT_CASE("B.3G4"));
+
+	CHECKPOINT(packetFilterInfo.iProtocolNumberOrNextHeader,DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcPortMin,DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iSrcPortMax,DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iDestPortMin,DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iDestPortMax,DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1,CHP_CNTXT_CASE("B.3G4"));
+	CHECKPOINT(packetFilterInfo.iTOSorTrafficClass,DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1,CHP_CNTXT_CASE("B.3G4"));
+	
+// Cancel Request
+	wcdmaContext.GetPacketFilterInfo(reqStatus, filterIndex, packetFilterInfoPckg);
+	wcdmaContext.CancelAsyncRequest(EPacketContextGetPacketFilterInfo);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G4"));
+	
+// Add packet filter to a Traffic Flow Template (TFT)
+	packetFilterInfo.iId=DPCKTTSY_FILTER_ID2;
+	packetFilterInfo.iEvaluationPrecedenceIndex=DPCKTTSY_EVALUATION_PRECEDENCE_INDEX2;
+
+	packetFilterInfo.iSrcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_0;
+	packetFilterInfo.iSrcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_1;
+	packetFilterInfo.iSrcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_2;
+	packetFilterInfo.iSrcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_3;
+
+	packetFilterInfo.iSrcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK2_0;
+	packetFilterInfo.iSrcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK2_1;
+	packetFilterInfo.iSrcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK2_2;
+	packetFilterInfo.iSrcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK2_3;
+
+	packetFilterInfo.iProtocolNumberOrNextHeader=DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER2;
+	packetFilterInfo.iIPSecSPI=DPCKTTSY_SECURITY_PARAMETER_INDEX2;
+	packetFilterInfo.iTOSorTrafficClass=DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS2;
+	
+	RPacketContext::TPacketFilterV2Pckg addFilterPckg(packetFilterInfo);
+
+	wcdmaContext.AddPacketFilter(reqStatus, addFilterPckg);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G5"));
+
+// Cancel Request
+	wcdmaContext.AddPacketFilter(reqStatus, addFilterPckg);
+	wcdmaContext.CancelAsyncRequest(EPacketContextAddPacketFilter);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G5"));
+
+// Remove packet filter
+	TInt removeIndex=2;
+
+	wcdmaContext.RemovePacketFilter(reqStatus, removeIndex);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G6"));
+
+// Cancel Request
+	wcdmaContext.RemovePacketFilter(reqStatus, removeIndex);
+	wcdmaContext.CancelAsyncRequest(EPacketContextRemovePacketFilter);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G6"));
+
+// Modify Active Context
+	wcdmaContext.ModifyActiveContext(reqStatus);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G7"));
+
+// Cancel Request
+	wcdmaContext.ModifyActiveContext(reqStatus);
+	wcdmaContext.CancelAsyncRequest(EPacketContextModifyActiveContext);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G7"));
+
+// Change Request: NSAE-579FBV. Added a new method, InitialiseContext(), which supersedes
+// the LoanCommPort() and RecoverCommPort() methods. This new method enables asynchronous
+// resource reservation for a new primary or secondary context at the creation phase.
+
+// Asynchronous Resource reservation - InitialiseContext()
+	RPacketContext::TDataChannelV2 dataChannelV2;
+	RPacketContext::TDataChannelV2Pckg dataChannelV2Pckg(dataChannelV2);
+
+	wcdmaContext.InitialiseContext(reqStatus, dataChannelV2Pckg);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G8"));
+	CHECKPOINT_COMP_STR(dataChannelV2.iCsy,DPCKTTSY_CSY_ASYNC,CHP_CNTXT_CASE("B.3G8"));
+	CHECKPOINT_COMP_STR(dataChannelV2.iPort,DPCKTTSY_PORT_ASYNC,CHP_CNTXT_CASE("B.3G8"));
+	CHECKPOINT_COMP_STR(dataChannelV2.iChannelId,DPCKTTSY_CHANNEL_ID,CHP_CNTXT_CASE("B.3G8"));
+
+// Cancel Request
+	wcdmaContext.InitialiseContext(reqStatus, dataChannelV2Pckg);
+	wcdmaContext.CancelAsyncRequest(EPacketContextInitialiseContext);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G8"));
+	
+// TPacketFilterV3 Tests
+	RPacketContext::TIPAddress srcAddr;
+	RPacketContext::TIPAddress srcAddrSubnetMask;
+	
+	TInt ii;
+	for (ii=0; ii<sizeof(RPacketContext::TIPAddress); ii++)
+		{
+		srcAddr[ii] = 0;	
+		}
+	srcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_0;
+	srcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_1;
+	srcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_2;
+	srcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS1_3;
+	
+	for (ii=0; ii<sizeof(RPacketContext::TIPAddress); ii++)
+		{
+		srcAddrSubnetMask[ii] = 0;	
+		}
+	srcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK1_0;
+	srcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK1_1;
+	srcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK1_2;
+	srcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK1_3;
+	
+	filterIndex=3;
+	RPacketContext::TPacketFilterV3 packetFilterV3Info;
+	RPacketContext::TPacketFilterV3Pckg packetFilterV3InfoPckg(packetFilterV3Info);
+
+	wcdmaContext.GetPacketFilterInfo(reqStatus, filterIndex, packetFilterV3InfoPckg);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G11"));
+	
+/* Testing that the correct values were set  - TYPE 1*/
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr));
+	TEST(!(Mem::Compare(packetFilterV3Info.SrcAddr(),sizeof(RPacketContext::TIPAddress),srcAddr,sizeof(RPacketContext::TIPAddress))));
+
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddrSubnetMask));
+	TEST(!(Mem::Compare(packetFilterV3Info.SrcAddrSubnetMask(),sizeof(RPacketContext::TIPAddress),srcAddrSubnetMask,sizeof(RPacketContext::TIPAddress))));
+	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMin));
+	TEST((packetFilterV3Info.DestPortMin() == DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1));
+	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMax));
+	TEST((packetFilterV3Info.DestPortMax() == DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1));
+	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterProtocolNumberOrNextHeader));
+	TEST((packetFilterV3Info.ProtocolNumberOrNextHeader() == DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1));
+	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMin));
+	TEST((packetFilterV3Info.SrcPortMin() == DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1));
+	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMax));
+	TEST((packetFilterV3Info.SrcPortMax() == DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1));
+	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterTOSorTrafficClass));
+	TEST((packetFilterV3Info.TOSorTrafficClass() == DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1));
+	
+/* Because the Filter Type was One SPI will not be set and should be 0 */
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterIPSecSPI) == EFalse);	
+	TEST(packetFilterV3Info.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterFlowLabel) == EFalse);
+
+	
+// Cancel Request
+	wcdmaContext.GetPacketFilterInfo(reqStatus, filterIndex, packetFilterInfoPckg);
+	wcdmaContext.CancelAsyncRequest(EPacketContextGetPacketFilterInfo);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G11"));
+	
+	filterIndex=4;
+	RPacketContext::TPacketFilterV3 packetFilterV3Info2;
+	RPacketContext::TPacketFilterV3Pckg packetFilterV3InfoPckg2(packetFilterV3Info2);
+
+	wcdmaContext.GetPacketFilterInfo(reqStatus, filterIndex, packetFilterV3InfoPckg2);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G11"));
+	
+/* Testing that the correct values were set */
+	TEST(packetFilterV3Info2.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterProtocolNumberOrNextHeader));
+	TEST((packetFilterV3Info2.ProtocolNumberOrNextHeader() == DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER2));
+	
+	TEST(packetFilterV3Info2.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterIPSecSPI));	
+	TEST((packetFilterV3Info2.SPI() == DPCKTTSY_SECURITY_PARAMETER_INDEX2));
+	
+	TEST(packetFilterV3Info2.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterTOSorTrafficClass));
+	TEST((packetFilterV3Info2.TOSorTrafficClass() == DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS2));
+/* Because the Filter Type was Two SrcPortMin will not be set and should be 0 */
+	TEST((packetFilterV3Info2.SrcPortMin() == 0));
+	
+// Cancel Request
+	wcdmaContext.GetPacketFilterInfo(reqStatus, filterIndex, packetFilterInfoPckg);
+	wcdmaContext.CancelAsyncRequest(EPacketContextGetPacketFilterInfo);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G11"));
+	
+// Add packet filter for Type One
+
+	RPacketContext::TPacketFilterV3 addPacketFilterV3a(RPacketContext::EPacketFilterTypeOne);
+	
+	addPacketFilterV3a.iId=DPCKTTSY_FILTER_ID1;
+	addPacketFilterV3a.iEvaluationPrecedenceIndex=DPCKTTSY_EVALUATION_PRECEDENCE_INDEX1;
+
+	addPacketFilterV3a.SetSrcAddr(srcAddr);
+	addPacketFilterV3a.SetSrcAddrSubnetMask(srcAddrSubnetMask);
+	addPacketFilterV3a.SetProtocolNumberOrNextHeader(DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1);
+	addPacketFilterV3a.SetSrcPortMin(DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1);
+	addPacketFilterV3a.SetSrcPortMax(DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1);
+	addPacketFilterV3a.SetDestPortMin(DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1);
+	addPacketFilterV3a.SetDestPortMax(DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1);
+	addPacketFilterV3a.SetTOSorTrafficClass(DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1);
+	
+	RPacketContext::TPacketFilterV3Pckg addFilterV3aPckg(addPacketFilterV3a);
+
+	wcdmaContext.AddPacketFilter(reqStatus, addFilterV3aPckg);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G12"));
+	
+// Add packet filter for Type Two
+
+	RPacketContext::TPacketFilterV3 addPacketFilterV3b(RPacketContext::EPacketFilterTypeTwo);
+	
+	addPacketFilterV3b.iId=DPCKTTSY_FILTER_ID1;
+	addPacketFilterV3b.iEvaluationPrecedenceIndex=DPCKTTSY_EVALUATION_PRECEDENCE_INDEX1;
+
+	addPacketFilterV3b.SetSrcAddr(srcAddr);
+	addPacketFilterV3b.SetSrcAddrSubnetMask(srcAddrSubnetMask);
+	addPacketFilterV3b.SetProtocolNumberOrNextHeader(DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER1);
+	addPacketFilterV3b.SetSPI(DPCKTTSY_SECURITY_PARAMETER_INDEX2);
+	addPacketFilterV3b.SetTOSorTrafficClass(DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1);
+	
+	RPacketContext::TPacketFilterV3Pckg addFilterV3bPckg(addPacketFilterV3b);
+
+	wcdmaContext.AddPacketFilter(reqStatus, addFilterV3bPckg);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G12"));
+	
+// Add packet filter for Type Three
+
+	RPacketContext::TPacketFilterV3 addPacketFilterV3c(RPacketContext::EPacketFilterTypeThree);
+	
+	addPacketFilterV3c.iId=DPCKTTSY_FILTER_ID1;
+	addPacketFilterV3c.iEvaluationPrecedenceIndex=DPCKTTSY_EVALUATION_PRECEDENCE_INDEX1;
+
+	addPacketFilterV3c.SetSrcAddr(srcAddr);
+	addPacketFilterV3c.SetSrcAddrSubnetMask(srcAddrSubnetMask);
+	addPacketFilterV3c.SetTOSorTrafficClass(DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS1);
+	addPacketFilterV3c.SetFlowLabel(DPCKTTSY_FLOW_LABEL);
+	
+	RPacketContext::TPacketFilterV3Pckg addFilterV3cPckg(addPacketFilterV3c);
+
+	wcdmaContext.AddPacketFilter(reqStatus, addFilterV3cPckg);
+	User::WaitForRequest(reqStatus);
+
+	CHECKPOINT(reqStatus.Int(),KErrNone,CHP_CNTXT_CASE("B.3G12"));
+
+// Cancel Request
+	wcdmaContext.AddPacketFilter(reqStatus, addFilterV3cPckg);
+	wcdmaContext.CancelAsyncRequest(EPacketContextAddPacketFilter);
+	User::WaitForRequest(reqStatus);
+	CHECKPOINT(reqStatus.Int(),KErrCancel,CHP_CNTXT_CASE("B.3G12"));
+	
+// Testing FilterTypeOne
+	INFO_PRINTF1(_L("Testing Filter Type One"));
+	TestPacketFilterV3Type(RPacketContext::EPacketFilterTypeOne);
+	
+// Testing FilterTypeTwo
+	INFO_PRINTF1(_L("Testing Filter Type Two"));
+	TestPacketFilterV3Type(RPacketContext::EPacketFilterTypeTwo);
+		
+// Testing FilterTypeThree
+	INFO_PRINTF1(_L("Testing Filter Type Three"));
+	TestPacketFilterV3Type(RPacketContext::EPacketFilterTypeThree);
+
+	
+	primaryContext.Close();
+	wcdmaContext.Close();	
+	wcdmaService.Close();
+	pcktPhone.Close();
+
+	return TestStepResult();
+}
+
+void CEtelPacketTest3G_2::TestPacketFilterV3Type(RPacketContext::TPacketFilterType aType)
+{
+	RPacketContext::TIPAddress srcAddr;
+	RPacketContext::TIPAddress srcAddrSubnetMask;
+	
+	srcAddr[0]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_0;
+	srcAddr[1]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_1;
+	srcAddr[2]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_2;
+	srcAddr[3]=DPCKTTSY_DOMAIN_SOURCE_ADDRESS2_3;
+
+	srcAddrSubnetMask[0]=DPCKTTSY_DOMAIN_SUBNET_MASK2_0;
+	srcAddrSubnetMask[1]=DPCKTTSY_DOMAIN_SUBNET_MASK2_1;
+	srcAddrSubnetMask[2]=DPCKTTSY_DOMAIN_SUBNET_MASK2_2;
+	srcAddrSubnetMask[3]=DPCKTTSY_DOMAIN_SUBNET_MASK2_3;
+
+	
+	RPacketContext::TPacketFilterV3 packetFilterV3(aType);
+	packetFilterV3.Reset();
+	TInt err;
+	
+	err = packetFilterV3.SetSrcAddr(srcAddr);
+	if(err)
+		{
+		if(!(Mem::Compare(packetFilterV3.SrcAddr(),sizeof(RPacketContext::TIPAddress),srcAddr,sizeof(RPacketContext::TIPAddress))))
+			{
+			INFO_PRINTF1(_L("Correct Source Address Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr));
+		packetFilterV3.Reset(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr);
+		TEST(!(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddr)));
+		}
+	else
+		{
+		TEST(EFalse);	// The Source Address should be set for all the types.
+		}
+	
+	packetFilterV3.Reset();	
+	err = packetFilterV3.SetSrcAddrSubnetMask(srcAddrSubnetMask);
+		if(err)
+		{
+		if(!(Mem::Compare(packetFilterV3.SrcAddrSubnetMask(),sizeof(RPacketContext::TIPAddress),srcAddrSubnetMask,sizeof(RPacketContext::TIPAddress))))
+			{
+			INFO_PRINTF1(_L("Correct Source Address Subnet Mask Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcAddrSubnetMask));
+		}
+	else
+		{
+		TEST(EFalse);	// The Source Address Subnet Mask should be set for all the types.
+		}
+	
+	packetFilterV3.Reset();	
+	err = packetFilterV3.SetProtocolNumberOrNextHeader(DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER2);
+	if(err)
+		{
+		if(packetFilterV3.ProtocolNumberOrNextHeader() == DPCKTTSY_PROTOCOLNUMBER_OR_NEXTHEADER2)
+			{
+			INFO_PRINTF1(_L("Correct Protocol Number Returned"));		
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterProtocolNumberOrNextHeader));
+		}
+	else
+		{
+		if (aType == RPacketContext::EPacketFilterTypeThree)
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set Protocol Numbers"));	
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+		
+	packetFilterV3.Reset();
+	err = packetFilterV3.SetSrcPortMin(DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1);
+	if(err)
+		{
+		if(packetFilterV3.SrcPortMin() == DPCKTTSY_MINIMUM_SOURCE_PORT_NUMBER1)
+			{
+			INFO_PRINTF1(_L("Correct Minimum Source Port Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMin));
+		}
+	else
+		{
+		if ((aType == RPacketContext::EPacketFilterTypeTwo) || (aType == RPacketContext::EPacketFilterTypeThree))
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set Minimum Source Port"));
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+		
+	packetFilterV3.Reset();
+	err = packetFilterV3.SetSrcPortMax(DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1);
+	if(err)
+		{
+		if(packetFilterV3.SrcPortMax() == DPCKTTSY_MAXIMUM_SOURCE_PORT_NUMBER1)
+			{
+			INFO_PRINTF1(_L("Correct Maximum Source Port Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterSrcPortMax));
+		}
+	else
+		{
+		if ((aType == RPacketContext::EPacketFilterTypeTwo) || (aType == RPacketContext::EPacketFilterTypeThree))
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set Maximum Source Port"));	
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+		
+	packetFilterV3.Reset();
+	err = packetFilterV3.SetDestPortMin(DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1);
+	if(err)
+		{
+		if(packetFilterV3.DestPortMin() == DPCKTTSY_MINIMUM_DESTINATION_PORT_NUMBER1)
+			{
+			INFO_PRINTF1(_L("Correct Minimum Destination Port Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMin));
+		}
+	else
+		{
+		if ((aType == RPacketContext::EPacketFilterTypeTwo) || (aType == RPacketContext::EPacketFilterTypeThree))
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set Minimum Destination Port"));	
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+	
+	packetFilterV3.Reset();	
+	err = packetFilterV3.SetDestPortMax(DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1);
+	if(err)
+		{
+		if(packetFilterV3.DestPortMax() == DPCKTTSY_MAXIMUM_DESTINATION_PORT_NUMBER1)
+			{
+			INFO_PRINTF1(_L("Correct Maximum Destination Port Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterDestPortMax));
+		}
+	else
+		{
+		if ((aType == RPacketContext::EPacketFilterTypeTwo) || (aType == RPacketContext::EPacketFilterTypeThree))
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set Maximum Destination Port"));
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+		
+	packetFilterV3.Reset();
+	err = packetFilterV3.SetSPI(DPCKTTSY_SECURITY_PARAMETER_INDEX2);
+	if(err)
+		{
+		if(packetFilterV3.SPI() == DPCKTTSY_SECURITY_PARAMETER_INDEX2)
+			{
+			INFO_PRINTF1(_L("Correct SPI returend"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterIPSecSPI));
+		}
+	else
+		{
+		if ((aType == RPacketContext::EPacketFilterTypeOne) || (aType == RPacketContext::EPacketFilterTypeThree))
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set SPI"));	
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+		
+	packetFilterV3.Reset();
+	err = packetFilterV3.SetTOSorTrafficClass(DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS2);
+	if(err)
+		{
+		if(packetFilterV3.TOSorTrafficClass() == DPCKTTSY_TYPE_OF_SERVICE_OR_TRAFFIC_CLASS2)
+			{
+			INFO_PRINTF1(_L("Correct TOS or Traffic Class Returned"));
+			}
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterTOSorTrafficClass));
+		}
+	else
+		{
+		TEST(EFalse);	// The TOS or Traffic Class should be set for all the types.
+		}
+		
+	packetFilterV3.Reset();
+	err = packetFilterV3.SetFlowLabel(DPCKTTSY_FLOW_LABEL);
+	if(err)
+		{
+		if(packetFilterV3.FlowLabel() == DPCKTTSY_FLOW_LABEL)
+			INFO_PRINTF1(_L("Correct Flow Label Returned"));
+		TEST(packetFilterV3.IsPresent(RPacketContext::TPacketFilterV3::EPacketFilterFlowLabel));
+		}
+	else
+		{
+		if ((aType == RPacketContext::EPacketFilterTypeOne) || (aType == RPacketContext::EPacketFilterTypeTwo))
+			{
+			INFO_PRINTF1(_L("Not Allowed to Set Flow Label"));	
+			}
+		else
+			{
+			TEST(EFalse);
+			}
+		}
+
+}