--- /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__