telephonyserverplugins/simtsy/src/CSimPacketContext.cpp
branchopencode
changeset 24 6638e7f4bd8f
parent 19 1f776524b15c
--- a/telephonyserverplugins/simtsy/src/CSimPacketContext.cpp	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/simtsy/src/CSimPacketContext.cpp	Thu May 06 15:10:38 2010 +0100
@@ -1,3682 +1,3682 @@
-// 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:
-// This file contains the implementation of the Similator TSY Packet Context functionality.  
-// 
-//
-
-/**
- @file
-*/
-
-#include "Simlog.h"
-#include "CSimPhone.h"
-#include "CSimPacketContext.h"
-#include "CSimPacketService.h"
-#include "CSimPacketQoS.h"
-#include "utils.h"
-
-#include "CSimContextHelper.h"
-
-const TInt KUnsetInteger = 0;
-
-CPcktListReadAllAttempt* CPcktListReadAllAttempt::NewL(TClientId& aId, TTsyReqHandle aReqHandle)
-/**
- * Standard two phase constructor.
- * @param aId The client ID (session and sub-session handles) that uniquely identifies a client performing a two phase read.
- * @param aReqHandle The TSY request handle of the client request associated with a two phase read.
- * @return CPcktListReadAllAttempt* The newly created object.
- */
-	{
-	CPcktListReadAllAttempt* read=new(ELeave) CPcktListReadAllAttempt(aId, aReqHandle);
-	CleanupStack::PushL(read);
-	read->ConstructL();
-	CleanupStack::Pop();
-	return read;
-	}
-
-CPcktListReadAllAttempt::CPcktListReadAllAttempt(TClientId& aId, TTsyReqHandle aReqHandle)
-		: iReqHandle(aReqHandle)
-/**
- * Trivial first phase constructor.
- * @param aId The client ID (session and sub-session handles) that uniquely identifies a client performing a two phase read.
- * @param aReqHandle The TSY request handle of the client request associated with a two phase read.
- */
-	{
-	iClient.iSessionHandle=aId.iSessionHandle;
-	iClient.iSubSessionHandle=aId.iSubSessionHandle;
-	}
-
-void CPcktListReadAllAttempt::ConstructL()
-/**
- * Trivial second phase constructor.
- */
-	{
-	User::LeaveIfError(iListBuf!=NULL);
-	}
-
-CPcktListReadAllAttempt::~CPcktListReadAllAttempt()
-/**
- * Trivial destructor.
- */
-	{
-	delete iListBuf;
-	}
-
-
-CSimPacketContext* CSimPacketContext::NewL(CSimPhone* aPhone, CSimPacketService* aPacketService, const TDesC& aContextName)
-/**
-* Standard two phase constructor
-*
-* @param aPacketService Pointer to the Packet Service object (CSimPacketService)
-* @param aContextName name  for this packet context
-* @return CSimPacketContext pointer to the packet context object created.
-* @leave Leaves if no memory or object is not created for any reason.
-*/
-	{
-	CSimPacketContext* packetContext = new(ELeave) CSimPacketContext(aPhone, aPacketService, aContextName);
-	CleanupStack::PushL(packetContext);
-	packetContext->ConstructL();
-	CleanupStack::Pop();
-	return packetContext;
-	}
-
-void CSimPacketContext::Init()
-	{}
-
-CSimPacketContext::CSimPacketContext(CSimPhone* aPhone, CSimPacketService* aPacketService, const TName& aContextName)
-	: iPhone(aPhone), iDeleted(EFalse),iIsActive(EFalse),iPacketService(aPacketService),iContextName(aContextName),
-	  iTFTCreated(EFalse), iNumTFTsCreated(-1), iNumFiltersAdded(0),
-      iContextConfigParamsIndex(0), iCommPortLoaned(EFalse),iQoSObjectCount(0),
-      iNotifyContextConfigChangeArray(NULL), iSetConfigData(NULL), iSetConfigCallCount(0), iTFTChangeBool(0),
-      iNotifyContextStatusChangeIndex(0),iState(RPacketContext::EStatusInactive), iLastError(KErrNone), iErrorCodeForGetLastErrorCause(KErrNone)
-	  
-/**
-* Trivial Constructor.  Initialises all the data members
-*
-* @param aPacketService Pointer to the Packet Service object (CSimPacketService)
-* @param aContextName name  for this packet context
-*/
-	{
-	iNotifyStatusChange.iNotifyPending = EFalse;
-	iNotifyConfigGPRS.iNotifyPending= EFalse;
-	iNotifyConfigR99.iNotifyPending= EFalse;
-	iNotifyConfigR5.iNotifyPending= EFalse;
-	}
-
-void CSimPacketContext::ConstructL()
-/**
-* Second phase of the 2-phase constructor.
-* Constructs all the member data and retrieves all the data from the config file specific to this class.
-*
-* @leave Leaves no memory or any data member does not construct for any reason.
-*/
-	{
-	LOGPACKET1("CSimPacketContext: Entered constructor");
-
-	iSetConfigData = new (ELeave) CArrayFixFlat<TSetConfigData>(1);
-	iNotifyContextConfigChangeArray = new (ELeave) CArrayFixFlat<TNotifyContextConfigChangeData>(1);
-	iContextConfigParams = new (ELeave) CArrayFixFlat<TContextConfigParam>(KNumberofConfigs);
-	iAuthorizationTokenResponse = new (ELeave) CArrayFixFlat<TAuthorizationTokenResponse>(KNumberofConfigs);
-	iMediaAuthorization = new (ELeave) CArrayFixFlat<RPacketContext::CTFTMediaAuthorizationV3>(KNumberofConfigs);
-
-	iNtRas = CSimNtRas::NewL(iPhone);
-	iTimer = CSimTimer::NewL(iPhone);
-	iNotifyContextStatusChangeTimer = CSimTimer::NewL(iPhone);
-	iSetConfigTimer = CSimTimer::NewL(iPhone);
-	iInitContextTimer = CSimTimer::NewL(iPhone);
-	iCreateTftTimer = CSimTimer::NewL(iPhone);
-	iNotifyContextConfigChangeTimer= CSimTimer::NewL(iPhone);
-	iContextStatusChange = CSimPubSubChange::NewL(this, CSimPubSub::TPubSubProperty(KUidPSSimTsyCategory, KPSSimtsyPacketContextStatusChange, KPSSimtsyPacketContextStatusChangeKeyType));
-
-	LOGPACKET1("Starting to Load and Parse Packet Context the Config File");
-
-	GetCommSetupSettingsL();
-	GetContextConfigParamSettingsL(KSetContextConfigGPRS());
-	GetContextConfigParamSettingsL(KSetContextConfigRel99());
-	GetContextConfigParamSettingsL(KSetContextConfigRel5());
-	GetActivateSettings();
-	GetSetConfigSettings();
-	GetPacketFilterSettings();
-	GetContextConfigRel99SettingsL();
-	ConstructPacketFiltersL();
-	GetContextStatusChangeSettingsL();
-	GetContextConfigChangeSettingsL();
-	
-	TInt nestedItemNumber; // used for nested loop
-	const CTestConfigItem* item2; // used for nested items
-
-	TUint count = CfgFile()->ItemCount(KAuthorizationToken);		
-
-	TUint itemPosition = 0;
-	TUint itemOffSet = 0;
-	for(TInt i=0;i<count;i++)							// set up AuthorizationToken info
-		{
-		const CTestConfigItem *item = CfgFile()->Item(KAuthorizationToken,i);
-		if(!item)
-			break;
-
-		RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = RPacketContext::CTFTMediaAuthorizationV3::NewL();
-        CleanupStack::PushL(mediaAuthorization);		
-		TAuthorizationTokenResponse authorizationTokenResponse;
-		TPtrC8 authorizationToken;
-		TInt desiredResponse;
-		TInt numberOfFlowIds;
-		
-		TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,authorizationToken);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("CTFTMediaAuthorizationV3::authorizationToken",ret,0,&KAuthorizationToken);
-            CleanupStack::PopAndDestroy(mediaAuthorization);			
-			continue;
-			}
-		else
-			{
-			mediaAuthorization->iAuthorizationToken.Copy(authorizationToken); // Set up for media authorization
-			authorizationTokenResponse.iAuthorizationToken.Copy(authorizationToken); // Set up for token response
-			}
-			
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,desiredResponse);
-
-		if(ret!=KErrNone || desiredResponse > 0)
-			{
-			LOGPARSERR("desiredResponse",ret,1,&KAuthorizationToken);
-	        CleanupStack::PopAndDestroy(mediaAuthorization);
-			continue;
-			}
-		else
-			{
-			authorizationTokenResponse.iResponse = desiredResponse;
-			}
-
-		iAuthorizationTokenResponse->AppendL(authorizationTokenResponse);
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,numberOfFlowIds);
-			
-		for(nestedItemNumber=itemPosition+itemOffSet;nestedItemNumber<itemOffSet+numberOfFlowIds;nestedItemNumber++)
-			{
-			item2 = CfgFile()->Item(KFlowIdentifier,nestedItemNumber);
-			
-			if(!item2)
-				break;
-
-			RPacketContext::CTFTMediaAuthorizationV3::TFlowIdentifier iFlowIdentifier;
-			TInt mediaComponentNumber;
-			TInt IPFlowNumber;
-		
-			ret=CTestConfig::GetElement(item2->Value(),KStdDelimiter,0,mediaComponentNumber);
-
-			if(ret!=KErrNone || mediaComponentNumber < 0)
-				{
-				LOGPARSERR("CTFTMediaAuthorizationV3::mediaComponentNumber",ret,0,&KFlowIdentifier);
-				continue;
-				}
-			else
-				{
-				iFlowIdentifier.iMediaComponentNumber = mediaComponentNumber;
-				}
-				
-			ret=CTestConfig::GetElement(item2->Value(),KStdDelimiter,1,IPFlowNumber);
-
-			if(ret!=KErrNone || IPFlowNumber < 0)
-				{
-				LOGPARSERR("CTFTMediaAuthorizationV3::IPFlowNumber",ret,1,&KFlowIdentifier);
-				continue;
-				}
-			else
-				{
-				iFlowIdentifier.iIPFlowNumber = IPFlowNumber;
-				}
-			
-			mediaAuthorization->iFlowIds.Append(iFlowIdentifier);
-			}
-		itemOffSet+=numberOfFlowIds;
-		iMediaAuthorization->AppendL(*mediaAuthorization); // Add completed media authorization to array
-        CleanupStack::Pop(mediaAuthorization);		
-		}
-
-	LOGPACKET1("...Finished parsing Packet Context config parameters...");
-	}	
-
-void CSimPacketContext::GetCommSetupSettingsL()
-	{
-	iCommSetupArray = new (ELeave) CArrayFixFlat<TCommSetupItem>(KNumberofConfigs);
-
-	TInt count = CfgFile()->ItemCount(KCommSetup);
-	if(count==0)
-		{
-		TCommSetupItem comm;
-			
-		comm.iCsyName.Copy(KDefaultCsyName);
-		comm.iPortName.Copy(KDefaultPortName);
-		comm.iConfig.iRate=KDefaultCommPortRate;
-		comm.iConfig.iHandshake=KDefaultHandshake;	
-		comm.iContextName=KDefaultSetting;
-		comm.iCommReset = EFalse;
-		comm.iNumInitializeFailures = 0;
-		comm.iErrorCode = KErrNone;
-		comm.iDelay = 0;
-		iCommSetupArray->AppendL(comm);
-		}
-
-	for(TInt i=0;i<count;i++)
-		{
-		const CTestConfigItem* item = CfgFile()->Item(KCommSetup,i);
-
-		if(item)
-			{
-			TCommSetupItem comm;
-			TPtrC8 portName,csyName,contextName;
-			TInt commReset, numInitializeFailures, errorCode, delay;
-
-			TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,csyName);
-			if(ret!=KErrNone)
-				{
-				LOGPARSERR("CommSetUp::csyName",ret,0,&KCommSetup);
-				comm.iCsyName.Copy(KDefaultCsyName);
-				}
-			else
-				comm.iCsyName.Copy(csyName);
-
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,portName);
-			if(ret!=KErrNone)
-				{
-				LOGPARSERR("CommSetUp::portName",ret,1,&KCommSetup);
-				comm.iPortName.Copy(KDefaultPortName);
-				}
-			else
-				comm.iPortName.Copy(portName);
-
-			TInt dataRate,handshake;
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,dataRate);
-			if(ret!=KErrNone)
-				{
-				LOGPARSERR("CommSetUp::dataRate",ret,2,&KCommSetup);
-				comm.iConfig.iRate=KDefaultCommPortRate;
-				}
-			else
-				comm.iConfig.iRate=(TBps)dataRate;
-
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,handshake);
-			if(ret!=KErrNone)
-				{
-				LOGPARSERR("CommSetUp::handShake",ret,3,&KCommSetup);
-				comm.iConfig.iHandshake=KDefaultHandshake;
-				}
-			else
-				comm.iConfig.iHandshake=(TUint)handshake;
-			
-			
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,contextName);
-			if(ret!=KErrNone)
-				{
-				LOGPARSERR("CommSetUp::contextName",ret,4,&KCommSetup);
-				comm.iContextName=KDefaultSetting;
-				}
-			else
-				comm.iContextName.Copy(contextName);
-
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,commReset);
-			if(ret!=KErrNone)
-				{
-				LOGPARSERR("CommSetUp::commReset",ret,5,&KCommSetup);
-				comm.iCommReset=EFalse;
-				}
-			else
-				comm.iCommReset = commReset;
-			
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6,numInitializeFailures);
-			if(ret!=KErrNone)
-				{
-				comm.iNumInitializeFailures = 0;
-				}
-			else
-				comm.iNumInitializeFailures = numInitializeFailures;
-			
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7,errorCode);
-			if(ret!=KErrNone)
-				{
-				comm.iErrorCode = KErrNone;
-				}
-			else
-				comm.iErrorCode = errorCode;
-			
-			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,8,delay);
-			if(ret!=KErrNone)
-				{
-				comm.iDelay = 0;
-				}
-			else
-				comm.iDelay = delay;
-			
-			iCommSetupArray->AppendL(comm);
-			}
-		}
-	}
-
-
-
-void CSimPacketContext::GetContextConfigParamSettingsL(TPtrC8 aTag)
-	{		
-	CSimContextHelper::GetContextConfigParamSettingsL( CfgFile(), aTag, iContextConfigParams );		
-	}
-
-
-void CSimPacketContext::GetActivateSettings()
-	{
-	TInt ret;
-	const CTestConfigItem* item=CfgFile()->Item(KActivatePauseDuration); //< Find the Activate data item
-	if(item)
-		{										//< then retrieve the activation pause
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,iActivatePause);
-		if(ret!=KErrNone)
-			iActivatePause = KDefaultPauseDuration;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,iActivateFail);
-		if(ret==KErrNotFound)
-			iActivateFail = KErrNone;
-		}
-
-	item=CfgFile()->Item(KDeactivatePauseDuration);	//< Find the Deactivate data item
-	if(item)
-		{											//< then retrieve the deactivation pause
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,iDeactivatePause);
-		if(ret!=KErrNone)
-			iDeactivatePause = KDefaultPauseDuration;
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,iDeactivateFail);
-		if(ret==KErrNotFound)
-			iDeactivateFail = KErrNone;
-		}
-
-	item=CfgFile()->Item(KDeletePauseDuration);	//< Find the Delete data item
-	if(item)
-		{										//< then retrieve the delete pause
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,iDeletePause);
-		if(ret!=KErrNone)
-			iDeletePause = KDefaultPauseDuration;
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,iDeleteFail);
-		if(ret==KErrNotFound)
-			iDeleteFail = KErrNone;
-		}
-	}
-	
-void CSimPacketContext::GetSetConfigSettings()
-	{
-	iSetConfigDelay = 0;
-	const CTestConfigItem* item=iPacketService->CfgFile()->Item(KSetConfigDelay);
-	if(item)
-		{
-		TInt delay = 0;
-		TInt ret = CTestConfig::GetElement(item->Value(),KStdDelimiter,0,delay);
-
-		if(ret != KErrNone || delay < 0)
-			{
-			LOGPARSERR("SetConfigDelay",ret,0,&KSetConfigDelay);
-			}
-		else
-			{
-			iSetConfigDelay = delay;
-			}
-		}
-
-	item=iPacketService->CfgFile()->Item(KSetConfigFail);	// Set the SetConfigFail struct
-	if(item)
-		{
-		TPtrC8 contextName, numberOfTimes, failErrorCode;
-		TInt32 digit = 0;
-		TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::contextName",ret,0,&KSetConfigFail);
-			}
-		else
-			{
-				iSetConfigFail.iContextName.Copy(contextName);
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KSetConfigFail);
-			}
-		else
-			{
-				if(AsciiToNum(numberOfTimes, digit)==KErrNone)
-					iSetConfigFail.iNumberOfTimes = digit;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KSetConfigFail);
-			}
-		else
-			{
-				if(AsciiToNum(failErrorCode, digit)==KErrNone)
-					iSetConfigFail.iFailErrorCode = digit;
-			}
-		}
-	}
-	
-void CSimPacketContext::GetContextConfigChangeSettingsL()
-	{
-	TNotifyContextConfigChangeData configChangeData;
-	
-	TUint count = CfgFile()->ItemCount(KNotifyContextConfigChange);
-	TInt index;
-	for(index = 0; index < count; index++)
-		{
-		const CTestConfigItem *item = 
-			CfgFile()->Item(KNotifyContextConfigChange,index);
-		
-		if(!item)
-			{
-			break;
-			}
-		
-		//Get the Notify Context Config Change Delay value
-		TInt ret = CTestConfig::GetElement(item->Value(),KStdDelimiter,0,
-					configChangeData.iDelay);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("NotifyContextConfigChange::delay",ret,0,&KNotifyContextConfigChange);
-			continue;
-			}
-			
-		//Get the Notify Context Config Change, config index value
-		ret = CTestConfig::GetElement(item->Value(),KStdDelimiter,1,
-					configChangeData.iNewContextConfigIndex);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("NotifyContextConfigChange::NewContextConfigIndex",
-						ret,0,&KNotifyContextConfigChange);
-			continue;		
-			}
-	
-		iNotifyContextConfigChangeArray->AppendL(configChangeData);
-		}
-	}
-
-void CSimPacketContext::GetPacketFilterSettings()
-	{
-	TInt ret;
-	const CTestConfigItem* item=iPacketService->CfgFile()->Item(KDeleteTftFail);
-	if(item)
-	{
-		TPtrC8 contextName, numberOfTimes, failErrorCode;
-		TInt32 digit = 0;
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::contextName",ret,0,&KDeleteTftFail);
-			}
-		else
-			{
-			iDeleteTftFail.iContextName.Copy(contextName);
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KDeleteTftFail);
-			}
-		else
-		{
-			if(AsciiToNum(numberOfTimes, digit)==KErrNone)
-				iDeleteTftFail.iNumberOfTimes = digit;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KDeleteTftFail);
-			}
-		else
-			{
-			if(AsciiToNum(failErrorCode, digit)==KErrNone)
-				iDeleteTftFail.iFailErrorCode = digit;
-			}
-	}
-
-	item=iPacketService->CfgFile()->Item(KCreateTftConfig);
-	if(item)
-	{
-		TPtrC8 contextName, numberOfTimes, failErrorCode;
-		TInt32 digit = 0;
-		TInt delay = 0;
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::contextName",ret,0,&KCreateTftConfig);
-			}
-		else
-			{
-			iCreateTftConfig.iContextName.Copy(contextName);
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KCreateTftConfig);
-			}
-		else
-			{
-			if(AsciiToNum(numberOfTimes, digit)==KErrNone)
-				iCreateTftConfig.iNumberOfFailures = digit;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KCreateTftConfig);
-			}
-		else
-			{
-			if(AsciiToNum(failErrorCode, digit)==KErrNone)
-				iCreateTftConfig.iFailErrorCode = digit;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,delay);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::failErrorCode",ret,3,&KCreateTftConfig);
-			}
-		else
-			{
-			iCreateTftConfig.iDelay = delay;
-			}
-	}
-
-	item=iPacketService->CfgFile()->Item(KAddPacketFilter);
-	if(item)
-	{
-		TPtrC8 contextName, numberOfTimes, failErrorCode;
-		TInt32 digit = 0;
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::contextName",ret,0,&KAddPacketFilter);
-			}
-		else
-			{
-			iAddPacketFilter.iContextName.Copy(contextName);
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KAddPacketFilter);
-			}
-		else
-			{
-			if(AsciiToNum(numberOfTimes, digit)==KErrNone)
-				iAddPacketFilter.iNumberOfTimes = digit;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KAddPacketFilter);
-			}
-		else
-			{
-			if(AsciiToNum(failErrorCode, digit)==KErrNone)
-				iAddPacketFilter.iFailErrorCode = digit;
-			}
-
-		}
-	}
-	
-void CSimPacketContext::GetContextConfigRel99SettingsL()
-	{
-	iContextConfigsRel99 = new(ELeave) CArrayFixFlat<TRel99ContextConfig>(KNumberofConfigs);
-
-	TInt count = CfgFile()->ItemCount(KContextConfigRel99);		// set up the Rel 99 context configuration parameters
-	for(TInt i=0;i<count;i++)
-		{
-		const CTestConfigItem* item = CfgFile()->Item(KContextConfigRel99,i);
-		if(!item)
-			break;
-			
-		TPtrC8 contextName;
-		TInt activatePause, activateErrorCode, aDeactivatePause, deactivateErrorCode, deletionPause;
-		TInt deletionErrorCode;
-		TBool connectToNtRas;
-		TRel99ContextConfig contextConfigRel99;
-
-		TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::contextName",ret,0,KContextConfigRel99);
-			}
-		else
-			{
-				contextConfigRel99.iContextName.Copy(contextName);
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,activatePause);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::activatePause",ret,1,&KContextConfigRel99);
-			continue;
-			}
-		else
-			contextConfigRel99.iActivatePause = activatePause;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,activateErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::activateErrorCode",ret,2,&KContextConfigRel99);
-			continue;
-			}
-		else
-			contextConfigRel99.iActivateErrorCode = activateErrorCode;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,aDeactivatePause);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::deactivatePause",ret,3,&KContextConfigRel99);
-			continue;
-			}
-		else
-			contextConfigRel99.iDeactivatePause = aDeactivatePause;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,deactivateErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::deactivateErrorCode",ret,4,&KContextConfigRel99);
-			continue;
-			}
-		else
-			contextConfigRel99.iDeactivateErrorCode = deactivateErrorCode;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,deletionPause);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::deletetionPause",ret,5,&KContextConfigRel99);
-			continue;
-			}
-		else
-			contextConfigRel99.iDeletionPause = deletionPause;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6, deletionErrorCode);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("ContextConfigRel99::deletionErrorCode",ret,6,&KContextConfigRel99);
-			continue;
-			}
-		else
-			contextConfigRel99.iDeletionErrorCode =  deletionErrorCode;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7, connectToNtRas);
-		if(ret!=KErrNone)
-			{
-			contextConfigRel99.iConnectToNtRas =  ETrue;
-			}
-		else
-			contextConfigRel99.iConnectToNtRas =  connectToNtRas;
-
-		iContextConfigsRel99->AppendL(contextConfigRel99);
-		}
-	}
-
-/**
- Retrieves the (aIndex+1)th packet context status with the current context's context name
- ie. if aIndex is 0, the 1st context status entry is returned and if aIndex is 1, the 2nd is returned
- */
-TNotifyContextStatusChange& CSimPacketContext::GetContextStatusChangeAt(TInt aIndex)
-	{
-	TInt count = 0;
-	for (TInt i = 0; i < iNotifyContextStatusChangeArray->Count(); i++)
-		{
-		if (iContextName.Compare(iNotifyContextStatusChangeArray->At(i).iContextName) == 0)
-			{
-			if (count == aIndex)
-				{
-				return iNotifyContextStatusChangeArray->At(i);
-				}
-			else
-				{
-				count++;
-				}
-			}
-		}
-	return iNotifyContextStatusChangeArray->At(0);
-	}
-
-/**
- Retrieves the number of context status changes entries configured for the current packet context
- */
-TInt CSimPacketContext::GetContextStatusChangeCount()
-	{
-	TInt count = 0;
-	for (TInt i = 0; i < iNotifyContextStatusChangeArray->Count(); i++)
-		{
-		if (iContextName.Compare(iNotifyContextStatusChangeArray->At(i).iContextName) == 0)
-			{
-			count++;
-			}
-		}
-	return count;
-	}
-	
-void CSimPacketContext::GetContextStatusChangeSettingsL()
-	{
-	TPtrC8 contextStatusChangeType;
-	TInt ret;
-	
-	iNotifyContextStatusChangeArray = new (ELeave) CArrayFixFlat<TNotifyContextStatusChange>(KNumberofConfigs);
-
-	// default to using timer to drive context status changes
-	iNotifyContextStatusChangeType = ETimer;
-	const CTestConfigItem* item = CfgFile()->Item(KNotifyContextStatusChangeType);
-	if (item)
-		{
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextStatusChangeType);
-		if(ret==KErrNone && contextStatusChangeType.Compare(KNotificationTypePublishSubscribe)==0)
-			iNotifyContextStatusChangeType = EPublishAndSubscribe;
-		}
-	
-	TInt count = CfgFile()->ItemCount(KNotifyContextStatusChange);		
-
-	for(TInt i=0;i<count;i++)							// set up NotifyContextStatusChange info
-		{
-		item = CfgFile()->Item(KNotifyContextStatusChange,i);
-		if(!item)
-			break;
-
-		TNotifyContextStatusChange notifyContextStatusChange;
-		TPtrC8 contextName;
-		TInt duration, contextStatus;
-		
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("NotifyContextStatusChange::contextName",ret,0,&KNotifyContextStatusChange);
-			continue;
-			}
-		else
-			{
-				notifyContextStatusChange.iContextName.Copy(contextName);
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,duration);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("NotifyContextStatusChange::duration",ret,1,&KNotifyContextStatusChange);
-			continue;
-			}
-		else
-			notifyContextStatusChange.iDuration = duration;
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,contextStatus);
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("NotifyContextStatusChange::duration",ret,2,&KNotifyContextStatusChange);
-			continue;
-			}
-		else
-			notifyContextStatusChange.iStatus = (RPacketContext::TContextStatus)contextStatus;		
-
-		iNotifyContextStatusChangeArray->AppendL(notifyContextStatusChange);
-
-		if(GetContextStatusChangeCount() != 0)
-			{
-			iCurrentNotifyContextStatusChange=(RPacketContext::TContextStatus)GetContextStatusChangeAt(0).iStatus;
-			if (iNotifyContextStatusChangeType == ETimer)
-				{
-				iNotifyContextStatusChangeIndex=0;
-				iNotifyContextStatusChangeTimer->Start(GetContextStatusChangeAt(0).iDuration,this,ETimerIdPcktContextStatusChange);
-				}
-			}
-		}
-	}
-
-void CSimPacketContext::ConstructPacketFiltersL()
-	{
-	iPacketFilterInfoArray = new (ELeave) CArrayFixFlat<TPacketFilterV3>(KNumberofConfigs);
-
-	const CTestConfigItem* item;
-	TInt count, ret;
-	count = CfgFile()->ItemCount(KPacketFilterInfo);		
-
-	for(TInt i=0;i<count;i++)							// set up Packet filter info
-		{
-		item = CfgFile()->Item(KPacketFilterInfo,i);
-		if(!item)
-			break;
-
-		TPtrC8 srcAddr, srcAddrSubnetMask;
-		TInt id, evaluationPrecedenceIndex, protocolNumberOrNextHeader;
-		TInt srcPortMin, srcPortMax, destPortMin, destPortMax, ipSecSPI, toSorTrafficClass;
-		TInt flowLabel, filterType; 
-		TPacketFilterV3 packetFilter;
-
-		// Check that the data structure is supported by the simulated TSY version
-		if(iPhone->iSimTsyVersion < 3) // same version as TPacketFilterVx
-			{
-		 	(void)User::Leave(KErrNotSupported);
-			}
-		
-		
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,id);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::id",ret,0,&KPacketFilterInfo);
-			continue;	
-			}
-		else
-			{
-			packetFilter.iId= id;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,evaluationPrecedenceIndex);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::evaluationPrecedenceIndex",ret,1,&KPacketFilterInfo);
-			continue;	
-			}
-		else
-			{
-			packetFilter.iEvaluationPrecedenceIndex= evaluationPrecedenceIndex;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,srcAddr);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::srcAddr",ret,2,&KPacketFilterInfo);
-			continue;
-			}
-		else
-			{
-			TUint8 digit=0;
-			TPtrC8 address;
-
-			ret=CTestConfig::GetElement(srcAddr,'.',0, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[0] = digit;
-			else
-				packetFilter.iSrcAddr[0] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',1, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[1] = digit;
-			else
-				packetFilter.iSrcAddr[1] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',2, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[2] = digit;
-			else
-				packetFilter.iSrcAddr[2] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',3, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[3] = digit;
-			else
-				packetFilter.iSrcAddr[3] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',4, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[4] = digit;
-			else
-				packetFilter.iSrcAddr[4] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',5, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[5] = digit;
-			else
-				packetFilter.iSrcAddr[5] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',6, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[6] = digit;
-			else
-				packetFilter.iSrcAddr[6] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',7, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[7] = digit;
-			else
-				packetFilter.iSrcAddr[7] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',8, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[8] = digit;
-			else
-				packetFilter.iSrcAddr[8] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',9, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[9] = digit;
-			else
-				packetFilter.iSrcAddr[9] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',10, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[10] = digit;
-			else
-				packetFilter.iSrcAddr[10] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',11, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[11] = digit;
-			else
-				packetFilter.iSrcAddr[11] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',12, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[12] = digit;
-			else
-				packetFilter.iSrcAddr[12] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',13, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[13] = digit;
-			else
-				packetFilter.iSrcAddr[13] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',14, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[14] = digit;
-			else
-				packetFilter.iSrcAddr[14] = 0;
-			ret=CTestConfig::GetElement(srcAddr,'.',15, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddr[15] = digit;
-			else
-				packetFilter.iSrcAddr[15] = 0;
-			
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,srcAddrSubnetMask);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::srcAddrSubnetMask",ret,3,&KPacketFilterInfo);
-			continue;
-			}
-		else
-			{
-			TUint8 digit=0;
-			TPtrC8 address;
-
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',0, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[0] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[0] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',1, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[1] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[1] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',2, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[2] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[2] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',3, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[3] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[3] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',4, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[4] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[4] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',5, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[5] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[5] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',6, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[6] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[6] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',7, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[7] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[7] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',8, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[8] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[8] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',9, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[9] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[9] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',10, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[10] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[10] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',11, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[11] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[11] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',12, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[12] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[12] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',13, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[13] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[13] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',14, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[14] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[14] = 0;
-			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',15, address);
-			if((AsciiToNum(address, digit)==KErrNone)
-				&& (ret == KErrNone))
-				packetFilter.iSrcAddrSubnetMask[15] = digit;
-			else
-				packetFilter.iSrcAddrSubnetMask[15] = 0;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,protocolNumberOrNextHeader);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::protocolNumberOrNextNumber",ret,4,&KPacketFilterInfo);
-			packetFilter.iProtocolNumberOrNextHeader = KUnsetInteger;				
-			}
-		else
-			{
-			packetFilter.iProtocolNumberOrNextHeader= protocolNumberOrNextHeader;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,srcPortMin);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::srcPortMin",ret,5,&KPacketFilterInfo);
-			packetFilter.iSrcPortMin = KUnsetInteger;
-			}
-		else
-			{
-			packetFilter.iSrcPortMin= srcPortMin;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6,srcPortMax);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::srcPortMax",ret,6,&KPacketFilterInfo);
-			packetFilter.iSrcPortMax = KUnsetInteger;
-			}
-		else
-			{
-			packetFilter.iSrcPortMax= srcPortMax;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7,destPortMin);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::destPortMin",ret,7,&KPacketFilterInfo);
-			packetFilter.iDestPortMin = KUnsetInteger;
-			}
-		else
-			{
-			packetFilter.iDestPortMin= destPortMin;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,8,destPortMax);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::srcPortMax",ret,8,&KPacketFilterInfo);
-			packetFilter.iDestPortMax = KUnsetInteger;
-			}
-		else
-			{
-			packetFilter.iDestPortMax= destPortMax;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,9,ipSecSPI);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::ipSecSPI",ret,9,&KPacketFilterInfo);
-			packetFilter.iIPSecSPI = KUnsetInteger;
-			}
-		else
-			{
-			packetFilter.iIPSecSPI= ipSecSPI;
-			}
-	
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,10,toSorTrafficClass);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::toSorTrafficClass",ret,10,&KPacketFilterInfo);
-			continue;
-			}
-		else
-			{
-			packetFilter.iTOSorTrafficClass = (TUint16)toSorTrafficClass;
-			}
-
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,11,flowLabel);
-
-		if(ret!=KErrNone)
-			{
-			LOGPARSERR("PacketFilterInfo::flowLabel",ret,11,&KPacketFilterInfo);
-			packetFilter.iFlowLabel = KUnsetInteger;
-			}
-		else
-			{
-			packetFilter.iFlowLabel = flowLabel;
-			}
-		
-		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,12,filterType);
-
-		if(ret!=KErrNone)
-			{
-			if(ret == KErrNotFound)
-				{
-				LOGCONFIG1("CONFIGURATION FILE PARSING - PacketFilterInfo::TPacketFilterV2 info encountered");
-				packetFilter.iFilterType = RPacketContext::EPacketFilterTypeUnknown;
-				}
-			else
-				{
-				LOGPARSERR("PacketFilterInfo::filterType",ret,12,&KPacketFilterInfo);
-				continue;	
-				}
-			}
-		else
-			{
-			packetFilter.iFilterType = static_cast<RPacketContext::TPacketFilterType>(filterType);
-			}
-					
-		packetFilter.iAdded = EFalse;
-		TRAP_IGNORE(iPacketFilterInfoArray->AppendL(packetFilter));
-		}
-	}
-
-CSimPacketContext::~CSimPacketContext()
-/**
-* Trivial Destructor
-* Closes all CObject type objects and destroys all other objects created in the ConstructL()
-*
-*/
-	{
-	LOGPACKET1("CSimPacketContext: Entered destructor");
-	
-	if (iContextConfigParams != NULL)
-	{
-		iContextConfigParams->Delete(0, iContextConfigParams->Count());
-		delete iContextConfigParams;
-	}
-	if (iContextConfigsRel99 != NULL)
-	{
-		iContextConfigsRel99->Delete(0,iContextConfigsRel99->Count());
-		delete iContextConfigsRel99;
-	}
-	if (iCommSetupArray != NULL)
-	{
-		iCommSetupArray->Delete(0, iCommSetupArray->Count());
-		delete iCommSetupArray;
-	}
-	if (iNtRas != NULL)
-		delete iNtRas;
-	
-	if (iTimer != NULL)
-		delete iTimer;
-
-	if (iSetConfigTimer != NULL)
-		delete iSetConfigTimer;
-
-	if (iInitContextTimer != NULL)
-		delete iInitContextTimer;
-
-	if (iCreateTftTimer != NULL)
-		delete iCreateTftTimer;
-
-	if (iNotifyContextStatusChangeTimer != NULL)
-		delete iNotifyContextStatusChangeTimer;
-	
-	if (iNotifyContextConfigChangeTimer != NULL)
-		delete iNotifyContextConfigChangeTimer;
-
-	if (iPacketFilterInfoArray != NULL)
-	{
-		iPacketFilterInfoArray->Delete(0, iPacketFilterInfoArray->Count());
-		delete iPacketFilterInfoArray;
-	}
-	if (iNotifyContextStatusChangeArray != NULL)
-	{
-		iNotifyContextStatusChangeArray->Delete(0, iNotifyContextStatusChangeArray->Count());
-		delete iNotifyContextStatusChangeArray;
-	}
-	iPacketService->DecrementContextCount();
-
-	if (iAuthorizationTokenResponse != NULL)
-		{
-		iAuthorizationTokenResponse->Delete(0, iAuthorizationTokenResponse->Count());
-		delete iAuthorizationTokenResponse;
-		}
-	
-	if (iMediaAuthorization != NULL)
-		{
-		for(TUint i=0; i<iMediaAuthorization->Count(); i++)
-			{
-			if (iMediaAuthorization->At(i).iFlowIds.Count() > 0)
-				{
-				iMediaAuthorization->At(i).iFlowIds.Reset();				
-				}
-			}
-		iMediaAuthorization->Delete(0, iMediaAuthorization->Count());
-		delete iMediaAuthorization;
-		}
-	
-	delete iContextStatusChange;
-	
-	if(iSetConfigData !=NULL )
-		{
-		iSetConfigData->Delete(0, iSetConfigData->Count());
-		delete iSetConfigData;
-		}
-	
-	if(iNotifyContextConfigChangeArray !=NULL)
-		{
-		iNotifyContextConfigChangeArray->Delete(0,iNotifyContextConfigChangeArray->Count());
-		delete iNotifyContextConfigChangeArray;
-		}
-}
-
-CTelObject* CSimPacketContext::OpenNewObjectByNameL(const TDesC& aName)
-/**
-* Returns a pointer to an existing QoS object identified by name.
-* This is not support and if called will leave.
-*
-* @param aName name of the QoS object to be opened
-* @return CTelObject will return null and leave
-* @leave Leaves with KErrNotSupported if the name is not as expected.
-*/
-	{
-		if (aName.Compare(iQoSName) == KErrNone)
-			{
-				return iPacketqos;
-			}
-
-		User::Leave(KErrNotSupported);
-		return NULL;
-	}
-
-
-CTelObject* CSimPacketContext::OpenNewObjectL(TDes& aNewName)
-/**
-* Creates a new CSimPacketQoS object and returns a pointer to it.
-*
-* @param aNewName new name of the object created
-* @return CTelObject pointer to the CSimPacketQos object created
-* @leave Leaves if out of memory.
-*/
-	{
-	aNewName.Append(KSimPacketQosName);
-	aNewName.AppendNum(++iQoSObjectCount);
-	iQoSName.Copy(aNewName);
-	iPacketqos = CSimPacketQoS::NewL(iPhone, this);
-	return iPacketqos;
-	}
-
-CTelObject::TReqMode CSimPacketContext::ReqModeL(const TInt aIpc)
-/**
-* ReqModeL is called from the server's CTelObject::ReqAnalyserL
-* in order to check the type of request it has.
-* 
-* 
-* @param aIpc the ipc number that identifies the client request
-* @return CTelObject::TReqMode The request mode to be used for this request
-* @leave Leaves if not supported by this tsy
-*/
-	{
-	CTelObject::TReqMode ret=0;
-	switch (aIpc)
-		{
-		case EPacketContextSetConfig:
-		case EPacketContextActivate:
-		case EPacketContextDeactivate:
-		case EPacketContextDelete:
-		case EPacketContextLoanCommPort:
-		case EPacketContextRecoverCommPort:
-		case EPacketContextGetConfig:
-		case EPacketContextGetStatus:
-		case EPacketContextGetDataVolumeTransferred:
-		case EPacketContextGetLastErrorCause:
-		case EPacketContextInitialiseContext:
-		case EPacketContextEnumeratePacketFilters:
-		case EPacketContextGetPacketFilterInfo:
-		case EPacketContextAddPacketFilter:
-		case EPacketContextRemovePacketFilter:
-		case EPacketContextModifyActiveContext:
-		case EPacketContextGetProfileName:
-		case EPacketContextGetDNSInfo:
-		case EPacketAddMediaAuthorization:
-		case EPacketRemoveMediaAuthorization:
-		case EPacketContextCreateNewTFT:
-		case EPacketContextDeleteTFT:
-			break;
-
-		case EPacketContextNotifyConfigChanged:
-		case EPacketContextNotifyStatusChange:
-		case EPacketContextNotifyDataTransferred:
-			ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
-			break;
-
-		default:
-			User::Leave(KErrNotSupported);
-			break;
-		}
-
-	return ret;
-	}
-
-TInt CSimPacketContext::GetProfileName(const TTsyReqHandle aTsyReqHandle, TName* aQoSProfile)
-	{
-/**
-* This synchronous method allows a client to retrieve the name 
-* of the QoS profile. The profile name is passed back in the aQoSProfile parameter
-*/
-	aQoSProfile->Copy(iQoSName);
-	ReqCompleted(aTsyReqHandle,KErrNone);
-	return KErrNone; 
-	}
-
-TInt CSimPacketContext::RegisterNotification(const TInt aIpc)
-/**
-* RegisterNotification is called when the server recognises that this notification
-* is being posted for the first time on this sub-session object.
-* 
-* It enables the TSY to "turn on" any regular notification messages that it may receive 
-* from the phone
-*
-* @param aIpc the ipc number that identifies the client request
-* @return err KErrNone if fine
-*/
-	{
-	switch (aIpc)
-		{
-		case EPacketContextNotifyConfigChanged:
-		case EPacketContextNotifyStatusChange:
-		case EPacketContextNotifyDataTransferred:
-			return KErrNone;
-		default:
-			// Unknown or invalid IPC
-			LOGPACKET1("CSimPacketContext: Register error, unknown IPC");
-			return KErrNotSupported;
-		}
-	}
-
-TInt CSimPacketContext::DeregisterNotification(const TInt aIpc)
-/**
-* DeregisterNotification is called when the server recognises that this notification
-* will not be posted again because the last client to have a handle on this sub-session
-* object has just closed the handle.
-*
-* It enables the TSY to "turn off" any regular notification messages that it may 
-* receive from the phone
-*
-* @param aIpc the ipc number that identifies the client request
-* @return err KErrNone if fine
-*/
-	{
-	switch (aIpc)
-		{
-		case EPacketContextNotifyConfigChanged:
-		case EPacketContextNotifyStatusChange:
-		case EPacketContextNotifyDataTransferred:
-			LOGPACKET1("CSimPacketContext: DeregisterNotification");
-			return KErrNone;
-		default:
-			// Unknown or invalid IPC
-			LOGPACKET1("CSimPacketContext: Deregister error, unknown IPC");
-			return KErrNotSupported;
-		}
-	}
-
-TInt CSimPacketContext::NumberOfSlotsL(const TInt aIpc)
-/**
-* NumberOfSlotsL is called by the server when it is registering a new notification
-* It enables the TSY to tell the server how many buffer slots to allocate for
-* "repost immediately" notifications that may trigger before clients collect them
-*
-* @param aIpc the ipc number that identifies the client request
-* @return err KErrNone if fine
-*/
-	{
-	TInt numberOfSlots=1;
-	switch (aIpc)
-		{
-		case EPacketContextNotifyConfigChanged:
-		case EPacketContextNotifyStatusChange:
-		case EPacketContextNotifyDataTransferred:
-			LOGPACKET1("CGprsDGprsTsy: Registered with 5 slots");
-			numberOfSlots=5;
-			break;
-		default:
-			// Unknown or invalid IPC
-			LOGPACKET1("CSimPacketContext: Number of Slots error, unknown IPC");
-			User::Leave(KErrNotSupported);
-			break;
-		}  
-	return numberOfSlots;
-	}
-
-
-TInt CSimPacketContext::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
-							  const TDataPackage& aPackage)
-/**
-* ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request
-* for the TSY to process.
-* A request handle, request type and request data are passed to the TSY
-* 
-* @param aTsyReqHandle  The request handle for completing the request 
-* @param aIpc Ipc representing the request
-* @param aPackage any data associated with the request
-* @return err KErrNone if request completes ok
-*/
-	{
-	//< if this context has been deleted then the client can not do anything with it
-	//< if the client wants to use this class, the client must open a new object by 
-	//< name with the name for this context and this will reactivate the context.
- 	if(iDeleted && (aIpc != EPacketContextGetStatus))  
-		{
-		ReqCompleted(aTsyReqHandle,KErrNotReady);
-		return KErrNone;
-		}
-
-	TAny* dataPtr=aPackage.Ptr1();
-	TAny* dataPtr2=aPackage.Ptr2();
-
-	switch (aIpc)
-		{
-		case EPacketContextSetConfig:
-			{
-			if (iSetConfigCallCount <= iSetConfigFail.iNumberOfTimes
-				|| iSetConfigFail.iNumberOfTimes==0)
-				{
-				if (iSetConfigDelay > 0)
-					{
-					TSetConfigData setConfigData;
-					setConfigData.iTsyReqHandle = aTsyReqHandle;
-					setConfigData.iData = aPackage.Des1n();
-
-					TRAPD(ret, iSetConfigData->AppendL(setConfigData) );
-					if (ret != KErrNone)
-                		{
-                		LOGPACKET1("CSimPacketContext::ExtFunc AppendL call fail");
-                		return ret;
-                		}
-                		
-					iSetConfigTimer->Start(iSetConfigDelay,this,ETimerIdPcktContextSetConfig);
-					}
-				else
-					{
-					SetConfig(aTsyReqHandle, aPackage.Des1n());
-					}
-				iSetConfigCallCount++;
-				return KErrNone;
-			}
-			else
-				{
-				iSetConfigCallCount=0;
-				iSetConfigFail.iNumberOfTimes = 0;
-
-				ReqCompleted(aTsyReqHandle, iSetConfigFail.iFailErrorCode);
-				return KErrNone;				// if SetConfig() has been called the number of times allowed in SetConfigFail, fail request
-				}
-			}
-		case EPacketContextGetProfileName:
-			return GetProfileName(aTsyReqHandle, REINTERPRET_CAST(TName*,dataPtr));
-		case EPacketContextSetConfigCancel:
-			return SetConfigCancel(aTsyReqHandle);
-		case EPacketContextGetConfig:
-			return GetConfig(aTsyReqHandle, aPackage.Des1n());
-		case EPacketContextGetConfigCancel:
-			return GetConfigCancel(aTsyReqHandle);
-		case EPacketContextNotifyConfigChanged:
-			return NotifyConfigChanged(aTsyReqHandle, aPackage.Des1n());
-		case EPacketContextNotifyConfigChangedCancel:
-			return NotifyConfigChangedCancel(aTsyReqHandle);
-		case EPacketContextActivate:
-			{	//< Ensures that theres only one context active as only one active context is 
-				//<permitted at any one time
-			if(iIsActive)
-				{
-				ReqCompleted(aTsyReqHandle,KErrEtelCallAlreadyActive);
-				return KErrNone;
-				}
-			else
-				return Activate(aTsyReqHandle);
-			}
-		case EPacketContextActivateCancel:
-			return ActivateCancel(aTsyReqHandle);
-		case EPacketContextDeactivate:
-			return Deactivate(aTsyReqHandle);
-		case EPacketContextDeactivateCancel:
-			return DeactivateCancel(aTsyReqHandle);
-		case EPacketContextDelete:
-			return Delete(aTsyReqHandle);
-		case EPacketContextDeleteCancel:
-			return DeleteCancel(aTsyReqHandle);
-		case EPacketContextLoanCommPort:
-			return LoanCommPort(aTsyReqHandle,
-			REINTERPRET_CAST(RCall::TCommPort*, dataPtr));
-		case EPacketContextLoanCommPortCancel:
-			return LoanCommPortCancel(aTsyReqHandle);
-		case EPacketContextRecoverCommPort:
-			return RecoverCommPort(aTsyReqHandle);
-		case EPacketContextRecoverCommPortCancel:
-			return RecoverCommPortCancel(aTsyReqHandle);
-		case EPacketContextGetStatus:
-			return GetStatus(aTsyReqHandle,
-			REINTERPRET_CAST(RPacketContext::TContextStatus*, dataPtr));
-		case EPacketContextNotifyStatusChange:
-			return NotifyStatusChange(aTsyReqHandle,
-			REINTERPRET_CAST(RPacketContext::TContextStatus*, dataPtr));
-		case EPacketContextNotifyStatusChangeCancel:
-			return NotifyStatusChangeCancel(aTsyReqHandle);
-		case EPacketContextGetDataVolumeTransferred:
-			return GetDataVolumeTransferred(aTsyReqHandle,
-			REINTERPRET_CAST(RPacketContext::TDataVolume*, dataPtr));
-		case EPacketContextNotifyDataTransferred:
-			return NotifyDataTransferred(aTsyReqHandle,
-			REINTERPRET_CAST(RPacketContext::TDataVolume*, dataPtr),
-			REINTERPRET_CAST(RPacketContext::TNotifyDataTransferredRequest*, dataPtr2));
-		case EPacketContextNotifyDataTransferredCancel:
-			return NotifyDataTransferredCancel(aTsyReqHandle);
-		case EPacketContextGetLastErrorCause:
-			return GetLastErrorCause(aTsyReqHandle,
-			REINTERPRET_CAST(TInt*, dataPtr));
-		case EPacketContextInitialiseContextCancel:
-			return InitialiseContextCancel(aTsyReqHandle);
-		case EPacketContextEnumeratePacketFiltersCancel:
-			return EnumeratePacketFiltersCancel(aTsyReqHandle);
-		case EPacketContextGetPacketFilterInfoCancel:
-			return GetPacketFilterInfoCancel(aTsyReqHandle);
-		case EPacketContextAddPacketFilterCancel:
-			return AddPacketFilterCancel(aTsyReqHandle);
-		case EPacketContextRemovePacketFilterCancel:
-			return RemovePacketFilterCancel(aTsyReqHandle);
-		case EPacketContextModifyActiveContextCancel:
-			return ModifyActiveContextCancel(aTsyReqHandle);		
-		case EPacketContextInitialiseContext:
-			return InitialiseContext(aTsyReqHandle, aPackage.Des1n());
-		case EPacketContextEnumeratePacketFilters:
-			return EnumeratePacketFilters(aTsyReqHandle, *REINTERPRET_CAST(TInt*, dataPtr));
-		case EPacketContextGetPacketFilterInfo:
-			TInt retValue;
-			TRAPD(err, retValue = GetPacketFilterInfoL(aTsyReqHandle, *REINTERPRET_CAST(TInt*, dataPtr), aPackage.Des2n()));
-			if(err != KErrNone)
-				{
-				retValue = err;
-				}
-			return retValue;
-		case EPacketContextAddPacketFilter:
-			return AddPacketFilter(aTsyReqHandle, aPackage.Des1n());
-		case EPacketContextRemovePacketFilter:
-			return RemovePacketFilter(aTsyReqHandle, *REINTERPRET_CAST(TInt*, dataPtr));
-		case EPacketContextModifyActiveContext:
-			return ModifyActiveContext(aTsyReqHandle);
-		case EPacketContextGetDNSInfo:
-			return GetDnsInfo(aTsyReqHandle, aPackage.Des1n());
-		case EPacketContextGetDNSInfoCancel:
-			return GetDnsInfoCancel(aTsyReqHandle);
-		case EPacketAddMediaAuthorization:
-			return GetAddMediaAuthorization(aTsyReqHandle, aPackage.Des1n());
-		case EPacketAddMediaAuthorizationCancel:
-			return GetAddMediaAuthorizationCancel(aTsyReqHandle);
-		case EPacketRemoveMediaAuthorization:
-			return GetRemoveMediaAuthorization(aTsyReqHandle, reinterpret_cast<RPacketContext::TAuthorizationToken*>(dataPtr));
-		case EPacketRemoveMediaAuthorizationCancel:
-			return GetRemoveMediaAuthorizationCancel(aTsyReqHandle);
-		case EPacketContextCreateNewTFT:
-			return CreateNewTFT(aTsyReqHandle, REINTERPRET_CAST(TInt*, dataPtr));
-		case EPacketContextCreateNewTFTCancel:
-			return CreateNewTFTCancel(aTsyReqHandle);
-		case EPacketContextDeleteTFT:
-			return DeleteTFT(aTsyReqHandle);
-		case EPacketContextDeleteTFTCancel:
-			return DeleteTFTCancel(aTsyReqHandle);
-		default:
-			return KErrNotSupported;
-		}
-	}
-
-TInt CSimPacketContext::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
-/**
-* CancelService is called by the server when it is "cleaning-up" any still outstanding
-* asynchronous requests before closing a client's sub-session.
-* This will happen if a client closes its R-class handle without cancelling outstanding asynchronous requests.
-* 
-* @param aTsyReqHandle  The request handle for completing the request 
-* @param aIpc Ipc representing the request
-* @return err KErrNone if request completes ok
-*/
-	{
-	LOGPACKET1("CSimPacketContext: - CancelService called");
-	switch (aIpc)
-		{
-		case EPacketContextSetConfig:
-			return SetConfigCancel(aTsyReqHandle);
-		case EPacketContextGetConfig:
-			return GetConfigCancel(aTsyReqHandle);
-		case EPacketContextNotifyConfigChanged:
-			return NotifyConfigChangedCancel(aTsyReqHandle);
-		case EPacketContextActivate:
-			return ActivateCancel(aTsyReqHandle);
-		case EPacketContextDeactivate:
-			return DeactivateCancel(aTsyReqHandle);
-		case EPacketContextDelete:
-			return DeleteCancel(aTsyReqHandle);
-		case EPacketContextLoanCommPort:
-			return LoanCommPortCancel(aTsyReqHandle);
-		case EPacketContextRecoverCommPort:
-			return RecoverCommPortCancel(aTsyReqHandle);
-		case EPacketContextNotifyStatusChange:
-			return NotifyStatusChangeCancel(aTsyReqHandle);
-		case EPacketContextNotifyDataTransferred:
-			return NotifyDataTransferredCancel(aTsyReqHandle);
-		case EPacketContextInitialiseContext:
-			return InitialiseContextCancel(aTsyReqHandle);
-		case EPacketContextEnumeratePacketFilters:
-			return EnumeratePacketFiltersCancel(aTsyReqHandle);
-		case EPacketContextGetPacketFilterInfo:
-			return GetPacketFilterInfoCancel(aTsyReqHandle);
-		case EPacketContextAddPacketFilter:
-			return AddPacketFilterCancel(aTsyReqHandle);
-		case EPacketContextRemovePacketFilter:
-			return RemovePacketFilterCancel(aTsyReqHandle);
-		case EPacketContextModifyActiveContext:
-			return ModifyActiveContextCancel(aTsyReqHandle);
-		case EPacketContextGetDNSInfo:
-			return GetDnsInfoCancel(aTsyReqHandle);
-		case EPacketAddMediaAuthorization:
-			return GetAddMediaAuthorizationCancel(aTsyReqHandle);
-		case EPacketRemoveMediaAuthorization:
-			return GetRemoveMediaAuthorizationCancel(aTsyReqHandle);		
-		case EPacketContextCreateNewTFT:
-			return CreateNewTFTCancel(aTsyReqHandle);
-		case EPacketContextDeleteTFT:
-			return DeleteTFTCancel(aTsyReqHandle);
-		default:
-			return KErrGeneral; 
-		} 
-	}
-
-TInt CSimPacketContext::TSetConfigData::Find(CArrayFixFlat<TSetConfigData>* aSetConfigArray, TTsyReqHandle aTsyReqHandle, TInt& aIndex)
-	{
-	for (TInt i = 0; i < aSetConfigArray->Count(); i++)
-		{
-		if (aSetConfigArray->At(i).iTsyReqHandle == aTsyReqHandle)
-			{
-			aIndex = i;
-			return KErrNone;
-			}
-		}
-	aIndex = -1;
-	return KErrNotFound;
-	}
-
-TInt CSimPacketContext::SetConfig(const TTsyReqHandle aTsyReqHandle,const TDesC8* aConfig)
-/**
-* Sets the configuration
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aConfig pointer containing the parameters to set to.
-* @return KErrNone
-
-*/
-	{
-	LOGPACKET1("CSimPacketContext::SetConfig called");
-
-	TPckg<TPacketDataConfigBase>* configBase = (TPckg<TPacketDataConfigBase>*)aConfig;
-	TPacketDataConfigBase& configBaseV1 = (*configBase)();
-
-	TInt err = KErrGeneral;
-
-	//Extract the config params to be set
-	TContextConfigParam contextConfigToSet;
-
-	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
-		{
-		TPckg<RPacketContext::TContextConfigGPRS>* configParam = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
-		RPacketContext::TContextConfigGPRS& contextConfigV1 = (*configParam)();
-
-		CSimContextHelper::SetTContextConfigParamFromTContextConfigGPRS( contextConfigToSet, contextConfigV1 );		
-		}
-		
-	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
-		{
-		TPckg<RPacketContext::TContextConfigR99_R4>* configParam = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
-		RPacketContext::TContextConfigR99_R4& contextConfigV1 = (*configParam)();
-
-		CSimContextHelper::SetTContextConfigParamFromTContextConfigR99_R4( contextConfigToSet, contextConfigV1 );		
-		}
-		
-	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
-		{
-		TPckg<RPacketContext::TContextConfig_R5>* configParam = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
-		RPacketContext::TContextConfig_R5& contextConfigV1 = (*configParam)();
-
-		CSimContextHelper::SetTContextConfigParamFromTContextConfig_R5( contextConfigToSet, contextConfigV1 );
-		}
-
-	// Check the context config params to be set with the pre-defined 
-	// list of allowed config params
-	if((configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)||
-		configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4||
-		configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
-		{
-		
-		TInt index;
-		for(index=0; index < iContextConfigParams->Count(); index++)
-			{
-			TContextConfigParam thisConfig = iContextConfigParams->At(index);
-
-			if ( !CSimContextHelper::EqualTContextConfigParam(contextConfigToSet, thisConfig ) )
-				{
-				err = KErrCorrupt;
-				}
-			else
-				{
-				err = KErrNone;
-				iContextConfigParamsIndex = index;
-				
-				//Check for and complete any pending notifications
-				if(iNotifyConfigGPRS.iNotifyPending)
-					{
-					iNotifyConfigGPRS.iNotifyPending=EFalse;
-					CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigGPRS*)iNotifyConfigGPRS.iNotifyData);
-					ReqCompleted(iNotifyConfigGPRS.iNotifyHandle,KErrNone);
-					}
-					
-				if(iNotifyConfigR99.iNotifyPending)
-					{
-					iNotifyConfigR99.iNotifyPending=EFalse;
-					CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigR99_R4*)iNotifyConfigR99.iNotifyData);
-					ReqCompleted(iNotifyConfigR99.iNotifyHandle,KErrNone);						
-					}
-					
-				if(iNotifyConfigR5.iNotifyPending)
-					{
-					iNotifyConfigR5.iNotifyPending=EFalse;
-					CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfig_R5*)iNotifyConfigR5.iNotifyData);
-					ReqCompleted(iNotifyConfigR5.iNotifyHandle,KErrNone);						
-					}
-				break;
-				}
-			}//end for loop
-		ReqCompleted(aTsyReqHandle,err);
-		}//end if((configBaseV1....
-
-	else
-		{
-		ReqCompleted(aTsyReqHandle,KErrCorrupt);
-		}
-
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::SetConfigCancel(const TTsyReqHandle aTsyReqHandle)
-/**
-* Cancels the Setconfig request.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @return err KErrNone 
-*/
-	{
-	TInt index  = 0;
-	if (TSetConfigData::Find(iSetConfigData, aTsyReqHandle, index) == KErrNone)
-		{
-		iSetConfigData->Delete(index);
-		}
-	if (iSetConfigData->Count() == 0)
-		iSetConfigTimer->Cancel();
-	
-	ReqCompleted(aTsyReqHandle, KErrCancel);
-	
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetConfig(const TTsyReqHandle aTsyReqHandle,TDes8* aConfig)
-/**
-* Retrieves and returns the configuration
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aConfig pointer to the data to retrieve
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::GetConfig called");
-	TPckg<TPacketDataConfigBase>* configBase = (TPckg<TPacketDataConfigBase>*)aConfig;
-	TPacketDataConfigBase& configBaseV1 = (*configBase)();
-	
-	// GPRS configuration
-	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
-		{
-		TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
-
-		TPckg<RPacketContext::TContextConfigGPRS>* contextConfigGPRSPckg = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
-		RPacketContext::TContextConfigGPRS& contextConfigV1 = (*contextConfigGPRSPckg)();
-
-		CSimContextHelper::ConvertConfigParams(config, contextConfigV1);
-		
-		ReqCompleted(aTsyReqHandle,KErrNone);
-		}
-
-	// R99/R4 configuration
-	else if (configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
-		{
-		TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
-
-		TPckg<RPacketContext::TContextConfigR99_R4>* configRel99Pckg = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
-		RPacketContext::TContextConfigR99_R4& configRel99 = (*configRel99Pckg)();
-	
-		CSimContextHelper::ConvertConfigParams(config, configRel99);
-		
-		ReqCompleted(aTsyReqHandle,KErrNone);
-		}
-		
-	// R5 configuration
-	else if (configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
-		{
-		TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
-
-		TPckg<RPacketContext::TContextConfig_R5>* configRel5Pckg = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
-		RPacketContext::TContextConfig_R5& configRel5 = (*configRel5Pckg)();
-
-		CSimContextHelper::ConvertConfigParams(config, configRel5);
-		
-		ReqCompleted(aTsyReqHandle,KErrNone);
-		}
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetConfigCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-/**
-* Cancels the Getconfig request.  This method will do nothing in this version of SimTSY.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @return err KErrNone 
-*/
-	{
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::NotifyConfigChanged(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig)
-/**
-* Records a client interest in being notified of a change in the Context Configuration.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aConfig pointer to the context config to store the config info when the config changes.
-* @return KErrNone
-*/
-	{
-	TPckg<TPacketDataConfigBase>* configBase = (TPckg<TPacketDataConfigBase>*)aConfig;
-	TPacketDataConfigBase& configBaseV1 = (*configBase)();
-	
-	if(configBaseV1.ExtensionId() == TPacketDataConfigBase::KConfigGPRS)
-		{
-		__ASSERT_ALWAYS(!iNotifyConfigGPRS.iNotifyPending,SimPanic(ENotificationAlreadyPending));
-
-		iNotifyConfigGPRS.iNotifyPending = ETrue;
-		iNotifyConfigGPRS.iNotifyHandle = aTsyReqHandle;
-		iNotifyConfigGPRS.iNotifyData = &configBaseV1;
-		}
-	else if(configBaseV1.ExtensionId() == TPacketDataConfigBase::KConfigRel99Rel4)
-		{
-		__ASSERT_ALWAYS(!iNotifyConfigR99.iNotifyPending,SimPanic(ENotificationAlreadyPending));
-
-		iNotifyConfigR99.iNotifyPending = ETrue;
-		iNotifyConfigR99.iNotifyHandle = aTsyReqHandle;
-		iNotifyConfigR99.iNotifyData = &configBaseV1;
-		}
-	else if(configBaseV1.ExtensionId() == TPacketDataConfigBase::KConfigRel5)
-		{
-		__ASSERT_ALWAYS(!iNotifyConfigR5.iNotifyPending,SimPanic(ENotificationAlreadyPending));
-
-		iNotifyConfigR5.iNotifyPending = ETrue;
-		iNotifyConfigR5.iNotifyHandle = aTsyReqHandle;
-		iNotifyConfigR5.iNotifyData = &configBaseV1;
-		}		
-
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::NotifyConfigChangedCancel(const TTsyReqHandle aTsyReqHandle)
-/**
-* Cancel a client's interest in being notified when the context configuration changes
-* This is acheived simply by resetting the flag that indicates a notification is pending.
-* 
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::NotifyConfigChangedCancel called");
-	if(iNotifyConfigGPRS.iNotifyPending &&
-		iNotifyConfigGPRS.iNotifyHandle == aTsyReqHandle)
-		{
-		iNotifyConfigGPRS.iNotifyPending=EFalse;
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-	else if(iNotifyConfigR99.iNotifyPending &&
-		iNotifyConfigR99.iNotifyHandle == aTsyReqHandle)
-		{
-		iNotifyConfigR99.iNotifyPending=EFalse;
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-	else if(iNotifyConfigR5.iNotifyPending &&
-		iNotifyConfigR5.iNotifyHandle == aTsyReqHandle)
-		{
-		iNotifyConfigR5.iNotifyPending=EFalse;
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-		
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::AttemptDeactivateImmediately()
-/**
-* Called when client wishes to Detach when there is an active context.
-* This will deactivate the context immediately from the network.
-* 
-* @return KErrNone if deactivated successfully.
-*/
-	{
-	if((iState==RPacketContext::EStatusActive) || (iState==RPacketContext::EStatusActivating))
-		{
-		iCurrentEvent=EContextEventDeactivate;
-		TInt ret = ChangeState(RPacketContext::EStatusDeactivating);
-			if(ret!=KErrNone)
-				return ret;
-		return ChangeState(RPacketContext::EStatusInactive);
-		}
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::ReActivate(CSimPacketService* aPacketService, const TName& aContextName)
-/**
-* This method is called by the packet Service to Re-Initialise a Deleted context.
-* If the context is deleted then the client cannot retrieve any 
-* infomation or use the context in any way.
-* In order for the client to use the context again, the client must 
-* open an object by name passing
-* the name of this context as a pararemter.
-*
-* @param aPacketService pointer to the parent class CSimPacketService.
-* @param aContextName Must be the same name as the name for this context.
-* @return KErrNone if no problem in re-initialising this context.
-*/
-	{
-	if(iContextName.Compare(aContextName) != KErrNone)
-		{
-		return KErrBadName;
-		}
-		
-	iPacketService = aPacketService;
-
-	if(iDeleted)
-		{
-
-		TInt ret = ChangeState(RPacketContext::EStatusInactive);
-		if (ret != KErrNone)
-			{
-			return ret;
-			}
-
-		iDeleted = EFalse;
-		iContextConfigParamsIndex = 0;
-		iNotifyStatusChange.iNotifyPending = EFalse;
-		iNotifyConfigGPRS.iNotifyPending = EFalse;
-		iNotifyConfigR99.iNotifyPending = EFalse;
-		iNotifyConfigR5.iNotifyPending = EFalse;
-
-		}
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::DoDeactivate()
-/**
-* This method is called when timer events for deactivate context has completed.
-* It will then try to terminate the NTRas Connection.
-*
-* @return KErrNone
-*/
-	{
-	iNotifyContextConfigChangeTimer->Cancel();
-	iNtRas->Terminate();
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::Deactivate(const TTsyReqHandle aTsyReqHandle)
-/**
-* Client calls this method to try to Deactivate an active context.
-* In this method, we'll store the TsyReqHandle for later completion then call ActionEvent
-* state machine to handle the event which will kick off a timer.
-* The Actual Deactivation will take place in the DoDeactivate method.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::Deactivate called");
-	iDeactivateRequestHandle = aTsyReqHandle;
-	TInt ret;
-	ret = ActionEvent(EContextEventDeactivate,KErrNone);
-	return ret;
-	}
-
-TInt CSimPacketContext::DeactivateCancel(const TTsyReqHandle aTsyReqHandle)
-/**
-* Client calls this method to try and cancel a Deactivate request.
-* This will only complete successfully if and only if the Deactivate request has not completed.
-* i.e. if we haven't already deactivated the context.
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::DeactivateCancel called");
-	if(((iState == RPacketContext::EStatusInactive) || (iState == RPacketContext::EStatusDeactivating)) && 
-					(iCurrentEvent==EContextEventDeactivate))
-		{
-		iTimer->Cancel();
-		iCurrentEvent= EContextEventNone;
-		TInt ret = ChangeState(RPacketContext::EStatusActive);
-		if(ret!= KErrNone)
-			ReqCompleted(aTsyReqHandle,ret);
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-
-	return KErrNone;
-	}
-	
-TInt CSimPacketContext::DoActivate()
-/**
-* This method is called when timer events for Activate context has completed.
-* It will then try to Set up the NtRas Connection and open a port for client use.
-*
-* @return KErrNone
-*/
-	{
-	TCommConfigV01 commConfig;
-	TCommSetupItem item = FindCommSettings();
-
-	if (iPacketqos)
-		{
-		iPacketqos->ClearChangeQoSPending();
-		}
-	commConfig.iRate=item.iConfig.iRate;
-	commConfig.iDataBits=EData8;
-	commConfig.iStopBits=EStop1;
-	commConfig.iHandshake=item.iConfig.iHandshake;
-	iCommReset=item.iCommReset;
-	TInt ras = iNtRas->Connect(item.iCsyName,item.iPortName,commConfig,this);
-	
-	TContextConfigParam thisConfig = iContextConfigParams->At(iContextConfigParamsIndex);
-	
-	// Check for and complete any pending notifications
-	if(iNotifyConfigGPRS.iNotifyPending)
-		{
-		iNotifyConfigGPRS.iNotifyPending=EFalse;
-		CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigGPRS*)iNotifyConfigGPRS.iNotifyData);
-		ReqCompleted(iNotifyConfigGPRS.iNotifyHandle,KErrNone);
-		}
-		
-	if(iNotifyConfigR99.iNotifyPending)
-		{
-		iNotifyConfigR99.iNotifyPending=EFalse;
-		CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigR99_R4*)iNotifyConfigR99.iNotifyData);
-		ReqCompleted(iNotifyConfigR99.iNotifyHandle,KErrNone);						
-		}
-		
-	if(iNotifyConfigR5.iNotifyPending)
-		{
-		iNotifyConfigR5.iNotifyPending=EFalse;
-		CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfig_R5*)iNotifyConfigR5.iNotifyData);
-		ReqCompleted(iNotifyConfigR5.iNotifyHandle,KErrNone);						
-		}
-	
-	// start the timer for the simulated network-side context parameter changes
-	if(iNotifyContextConfigChangeArray->Count() > 0)
-		{
-		TInt delay = (iNotifyContextConfigChangeArray->At(0)).iDelay;
-		iNotifyContextConfigChangeTimer->Start(delay,this,ETimerIdPcktContextConfigChange);
-		}
-
-	return ras;
-	}
-
-
-TInt CSimPacketContext::Activate(const TTsyReqHandle aTsyReqHandle)
-/**
-* Client calls this method to try to Activate a context.
-* In this method, we'll store the TsyReqHandle for later completion then call ActionEvent
-* state machine to handle the event which will kick off a timer.
-* The Actual Activation will take place in the DoActivate method.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @return KErrNone
-*/
-	{
-	iActivateRequestHandle = aTsyReqHandle;
-	TInt ret;
-	ret = ActionEvent(EContextEventActivate,KErrNone);
-	return ret;
-	}
-
-
-TInt CSimPacketContext::ActivateCancel(const TTsyReqHandle aTsyReqHandle)
-/**
-* Client calls this method to try and cancel an Activate request.
-* This will only complete successfully if and only if the Activate request has not completed.
-* i.e. if we haven't already activated the context.
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::ActivateCancel called");
-	if(((iState == RPacketContext::EStatusInactive) || (iState == RPacketContext::EStatusActivating)) && 
-					(iCurrentEvent==EContextEventActivate))
-		{
-		iTimer->Cancel();
-		iCurrentEvent= EContextEventNone;
-		TInt ret = ChangeState(RPacketContext::EStatusInactive);
-		if(ret!= KErrNone)
-			ReqCompleted(aTsyReqHandle,ret);
-		else
-			ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-	else if (iState == RPacketContext::EStatusDeleted)
-		{
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::DoDelete()
-/**
-* This method is called when timer events for Delete context has completed.
-* It will then try to Terminate the NtRas Connection and then set the context as deleted.
-* Once the context is deleted then the client cannot retrieve any information about the context 
-* or use the context.  calling ReActivateContext  will reinstate this context.
-*
-* @return KErrNone
-*/
-	{
-	iDeleted = ETrue;
-	iNtRas->Terminate();
-	iQoSObjectCount--;
-	return KErrNone;
-	}
-
-
-TInt CSimPacketContext::Delete(const TTsyReqHandle aTsyReqHandle)
-/**
-* Client calls this method to try to Delete this context.
-* In this method, we'll store the TsyReqHandle for later completion then call ActionEvent
-* state machine to handle the event which will kick off a timer.
-* The Actual Delete will take place in the DoDelete method.
-*
-* This request will only succeed if the context already exist (had been created) and also not
-* previously deleted.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::Delete called");
-	iDeleteRequestHandle = aTsyReqHandle;
-	TInt ret;
-	ret = ActionEvent(EContextEventDelete,KErrNone);
-	return ret;
-	}
-
-TInt CSimPacketContext::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
-/**
-* Client calls this method to try and cancel a Delete context request.
-* This will only complete successfully if and only if the Delete request has not completed.
-* i.e. if we haven't already Deleted the context.
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::DeleteCancel called");
-	if((iState == RPacketContext::EStatusInactive) && (iCurrentEvent==EContextEventDelete))
-		{
-		iTimer->Cancel();
-		iCurrentEvent= EContextEventNone;
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::LoanCommPort(const TTsyReqHandle aTsyReqHandle,RCall::TCommPort* aDataPort)
-/**
-* The method will return to the client the port it has opened previously in the Activate method
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aDataPort Pointer to the port  and csy name for the opened port.
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::LoanCommPort called");
-
-	if(iState != RPacketContext::EStatusActive)
-		{
-		ReqCompleted(aTsyReqHandle, KErrEtelCallNotActive);
-		return KErrNone;
-		}
-	if (iCommPortLoaned)
-		{
-		ReqCompleted(aTsyReqHandle, KErrEtelPortAlreadyLoaned);
-		return KErrNone;
-		}
-
-		TCommSetupItem item = FindCommSettings();
-		aDataPort->iCsy.Copy(item.iCsyName);
-		aDataPort->iPort.Copy(item.iPortName);
-		iCommPortLoaned = ETrue;
-		ReqCompleted(aTsyReqHandle,KErrNone);
-	
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::LoanCommPortCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-/**
-* Cancels a client loan port request.  This method will do nothing. 
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::LoanCommPortCancel called");
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::RecoverCommPort(const TTsyReqHandle aTsyReqHandle)
-/**
-* In this method we'll try and terminate the NtRas connection and reover the port.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::RecoverCommPort called");
-	if (!iCommPortLoaned)
-		{
-		ReqCompleted(aTsyReqHandle, KErrEtelPortNotLoanedToClient);
-		return KErrNone;
-		}
-	iNtRas->Terminate();
-	iCommPortLoaned = EFalse;
-	ReqCompleted(aTsyReqHandle,KErrNone);
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::RecoverCommPortCancel(const TTsyReqHandle /*aTsyReqHandle*/)	
-/**
-* Attempt to cancel a RecoverCommPort request.  This method does nothing 
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::RecoverCommPortCancel called");
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus)
-/**
-* Retrieves and returns the current status of the Packet context in the aContextStatus parameter.
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @param aContextStatus pointer to the status of the packet context.
-* @return KerrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::GetStatus called");
-	*aContextStatus = iState;
-	ReqCompleted(aTsyReqHandle,KErrNone);
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus)
-/**
-* Record a client's interest in being notified of the state of the packet contexts.
-* First check that there isn't already a notification pending (the ETel Server should protect
-* against this) and then record the information necessary to complete the request later, when
-* the status does actually change.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aContextStatus pointer to the packet context status
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::NotifyStatusChange called");
-	__ASSERT_ALWAYS(!iNotifyStatusChange.iNotifyPending,SimPanic(ENotificationAlreadyPending));
-	iNotifyStatusChange.iNotifyPending = ETrue;
-	iNotifyStatusChange.iNotifyHandle = aTsyReqHandle;
-	iNotifyStatusChange.iNotifyData = aContextStatus;
-	return KErrNone;
-	}
-
-
-
-TInt CSimPacketContext::NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
-/**
-* Cancel a client's interest in being notified when the packet context status changes.
-* This is acheived simply by resetting the flag that indicates a notification is pending.
-* 
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::NotifyStatusChangeCancel called");
-	if(iNotifyStatusChange.iNotifyPending)
-		{
-		iNotifyStatusChange.iNotifyPending=EFalse;
-		ReqCompleted(aTsyReqHandle,KErrCancel);
-		}
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetDataVolumeTransferred(const TTsyReqHandle aTsyReqHandle,RPacketContext::TDataVolume* /*aVolume*/)
-/**
-* Retrieves and returns the to the client the amount of data sent over the serial port.
-* This method is not supported and will request complete with KErrNotSupported
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aVolume pointer to the volume of data trasferred so far.
-* @return KErrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::GetDataVolumeTransferred called");
-	ReqCompleted(aTsyReqHandle,KErrNotSupported);
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::NotifyDataTransferred(const TTsyReqHandle aTsyReqHandle, RPacketContext::TDataVolume* /*aVolume*/, RPacketContext::TNotifyDataTransferredRequest* /*aData*/)
-/**
-* Notifies the client when data is sent or received over the comm port
-* This method is not supported in this version of the TSY.
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aVolume pointer to the volume of data trasferred so far.
-* @param aData indicates to the client whether the data was sent or received.
-* @return KErrNone
-*/
-	{
-	ReqCompleted(aTsyReqHandle,KErrNotSupported);
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::NotifyDataTransferredCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-/**
-* Cancels the NotifyDataTransferred request
-*
-* @param aTsyReqHandle Tsy Request handle for the client cancel request
-* @return KerrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::NotifyDataTransferredCancel called");
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetLastErrorCause(const TTsyReqHandle aTsyReqHandle, TInt* aError)
-/**
-* This method is not supported in this TSY
-*
-* @param aTsyReqHandle Tsy Request handle for the client request
-* @param aError pointer to the last error cause
-* @return KerrNone
-*/
-	{
-	LOGPACKET1("CSimPacketContext::GetLastErrorCause called");
-	*aError = iLastError;
-	ReqCompleted(aTsyReqHandle,iErrorCodeForGetLastErrorCause);
-	iErrorCodeForGetLastErrorCause = KErrNone;
-	return KErrNone;
-	}
-
-void CSimPacketContext::TimerCallBack(TInt aId)
-/**
-* Timer callback function.  When the timer goes off, it will call back into this
-* function for further processing.
-*/
-	{
-	TInt newIndex = KErrNotFound;
-	
-	switch(aId)
-		{
-		case ETimerIdPcktContextStatusChange:
-			TimerCallBackNotifyContextStatusChange();
-			break;
-		case ETimerIdPcktContextSetConfig:
-			SetConfig(iSetConfigData->At(0).iTsyReqHandle, iSetConfigData->At(0).iData);
-			iSetConfigData->Delete(0);
-			if (iSetConfigData->Count() != 0)
-				iSetConfigTimer->Start(iSetConfigDelay,this,ETimerIdPcktContextSetConfig);
-			break;
-		case ETimerIdPcktContextConfigChange:
-			//Check the validity of the new context config param index before applying it
-			newIndex = (iNotifyContextConfigChangeArray->At(0)).iNewContextConfigIndex;
-			if(newIndex <= iContextConfigParams->Count() - 1)
-				{
-				//Change the context config param index to point to the new context configuration
-				iContextConfigParamsIndex = newIndex;
-				
-				// Check for and complete any pending notifications
-				if(iNotifyConfigGPRS.iNotifyPending)
-					{
-					iNotifyConfigGPRS.iNotifyPending=EFalse;
-					CSimContextHelper::ConvertConfigParams(iContextConfigParams->At(iContextConfigParamsIndex), 
-							*(RPacketContext::TContextConfigGPRS*)iNotifyConfigGPRS.iNotifyData);
-					ReqCompleted(iNotifyConfigGPRS.iNotifyHandle,KErrNone);
-					}
-
-				if(iNotifyConfigR99.iNotifyPending)
-					{
-					iNotifyConfigR99.iNotifyPending=EFalse;
-					CSimContextHelper::ConvertConfigParams(iContextConfigParams->At(iContextConfigParamsIndex), 
-							*(RPacketContext::TContextConfigR99_R4*)iNotifyConfigR99.iNotifyData);
-					ReqCompleted(iNotifyConfigR99.iNotifyHandle,KErrNone);						
-					}
-				
-				if(iNotifyConfigR5.iNotifyPending)
-					{
-					iNotifyConfigR5.iNotifyPending=EFalse;
-					CSimContextHelper::ConvertConfigParams(iContextConfigParams->At(iContextConfigParamsIndex), 
-							*(RPacketContext::TContextConfig_R5*)iNotifyConfigR5.iNotifyData);
-					ReqCompleted(iNotifyConfigR5.iNotifyHandle,KErrNone);						
-					}	
-				}
-
-			else
-				{
-				LOGMISC1(">>CSimPacketContext.cpp: Invalid new context config param index");
-				}
-				
-			//Delete the current NotifyContextConfigChange item and set the next one if possible
-			iNotifyContextConfigChangeArray->Delete(0);
-			
-			if(iNotifyContextConfigChangeArray->Count() > 0)
-				{
-				TInt delay = (iNotifyContextConfigChangeArray->At(0)).iDelay;
-				iNotifyContextConfigChangeTimer->Start(delay,this, ETimerIdPcktContextConfigChange);
-				}
-			break;
-
-		case ETimerIdPcktContextInitContext:
-			DoInitialiseContext();
-			break;
-		case ETimerIdPcktContextCreateTft:
-			DoCreateNewTFT();
-			break;
-		default:
-			{
-			LOGPACKET1(">>CSimPacketContext::TimerCallBack");
-			TInt ret=ActionEvent(EContextEventTimeOut,KErrNone);
-			__ASSERT_ALWAYS(ret==KErrNone,SimPanic(ETimeOutEventActionFailed));	// Note: this is very crude error handling and should be replaced by something rather more elegant.
-			LOGPACKET1("<<CSimPacketContext::TimerCallBack");
-			iTFTChangeBool = EFalse;
-			break;
-			}		
-		}
-	}
-
-void CSimPacketContext::PubSubCallback(TInt aIndex)
-	{
-	TInt length = iNotifyContextStatusChangeArray->Count();
-	if (aIndex < length)
-		{
-		TNotifyContextStatusChange& statusChange = iNotifyContextStatusChangeArray->At(aIndex);
-		if (statusChange.iContextName.Compare(iContextName) == 0)
-			{
-			CompleteContextStatusChange(statusChange.iStatus);
-			}
-		}
-	}
-	
-/**
-*	This is for the NotifyContextStatusChange timer callback
-*/
-void CSimPacketContext::TimerCallBackNotifyContextStatusChange()
-	{
-	if(GetContextStatusChangeCount() <= iNotifyContextStatusChangeIndex)
-		{
-		// the index is out of bounds
-		return;
-		}
-	TNotifyContextStatusChange& statusChange = GetContextStatusChangeAt(iNotifyContextStatusChangeIndex);
-
-	CompleteContextStatusChange(statusChange.iStatus);
-
-	iNotifyContextStatusChangeIndex++;
-	if (GetContextStatusChangeCount() > iNotifyContextStatusChangeIndex)
-	{
-		// start timer again
-		iNotifyContextStatusChangeTimer->Start(GetContextStatusChangeAt(iNotifyContextStatusChangeIndex).iDuration,this,ETimerIdPcktContextStatusChange);
-		}
-	}
-
-void CSimPacketContext::CompleteContextStatusChange(RPacketContext::TContextStatus& aStatus)
-		{	
-	iCurrentNotifyContextStatusChange = aStatus;
-
-	ChangeState(iCurrentNotifyContextStatusChange);
-	if (RPacketContext::EStatusDeleted == iCurrentNotifyContextStatusChange)
-		{
-		DoDelete();
-		}
-	}
-
-void CSimPacketContext::NTRasCallBack(TInt aStatus)
-/**
- * NTRas callback function.  This function will be called when the NTRAS
- * Server has responded.
- * 
- * @param aStatus	Standard error value, indicating the success or failure of the NTRAS
- *					connection.
- */
-	{
-		__ASSERT_ALWAYS(ActionEvent(EContextEventNtRas,aStatus) == KErrNone,SimPanic(EGeneral));
-		if(iCommReset)
-			iNtRas->Terminate();
-	}
-
-RPacketService::TStatus CSimPacketContext::ConvertToPacketServiceStatus(RPacketContext::TContextStatus aNewState)
-/**
-* Converts Packet Context Status (RPacketContext::TContextStatus) to 
-*          Packet Service Status (RPacketService::TStatus)
-*
-* @param aNewState the Context status to convert to packet service status
-* @return RPacketService::TStatus The packet service status conversion
-*/
-	{
-	RPacketService::TStatus serviceStatus;
-	switch (aNewState)
-		{
-	case RPacketContext::EStatusInactive:
-	case RPacketContext::EStatusActivating:
-	case RPacketContext::EStatusDeleted:
-		serviceStatus = RPacketService::EStatusAttached;
-		break;
-	case RPacketContext::EStatusActive:
-	case RPacketContext::EStatusDeactivating:
-		serviceStatus = RPacketService::EStatusActive;
-		break;
-	case RPacketContext::EStatusSuspended:
-		serviceStatus = RPacketService::EStatusSuspended;
-		break;
-	default:
-		serviceStatus = RPacketService::EStatusUnattached;
-		break;
-		}
-	return serviceStatus;
-	}
-
-
-TInt CSimPacketContext::ChangeState(RPacketContext::TContextStatus aNewState)
-/**
-* Attempt to change state.
-* First validate that the requested state change is ok.  If it is then proceed to change
-* the state and complete any pending state change notification.
-*
-* @param aNewState the new state to change to
-* @return Error indication if change of state is successful or not
-*/
-	{
-	LOGPACKET2(">>CSimPacketContext::ChangeState [newState=%d]", aNewState);
-	__ASSERT_ALWAYS(aNewState!=RPacketContext::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal));
-
-	if(iState==aNewState)
-		return KErrNone;
-
-	TInt ret=KErrGeneral;
-	const struct TContextStateChangeValidity* stateChangePnt=KContextStateChangeValidity;
-	while(stateChangePnt->iOldState!=KContextStateTableTerminator)
-		{
-		if((stateChangePnt->iOldState==iState) && (stateChangePnt->iNewState==aNewState))
-			{
-			ret=stateChangePnt->iError;
-			break;
-			}
-		stateChangePnt++;
-		}
-
-	if(ret!=KErrNone)
-		return ret;
-
-//Request permission from the phone to change the state of the packet connection
-	ret = iPacketService->ChangeState(ConvertToPacketServiceStatus(aNewState));
-	if(ret!=KErrNone)
-		return ret;
-
-// Actually change the state.
-	iState=aNewState;
-
-// Check for a pending line state notification.
-	if(iNotifyStatusChange.iNotifyPending)
-		{
-		iNotifyStatusChange.iNotifyPending=EFalse;
-		*(RPacketContext::TContextStatus*)iNotifyStatusChange.iNotifyData=iState;
-		ReqCompleted(iNotifyStatusChange.iNotifyHandle,KErrNone);
-		}
-
-
-	LOGPACKET1("<<CSimPacketContext::ChangeState");
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::ActionEvent(TContextEvent aEvent,TInt aStatus)
-/**
-* Entry point when an event has occured that may advance the state machine.
-* The aEvent parameter describes the event.
-*
-* This function contains the main state machine for the packet Context.  
-*
-* @param aEvent The Packet Context event to handle
-* @return value represents the error state caused by the attempted state machine jump.
-*/
-	{
-	TInt ret=KErrNone;
-	__ASSERT_ALWAYS(iState!=RPacketContext::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal));
-
-	TBool found = EFalse;
-	TInt i = 0;
-	TInt count = iContextConfigsRel99->Count();
-	for(i = 0; i<count; i++)
-		{
-		if(iContextName.Compare(iContextConfigsRel99->At(i).iContextName)==0)
-			{
-			found = ETrue;
-			break;
-			}
-		}
-
-	switch(aEvent)
-		{
-		case EContextEventActivate:
-			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventActivate]");
-			if(iState==RPacketContext::EStatusInactive)
-				{
-				iCurrentEvent=EContextEventActivate;
-				ret = ChangeState(RPacketContext::EStatusActivating);
-					if(ret!=KErrNone)
-						ReqCompleted(iActivateRequestHandle,ret);
-					else 
-						{
-						if(!found)
-							iTimer->Start(iActivatePause,this);
-						else
-							iTimer->Start(iContextConfigsRel99->At(i).iActivatePause,this);
-						}
-				}
-			else
-				ReqCompleted(iActivateRequestHandle, KErrGprsActivationRejected);
-			break;
-
-		case EContextEventDeactivate:
-			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventDeactivate]");
-			if(iState==RPacketContext::EStatusActive)
-				{
-				iCurrentEvent=EContextEventDeactivate;
-				ret = ChangeState(RPacketContext::EStatusDeactivating);
-					if(ret!=KErrNone)
-						ReqCompleted(iDeactivateRequestHandle,ret);
-					else
-						{
-						if (!found)
-							iTimer->Start(iDeactivatePause,this);
-						else
-							iTimer->Start(iContextConfigsRel99->At(i).iDeactivatePause,this);
-						}
-				}
-			else
-				ReqCompleted(iDeactivateRequestHandle, KErrNone);
-			break;
-
-		case EContextEventDelete:
-			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventDelete]");
-			if(iState==RPacketContext::EStatusInactive)
-				{
-				iCurrentEvent=EContextEventDelete;
-
-				if (!found)
-					iTimer->Start(iDeletePause,this);
-				else
-					iTimer->Start(iContextConfigsRel99->At(i).iDeletionPause,this);
-				}
-			else
-				ReqCompleted(iDeleteRequestHandle, KErrInUse);
-			break;
-
-		case EContextEventNtRas:
-			if((iState==RPacketContext::EStatusActivating) && (iCurrentEvent==EContextEventNtRas))
-				{
-				if(aStatus!=KErrNone)
-					{
-					ReqCompleted(iActivateRequestHandle,aStatus);
-					ret=ChangeState(RPacketContext::EStatusInactive);
-					__ASSERT_ALWAYS(ret==KErrNone,SimPanic(EIllegalStateInconsistancy));
-					return KErrNone;
-					}
-				else
-					{
-					ret=ChangeState(RPacketContext::EStatusActive);
-					ReqCompleted(iActivateRequestHandle,ret);
-					iIsActive = ETrue;
-					return KErrNone;
-					}
-				}
-			iCurrentEvent=EContextEventNone;
-			break;
-
-		case EContextEventTimeOut:
-			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventTimeOut]");
-			switch(iCurrentEvent)
-				{
-			case EContextEventNone:
-				break;
-			case EContextEventActivate:
-				if(iState==RPacketContext::EStatusActivating)
-					{
-						TInt activateValue;
-						if (found)
-							activateValue = iContextConfigsRel99->At(i).iActivateErrorCode;
-						else
-							activateValue = iActivateFail;	
-						if(activateValue == KContextGoToInactiveWithErrorWhenTryingToGetLastErrorCode)
-						    {
-						    //this will allow context activation move to the next state but with context being inactive 
-						    ret=ChangeState(RPacketContext::EStatusInactive);
-						    iCurrentEvent=EContextEventNone;
-						    iLastError = activateValue;
-						    iErrorCodeForGetLastErrorCause=KErrGeneral;
-						    
-						    iContextConfigsRel99->At(i).iActivateErrorCode = iLastError;
-						    ReqCompleted(iActivateRequestHandle, KErrNone);
-						    
-						    break;
-						    }
-						if(activateValue <= KContextGoToInactiveWithExtendedErrorCode && activateValue > KContextGoToInactiveWithNormalErrorCode)
-                            {
-                            //this will allow context activation move to the next state but with context being inactive     
-                            //tsy extended error case
-                            ret=ChangeState(RPacketContext::EStatusInactive);
-                            iCurrentEvent=EContextEventNone;
-                            iLastError = activateValue - KContextGoToInactiveWithExtendedErrorCode;
-                            //move the error code to the higher 16 bit.
-                            iLastError<<=16;
-                            
-                            iContextConfigsRel99->At(i).iActivateErrorCode = iLastError;
-                            ReqCompleted(iActivateRequestHandle, KErrNone);
-                            
-                            break;
-                            }
-						if(activateValue <= KContextGoToInactiveWithNormalErrorCode && activateValue > KLimitForErrorCodeForContextGoToInactive)
-						    {
-						    //this will allow context activation move to the next state but with context being inactive
-						    //normal error case
-						    ret=ChangeState(RPacketContext::EStatusInactive);
-						    iCurrentEvent=EContextEventNone;
-						    iLastError = activateValue - KContextGoToInactiveWithNormalErrorCode;
-						    
-						    iContextConfigsRel99->At(i).iActivateErrorCode = iLastError;
-						    ReqCompleted(iActivateRequestHandle, KErrNone);
-						    
-						    break;
-						    }
-						else
-						if(activateValue != KErrNone)
-							{
-							ReqCompleted(iActivateRequestHandle,activateValue);
-							ret=ChangeState(RPacketContext::EStatusInactive);
-							iCurrentEvent=EContextEventNone;
-							activateValue = KErrNone;
-
-							if (found)
-								iContextConfigsRel99->At(i).iActivateErrorCode = activateValue;
-							else
-								iActivateFail = activateValue;		
-							break;
-							}
-						else 
-							{
-						if (found)
-							{
-							if (iContextConfigsRel99->At(i).iConnectToNtRas)
-								{
-								ret = DoActivate();
-								if (ret == KErrNone)
-									iCurrentEvent=EContextEventNtRas;
-								else
-									iCurrentEvent=EContextEventNone;
-								}
-							else
-								{
-								iCurrentEvent=EContextEventNone;
-								ReqCompleted(iActivateRequestHandle,activateValue);
-								ret=ChangeState(RPacketContext::EStatusActive);
-								iIsActive = ETrue;
-								}
-							}
-						else
-							{
-							ret = DoActivate();
-							if (ret == KErrNone)
-								iCurrentEvent=EContextEventNtRas;
-							else
-								iCurrentEvent=EContextEventNone;
-							}
-						}
-					}
-				break;
-			case EContextEventDeactivate:
-				TInt deActivateValue;
-				if (found)
-					deActivateValue = iContextConfigsRel99->At(i).iDeactivateErrorCode;
-				else
-					deActivateValue = iDeactivateFail;	
-
-				if(iState==RPacketContext::EStatusDeactivating)
-					{
-					if(deActivateValue != KErrNone)
-						{
-						ReqCompleted(iDeactivateRequestHandle,deActivateValue);
-						ret=ChangeState(RPacketContext::EStatusActive);
-						deActivateValue = KErrNone;
-
-						if (found)
-								iContextConfigsRel99->At(i).iDeactivateErrorCode = deActivateValue;
-							else
-								iDeactivateFail = deActivateValue;		
-						break;
-						}
-					else {
-						ret=ChangeState(RPacketContext::EStatusInactive);
-						if(ret==KErrNone)
-							{
-							ret = DoDeactivate();
-							if(ret==KErrNone)
-								{	
-								ReqCompleted(iDeactivateRequestHandle,deActivateValue);
-								iIsActive=EFalse;
-								}
-							else
-								ReqCompleted(iDeactivateRequestHandle,ret);
-							}
-						else
-							ReqCompleted(iDeactivateRequestHandle,ret);
-						}
-					}
-				iCurrentEvent=EContextEventNone;
-				break;
-			case EContextEventDelete:
-				TInt deleteValue;
-				if (found)
-					deleteValue = iContextConfigsRel99->At(i).iDeletionErrorCode;
-				else
-					deleteValue = iDeleteFail;	
-
-				if(iState==RPacketContext::EStatusInactive)
-					{
-					if(deleteValue != KErrNone)
-						{
-						ReqCompleted(iDeleteRequestHandle,deleteValue);
-						deleteValue = KErrNone;
-						if (found)
-							iContextConfigsRel99->At(i).iDeletionErrorCode = deleteValue;
-						else
-							iDeleteFail = deleteValue;	
-						break;
-						}
-					else {
-						ret=ChangeState(RPacketContext::EStatusDeleted);
-						if(ret==KErrNone)
-							{
-							ret = DoDelete();
-							if(ret==KErrNone)
-								ReqCompleted(iDeleteRequestHandle,deleteValue);
-							else
-								ReqCompleted(iDeleteRequestHandle,ret);
-							}
-						else
-							ReqCompleted(iDeleteRequestHandle,ret);
-						}
-					}
-				iCurrentEvent=EContextEventNone;
-				break;
-			default:	//in case of EContextEventTimeOut
-				break;
-				}
-			break;
-
-		default:
-			break;
-			}
-	return ret;
-	}
-
-const CTestConfigSection* CSimPacketContext::CfgFile()
-/**
-* Return a pointer to the Configuration File Section
-*
-* @return CTestConfigSection	pointer to the configuration file section
-*/
-	{
-	return iPacketService->CfgFile();
-	}
-
-TInt CSimPacketContext::ModifyActiveContext(const TTsyReqHandle aTsyReqHandle)
-	{
-	if (iState==RPacketContext::EStatusInactive)
-		{
-		ReqCompleted(aTsyReqHandle, KErrNotReady);
-		return KErrNone;
-		}
-
-	// check if QoS profile has changed or TFTs have changed
-	if (iPacketqos != NULL)
-		{
-		if (iPacketqos->PerformProfileChange() == KErrNone || iTFTChangeBool)
-			{
-			iTFTChangeBool = EFalse;
-			ReqCompleted(aTsyReqHandle, KErrNone);
-			return KErrNone;
-			}
-		else
-			{
-			ReqCompleted(aTsyReqHandle, KErrNotReady);
-			return KErrNone;
-			}
-		}
-	else if (iTFTChangeBool)
-		{
-		iTFTChangeBool = EFalse;
-		ReqCompleted(aTsyReqHandle, KErrNone);
-		return KErrNone;
-		}	
-	else
-		{
-		ReqCompleted(aTsyReqHandle, KErrNotReady);
-		return KErrNone;
-		}
-	}
-
-/**
-*	This function enumerates the number of packet filters
-*/
-TInt CSimPacketContext::EnumeratePacketFilters(const TTsyReqHandle aTsyReqHandle, TInt& aCount)
-	{
-	aCount = iNumFiltersAdded;
-	ReqCompleted(aTsyReqHandle, KErrNone);
-	return KErrNone;
-	}
-
-/**
-* This function returns info regarding the packet filter specified by the index passed - 
-* used in conjunction with EnumeratePacketFilters()
-*/
-TInt CSimPacketContext::GetPacketFilterInfoL(const TTsyReqHandle aTsyReqHandle, TInt aIndex, TDes8* aPacketFilterInfo)
-	{
-	// if index is invalid, return error code
-	if (aIndex < 0 || aIndex > (iNumFiltersAdded -1))
-		{
-		ReqCompleted(aTsyReqHandle, KErrArgument);
-		return KErrNone;
-		}
-	else
-		{
-		TInt ii;
-		TInt addedFilterCount = -1;
-		
-		//find the requested filter
-		for(ii = 0; ii < iPacketFilterInfoArray->Count(); ii++)
-			{
-			if(iPacketFilterInfoArray->At(ii).iAdded)
-				{
-				addedFilterCount++;
-
-				//when the filter is found write the data to the client				
-				if(addedFilterCount == aIndex)
-					{
-					TPacketFilterV3 theFilter = iPacketFilterInfoArray->At(ii);
-
-					// Check that the data structure is supported by the simulated TSY version
-					TInt err = KErrNone;
-					if(iPhone->iSimTsyVersion < 3) // same version as TPacketFilterVx
-						{
-					 	(void)User::Leave(KErrNotSupported);
-						}
-										
-					RPacketContext::TPacketFilterV2Pckg* clientFilterPckg = 
-						(RPacketContext::TPacketFilterV2Pckg*)aPacketFilterInfo; 
-					RPacketContext::TPacketFilterV2& clientFilter = (*clientFilterPckg)();
-
-					// Check that the data structure is supported by the simulated TSY version
-					err = iPhone->CheckSimTsyVersion(clientFilter);
-					if(err != KErrNone)
-						{
-						iPhone->ReqCompleted(aTsyReqHandle, err);
-						return KErrNone;
-						}
-									
-					if(clientFilter.ExtensionId()==KETelExtPcktV2)
-						{
-						clientFilter.iDestPortMax = theFilter.iDestPortMax;
-						clientFilter.iDestPortMin = theFilter.iDestPortMin;
-						clientFilter.iEvaluationPrecedenceIndex = theFilter.iEvaluationPrecedenceIndex;
-						clientFilter.iFlowLabel = theFilter.iFlowLabel;
-						clientFilter.iId = theFilter.iId;
-						clientFilter.iIPSecSPI = theFilter.iIPSecSPI;
-						clientFilter.iProtocolNumberOrNextHeader = theFilter.iProtocolNumberOrNextHeader;
-						clientFilter.iSrcPortMax = theFilter.iSrcPortMax;
-						clientFilter.iSrcPortMin = theFilter.iSrcPortMin;
-						clientFilter.iTOSorTrafficClass = theFilter.iTOSorTrafficClass;
-						
-						TInt xx;
-						for(xx = 0;  xx<RPacketContext::KIPAddressSize; xx++)
-							{
-							clientFilter.iSrcAddr[xx] = theFilter.iSrcAddr[xx];
-							clientFilter.iSrcAddrSubnetMask[xx] = theFilter.iSrcAddrSubnetMask[xx];
-							}
-						ReqCompleted(aTsyReqHandle, KErrNone);
-						return KErrNone;
-						}
-					else if((clientFilter.ExtensionId()==KETelExtPcktV3) &&
-							theFilter.iFilterType != RPacketContext::EPacketFilterTypeUnknown)
-						{
-						RPacketContext::TPacketFilterV3Pckg* clientFilterV3Pckg = 
-							(RPacketContext::TPacketFilterV3Pckg*)aPacketFilterInfo; 
-						RPacketContext::TPacketFilterV3& clientFilterV3 = (*clientFilterV3Pckg)();
-						
-						// Check that the data structure is supported by the simulated TSY version
-						TInt err = iPhone->CheckSimTsyVersion(clientFilterV3);
-						if(err != KErrNone)
-							{
-							iPhone->ReqCompleted(aTsyReqHandle, err);
-							return KErrNone;
-							}
-
-						RPacketContext::TPacketFilterV3 filterV3(theFilter.iFilterType);
-
-						// Check that the data structure is supported by the simulated TSY version
-						err = iPhone->CheckSimTsyVersion(filterV3);
-						if(err != KErrNone)
-							{
-							iPhone->ReqCompleted(aTsyReqHandle, err);
-							return KErrNone;
-							}
-
-						filterV3.iId = theFilter.iId;
-						filterV3.iEvaluationPrecedenceIndex = theFilter.iEvaluationPrecedenceIndex;
-						filterV3.SetTOSorTrafficClass(theFilter.iTOSorTrafficClass);
-
-						TInt yy;
-						for(yy = 0;  yy<RPacketContext::KIPAddressSize; yy++)
-							{
-							filterV3.SetSrcAddr(theFilter.iSrcAddr);
-							filterV3.SetSrcAddrSubnetMask(theFilter.iSrcAddrSubnetMask);
-							}
-						if((theFilter.iFilterType == RPacketContext::EPacketFilterTypeOne) ||
-							(theFilter.iFilterType == RPacketContext::EPacketFilterTypeTwo))
-							{
-							filterV3.SetProtocolNumberOrNextHeader(theFilter.iProtocolNumberOrNextHeader);
-							}
-						
-						if(theFilter.iFilterType == RPacketContext::EPacketFilterTypeOne)
-							{
-							filterV3.SetDestPortMin(theFilter.iDestPortMin);
-							filterV3.SetDestPortMax(theFilter.iDestPortMax);
-							filterV3.SetSrcPortMin(theFilter.iSrcPortMin);
-							filterV3.SetSrcPortMax(theFilter.iSrcPortMax);
-							}
-
-						if((theFilter.iFilterType == RPacketContext::EPacketFilterTypeTwo))
-							{
-							filterV3.SetSPI(theFilter.iIPSecSPI);
-							}
-						
-						if((theFilter.iFilterType == RPacketContext::EPacketFilterTypeThree))
-							{
-							filterV3.SetFlowLabel(theFilter.iFlowLabel);
-							}
-						
-						clientFilterV3 = filterV3;
-						ReqCompleted(aTsyReqHandle, KErrNone);
-						return KErrNone;
-						}
-					else
-						{
-						//cannot convert a filterV2 in the TSY to the filterV3 data typed passed in by client
-						ReqCompleted(aTsyReqHandle, KErrCorrupt);
-						return KErrNone;
-						}
-					}//end if(addedFilterCount == aIndex)
-				}//end if(iPacketFilterInfoArray->At(ii).iAdded)
-			else
-				{
-				continue;
-				}
-				
-			}//end for loop
-		//filter was not found
-		ReqCompleted(aTsyReqHandle, KErrCorrupt);
-		return KErrNone;
-		}//end else
-	}
-
-/**
-*	Create TFT
-*/
-TInt CSimPacketContext::CreateNewTFT(const TTsyReqHandle aTsyReqHandle, const TInt* aSize)
-	{
-	if (iCreateTftConfig.iNumberOfFailures > 0)
-		{
-		iCreateTftConfig.iNumberOfFailures--;
-		ReqCompleted(aTsyReqHandle, iCreateTftConfig.iFailErrorCode);
-		return KErrNone;
-		}
-	iCreateTftTimer->Start(iCreateTftConfig.iDelay, this, ETimerIdPcktContextCreateTft);
-	iCreateTftData.iTsyReqHandle = aTsyReqHandle;
-	iCreateTftData.iSize = *aSize;
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::DoCreateNewTFT()
-	{
-	iTFTCreated = ETrue;
-	iNumTFTsCreated = iCreateTftData.iSize;
-	iTFTChangeBool = ETrue;
-	for (TInt i = 0; i < iPacketFilterInfoArray->Count(); i++)
-		{
-		iPacketFilterInfoArray->At(i).iAdded = EFalse;
-		}
-	iNumFiltersAdded = 0;
-	ReqCompleted(iCreateTftData.iTsyReqHandle, KErrNone);
-	return KErrNone;
-	}
-
-/**
-*	Delete TFT
-*/
-TInt CSimPacketContext::DeleteTFT(const TTsyReqHandle aTsyReqHandle)
-	{
-	if (iDeleteTftFail.iNumberOfTimes > 0)
-		{
-		iDeleteTftFail.iNumberOfTimes--;
-		ReqCompleted(aTsyReqHandle, iDeleteTftFail.iFailErrorCode);
-		return KErrNone;
-		}
-	iTFTCreated = EFalse;
-	iNumTFTsCreated = -1;
-	iTFTChangeBool = ETrue;
-	for (TInt i = 0; i < iPacketFilterInfoArray->Count(); i++)
-		{
-		iPacketFilterInfoArray->At(i).iAdded = EFalse;
-		}
-	iNumFiltersAdded = 0;
-	ReqCompleted(aTsyReqHandle, KErrNone);
-	return KErrNone;
-	}
-
-/**
-*	This method adds the packet filter to the array if it is not already there
-*/
-TInt CSimPacketContext::AddPacketFilter(const TTsyReqHandle aTsyReqHandle, const TDesC8* aPacketFilterInfo)
-	{
-	if (iAddPacketFilter.iNumberOfTimes > 0)
-		{
-		iAddPacketFilter.iNumberOfTimes--;
-		ReqCompleted(aTsyReqHandle, iAddPacketFilter.iFailErrorCode);
-		return KErrNone;
-		}
-
-	TPckg<RPacketContext::TPacketFilterV2>* packetFilter = (TPckg<RPacketContext::TPacketFilterV2>*)aPacketFilterInfo;
-	RPacketContext::TPacketFilterV2& packetFilterBase = (*packetFilter)();
-
-	// Check that the data structure is supported by the simulated TSY version
-	TInt err = iPhone->CheckSimTsyVersion(packetFilterBase);
-	if(err != KErrNone)
-		{
-		iPhone->ReqCompleted(aTsyReqHandle, err);
-		return KErrNone;
-		}
-
-	TBool found = EFalse;
-	
-	TInt ii;
-	for(ii = 0; ii<iPacketFilterInfoArray->Count(); ii++)
-		{
-		TPacketFilterV3& configFilter = iPacketFilterInfoArray->At(ii);
-		const TInt KReservedPortZero = 0;
-		
-		if((configFilter.iId == packetFilterBase.iId) &&
-			(configFilter.iEvaluationPrecedenceIndex == packetFilterBase.iEvaluationPrecedenceIndex) &&
-			(configFilter.iProtocolNumberOrNextHeader == packetFilterBase.iProtocolNumberOrNextHeader) &&
-			(configFilter.iSrcPortMin == packetFilterBase.iSrcPortMin) &&
-			(configFilter.iSrcPortMax == packetFilterBase.iSrcPortMax) &&
-			((configFilter.iDestPortMin == KReservedPortZero) || (configFilter.iDestPortMin == packetFilterBase.iDestPortMin)) &&
-			((configFilter.iDestPortMax == KReservedPortZero) || (configFilter.iDestPortMax == packetFilterBase.iDestPortMax)) &&
-			(configFilter.iIPSecSPI == packetFilterBase.iIPSecSPI) &&
-			(configFilter.iTOSorTrafficClass == packetFilterBase.iTOSorTrafficClass) &&
-			(configFilter.iFlowLabel == packetFilterBase.iFlowLabel))
-			{
-			TInt xx;
-			for(xx = 0;  xx<RPacketContext::KIPAddressSize; xx++)
-				{
-				if((configFilter.iSrcAddr[xx] == packetFilterBase.iSrcAddr[xx]) &&
-				  (configFilter.iSrcAddrSubnetMask[xx] == packetFilterBase.iSrcAddrSubnetMask[xx]))
-					{
-					found=ETrue;
-					}
-				else
-					{
-					found=EFalse;
-					break;
-					}
-				}
-
-			if(found)
-				{
-			    // checking the maximum number of packet filter per a pdp context
-                if(iNumFiltersAdded >= KMaxNumberOfTftFilters )
-                    {
-                    ReqCompleted(aTsyReqHandle, KErrOverflow);
-                    return KErrNone;
-                    }
-				iTFTChangeBool = ETrue;
-				configFilter.iAdded = ETrue;
-				iNumFiltersAdded++ ;
-				ReqCompleted(aTsyReqHandle, KErrNone);
-				return KErrNone;
-				}
-			}
-		}
-		ReqCompleted(aTsyReqHandle, KErrGeneral);
-		return KErrNone;
-	}
-
-/**
-*	This function removes the packet filter from the array if the packet filter is found in the array
-*/
-TInt CSimPacketContext::RemovePacketFilter(const TTsyReqHandle aTsyReqHandle, TInt aId)
-	{
-	TInt total= iPacketFilterInfoArray->Count();
-	TBool found = EFalse;
-	
-	for (TInt i = 0; i<total; i++)
-		{
-		if ((iPacketFilterInfoArray->At(i).iId == aId) &&
-			(iPacketFilterInfoArray->At(i).iAdded))
-			{
-			iPacketFilterInfoArray->At(i).iAdded = EFalse;
-			iNumFiltersAdded-- ;
-			ReqCompleted(aTsyReqHandle, KErrNone);
-			found = ETrue;
-			iTFTChangeBool = ETrue;
-			break;
-			}
-		}
-
-	if (!found)
-		{
-		ReqCompleted(aTsyReqHandle, KErrArgument);
-		return KErrNone;
-		}
-	return KErrNone;
-	}
-
-/**
-*	This function initialises the context
-*/
-TInt CSimPacketContext::InitialiseContext(const TTsyReqHandle aTsyReqHandle, TDes8* aDataChannelV2Pckg)
-	{
-	TCommSetupItem item = FindCommSettings();
-	if (item.iNumInitializeFailures != 0)
-		{
-		item.iNumInitializeFailures--;
-		ReqCompleted(aTsyReqHandle, item.iErrorCode);
-		}
-	else
-		{
-		iInitContextData.iTsyReqHandle = aTsyReqHandle;
-		iInitContextData.iChannel = aDataChannelV2Pckg;
-		iInitContextTimer->Start(item.iDelay, this, ETimerIdPcktContextInitContext);
-		}
-	return KErrNone;
-	}
-	
-TInt CSimPacketContext::DoInitialiseContext()
-	{
-	RPacketContext::TDataChannelV2Pckg* channel = (RPacketContext::TDataChannelV2Pckg*)iInitContextData.iChannel;
-	RPacketContext::TDataChannelV2& channelV2 = (*channel)();
-
-	// Check that the data structure is supported by the simulated TSY version
-	TInt err = iPhone->CheckSimTsyVersion(channelV2);
-	if(err != KErrNone)
-		{
-		ReqCompleted(iInitContextData.iTsyReqHandle, err);
-		return KErrNone;
-		}
-
-	TCommSetupItem item = FindCommSettings();
-	channelV2.iPort = item.iPortName;
-	channelV2.iCsy = item.iCsyName;
-	channelV2.iChannelId = item.iPortName;
-	
-	ReqCompleted(iInitContextData.iTsyReqHandle, KErrNone);
-
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/
-TInt CSimPacketContext::EnumeratePacketFiltersCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-	{
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/
-TInt CSimPacketContext::GetPacketFilterInfoCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-	{
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/
-TInt CSimPacketContext::AddPacketFilterCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-	{
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/	
-TInt CSimPacketContext::CreateNewTFTCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	iCreateTftTimer->Cancel();
-	
-	ReqCompleted(aTsyReqHandle, KErrCancel);
-	
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/
-TInt CSimPacketContext::DeleteTFTCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-	{
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/	
-TInt CSimPacketContext::RemovePacketFilterCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-	{
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/
-TInt CSimPacketContext::ModifyActiveContextCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-	{
-	return KErrNone;
-	}
-
-/**
-* Cancel method, returns KErrNone
-*/
-TInt CSimPacketContext::InitialiseContextCancel(const TTsyReqHandle aTsyReqHandle)
-	{
-	iInitContextTimer->Cancel();
-	
-	ReqCompleted(aTsyReqHandle, KErrCancel);
-	
-	return KErrNone;
-	}
-
-CSimPacketContext::TCommSetupItem CSimPacketContext::FindCommSettings()
-	{
-	TInt count=iCommSetupArray->Count();
-	TCommSetupItem def;
-
-	//Do a default initialization.
-	def.iCsyName.Copy(KDefaultCsyName);
-	def.iPortName.Copy(KDefaultPortName);
-	def.iConfig.iRate=KDefaultCommPortRate;
-	def.iConfig.iHandshake=KDefaultHandshake;	
-	def.iContextName=KDefaultSetting;
-	def.iCommReset = EFalse;
-	def.iNumInitializeFailures = 0;
-	def.iErrorCode = KErrNone;
-	def.iDelay = 0;
-
-	for(TInt i=0; i<count; i++)
-		{
-		TCommSetupItem comm = iCommSetupArray->At(i);
-		if(comm.iContextName.Compare(iContextName)==KErrNone)
-			return comm;
-		if(comm.iContextName.Compare(KDefaultSetting)==KErrNone)
-			def=comm;
-		}
-	return def;
-	}
-
-TName CSimPacketContext::ContextName() const 
-	{
-	return iContextName; 
-	}
-
-TInt CSimPacketContext::GetDnsInfo(const TTsyReqHandle aTsyReqHandle, const TDesC8* aDnsInfo)
-	{
-/**
- * GetDnsInfo method to extract DNS server names from context
- *
- * @param aStatus TRequestStatus object with which error code is returned
- * @param aDnsInfo packaged TDnsInfoV2 object passed as TDes8
- *
- * GetDNSInfo() is needed when the client uses dynamic IPv4 PDP addresses. 
- * After the context is activated the client needs to know the actual primary 
- * and secondary DNS addresses to use when sending packet data. As the network 
- * may have supplied these addresses there is a need for an API method to get 
- * these addresses from the TSY.
- */
-	RPacketContext::TTDnsInfoV2Pckg* dnsInfoV2Pckg = (RPacketContext::TTDnsInfoV2Pckg*)aDnsInfo;
-	RPacketContext::TDnsInfoV2& dnsInfoV2 = (*dnsInfoV2Pckg)();
-
-	// Check that the data structure is supported by the simulated TSY version
-	TInt err = iPhone->CheckSimTsyVersion(dnsInfoV2);
-	if(err != KErrNone)
-		{
-		iPhone->ReqCompleted(aTsyReqHandle, err);
-		return KErrNone;
-		}
-
-	TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
-
-	dnsInfoV2.iPrimaryDns.Copy(config.iProtocolConfigOption.iPrimaryDNS);
-	dnsInfoV2.iSecondaryDns.Copy(config.iProtocolConfigOption.iSecondaryDNS);
-
-	ReqCompleted(aTsyReqHandle,KErrNone);
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetDnsInfoCancel(const TTsyReqHandle /*aTsyReqHandle*/) 
-/**
- * GetDnsInfoCancel - Cancels an asynchronous GetDnsInfo method.
- */
-	{
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetAddMediaAuthorization(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
-/**
- * GetAddMediaAuthorization method to verify provided media authorization and return desired result
- *
- * @param aTsyReqHandle The request handle for completing the request
- * @param aBuffer Packaged CTFTMediaAuthorizationV3 object passed as TDes8
- *
- * GetAddMediaAuthorization() checks the provided media authorization against a predefined authorization
- * set up from the configuration file. If the authorization is valid the function will return the desired
- * response, also set up from the configuration file. If there is a mismatch between authorizations, KErrCorrupt
- * returned.
- */ 	
-	{
-	TBool validMediaAuthorization = TRUE;
-	RPacketContext::CTFTMediaAuthorizationV3* mediaAuthV3 = NULL;
-
-	// Check that the data structure is supported by the simulated TSY version
-	TInt err = iPhone->CheckSimTsyVersion(*mediaAuthV3);
-	if(err != KErrNone)
-		{
-		iPhone->ReqCompleted(aTsyReqHandle, err);
-		return KErrNone;
-		}
-	
-	TRAPD(ret, mediaAuthV3 = RPacketContext::CTFTMediaAuthorizationV3::NewL());
-	if (ret != KErrNone)
-		{
-		LOGPACKET1("CSimPacketContext::GetAddMediaAuthorization NewL call fail");
-		return ret;
-		}		
-
-	TRAP(ret, mediaAuthV3->InternalizeL(*aBuffer) );
-	if (ret != KErrNone)
-		{
-		delete mediaAuthV3;
-		LOGPACKET1("CSimPacketContext::GetAddMediaAuthorization InternalizeL call fail");
-		return ret;
-		}
-
-	for (TUint i=0; i<iAuthorizationTokenResponse->Count(); i++)
-		{
-		if (!(mediaAuthV3->iAuthorizationToken).Compare(iAuthorizationTokenResponse->At(i).iAuthorizationToken))
-			{
-			for (TUint j=0; j<iMediaAuthorization->At(i).iFlowIds.Count(); j++)
-				{
-				if ((mediaAuthV3->iFlowIds[j].iMediaComponentNumber != iMediaAuthorization->At(i).iFlowIds[j].iMediaComponentNumber) ||
-					(mediaAuthV3->iFlowIds[j].iIPFlowNumber != iMediaAuthorization->At(i).iFlowIds[j].iIPFlowNumber))
-					{
-					validMediaAuthorization = FALSE;
-					}
-				}
-			if (validMediaAuthorization)
-				{
-				ReqCompleted(aTsyReqHandle,iAuthorizationTokenResponse->At(i).iResponse);
-				delete mediaAuthV3;
-				return KErrNone;
-				}
-			}
-		}
-		
-	// No match found, respond with corrupted		
-	ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	delete mediaAuthV3;	
-
-	return KErrNone;
- 	}
-
-TInt CSimPacketContext::GetRemoveMediaAuthorization(const TTsyReqHandle aTsyReqHandle, RPacketContext::TAuthorizationToken* aAuthorizationToken)
-/**
- * GetRemoveMediaAuthorization method to verify provided media authorization and return desired result
- *
- * @param aTsyReqHandle The request handle for completing the request
- * @param aAuthorizationToken Authorization token to be checked
- *
- * GetRemoveMediaAuthorization() checks the provided authorization token against predefined tokens and responses 
- * from config file. If a match is found the associated desired response is returned, otherwise KErrCorrupt is reported.
- */ 	
-	{	
-	for (TUint i=0; i<iAuthorizationTokenResponse->Count(); i++)
-		{
-		if (!((*aAuthorizationToken).Compare(iAuthorizationTokenResponse->At(i).iAuthorizationToken)))
-			{
-			ReqCompleted(aTsyReqHandle,iAuthorizationTokenResponse->At(i).iResponse);
-			return KErrNone;
-			}
-		}
-		
-	// No match found, respond with corrupted		
-	ReqCompleted(aTsyReqHandle,KErrCorrupt);
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetAddMediaAuthorizationCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-/**
-* Cancel method, returns KErrNone
-*/
-	{
-	return KErrNone;
-	}
-
-TInt CSimPacketContext::GetRemoveMediaAuthorizationCancel(const TTsyReqHandle /*aTsyReqHandle*/)
-/**
-* Cancel method, returns KErrNone
-*/
-	{
-	return KErrNone;	
-	}
-
-
+// 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:
+// This file contains the implementation of the Similator TSY Packet Context functionality.  
+// 
+//
+
+/**
+ @file
+*/
+
+#include "Simlog.h"
+#include "CSimPhone.h"
+#include "CSimPacketContext.h"
+#include "CSimPacketService.h"
+#include "CSimPacketQoS.h"
+#include "utils.h"
+
+#include "CSimContextHelper.h"
+
+const TInt KUnsetInteger = 0;
+
+CPcktListReadAllAttempt* CPcktListReadAllAttempt::NewL(TClientId& aId, TTsyReqHandle aReqHandle)
+/**
+ * Standard two phase constructor.
+ * @param aId The client ID (session and sub-session handles) that uniquely identifies a client performing a two phase read.
+ * @param aReqHandle The TSY request handle of the client request associated with a two phase read.
+ * @return CPcktListReadAllAttempt* The newly created object.
+ */
+	{
+	CPcktListReadAllAttempt* read=new(ELeave) CPcktListReadAllAttempt(aId, aReqHandle);
+	CleanupStack::PushL(read);
+	read->ConstructL();
+	CleanupStack::Pop();
+	return read;
+	}
+
+CPcktListReadAllAttempt::CPcktListReadAllAttempt(TClientId& aId, TTsyReqHandle aReqHandle)
+		: iReqHandle(aReqHandle)
+/**
+ * Trivial first phase constructor.
+ * @param aId The client ID (session and sub-session handles) that uniquely identifies a client performing a two phase read.
+ * @param aReqHandle The TSY request handle of the client request associated with a two phase read.
+ */
+	{
+	iClient.iSessionHandle=aId.iSessionHandle;
+	iClient.iSubSessionHandle=aId.iSubSessionHandle;
+	}
+
+void CPcktListReadAllAttempt::ConstructL()
+/**
+ * Trivial second phase constructor.
+ */
+	{
+	User::LeaveIfError(iListBuf!=NULL);
+	}
+
+CPcktListReadAllAttempt::~CPcktListReadAllAttempt()
+/**
+ * Trivial destructor.
+ */
+	{
+	delete iListBuf;
+	}
+
+
+CSimPacketContext* CSimPacketContext::NewL(CSimPhone* aPhone, CSimPacketService* aPacketService, const TDesC& aContextName)
+/**
+* Standard two phase constructor
+*
+* @param aPacketService Pointer to the Packet Service object (CSimPacketService)
+* @param aContextName name  for this packet context
+* @return CSimPacketContext pointer to the packet context object created.
+* @leave Leaves if no memory or object is not created for any reason.
+*/
+	{
+	CSimPacketContext* packetContext = new(ELeave) CSimPacketContext(aPhone, aPacketService, aContextName);
+	CleanupStack::PushL(packetContext);
+	packetContext->ConstructL();
+	CleanupStack::Pop();
+	return packetContext;
+	}
+
+void CSimPacketContext::Init()
+	{}
+
+CSimPacketContext::CSimPacketContext(CSimPhone* aPhone, CSimPacketService* aPacketService, const TName& aContextName)
+	: iPhone(aPhone), iDeleted(EFalse),iIsActive(EFalse),iPacketService(aPacketService),iContextName(aContextName),
+	  iTFTCreated(EFalse), iNumTFTsCreated(-1), iNumFiltersAdded(0),
+      iContextConfigParamsIndex(0), iCommPortLoaned(EFalse),iQoSObjectCount(0),
+      iNotifyContextConfigChangeArray(NULL), iSetConfigData(NULL), iSetConfigCallCount(0), iTFTChangeBool(0),
+      iNotifyContextStatusChangeIndex(0),iState(RPacketContext::EStatusInactive), iLastError(KErrNone), iErrorCodeForGetLastErrorCause(KErrNone)
+	  
+/**
+* Trivial Constructor.  Initialises all the data members
+*
+* @param aPacketService Pointer to the Packet Service object (CSimPacketService)
+* @param aContextName name  for this packet context
+*/
+	{
+	iNotifyStatusChange.iNotifyPending = EFalse;
+	iNotifyConfigGPRS.iNotifyPending= EFalse;
+	iNotifyConfigR99.iNotifyPending= EFalse;
+	iNotifyConfigR5.iNotifyPending= EFalse;
+	}
+
+void CSimPacketContext::ConstructL()
+/**
+* Second phase of the 2-phase constructor.
+* Constructs all the member data and retrieves all the data from the config file specific to this class.
+*
+* @leave Leaves no memory or any data member does not construct for any reason.
+*/
+	{
+	LOGPACKET1("CSimPacketContext: Entered constructor");
+
+	iSetConfigData = new (ELeave) CArrayFixFlat<TSetConfigData>(1);
+	iNotifyContextConfigChangeArray = new (ELeave) CArrayFixFlat<TNotifyContextConfigChangeData>(1);
+	iContextConfigParams = new (ELeave) CArrayFixFlat<TContextConfigParam>(KNumberofConfigs);
+	iAuthorizationTokenResponse = new (ELeave) CArrayFixFlat<TAuthorizationTokenResponse>(KNumberofConfigs);
+	iMediaAuthorization = new (ELeave) CArrayFixFlat<RPacketContext::CTFTMediaAuthorizationV3>(KNumberofConfigs);
+
+	iNtRas = CSimNtRas::NewL(iPhone);
+	iTimer = CSimTimer::NewL(iPhone);
+	iNotifyContextStatusChangeTimer = CSimTimer::NewL(iPhone);
+	iSetConfigTimer = CSimTimer::NewL(iPhone);
+	iInitContextTimer = CSimTimer::NewL(iPhone);
+	iCreateTftTimer = CSimTimer::NewL(iPhone);
+	iNotifyContextConfigChangeTimer= CSimTimer::NewL(iPhone);
+	iContextStatusChange = CSimPubSubChange::NewL(this, CSimPubSub::TPubSubProperty(KUidPSSimTsyCategory, KPSSimtsyPacketContextStatusChange, KPSSimtsyPacketContextStatusChangeKeyType));
+
+	LOGPACKET1("Starting to Load and Parse Packet Context the Config File");
+
+	GetCommSetupSettingsL();
+	GetContextConfigParamSettingsL(KSetContextConfigGPRS());
+	GetContextConfigParamSettingsL(KSetContextConfigRel99());
+	GetContextConfigParamSettingsL(KSetContextConfigRel5());
+	GetActivateSettings();
+	GetSetConfigSettings();
+	GetPacketFilterSettings();
+	GetContextConfigRel99SettingsL();
+	ConstructPacketFiltersL();
+	GetContextStatusChangeSettingsL();
+	GetContextConfigChangeSettingsL();
+	
+	TInt nestedItemNumber; // used for nested loop
+	const CTestConfigItem* item2; // used for nested items
+
+	TUint count = CfgFile()->ItemCount(KAuthorizationToken);		
+
+	TUint itemPosition = 0;
+	TUint itemOffSet = 0;
+	for(TInt i=0;i<count;i++)							// set up AuthorizationToken info
+		{
+		const CTestConfigItem *item = CfgFile()->Item(KAuthorizationToken,i);
+		if(!item)
+			break;
+
+		RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = RPacketContext::CTFTMediaAuthorizationV3::NewL();
+        CleanupStack::PushL(mediaAuthorization);		
+		TAuthorizationTokenResponse authorizationTokenResponse;
+		TPtrC8 authorizationToken;
+		TInt desiredResponse;
+		TInt numberOfFlowIds;
+		
+		TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,authorizationToken);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("CTFTMediaAuthorizationV3::authorizationToken",ret,0,&KAuthorizationToken);
+            CleanupStack::PopAndDestroy(mediaAuthorization);			
+			continue;
+			}
+		else
+			{
+			mediaAuthorization->iAuthorizationToken.Copy(authorizationToken); // Set up for media authorization
+			authorizationTokenResponse.iAuthorizationToken.Copy(authorizationToken); // Set up for token response
+			}
+			
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,desiredResponse);
+
+		if(ret!=KErrNone || desiredResponse > 0)
+			{
+			LOGPARSERR("desiredResponse",ret,1,&KAuthorizationToken);
+	        CleanupStack::PopAndDestroy(mediaAuthorization);
+			continue;
+			}
+		else
+			{
+			authorizationTokenResponse.iResponse = desiredResponse;
+			}
+
+		iAuthorizationTokenResponse->AppendL(authorizationTokenResponse);
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,numberOfFlowIds);
+			
+		for(nestedItemNumber=itemPosition+itemOffSet;nestedItemNumber<itemOffSet+numberOfFlowIds;nestedItemNumber++)
+			{
+			item2 = CfgFile()->Item(KFlowIdentifier,nestedItemNumber);
+			
+			if(!item2)
+				break;
+
+			RPacketContext::CTFTMediaAuthorizationV3::TFlowIdentifier iFlowIdentifier;
+			TInt mediaComponentNumber;
+			TInt IPFlowNumber;
+		
+			ret=CTestConfig::GetElement(item2->Value(),KStdDelimiter,0,mediaComponentNumber);
+
+			if(ret!=KErrNone || mediaComponentNumber < 0)
+				{
+				LOGPARSERR("CTFTMediaAuthorizationV3::mediaComponentNumber",ret,0,&KFlowIdentifier);
+				continue;
+				}
+			else
+				{
+				iFlowIdentifier.iMediaComponentNumber = mediaComponentNumber;
+				}
+				
+			ret=CTestConfig::GetElement(item2->Value(),KStdDelimiter,1,IPFlowNumber);
+
+			if(ret!=KErrNone || IPFlowNumber < 0)
+				{
+				LOGPARSERR("CTFTMediaAuthorizationV3::IPFlowNumber",ret,1,&KFlowIdentifier);
+				continue;
+				}
+			else
+				{
+				iFlowIdentifier.iIPFlowNumber = IPFlowNumber;
+				}
+			
+			mediaAuthorization->iFlowIds.Append(iFlowIdentifier);
+			}
+		itemOffSet+=numberOfFlowIds;
+		iMediaAuthorization->AppendL(*mediaAuthorization); // Add completed media authorization to array
+        CleanupStack::Pop(mediaAuthorization);		
+		}
+
+	LOGPACKET1("...Finished parsing Packet Context config parameters...");
+	}	
+
+void CSimPacketContext::GetCommSetupSettingsL()
+	{
+	iCommSetupArray = new (ELeave) CArrayFixFlat<TCommSetupItem>(KNumberofConfigs);
+
+	TInt count = CfgFile()->ItemCount(KCommSetup);
+	if(count==0)
+		{
+		TCommSetupItem comm;
+			
+		comm.iCsyName.Copy(KDefaultCsyName);
+		comm.iPortName.Copy(KDefaultPortName);
+		comm.iConfig.iRate=KDefaultCommPortRate;
+		comm.iConfig.iHandshake=KDefaultHandshake;	
+		comm.iContextName=KDefaultSetting;
+		comm.iCommReset = EFalse;
+		comm.iNumInitializeFailures = 0;
+		comm.iErrorCode = KErrNone;
+		comm.iDelay = 0;
+		iCommSetupArray->AppendL(comm);
+		}
+
+	for(TInt i=0;i<count;i++)
+		{
+		const CTestConfigItem* item = CfgFile()->Item(KCommSetup,i);
+
+		if(item)
+			{
+			TCommSetupItem comm;
+			TPtrC8 portName,csyName,contextName;
+			TInt commReset, numInitializeFailures, errorCode, delay;
+
+			TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,csyName);
+			if(ret!=KErrNone)
+				{
+				LOGPARSERR("CommSetUp::csyName",ret,0,&KCommSetup);
+				comm.iCsyName.Copy(KDefaultCsyName);
+				}
+			else
+				comm.iCsyName.Copy(csyName);
+
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,portName);
+			if(ret!=KErrNone)
+				{
+				LOGPARSERR("CommSetUp::portName",ret,1,&KCommSetup);
+				comm.iPortName.Copy(KDefaultPortName);
+				}
+			else
+				comm.iPortName.Copy(portName);
+
+			TInt dataRate,handshake;
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,dataRate);
+			if(ret!=KErrNone)
+				{
+				LOGPARSERR("CommSetUp::dataRate",ret,2,&KCommSetup);
+				comm.iConfig.iRate=KDefaultCommPortRate;
+				}
+			else
+				comm.iConfig.iRate=(TBps)dataRate;
+
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,handshake);
+			if(ret!=KErrNone)
+				{
+				LOGPARSERR("CommSetUp::handShake",ret,3,&KCommSetup);
+				comm.iConfig.iHandshake=KDefaultHandshake;
+				}
+			else
+				comm.iConfig.iHandshake=(TUint)handshake;
+			
+			
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,contextName);
+			if(ret!=KErrNone)
+				{
+				LOGPARSERR("CommSetUp::contextName",ret,4,&KCommSetup);
+				comm.iContextName=KDefaultSetting;
+				}
+			else
+				comm.iContextName.Copy(contextName);
+
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,commReset);
+			if(ret!=KErrNone)
+				{
+				LOGPARSERR("CommSetUp::commReset",ret,5,&KCommSetup);
+				comm.iCommReset=EFalse;
+				}
+			else
+				comm.iCommReset = commReset;
+			
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6,numInitializeFailures);
+			if(ret!=KErrNone)
+				{
+				comm.iNumInitializeFailures = 0;
+				}
+			else
+				comm.iNumInitializeFailures = numInitializeFailures;
+			
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7,errorCode);
+			if(ret!=KErrNone)
+				{
+				comm.iErrorCode = KErrNone;
+				}
+			else
+				comm.iErrorCode = errorCode;
+			
+			ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,8,delay);
+			if(ret!=KErrNone)
+				{
+				comm.iDelay = 0;
+				}
+			else
+				comm.iDelay = delay;
+			
+			iCommSetupArray->AppendL(comm);
+			}
+		}
+	}
+
+
+
+void CSimPacketContext::GetContextConfigParamSettingsL(TPtrC8 aTag)
+	{		
+	CSimContextHelper::GetContextConfigParamSettingsL( CfgFile(), aTag, iContextConfigParams );		
+	}
+
+
+void CSimPacketContext::GetActivateSettings()
+	{
+	TInt ret;
+	const CTestConfigItem* item=CfgFile()->Item(KActivatePauseDuration); //< Find the Activate data item
+	if(item)
+		{										//< then retrieve the activation pause
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,iActivatePause);
+		if(ret!=KErrNone)
+			iActivatePause = KDefaultPauseDuration;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,iActivateFail);
+		if(ret==KErrNotFound)
+			iActivateFail = KErrNone;
+		}
+
+	item=CfgFile()->Item(KDeactivatePauseDuration);	//< Find the Deactivate data item
+	if(item)
+		{											//< then retrieve the deactivation pause
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,iDeactivatePause);
+		if(ret!=KErrNone)
+			iDeactivatePause = KDefaultPauseDuration;
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,iDeactivateFail);
+		if(ret==KErrNotFound)
+			iDeactivateFail = KErrNone;
+		}
+
+	item=CfgFile()->Item(KDeletePauseDuration);	//< Find the Delete data item
+	if(item)
+		{										//< then retrieve the delete pause
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,iDeletePause);
+		if(ret!=KErrNone)
+			iDeletePause = KDefaultPauseDuration;
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,iDeleteFail);
+		if(ret==KErrNotFound)
+			iDeleteFail = KErrNone;
+		}
+	}
+	
+void CSimPacketContext::GetSetConfigSettings()
+	{
+	iSetConfigDelay = 0;
+	const CTestConfigItem* item=iPacketService->CfgFile()->Item(KSetConfigDelay);
+	if(item)
+		{
+		TInt delay = 0;
+		TInt ret = CTestConfig::GetElement(item->Value(),KStdDelimiter,0,delay);
+
+		if(ret != KErrNone || delay < 0)
+			{
+			LOGPARSERR("SetConfigDelay",ret,0,&KSetConfigDelay);
+			}
+		else
+			{
+			iSetConfigDelay = delay;
+			}
+		}
+
+	item=iPacketService->CfgFile()->Item(KSetConfigFail);	// Set the SetConfigFail struct
+	if(item)
+		{
+		TPtrC8 contextName, numberOfTimes, failErrorCode;
+		TInt32 digit = 0;
+		TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::contextName",ret,0,&KSetConfigFail);
+			}
+		else
+			{
+				iSetConfigFail.iContextName.Copy(contextName);
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KSetConfigFail);
+			}
+		else
+			{
+				if(AsciiToNum(numberOfTimes, digit)==KErrNone)
+					iSetConfigFail.iNumberOfTimes = digit;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KSetConfigFail);
+			}
+		else
+			{
+				if(AsciiToNum(failErrorCode, digit)==KErrNone)
+					iSetConfigFail.iFailErrorCode = digit;
+			}
+		}
+	}
+	
+void CSimPacketContext::GetContextConfigChangeSettingsL()
+	{
+	TNotifyContextConfigChangeData configChangeData;
+	
+	TUint count = CfgFile()->ItemCount(KNotifyContextConfigChange);
+	TInt index;
+	for(index = 0; index < count; index++)
+		{
+		const CTestConfigItem *item = 
+			CfgFile()->Item(KNotifyContextConfigChange,index);
+		
+		if(!item)
+			{
+			break;
+			}
+		
+		//Get the Notify Context Config Change Delay value
+		TInt ret = CTestConfig::GetElement(item->Value(),KStdDelimiter,0,
+					configChangeData.iDelay);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("NotifyContextConfigChange::delay",ret,0,&KNotifyContextConfigChange);
+			continue;
+			}
+			
+		//Get the Notify Context Config Change, config index value
+		ret = CTestConfig::GetElement(item->Value(),KStdDelimiter,1,
+					configChangeData.iNewContextConfigIndex);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("NotifyContextConfigChange::NewContextConfigIndex",
+						ret,0,&KNotifyContextConfigChange);
+			continue;		
+			}
+	
+		iNotifyContextConfigChangeArray->AppendL(configChangeData);
+		}
+	}
+
+void CSimPacketContext::GetPacketFilterSettings()
+	{
+	TInt ret;
+	const CTestConfigItem* item=iPacketService->CfgFile()->Item(KDeleteTftFail);
+	if(item)
+	{
+		TPtrC8 contextName, numberOfTimes, failErrorCode;
+		TInt32 digit = 0;
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::contextName",ret,0,&KDeleteTftFail);
+			}
+		else
+			{
+			iDeleteTftFail.iContextName.Copy(contextName);
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KDeleteTftFail);
+			}
+		else
+		{
+			if(AsciiToNum(numberOfTimes, digit)==KErrNone)
+				iDeleteTftFail.iNumberOfTimes = digit;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KDeleteTftFail);
+			}
+		else
+			{
+			if(AsciiToNum(failErrorCode, digit)==KErrNone)
+				iDeleteTftFail.iFailErrorCode = digit;
+			}
+	}
+
+	item=iPacketService->CfgFile()->Item(KCreateTftConfig);
+	if(item)
+	{
+		TPtrC8 contextName, numberOfTimes, failErrorCode;
+		TInt32 digit = 0;
+		TInt delay = 0;
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::contextName",ret,0,&KCreateTftConfig);
+			}
+		else
+			{
+			iCreateTftConfig.iContextName.Copy(contextName);
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KCreateTftConfig);
+			}
+		else
+			{
+			if(AsciiToNum(numberOfTimes, digit)==KErrNone)
+				iCreateTftConfig.iNumberOfFailures = digit;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KCreateTftConfig);
+			}
+		else
+			{
+			if(AsciiToNum(failErrorCode, digit)==KErrNone)
+				iCreateTftConfig.iFailErrorCode = digit;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,delay);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::failErrorCode",ret,3,&KCreateTftConfig);
+			}
+		else
+			{
+			iCreateTftConfig.iDelay = delay;
+			}
+	}
+
+	item=iPacketService->CfgFile()->Item(KAddPacketFilter);
+	if(item)
+	{
+		TPtrC8 contextName, numberOfTimes, failErrorCode;
+		TInt32 digit = 0;
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::contextName",ret,0,&KAddPacketFilter);
+			}
+		else
+			{
+			iAddPacketFilter.iContextName.Copy(contextName);
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,numberOfTimes);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::numberOfTimes",ret,1,&KAddPacketFilter);
+			}
+		else
+			{
+			if(AsciiToNum(numberOfTimes, digit)==KErrNone)
+				iAddPacketFilter.iNumberOfTimes = digit;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,failErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("SetConfigFail::failErrorCode",ret,2,&KAddPacketFilter);
+			}
+		else
+			{
+			if(AsciiToNum(failErrorCode, digit)==KErrNone)
+				iAddPacketFilter.iFailErrorCode = digit;
+			}
+
+		}
+	}
+	
+void CSimPacketContext::GetContextConfigRel99SettingsL()
+	{
+	iContextConfigsRel99 = new(ELeave) CArrayFixFlat<TRel99ContextConfig>(KNumberofConfigs);
+
+	TInt count = CfgFile()->ItemCount(KContextConfigRel99);		// set up the Rel 99 context configuration parameters
+	for(TInt i=0;i<count;i++)
+		{
+		const CTestConfigItem* item = CfgFile()->Item(KContextConfigRel99,i);
+		if(!item)
+			break;
+			
+		TPtrC8 contextName;
+		TInt activatePause, activateErrorCode, aDeactivatePause, deactivateErrorCode, deletionPause;
+		TInt deletionErrorCode;
+		TBool connectToNtRas;
+		TRel99ContextConfig contextConfigRel99;
+
+		TInt ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::contextName",ret,0,KContextConfigRel99);
+			}
+		else
+			{
+				contextConfigRel99.iContextName.Copy(contextName);
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,activatePause);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::activatePause",ret,1,&KContextConfigRel99);
+			continue;
+			}
+		else
+			contextConfigRel99.iActivatePause = activatePause;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,activateErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::activateErrorCode",ret,2,&KContextConfigRel99);
+			continue;
+			}
+		else
+			contextConfigRel99.iActivateErrorCode = activateErrorCode;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,aDeactivatePause);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::deactivatePause",ret,3,&KContextConfigRel99);
+			continue;
+			}
+		else
+			contextConfigRel99.iDeactivatePause = aDeactivatePause;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,deactivateErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::deactivateErrorCode",ret,4,&KContextConfigRel99);
+			continue;
+			}
+		else
+			contextConfigRel99.iDeactivateErrorCode = deactivateErrorCode;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,deletionPause);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::deletetionPause",ret,5,&KContextConfigRel99);
+			continue;
+			}
+		else
+			contextConfigRel99.iDeletionPause = deletionPause;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6, deletionErrorCode);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("ContextConfigRel99::deletionErrorCode",ret,6,&KContextConfigRel99);
+			continue;
+			}
+		else
+			contextConfigRel99.iDeletionErrorCode =  deletionErrorCode;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7, connectToNtRas);
+		if(ret!=KErrNone)
+			{
+			contextConfigRel99.iConnectToNtRas =  ETrue;
+			}
+		else
+			contextConfigRel99.iConnectToNtRas =  connectToNtRas;
+
+		iContextConfigsRel99->AppendL(contextConfigRel99);
+		}
+	}
+
+/**
+ Retrieves the (aIndex+1)th packet context status with the current context's context name
+ ie. if aIndex is 0, the 1st context status entry is returned and if aIndex is 1, the 2nd is returned
+ */
+TNotifyContextStatusChange& CSimPacketContext::GetContextStatusChangeAt(TInt aIndex)
+	{
+	TInt count = 0;
+	for (TInt i = 0; i < iNotifyContextStatusChangeArray->Count(); i++)
+		{
+		if (iContextName.Compare(iNotifyContextStatusChangeArray->At(i).iContextName) == 0)
+			{
+			if (count == aIndex)
+				{
+				return iNotifyContextStatusChangeArray->At(i);
+				}
+			else
+				{
+				count++;
+				}
+			}
+		}
+	return iNotifyContextStatusChangeArray->At(0);
+	}
+
+/**
+ Retrieves the number of context status changes entries configured for the current packet context
+ */
+TInt CSimPacketContext::GetContextStatusChangeCount()
+	{
+	TInt count = 0;
+	for (TInt i = 0; i < iNotifyContextStatusChangeArray->Count(); i++)
+		{
+		if (iContextName.Compare(iNotifyContextStatusChangeArray->At(i).iContextName) == 0)
+			{
+			count++;
+			}
+		}
+	return count;
+	}
+	
+void CSimPacketContext::GetContextStatusChangeSettingsL()
+	{
+	TPtrC8 contextStatusChangeType;
+	TInt ret;
+	
+	iNotifyContextStatusChangeArray = new (ELeave) CArrayFixFlat<TNotifyContextStatusChange>(KNumberofConfigs);
+
+	// default to using timer to drive context status changes
+	iNotifyContextStatusChangeType = ETimer;
+	const CTestConfigItem* item = CfgFile()->Item(KNotifyContextStatusChangeType);
+	if (item)
+		{
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextStatusChangeType);
+		if(ret==KErrNone && contextStatusChangeType.Compare(KNotificationTypePublishSubscribe)==0)
+			iNotifyContextStatusChangeType = EPublishAndSubscribe;
+		}
+	
+	TInt count = CfgFile()->ItemCount(KNotifyContextStatusChange);		
+
+	for(TInt i=0;i<count;i++)							// set up NotifyContextStatusChange info
+		{
+		item = CfgFile()->Item(KNotifyContextStatusChange,i);
+		if(!item)
+			break;
+
+		TNotifyContextStatusChange notifyContextStatusChange;
+		TPtrC8 contextName;
+		TInt duration, contextStatus;
+		
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,contextName);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("NotifyContextStatusChange::contextName",ret,0,&KNotifyContextStatusChange);
+			continue;
+			}
+		else
+			{
+				notifyContextStatusChange.iContextName.Copy(contextName);
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,duration);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("NotifyContextStatusChange::duration",ret,1,&KNotifyContextStatusChange);
+			continue;
+			}
+		else
+			notifyContextStatusChange.iDuration = duration;
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,contextStatus);
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("NotifyContextStatusChange::duration",ret,2,&KNotifyContextStatusChange);
+			continue;
+			}
+		else
+			notifyContextStatusChange.iStatus = (RPacketContext::TContextStatus)contextStatus;		
+
+		iNotifyContextStatusChangeArray->AppendL(notifyContextStatusChange);
+
+		if(GetContextStatusChangeCount() != 0)
+			{
+			iCurrentNotifyContextStatusChange=(RPacketContext::TContextStatus)GetContextStatusChangeAt(0).iStatus;
+			if (iNotifyContextStatusChangeType == ETimer)
+				{
+				iNotifyContextStatusChangeIndex=0;
+				iNotifyContextStatusChangeTimer->Start(GetContextStatusChangeAt(0).iDuration,this,ETimerIdPcktContextStatusChange);
+				}
+			}
+		}
+	}
+
+void CSimPacketContext::ConstructPacketFiltersL()
+	{
+	iPacketFilterInfoArray = new (ELeave) CArrayFixFlat<TPacketFilterV3>(KNumberofConfigs);
+
+	const CTestConfigItem* item;
+	TInt count, ret;
+	count = CfgFile()->ItemCount(KPacketFilterInfo);		
+
+	for(TInt i=0;i<count;i++)							// set up Packet filter info
+		{
+		item = CfgFile()->Item(KPacketFilterInfo,i);
+		if(!item)
+			break;
+
+		TPtrC8 srcAddr, srcAddrSubnetMask;
+		TInt id, evaluationPrecedenceIndex, protocolNumberOrNextHeader;
+		TInt srcPortMin, srcPortMax, destPortMin, destPortMax, ipSecSPI, toSorTrafficClass;
+		TInt flowLabel, filterType; 
+		TPacketFilterV3 packetFilter;
+
+		// Check that the data structure is supported by the simulated TSY version
+		if(iPhone->iSimTsyVersion < 3) // same version as TPacketFilterVx
+			{
+		 	(void)User::Leave(KErrNotSupported);
+			}
+		
+		
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,0,id);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::id",ret,0,&KPacketFilterInfo);
+			continue;	
+			}
+		else
+			{
+			packetFilter.iId= id;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,1,evaluationPrecedenceIndex);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::evaluationPrecedenceIndex",ret,1,&KPacketFilterInfo);
+			continue;	
+			}
+		else
+			{
+			packetFilter.iEvaluationPrecedenceIndex= evaluationPrecedenceIndex;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,2,srcAddr);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::srcAddr",ret,2,&KPacketFilterInfo);
+			continue;
+			}
+		else
+			{
+			TUint8 digit=0;
+			TPtrC8 address;
+
+			ret=CTestConfig::GetElement(srcAddr,'.',0, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[0] = digit;
+			else
+				packetFilter.iSrcAddr[0] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',1, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[1] = digit;
+			else
+				packetFilter.iSrcAddr[1] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',2, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[2] = digit;
+			else
+				packetFilter.iSrcAddr[2] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',3, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[3] = digit;
+			else
+				packetFilter.iSrcAddr[3] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',4, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[4] = digit;
+			else
+				packetFilter.iSrcAddr[4] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',5, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[5] = digit;
+			else
+				packetFilter.iSrcAddr[5] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',6, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[6] = digit;
+			else
+				packetFilter.iSrcAddr[6] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',7, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[7] = digit;
+			else
+				packetFilter.iSrcAddr[7] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',8, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[8] = digit;
+			else
+				packetFilter.iSrcAddr[8] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',9, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[9] = digit;
+			else
+				packetFilter.iSrcAddr[9] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',10, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[10] = digit;
+			else
+				packetFilter.iSrcAddr[10] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',11, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[11] = digit;
+			else
+				packetFilter.iSrcAddr[11] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',12, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[12] = digit;
+			else
+				packetFilter.iSrcAddr[12] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',13, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[13] = digit;
+			else
+				packetFilter.iSrcAddr[13] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',14, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[14] = digit;
+			else
+				packetFilter.iSrcAddr[14] = 0;
+			ret=CTestConfig::GetElement(srcAddr,'.',15, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddr[15] = digit;
+			else
+				packetFilter.iSrcAddr[15] = 0;
+			
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,3,srcAddrSubnetMask);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::srcAddrSubnetMask",ret,3,&KPacketFilterInfo);
+			continue;
+			}
+		else
+			{
+			TUint8 digit=0;
+			TPtrC8 address;
+
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',0, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[0] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[0] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',1, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[1] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[1] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',2, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[2] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[2] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',3, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[3] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[3] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',4, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[4] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[4] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',5, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[5] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[5] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',6, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[6] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[6] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',7, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[7] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[7] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',8, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[8] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[8] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',9, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[9] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[9] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',10, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[10] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[10] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',11, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[11] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[11] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',12, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[12] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[12] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',13, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[13] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[13] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',14, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[14] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[14] = 0;
+			ret=CTestConfig::GetElement(srcAddrSubnetMask,'.',15, address);
+			if((AsciiToNum(address, digit)==KErrNone)
+				&& (ret == KErrNone))
+				packetFilter.iSrcAddrSubnetMask[15] = digit;
+			else
+				packetFilter.iSrcAddrSubnetMask[15] = 0;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,4,protocolNumberOrNextHeader);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::protocolNumberOrNextNumber",ret,4,&KPacketFilterInfo);
+			packetFilter.iProtocolNumberOrNextHeader = KUnsetInteger;				
+			}
+		else
+			{
+			packetFilter.iProtocolNumberOrNextHeader= protocolNumberOrNextHeader;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,5,srcPortMin);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::srcPortMin",ret,5,&KPacketFilterInfo);
+			packetFilter.iSrcPortMin = KUnsetInteger;
+			}
+		else
+			{
+			packetFilter.iSrcPortMin= srcPortMin;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,6,srcPortMax);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::srcPortMax",ret,6,&KPacketFilterInfo);
+			packetFilter.iSrcPortMax = KUnsetInteger;
+			}
+		else
+			{
+			packetFilter.iSrcPortMax= srcPortMax;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,7,destPortMin);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::destPortMin",ret,7,&KPacketFilterInfo);
+			packetFilter.iDestPortMin = KUnsetInteger;
+			}
+		else
+			{
+			packetFilter.iDestPortMin= destPortMin;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,8,destPortMax);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::srcPortMax",ret,8,&KPacketFilterInfo);
+			packetFilter.iDestPortMax = KUnsetInteger;
+			}
+		else
+			{
+			packetFilter.iDestPortMax= destPortMax;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,9,ipSecSPI);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::ipSecSPI",ret,9,&KPacketFilterInfo);
+			packetFilter.iIPSecSPI = KUnsetInteger;
+			}
+		else
+			{
+			packetFilter.iIPSecSPI= ipSecSPI;
+			}
+	
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,10,toSorTrafficClass);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::toSorTrafficClass",ret,10,&KPacketFilterInfo);
+			continue;
+			}
+		else
+			{
+			packetFilter.iTOSorTrafficClass = (TUint16)toSorTrafficClass;
+			}
+
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,11,flowLabel);
+
+		if(ret!=KErrNone)
+			{
+			LOGPARSERR("PacketFilterInfo::flowLabel",ret,11,&KPacketFilterInfo);
+			packetFilter.iFlowLabel = KUnsetInteger;
+			}
+		else
+			{
+			packetFilter.iFlowLabel = flowLabel;
+			}
+		
+		ret=CTestConfig::GetElement(item->Value(),KStdDelimiter,12,filterType);
+
+		if(ret!=KErrNone)
+			{
+			if(ret == KErrNotFound)
+				{
+				LOGCONFIG1("CONFIGURATION FILE PARSING - PacketFilterInfo::TPacketFilterV2 info encountered");
+				packetFilter.iFilterType = RPacketContext::EPacketFilterTypeUnknown;
+				}
+			else
+				{
+				LOGPARSERR("PacketFilterInfo::filterType",ret,12,&KPacketFilterInfo);
+				continue;	
+				}
+			}
+		else
+			{
+			packetFilter.iFilterType = static_cast<RPacketContext::TPacketFilterType>(filterType);
+			}
+					
+		packetFilter.iAdded = EFalse;
+		TRAP_IGNORE(iPacketFilterInfoArray->AppendL(packetFilter));
+		}
+	}
+
+CSimPacketContext::~CSimPacketContext()
+/**
+* Trivial Destructor
+* Closes all CObject type objects and destroys all other objects created in the ConstructL()
+*
+*/
+	{
+	LOGPACKET1("CSimPacketContext: Entered destructor");
+	
+	if (iContextConfigParams != NULL)
+	{
+		iContextConfigParams->Delete(0, iContextConfigParams->Count());
+		delete iContextConfigParams;
+	}
+	if (iContextConfigsRel99 != NULL)
+	{
+		iContextConfigsRel99->Delete(0,iContextConfigsRel99->Count());
+		delete iContextConfigsRel99;
+	}
+	if (iCommSetupArray != NULL)
+	{
+		iCommSetupArray->Delete(0, iCommSetupArray->Count());
+		delete iCommSetupArray;
+	}
+	if (iNtRas != NULL)
+		delete iNtRas;
+	
+	if (iTimer != NULL)
+		delete iTimer;
+
+	if (iSetConfigTimer != NULL)
+		delete iSetConfigTimer;
+
+	if (iInitContextTimer != NULL)
+		delete iInitContextTimer;
+
+	if (iCreateTftTimer != NULL)
+		delete iCreateTftTimer;
+
+	if (iNotifyContextStatusChangeTimer != NULL)
+		delete iNotifyContextStatusChangeTimer;
+	
+	if (iNotifyContextConfigChangeTimer != NULL)
+		delete iNotifyContextConfigChangeTimer;
+
+	if (iPacketFilterInfoArray != NULL)
+	{
+		iPacketFilterInfoArray->Delete(0, iPacketFilterInfoArray->Count());
+		delete iPacketFilterInfoArray;
+	}
+	if (iNotifyContextStatusChangeArray != NULL)
+	{
+		iNotifyContextStatusChangeArray->Delete(0, iNotifyContextStatusChangeArray->Count());
+		delete iNotifyContextStatusChangeArray;
+	}
+	iPacketService->DecrementContextCount();
+
+	if (iAuthorizationTokenResponse != NULL)
+		{
+		iAuthorizationTokenResponse->Delete(0, iAuthorizationTokenResponse->Count());
+		delete iAuthorizationTokenResponse;
+		}
+	
+	if (iMediaAuthorization != NULL)
+		{
+		for(TUint i=0; i<iMediaAuthorization->Count(); i++)
+			{
+			if (iMediaAuthorization->At(i).iFlowIds.Count() > 0)
+				{
+				iMediaAuthorization->At(i).iFlowIds.Reset();				
+				}
+			}
+		iMediaAuthorization->Delete(0, iMediaAuthorization->Count());
+		delete iMediaAuthorization;
+		}
+	
+	delete iContextStatusChange;
+	
+	if(iSetConfigData !=NULL )
+		{
+		iSetConfigData->Delete(0, iSetConfigData->Count());
+		delete iSetConfigData;
+		}
+	
+	if(iNotifyContextConfigChangeArray !=NULL)
+		{
+		iNotifyContextConfigChangeArray->Delete(0,iNotifyContextConfigChangeArray->Count());
+		delete iNotifyContextConfigChangeArray;
+		}
+}
+
+CTelObject* CSimPacketContext::OpenNewObjectByNameL(const TDesC& aName)
+/**
+* Returns a pointer to an existing QoS object identified by name.
+* This is not support and if called will leave.
+*
+* @param aName name of the QoS object to be opened
+* @return CTelObject will return null and leave
+* @leave Leaves with KErrNotSupported if the name is not as expected.
+*/
+	{
+		if (aName.Compare(iQoSName) == KErrNone)
+			{
+				return iPacketqos;
+			}
+
+		User::Leave(KErrNotSupported);
+		return NULL;
+	}
+
+
+CTelObject* CSimPacketContext::OpenNewObjectL(TDes& aNewName)
+/**
+* Creates a new CSimPacketQoS object and returns a pointer to it.
+*
+* @param aNewName new name of the object created
+* @return CTelObject pointer to the CSimPacketQos object created
+* @leave Leaves if out of memory.
+*/
+	{
+	aNewName.Append(KSimPacketQosName);
+	aNewName.AppendNum(++iQoSObjectCount);
+	iQoSName.Copy(aNewName);
+	iPacketqos = CSimPacketQoS::NewL(iPhone, this);
+	return iPacketqos;
+	}
+
+CTelObject::TReqMode CSimPacketContext::ReqModeL(const TInt aIpc)
+/**
+* ReqModeL is called from the server's CTelObject::ReqAnalyserL
+* in order to check the type of request it has.
+* 
+* 
+* @param aIpc the ipc number that identifies the client request
+* @return CTelObject::TReqMode The request mode to be used for this request
+* @leave Leaves if not supported by this tsy
+*/
+	{
+	CTelObject::TReqMode ret=0;
+	switch (aIpc)
+		{
+		case EPacketContextSetConfig:
+		case EPacketContextActivate:
+		case EPacketContextDeactivate:
+		case EPacketContextDelete:
+		case EPacketContextLoanCommPort:
+		case EPacketContextRecoverCommPort:
+		case EPacketContextGetConfig:
+		case EPacketContextGetStatus:
+		case EPacketContextGetDataVolumeTransferred:
+		case EPacketContextGetLastErrorCause:
+		case EPacketContextInitialiseContext:
+		case EPacketContextEnumeratePacketFilters:
+		case EPacketContextGetPacketFilterInfo:
+		case EPacketContextAddPacketFilter:
+		case EPacketContextRemovePacketFilter:
+		case EPacketContextModifyActiveContext:
+		case EPacketContextGetProfileName:
+		case EPacketContextGetDNSInfo:
+		case EPacketAddMediaAuthorization:
+		case EPacketRemoveMediaAuthorization:
+		case EPacketContextCreateNewTFT:
+		case EPacketContextDeleteTFT:
+			break;
+
+		case EPacketContextNotifyConfigChanged:
+		case EPacketContextNotifyStatusChange:
+		case EPacketContextNotifyDataTransferred:
+			ret=KReqModeMultipleCompletionEnabled | KReqModeRePostImmediately;
+			break;
+
+		default:
+			User::Leave(KErrNotSupported);
+			break;
+		}
+
+	return ret;
+	}
+
+TInt CSimPacketContext::GetProfileName(const TTsyReqHandle aTsyReqHandle, TName* aQoSProfile)
+	{
+/**
+* This synchronous method allows a client to retrieve the name 
+* of the QoS profile. The profile name is passed back in the aQoSProfile parameter
+*/
+	aQoSProfile->Copy(iQoSName);
+	ReqCompleted(aTsyReqHandle,KErrNone);
+	return KErrNone; 
+	}
+
+TInt CSimPacketContext::RegisterNotification(const TInt aIpc)
+/**
+* RegisterNotification is called when the server recognises that this notification
+* is being posted for the first time on this sub-session object.
+* 
+* It enables the TSY to "turn on" any regular notification messages that it may receive 
+* from the phone
+*
+* @param aIpc the ipc number that identifies the client request
+* @return err KErrNone if fine
+*/
+	{
+	switch (aIpc)
+		{
+		case EPacketContextNotifyConfigChanged:
+		case EPacketContextNotifyStatusChange:
+		case EPacketContextNotifyDataTransferred:
+			return KErrNone;
+		default:
+			// Unknown or invalid IPC
+			LOGPACKET1("CSimPacketContext: Register error, unknown IPC");
+			return KErrNotSupported;
+		}
+	}
+
+TInt CSimPacketContext::DeregisterNotification(const TInt aIpc)
+/**
+* DeregisterNotification is called when the server recognises that this notification
+* will not be posted again because the last client to have a handle on this sub-session
+* object has just closed the handle.
+*
+* It enables the TSY to "turn off" any regular notification messages that it may 
+* receive from the phone
+*
+* @param aIpc the ipc number that identifies the client request
+* @return err KErrNone if fine
+*/
+	{
+	switch (aIpc)
+		{
+		case EPacketContextNotifyConfigChanged:
+		case EPacketContextNotifyStatusChange:
+		case EPacketContextNotifyDataTransferred:
+			LOGPACKET1("CSimPacketContext: DeregisterNotification");
+			return KErrNone;
+		default:
+			// Unknown or invalid IPC
+			LOGPACKET1("CSimPacketContext: Deregister error, unknown IPC");
+			return KErrNotSupported;
+		}
+	}
+
+TInt CSimPacketContext::NumberOfSlotsL(const TInt aIpc)
+/**
+* NumberOfSlotsL is called by the server when it is registering a new notification
+* It enables the TSY to tell the server how many buffer slots to allocate for
+* "repost immediately" notifications that may trigger before clients collect them
+*
+* @param aIpc the ipc number that identifies the client request
+* @return err KErrNone if fine
+*/
+	{
+	TInt numberOfSlots=1;
+	switch (aIpc)
+		{
+		case EPacketContextNotifyConfigChanged:
+		case EPacketContextNotifyStatusChange:
+		case EPacketContextNotifyDataTransferred:
+			LOGPACKET1("CGprsDGprsTsy: Registered with 5 slots");
+			numberOfSlots=5;
+			break;
+		default:
+			// Unknown or invalid IPC
+			LOGPACKET1("CSimPacketContext: Number of Slots error, unknown IPC");
+			User::Leave(KErrNotSupported);
+			break;
+		}  
+	return numberOfSlots;
+	}
+
+
+TInt CSimPacketContext::ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,
+							  const TDataPackage& aPackage)
+/**
+* ExtFunc is called by the server when it has a "extended", i.e. non-core ETel request
+* for the TSY to process.
+* A request handle, request type and request data are passed to the TSY
+* 
+* @param aTsyReqHandle  The request handle for completing the request 
+* @param aIpc Ipc representing the request
+* @param aPackage any data associated with the request
+* @return err KErrNone if request completes ok
+*/
+	{
+	//< if this context has been deleted then the client can not do anything with it
+	//< if the client wants to use this class, the client must open a new object by 
+	//< name with the name for this context and this will reactivate the context.
+ 	if(iDeleted && (aIpc != EPacketContextGetStatus))  
+		{
+		ReqCompleted(aTsyReqHandle,KErrNotReady);
+		return KErrNone;
+		}
+
+	TAny* dataPtr=aPackage.Ptr1();
+	TAny* dataPtr2=aPackage.Ptr2();
+
+	switch (aIpc)
+		{
+		case EPacketContextSetConfig:
+			{
+			if (iSetConfigCallCount <= iSetConfigFail.iNumberOfTimes
+				|| iSetConfigFail.iNumberOfTimes==0)
+				{
+				if (iSetConfigDelay > 0)
+					{
+					TSetConfigData setConfigData;
+					setConfigData.iTsyReqHandle = aTsyReqHandle;
+					setConfigData.iData = aPackage.Des1n();
+
+					TRAPD(ret, iSetConfigData->AppendL(setConfigData) );
+					if (ret != KErrNone)
+                		{
+                		LOGPACKET1("CSimPacketContext::ExtFunc AppendL call fail");
+                		return ret;
+                		}
+                		
+					iSetConfigTimer->Start(iSetConfigDelay,this,ETimerIdPcktContextSetConfig);
+					}
+				else
+					{
+					SetConfig(aTsyReqHandle, aPackage.Des1n());
+					}
+				iSetConfigCallCount++;
+				return KErrNone;
+			}
+			else
+				{
+				iSetConfigCallCount=0;
+				iSetConfigFail.iNumberOfTimes = 0;
+
+				ReqCompleted(aTsyReqHandle, iSetConfigFail.iFailErrorCode);
+				return KErrNone;				// if SetConfig() has been called the number of times allowed in SetConfigFail, fail request
+				}
+			}
+		case EPacketContextGetProfileName:
+			return GetProfileName(aTsyReqHandle, REINTERPRET_CAST(TName*,dataPtr));
+		case EPacketContextSetConfigCancel:
+			return SetConfigCancel(aTsyReqHandle);
+		case EPacketContextGetConfig:
+			return GetConfig(aTsyReqHandle, aPackage.Des1n());
+		case EPacketContextGetConfigCancel:
+			return GetConfigCancel(aTsyReqHandle);
+		case EPacketContextNotifyConfigChanged:
+			return NotifyConfigChanged(aTsyReqHandle, aPackage.Des1n());
+		case EPacketContextNotifyConfigChangedCancel:
+			return NotifyConfigChangedCancel(aTsyReqHandle);
+		case EPacketContextActivate:
+			{	//< Ensures that theres only one context active as only one active context is 
+				//<permitted at any one time
+			if(iIsActive)
+				{
+				ReqCompleted(aTsyReqHandle,KErrEtelCallAlreadyActive);
+				return KErrNone;
+				}
+			else
+				return Activate(aTsyReqHandle);
+			}
+		case EPacketContextActivateCancel:
+			return ActivateCancel(aTsyReqHandle);
+		case EPacketContextDeactivate:
+			return Deactivate(aTsyReqHandle);
+		case EPacketContextDeactivateCancel:
+			return DeactivateCancel(aTsyReqHandle);
+		case EPacketContextDelete:
+			return Delete(aTsyReqHandle);
+		case EPacketContextDeleteCancel:
+			return DeleteCancel(aTsyReqHandle);
+		case EPacketContextLoanCommPort:
+			return LoanCommPort(aTsyReqHandle,
+			REINTERPRET_CAST(RCall::TCommPort*, dataPtr));
+		case EPacketContextLoanCommPortCancel:
+			return LoanCommPortCancel(aTsyReqHandle);
+		case EPacketContextRecoverCommPort:
+			return RecoverCommPort(aTsyReqHandle);
+		case EPacketContextRecoverCommPortCancel:
+			return RecoverCommPortCancel(aTsyReqHandle);
+		case EPacketContextGetStatus:
+			return GetStatus(aTsyReqHandle,
+			REINTERPRET_CAST(RPacketContext::TContextStatus*, dataPtr));
+		case EPacketContextNotifyStatusChange:
+			return NotifyStatusChange(aTsyReqHandle,
+			REINTERPRET_CAST(RPacketContext::TContextStatus*, dataPtr));
+		case EPacketContextNotifyStatusChangeCancel:
+			return NotifyStatusChangeCancel(aTsyReqHandle);
+		case EPacketContextGetDataVolumeTransferred:
+			return GetDataVolumeTransferred(aTsyReqHandle,
+			REINTERPRET_CAST(RPacketContext::TDataVolume*, dataPtr));
+		case EPacketContextNotifyDataTransferred:
+			return NotifyDataTransferred(aTsyReqHandle,
+			REINTERPRET_CAST(RPacketContext::TDataVolume*, dataPtr),
+			REINTERPRET_CAST(RPacketContext::TNotifyDataTransferredRequest*, dataPtr2));
+		case EPacketContextNotifyDataTransferredCancel:
+			return NotifyDataTransferredCancel(aTsyReqHandle);
+		case EPacketContextGetLastErrorCause:
+			return GetLastErrorCause(aTsyReqHandle,
+			REINTERPRET_CAST(TInt*, dataPtr));
+		case EPacketContextInitialiseContextCancel:
+			return InitialiseContextCancel(aTsyReqHandle);
+		case EPacketContextEnumeratePacketFiltersCancel:
+			return EnumeratePacketFiltersCancel(aTsyReqHandle);
+		case EPacketContextGetPacketFilterInfoCancel:
+			return GetPacketFilterInfoCancel(aTsyReqHandle);
+		case EPacketContextAddPacketFilterCancel:
+			return AddPacketFilterCancel(aTsyReqHandle);
+		case EPacketContextRemovePacketFilterCancel:
+			return RemovePacketFilterCancel(aTsyReqHandle);
+		case EPacketContextModifyActiveContextCancel:
+			return ModifyActiveContextCancel(aTsyReqHandle);		
+		case EPacketContextInitialiseContext:
+			return InitialiseContext(aTsyReqHandle, aPackage.Des1n());
+		case EPacketContextEnumeratePacketFilters:
+			return EnumeratePacketFilters(aTsyReqHandle, *REINTERPRET_CAST(TInt*, dataPtr));
+		case EPacketContextGetPacketFilterInfo:
+			TInt retValue;
+			TRAPD(err, retValue = GetPacketFilterInfoL(aTsyReqHandle, *REINTERPRET_CAST(TInt*, dataPtr), aPackage.Des2n()));
+			if(err != KErrNone)
+				{
+				retValue = err;
+				}
+			return retValue;
+		case EPacketContextAddPacketFilter:
+			return AddPacketFilter(aTsyReqHandle, aPackage.Des1n());
+		case EPacketContextRemovePacketFilter:
+			return RemovePacketFilter(aTsyReqHandle, *REINTERPRET_CAST(TInt*, dataPtr));
+		case EPacketContextModifyActiveContext:
+			return ModifyActiveContext(aTsyReqHandle);
+		case EPacketContextGetDNSInfo:
+			return GetDnsInfo(aTsyReqHandle, aPackage.Des1n());
+		case EPacketContextGetDNSInfoCancel:
+			return GetDnsInfoCancel(aTsyReqHandle);
+		case EPacketAddMediaAuthorization:
+			return GetAddMediaAuthorization(aTsyReqHandle, aPackage.Des1n());
+		case EPacketAddMediaAuthorizationCancel:
+			return GetAddMediaAuthorizationCancel(aTsyReqHandle);
+		case EPacketRemoveMediaAuthorization:
+			return GetRemoveMediaAuthorization(aTsyReqHandle, reinterpret_cast<RPacketContext::TAuthorizationToken*>(dataPtr));
+		case EPacketRemoveMediaAuthorizationCancel:
+			return GetRemoveMediaAuthorizationCancel(aTsyReqHandle);
+		case EPacketContextCreateNewTFT:
+			return CreateNewTFT(aTsyReqHandle, REINTERPRET_CAST(TInt*, dataPtr));
+		case EPacketContextCreateNewTFTCancel:
+			return CreateNewTFTCancel(aTsyReqHandle);
+		case EPacketContextDeleteTFT:
+			return DeleteTFT(aTsyReqHandle);
+		case EPacketContextDeleteTFTCancel:
+			return DeleteTFTCancel(aTsyReqHandle);
+		default:
+			return KErrNotSupported;
+		}
+	}
+
+TInt CSimPacketContext::CancelService(const TInt aIpc,const TTsyReqHandle aTsyReqHandle)
+/**
+* CancelService is called by the server when it is "cleaning-up" any still outstanding
+* asynchronous requests before closing a client's sub-session.
+* This will happen if a client closes its R-class handle without cancelling outstanding asynchronous requests.
+* 
+* @param aTsyReqHandle  The request handle for completing the request 
+* @param aIpc Ipc representing the request
+* @return err KErrNone if request completes ok
+*/
+	{
+	LOGPACKET1("CSimPacketContext: - CancelService called");
+	switch (aIpc)
+		{
+		case EPacketContextSetConfig:
+			return SetConfigCancel(aTsyReqHandle);
+		case EPacketContextGetConfig:
+			return GetConfigCancel(aTsyReqHandle);
+		case EPacketContextNotifyConfigChanged:
+			return NotifyConfigChangedCancel(aTsyReqHandle);
+		case EPacketContextActivate:
+			return ActivateCancel(aTsyReqHandle);
+		case EPacketContextDeactivate:
+			return DeactivateCancel(aTsyReqHandle);
+		case EPacketContextDelete:
+			return DeleteCancel(aTsyReqHandle);
+		case EPacketContextLoanCommPort:
+			return LoanCommPortCancel(aTsyReqHandle);
+		case EPacketContextRecoverCommPort:
+			return RecoverCommPortCancel(aTsyReqHandle);
+		case EPacketContextNotifyStatusChange:
+			return NotifyStatusChangeCancel(aTsyReqHandle);
+		case EPacketContextNotifyDataTransferred:
+			return NotifyDataTransferredCancel(aTsyReqHandle);
+		case EPacketContextInitialiseContext:
+			return InitialiseContextCancel(aTsyReqHandle);
+		case EPacketContextEnumeratePacketFilters:
+			return EnumeratePacketFiltersCancel(aTsyReqHandle);
+		case EPacketContextGetPacketFilterInfo:
+			return GetPacketFilterInfoCancel(aTsyReqHandle);
+		case EPacketContextAddPacketFilter:
+			return AddPacketFilterCancel(aTsyReqHandle);
+		case EPacketContextRemovePacketFilter:
+			return RemovePacketFilterCancel(aTsyReqHandle);
+		case EPacketContextModifyActiveContext:
+			return ModifyActiveContextCancel(aTsyReqHandle);
+		case EPacketContextGetDNSInfo:
+			return GetDnsInfoCancel(aTsyReqHandle);
+		case EPacketAddMediaAuthorization:
+			return GetAddMediaAuthorizationCancel(aTsyReqHandle);
+		case EPacketRemoveMediaAuthorization:
+			return GetRemoveMediaAuthorizationCancel(aTsyReqHandle);		
+		case EPacketContextCreateNewTFT:
+			return CreateNewTFTCancel(aTsyReqHandle);
+		case EPacketContextDeleteTFT:
+			return DeleteTFTCancel(aTsyReqHandle);
+		default:
+			return KErrGeneral; 
+		} 
+	}
+
+TInt CSimPacketContext::TSetConfigData::Find(CArrayFixFlat<TSetConfigData>* aSetConfigArray, TTsyReqHandle aTsyReqHandle, TInt& aIndex)
+	{
+	for (TInt i = 0; i < aSetConfigArray->Count(); i++)
+		{
+		if (aSetConfigArray->At(i).iTsyReqHandle == aTsyReqHandle)
+			{
+			aIndex = i;
+			return KErrNone;
+			}
+		}
+	aIndex = -1;
+	return KErrNotFound;
+	}
+
+TInt CSimPacketContext::SetConfig(const TTsyReqHandle aTsyReqHandle,const TDesC8* aConfig)
+/**
+* Sets the configuration
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aConfig pointer containing the parameters to set to.
+* @return KErrNone
+
+*/
+	{
+	LOGPACKET1("CSimPacketContext::SetConfig called");
+
+	TPckg<TPacketDataConfigBase>* configBase = (TPckg<TPacketDataConfigBase>*)aConfig;
+	TPacketDataConfigBase& configBaseV1 = (*configBase)();
+
+	TInt err = KErrGeneral;
+
+	//Extract the config params to be set
+	TContextConfigParam contextConfigToSet;
+
+	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
+		{
+		TPckg<RPacketContext::TContextConfigGPRS>* configParam = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
+		RPacketContext::TContextConfigGPRS& contextConfigV1 = (*configParam)();
+
+		CSimContextHelper::SetTContextConfigParamFromTContextConfigGPRS( contextConfigToSet, contextConfigV1 );		
+		}
+		
+	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
+		{
+		TPckg<RPacketContext::TContextConfigR99_R4>* configParam = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
+		RPacketContext::TContextConfigR99_R4& contextConfigV1 = (*configParam)();
+
+		CSimContextHelper::SetTContextConfigParamFromTContextConfigR99_R4( contextConfigToSet, contextConfigV1 );		
+		}
+		
+	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
+		{
+		TPckg<RPacketContext::TContextConfig_R5>* configParam = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
+		RPacketContext::TContextConfig_R5& contextConfigV1 = (*configParam)();
+
+		CSimContextHelper::SetTContextConfigParamFromTContextConfig_R5( contextConfigToSet, contextConfigV1 );
+		}
+
+	// Check the context config params to be set with the pre-defined 
+	// list of allowed config params
+	if((configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)||
+		configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4||
+		configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
+		{
+		
+		TInt index;
+		for(index=0; index < iContextConfigParams->Count(); index++)
+			{
+			TContextConfigParam thisConfig = iContextConfigParams->At(index);
+
+			if ( !CSimContextHelper::EqualTContextConfigParam(contextConfigToSet, thisConfig ) )
+				{
+				err = KErrCorrupt;
+				}
+			else
+				{
+				err = KErrNone;
+				iContextConfigParamsIndex = index;
+				
+				//Check for and complete any pending notifications
+				if(iNotifyConfigGPRS.iNotifyPending)
+					{
+					iNotifyConfigGPRS.iNotifyPending=EFalse;
+					CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigGPRS*)iNotifyConfigGPRS.iNotifyData);
+					ReqCompleted(iNotifyConfigGPRS.iNotifyHandle,KErrNone);
+					}
+					
+				if(iNotifyConfigR99.iNotifyPending)
+					{
+					iNotifyConfigR99.iNotifyPending=EFalse;
+					CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigR99_R4*)iNotifyConfigR99.iNotifyData);
+					ReqCompleted(iNotifyConfigR99.iNotifyHandle,KErrNone);						
+					}
+					
+				if(iNotifyConfigR5.iNotifyPending)
+					{
+					iNotifyConfigR5.iNotifyPending=EFalse;
+					CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfig_R5*)iNotifyConfigR5.iNotifyData);
+					ReqCompleted(iNotifyConfigR5.iNotifyHandle,KErrNone);						
+					}
+				break;
+				}
+			}//end for loop
+		ReqCompleted(aTsyReqHandle,err);
+		}//end if((configBaseV1....
+
+	else
+		{
+		ReqCompleted(aTsyReqHandle,KErrCorrupt);
+		}
+
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::SetConfigCancel(const TTsyReqHandle aTsyReqHandle)
+/**
+* Cancels the Setconfig request.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @return err KErrNone 
+*/
+	{
+	TInt index  = 0;
+	if (TSetConfigData::Find(iSetConfigData, aTsyReqHandle, index) == KErrNone)
+		{
+		iSetConfigData->Delete(index);
+		}
+	if (iSetConfigData->Count() == 0)
+		iSetConfigTimer->Cancel();
+	
+	ReqCompleted(aTsyReqHandle, KErrCancel);
+	
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetConfig(const TTsyReqHandle aTsyReqHandle,TDes8* aConfig)
+/**
+* Retrieves and returns the configuration
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aConfig pointer to the data to retrieve
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::GetConfig called");
+	TPckg<TPacketDataConfigBase>* configBase = (TPckg<TPacketDataConfigBase>*)aConfig;
+	TPacketDataConfigBase& configBaseV1 = (*configBase)();
+	
+	// GPRS configuration
+	if(configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigGPRS)
+		{
+		TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
+
+		TPckg<RPacketContext::TContextConfigGPRS>* contextConfigGPRSPckg = (TPckg<RPacketContext::TContextConfigGPRS>*)aConfig;
+		RPacketContext::TContextConfigGPRS& contextConfigV1 = (*contextConfigGPRSPckg)();
+
+		CSimContextHelper::ConvertConfigParams(config, contextConfigV1);
+		
+		ReqCompleted(aTsyReqHandle,KErrNone);
+		}
+
+	// R99/R4 configuration
+	else if (configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel99Rel4)
+		{
+		TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
+
+		TPckg<RPacketContext::TContextConfigR99_R4>* configRel99Pckg = (TPckg<RPacketContext::TContextConfigR99_R4>*)aConfig;
+		RPacketContext::TContextConfigR99_R4& configRel99 = (*configRel99Pckg)();
+	
+		CSimContextHelper::ConvertConfigParams(config, configRel99);
+		
+		ReqCompleted(aTsyReqHandle,KErrNone);
+		}
+		
+	// R5 configuration
+	else if (configBaseV1.ExtensionId()==TPacketDataConfigBase::KConfigRel5)
+		{
+		TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
+
+		TPckg<RPacketContext::TContextConfig_R5>* configRel5Pckg = (TPckg<RPacketContext::TContextConfig_R5>*)aConfig;
+		RPacketContext::TContextConfig_R5& configRel5 = (*configRel5Pckg)();
+
+		CSimContextHelper::ConvertConfigParams(config, configRel5);
+		
+		ReqCompleted(aTsyReqHandle,KErrNone);
+		}
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetConfigCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+/**
+* Cancels the Getconfig request.  This method will do nothing in this version of SimTSY.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @return err KErrNone 
+*/
+	{
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::NotifyConfigChanged(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig)
+/**
+* Records a client interest in being notified of a change in the Context Configuration.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aConfig pointer to the context config to store the config info when the config changes.
+* @return KErrNone
+*/
+	{
+	TPckg<TPacketDataConfigBase>* configBase = (TPckg<TPacketDataConfigBase>*)aConfig;
+	TPacketDataConfigBase& configBaseV1 = (*configBase)();
+	
+	if(configBaseV1.ExtensionId() == TPacketDataConfigBase::KConfigGPRS)
+		{
+		__ASSERT_ALWAYS(!iNotifyConfigGPRS.iNotifyPending,SimPanic(ENotificationAlreadyPending));
+
+		iNotifyConfigGPRS.iNotifyPending = ETrue;
+		iNotifyConfigGPRS.iNotifyHandle = aTsyReqHandle;
+		iNotifyConfigGPRS.iNotifyData = &configBaseV1;
+		}
+	else if(configBaseV1.ExtensionId() == TPacketDataConfigBase::KConfigRel99Rel4)
+		{
+		__ASSERT_ALWAYS(!iNotifyConfigR99.iNotifyPending,SimPanic(ENotificationAlreadyPending));
+
+		iNotifyConfigR99.iNotifyPending = ETrue;
+		iNotifyConfigR99.iNotifyHandle = aTsyReqHandle;
+		iNotifyConfigR99.iNotifyData = &configBaseV1;
+		}
+	else if(configBaseV1.ExtensionId() == TPacketDataConfigBase::KConfigRel5)
+		{
+		__ASSERT_ALWAYS(!iNotifyConfigR5.iNotifyPending,SimPanic(ENotificationAlreadyPending));
+
+		iNotifyConfigR5.iNotifyPending = ETrue;
+		iNotifyConfigR5.iNotifyHandle = aTsyReqHandle;
+		iNotifyConfigR5.iNotifyData = &configBaseV1;
+		}		
+
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::NotifyConfigChangedCancel(const TTsyReqHandle aTsyReqHandle)
+/**
+* Cancel a client's interest in being notified when the context configuration changes
+* This is acheived simply by resetting the flag that indicates a notification is pending.
+* 
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::NotifyConfigChangedCancel called");
+	if(iNotifyConfigGPRS.iNotifyPending &&
+		iNotifyConfigGPRS.iNotifyHandle == aTsyReqHandle)
+		{
+		iNotifyConfigGPRS.iNotifyPending=EFalse;
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+	else if(iNotifyConfigR99.iNotifyPending &&
+		iNotifyConfigR99.iNotifyHandle == aTsyReqHandle)
+		{
+		iNotifyConfigR99.iNotifyPending=EFalse;
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+	else if(iNotifyConfigR5.iNotifyPending &&
+		iNotifyConfigR5.iNotifyHandle == aTsyReqHandle)
+		{
+		iNotifyConfigR5.iNotifyPending=EFalse;
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+		
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::AttemptDeactivateImmediately()
+/**
+* Called when client wishes to Detach when there is an active context.
+* This will deactivate the context immediately from the network.
+* 
+* @return KErrNone if deactivated successfully.
+*/
+	{
+	if((iState==RPacketContext::EStatusActive) || (iState==RPacketContext::EStatusActivating))
+		{
+		iCurrentEvent=EContextEventDeactivate;
+		TInt ret = ChangeState(RPacketContext::EStatusDeactivating);
+			if(ret!=KErrNone)
+				return ret;
+		return ChangeState(RPacketContext::EStatusInactive);
+		}
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::ReActivate(CSimPacketService* aPacketService, const TName& aContextName)
+/**
+* This method is called by the packet Service to Re-Initialise a Deleted context.
+* If the context is deleted then the client cannot retrieve any 
+* infomation or use the context in any way.
+* In order for the client to use the context again, the client must 
+* open an object by name passing
+* the name of this context as a pararemter.
+*
+* @param aPacketService pointer to the parent class CSimPacketService.
+* @param aContextName Must be the same name as the name for this context.
+* @return KErrNone if no problem in re-initialising this context.
+*/
+	{
+	if(iContextName.Compare(aContextName) != KErrNone)
+		{
+		return KErrBadName;
+		}
+		
+	iPacketService = aPacketService;
+
+	if(iDeleted)
+		{
+
+		TInt ret = ChangeState(RPacketContext::EStatusInactive);
+		if (ret != KErrNone)
+			{
+			return ret;
+			}
+
+		iDeleted = EFalse;
+		iContextConfigParamsIndex = 0;
+		iNotifyStatusChange.iNotifyPending = EFalse;
+		iNotifyConfigGPRS.iNotifyPending = EFalse;
+		iNotifyConfigR99.iNotifyPending = EFalse;
+		iNotifyConfigR5.iNotifyPending = EFalse;
+
+		}
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::DoDeactivate()
+/**
+* This method is called when timer events for deactivate context has completed.
+* It will then try to terminate the NTRas Connection.
+*
+* @return KErrNone
+*/
+	{
+	iNotifyContextConfigChangeTimer->Cancel();
+	iNtRas->Terminate();
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::Deactivate(const TTsyReqHandle aTsyReqHandle)
+/**
+* Client calls this method to try to Deactivate an active context.
+* In this method, we'll store the TsyReqHandle for later completion then call ActionEvent
+* state machine to handle the event which will kick off a timer.
+* The Actual Deactivation will take place in the DoDeactivate method.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::Deactivate called");
+	iDeactivateRequestHandle = aTsyReqHandle;
+	TInt ret;
+	ret = ActionEvent(EContextEventDeactivate,KErrNone);
+	return ret;
+	}
+
+TInt CSimPacketContext::DeactivateCancel(const TTsyReqHandle aTsyReqHandle)
+/**
+* Client calls this method to try and cancel a Deactivate request.
+* This will only complete successfully if and only if the Deactivate request has not completed.
+* i.e. if we haven't already deactivated the context.
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::DeactivateCancel called");
+	if(((iState == RPacketContext::EStatusInactive) || (iState == RPacketContext::EStatusDeactivating)) && 
+					(iCurrentEvent==EContextEventDeactivate))
+		{
+		iTimer->Cancel();
+		iCurrentEvent= EContextEventNone;
+		TInt ret = ChangeState(RPacketContext::EStatusActive);
+		if(ret!= KErrNone)
+			ReqCompleted(aTsyReqHandle,ret);
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+
+	return KErrNone;
+	}
+	
+TInt CSimPacketContext::DoActivate()
+/**
+* This method is called when timer events for Activate context has completed.
+* It will then try to Set up the NtRas Connection and open a port for client use.
+*
+* @return KErrNone
+*/
+	{
+	TCommConfigV01 commConfig;
+	TCommSetupItem item = FindCommSettings();
+
+	if (iPacketqos)
+		{
+		iPacketqos->ClearChangeQoSPending();
+		}
+	commConfig.iRate=item.iConfig.iRate;
+	commConfig.iDataBits=EData8;
+	commConfig.iStopBits=EStop1;
+	commConfig.iHandshake=item.iConfig.iHandshake;
+	iCommReset=item.iCommReset;
+	TInt ras = iNtRas->Connect(item.iCsyName,item.iPortName,commConfig,this);
+	
+	TContextConfigParam thisConfig = iContextConfigParams->At(iContextConfigParamsIndex);
+	
+	// Check for and complete any pending notifications
+	if(iNotifyConfigGPRS.iNotifyPending)
+		{
+		iNotifyConfigGPRS.iNotifyPending=EFalse;
+		CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigGPRS*)iNotifyConfigGPRS.iNotifyData);
+		ReqCompleted(iNotifyConfigGPRS.iNotifyHandle,KErrNone);
+		}
+		
+	if(iNotifyConfigR99.iNotifyPending)
+		{
+		iNotifyConfigR99.iNotifyPending=EFalse;
+		CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfigR99_R4*)iNotifyConfigR99.iNotifyData);
+		ReqCompleted(iNotifyConfigR99.iNotifyHandle,KErrNone);						
+		}
+		
+	if(iNotifyConfigR5.iNotifyPending)
+		{
+		iNotifyConfigR5.iNotifyPending=EFalse;
+		CSimContextHelper::ConvertConfigParams(thisConfig, *(RPacketContext::TContextConfig_R5*)iNotifyConfigR5.iNotifyData);
+		ReqCompleted(iNotifyConfigR5.iNotifyHandle,KErrNone);						
+		}
+	
+	// start the timer for the simulated network-side context parameter changes
+	if(iNotifyContextConfigChangeArray->Count() > 0)
+		{
+		TInt delay = (iNotifyContextConfigChangeArray->At(0)).iDelay;
+		iNotifyContextConfigChangeTimer->Start(delay,this,ETimerIdPcktContextConfigChange);
+		}
+
+	return ras;
+	}
+
+
+TInt CSimPacketContext::Activate(const TTsyReqHandle aTsyReqHandle)
+/**
+* Client calls this method to try to Activate a context.
+* In this method, we'll store the TsyReqHandle for later completion then call ActionEvent
+* state machine to handle the event which will kick off a timer.
+* The Actual Activation will take place in the DoActivate method.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @return KErrNone
+*/
+	{
+	iActivateRequestHandle = aTsyReqHandle;
+	TInt ret;
+	ret = ActionEvent(EContextEventActivate,KErrNone);
+	return ret;
+	}
+
+
+TInt CSimPacketContext::ActivateCancel(const TTsyReqHandle aTsyReqHandle)
+/**
+* Client calls this method to try and cancel an Activate request.
+* This will only complete successfully if and only if the Activate request has not completed.
+* i.e. if we haven't already activated the context.
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::ActivateCancel called");
+	if(((iState == RPacketContext::EStatusInactive) || (iState == RPacketContext::EStatusActivating)) && 
+					(iCurrentEvent==EContextEventActivate))
+		{
+		iTimer->Cancel();
+		iCurrentEvent= EContextEventNone;
+		TInt ret = ChangeState(RPacketContext::EStatusInactive);
+		if(ret!= KErrNone)
+			ReqCompleted(aTsyReqHandle,ret);
+		else
+			ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+	else if (iState == RPacketContext::EStatusDeleted)
+		{
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::DoDelete()
+/**
+* This method is called when timer events for Delete context has completed.
+* It will then try to Terminate the NtRas Connection and then set the context as deleted.
+* Once the context is deleted then the client cannot retrieve any information about the context 
+* or use the context.  calling ReActivateContext  will reinstate this context.
+*
+* @return KErrNone
+*/
+	{
+	iDeleted = ETrue;
+	iNtRas->Terminate();
+	iQoSObjectCount--;
+	return KErrNone;
+	}
+
+
+TInt CSimPacketContext::Delete(const TTsyReqHandle aTsyReqHandle)
+/**
+* Client calls this method to try to Delete this context.
+* In this method, we'll store the TsyReqHandle for later completion then call ActionEvent
+* state machine to handle the event which will kick off a timer.
+* The Actual Delete will take place in the DoDelete method.
+*
+* This request will only succeed if the context already exist (had been created) and also not
+* previously deleted.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::Delete called");
+	iDeleteRequestHandle = aTsyReqHandle;
+	TInt ret;
+	ret = ActionEvent(EContextEventDelete,KErrNone);
+	return ret;
+	}
+
+TInt CSimPacketContext::DeleteCancel(const TTsyReqHandle aTsyReqHandle)
+/**
+* Client calls this method to try and cancel a Delete context request.
+* This will only complete successfully if and only if the Delete request has not completed.
+* i.e. if we haven't already Deleted the context.
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::DeleteCancel called");
+	if((iState == RPacketContext::EStatusInactive) && (iCurrentEvent==EContextEventDelete))
+		{
+		iTimer->Cancel();
+		iCurrentEvent= EContextEventNone;
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::LoanCommPort(const TTsyReqHandle aTsyReqHandle,RCall::TCommPort* aDataPort)
+/**
+* The method will return to the client the port it has opened previously in the Activate method
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aDataPort Pointer to the port  and csy name for the opened port.
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::LoanCommPort called");
+
+	if(iState != RPacketContext::EStatusActive)
+		{
+		ReqCompleted(aTsyReqHandle, KErrEtelCallNotActive);
+		return KErrNone;
+		}
+	if (iCommPortLoaned)
+		{
+		ReqCompleted(aTsyReqHandle, KErrEtelPortAlreadyLoaned);
+		return KErrNone;
+		}
+
+		TCommSetupItem item = FindCommSettings();
+		aDataPort->iCsy.Copy(item.iCsyName);
+		aDataPort->iPort.Copy(item.iPortName);
+		iCommPortLoaned = ETrue;
+		ReqCompleted(aTsyReqHandle,KErrNone);
+	
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::LoanCommPortCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+/**
+* Cancels a client loan port request.  This method will do nothing. 
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::LoanCommPortCancel called");
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::RecoverCommPort(const TTsyReqHandle aTsyReqHandle)
+/**
+* In this method we'll try and terminate the NtRas connection and reover the port.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::RecoverCommPort called");
+	if (!iCommPortLoaned)
+		{
+		ReqCompleted(aTsyReqHandle, KErrEtelPortNotLoanedToClient);
+		return KErrNone;
+		}
+	iNtRas->Terminate();
+	iCommPortLoaned = EFalse;
+	ReqCompleted(aTsyReqHandle,KErrNone);
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::RecoverCommPortCancel(const TTsyReqHandle /*aTsyReqHandle*/)	
+/**
+* Attempt to cancel a RecoverCommPort request.  This method does nothing 
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::RecoverCommPortCancel called");
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus)
+/**
+* Retrieves and returns the current status of the Packet context in the aContextStatus parameter.
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @param aContextStatus pointer to the status of the packet context.
+* @return KerrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::GetStatus called");
+	*aContextStatus = iState;
+	ReqCompleted(aTsyReqHandle,KErrNone);
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus)
+/**
+* Record a client's interest in being notified of the state of the packet contexts.
+* First check that there isn't already a notification pending (the ETel Server should protect
+* against this) and then record the information necessary to complete the request later, when
+* the status does actually change.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aContextStatus pointer to the packet context status
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::NotifyStatusChange called");
+	__ASSERT_ALWAYS(!iNotifyStatusChange.iNotifyPending,SimPanic(ENotificationAlreadyPending));
+	iNotifyStatusChange.iNotifyPending = ETrue;
+	iNotifyStatusChange.iNotifyHandle = aTsyReqHandle;
+	iNotifyStatusChange.iNotifyData = aContextStatus;
+	return KErrNone;
+	}
+
+
+
+TInt CSimPacketContext::NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle)
+/**
+* Cancel a client's interest in being notified when the packet context status changes.
+* This is acheived simply by resetting the flag that indicates a notification is pending.
+* 
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::NotifyStatusChangeCancel called");
+	if(iNotifyStatusChange.iNotifyPending)
+		{
+		iNotifyStatusChange.iNotifyPending=EFalse;
+		ReqCompleted(aTsyReqHandle,KErrCancel);
+		}
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetDataVolumeTransferred(const TTsyReqHandle aTsyReqHandle,RPacketContext::TDataVolume* /*aVolume*/)
+/**
+* Retrieves and returns the to the client the amount of data sent over the serial port.
+* This method is not supported and will request complete with KErrNotSupported
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aVolume pointer to the volume of data trasferred so far.
+* @return KErrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::GetDataVolumeTransferred called");
+	ReqCompleted(aTsyReqHandle,KErrNotSupported);
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::NotifyDataTransferred(const TTsyReqHandle aTsyReqHandle, RPacketContext::TDataVolume* /*aVolume*/, RPacketContext::TNotifyDataTransferredRequest* /*aData*/)
+/**
+* Notifies the client when data is sent or received over the comm port
+* This method is not supported in this version of the TSY.
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aVolume pointer to the volume of data trasferred so far.
+* @param aData indicates to the client whether the data was sent or received.
+* @return KErrNone
+*/
+	{
+	ReqCompleted(aTsyReqHandle,KErrNotSupported);
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::NotifyDataTransferredCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+/**
+* Cancels the NotifyDataTransferred request
+*
+* @param aTsyReqHandle Tsy Request handle for the client cancel request
+* @return KerrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::NotifyDataTransferredCancel called");
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetLastErrorCause(const TTsyReqHandle aTsyReqHandle, TInt* aError)
+/**
+* This method is not supported in this TSY
+*
+* @param aTsyReqHandle Tsy Request handle for the client request
+* @param aError pointer to the last error cause
+* @return KerrNone
+*/
+	{
+	LOGPACKET1("CSimPacketContext::GetLastErrorCause called");
+	*aError = iLastError;
+	ReqCompleted(aTsyReqHandle,iErrorCodeForGetLastErrorCause);
+	iErrorCodeForGetLastErrorCause = KErrNone;
+	return KErrNone;
+	}
+
+void CSimPacketContext::TimerCallBack(TInt aId)
+/**
+* Timer callback function.  When the timer goes off, it will call back into this
+* function for further processing.
+*/
+	{
+	TInt newIndex = KErrNotFound;
+	
+	switch(aId)
+		{
+		case ETimerIdPcktContextStatusChange:
+			TimerCallBackNotifyContextStatusChange();
+			break;
+		case ETimerIdPcktContextSetConfig:
+			SetConfig(iSetConfigData->At(0).iTsyReqHandle, iSetConfigData->At(0).iData);
+			iSetConfigData->Delete(0);
+			if (iSetConfigData->Count() != 0)
+				iSetConfigTimer->Start(iSetConfigDelay,this,ETimerIdPcktContextSetConfig);
+			break;
+		case ETimerIdPcktContextConfigChange:
+			//Check the validity of the new context config param index before applying it
+			newIndex = (iNotifyContextConfigChangeArray->At(0)).iNewContextConfigIndex;
+			if(newIndex <= iContextConfigParams->Count() - 1)
+				{
+				//Change the context config param index to point to the new context configuration
+				iContextConfigParamsIndex = newIndex;
+				
+				// Check for and complete any pending notifications
+				if(iNotifyConfigGPRS.iNotifyPending)
+					{
+					iNotifyConfigGPRS.iNotifyPending=EFalse;
+					CSimContextHelper::ConvertConfigParams(iContextConfigParams->At(iContextConfigParamsIndex), 
+							*(RPacketContext::TContextConfigGPRS*)iNotifyConfigGPRS.iNotifyData);
+					ReqCompleted(iNotifyConfigGPRS.iNotifyHandle,KErrNone);
+					}
+
+				if(iNotifyConfigR99.iNotifyPending)
+					{
+					iNotifyConfigR99.iNotifyPending=EFalse;
+					CSimContextHelper::ConvertConfigParams(iContextConfigParams->At(iContextConfigParamsIndex), 
+							*(RPacketContext::TContextConfigR99_R4*)iNotifyConfigR99.iNotifyData);
+					ReqCompleted(iNotifyConfigR99.iNotifyHandle,KErrNone);						
+					}
+				
+				if(iNotifyConfigR5.iNotifyPending)
+					{
+					iNotifyConfigR5.iNotifyPending=EFalse;
+					CSimContextHelper::ConvertConfigParams(iContextConfigParams->At(iContextConfigParamsIndex), 
+							*(RPacketContext::TContextConfig_R5*)iNotifyConfigR5.iNotifyData);
+					ReqCompleted(iNotifyConfigR5.iNotifyHandle,KErrNone);						
+					}	
+				}
+
+			else
+				{
+				LOGMISC1(">>CSimPacketContext.cpp: Invalid new context config param index");
+				}
+				
+			//Delete the current NotifyContextConfigChange item and set the next one if possible
+			iNotifyContextConfigChangeArray->Delete(0);
+			
+			if(iNotifyContextConfigChangeArray->Count() > 0)
+				{
+				TInt delay = (iNotifyContextConfigChangeArray->At(0)).iDelay;
+				iNotifyContextConfigChangeTimer->Start(delay,this, ETimerIdPcktContextConfigChange);
+				}
+			break;
+
+		case ETimerIdPcktContextInitContext:
+			DoInitialiseContext();
+			break;
+		case ETimerIdPcktContextCreateTft:
+			DoCreateNewTFT();
+			break;
+		default:
+			{
+			LOGPACKET1(">>CSimPacketContext::TimerCallBack");
+			TInt ret=ActionEvent(EContextEventTimeOut,KErrNone);
+			__ASSERT_ALWAYS(ret==KErrNone,SimPanic(ETimeOutEventActionFailed));	// Note: this is very crude error handling and should be replaced by something rather more elegant.
+			LOGPACKET1("<<CSimPacketContext::TimerCallBack");
+			iTFTChangeBool = EFalse;
+			break;
+			}		
+		}
+	}
+
+void CSimPacketContext::PubSubCallback(TInt aIndex)
+	{
+	TInt length = iNotifyContextStatusChangeArray->Count();
+	if (aIndex < length)
+		{
+		TNotifyContextStatusChange& statusChange = iNotifyContextStatusChangeArray->At(aIndex);
+		if (statusChange.iContextName.Compare(iContextName) == 0)
+			{
+			CompleteContextStatusChange(statusChange.iStatus);
+			}
+		}
+	}
+	
+/**
+*	This is for the NotifyContextStatusChange timer callback
+*/
+void CSimPacketContext::TimerCallBackNotifyContextStatusChange()
+	{
+	if(GetContextStatusChangeCount() <= iNotifyContextStatusChangeIndex)
+		{
+		// the index is out of bounds
+		return;
+		}
+	TNotifyContextStatusChange& statusChange = GetContextStatusChangeAt(iNotifyContextStatusChangeIndex);
+
+	CompleteContextStatusChange(statusChange.iStatus);
+
+	iNotifyContextStatusChangeIndex++;
+	if (GetContextStatusChangeCount() > iNotifyContextStatusChangeIndex)
+	{
+		// start timer again
+		iNotifyContextStatusChangeTimer->Start(GetContextStatusChangeAt(iNotifyContextStatusChangeIndex).iDuration,this,ETimerIdPcktContextStatusChange);
+		}
+	}
+
+void CSimPacketContext::CompleteContextStatusChange(RPacketContext::TContextStatus& aStatus)
+		{	
+	iCurrentNotifyContextStatusChange = aStatus;
+
+	ChangeState(iCurrentNotifyContextStatusChange);
+	if (RPacketContext::EStatusDeleted == iCurrentNotifyContextStatusChange)
+		{
+		DoDelete();
+		}
+	}
+
+void CSimPacketContext::NTRasCallBack(TInt aStatus)
+/**
+ * NTRas callback function.  This function will be called when the NTRAS
+ * Server has responded.
+ * 
+ * @param aStatus	Standard error value, indicating the success or failure of the NTRAS
+ *					connection.
+ */
+	{
+		__ASSERT_ALWAYS(ActionEvent(EContextEventNtRas,aStatus) == KErrNone,SimPanic(EGeneral));
+		if(iCommReset)
+			iNtRas->Terminate();
+	}
+
+RPacketService::TStatus CSimPacketContext::ConvertToPacketServiceStatus(RPacketContext::TContextStatus aNewState)
+/**
+* Converts Packet Context Status (RPacketContext::TContextStatus) to 
+*          Packet Service Status (RPacketService::TStatus)
+*
+* @param aNewState the Context status to convert to packet service status
+* @return RPacketService::TStatus The packet service status conversion
+*/
+	{
+	RPacketService::TStatus serviceStatus;
+	switch (aNewState)
+		{
+	case RPacketContext::EStatusInactive:
+	case RPacketContext::EStatusActivating:
+	case RPacketContext::EStatusDeleted:
+		serviceStatus = RPacketService::EStatusAttached;
+		break;
+	case RPacketContext::EStatusActive:
+	case RPacketContext::EStatusDeactivating:
+		serviceStatus = RPacketService::EStatusActive;
+		break;
+	case RPacketContext::EStatusSuspended:
+		serviceStatus = RPacketService::EStatusSuspended;
+		break;
+	default:
+		serviceStatus = RPacketService::EStatusUnattached;
+		break;
+		}
+	return serviceStatus;
+	}
+
+
+TInt CSimPacketContext::ChangeState(RPacketContext::TContextStatus aNewState)
+/**
+* Attempt to change state.
+* First validate that the requested state change is ok.  If it is then proceed to change
+* the state and complete any pending state change notification.
+*
+* @param aNewState the new state to change to
+* @return Error indication if change of state is successful or not
+*/
+	{
+	LOGPACKET2(">>CSimPacketContext::ChangeState [newState=%d]", aNewState);
+	__ASSERT_ALWAYS(aNewState!=RPacketContext::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal));
+
+	if(iState==aNewState)
+		return KErrNone;
+
+	TInt ret=KErrGeneral;
+	const struct TContextStateChangeValidity* stateChangePnt=KContextStateChangeValidity;
+	while(stateChangePnt->iOldState!=KContextStateTableTerminator)
+		{
+		if((stateChangePnt->iOldState==iState) && (stateChangePnt->iNewState==aNewState))
+			{
+			ret=stateChangePnt->iError;
+			break;
+			}
+		stateChangePnt++;
+		}
+
+	if(ret!=KErrNone)
+		return ret;
+
+//Request permission from the phone to change the state of the packet connection
+	ret = iPacketService->ChangeState(ConvertToPacketServiceStatus(aNewState));
+	if(ret!=KErrNone)
+		return ret;
+
+// Actually change the state.
+	iState=aNewState;
+
+// Check for a pending line state notification.
+	if(iNotifyStatusChange.iNotifyPending)
+		{
+		iNotifyStatusChange.iNotifyPending=EFalse;
+		*(RPacketContext::TContextStatus*)iNotifyStatusChange.iNotifyData=iState;
+		ReqCompleted(iNotifyStatusChange.iNotifyHandle,KErrNone);
+		}
+
+
+	LOGPACKET1("<<CSimPacketContext::ChangeState");
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::ActionEvent(TContextEvent aEvent,TInt aStatus)
+/**
+* Entry point when an event has occured that may advance the state machine.
+* The aEvent parameter describes the event.
+*
+* This function contains the main state machine for the packet Context.  
+*
+* @param aEvent The Packet Context event to handle
+* @return value represents the error state caused by the attempted state machine jump.
+*/
+	{
+	TInt ret=KErrNone;
+	__ASSERT_ALWAYS(iState!=RPacketContext::EStatusUnknown,SimPanic(ECallStatusUnknownIllegal));
+
+	TBool found = EFalse;
+	TInt i = 0;
+	TInt count = iContextConfigsRel99->Count();
+	for(i = 0; i<count; i++)
+		{
+		if(iContextName.Compare(iContextConfigsRel99->At(i).iContextName)==0)
+			{
+			found = ETrue;
+			break;
+			}
+		}
+
+	switch(aEvent)
+		{
+		case EContextEventActivate:
+			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventActivate]");
+			if(iState==RPacketContext::EStatusInactive)
+				{
+				iCurrentEvent=EContextEventActivate;
+				ret = ChangeState(RPacketContext::EStatusActivating);
+					if(ret!=KErrNone)
+						ReqCompleted(iActivateRequestHandle,ret);
+					else 
+						{
+						if(!found)
+							iTimer->Start(iActivatePause,this);
+						else
+							iTimer->Start(iContextConfigsRel99->At(i).iActivatePause,this);
+						}
+				}
+			else
+				ReqCompleted(iActivateRequestHandle, KErrGprsActivationRejected);
+			break;
+
+		case EContextEventDeactivate:
+			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventDeactivate]");
+			if(iState==RPacketContext::EStatusActive)
+				{
+				iCurrentEvent=EContextEventDeactivate;
+				ret = ChangeState(RPacketContext::EStatusDeactivating);
+					if(ret!=KErrNone)
+						ReqCompleted(iDeactivateRequestHandle,ret);
+					else
+						{
+						if (!found)
+							iTimer->Start(iDeactivatePause,this);
+						else
+							iTimer->Start(iContextConfigsRel99->At(i).iDeactivatePause,this);
+						}
+				}
+			else
+				ReqCompleted(iDeactivateRequestHandle, KErrNone);
+			break;
+
+		case EContextEventDelete:
+			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventDelete]");
+			if(iState==RPacketContext::EStatusInactive)
+				{
+				iCurrentEvent=EContextEventDelete;
+
+				if (!found)
+					iTimer->Start(iDeletePause,this);
+				else
+					iTimer->Start(iContextConfigsRel99->At(i).iDeletionPause,this);
+				}
+			else
+				ReqCompleted(iDeleteRequestHandle, KErrInUse);
+			break;
+
+		case EContextEventNtRas:
+			if((iState==RPacketContext::EStatusActivating) && (iCurrentEvent==EContextEventNtRas))
+				{
+				if(aStatus!=KErrNone)
+					{
+					ReqCompleted(iActivateRequestHandle,aStatus);
+					ret=ChangeState(RPacketContext::EStatusInactive);
+					__ASSERT_ALWAYS(ret==KErrNone,SimPanic(EIllegalStateInconsistancy));
+					return KErrNone;
+					}
+				else
+					{
+					ret=ChangeState(RPacketContext::EStatusActive);
+					ReqCompleted(iActivateRequestHandle,ret);
+					iIsActive = ETrue;
+					return KErrNone;
+					}
+				}
+			iCurrentEvent=EContextEventNone;
+			break;
+
+		case EContextEventTimeOut:
+			LOGPACKET1(">>CSimPacketContext::ActionEvent = [EContextEventTimeOut]");
+			switch(iCurrentEvent)
+				{
+			case EContextEventNone:
+				break;
+			case EContextEventActivate:
+				if(iState==RPacketContext::EStatusActivating)
+					{
+						TInt activateValue;
+						if (found)
+							activateValue = iContextConfigsRel99->At(i).iActivateErrorCode;
+						else
+							activateValue = iActivateFail;	
+						if(activateValue == KContextGoToInactiveWithErrorWhenTryingToGetLastErrorCode)
+						    {
+						    //this will allow context activation move to the next state but with context being inactive 
+						    ret=ChangeState(RPacketContext::EStatusInactive);
+						    iCurrentEvent=EContextEventNone;
+						    iLastError = activateValue;
+						    iErrorCodeForGetLastErrorCause=KErrGeneral;
+						    
+						    iContextConfigsRel99->At(i).iActivateErrorCode = iLastError;
+						    ReqCompleted(iActivateRequestHandle, KErrNone);
+						    
+						    break;
+						    }
+						if(activateValue <= KContextGoToInactiveWithExtendedErrorCode && activateValue > KContextGoToInactiveWithNormalErrorCode)
+                            {
+                            //this will allow context activation move to the next state but with context being inactive     
+                            //tsy extended error case
+                            ret=ChangeState(RPacketContext::EStatusInactive);
+                            iCurrentEvent=EContextEventNone;
+                            iLastError = activateValue - KContextGoToInactiveWithExtendedErrorCode;
+                            //move the error code to the higher 16 bit.
+                            iLastError<<=16;
+                            
+                            iContextConfigsRel99->At(i).iActivateErrorCode = iLastError;
+                            ReqCompleted(iActivateRequestHandle, KErrNone);
+                            
+                            break;
+                            }
+						if(activateValue <= KContextGoToInactiveWithNormalErrorCode && activateValue > KLimitForErrorCodeForContextGoToInactive)
+						    {
+						    //this will allow context activation move to the next state but with context being inactive
+						    //normal error case
+						    ret=ChangeState(RPacketContext::EStatusInactive);
+						    iCurrentEvent=EContextEventNone;
+						    iLastError = activateValue - KContextGoToInactiveWithNormalErrorCode;
+						    
+						    iContextConfigsRel99->At(i).iActivateErrorCode = iLastError;
+						    ReqCompleted(iActivateRequestHandle, KErrNone);
+						    
+						    break;
+						    }
+						else
+						if(activateValue != KErrNone)
+							{
+							ReqCompleted(iActivateRequestHandle,activateValue);
+							ret=ChangeState(RPacketContext::EStatusInactive);
+							iCurrentEvent=EContextEventNone;
+							activateValue = KErrNone;
+
+							if (found)
+								iContextConfigsRel99->At(i).iActivateErrorCode = activateValue;
+							else
+								iActivateFail = activateValue;		
+							break;
+							}
+						else 
+							{
+						if (found)
+							{
+							if (iContextConfigsRel99->At(i).iConnectToNtRas)
+								{
+								ret = DoActivate();
+								if (ret == KErrNone)
+									iCurrentEvent=EContextEventNtRas;
+								else
+									iCurrentEvent=EContextEventNone;
+								}
+							else
+								{
+								iCurrentEvent=EContextEventNone;
+								ReqCompleted(iActivateRequestHandle,activateValue);
+								ret=ChangeState(RPacketContext::EStatusActive);
+								iIsActive = ETrue;
+								}
+							}
+						else
+							{
+							ret = DoActivate();
+							if (ret == KErrNone)
+								iCurrentEvent=EContextEventNtRas;
+							else
+								iCurrentEvent=EContextEventNone;
+							}
+						}
+					}
+				break;
+			case EContextEventDeactivate:
+				TInt deActivateValue;
+				if (found)
+					deActivateValue = iContextConfigsRel99->At(i).iDeactivateErrorCode;
+				else
+					deActivateValue = iDeactivateFail;	
+
+				if(iState==RPacketContext::EStatusDeactivating)
+					{
+					if(deActivateValue != KErrNone)
+						{
+						ReqCompleted(iDeactivateRequestHandle,deActivateValue);
+						ret=ChangeState(RPacketContext::EStatusActive);
+						deActivateValue = KErrNone;
+
+						if (found)
+								iContextConfigsRel99->At(i).iDeactivateErrorCode = deActivateValue;
+							else
+								iDeactivateFail = deActivateValue;		
+						break;
+						}
+					else {
+						ret=ChangeState(RPacketContext::EStatusInactive);
+						if(ret==KErrNone)
+							{
+							ret = DoDeactivate();
+							if(ret==KErrNone)
+								{	
+								ReqCompleted(iDeactivateRequestHandle,deActivateValue);
+								iIsActive=EFalse;
+								}
+							else
+								ReqCompleted(iDeactivateRequestHandle,ret);
+							}
+						else
+							ReqCompleted(iDeactivateRequestHandle,ret);
+						}
+					}
+				iCurrentEvent=EContextEventNone;
+				break;
+			case EContextEventDelete:
+				TInt deleteValue;
+				if (found)
+					deleteValue = iContextConfigsRel99->At(i).iDeletionErrorCode;
+				else
+					deleteValue = iDeleteFail;	
+
+				if(iState==RPacketContext::EStatusInactive)
+					{
+					if(deleteValue != KErrNone)
+						{
+						ReqCompleted(iDeleteRequestHandle,deleteValue);
+						deleteValue = KErrNone;
+						if (found)
+							iContextConfigsRel99->At(i).iDeletionErrorCode = deleteValue;
+						else
+							iDeleteFail = deleteValue;	
+						break;
+						}
+					else {
+						ret=ChangeState(RPacketContext::EStatusDeleted);
+						if(ret==KErrNone)
+							{
+							ret = DoDelete();
+							if(ret==KErrNone)
+								ReqCompleted(iDeleteRequestHandle,deleteValue);
+							else
+								ReqCompleted(iDeleteRequestHandle,ret);
+							}
+						else
+							ReqCompleted(iDeleteRequestHandle,ret);
+						}
+					}
+				iCurrentEvent=EContextEventNone;
+				break;
+			default:	//in case of EContextEventTimeOut
+				break;
+				}
+			break;
+
+		default:
+			break;
+			}
+	return ret;
+	}
+
+const CTestConfigSection* CSimPacketContext::CfgFile()
+/**
+* Return a pointer to the Configuration File Section
+*
+* @return CTestConfigSection	pointer to the configuration file section
+*/
+	{
+	return iPacketService->CfgFile();
+	}
+
+TInt CSimPacketContext::ModifyActiveContext(const TTsyReqHandle aTsyReqHandle)
+	{
+	if (iState==RPacketContext::EStatusInactive)
+		{
+		ReqCompleted(aTsyReqHandle, KErrNotReady);
+		return KErrNone;
+		}
+
+	// check if QoS profile has changed or TFTs have changed
+	if (iPacketqos != NULL)
+		{
+		if (iPacketqos->PerformProfileChange() == KErrNone || iTFTChangeBool)
+			{
+			iTFTChangeBool = EFalse;
+			ReqCompleted(aTsyReqHandle, KErrNone);
+			return KErrNone;
+			}
+		else
+			{
+			ReqCompleted(aTsyReqHandle, KErrNotReady);
+			return KErrNone;
+			}
+		}
+	else if (iTFTChangeBool)
+		{
+		iTFTChangeBool = EFalse;
+		ReqCompleted(aTsyReqHandle, KErrNone);
+		return KErrNone;
+		}	
+	else
+		{
+		ReqCompleted(aTsyReqHandle, KErrNotReady);
+		return KErrNone;
+		}
+	}
+
+/**
+*	This function enumerates the number of packet filters
+*/
+TInt CSimPacketContext::EnumeratePacketFilters(const TTsyReqHandle aTsyReqHandle, TInt& aCount)
+	{
+	aCount = iNumFiltersAdded;
+	ReqCompleted(aTsyReqHandle, KErrNone);
+	return KErrNone;
+	}
+
+/**
+* This function returns info regarding the packet filter specified by the index passed - 
+* used in conjunction with EnumeratePacketFilters()
+*/
+TInt CSimPacketContext::GetPacketFilterInfoL(const TTsyReqHandle aTsyReqHandle, TInt aIndex, TDes8* aPacketFilterInfo)
+	{
+	// if index is invalid, return error code
+	if (aIndex < 0 || aIndex > (iNumFiltersAdded -1))
+		{
+		ReqCompleted(aTsyReqHandle, KErrArgument);
+		return KErrNone;
+		}
+	else
+		{
+		TInt ii;
+		TInt addedFilterCount = -1;
+		
+		//find the requested filter
+		for(ii = 0; ii < iPacketFilterInfoArray->Count(); ii++)
+			{
+			if(iPacketFilterInfoArray->At(ii).iAdded)
+				{
+				addedFilterCount++;
+
+				//when the filter is found write the data to the client				
+				if(addedFilterCount == aIndex)
+					{
+					TPacketFilterV3 theFilter = iPacketFilterInfoArray->At(ii);
+
+					// Check that the data structure is supported by the simulated TSY version
+					TInt err = KErrNone;
+					if(iPhone->iSimTsyVersion < 3) // same version as TPacketFilterVx
+						{
+					 	(void)User::Leave(KErrNotSupported);
+						}
+										
+					RPacketContext::TPacketFilterV2Pckg* clientFilterPckg = 
+						(RPacketContext::TPacketFilterV2Pckg*)aPacketFilterInfo; 
+					RPacketContext::TPacketFilterV2& clientFilter = (*clientFilterPckg)();
+
+					// Check that the data structure is supported by the simulated TSY version
+					err = iPhone->CheckSimTsyVersion(clientFilter);
+					if(err != KErrNone)
+						{
+						iPhone->ReqCompleted(aTsyReqHandle, err);
+						return KErrNone;
+						}
+									
+					if(clientFilter.ExtensionId()==KETelExtPcktV2)
+						{
+						clientFilter.iDestPortMax = theFilter.iDestPortMax;
+						clientFilter.iDestPortMin = theFilter.iDestPortMin;
+						clientFilter.iEvaluationPrecedenceIndex = theFilter.iEvaluationPrecedenceIndex;
+						clientFilter.iFlowLabel = theFilter.iFlowLabel;
+						clientFilter.iId = theFilter.iId;
+						clientFilter.iIPSecSPI = theFilter.iIPSecSPI;
+						clientFilter.iProtocolNumberOrNextHeader = theFilter.iProtocolNumberOrNextHeader;
+						clientFilter.iSrcPortMax = theFilter.iSrcPortMax;
+						clientFilter.iSrcPortMin = theFilter.iSrcPortMin;
+						clientFilter.iTOSorTrafficClass = theFilter.iTOSorTrafficClass;
+						
+						TInt xx;
+						for(xx = 0;  xx<RPacketContext::KIPAddressSize; xx++)
+							{
+							clientFilter.iSrcAddr[xx] = theFilter.iSrcAddr[xx];
+							clientFilter.iSrcAddrSubnetMask[xx] = theFilter.iSrcAddrSubnetMask[xx];
+							}
+						ReqCompleted(aTsyReqHandle, KErrNone);
+						return KErrNone;
+						}
+					else if((clientFilter.ExtensionId()==KETelExtPcktV3) &&
+							theFilter.iFilterType != RPacketContext::EPacketFilterTypeUnknown)
+						{
+						RPacketContext::TPacketFilterV3Pckg* clientFilterV3Pckg = 
+							(RPacketContext::TPacketFilterV3Pckg*)aPacketFilterInfo; 
+						RPacketContext::TPacketFilterV3& clientFilterV3 = (*clientFilterV3Pckg)();
+						
+						// Check that the data structure is supported by the simulated TSY version
+						TInt err = iPhone->CheckSimTsyVersion(clientFilterV3);
+						if(err != KErrNone)
+							{
+							iPhone->ReqCompleted(aTsyReqHandle, err);
+							return KErrNone;
+							}
+
+						RPacketContext::TPacketFilterV3 filterV3(theFilter.iFilterType);
+
+						// Check that the data structure is supported by the simulated TSY version
+						err = iPhone->CheckSimTsyVersion(filterV3);
+						if(err != KErrNone)
+							{
+							iPhone->ReqCompleted(aTsyReqHandle, err);
+							return KErrNone;
+							}
+
+						filterV3.iId = theFilter.iId;
+						filterV3.iEvaluationPrecedenceIndex = theFilter.iEvaluationPrecedenceIndex;
+						filterV3.SetTOSorTrafficClass(theFilter.iTOSorTrafficClass);
+
+						TInt yy;
+						for(yy = 0;  yy<RPacketContext::KIPAddressSize; yy++)
+							{
+							filterV3.SetSrcAddr(theFilter.iSrcAddr);
+							filterV3.SetSrcAddrSubnetMask(theFilter.iSrcAddrSubnetMask);
+							}
+						if((theFilter.iFilterType == RPacketContext::EPacketFilterTypeOne) ||
+							(theFilter.iFilterType == RPacketContext::EPacketFilterTypeTwo))
+							{
+							filterV3.SetProtocolNumberOrNextHeader(theFilter.iProtocolNumberOrNextHeader);
+							}
+						
+						if(theFilter.iFilterType == RPacketContext::EPacketFilterTypeOne)
+							{
+							filterV3.SetDestPortMin(theFilter.iDestPortMin);
+							filterV3.SetDestPortMax(theFilter.iDestPortMax);
+							filterV3.SetSrcPortMin(theFilter.iSrcPortMin);
+							filterV3.SetSrcPortMax(theFilter.iSrcPortMax);
+							}
+
+						if((theFilter.iFilterType == RPacketContext::EPacketFilterTypeTwo))
+							{
+							filterV3.SetSPI(theFilter.iIPSecSPI);
+							}
+						
+						if((theFilter.iFilterType == RPacketContext::EPacketFilterTypeThree))
+							{
+							filterV3.SetFlowLabel(theFilter.iFlowLabel);
+							}
+						
+						clientFilterV3 = filterV3;
+						ReqCompleted(aTsyReqHandle, KErrNone);
+						return KErrNone;
+						}
+					else
+						{
+						//cannot convert a filterV2 in the TSY to the filterV3 data typed passed in by client
+						ReqCompleted(aTsyReqHandle, KErrCorrupt);
+						return KErrNone;
+						}
+					}//end if(addedFilterCount == aIndex)
+				}//end if(iPacketFilterInfoArray->At(ii).iAdded)
+			else
+				{
+				continue;
+				}
+				
+			}//end for loop
+		//filter was not found
+		ReqCompleted(aTsyReqHandle, KErrCorrupt);
+		return KErrNone;
+		}//end else
+	}
+
+/**
+*	Create TFT
+*/
+TInt CSimPacketContext::CreateNewTFT(const TTsyReqHandle aTsyReqHandle, const TInt* aSize)
+	{
+	if (iCreateTftConfig.iNumberOfFailures > 0)
+		{
+		iCreateTftConfig.iNumberOfFailures--;
+		ReqCompleted(aTsyReqHandle, iCreateTftConfig.iFailErrorCode);
+		return KErrNone;
+		}
+	iCreateTftTimer->Start(iCreateTftConfig.iDelay, this, ETimerIdPcktContextCreateTft);
+	iCreateTftData.iTsyReqHandle = aTsyReqHandle;
+	iCreateTftData.iSize = *aSize;
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::DoCreateNewTFT()
+	{
+	iTFTCreated = ETrue;
+	iNumTFTsCreated = iCreateTftData.iSize;
+	iTFTChangeBool = ETrue;
+	for (TInt i = 0; i < iPacketFilterInfoArray->Count(); i++)
+		{
+		iPacketFilterInfoArray->At(i).iAdded = EFalse;
+		}
+	iNumFiltersAdded = 0;
+	ReqCompleted(iCreateTftData.iTsyReqHandle, KErrNone);
+	return KErrNone;
+	}
+
+/**
+*	Delete TFT
+*/
+TInt CSimPacketContext::DeleteTFT(const TTsyReqHandle aTsyReqHandle)
+	{
+	if (iDeleteTftFail.iNumberOfTimes > 0)
+		{
+		iDeleteTftFail.iNumberOfTimes--;
+		ReqCompleted(aTsyReqHandle, iDeleteTftFail.iFailErrorCode);
+		return KErrNone;
+		}
+	iTFTCreated = EFalse;
+	iNumTFTsCreated = -1;
+	iTFTChangeBool = ETrue;
+	for (TInt i = 0; i < iPacketFilterInfoArray->Count(); i++)
+		{
+		iPacketFilterInfoArray->At(i).iAdded = EFalse;
+		}
+	iNumFiltersAdded = 0;
+	ReqCompleted(aTsyReqHandle, KErrNone);
+	return KErrNone;
+	}
+
+/**
+*	This method adds the packet filter to the array if it is not already there
+*/
+TInt CSimPacketContext::AddPacketFilter(const TTsyReqHandle aTsyReqHandle, const TDesC8* aPacketFilterInfo)
+	{
+	if (iAddPacketFilter.iNumberOfTimes > 0)
+		{
+		iAddPacketFilter.iNumberOfTimes--;
+		ReqCompleted(aTsyReqHandle, iAddPacketFilter.iFailErrorCode);
+		return KErrNone;
+		}
+
+	TPckg<RPacketContext::TPacketFilterV2>* packetFilter = (TPckg<RPacketContext::TPacketFilterV2>*)aPacketFilterInfo;
+	RPacketContext::TPacketFilterV2& packetFilterBase = (*packetFilter)();
+
+	// Check that the data structure is supported by the simulated TSY version
+	TInt err = iPhone->CheckSimTsyVersion(packetFilterBase);
+	if(err != KErrNone)
+		{
+		iPhone->ReqCompleted(aTsyReqHandle, err);
+		return KErrNone;
+		}
+
+	TBool found = EFalse;
+	
+	TInt ii;
+	for(ii = 0; ii<iPacketFilterInfoArray->Count(); ii++)
+		{
+		TPacketFilterV3& configFilter = iPacketFilterInfoArray->At(ii);
+		const TInt KReservedPortZero = 0;
+		
+		if((configFilter.iId == packetFilterBase.iId) &&
+			(configFilter.iEvaluationPrecedenceIndex == packetFilterBase.iEvaluationPrecedenceIndex) &&
+			(configFilter.iProtocolNumberOrNextHeader == packetFilterBase.iProtocolNumberOrNextHeader) &&
+			(configFilter.iSrcPortMin == packetFilterBase.iSrcPortMin) &&
+			(configFilter.iSrcPortMax == packetFilterBase.iSrcPortMax) &&
+			((configFilter.iDestPortMin == KReservedPortZero) || (configFilter.iDestPortMin == packetFilterBase.iDestPortMin)) &&
+			((configFilter.iDestPortMax == KReservedPortZero) || (configFilter.iDestPortMax == packetFilterBase.iDestPortMax)) &&
+			(configFilter.iIPSecSPI == packetFilterBase.iIPSecSPI) &&
+			(configFilter.iTOSorTrafficClass == packetFilterBase.iTOSorTrafficClass) &&
+			(configFilter.iFlowLabel == packetFilterBase.iFlowLabel))
+			{
+			TInt xx;
+			for(xx = 0;  xx<RPacketContext::KIPAddressSize; xx++)
+				{
+				if((configFilter.iSrcAddr[xx] == packetFilterBase.iSrcAddr[xx]) &&
+				  (configFilter.iSrcAddrSubnetMask[xx] == packetFilterBase.iSrcAddrSubnetMask[xx]))
+					{
+					found=ETrue;
+					}
+				else
+					{
+					found=EFalse;
+					break;
+					}
+				}
+
+			if(found)
+				{
+			    // checking the maximum number of packet filter per a pdp context
+                if(iNumFiltersAdded >= KMaxNumberOfTftFilters )
+                    {
+                    ReqCompleted(aTsyReqHandle, KErrOverflow);
+                    return KErrNone;
+                    }
+				iTFTChangeBool = ETrue;
+				configFilter.iAdded = ETrue;
+				iNumFiltersAdded++ ;
+				ReqCompleted(aTsyReqHandle, KErrNone);
+				return KErrNone;
+				}
+			}
+		}
+		ReqCompleted(aTsyReqHandle, KErrGeneral);
+		return KErrNone;
+	}
+
+/**
+*	This function removes the packet filter from the array if the packet filter is found in the array
+*/
+TInt CSimPacketContext::RemovePacketFilter(const TTsyReqHandle aTsyReqHandle, TInt aId)
+	{
+	TInt total= iPacketFilterInfoArray->Count();
+	TBool found = EFalse;
+	
+	for (TInt i = 0; i<total; i++)
+		{
+		if ((iPacketFilterInfoArray->At(i).iId == aId) &&
+			(iPacketFilterInfoArray->At(i).iAdded))
+			{
+			iPacketFilterInfoArray->At(i).iAdded = EFalse;
+			iNumFiltersAdded-- ;
+			ReqCompleted(aTsyReqHandle, KErrNone);
+			found = ETrue;
+			iTFTChangeBool = ETrue;
+			break;
+			}
+		}
+
+	if (!found)
+		{
+		ReqCompleted(aTsyReqHandle, KErrArgument);
+		return KErrNone;
+		}
+	return KErrNone;
+	}
+
+/**
+*	This function initialises the context
+*/
+TInt CSimPacketContext::InitialiseContext(const TTsyReqHandle aTsyReqHandle, TDes8* aDataChannelV2Pckg)
+	{
+	TCommSetupItem item = FindCommSettings();
+	if (item.iNumInitializeFailures != 0)
+		{
+		item.iNumInitializeFailures--;
+		ReqCompleted(aTsyReqHandle, item.iErrorCode);
+		}
+	else
+		{
+		iInitContextData.iTsyReqHandle = aTsyReqHandle;
+		iInitContextData.iChannel = aDataChannelV2Pckg;
+		iInitContextTimer->Start(item.iDelay, this, ETimerIdPcktContextInitContext);
+		}
+	return KErrNone;
+	}
+	
+TInt CSimPacketContext::DoInitialiseContext()
+	{
+	RPacketContext::TDataChannelV2Pckg* channel = (RPacketContext::TDataChannelV2Pckg*)iInitContextData.iChannel;
+	RPacketContext::TDataChannelV2& channelV2 = (*channel)();
+
+	// Check that the data structure is supported by the simulated TSY version
+	TInt err = iPhone->CheckSimTsyVersion(channelV2);
+	if(err != KErrNone)
+		{
+		ReqCompleted(iInitContextData.iTsyReqHandle, err);
+		return KErrNone;
+		}
+
+	TCommSetupItem item = FindCommSettings();
+	channelV2.iPort = item.iPortName;
+	channelV2.iCsy = item.iCsyName;
+	channelV2.iChannelId = item.iPortName;
+	
+	ReqCompleted(iInitContextData.iTsyReqHandle, KErrNone);
+
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/
+TInt CSimPacketContext::EnumeratePacketFiltersCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+	{
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/
+TInt CSimPacketContext::GetPacketFilterInfoCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+	{
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/
+TInt CSimPacketContext::AddPacketFilterCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+	{
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/	
+TInt CSimPacketContext::CreateNewTFTCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	iCreateTftTimer->Cancel();
+	
+	ReqCompleted(aTsyReqHandle, KErrCancel);
+	
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/
+TInt CSimPacketContext::DeleteTFTCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+	{
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/	
+TInt CSimPacketContext::RemovePacketFilterCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+	{
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/
+TInt CSimPacketContext::ModifyActiveContextCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+	{
+	return KErrNone;
+	}
+
+/**
+* Cancel method, returns KErrNone
+*/
+TInt CSimPacketContext::InitialiseContextCancel(const TTsyReqHandle aTsyReqHandle)
+	{
+	iInitContextTimer->Cancel();
+	
+	ReqCompleted(aTsyReqHandle, KErrCancel);
+	
+	return KErrNone;
+	}
+
+CSimPacketContext::TCommSetupItem CSimPacketContext::FindCommSettings()
+	{
+	TInt count=iCommSetupArray->Count();
+	TCommSetupItem def;
+
+	//Do a default initialization.
+	def.iCsyName.Copy(KDefaultCsyName);
+	def.iPortName.Copy(KDefaultPortName);
+	def.iConfig.iRate=KDefaultCommPortRate;
+	def.iConfig.iHandshake=KDefaultHandshake;	
+	def.iContextName=KDefaultSetting;
+	def.iCommReset = EFalse;
+	def.iNumInitializeFailures = 0;
+	def.iErrorCode = KErrNone;
+	def.iDelay = 0;
+
+	for(TInt i=0; i<count; i++)
+		{
+		TCommSetupItem comm = iCommSetupArray->At(i);
+		if(comm.iContextName.Compare(iContextName)==KErrNone)
+			return comm;
+		if(comm.iContextName.Compare(KDefaultSetting)==KErrNone)
+			def=comm;
+		}
+	return def;
+	}
+
+TName CSimPacketContext::ContextName() const 
+	{
+	return iContextName; 
+	}
+
+TInt CSimPacketContext::GetDnsInfo(const TTsyReqHandle aTsyReqHandle, const TDesC8* aDnsInfo)
+	{
+/**
+ * GetDnsInfo method to extract DNS server names from context
+ *
+ * @param aStatus TRequestStatus object with which error code is returned
+ * @param aDnsInfo packaged TDnsInfoV2 object passed as TDes8
+ *
+ * GetDNSInfo() is needed when the client uses dynamic IPv4 PDP addresses. 
+ * After the context is activated the client needs to know the actual primary 
+ * and secondary DNS addresses to use when sending packet data. As the network 
+ * may have supplied these addresses there is a need for an API method to get 
+ * these addresses from the TSY.
+ */
+	RPacketContext::TTDnsInfoV2Pckg* dnsInfoV2Pckg = (RPacketContext::TTDnsInfoV2Pckg*)aDnsInfo;
+	RPacketContext::TDnsInfoV2& dnsInfoV2 = (*dnsInfoV2Pckg)();
+
+	// Check that the data structure is supported by the simulated TSY version
+	TInt err = iPhone->CheckSimTsyVersion(dnsInfoV2);
+	if(err != KErrNone)
+		{
+		iPhone->ReqCompleted(aTsyReqHandle, err);
+		return KErrNone;
+		}
+
+	TContextConfigParam config = iContextConfigParams->At(iContextConfigParamsIndex);
+
+	dnsInfoV2.iPrimaryDns.Copy(config.iProtocolConfigOption.iPrimaryDNS);
+	dnsInfoV2.iSecondaryDns.Copy(config.iProtocolConfigOption.iSecondaryDNS);
+
+	ReqCompleted(aTsyReqHandle,KErrNone);
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetDnsInfoCancel(const TTsyReqHandle /*aTsyReqHandle*/) 
+/**
+ * GetDnsInfoCancel - Cancels an asynchronous GetDnsInfo method.
+ */
+	{
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetAddMediaAuthorization(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer)
+/**
+ * GetAddMediaAuthorization method to verify provided media authorization and return desired result
+ *
+ * @param aTsyReqHandle The request handle for completing the request
+ * @param aBuffer Packaged CTFTMediaAuthorizationV3 object passed as TDes8
+ *
+ * GetAddMediaAuthorization() checks the provided media authorization against a predefined authorization
+ * set up from the configuration file. If the authorization is valid the function will return the desired
+ * response, also set up from the configuration file. If there is a mismatch between authorizations, KErrCorrupt
+ * returned.
+ */ 	
+	{
+	TBool validMediaAuthorization = TRUE;
+	RPacketContext::CTFTMediaAuthorizationV3* mediaAuthV3 = NULL;
+
+	// Check that the data structure is supported by the simulated TSY version
+	TInt err = iPhone->CheckSimTsyVersion(*mediaAuthV3);
+	if(err != KErrNone)
+		{
+		iPhone->ReqCompleted(aTsyReqHandle, err);
+		return KErrNone;
+		}
+	
+	TRAPD(ret, mediaAuthV3 = RPacketContext::CTFTMediaAuthorizationV3::NewL());
+	if (ret != KErrNone)
+		{
+		LOGPACKET1("CSimPacketContext::GetAddMediaAuthorization NewL call fail");
+		return ret;
+		}		
+
+	TRAP(ret, mediaAuthV3->InternalizeL(*aBuffer) );
+	if (ret != KErrNone)
+		{
+		delete mediaAuthV3;
+		LOGPACKET1("CSimPacketContext::GetAddMediaAuthorization InternalizeL call fail");
+		return ret;
+		}
+
+	for (TUint i=0; i<iAuthorizationTokenResponse->Count(); i++)
+		{
+		if (!(mediaAuthV3->iAuthorizationToken).Compare(iAuthorizationTokenResponse->At(i).iAuthorizationToken))
+			{
+			for (TUint j=0; j<iMediaAuthorization->At(i).iFlowIds.Count(); j++)
+				{
+				if ((mediaAuthV3->iFlowIds[j].iMediaComponentNumber != iMediaAuthorization->At(i).iFlowIds[j].iMediaComponentNumber) ||
+					(mediaAuthV3->iFlowIds[j].iIPFlowNumber != iMediaAuthorization->At(i).iFlowIds[j].iIPFlowNumber))
+					{
+					validMediaAuthorization = FALSE;
+					}
+				}
+			if (validMediaAuthorization)
+				{
+				ReqCompleted(aTsyReqHandle,iAuthorizationTokenResponse->At(i).iResponse);
+				delete mediaAuthV3;
+				return KErrNone;
+				}
+			}
+		}
+		
+	// No match found, respond with corrupted		
+	ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	delete mediaAuthV3;	
+
+	return KErrNone;
+ 	}
+
+TInt CSimPacketContext::GetRemoveMediaAuthorization(const TTsyReqHandle aTsyReqHandle, RPacketContext::TAuthorizationToken* aAuthorizationToken)
+/**
+ * GetRemoveMediaAuthorization method to verify provided media authorization and return desired result
+ *
+ * @param aTsyReqHandle The request handle for completing the request
+ * @param aAuthorizationToken Authorization token to be checked
+ *
+ * GetRemoveMediaAuthorization() checks the provided authorization token against predefined tokens and responses 
+ * from config file. If a match is found the associated desired response is returned, otherwise KErrCorrupt is reported.
+ */ 	
+	{	
+	for (TUint i=0; i<iAuthorizationTokenResponse->Count(); i++)
+		{
+		if (!((*aAuthorizationToken).Compare(iAuthorizationTokenResponse->At(i).iAuthorizationToken)))
+			{
+			ReqCompleted(aTsyReqHandle,iAuthorizationTokenResponse->At(i).iResponse);
+			return KErrNone;
+			}
+		}
+		
+	// No match found, respond with corrupted		
+	ReqCompleted(aTsyReqHandle,KErrCorrupt);
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetAddMediaAuthorizationCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+/**
+* Cancel method, returns KErrNone
+*/
+	{
+	return KErrNone;
+	}
+
+TInt CSimPacketContext::GetRemoveMediaAuthorizationCancel(const TTsyReqHandle /*aTsyReqHandle*/)
+/**
+* Cancel method, returns KErrNone
+*/
+	{
+	return KErrNone;	
+	}
+
+