diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/simtsy/inc/CSimPacketService.h --- 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 -#include -#include -#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* 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; //* iPcktRegStatusInfo; //< List of packet registration changes. - TNotificationType iNtwkRegStatusNotificationType; - CArrayFixFlat* iNtwkRegStatusInfo; // list of ntwk registration changes. - CArrayFixFlat* iPacketReleaseModeArray; - CArrayFixFlat* iDynamicCapsArray; //< List of dynamic capabilities changes - CArrayFixFlat* iSecondaryContextCountArray; - CArrayFixFlat* iMbmsBroadcastParamsArray; //List of MBMS Broadcast Service related information - CArrayFixFlat* iMbmsMonitorListParamsArray; // List of MBMS Broadcast Monitoring list parameters - CArrayPtrFlat* 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 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 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; iClose(); - } - iContexts.Close(); - }; - }; - - class TMbmsNifWrapper - { - private: - RPointerArray 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 iNifWrappers; // array of nifs; each nif holds a primary context and a number of secondary contexts - RArray 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; iClose(); - } - 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 +#include +#include +#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* 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; //* iPcktRegStatusInfo; //< List of packet registration changes. + TNotificationType iNtwkRegStatusNotificationType; + CArrayFixFlat* iNtwkRegStatusInfo; // list of ntwk registration changes. + CArrayFixFlat* iPacketReleaseModeArray; + CArrayFixFlat* iDynamicCapsArray; //< List of dynamic capabilities changes + CArrayFixFlat* iSecondaryContextCountArray; + CArrayFixFlat* iMbmsBroadcastParamsArray; //List of MBMS Broadcast Service related information + CArrayFixFlat* iMbmsMonitorListParamsArray; // List of MBMS Broadcast Monitoring list parameters + CArrayPtrFlat* 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 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 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; iClose(); + } + iContexts.Close(); + }; + }; + + class TMbmsNifWrapper + { + private: + RPointerArray 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 iNifWrappers; // array of nifs; each nif holds a primary context and a number of secondary contexts + RArray 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; iClose(); + } + iContexts.Close(); + } + +#endif //__CSIMPACKETSERVICE_H__