diff -r 6b1d113cdff3 -r 6638e7f4bd8f telephonyserverplugins/simtsy/inc/CSimPacketContext.h --- a/telephonyserverplugins/simtsy/inc/CSimPacketContext.h Mon May 03 13:37:20 2010 +0300 +++ b/telephonyserverplugins/simtsy/inc/CSimPacketContext.h Thu May 06 15:10:38 2010 +0100 @@ -1,466 +1,466 @@ -// Copyright (c) 2002-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 Context class. -// -// - -/** - @file - @internalAll -*/ - -#ifndef __CSIMPACKETCONTEXT_H__ -#define __CSIMPACKETCONTEXT_H__ - -#include -#include -#include -#include "csimtimer.h" -#include "utils.h" -#include "CSimNtras.h" -#include "CSimPubSubChange.h" -#include "CSimPhone.h" -#include - -const TUint KNotFound=0xfffffff; -const TInt KLimitForErrorCodeForContextGoToInactive=-700; -const TInt KContextGoToInactiveWithNormalErrorCode=-600; -const TInt KContextGoToInactiveWithExtendedErrorCode=-400; -const TInt KContextGoToInactiveWithErrorWhenTryingToGetLastErrorCode = -300; - -enum TContextEvent //< Enum for the state machine - { - EContextEventNone, - EContextEventActivate, - EContextEventDeactivate, - EContextEventDoDeactivate, - EContextEventSuspend, - EContextEventDelete, - EContextEventNtRas, - EContextEventTimeOut - }; - -const RPacketContext::TContextStatus KContextStateTableTerminator=(RPacketContext::TContextStatus)999; - -struct TContextStateChangeValidity - { - RPacketContext::TContextStatus iOldState; - RPacketContext::TContextStatus 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 TContextStateChangeValidity KContextStateChangeValidity[]= { - { RPacketContext::EStatusInactive, RPacketContext::EStatusActivating, KErrNone }, - { RPacketContext::EStatusInactive, RPacketContext::EStatusDeleted, KErrNone }, - - { RPacketContext::EStatusActivating, RPacketContext::EStatusActive, KErrNone }, - { RPacketContext::EStatusActivating, RPacketContext::EStatusInactive, KErrNone }, - { RPacketContext::EStatusActivating, RPacketContext::EStatusDeleted, KErrNone }, - - { RPacketContext::EStatusActive, RPacketContext::EStatusDeactivating, KErrNone }, - { RPacketContext::EStatusActive, RPacketContext::EStatusSuspended, KErrNone }, - { RPacketContext::EStatusActive, RPacketContext::EStatusDeleted, KErrNone }, - - { RPacketContext::EStatusDeactivating, RPacketContext::EStatusInactive, KErrNone }, - { RPacketContext::EStatusDeactivating, RPacketContext::EStatusActive, KErrNone }, - { RPacketContext::EStatusDeactivating, RPacketContext::EStatusDeleted, KErrNone }, - - { RPacketContext::EStatusSuspended, RPacketContext::EStatusDeactivating, KErrNone }, - { RPacketContext::EStatusSuspended, RPacketContext::EStatusActive, KErrNone }, - { RPacketContext::EStatusSuspended, RPacketContext::EStatusDeleted, KErrNone }, - - { RPacketContext::EStatusDeleted, RPacketContext::EStatusInactive, KErrNone }, - - - { KContextStateTableTerminator, KContextStateTableTerminator, KContextStateTableTerminator} - }; - - -struct TProtocolConfigOption // used for authentication parameters - { - TInt iAuthProtocol; - TPtrC8 iUsername; - TPtrC8 iPassword; - TPtrC8 iChallenge; - TPtrC8 iResponse; - TPtrC8 iPrimaryDNS; - TPtrC8 iSecondaryDNS; - TUint iId; - RPacketContext::TMiscProtocolBuffer iMiscBuffer; - }; - -/** -Used for holding valid GPRS/R99/R4/R99/R5 context configuration parameters -*/ -struct TContextConfigParam - { - TInt iProtocolType; - TPtrC8 iGsnAddress; - TPtrC8 iProtocolAddress; - TInt iAnonymousAccess; - TBool iUseEdge; - TProtocolConfigOption iProtocolConfigOption; - TUint iPdpHeaderCompression; - TUint iPdpDataCompression; - }; - -struct TConfigFail // Used for failing SetConfig, DeleteTFT, CreateTFT, AddPacketFilter call - { - TName iContextName; - TInt32 iNumberOfTimes; - TInt32 iFailErrorCode; - }; - -struct TTftConfig - { - TName iContextName; - TInt32 iNumberOfFailures; - TInt32 iFailErrorCode; - TInt32 iDelay; - }; - -struct TRel99ContextConfig // Used holding the Rel99 configuration parameters - { - TName iContextName; - TUint iActivatePause; - TInt iActivateErrorCode; - TUint iDeactivatePause; - TUint iDeactivateErrorCode; - TUint iDeletionPause; - TUint iDeletionErrorCode; - TBool iConnectToNtRas; - }; - -struct TNetworkRegStatus // Used for holding the network registration - { - TInt iDuration; - RPacketService::TRegistrationStatus iRegStatus; - }; - -struct TNotifyContextStatusChange // Used for notifying context status - { - TName iContextName; - TInt iDuration; - RPacketContext::TContextStatus iStatus; - }; - -struct TPacketFilterV3 // Used for holding packet filter configuration - { - TInt iId; //< Packet filter identifier. Value range: 1 - 8 - TInt iEvaluationPrecedenceIndex; //< Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest) - TUint8 iSrcAddr[RPacketContext::KIPAddressSize]; //< Domain Source address - TUint8 iSrcAddrSubnetMask[RPacketContext::KIPAddressSize]; //< Domain Subnet mask - TInt iProtocolNumberOrNextHeader; //< Protocol number (IPv4) or Next Header (IPv6) field of incoming packets. Value range 0 - 255 - TInt iSrcPortMin; //< Minimum source port number of incoming packets. Value range 0 - 65 535 - TInt iSrcPortMax; //< Maximum source port number of incoming packets. Value range 0 - 65 535 - TInt iDestPortMin; //< Lowest destination port number of incoming packets. Value range 0 - 65 535 - TInt iDestPortMax; //< Maximum destination port number of incoming packets. Value range 0 - 65 535 - TUint32 iIPSecSPI; //< Security Parameter Index, 32-bit field. - TUint16 iTOSorTrafficClass; //< Type of Service (IPv4) or Traffic Class (IPv6). 1 octet TOS/Traffic class + 1 octet TOS/Traffic class Mask. - TUint32 iFlowLabel; - TBool iAdded; - RPacketContext::TPacketFilterType iFilterType; - }; - -struct TAuthorizationTokenResponse //< Used for SIMTSY responses for authorization tokens - { - RPacketContext::TAuthorizationToken iAuthorizationToken; - TInt iResponse; - }; - -/** - * This class is used to hold the details of batch read requests between the first and - * second phases of a "two phase read". During the first phase, an instance of this class - * is created containing a unique identifier to the request and the resulting information. - * Once the second phase operation has identified this instance from a list and completed - * the client request, this instance will be deleted. - */ -class CPcktListReadAllAttempt : public CBase - { -public: - static CPcktListReadAllAttempt* NewL(TClientId& aId, TTsyReqHandle aReqHandle); - ~CPcktListReadAllAttempt(); - -protected: - CPcktListReadAllAttempt(TClientId& aId, TTsyReqHandle aReqHandle); - -private: - void ConstructL(); - -public: - CBufBase* iListBuf; // < The result of the read operation. - TClientId iClient; // < A unique identifier of the read request. - TTsyReqHandle iReqHandle; // < The first phase request handle. - }; - - -class CSimPacketService; -class CSimPacketQoS; -class CATDialGPRSData; -class CSimPacketContext : public CSubSessionExtBase, public MTimerCallBack, public MNTRasCallBack, public MPubSubChangeCallback - { -public: - static CSimPacketContext* NewL(CSimPhone* aPhone, CSimPacketService* aPacketService, const TDesC& aContextName); - CSimPacketContext(CSimPhone* aPhone, CSimPacketService* aPacketService, const TName& aContextName); - void ConstructL(); - ~CSimPacketContext(); - - 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); - - TInt AttemptDeactivateImmediately(); - - TInt ChangeState(RPacketContext::TContextStatus aNewState); //< Changes the state of the packetcontext - const CTestConfigSection* CfgFile(); - TInt ReActivate(CSimPacketService* aPacketService, const TName& aContextName); - - void ConstructPacketFiltersL(); - - void PubSubCallback(TInt aId); - -private: - TInt GetProfileName(const TTsyReqHandle aTsyReqHandle, TName* aQoSProfile); - - TInt SetConfig(const TTsyReqHandle aTsyReqHandle,const TDesC8* aConfig); - TInt SetConfigCancel(const TTsyReqHandle aTsyReqHandle); - - TInt GetConfig(const TTsyReqHandle aTsyReqHandle,TDes8* aConfig); - TInt GetConfigCancel(const TTsyReqHandle aTsyReqHandle); - - TInt NotifyConfigChanged(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig); - TInt NotifyConfigChangedCancel(const TTsyReqHandle aTsyReqHandle); - - TInt Activate(const TTsyReqHandle aTsyReqHandle); - TInt ActivateCancel(const TTsyReqHandle aTsyReqHandle); - - TInt Deactivate(const TTsyReqHandle aTsyReqHandle); - TInt DeactivateCancel(const TTsyReqHandle aTsyReqHandle); - - TInt Delete(const TTsyReqHandle aTsyReqHandle); - TInt DeleteCancel(const TTsyReqHandle aTsyReqHandle); - - TInt LoanCommPort(const TTsyReqHandle aTsyReqHandle,RCall::TCommPort* aDataPort); - TInt LoanCommPortCancel(const TTsyReqHandle aTsyReqHandle); - TInt RecoverCommPort(const TTsyReqHandle aTsyReqHandle); - TInt RecoverCommPortCancel(const TTsyReqHandle aTsyReqHandle); - - TInt GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus); - TInt NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus); - TInt NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle); - - TInt GetDataVolumeTransferred(const TTsyReqHandle aTsyReqHandle,RPacketContext::TDataVolume* aVolume); - TInt NotifyDataTransferred(const TTsyReqHandle aTsyReqHandle, RPacketContext::TDataVolume* aVolume, RPacketContext::TNotifyDataTransferredRequest* aData); - TInt NotifyDataTransferredCancel(const TTsyReqHandle aTsyReqHandle); - - TInt GetLastErrorCause(const TTsyReqHandle aTsyReqHandle,TInt* aError); - - IMPORT_C static TInt OpenNewSecondaryContext(CSimPacketService& aPacketService, - const TDesC& anExistingContextName, - TDes& aNewContextName); - - TInt CreateNewTFT(const TTsyReqHandle aTsyReqHandle, const TInt* aSize); - TInt DoCreateNewTFT(); - TInt DeleteTFT(const TTsyReqHandle aTsyReqHandle); - TInt EnumeratePacketFilters(const TTsyReqHandle aTsyReqHandle, TInt& aCount); - TInt GetPacketFilterInfoL(const TTsyReqHandle aTsyReqHandle, TInt aIndex, TDes8* aPacketFilterInfo); - TInt AddPacketFilter(const TTsyReqHandle aTsyReqHandle, const TDesC8* aPacketFilterInfo); - TInt RemovePacketFilter(const TTsyReqHandle aTsyReqHandle, TInt aId); - TInt ModifyActiveContext(const TTsyReqHandle aTsyReqHandle); - TInt InitialiseContext(const TTsyReqHandle aTsyReqHandle, TDes8* aDataChannelV2Pckg); // This method supersedes the LoanCommPort() and RecoverCommPort() methods. - TInt DoInitialiseContext(); - TInt GetDnsInfo(const TTsyReqHandle aTsyReqHandle, const TDesC8* aDnsInfo); // retrieves primary and secondary DNS server names - TInt GetAddMediaAuthorization(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer); - TInt GetRemoveMediaAuthorization(const TTsyReqHandle aTsyReqHandle, RPacketContext::TAuthorizationToken* aAuthorizationToken); - TInt GetAddMediaAuthorizationCancel(const TTsyReqHandle aTsyReqHandle); - TInt GetRemoveMediaAuthorizationCancel(const TTsyReqHandle aTsyReqHandle); - - TInt CreateNewTFTCancel(const TTsyReqHandle aTsyReqHandle); - TInt DeleteTFTCancel(const TTsyReqHandle aTsyReqHandle); - TInt EnumeratePacketFiltersCancel(const TTsyReqHandle aTsyReqHandle); - TInt GetPacketFilterInfoCancel(const TTsyReqHandle aTsyReqHandle); - TInt AddPacketFilterCancel(const TTsyReqHandle aTsyReqHandle); - TInt RemovePacketFilterCancel(const TTsyReqHandle aTsyReqHandle); - TInt ModifyActiveContextCancel(const TTsyReqHandle aTsyReqHandle); - TInt InitialiseContextCancel(const TTsyReqHandle aTsyReqHandle); // This method supersedes the LoanCommPort() and RecoverCommPort() methods. - TInt GetDnsInfoCancel(const TTsyReqHandle aTsyReqHandle); - - void TimerCallBackNotifyContextStatusChange(); - - void CompleteContextStatusChange(RPacketContext::TContextStatus& aStatus); - CSimPubSubChange *iContextStatusChange; - -private: - - CSimPhone* iPhone; - - TBool iDeleted; //< Used to indicate whether this context is deleted or not - TBool iIsActive; //< Used to indicate whether this context is active as only one - //< context can be active at any one time. - - CSimPacketService* iPacketService; //< Pointer to the parent class - CSimPacketQoS* iPacketqos; //< Pointer to the qos associated with this context - CSimNtRas* iNtRas; //< pointer to the NtRas class that uses ntras to connect to network - TName iContextName; //< Current Packet context name - TName iQoSName; - CSimTimer* iTimer; //< pointer to the timer object - CSimTimer* iNotifyContextStatusChangeTimer; - CSimTimer* iNotifyContextConfigChangeTimer; - CSimTimer* iSetConfigTimer; - CSimTimer* iInitContextTimer; - CSimTimer* iCreateTftTimer; - - TNotifyData iNotifyStatusChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) - CArrayFixFlat* iContextConfigParams; //< Pointer to a list of valid Context (GPRS/R99/R5) config parameters - - CArrayFixFlat* iContextConfigsRel99; - TBool iTFTCreated; - TInt iNumTFTsCreated; - TInt iNumFiltersAdded; - CArrayFixFlat* iPacketFilterInfoArray; - TInt GetContextStatusChangeCount(); - TNotifyContextStatusChange& GetContextStatusChangeAt(TInt aIndex); - CArrayFixFlat* iNotifyContextStatusChangeArray; - CArrayFixFlat* iAuthorizationTokenResponse; //< Holds tokens and desired responses for SIMTSY to report - CArrayFixFlat* iMediaAuthorization; //< Contains authorization token and flow Ids for verification - - TInt iContextConfigParamsIndex; //< index in iContextConfigParams - - - TNotifyData iNotifyConfigGPRS; //< Holds the GPRS context config change notification data (a flag, TsyReqHandle and any raw data) - TNotifyData iNotifyConfigR99; //< Holds the R99 context config changenotification data (a flag, TsyReqHandle and any raw data) - TNotifyData iNotifyConfigR5; //< Holds the R5 context config changenotification data (a flag, TsyReqHandle and any raw data) - - TTsyReqHandle iActivateRequestHandle; //< Request handle used for activating a context - TTsyReqHandle iDeactivateRequestHandle; //< Request handle used for deactivating a context - TTsyReqHandle iDeleteRequestHandle; //< Request handle used to complete a delete request - TBool iCommPortLoaned; //< A flag indicating whether the CommPort is loaned. - TContextEvent iCurrentEvent; //< holds the current event taking place. - - TInt iActivatePause; //< duration spent in activating the context - TInt iActivateFail; //< Fail the activate request with this error - TInt iDeactivatePause; //< duration spent in deactivating the context - TInt iDeactivateFail; //< Fail the deactivate request with this error - TInt iDeletePause; //< duration spent in deleting the context - TInt iDeleteFail; //< Fail the delete request with this error - - TInt iQoSObjectCount; //< used to append a number to the QoS object created - - TConfigFail iSetConfigFail; - TConfigFail iDeleteTftFail; - TTftConfig iCreateTftConfig; - TConfigFail iAddPacketFilter; - - TInt iSetConfigDelay; - - class TNotifyContextConfigChangeData - { - public: - TInt iDelay; - TInt iNewContextConfigIndex; - }; - CArrayFixFlat *iNotifyContextConfigChangeArray; - - class TSetConfigData - { - public: - static TInt Find(CArrayFixFlat* aSetConfigArray, TTsyReqHandle aTsyReqHandle, TInt& aIndex); - TTsyReqHandle iTsyReqHandle; - TDesC8* iData; - }; - CArrayFixFlat *iSetConfigData; - - class TCreateTftData - { - public: - TTsyReqHandle iTsyReqHandle; - TInt iSize; - }; - TCreateTftData iCreateTftData; - - TInt iSetConfigCallCount; - TInt iContextType; - TBool iTFTChangeBool; - TBool iCommReset; - TInt iNotifyContextStatusChangeIndex; - RPacketContext::TContextStatus iCurrentNotifyContextStatusChange; - TNotificationType iNotifyContextStatusChangeType; - -private: - virtual void NTRasCallBack(TInt aStatus); - TInt ActionEvent(TContextEvent aEvent,TInt aStatus); - RPacketService::TStatus ConvertToPacketServiceStatus(RPacketContext::TContextStatus aNewState); - - TInt DoActivate(); //< this is where we try to connect to a network using ntras - TInt DoDeactivate(); //< deactivates the context by clossing the comm port - TInt DoDelete(); //< deletes the context - - void GetCommSetupSettingsL(); - void GetContextConfigParamSettingsL(TPtrC8 aTag); - void GetActivateSettings(); - void GetSetConfigSettings(); - void GetPacketFilterSettings(); - void GetContextConfigRel99SettingsL(); - void GetContextStatusChangeSettingsL(); - void GetContextConfigChangeSettingsL(); - -public: - TName ContextName() const; - inline TInt ContextType() const {return iContextType; } - inline RPacketContext::TContextStatus ContextStatus() const {return iState; } - -protected: - - RPacketContext::TContextStatus iState; //< Holds the current state of the packet context - - class TCommSetupItem - { - public: - TFileName iCsyName; //< The CSY name used for comm communication - TCommConfigV01 iConfig; //< The configuration to be used with the NTRas port. - TName iPortName; //< The port to be used for read / write data read from the config file. - TName iContextName; - TBool iCommReset; - TInt iNumInitializeFailures; - TInt iErrorCode; - TInt iDelay; - }; - - class TInitContextData - { - public: - TTsyReqHandle iTsyReqHandle; - TDesC8* iChannel; - }; - TInitContextData iInitContextData; - - CArrayFixFlat* iCommSetupArray; - virtual void TimerCallBack(TInt aId); - TCommSetupItem FindCommSettings(); - -private: - TInt iLastError; - TInt iErrorCodeForGetLastErrorCause; - }; - -#endif +// Copyright (c) 2002-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 Context class. +// +// + +/** + @file + @internalAll +*/ + +#ifndef __CSIMPACKETCONTEXT_H__ +#define __CSIMPACKETCONTEXT_H__ + +#include +#include +#include +#include "csimtimer.h" +#include "utils.h" +#include "CSimNtras.h" +#include "CSimPubSubChange.h" +#include "CSimPhone.h" +#include + +const TUint KNotFound=0xfffffff; +const TInt KLimitForErrorCodeForContextGoToInactive=-700; +const TInt KContextGoToInactiveWithNormalErrorCode=-600; +const TInt KContextGoToInactiveWithExtendedErrorCode=-400; +const TInt KContextGoToInactiveWithErrorWhenTryingToGetLastErrorCode = -300; + +enum TContextEvent //< Enum for the state machine + { + EContextEventNone, + EContextEventActivate, + EContextEventDeactivate, + EContextEventDoDeactivate, + EContextEventSuspend, + EContextEventDelete, + EContextEventNtRas, + EContextEventTimeOut + }; + +const RPacketContext::TContextStatus KContextStateTableTerminator=(RPacketContext::TContextStatus)999; + +struct TContextStateChangeValidity + { + RPacketContext::TContextStatus iOldState; + RPacketContext::TContextStatus 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 TContextStateChangeValidity KContextStateChangeValidity[]= { + { RPacketContext::EStatusInactive, RPacketContext::EStatusActivating, KErrNone }, + { RPacketContext::EStatusInactive, RPacketContext::EStatusDeleted, KErrNone }, + + { RPacketContext::EStatusActivating, RPacketContext::EStatusActive, KErrNone }, + { RPacketContext::EStatusActivating, RPacketContext::EStatusInactive, KErrNone }, + { RPacketContext::EStatusActivating, RPacketContext::EStatusDeleted, KErrNone }, + + { RPacketContext::EStatusActive, RPacketContext::EStatusDeactivating, KErrNone }, + { RPacketContext::EStatusActive, RPacketContext::EStatusSuspended, KErrNone }, + { RPacketContext::EStatusActive, RPacketContext::EStatusDeleted, KErrNone }, + + { RPacketContext::EStatusDeactivating, RPacketContext::EStatusInactive, KErrNone }, + { RPacketContext::EStatusDeactivating, RPacketContext::EStatusActive, KErrNone }, + { RPacketContext::EStatusDeactivating, RPacketContext::EStatusDeleted, KErrNone }, + + { RPacketContext::EStatusSuspended, RPacketContext::EStatusDeactivating, KErrNone }, + { RPacketContext::EStatusSuspended, RPacketContext::EStatusActive, KErrNone }, + { RPacketContext::EStatusSuspended, RPacketContext::EStatusDeleted, KErrNone }, + + { RPacketContext::EStatusDeleted, RPacketContext::EStatusInactive, KErrNone }, + + + { KContextStateTableTerminator, KContextStateTableTerminator, KContextStateTableTerminator} + }; + + +struct TProtocolConfigOption // used for authentication parameters + { + TInt iAuthProtocol; + TPtrC8 iUsername; + TPtrC8 iPassword; + TPtrC8 iChallenge; + TPtrC8 iResponse; + TPtrC8 iPrimaryDNS; + TPtrC8 iSecondaryDNS; + TUint iId; + RPacketContext::TMiscProtocolBuffer iMiscBuffer; + }; + +/** +Used for holding valid GPRS/R99/R4/R99/R5 context configuration parameters +*/ +struct TContextConfigParam + { + TInt iProtocolType; + TPtrC8 iGsnAddress; + TPtrC8 iProtocolAddress; + TInt iAnonymousAccess; + TBool iUseEdge; + TProtocolConfigOption iProtocolConfigOption; + TUint iPdpHeaderCompression; + TUint iPdpDataCompression; + }; + +struct TConfigFail // Used for failing SetConfig, DeleteTFT, CreateTFT, AddPacketFilter call + { + TName iContextName; + TInt32 iNumberOfTimes; + TInt32 iFailErrorCode; + }; + +struct TTftConfig + { + TName iContextName; + TInt32 iNumberOfFailures; + TInt32 iFailErrorCode; + TInt32 iDelay; + }; + +struct TRel99ContextConfig // Used holding the Rel99 configuration parameters + { + TName iContextName; + TUint iActivatePause; + TInt iActivateErrorCode; + TUint iDeactivatePause; + TUint iDeactivateErrorCode; + TUint iDeletionPause; + TUint iDeletionErrorCode; + TBool iConnectToNtRas; + }; + +struct TNetworkRegStatus // Used for holding the network registration + { + TInt iDuration; + RPacketService::TRegistrationStatus iRegStatus; + }; + +struct TNotifyContextStatusChange // Used for notifying context status + { + TName iContextName; + TInt iDuration; + RPacketContext::TContextStatus iStatus; + }; + +struct TPacketFilterV3 // Used for holding packet filter configuration + { + TInt iId; //< Packet filter identifier. Value range: 1 - 8 + TInt iEvaluationPrecedenceIndex; //< Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest) + TUint8 iSrcAddr[RPacketContext::KIPAddressSize]; //< Domain Source address + TUint8 iSrcAddrSubnetMask[RPacketContext::KIPAddressSize]; //< Domain Subnet mask + TInt iProtocolNumberOrNextHeader; //< Protocol number (IPv4) or Next Header (IPv6) field of incoming packets. Value range 0 - 255 + TInt iSrcPortMin; //< Minimum source port number of incoming packets. Value range 0 - 65 535 + TInt iSrcPortMax; //< Maximum source port number of incoming packets. Value range 0 - 65 535 + TInt iDestPortMin; //< Lowest destination port number of incoming packets. Value range 0 - 65 535 + TInt iDestPortMax; //< Maximum destination port number of incoming packets. Value range 0 - 65 535 + TUint32 iIPSecSPI; //< Security Parameter Index, 32-bit field. + TUint16 iTOSorTrafficClass; //< Type of Service (IPv4) or Traffic Class (IPv6). 1 octet TOS/Traffic class + 1 octet TOS/Traffic class Mask. + TUint32 iFlowLabel; + TBool iAdded; + RPacketContext::TPacketFilterType iFilterType; + }; + +struct TAuthorizationTokenResponse //< Used for SIMTSY responses for authorization tokens + { + RPacketContext::TAuthorizationToken iAuthorizationToken; + TInt iResponse; + }; + +/** + * This class is used to hold the details of batch read requests between the first and + * second phases of a "two phase read". During the first phase, an instance of this class + * is created containing a unique identifier to the request and the resulting information. + * Once the second phase operation has identified this instance from a list and completed + * the client request, this instance will be deleted. + */ +class CPcktListReadAllAttempt : public CBase + { +public: + static CPcktListReadAllAttempt* NewL(TClientId& aId, TTsyReqHandle aReqHandle); + ~CPcktListReadAllAttempt(); + +protected: + CPcktListReadAllAttempt(TClientId& aId, TTsyReqHandle aReqHandle); + +private: + void ConstructL(); + +public: + CBufBase* iListBuf; // < The result of the read operation. + TClientId iClient; // < A unique identifier of the read request. + TTsyReqHandle iReqHandle; // < The first phase request handle. + }; + + +class CSimPacketService; +class CSimPacketQoS; +class CATDialGPRSData; +class CSimPacketContext : public CSubSessionExtBase, public MTimerCallBack, public MNTRasCallBack, public MPubSubChangeCallback + { +public: + static CSimPacketContext* NewL(CSimPhone* aPhone, CSimPacketService* aPacketService, const TDesC& aContextName); + CSimPacketContext(CSimPhone* aPhone, CSimPacketService* aPacketService, const TName& aContextName); + void ConstructL(); + ~CSimPacketContext(); + + 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); + + TInt AttemptDeactivateImmediately(); + + TInt ChangeState(RPacketContext::TContextStatus aNewState); //< Changes the state of the packetcontext + const CTestConfigSection* CfgFile(); + TInt ReActivate(CSimPacketService* aPacketService, const TName& aContextName); + + void ConstructPacketFiltersL(); + + void PubSubCallback(TInt aId); + +private: + TInt GetProfileName(const TTsyReqHandle aTsyReqHandle, TName* aQoSProfile); + + TInt SetConfig(const TTsyReqHandle aTsyReqHandle,const TDesC8* aConfig); + TInt SetConfigCancel(const TTsyReqHandle aTsyReqHandle); + + TInt GetConfig(const TTsyReqHandle aTsyReqHandle,TDes8* aConfig); + TInt GetConfigCancel(const TTsyReqHandle aTsyReqHandle); + + TInt NotifyConfigChanged(const TTsyReqHandle aTsyReqHandle, TDes8* aConfig); + TInt NotifyConfigChangedCancel(const TTsyReqHandle aTsyReqHandle); + + TInt Activate(const TTsyReqHandle aTsyReqHandle); + TInt ActivateCancel(const TTsyReqHandle aTsyReqHandle); + + TInt Deactivate(const TTsyReqHandle aTsyReqHandle); + TInt DeactivateCancel(const TTsyReqHandle aTsyReqHandle); + + TInt Delete(const TTsyReqHandle aTsyReqHandle); + TInt DeleteCancel(const TTsyReqHandle aTsyReqHandle); + + TInt LoanCommPort(const TTsyReqHandle aTsyReqHandle,RCall::TCommPort* aDataPort); + TInt LoanCommPortCancel(const TTsyReqHandle aTsyReqHandle); + TInt RecoverCommPort(const TTsyReqHandle aTsyReqHandle); + TInt RecoverCommPortCancel(const TTsyReqHandle aTsyReqHandle); + + TInt GetStatus(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus); + TInt NotifyStatusChange(const TTsyReqHandle aTsyReqHandle,RPacketContext::TContextStatus* aContextStatus); + TInt NotifyStatusChangeCancel(const TTsyReqHandle aTsyReqHandle); + + TInt GetDataVolumeTransferred(const TTsyReqHandle aTsyReqHandle,RPacketContext::TDataVolume* aVolume); + TInt NotifyDataTransferred(const TTsyReqHandle aTsyReqHandle, RPacketContext::TDataVolume* aVolume, RPacketContext::TNotifyDataTransferredRequest* aData); + TInt NotifyDataTransferredCancel(const TTsyReqHandle aTsyReqHandle); + + TInt GetLastErrorCause(const TTsyReqHandle aTsyReqHandle,TInt* aError); + + IMPORT_C static TInt OpenNewSecondaryContext(CSimPacketService& aPacketService, + const TDesC& anExistingContextName, + TDes& aNewContextName); + + TInt CreateNewTFT(const TTsyReqHandle aTsyReqHandle, const TInt* aSize); + TInt DoCreateNewTFT(); + TInt DeleteTFT(const TTsyReqHandle aTsyReqHandle); + TInt EnumeratePacketFilters(const TTsyReqHandle aTsyReqHandle, TInt& aCount); + TInt GetPacketFilterInfoL(const TTsyReqHandle aTsyReqHandle, TInt aIndex, TDes8* aPacketFilterInfo); + TInt AddPacketFilter(const TTsyReqHandle aTsyReqHandle, const TDesC8* aPacketFilterInfo); + TInt RemovePacketFilter(const TTsyReqHandle aTsyReqHandle, TInt aId); + TInt ModifyActiveContext(const TTsyReqHandle aTsyReqHandle); + TInt InitialiseContext(const TTsyReqHandle aTsyReqHandle, TDes8* aDataChannelV2Pckg); // This method supersedes the LoanCommPort() and RecoverCommPort() methods. + TInt DoInitialiseContext(); + TInt GetDnsInfo(const TTsyReqHandle aTsyReqHandle, const TDesC8* aDnsInfo); // retrieves primary and secondary DNS server names + TInt GetAddMediaAuthorization(const TTsyReqHandle aTsyReqHandle, TDes8* aBuffer); + TInt GetRemoveMediaAuthorization(const TTsyReqHandle aTsyReqHandle, RPacketContext::TAuthorizationToken* aAuthorizationToken); + TInt GetAddMediaAuthorizationCancel(const TTsyReqHandle aTsyReqHandle); + TInt GetRemoveMediaAuthorizationCancel(const TTsyReqHandle aTsyReqHandle); + + TInt CreateNewTFTCancel(const TTsyReqHandle aTsyReqHandle); + TInt DeleteTFTCancel(const TTsyReqHandle aTsyReqHandle); + TInt EnumeratePacketFiltersCancel(const TTsyReqHandle aTsyReqHandle); + TInt GetPacketFilterInfoCancel(const TTsyReqHandle aTsyReqHandle); + TInt AddPacketFilterCancel(const TTsyReqHandle aTsyReqHandle); + TInt RemovePacketFilterCancel(const TTsyReqHandle aTsyReqHandle); + TInt ModifyActiveContextCancel(const TTsyReqHandle aTsyReqHandle); + TInt InitialiseContextCancel(const TTsyReqHandle aTsyReqHandle); // This method supersedes the LoanCommPort() and RecoverCommPort() methods. + TInt GetDnsInfoCancel(const TTsyReqHandle aTsyReqHandle); + + void TimerCallBackNotifyContextStatusChange(); + + void CompleteContextStatusChange(RPacketContext::TContextStatus& aStatus); + CSimPubSubChange *iContextStatusChange; + +private: + + CSimPhone* iPhone; + + TBool iDeleted; //< Used to indicate whether this context is deleted or not + TBool iIsActive; //< Used to indicate whether this context is active as only one + //< context can be active at any one time. + + CSimPacketService* iPacketService; //< Pointer to the parent class + CSimPacketQoS* iPacketqos; //< Pointer to the qos associated with this context + CSimNtRas* iNtRas; //< pointer to the NtRas class that uses ntras to connect to network + TName iContextName; //< Current Packet context name + TName iQoSName; + CSimTimer* iTimer; //< pointer to the timer object + CSimTimer* iNotifyContextStatusChangeTimer; + CSimTimer* iNotifyContextConfigChangeTimer; + CSimTimer* iSetConfigTimer; + CSimTimer* iInitContextTimer; + CSimTimer* iCreateTftTimer; + + TNotifyData iNotifyStatusChange; //< Holds the notification data (a flag, TsyReqHandle and any raw data) + CArrayFixFlat* iContextConfigParams; //< Pointer to a list of valid Context (GPRS/R99/R5) config parameters + + CArrayFixFlat* iContextConfigsRel99; + TBool iTFTCreated; + TInt iNumTFTsCreated; + TInt iNumFiltersAdded; + CArrayFixFlat* iPacketFilterInfoArray; + TInt GetContextStatusChangeCount(); + TNotifyContextStatusChange& GetContextStatusChangeAt(TInt aIndex); + CArrayFixFlat* iNotifyContextStatusChangeArray; + CArrayFixFlat* iAuthorizationTokenResponse; //< Holds tokens and desired responses for SIMTSY to report + CArrayFixFlat* iMediaAuthorization; //< Contains authorization token and flow Ids for verification + + TInt iContextConfigParamsIndex; //< index in iContextConfigParams + + + TNotifyData iNotifyConfigGPRS; //< Holds the GPRS context config change notification data (a flag, TsyReqHandle and any raw data) + TNotifyData iNotifyConfigR99; //< Holds the R99 context config changenotification data (a flag, TsyReqHandle and any raw data) + TNotifyData iNotifyConfigR5; //< Holds the R5 context config changenotification data (a flag, TsyReqHandle and any raw data) + + TTsyReqHandle iActivateRequestHandle; //< Request handle used for activating a context + TTsyReqHandle iDeactivateRequestHandle; //< Request handle used for deactivating a context + TTsyReqHandle iDeleteRequestHandle; //< Request handle used to complete a delete request + TBool iCommPortLoaned; //< A flag indicating whether the CommPort is loaned. + TContextEvent iCurrentEvent; //< holds the current event taking place. + + TInt iActivatePause; //< duration spent in activating the context + TInt iActivateFail; //< Fail the activate request with this error + TInt iDeactivatePause; //< duration spent in deactivating the context + TInt iDeactivateFail; //< Fail the deactivate request with this error + TInt iDeletePause; //< duration spent in deleting the context + TInt iDeleteFail; //< Fail the delete request with this error + + TInt iQoSObjectCount; //< used to append a number to the QoS object created + + TConfigFail iSetConfigFail; + TConfigFail iDeleteTftFail; + TTftConfig iCreateTftConfig; + TConfigFail iAddPacketFilter; + + TInt iSetConfigDelay; + + class TNotifyContextConfigChangeData + { + public: + TInt iDelay; + TInt iNewContextConfigIndex; + }; + CArrayFixFlat *iNotifyContextConfigChangeArray; + + class TSetConfigData + { + public: + static TInt Find(CArrayFixFlat* aSetConfigArray, TTsyReqHandle aTsyReqHandle, TInt& aIndex); + TTsyReqHandle iTsyReqHandle; + TDesC8* iData; + }; + CArrayFixFlat *iSetConfigData; + + class TCreateTftData + { + public: + TTsyReqHandle iTsyReqHandle; + TInt iSize; + }; + TCreateTftData iCreateTftData; + + TInt iSetConfigCallCount; + TInt iContextType; + TBool iTFTChangeBool; + TBool iCommReset; + TInt iNotifyContextStatusChangeIndex; + RPacketContext::TContextStatus iCurrentNotifyContextStatusChange; + TNotificationType iNotifyContextStatusChangeType; + +private: + virtual void NTRasCallBack(TInt aStatus); + TInt ActionEvent(TContextEvent aEvent,TInt aStatus); + RPacketService::TStatus ConvertToPacketServiceStatus(RPacketContext::TContextStatus aNewState); + + TInt DoActivate(); //< this is where we try to connect to a network using ntras + TInt DoDeactivate(); //< deactivates the context by clossing the comm port + TInt DoDelete(); //< deletes the context + + void GetCommSetupSettingsL(); + void GetContextConfigParamSettingsL(TPtrC8 aTag); + void GetActivateSettings(); + void GetSetConfigSettings(); + void GetPacketFilterSettings(); + void GetContextConfigRel99SettingsL(); + void GetContextStatusChangeSettingsL(); + void GetContextConfigChangeSettingsL(); + +public: + TName ContextName() const; + inline TInt ContextType() const {return iContextType; } + inline RPacketContext::TContextStatus ContextStatus() const {return iState; } + +protected: + + RPacketContext::TContextStatus iState; //< Holds the current state of the packet context + + class TCommSetupItem + { + public: + TFileName iCsyName; //< The CSY name used for comm communication + TCommConfigV01 iConfig; //< The configuration to be used with the NTRas port. + TName iPortName; //< The port to be used for read / write data read from the config file. + TName iContextName; + TBool iCommReset; + TInt iNumInitializeFailures; + TInt iErrorCode; + TInt iDelay; + }; + + class TInitContextData + { + public: + TTsyReqHandle iTsyReqHandle; + TDesC8* iChannel; + }; + TInitContextData iInitContextData; + + CArrayFixFlat* iCommSetupArray; + virtual void TimerCallBack(TInt aId); + TCommSetupItem FindCommSettings(); + +private: + TInt iLastError; + TInt iErrorCodeForGetLastErrorCause; + }; + +#endif