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