telephonyserverplugins/simtsy/inc/CSimPacketService.h
changeset 0 3553901f7fa8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/telephonyserverplugins/simtsy/inc/CSimPacketService.h	Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +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__