telephonyserverplugins/simtsy/inc/CSimPacketService.h
branchopencode
changeset 24 6638e7f4bd8f
parent 0 3553901f7fa8
--- a/telephonyserverplugins/simtsy/inc/CSimPacketService.h	Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/simtsy/inc/CSimPacketService.h	Thu May 06 15:10:38 2010 +0100
@@ -1,486 +1,486 @@
-// Copyright (c) 2001-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 definitions of the Simulator TSY Packet Service class.  
-// It defines a Simulated packet-switched connection to a packet (GPRS and CDMA) network.
-// 
-//
-
-/**
- @file
- @internalAll
-*/
-
-#ifndef __CSIMPACKETSERVICE_H__
-#define __CSIMPACKETSERVICE_H__
-
-#include <et_phone.h>
-#include <etelpckt.h>
-#include <testconfigfileparser.h>
-#include "csimtimer.h"
-#include "utils.h"
-#include "CSimPubSubChange.h"
-
-#include "CSimPacketContext.h"
-#include "CSimMbmsPacketContext.h"
-#include "mbmstypes.h"
-#include "pcktlist.h"
-
-const TInt KMaxContextPoolSize = 11;
-const TInt KGranularity = 2;
-const TInt KMaxMbmsContextSupportedByPhone = 7;
-const TInt KMaxMbmsContextSupportedByNetwork = 5;
-const TInt KMaxMbmsActiveContexts =10;
-const TInt KMaxMbmsMonitorContexts =15;
-
-enum TPacketEvent  //< Emum for the state machine
-	{
-	EPacketEventNone,
-	EPacketEventAttach,
-	EPacketEventDetach,
-	EPacketEventTimeOut
-	};
-
-
-const RPacketService::TStatus KPacketStateTableTerminator=(RPacketService::TStatus)999;
-
-struct TPacketStateChangeValidity			// Enum for packet state
-	{
-	RPacketService::TStatus iOldState;
-	RPacketService::TStatus iNewState;
-	TInt iError;
-	};
-
-//< This table is used to ensure that the TSY state changes are as accurate as possibly
-//< It makes sure that there is no state irregularities and the TSY does not skip any state.
-//< Returns KErrNone for a valid change state request (3rd column).
-const struct TPacketStateChangeValidity KPacketStateChangeValidity[]= {
-	{ RPacketService::EStatusUnattached,	RPacketService::EStatusAttached,	KErrNone },
-	
-	{ RPacketService::EStatusAttached,		RPacketService::EStatusActive,	KErrNone },
-	{ RPacketService::EStatusAttached,		RPacketService::EStatusUnattached,	KErrNone },
-
-	{ RPacketService::EStatusActive,		RPacketService::EStatusSuspended,	KErrNone },
-	{ RPacketService::EStatusActive,		RPacketService::EStatusAttached,	KErrNone },
-	{ RPacketService::EStatusActive,		RPacketService::EStatusUnattached,	KErrNone },
-	
-	{ RPacketService::EStatusSuspended,		RPacketService::EStatusUnattached,	KErrNone },
-	{ RPacketService::EStatusSuspended,		RPacketService::EStatusAttached,	KErrNone },
-	{ RPacketService::EStatusSuspended,		RPacketService::EStatusActive,		KErrNone },
-
-	{ KPacketStateTableTerminator,			KPacketStateTableTerminator,		KPacketStateTableTerminator}
-	};
-
-struct TDefaultGPRSConfigParam  //< Used for holding the default GPRS configuration parameters
-	{
-	TInt	iProtocolType;
-	TPtrC8	iGsnAddress;
-	TPtrC8	iProtocolAddress;
-	TUint	iPdpCompression;
-	TInt	iAnonymousAccess;
-	TBool	iUseEdge;
-	TProtocolConfigOption iProtocolConfigOption;
-	};
-
-struct TDefaultR99_R4ConfigParam	//< Used for holding the default Release99/4 configuration parameters
-	{
-	TInt	iProtocolType;
-	TPtrC8	iGsnAddress;
-	TPtrC8	iProtocolAddress;
-	TBool	iUseEdge;
-	TProtocolConfigOption iProtocolConfigOption;
-	};
-
-struct TDefaultR5ConfigParam		//< Used for holding the default Release 5 configuration parameters
-	{
-	TInt	iProtocolType;
-	TPtrC8	iGsnAddress;
-	TPtrC8	iProtocolAddress;
-	TInt	iAnonymousAccess;
-	TBool	iUseEdge;
-	TProtocolConfigOption iProtocolConfigOption;
-	TUint	iPdpHeaderCompression;
-	TUint	iPdpDataCompression;
-	};
-
-
-class TConfigData
-	{
-public:
-	static TInt Find(CArrayFixFlat<TConfigData>* aConfigArray,
-					 TTsyReqHandle aTsyReqHandle,
-					 TInt& aIndex);
-	TTsyReqHandle iTsyReqHandle;
-	TDes8* iData;
-	};
-
-
-class CSimPhone;
-class CSimIncomingContextManager;
-
-class CSimPacketService : public CSubSessionExtBase, public MTimerCallBack, public MPSSimObserver, public MPubSubChangeCallback
-	{
-	friend CSimPacketContext::~CSimPacketContext();
-	friend CSimMbmsPacketContext::~CSimMbmsPacketContext();
-
-public:
-	static CSimPacketService* NewL(CSimPhone* aPhone);
-	CSimPacketService(CSimPhone* aPhone);
-	void ConstructL();
-	~CSimPacketService();
-
-	virtual TInt ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,const TDataPackage& aPackage);
-	virtual TReqMode ReqModeL(const TInt aIpc);
-	virtual CTelObject* OpenNewObjectByNameL(const TDesC& aName);
-	virtual CTelObject* OpenNewObjectL(TDes& aNewName);
-	virtual TInt CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle);
-	virtual void Init();
-	virtual TInt RegisterNotification(const TInt aIpc);
-	virtual TInt DeregisterNotification(const TInt aIpc);
-	virtual TInt NumberOfSlotsL(const TInt aIpc);
-	virtual RHandleBase* GlobalKernelObjectHandle();
-
-	CSimPhone* PhonePtr() const;  //< Returns a pointer to the phone object (iPhone)
-	TInt ChangeState(RPacketService::TStatus aNewState); //< Changes the state of the packetservice
-	const CTestConfigSection* CfgFile(); //< Returns a pointer to a section of the configuration file
-
-	TInt GetCurrentReleaseMode(const TTsyReqHandle aTsyReqHandle, RPacketService::TPacketReleaseMode* aReleaseMode);
-	TInt NotifyReleaseModeChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TPacketReleaseMode* aReleaseMode);
-
-	TInt EnumerateNifs(const TTsyReqHandle aTsyReqHandle, TInt& aCount);
-	TInt GetNifInfo(const TTsyReqHandle aTsyReqHandle, TInt aIndex, TDes8* aNifInfoV01);
-	TInt EnumerateContextsInNif(const TTsyReqHandle aTsyReqHandle, const TDesC* aExistingContextName, TInt& aCount);
-	TInt GetContextNameInNif(const TTsyReqHandle aTsyReqHandle, const TDesC* aExistingContextName, TInt aIndex, TDes* aContextName);
-
-	TInt GetCurrentReleaseModeCancel(const TTsyReqHandle aTsyReqHandle);
-	TInt NotifyReleaseModeChangeCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt EnumerateNifsCancel(const TTsyReqHandle aTsyReqHandle);
-	TInt GetNifInfoCancel(const TTsyReqHandle aTsyReqHandle);
-	TInt EnumerateContextsInNifCancel(const TTsyReqHandle aTsyReqHandle);
-	TInt GetContextNameInNifCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	void DecrementContextCount();
-	void DecrementMbmsContextCount();
-	
-	virtual void SimPSEvent(const CSimPubSub::TPubSubProperty aProperty, TInt aStatus);
-	virtual void PubSubCallback(TInt aIndex);
-private:
-	//< The Packet API methods implemented by the TSY
-	//< These will be called from the ExtFunc method above
-	TInt NotifyContextAdded(const TTsyReqHandle aTsyReqHandle, TDes* aContextId);
-	TInt NotifyContextAddedCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt Attach(const TTsyReqHandle aTsyReqHandle);	
-	TInt AttachCancel(const TTsyReqHandle aTsyReqHandle);	
-
-	TInt Detach(const TTsyReqHandle aTsyReqHandle);	
-	TInt DetachCancel(const TTsyReqHandle aTsyReqHandle);	
-
-	TInt DoDetach();
-
-	TInt GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketService::TStatus* aStatus);
-	TInt NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketService::TStatus* aStatus);
-	TInt NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt NotifyContextActivationRequested(const TTsyReqHandle aTsyReqHandle, TDes8* aContextParameters);
-	TInt NotifyContextActivationRequestedCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt RejectActivationRequest(const TTsyReqHandle aTsyReqHandle);
-	TInt RejectActivationRequestCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt EnumerateContexts(const TTsyReqHandle aTsyReqHandle,TInt* aCount, TInt* aMaxAllowed);
-	TInt EnumerateContextsCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	TInt GetContextInfo(const TTsyReqHandle aTsyReqHandle,TInt* aIndex,RPacketService::TContextInfo* aInfo);
-	TInt GetContextInfoCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt GetNtwkRegStatus(const TTsyReqHandle aTsyReqHandle,RPacketService::TRegistrationStatus* aRegistrationStatus);
-	TInt NotifyChangeOfNtwkRegStatus(const TTsyReqHandle aTsyReqHandle,RPacketService::TRegistrationStatus* aRegistrationStatus);
-	TInt NotifyChangeOfNtwkRegStatusCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt GetMSClass(const TTsyReqHandle aTsyReqHandle, RPacketService::TMSClass* aCurrentClass, RPacketService::TMSClass* aMaxClass);
-	TInt GetMSClassCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt SetMSClass(const TTsyReqHandle aTsyReqHandle, RPacketService::TMSClass* aClass);
-	TInt SetMSClassCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt NotifyMSClassChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TMSClass* aNewClass);
-	TInt NotifyMSClassChangeCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt GetStaticCaps(const TTsyReqHandle aTsyReqHandle, TUint* aCaps, RPacketContext::TProtocolType* aPdpType);
-
-	TInt GetDynamicCaps(const TTsyReqHandle aTsyReqHandle, RPacketService::TDynamicCapsFlags* aCaps);
-	TInt NotifyDynamicCapsChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TDynamicCapsFlags* aCaps);
-	TInt NotifyDynamicCapsChangeCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt SetAttachMode(const TTsyReqHandle aTsyReqHandle, RPacketService::TAttachMode* aMode);
-	TInt GetAttachMode(const TTsyReqHandle aTsyReqHandle, RPacketService::TAttachMode* aMode);
-	TInt NotifyAttachModeChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TAttachMode* aMode);
-	TInt NotifyAttachModeChangeCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt SetDefaultContextParams(const TTsyReqHandle aTsyReqHandle, const TDesC8* aPckg);
-	TInt GetDefaultContextParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg);
-	TInt GetGPRSDefaultContextParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg);
-	
-	/* MBMS related APIs starts here*/
-	
-	TInt GetMbmsNetworkServiceStatus(const TTsyReqHandle aTsyReqHandle, TBool aAttemptAttach,TMbmsNetworkServiceStatus* aStatus);
-	TInt GetMbmsNetworkServiceStatusCancel(const TTsyReqHandle aTsyReqHandle);
-
-	TInt NotifyMbmsNetworkServiceStatusChange(const TTsyReqHandle aTsyReqHandle, TMbmsNetworkServiceStatus* aStatus);
-	TInt NotifyMbmsNetworkServiceStatusChangeCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	TInt NotifyMbmsServiceAvailabilityChange(const TTsyReqHandle aTsyReqHandle);
-	TInt NotifyMbmsServiceAvailabilityChangeCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	TInt UpdateMbmsMonitorServiceListL(const TTsyReqHandle aTsyReqHandle,TMbmsAction* aAction, TDes8* aBuffer=NULL);
-	TInt UpdateMbmsMonitorServiceListCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	TInt EnumerateMbmsActiveServiceList(const TTsyReqHandle aTsyReqHandle, TInt* aCount, TInt* aMaxAllowed);
-	TInt EnumerateMbmsActiveServiceListCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	TInt EnumerateMbmsMonitorServiceList(const TTsyReqHandle aTsyReqHandle, TInt* aCount, TInt* aMaxAllowed);
-	TInt EnumerateMbmsMonitorServiceListCancel(const TTsyReqHandle aTsyReqHandle);
-
-	/* MBMS related APIs ends here*/
-		
-	TInt ActionEvent(TPacketEvent aEvent);	//< The state machine for this class
-	virtual void TimerCallBack(TInt aId);	//< Timer Callback for the timeout events
-	void TimerCallBackPcktRegStatus();
-	void TimerCallBackReleaseMode();
-	void TimerCallBackNtwkRegStatus();
-	void TimerCallBackDeactivate();
-	void TimerCallBackDynamicCaps();
-	
-	void CompleteNtwkRegStatus(RPacketService::TRegistrationStatus aRegistrationStatus);
-	
-	TInt GetMbmsMonitoredServicesListPhase1(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TInt* aBufSize);
-	TInt ProcessGetMbmsMonitoredServicesListPhase1L(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TInt* aBufSize);
-	TInt GetMbmsMonitoredServicesListPhase2(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TDes8* aBufSize);
-	TInt GetMbmsMonitoredServicesListCancel(const TTsyReqHandle aTsyReqHandle);
-	
-	
-private: // Data
-	CSimPhone* iPhone;		//< Pointer to the phone object (The parent of this class)
-	TInt iContextCount;		//< Number of contexts currently opened
-	TInt iMbmsContextCount;	//< Number of MBMS contexts currently opened
-	TInt iMbmsContextNameInc; //< Used for Appending a number to the mbms context name "MBMS_CONTEXT"
-	TInt iPrimaryContextNameInc;	//< Used for Appending a number to the packet name "PRIMARY_PACKET_CONTEXT" 
-							//< to give each packet object opened a unique name
-	TInt iSecondaryContextNameInc;	//< Used for Appending a number to the packet name "SECONDARY_PACKET_CONTEXT" 
-							//< to give each packet object opened a unique name
-
-	RPacketService::TStatus iState;		//< Holds the current state of the packet service
-	RPacketService::TAttachMode iAttachMode; //< Attach mode for the packet service
-	RPacketService::TMSClass iMSClass;  //< We only support class B
-	
-	TTsyReqHandle iAttachRequestHandle;		//< The request handle for the attach request
-	TInt iAttachPause;		//< duration spent in attaching to network state
-	TInt iAttachFail;		//< Fail the attach request with this error
-
-	TTsyReqHandle iDetachRequestHandle; //< The request handle for the detach request
-	TInt iDetachPause;		//< duration spent in detaching from the network
-	TInt iDetachFail;		//< Fail the detach request with this error
-
-	TPacketEvent iCurrentEvent;	//< Holds the current event being processed (allows the tsy to cancel the request)
-	TNotifyData	iNotifyStatusChange;	//< Holds the notification data (a flag, TsyReqHandle and any raw data) 
-	TNotifyData iNotifyContextAdded;	//< Registers a client interest in being notified of a context being added to the network
-
-	TNotifyData	iNotifyChangeOfNtwk;	//< Registers a client interest in a change of network notification
-	TNotifyData	iNotifyMSClassChange;	//< Registers a client interest in a change of MSClass
-	
-	TNotifyData iNotifyChangeOfReleaseMode;
-	TNotifyData iNotifyChangeOfAttachMode;	//< Registers client interest in change of attach mode
-	
-	TNotifyData iNotifyMbmsNetworkStatusChange; //<Holds the notification data for the changes in the MBMS network status
-	TNotifyData iNotifyMbmsServAvailChange; //<Holds the notification data for the changes in the MBMS network service availability
-	
-	CSimPubSub::TPubSubProperty iNtwkRegStatusChangeProperty;
-	CSimPubSub *iNtwkRegStatusChange;
-	
-	CSimPubSubChange* iMbmsActivation;
-	
-	TNotifyData iNotifyDynamicCapsChange;	//< Registers client interest in change of Phone capabilities
-
-	CSimTimer* iPcktRegTimer;		//< Timer for the Packet registration
-	CSimTimer* iNtwkRegTimer;		//< Timer for the Network registration
-	CSimTimer* iReleaseModeTimer;	//< Timer for the Release mode
-	CSimTimer* iDynamicCapsTimer;   //< Timer for the Dynamic caps change simulation
-	CSimTimer* iTimer;	//< Pointer to the Timer object for callback
-	CSimTimer* iMbmsPcktTimer; //<Timer for the MBMS related Network information
-	RMutex iMutex;
-
-	struct TPacketRegStatus
-		{
-		TInt iDuration;				//< Duration of Registration Status
-		RPacketService::TStatus iStatus;	//< Registration Status that will be maintained through period iDuration
-		};
-
-	struct TNtwkRegStatus
-		{
-		TInt iDuration;				//< Duration of Registration Status
-		RPacketService::TRegistrationStatus iRegStatus;	//< Registration Status that will be maintained through period iDuration
-		};
-
-	struct TPacketReleaseMode
-		{
-		TInt iDuration;
-		TInt iReleaseMode;
-		};
-
-	struct TPacketDynamicCaps
-		{
-		TInt iDuration;				//< Duration of dynamic caps value
-		RPacketService::TDynamicCapsFlags iDynamicCaps;	//< Dynamic Caps value that will be maintained through period iDuration
-		};
-	
-	struct TMbmsBroadCastParams
-		{
-		TInt iDuration;
-		TMbmsNetworkServiceStatus iMbmsNetworkStatus;
-		};
-	
-	struct TMbmsMonitorListParams
-		{
-		TInt iDuration;
-		TUint16 iMCC;
-		TUint16 iMNC;
-		TUint iServiceId;
-		TMbmsScope iAccessBearer;
-		TMbmsServiceMode iServiceMode;
-		TMbmsAvailabilityStatus iAvailStatus;
-		TBool iIsEntryValid;
-		};
-
-	CArrayFixFlat<TPacketRegStatus>* iPcktRegStatusInfo;	//< List of packet registration changes.
-	TNotificationType iNtwkRegStatusNotificationType;
-	CArrayFixFlat<TNtwkRegStatus>*	 iNtwkRegStatusInfo;	// list of ntwk registration changes.
-	CArrayFixFlat<TPacketReleaseMode>* iPacketReleaseModeArray;
-	CArrayFixFlat<TPacketDynamicCaps>* iDynamicCapsArray; //< List of dynamic capabilities changes
-	CArrayFixFlat<TInt>* iSecondaryContextCountArray;
-	CArrayFixFlat<TMbmsBroadCastParams>* iMbmsBroadcastParamsArray; //List of MBMS Broadcast Service related information
-	CArrayFixFlat<TMbmsMonitorListParams>* iMbmsMonitorListParamsArray; // List of MBMS Broadcast Monitoring list parameters
-	CArrayPtrFlat<CPcktListReadAllAttempt>* iMbmsServicesList; // List containing the MBMS services for 2P retrieval
-
-	TInt iCurrentMbmsParamsIndex;
-	TInt iCurrentMbmsMonitorListIndex;
-	TInt iCurrentPacketReleaseMode;
-	TInt iPacketReleaseModeIndex;
-	TInt iCurrentDynamicCaps;
-	TInt iDynamicCapsIndex;
-	TInt iPcktRegStatIndex;					//< Current index from the iPcktRegStatInfo array
-	TInt iCurrentRegStatus;
-	TInt iNtwkRegStatIndex;					//< Current index from the iNtwkRegStatInfo array
-	TInt iUpdateMbmsServiceError;
-	TBool iPcktTimerBool;
-	
-	TTsyReqHandle iGetMbmsNetworkReqHandle;
-	TTsyReqHandle iEnumerateActiveListReqHandle;
-	TTsyReqHandle iEnumerateMonitorListReqHandle;
-	TTsyReqHandle iUpdateMbmsServiceReqHandle;
-
-	TDefaultGPRSConfigParam iGPRSDefaultConfig;
-	TDefaultR99_R4ConfigParam iR99_R4DefaultConfig;
-	TDefaultR5ConfigParam iR5DefaultConfig;
-
-	TBool iSecondaryContext;
-	TInt PrepareOpenSecondary(const TTsyReqHandle aTsyReqHandle, const TDesC* aOriginalContextName);
-	TInt iCurrentPrimaryContextIndex;
-
-	// this class is to enable a Nif to hold and access its contexts and its primary context's name
-	
-	// The above statement appears to be totally wrong and misleading.
-	// It has nothing to do with NIF's, it is just a way of partitioning PDP. 
-	// The 1st in the context is the primary context, the next contexts are the secondary contexts.
-	class TNifWrapper
-	{
-		private:
-			RPointerArray<CSimPacketContext> iContexts;	// this contains an array of CSimPacketContexts
-			TName iPrimaryContextName;				// the primary context name
-
-		public:
-			CSimPacketContext* GetContext(TInt aIndex)
-			{
-			return iContexts[aIndex];										// returns context at specified context
-			}; // returns the context at the specified index
-			//TArray<CSimPacketContext*> Array(){ return iContexts.Array();};		// returns the array of contexts
-			inline TInt NumberOfContexts() {return iContexts.Count();};			// returns number of contexts
-			inline void AddContext(CSimPacketContext* aContext) {iContexts.Append(aContext);};	// adds a context to the array
-			inline void Close()
-				{
-				// deletes contexts of nif
-				TInt count = iContexts.Count();
-				for(TInt i = 0; i<count; i++)
-					{
-					iContexts[i]->Close();
-					}
-				iContexts.Close();
-				};
-	};
-	
-	class TMbmsNifWrapper
-	{
-		private:
-			RPointerArray<CSimMbmsPacketContext> iContexts;	// this contains an array of CSimMbmsPacketContexts
-			TName iContextName;				// the MBMS packet context name
-
-		public:
-			inline CSimMbmsPacketContext* GetContext(TInt aIndex);
-			inline TInt NumberOfContexts(); 
-			inline void AddContext(CSimMbmsPacketContext* aContext);
-			inline void Close();
-	};
-
-	RArray<TNifWrapper> iNifWrappers;			// array of nifs; each nif holds a primary context and a number of secondary contexts
-	RArray<TMbmsNifWrapper> iMbmsNifWrappers; //array of MBMS nifs; each nif holds a MBMS broadcast contexts;
-											// shall be used for multicast contexts in future.
-	TConfigData iConfigData;
-	TInt iMbmsMonitorListCount;  //count of number of Monitor list
-			
-	CSimIncomingContextManager* iIncomingContextManager;
-		// Holds data to do with the incoming contexts.
-		// Note all messages come through RPacketService via SimPSEvent
-		// This applies to incoming, and network registration.
-	
-public:
-	inline RPacketService::TMSClass MSClass() const {return iMSClass; } //< Returns the Current MSClass object supported
-	};
-
-CSimMbmsPacketContext* CSimPacketService::TMbmsNifWrapper::GetContext(TInt aIndex)
-	{
-	return iContexts[aIndex];					// returns context at specified index
-	}; 
-
-TInt CSimPacketService::TMbmsNifWrapper::NumberOfContexts()
-	{// returns number of contexts
-	return iContexts.Count();
-	}
-
-void CSimPacketService::TMbmsNifWrapper::AddContext(CSimMbmsPacketContext* aContext)
-	{// adds a context to the array
-	iContexts.Append(aContext);
-	}
-
-void CSimPacketService::TMbmsNifWrapper::Close()
-	{
-	// deletes contexts of nif
-	TInt count = iContexts.Count();
-	for(TInt i = 0; i<count; i++)
-		{
-		iContexts[i]->Close();
-		}
-	iContexts.Close();
-	}
-
-#endif  //__CSIMPACKETSERVICE_H__
+// Copyright (c) 2001-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 definitions of the Simulator TSY Packet Service class.  
+// It defines a Simulated packet-switched connection to a packet (GPRS and CDMA) network.
+// 
+//
+
+/**
+ @file
+ @internalAll
+*/
+
+#ifndef __CSIMPACKETSERVICE_H__
+#define __CSIMPACKETSERVICE_H__
+
+#include <et_phone.h>
+#include <etelpckt.h>
+#include <testconfigfileparser.h>
+#include "csimtimer.h"
+#include "utils.h"
+#include "CSimPubSubChange.h"
+
+#include "CSimPacketContext.h"
+#include "CSimMbmsPacketContext.h"
+#include "mbmstypes.h"
+#include "pcktlist.h"
+
+const TInt KMaxContextPoolSize = 11;
+const TInt KGranularity = 2;
+const TInt KMaxMbmsContextSupportedByPhone = 7;
+const TInt KMaxMbmsContextSupportedByNetwork = 5;
+const TInt KMaxMbmsActiveContexts =10;
+const TInt KMaxMbmsMonitorContexts =15;
+
+enum TPacketEvent  //< Emum for the state machine
+	{
+	EPacketEventNone,
+	EPacketEventAttach,
+	EPacketEventDetach,
+	EPacketEventTimeOut
+	};
+
+
+const RPacketService::TStatus KPacketStateTableTerminator=(RPacketService::TStatus)999;
+
+struct TPacketStateChangeValidity			// Enum for packet state
+	{
+	RPacketService::TStatus iOldState;
+	RPacketService::TStatus iNewState;
+	TInt iError;
+	};
+
+//< This table is used to ensure that the TSY state changes are as accurate as possibly
+//< It makes sure that there is no state irregularities and the TSY does not skip any state.
+//< Returns KErrNone for a valid change state request (3rd column).
+const struct TPacketStateChangeValidity KPacketStateChangeValidity[]= {
+	{ RPacketService::EStatusUnattached,	RPacketService::EStatusAttached,	KErrNone },
+	
+	{ RPacketService::EStatusAttached,		RPacketService::EStatusActive,	KErrNone },
+	{ RPacketService::EStatusAttached,		RPacketService::EStatusUnattached,	KErrNone },
+
+	{ RPacketService::EStatusActive,		RPacketService::EStatusSuspended,	KErrNone },
+	{ RPacketService::EStatusActive,		RPacketService::EStatusAttached,	KErrNone },
+	{ RPacketService::EStatusActive,		RPacketService::EStatusUnattached,	KErrNone },
+	
+	{ RPacketService::EStatusSuspended,		RPacketService::EStatusUnattached,	KErrNone },
+	{ RPacketService::EStatusSuspended,		RPacketService::EStatusAttached,	KErrNone },
+	{ RPacketService::EStatusSuspended,		RPacketService::EStatusActive,		KErrNone },
+
+	{ KPacketStateTableTerminator,			KPacketStateTableTerminator,		KPacketStateTableTerminator}
+	};
+
+struct TDefaultGPRSConfigParam  //< Used for holding the default GPRS configuration parameters
+	{
+	TInt	iProtocolType;
+	TPtrC8	iGsnAddress;
+	TPtrC8	iProtocolAddress;
+	TUint	iPdpCompression;
+	TInt	iAnonymousAccess;
+	TBool	iUseEdge;
+	TProtocolConfigOption iProtocolConfigOption;
+	};
+
+struct TDefaultR99_R4ConfigParam	//< Used for holding the default Release99/4 configuration parameters
+	{
+	TInt	iProtocolType;
+	TPtrC8	iGsnAddress;
+	TPtrC8	iProtocolAddress;
+	TBool	iUseEdge;
+	TProtocolConfigOption iProtocolConfigOption;
+	};
+
+struct TDefaultR5ConfigParam		//< Used for holding the default Release 5 configuration parameters
+	{
+	TInt	iProtocolType;
+	TPtrC8	iGsnAddress;
+	TPtrC8	iProtocolAddress;
+	TInt	iAnonymousAccess;
+	TBool	iUseEdge;
+	TProtocolConfigOption iProtocolConfigOption;
+	TUint	iPdpHeaderCompression;
+	TUint	iPdpDataCompression;
+	};
+
+
+class TConfigData
+	{
+public:
+	static TInt Find(CArrayFixFlat<TConfigData>* aConfigArray,
+					 TTsyReqHandle aTsyReqHandle,
+					 TInt& aIndex);
+	TTsyReqHandle iTsyReqHandle;
+	TDes8* iData;
+	};
+
+
+class CSimPhone;
+class CSimIncomingContextManager;
+
+class CSimPacketService : public CSubSessionExtBase, public MTimerCallBack, public MPSSimObserver, public MPubSubChangeCallback
+	{
+	friend CSimPacketContext::~CSimPacketContext();
+	friend CSimMbmsPacketContext::~CSimMbmsPacketContext();
+
+public:
+	static CSimPacketService* NewL(CSimPhone* aPhone);
+	CSimPacketService(CSimPhone* aPhone);
+	void ConstructL();
+	~CSimPacketService();
+
+	virtual TInt ExtFunc(const TTsyReqHandle aTsyReqHandle,const TInt aIpc,const TDataPackage& aPackage);
+	virtual TReqMode ReqModeL(const TInt aIpc);
+	virtual CTelObject* OpenNewObjectByNameL(const TDesC& aName);
+	virtual CTelObject* OpenNewObjectL(TDes& aNewName);
+	virtual TInt CancelService(const TInt aIpc, const TTsyReqHandle aTsyReqHandle);
+	virtual void Init();
+	virtual TInt RegisterNotification(const TInt aIpc);
+	virtual TInt DeregisterNotification(const TInt aIpc);
+	virtual TInt NumberOfSlotsL(const TInt aIpc);
+	virtual RHandleBase* GlobalKernelObjectHandle();
+
+	CSimPhone* PhonePtr() const;  //< Returns a pointer to the phone object (iPhone)
+	TInt ChangeState(RPacketService::TStatus aNewState); //< Changes the state of the packetservice
+	const CTestConfigSection* CfgFile(); //< Returns a pointer to a section of the configuration file
+
+	TInt GetCurrentReleaseMode(const TTsyReqHandle aTsyReqHandle, RPacketService::TPacketReleaseMode* aReleaseMode);
+	TInt NotifyReleaseModeChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TPacketReleaseMode* aReleaseMode);
+
+	TInt EnumerateNifs(const TTsyReqHandle aTsyReqHandle, TInt& aCount);
+	TInt GetNifInfo(const TTsyReqHandle aTsyReqHandle, TInt aIndex, TDes8* aNifInfoV01);
+	TInt EnumerateContextsInNif(const TTsyReqHandle aTsyReqHandle, const TDesC* aExistingContextName, TInt& aCount);
+	TInt GetContextNameInNif(const TTsyReqHandle aTsyReqHandle, const TDesC* aExistingContextName, TInt aIndex, TDes* aContextName);
+
+	TInt GetCurrentReleaseModeCancel(const TTsyReqHandle aTsyReqHandle);
+	TInt NotifyReleaseModeChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt EnumerateNifsCancel(const TTsyReqHandle aTsyReqHandle);
+	TInt GetNifInfoCancel(const TTsyReqHandle aTsyReqHandle);
+	TInt EnumerateContextsInNifCancel(const TTsyReqHandle aTsyReqHandle);
+	TInt GetContextNameInNifCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	void DecrementContextCount();
+	void DecrementMbmsContextCount();
+	
+	virtual void SimPSEvent(const CSimPubSub::TPubSubProperty aProperty, TInt aStatus);
+	virtual void PubSubCallback(TInt aIndex);
+private:
+	//< The Packet API methods implemented by the TSY
+	//< These will be called from the ExtFunc method above
+	TInt NotifyContextAdded(const TTsyReqHandle aTsyReqHandle, TDes* aContextId);
+	TInt NotifyContextAddedCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt Attach(const TTsyReqHandle aTsyReqHandle);	
+	TInt AttachCancel(const TTsyReqHandle aTsyReqHandle);	
+
+	TInt Detach(const TTsyReqHandle aTsyReqHandle);	
+	TInt DetachCancel(const TTsyReqHandle aTsyReqHandle);	
+
+	TInt DoDetach();
+
+	TInt GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketService::TStatus* aStatus);
+	TInt NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketService::TStatus* aStatus);
+	TInt NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt NotifyContextActivationRequested(const TTsyReqHandle aTsyReqHandle, TDes8* aContextParameters);
+	TInt NotifyContextActivationRequestedCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt RejectActivationRequest(const TTsyReqHandle aTsyReqHandle);
+	TInt RejectActivationRequestCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt EnumerateContexts(const TTsyReqHandle aTsyReqHandle,TInt* aCount, TInt* aMaxAllowed);
+	TInt EnumerateContextsCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	TInt GetContextInfo(const TTsyReqHandle aTsyReqHandle,TInt* aIndex,RPacketService::TContextInfo* aInfo);
+	TInt GetContextInfoCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt GetNtwkRegStatus(const TTsyReqHandle aTsyReqHandle,RPacketService::TRegistrationStatus* aRegistrationStatus);
+	TInt NotifyChangeOfNtwkRegStatus(const TTsyReqHandle aTsyReqHandle,RPacketService::TRegistrationStatus* aRegistrationStatus);
+	TInt NotifyChangeOfNtwkRegStatusCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt GetMSClass(const TTsyReqHandle aTsyReqHandle, RPacketService::TMSClass* aCurrentClass, RPacketService::TMSClass* aMaxClass);
+	TInt GetMSClassCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt SetMSClass(const TTsyReqHandle aTsyReqHandle, RPacketService::TMSClass* aClass);
+	TInt SetMSClassCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt NotifyMSClassChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TMSClass* aNewClass);
+	TInt NotifyMSClassChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt GetStaticCaps(const TTsyReqHandle aTsyReqHandle, TUint* aCaps, RPacketContext::TProtocolType* aPdpType);
+
+	TInt GetDynamicCaps(const TTsyReqHandle aTsyReqHandle, RPacketService::TDynamicCapsFlags* aCaps);
+	TInt NotifyDynamicCapsChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TDynamicCapsFlags* aCaps);
+	TInt NotifyDynamicCapsChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt SetAttachMode(const TTsyReqHandle aTsyReqHandle, RPacketService::TAttachMode* aMode);
+	TInt GetAttachMode(const TTsyReqHandle aTsyReqHandle, RPacketService::TAttachMode* aMode);
+	TInt NotifyAttachModeChange(const TTsyReqHandle aTsyReqHandle, RPacketService::TAttachMode* aMode);
+	TInt NotifyAttachModeChangeCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt SetDefaultContextParams(const TTsyReqHandle aTsyReqHandle, const TDesC8* aPckg);
+	TInt GetDefaultContextParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg);
+	TInt GetGPRSDefaultContextParams(const TTsyReqHandle aTsyReqHandle, TDes8* aPckg);
+	
+	/* MBMS related APIs starts here*/
+	
+	TInt GetMbmsNetworkServiceStatus(const TTsyReqHandle aTsyReqHandle, TBool aAttemptAttach,TMbmsNetworkServiceStatus* aStatus);
+	TInt GetMbmsNetworkServiceStatusCancel(const TTsyReqHandle aTsyReqHandle);
+
+	TInt NotifyMbmsNetworkServiceStatusChange(const TTsyReqHandle aTsyReqHandle, TMbmsNetworkServiceStatus* aStatus);
+	TInt NotifyMbmsNetworkServiceStatusChangeCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	TInt NotifyMbmsServiceAvailabilityChange(const TTsyReqHandle aTsyReqHandle);
+	TInt NotifyMbmsServiceAvailabilityChangeCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	TInt UpdateMbmsMonitorServiceListL(const TTsyReqHandle aTsyReqHandle,TMbmsAction* aAction, TDes8* aBuffer=NULL);
+	TInt UpdateMbmsMonitorServiceListCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	TInt EnumerateMbmsActiveServiceList(const TTsyReqHandle aTsyReqHandle, TInt* aCount, TInt* aMaxAllowed);
+	TInt EnumerateMbmsActiveServiceListCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	TInt EnumerateMbmsMonitorServiceList(const TTsyReqHandle aTsyReqHandle, TInt* aCount, TInt* aMaxAllowed);
+	TInt EnumerateMbmsMonitorServiceListCancel(const TTsyReqHandle aTsyReqHandle);
+
+	/* MBMS related APIs ends here*/
+		
+	TInt ActionEvent(TPacketEvent aEvent);	//< The state machine for this class
+	virtual void TimerCallBack(TInt aId);	//< Timer Callback for the timeout events
+	void TimerCallBackPcktRegStatus();
+	void TimerCallBackReleaseMode();
+	void TimerCallBackNtwkRegStatus();
+	void TimerCallBackDeactivate();
+	void TimerCallBackDynamicCaps();
+	
+	void CompleteNtwkRegStatus(RPacketService::TRegistrationStatus aRegistrationStatus);
+	
+	TInt GetMbmsMonitoredServicesListPhase1(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TInt* aBufSize);
+	TInt ProcessGetMbmsMonitoredServicesListPhase1L(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TInt* aBufSize);
+	TInt GetMbmsMonitoredServicesListPhase2(const TTsyReqHandle aTsyReqHandle, TClientId* aClient, TDes8* aBufSize);
+	TInt GetMbmsMonitoredServicesListCancel(const TTsyReqHandle aTsyReqHandle);
+	
+	
+private: // Data
+	CSimPhone* iPhone;		//< Pointer to the phone object (The parent of this class)
+	TInt iContextCount;		//< Number of contexts currently opened
+	TInt iMbmsContextCount;	//< Number of MBMS contexts currently opened
+	TInt iMbmsContextNameInc; //< Used for Appending a number to the mbms context name "MBMS_CONTEXT"
+	TInt iPrimaryContextNameInc;	//< Used for Appending a number to the packet name "PRIMARY_PACKET_CONTEXT" 
+							//< to give each packet object opened a unique name
+	TInt iSecondaryContextNameInc;	//< Used for Appending a number to the packet name "SECONDARY_PACKET_CONTEXT" 
+							//< to give each packet object opened a unique name
+
+	RPacketService::TStatus iState;		//< Holds the current state of the packet service
+	RPacketService::TAttachMode iAttachMode; //< Attach mode for the packet service
+	RPacketService::TMSClass iMSClass;  //< We only support class B
+	
+	TTsyReqHandle iAttachRequestHandle;		//< The request handle for the attach request
+	TInt iAttachPause;		//< duration spent in attaching to network state
+	TInt iAttachFail;		//< Fail the attach request with this error
+
+	TTsyReqHandle iDetachRequestHandle; //< The request handle for the detach request
+	TInt iDetachPause;		//< duration spent in detaching from the network
+	TInt iDetachFail;		//< Fail the detach request with this error
+
+	TPacketEvent iCurrentEvent;	//< Holds the current event being processed (allows the tsy to cancel the request)
+	TNotifyData	iNotifyStatusChange;	//< Holds the notification data (a flag, TsyReqHandle and any raw data) 
+	TNotifyData iNotifyContextAdded;	//< Registers a client interest in being notified of a context being added to the network
+
+	TNotifyData	iNotifyChangeOfNtwk;	//< Registers a client interest in a change of network notification
+	TNotifyData	iNotifyMSClassChange;	//< Registers a client interest in a change of MSClass
+	
+	TNotifyData iNotifyChangeOfReleaseMode;
+	TNotifyData iNotifyChangeOfAttachMode;	//< Registers client interest in change of attach mode
+	
+	TNotifyData iNotifyMbmsNetworkStatusChange; //<Holds the notification data for the changes in the MBMS network status
+	TNotifyData iNotifyMbmsServAvailChange; //<Holds the notification data for the changes in the MBMS network service availability
+	
+	CSimPubSub::TPubSubProperty iNtwkRegStatusChangeProperty;
+	CSimPubSub *iNtwkRegStatusChange;
+	
+	CSimPubSubChange* iMbmsActivation;
+	
+	TNotifyData iNotifyDynamicCapsChange;	//< Registers client interest in change of Phone capabilities
+
+	CSimTimer* iPcktRegTimer;		//< Timer for the Packet registration
+	CSimTimer* iNtwkRegTimer;		//< Timer for the Network registration
+	CSimTimer* iReleaseModeTimer;	//< Timer for the Release mode
+	CSimTimer* iDynamicCapsTimer;   //< Timer for the Dynamic caps change simulation
+	CSimTimer* iTimer;	//< Pointer to the Timer object for callback
+	CSimTimer* iMbmsPcktTimer; //<Timer for the MBMS related Network information
+	RMutex iMutex;
+
+	struct TPacketRegStatus
+		{
+		TInt iDuration;				//< Duration of Registration Status
+		RPacketService::TStatus iStatus;	//< Registration Status that will be maintained through period iDuration
+		};
+
+	struct TNtwkRegStatus
+		{
+		TInt iDuration;				//< Duration of Registration Status
+		RPacketService::TRegistrationStatus iRegStatus;	//< Registration Status that will be maintained through period iDuration
+		};
+
+	struct TPacketReleaseMode
+		{
+		TInt iDuration;
+		TInt iReleaseMode;
+		};
+
+	struct TPacketDynamicCaps
+		{
+		TInt iDuration;				//< Duration of dynamic caps value
+		RPacketService::TDynamicCapsFlags iDynamicCaps;	//< Dynamic Caps value that will be maintained through period iDuration
+		};
+	
+	struct TMbmsBroadCastParams
+		{
+		TInt iDuration;
+		TMbmsNetworkServiceStatus iMbmsNetworkStatus;
+		};
+	
+	struct TMbmsMonitorListParams
+		{
+		TInt iDuration;
+		TUint16 iMCC;
+		TUint16 iMNC;
+		TUint iServiceId;
+		TMbmsScope iAccessBearer;
+		TMbmsServiceMode iServiceMode;
+		TMbmsAvailabilityStatus iAvailStatus;
+		TBool iIsEntryValid;
+		};
+
+	CArrayFixFlat<TPacketRegStatus>* iPcktRegStatusInfo;	//< List of packet registration changes.
+	TNotificationType iNtwkRegStatusNotificationType;
+	CArrayFixFlat<TNtwkRegStatus>*	 iNtwkRegStatusInfo;	// list of ntwk registration changes.
+	CArrayFixFlat<TPacketReleaseMode>* iPacketReleaseModeArray;
+	CArrayFixFlat<TPacketDynamicCaps>* iDynamicCapsArray; //< List of dynamic capabilities changes
+	CArrayFixFlat<TInt>* iSecondaryContextCountArray;
+	CArrayFixFlat<TMbmsBroadCastParams>* iMbmsBroadcastParamsArray; //List of MBMS Broadcast Service related information
+	CArrayFixFlat<TMbmsMonitorListParams>* iMbmsMonitorListParamsArray; // List of MBMS Broadcast Monitoring list parameters
+	CArrayPtrFlat<CPcktListReadAllAttempt>* iMbmsServicesList; // List containing the MBMS services for 2P retrieval
+
+	TInt iCurrentMbmsParamsIndex;
+	TInt iCurrentMbmsMonitorListIndex;
+	TInt iCurrentPacketReleaseMode;
+	TInt iPacketReleaseModeIndex;
+	TInt iCurrentDynamicCaps;
+	TInt iDynamicCapsIndex;
+	TInt iPcktRegStatIndex;					//< Current index from the iPcktRegStatInfo array
+	TInt iCurrentRegStatus;
+	TInt iNtwkRegStatIndex;					//< Current index from the iNtwkRegStatInfo array
+	TInt iUpdateMbmsServiceError;
+	TBool iPcktTimerBool;
+	
+	TTsyReqHandle iGetMbmsNetworkReqHandle;
+	TTsyReqHandle iEnumerateActiveListReqHandle;
+	TTsyReqHandle iEnumerateMonitorListReqHandle;
+	TTsyReqHandle iUpdateMbmsServiceReqHandle;
+
+	TDefaultGPRSConfigParam iGPRSDefaultConfig;
+	TDefaultR99_R4ConfigParam iR99_R4DefaultConfig;
+	TDefaultR5ConfigParam iR5DefaultConfig;
+
+	TBool iSecondaryContext;
+	TInt PrepareOpenSecondary(const TTsyReqHandle aTsyReqHandle, const TDesC* aOriginalContextName);
+	TInt iCurrentPrimaryContextIndex;
+
+	// this class is to enable a Nif to hold and access its contexts and its primary context's name
+	
+	// The above statement appears to be totally wrong and misleading.
+	// It has nothing to do with NIF's, it is just a way of partitioning PDP. 
+	// The 1st in the context is the primary context, the next contexts are the secondary contexts.
+	class TNifWrapper
+	{
+		private:
+			RPointerArray<CSimPacketContext> iContexts;	// this contains an array of CSimPacketContexts
+			TName iPrimaryContextName;				// the primary context name
+
+		public:
+			CSimPacketContext* GetContext(TInt aIndex)
+			{
+			return iContexts[aIndex];										// returns context at specified context
+			}; // returns the context at the specified index
+			//TArray<CSimPacketContext*> Array(){ return iContexts.Array();};		// returns the array of contexts
+			inline TInt NumberOfContexts() {return iContexts.Count();};			// returns number of contexts
+			inline void AddContext(CSimPacketContext* aContext) {iContexts.Append(aContext);};	// adds a context to the array
+			inline void Close()
+				{
+				// deletes contexts of nif
+				TInt count = iContexts.Count();
+				for(TInt i = 0; i<count; i++)
+					{
+					iContexts[i]->Close();
+					}
+				iContexts.Close();
+				};
+	};
+	
+	class TMbmsNifWrapper
+	{
+		private:
+			RPointerArray<CSimMbmsPacketContext> iContexts;	// this contains an array of CSimMbmsPacketContexts
+			TName iContextName;				// the MBMS packet context name
+
+		public:
+			inline CSimMbmsPacketContext* GetContext(TInt aIndex);
+			inline TInt NumberOfContexts(); 
+			inline void AddContext(CSimMbmsPacketContext* aContext);
+			inline void Close();
+	};
+
+	RArray<TNifWrapper> iNifWrappers;			// array of nifs; each nif holds a primary context and a number of secondary contexts
+	RArray<TMbmsNifWrapper> iMbmsNifWrappers; //array of MBMS nifs; each nif holds a MBMS broadcast contexts;
+											// shall be used for multicast contexts in future.
+	TConfigData iConfigData;
+	TInt iMbmsMonitorListCount;  //count of number of Monitor list
+			
+	CSimIncomingContextManager* iIncomingContextManager;
+		// Holds data to do with the incoming contexts.
+		// Note all messages come through RPacketService via SimPSEvent
+		// This applies to incoming, and network registration.
+	
+public:
+	inline RPacketService::TMSClass MSClass() const {return iMSClass; } //< Returns the Current MSClass object supported
+	};
+
+CSimMbmsPacketContext* CSimPacketService::TMbmsNifWrapper::GetContext(TInt aIndex)
+	{
+	return iContexts[aIndex];					// returns context at specified index
+	}; 
+
+TInt CSimPacketService::TMbmsNifWrapper::NumberOfContexts()
+	{// returns number of contexts
+	return iContexts.Count();
+	}
+
+void CSimPacketService::TMbmsNifWrapper::AddContext(CSimMbmsPacketContext* aContext)
+	{// adds a context to the array
+	iContexts.Append(aContext);
+	}
+
+void CSimPacketService::TMbmsNifWrapper::Close()
+	{
+	// deletes contexts of nif
+	TInt count = iContexts.Count();
+	for(TInt i = 0; i<count; i++)
+		{
+		iContexts[i]->Close();
+		}
+	iContexts.Close();
+	}
+
+#endif  //__CSIMPACKETSERVICE_H__