diff -r 000000000000 -r 3553901f7fa8 telephonyserver/etelpacketdata/inc/etelpckt.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyserver/etelpacketdata/inc/etelpckt.h Tue Feb 02 01:41:59 2010 +0200 @@ -0,0 +1,1949 @@ +// 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: +// ETel Multimode Packet Data API +// MBMS Broadcast,GPRS Release 97/98, CDMAOne, CDMA2000, Release 99 and Release 4. +// Copyright (c) Symbian Software Ltd. 2001-2009. All rights reserved. +// +// + +#if !defined(__ETELPCKT_H__) +#define __ETELPCKT_H__ + +#include +#include +#include +#include +#include +#include +#include + +// +// Global constants and types +// + +// General +// Passed into RTelServer::IsSupportedByModule() +/** +Unique Packet Data API Identifier for Packet API version 1.0. + +@publishedPartner +@released +*/ +const TInt KETelExtPcktV1 = 4000; +/** +Unique Packet Data API Identifier for Packet API version 2.0. + +@publishedPartner +@released +*/ + +const TInt KETelExtPcktV2 = 8000; + + +/** +Unique Packet Data API Identifier for Packet API version 3.0. +aka 3GPP Release 5 support + +@publishedPartner +@released +*/ +const TInt KETelExtPcktV3 = 12000; + + +// GPRS-specific causes for Session Management (Annex I, 3GPP TS 24.008) +/** This cause is sent to the MS if it requests an IMSI attachment for GPRS services, +but is not allowed to operate GPRS services. + +@publishedPartner +@released +*/ +const TInt KErrGprsServicesNotAllowed=KErrGsmMobilityManagementBase-7; +/** This cause is sent to the MS if it requests a combined IMSI attach for GPRS +and non-GPRS services, but is not allowed to operate either of them. + +@publishedPartner +@released +*/ +const TInt KErrGprsAndNonGprsServicesNotAllowed=KErrGsmMobilityManagementBase-8; +/** This cause is sent to the MS when the network cannot derive the MS's identity +from the P-TMSI in case of an inter-SGSN routing area update. + +@publishedPartner +@released +*/ +const TInt KErrGprsMSIdentityCannotBeDerivedByTheNetwork=KErrGsmMobilityManagementBase-9; +/** This cause is sent to the MS either if the network has implicitly detached +the MS, e.g. some while after the Mobile reachable timer has expired, or if +the GMM context data relating to the subscription does not exist in the SGSN, +e.g. because of a SGSN restart. + +@publishedPartner +@released +*/ +const TInt KErrGprsMSImplicitlyDetached=KErrGsmMobilityManagementBase-10; +/** This cause is sent to the MS if it requests a combined GPRS attachment or routing +is updating in a PLMN where the MSC is temporarily not reachable via the GPRS +part of the GSM network. + +@publishedPartner +@released +*/ +const TInt KErrGprsMSCTemporarilyNotReachable=KErrGsmMobilityManagementBase-16; +/** The PDP context is deactivated because of a LLC or SNDCP failure. + +@publishedPartner +@released +*/ +const TInt KErrGprsLlcOrSndcpFailure=KErrGsmMobilityManagementBase-25; +/** Insufficient GPRS resources are available for the request to complete successfully. + +@publishedPartner +@released +*/ +const TInt KErrGprsInsufficientResources=KErrGsmMobilityManagementBase-26; +/** Access Point Name is either missing from the Activation request or is unknown. + +@publishedPartner +@released +*/ +const TInt KErrGprsMissingorUnknownAPN=KErrGsmMobilityManagementBase-27; +/** The PDP address supplied with the Activation request is unknown. + +@publishedPartner +@released +*/ +const TInt KErrGprsUnknownPDPAddress=KErrGsmMobilityManagementBase-28; +/** User authentication has failed. + +@publishedPartner +@released +*/ +const TInt KErrGprsUserAuthenticationFailure=KErrGsmMobilityManagementBase-29; +/** The GGSN has rejected the activation request for some reason. + +@publishedPartner +@released +*/ +const TInt KErrGprsActivationRejectedByGGSN=KErrGsmMobilityManagementBase-30; +/** The activation request has been rejected for an unspecified reason. + +@publishedPartner +@released +*/ +const TInt KErrGprsActivationRejected=KErrGsmMobilityManagementBase-31; +/** The requested service is not supported by the PLMN. + +@publishedPartner +@released +*/ +const TInt KErrGprsServiceOptionNotSupported=KErrGsmMobilityManagementBase-32; +/** There is no active subscription to the requested service. + +@publishedPartner +@released +*/ +const TInt KErrGprsRequestedServiceOptionNotSubscribed=KErrGsmMobilityManagementBase-33; +/** The service is temporarily out of order. + +@publishedPartner +@released +*/ +const TInt KErrGprsServiceOptionTemporarilyOutOfOrder=KErrGsmMobilityManagementBase-34; +/** The NSAPI supplied with the activation request is not unique. + +@publishedPartner +@released +*/ +const TInt KErrGprsNSAPIAlreadyUsed=KErrGsmMobilityManagementBase-35; +/** The context has been deactivated successfully. + +@publishedPartner +@released +*/ +const TInt KErrGprsRegularContextDeactivation=KErrGsmMobilityManagementBase-36; +/** The Quality of Service requested has not been accepted. + +@publishedPartner +@released +*/ +const TInt KErrGprsQoSNotAccepted=KErrGsmMobilityManagementBase-37; +/** The GPRS network is requesting reactivation of a context. + +@publishedPartner +@released +*/ +const TInt KErrGprsReactivationRequested=KErrGsmMobilityManagementBase-39; +/** The feature is not supported. + +@publishedPartner +@released +*/ +const TInt KErrGprsFeatureNotSupported=KErrGsmMobilityManagementBase-40; +/** There is a semantic error in the TFT operation. + +@publishedPartner +@released +*/ +const TInt KErrGprsSemanticErrorInTFTOperation=KErrGsmMobilityManagementBase-41; +/** There is a syntactical error in the TFT operation. + +@publishedPartner +@released +*/ +const TInt KErrGprsSyntacticalErrorInTFTOperation=KErrGsmMobilityManagementBase-42; +/** The PDP context activation request is not active. + +@publishedPartner +@released +*/ +const TInt KErrGprsUnknownPDPContext=KErrGsmMobilityManagementBase-43; +/** There is one or more semantic errors in packet filter(s) of the TFT. + +@publishedPartner +@released +*/ +const TInt KErrGprsSemanticErrorsInPacketFilters=KErrGsmMobilityManagementBase-44; +/** There is one or more syntactical errors in packet filter(s) of the TFT. + +@publishedPartner +@released +*/ +const TInt KErrGprsSyntacticalErrorInPacketFilters=KErrGsmMobilityManagementBase-45; +/** The GPRS network has already activated a PDP context without TFT. + +@publishedPartner +@released +*/ +const TInt KErrGprsPDPContextWithoutTFTAlreadyActivated=KErrGsmMobilityManagementBase-46; + +// UMTS-specific cause values for Call control (Annex H, 3GPP TS 24.008) +/** QoS not available. + +@publishedPartner +@released +*/ +const TInt KErrUmtsQoSNotAvailable=KErrGsmMobilityManagementBase-49; + +/** Maximum number of PDP contexts supported by phone exceeded. + +@publishedPartner +@released +*/ +const TInt KErrUmtsMaxNumOfContextExceededByPhone=KErrGsmMobilityManagementBase-50; +/** Maximum number of PDP contexts supported by the network exceeded. + +@publishedPartner +@released +*/ +const TInt KErrUmtsMaxNumOfContextExceededByNetwork=KErrGsmMobilityManagementBase-51; +/** Phone is in offline mode. + +@publishedPartner +@released +*/ +const TInt KErrGprsOfflineMode=KErrGsmMobilityManagementBase-52; +/** + * MBMS network support does not exist. + * @publishedPartner + * @released + */ +const TInt KErrMbmsNotSupported=KErrGsmMobilityManagementBase-53; +/** + * Specific MBMS service is not available. + * @publishedPartner + * @released + */ +const TInt KErrMbmsServiceUnavailable=KErrGsmMobilityManagementBase-54; +/** + * Preempts low priority MBMS/Non-MBMS service. + * @publishedPartner + * @released + */ +const TInt KErrMbmsServicePreempted=KErrGsmMobilityManagementBase-55; +/** + * One or more invalid MBMS service entry supplied. + * @publishedPartner + * @released + */ +const TInt KErrMbmsImpreciseServiceEntries=KErrGsmMobilityManagementBase-56; + +class TPacketDataConfigBase +/** Base class for the packet configuration classes. + +The Context configuration, QoS profile (Requested and Negotiated) and QoS +Capabilities classes inherit from this class. It is outside the scope of all +the Packet data classes. + +To allow future configuration structures (e.g. TContextConfigWCDMA, +TContextConfigPDC, etc.) to be added in such a way that a completely different +structure may be defined and passed into the same functions as this one, all +existing configuration structures are derived from this thin base class +which provides just one function, ExtensionId(). This function returns the +one protected member variable, iExtensionId. A new structure would define an +associated new constant to be set in iExtensionId on construction, which would +then be queried by the TSY prior to unpackaging the structure. + +@see RPacketContext::TContextConfigCDMA +@see RPacketContext::TContextConfigR99_R4 +@see RPacketContext::TContextConfig_R5 +@see RPacketContext::TContextConfigMbmsV1 + +@publishedPartner +@released + +*/ + { +public: + /** + Flags identifying the different packet networks. + */ + enum + { + /** + GPRS Release 97/98 packet network. + */ + KConfigGPRS= 0x01, + /** + CDMA and CDMA2000 packet networks. + @deprecated 9.5 + */ + KConfigCDMA = 0x02, + /** + GPRS/UMTS Release 99 and UMTS Release 4 networks. + */ + KConfigRel99Rel4 = 0x04, + /** + UMTS/IMS 3GPP Release 5 networks. + */ + KConfigRel5 = 0x05, + /** + MBMS networks + */ + KConfigMBMS = 0x06 + }; + + /** This member returns the type of class. + + @return The type of class. */ + inline TInt ExtensionId(){return iExtensionId;}; +protected: + /** + Defines the type of class: either KConfigGPRS, KConfigCDMA or KConfigRel99Rel4, + which identifies the type of packet network (GPRS R97/98, CDMA, Release 99 or 4 or 5) + */ + TInt iExtensionId; + }; + +class TConnectionInfoBase +/** Base class for the configuration info classes. It is outside the scope of +all the Packet data classes. + +To allow future connection information structures (e.g. TConnectionInfoV2, +TConnectionInfoV3, etc.) to be added and as a result information carried by the +structure can be increased. All information structures are derived from this +thin base class which provides just one function, ExtensionId(). This function +returns the protected member variable, iExtensionId. A new structure would +define an associated new constant to be set in iExtensionId on construction, +which would then be queried by the TSY prior to unpackaging the structure. + +@see RPacketContext::TConnectionInfoV1 + +@publishedPartner +@released +*/ + { +public: + /** + Flags identifying the different connection information structures + */ + enum + { + /** + Connection information version 1. + */ + KConnectionInfoV1 = 0x01 + }; + + /** Return the type of class. + * + @return The version of class. + */ + inline TInt ExtensionId(){return iExtensionId;}; + +public: + /** A bit-wise sum of TConnectionInfoFlags indicating which of the optional + fields contain valid data. */ + TUint32 iValid; + +protected: + /** Defines the type of class. */ + TInt iExtensionId; + }; + +class TPacketBase +/** +Base class for the Packet data ETel API parameters which are version dependent +(version 2 onwards). Note that even though the 7.0 version of the API does not define +version dependent classes, this implementation HAS been employed in the v7.0S version +(V2.0) of the API. + +The TPacketBase::ExtensionId() method is used to determine which version of a packaged +parameter has been created. +Note that the TPacketDataConfigBase::ExtensionId() method returns a packet network +type. + +@publishedPartner +@released +*/ + { +public: + IMPORT_C TInt ExtensionId() const; +protected: + TPacketBase(); + TInt iExtensionId; //< Extension identifier + }; + +class TPacketType +/** +Base class for all the V1 parameter types. + +@publishedPartner +@released +*/ +{ +public: + IMPORT_C TInt ExtensionId() const; +protected: + TPacketType(); + void InternalizeL(RReadStream& aStream); + void ExternalizeL(RWriteStream& aStream) const; +protected: + TInt iExtensionId; +}; + +struct TClientId +/**Holds the session and subsession handles which would be used +within the 2-phase list retrieval mechanism. During both the phases, +the client-side API code will pass down the TClientId so that TSY can use +this information to match the first phase of the request to the second phase. */ + { + /** The handle to the underlying RTelServer session. */ + TInt iSessionHandle; + /** The handle to the sub-session to which this API request relates. */ + TInt iSubSessionHandle; + }; + +class RPacketService; +class CPacketContextPtrHolder; +class RPacketContext : public RTelSubSessionBase +/** Defines the context and the configuration of a connection to the network's +packet-switched service. + +The functionality associated with the context of a packet-switched connection +(configuring, modifying, activating, etc) are encapsulated within this class. + +Each instance of this class has an RPacketService parent, to which it belongs. + +@publishedPartner +@released +*/ + { +public: + IMPORT_C RPacketContext(); + IMPORT_C TInt OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName); + IMPORT_C TInt OpenExistingContext(RPacketService& aPacketNetwork,const TDesC& aContextName); + IMPORT_C void Close(); +// +// Nested classes dealing with context configurations for each network type +// + enum {KGSNNameLength = 252}; // 3GPP TS 24.008, section 10.5.6.1 gives a range of 3 - 102 octets for the APN. 252 has been chosen as an adequate value for practical purposes. + enum {KMaxPDPAddressLength = KCommsDbSvrMaxFieldLength}; + enum + { + KPdpDataCompression = 0x01, + KPdpHeaderCompression = 0x02 + }; + +/** Buffer to hold the GSN address. + +@see KGSNNameLength */ + typedef TBuf8 TGSNAddress; //< GPRS Support Node (GSN) name +/** Buffer to hold the protocol address. + +@see KMaxPDPAddressLength */ + typedef TBuf8 TProtocolAddress; //< GPRS Rel97/98, CDMA, Rel99 and Rel4. + + // + // TProtocolType - defines the protocol used to connect to the packet data gateway + // +/** Defines the protocol used to connect to the packet data gateway. + +Modes: GRPS */ + enum TProtocolType + { + /** IPv4 type gateway. + + Modes: GRPS */ + EPdpTypeIPv4, + /** IPv6 type gateway. + + Modes: GPRS */ + EPdpTypeIPv6, + /** X.25 type gateway. + + Modes: GPRS */ + EPdpTypeX25, + /** PPP type gateway. + + Modes: GRPS, CDMA */ + EPdpTypePPP, + /** CDPD type gateway. + + Modes: CDMA + @deprecated 9.5 + */ + EPdpTypeCDPD + }; + + // + // TServiceOption - service option numbers are CDMA specific and used in the API to + // identify the various packet data services available on the CDMA packet network. + // +/** Service option numbers identify the various packet data services available +on the CDMA packet network. + +Modes: CDMA +@deprecated 9.5 + */ + enum TServiceOption + { + /** Service Options 7 and 15, 8-16. */ + KLowSpeedData = 0x01, + /** Service Options 22-25 IP and 26-29 CDPD. */ + KHighSpeedData = 0x02, + /** Service Option 33 on CDMA2000 network only. */ + KHighSpeedCDMA2000Data = 0x04 + }; + + /** Anonymous access required. + + Modes: GRPS, CDMA */ + enum TAnonymousAccess + { + /** Anonymous access not applicable. + + Modes: GRPS, CDMA */ + ENotApplicable, + /** Anonymous access required. + + Modes: GRPS */ + ERequired, + /** Anonymous access not required. + + Modes: GPRS */ + ENotRequired + }; + + enum { KMaxAuthDataLength = 50 }; + /** Buffer for various sorts of authorisation data since version 2 of the API. + + Supported from v7.0S. + */ + typedef TBuf8 TAuthData; + + // + // TAuthProtocol - this enables the client to set the protocol type used on the context + // + enum TAuthProtocol + { + EProtocolNone, + EProtocolPAP, + EProtocolCHAP + }; + + // + // TAuthInfo - this enables the client to set the authentication data used on the context + // + struct TAuthInfo + { + TAuthProtocol iProtocol; + TAuthData iUsername; + TAuthData iPassword; + }; + + // + // TDnsInfoV2 - this class enables the client to set the primary and secondary DNS server + // names used on the context + // + class TDnsInfoV2 : public TPacketBase + /** + Enables the client to set the primary and secondary DNS server + names used on the context since version 2 of the API. + + Supported from v7.0S. + + @publishedPartner + @released + */ + { + public: + IMPORT_C TDnsInfoV2(); + public: + /** Primary DNS server name.*/ + TProtocolAddress iPrimaryDns; + /** Secondary DNS server name.*/ + TProtocolAddress iSecondaryDns; + }; + /** + DNS information package since version 2 of the API. + + Supported from v7.0S. + */ + typedef TPckg TTDnsInfoV2Pckg; + + // + // - this buffer can be used to store protocol related data + // (such as "PPP config options") which do not fit into the other fields of the + // TProtocolConfigOptionV2 class (see below). The length of the buffer is based on + // the previous buffer used (before TProtocolConfigOptionV2 was implemented), which + // was based on 3GPP TS 24.008 (253 octets). + // + enum {KMiscProtocolBufferLength = 253}; + typedef TBuf8 TMiscProtocolBuffer; + + class TProtocolConfigOptionV2 : public TPacketBase + /** + Holds authentication data encapsulated in TAuthInfo, as + well as further data that may be required for CHAP protocol + authentication, such a challenge and response, since version + 2 of the API. + + Can contain the DNS server names, the username, password, + and CHAP associated data. + + Normal authentication uses only TAuthInfo::iUsername and + TAuthInfo::iPassword. The other parameters are for secure + authentication. + + The maximum combined length of the TAuthInfo::iUsername + and the secure information (iPassword or iResponse) is 50 bytes. + + Rather than keep the Protocol Config Option as a buffer it + is encapsulated as a class. This enables data extraction to + occur easily. + + Supported from v7.0S. + + @publishedPartner + @released + */ + { + public: + IMPORT_C TProtocolConfigOptionV2(); + public: + /** Authentication data.*/ + TAuthInfo iAuthInfo; + /** The pseudorandom data that is chosen by the client.*/ + TAuthData iChallenge; + /** Calculated by the client with the MD5 algorithm using + iChallenge, iId and iPassword.*/ + TAuthData iResponse; + /** A one byte identifier that is chosen by the client.*/ + TUint8 iId; + /** Primary and secondary DNS server names since version 2 + of the API.*/ + TDnsInfoV2 iDnsAddresses; + TMiscProtocolBuffer iMiscBuffer; + }; + + + class TContextConfigGPRS : public TPacketDataConfigBase + /** + Context configurations for GPRS packet data support. + + Contains all the data necessary to configure a context on a GPRS network or + UMTS packet network. + + @publishedPartner + @released + */ + { + public: + IMPORT_C TContextConfigGPRS(); + public: + /** The GPRS protocol type. The default value is EpdpTypeIPv4. + + @see TProtocolType */ + TProtocolType iPdpType; + /** The GPRS Access point name. The default value is an empty string. + + @see TGSNAddress */ + TGSNAddress iAccessPointName; + /** The GPRS protocol address. The default value is an empty string. + + @see TProtocolAddress */ + TProtocolAddress iPdpAddress; + /** The GRPS compression. This is a bit-wise sum of the wanted compression. The + default value is 0. + + @see KPdpDataCompression + @see KPdpHeaderCompression */ + TUint iPdpCompression; + /** Anonymous access requested. The default value is ENotRequired. + + @see TAnonymousAccess */ + TAnonymousAccess iAnonymousAccessReqd; + /** Use Edge. The default value is EFalse. True for EGPRS.*/ + TBool iUseEdge; // + /** Protocol configuration options for version 2 of the API. + + Supported from v7.0S.*/ + TProtocolConfigOptionV2 iProtocolConfigOption; + /** Network initiated context indication. */ + TBool iNWIContext; + }; + + + /** + Identifiers for Packet Flow Context. See Table 10.5.161/3GPP TS 24.008. + */ + enum TPacketFlowIdentifier + { + /** + Best Effort + */ + EBestEffort, + /** + Signalling + */ + ESignalling, + /** + Sms + */ + ESms + }; + + class TContextConfigR99_R4 : public TPacketDataConfigBase + /** + Enables Release 99 and Release 4 context configuration for version 2 of + the API. + + Contains all the data necessary to configure a context on a R99/R4 packet + network. + + Supported from v7.0S. + + @publishedPartner + @released + */ + { + public: + IMPORT_C TContextConfigR99_R4(); + public: + /** The Rel99/Rel4 protocol type. The default value is EpdpTypeIPv4.*/ + TProtocolType iPdpType; + /** The Rel99/Rel4 access point name. The default is an empty string.*/ + TGSNAddress iAccessPointName; + /** The Rel99/Rel4 protocol address. The default value is an empty string.*/ + TProtocolAddress iPdpAddress; + /** Use Edge. The default is EFalse. True for EGPRS.*/ + TBool iUseEdge; + /** Protocol configuration options.*/ + TProtocolConfigOptionV2 iProtocolConfigOption; + TBool iNWIContext; // Network initiated context indication. + TPacketFlowIdentifier iPFI; // Packet Flow indicator. + }; + + class TContextConfigCDMA : public TPacketDataConfigBase + /** + Enables context configurations for CDMA and CDMA2000 packet data + and high speed packet data support. + + Contains all the data necessary to configure a context on a CDMA packet + network. + + @publishedPartner + @released + @deprecated 9.5 + */ + { + public: + IMPORT_C TContextConfigCDMA(); + public: + /** Identifies the CDMA packet service option range (Low, High, High CDMA2000). + The default value is KLowSpeedData. + + @see TServiceOption */ + TUint iServiceOption; + /** The CDMA protocol type, either PPP or CDPD. The default value is EPdpTypePPP. + + @see TProtocolType */ + TProtocolType iProtocolType; + }; + + // Configuration-related calls + IMPORT_C void SetConfig(TRequestStatus& aStatus, const TDesC8& aConfig) const; + IMPORT_C void GetConfig(TRequestStatus& aStatus, TDes8& aConfig) const; + IMPORT_C void NotifyConfigChanged(TRequestStatus& aStatus, TDes8& aConfig) const; + IMPORT_C void Activate(TRequestStatus& aStatus) const; + IMPORT_C void Deactivate(TRequestStatus& aStatus) const; + IMPORT_C void Delete(TRequestStatus& aStatus) const; + IMPORT_C void LoanCommPort(TRequestStatus& aStatus, RCall::TCommPort& aDataPort) const; // Deprecated method. + IMPORT_C void RecoverCommPort(TRequestStatus& aStatus) const; // Deprecated method. + IMPORT_C void GetDnsInfo(TRequestStatus& aStatus, TDes8& aDnsInfo) const; + + + + enum TContextStatus + { + /** Current status is unknown. */ + EStatusUnknown, + /** Context is not activated. */ + EStatusInactive, + /** Context is currently being activated. */ + EStatusActivating, + /** Context is active. */ + EStatusActive, + /** Context is currently being deactivated. */ + EStatusDeactivating, + /** Context is suspended. */ + EStatusSuspended, + /** Context has been deleted. */ + EStatusDeleted, + /** Context is currently in data receiving mode.The service transitions + to this state when the data transmission starts.This is expected + to happen after some time of arrival of SESSION START message from the network. + Note : Applicable only to MBMS context */ + EStatusReceiving + }; + + IMPORT_C TInt GetStatus(TContextStatus& aContextStatus) const; + IMPORT_C void NotifyStatusChange(TRequestStatus& aStatus,TContextStatus& aContextStatus); + IMPORT_C TInt GetProfileName(TName& aQoSProfile) const; + + struct TDataVolume +/** Holds the amount of sent and received data. + +The total number of bytes sent is: iOverflowCounterSent*(2^32)+iOverflowCounterSent */ + { + TUint32 iBytesSent; + /** Overflow counter for the bytes sent. + + The total number of bytes sent is: iOverflowCounterSent*(2^32)+iOverflowCounterSent */ + TUint32 iOverflowCounterSent; + /** The number of bytes received. + + The total number of bytes received is: iOverflowCounterReceived*(2^32)+iOverflowCounterReceived */ + TUint32 iBytesReceived; + /** Overflow counter for the bytes received. + + The total number of bytes received is: iOverflowCounterReceived*(2^32)+iOverflowCounterReceived */ + TUint32 iOverflowCounterReceived; + }; + + struct TNotifyDataTransferredRequest + { + TUint iRcvdGranularity; + TUint iSentGranularity; + }; + + /** + Determines which fields in the TConnectionInfoXXX parameter class are valid. + + @see TConnectionInfoV1 + */ + enum TConnectionInfoFlags + { + /** The HSDPA category field is valid in the connection info class. + + Modes: WCDMA */ + KHSDPACategory = 0x00000001, + + /** The HSUPA category field is valid in the connection info class. + + Modes: WCDMA */ + KHSUPACategory = 0x00000002 + }; + + class TConnectionInfoV1 : public TConnectionInfoBase + /** + Connection info class is used to carry miscellaneous information about data connection. + + Contains all kind of packet data connection related information that is useful for + ETel API clients. + + Supported from v9.5. + + @publishedPartner + @released + */ + { + public: + IMPORT_C TConnectionInfoV1(); + public: + /**HSDPA UE category as defined in 3GPP TS 25.306 Table 5.1a: "FDD + HS-DSCH physical layer categories". Value "0" means HSDPA is not used, + value "1" means category 1, value "2" means category 2 etc.*/ + TUint iHSDPACategory; + + /*HSUPA (E-DCH) UE category as defined in 3GPP TS 25.306 Table 5.1g: + "FDD E-DCH physical layer categories". Value "0" means HSUPA is not used, + value "1" means category 1, value "2" means category 2 etc.*/ + TUint iHSUPACategory; + }; + + + IMPORT_C TInt GetDataVolumeTransferred(TDataVolume& aVolume) const; // Deprecated method. + IMPORT_C void NotifyDataTransferred(TRequestStatus& aStatus, TDataVolume& aVolume, TUint aRcvdGranularity=0x1000,TUint aSentGranularity=0x1000) const; + IMPORT_C void GetConnectionSpeed(TRequestStatus& aStatus, TUint& aRate) const; // get the current speed (bits per second) of the connection + IMPORT_C void NotifyConnectionSpeedChange(TRequestStatus& aStatus, TUint& aRate) const; // notify client if there's a change in the connection speed + + // N.B. the following 2 methoda are only supported if telephony was built with SYMBIAN_ADAPTIVE_TCP_RECEIVE_WINDOW macro + IMPORT_C void GetConnectionInfo(TRequestStatus& aStatus, TDes8& aInfo) const; // get connection information + IMPORT_C void NotifyConnectionInfoChange(TRequestStatus &aStatus, TDes8& aInfo) const; // notify client if connection information changes + + IMPORT_C TInt GetLastErrorCause(TInt& aError) const; + + IMPORT_C void GetDataVolumeTransferred(TRequestStatus& aStatus, TDataVolume& aVolume) const; // Recommended method variant. + + class TDataChannelV2 : public TPacketBase + /** + Contains data channel parameters. + + Contains the information previously returned by LoanCommPort() + (iCsy and iPort), as well as the new information which is generated + by context creation, e.g. the context (data channel) identity, + for version 2 of the API. + + It is passed as a packaged parameter to RPacketContext::InitialiseContext(). + + @publishedPartner + @released + */ + { + public: + IMPORT_C TDataChannelV2(); + public: + /**CSY name. + @deprecated Data previously used by LoanDataPort() in version 1 of the API.*/ + TFileName iCsy; + /**Port name + @deprecated Data previously used by LoanDataPort(). */ + TName iPort; + /**Context Identity. + The Channel name information returned by the lower layers (Nif). */ + TName iChannelId; + }; + /** + Data channel package since version 2 of the API. + + Supported from v7.0S. + */ + typedef TPckg TDataChannelV2Pckg; + + IMPORT_C void InitialiseContext(TRequestStatus& aStatus, TDes8& aDataChannelV2Pckg) const; // This method supersedes the LoanCommPort() and RecoverCommPort() methods. + + enum {KIPAddressSize = 16}; //< TIPAddress size + /** + Array to hold either IPv4 or IPv6 address or Subnet mask since version 2 of the API. + + Supported from v7.0S. + */ + typedef TUint8 TIPAddress[KIPAddressSize]; + + + class TPacketFilterV2 : public TPacketBase + /** + Packet filter package since version 2 of the API. + + Contains member data compatible with parameters required for configuring + a packet filter on a Rel99/R4 packet network. + + Inherits from the TPacketBase class to make it future + proof (extensible). + + Supported from v7.0S. + + @publishedPartner + @released + */ + + { + public: + IMPORT_C TPacketFilterV2(); + public: + /** Packet filter identifier. Value range: 1 - 8.*/ + TInt iId; + /** Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest).*/ + TInt iEvaluationPrecedenceIndex; + /** Domain Source address.*/ + TIPAddress iSrcAddr; + /** Domain Subnet mask.*/ + TIPAddress iSrcAddrSubnetMask; + /** Protocol number (IPv4) or Next Header (IPv6) field of incoming packets. + Value range 0 - 255.*/ + TInt iProtocolNumberOrNextHeader; + /** Minimum source port number of incoming packets. Value range 0 - 65535.*/ + TInt iSrcPortMin; + /** Maximum source port number of incoming packets. Value range 0 - 65535.*/ + TInt iSrcPortMax; + /** Lowest destination port number of incoming packets. Value range 0 - 65535.*/ + TInt iDestPortMin; + /** Maximum destination port number of incoming packets. Value range 0 - 65535.*/ + TInt iDestPortMax; + /** Security Parameter Index, 32-bit field.*/ + TUint32 iIPSecSPI; + /** Type of Service (IPv4) or Traffic Class (IPv6). + 1 octet TOS/Traffic class + 1 octet TOS/Traffic class Mask.*/ + TUint16 iTOSorTrafficClass; + /** Flow label (IPv6 only) of incoming packets. 3 octets with 20-bit field + containing the flow label.*/ + TUint32 iFlowLabel; + }; + /** Packaged TPacketFilterV2.*/ + typedef TPckg TPacketFilterV2Pckg; + + + /** + Maximum length of DNS Fully Qualified Domain Name (RFC 1123) + + @publishedPartner + */ + enum TFQDNLength + { + KMaxFQDNLength=255, + }; + + typedef TBuf8 TAuthorizationToken; + + /** + Packet Filter type identifier. + + @publishedPartner + @released + */ + enum TPacketFilterType + { + /** Unknown filter type.*/ + EPacketFilterTypeUnknown, + /** Filter Type One.*/ + EPacketFilterTypeOne, + /** Filter Type Two.*/ + EPacketFilterTypeTwo, + /** Filter Type Three.*/ + EPacketFilterTypeThree, + }; + + class TPacketFilterV3 : public TPacketFilterV2 + /** + Packet filter that supports packet filter types. + Contains member data compatible with parameters required + for configuring a packet filter on a Rel99/R4/R5 packet network. . + + Inherits from the TPacketFilterV2 class. + + Supported from 9.1 + + @publishedPartner + @released + */ + { + public: + IMPORT_C TPacketFilterV3(TPacketFilterType aType); + IMPORT_C TPacketFilterV3(); + enum TPacketFilterDataBitmapPos + { + /** Bitmap for Domain Source address.*/ + EPacketFilterSrcAddr = 0x001, + /** Bitmap for Domain Subnet mask.*/ + EPacketFilterSrcAddrSubnetMask = 0x002, + /** Bitmap for Protocol number (IPv4) or Next Header (IPv6) field of incoming packets.*/ + EPacketFilterProtocolNumberOrNextHeader = 0x004, + /** Bitmap for Minimum source port number of incoming packets.*/ + EPacketFilterSrcPortMin = 0x008, + /** Bitmap for Maximum source port number of incoming packets.*/ + EPacketFilterSrcPortMax = 0x010, + /** Bitmap for Lowest destination port number of incoming packets.*/ + EPacketFilterDestPortMin = 0x020, + /** Bitmap for Maximum destination port number of incoming packets.*/ + EPacketFilterDestPortMax = 0x040, + /** Bitmap for Security Parameter Index.*/ + EPacketFilterIPSecSPI = 0x080, + /** Bitmap for Type of Service (IPv4) or Traffic Class (IPv6).*/ + EPacketFilterTOSorTrafficClass = 0x100, + /** Bitmap for Flow label (IPv6 only) of incoming packets.*/ + EPacketFilterFlowLabel = 0x200, + }; + + inline TBool IsPresent(TPacketFilterDataBitmapPos aDataMemberBitmapPos); + inline void Reset(TPacketFilterDataBitmapPos aDataMemberBitmapPos); + inline void Reset(); + public: + /** Packet filter identifier. Value range: 1 - 8.*/ + using TPacketFilterV2::iId; + /** Evaluation Precedence Index. Value range: 255 (lowest) - 0 (highest).*/ + using TPacketFilterV2::iEvaluationPrecedenceIndex; + + public: + + IMPORT_C TBool SetSrcAddr(TIPAddress &aSrcAddr); + IMPORT_C TBool SetSrcAddrSubnetMask(TIPAddress &aSrcAddrSubnetMask); + + IMPORT_C TBool SetProtocolNumberOrNextHeader(TInt aProtocolNumberOrNextHeader); + + IMPORT_C TBool SetSrcPortMin(TInt aSrcPortMin); + IMPORT_C TBool SetSrcPortMax(TInt aSrcPortMax); + + IMPORT_C TBool SetDestPortMin(TInt aDestPortMin); + IMPORT_C TBool SetDestPortMax(TInt aDestPortMax); + + IMPORT_C TBool SetSPI(TUint32 aIPSecSPI); + + IMPORT_C TBool SetTOSorTrafficClass(TUint16 aTOSorTrafficClass); + IMPORT_C TBool SetFlowLabel(TUint32 aFlowLabel); + + + public: + + /** Return the Domain Source address. + + @return Domain Source address. + */ + inline const TIPAddress& SrcAddr() + { + return iSrcAddr; + }; + + /** Return the Domain Subnet mask. + + @return Domain Subnet mask. + */ + inline const TIPAddress& SrcAddrSubnetMask() + { + return iSrcAddrSubnetMask; + }; + + inline TInt ProtocolNumberOrNextHeader(); + + inline TInt SrcPortMin(); + inline TInt SrcPortMax(); + + inline TInt DestPortMin(); + inline TInt DestPortMax(); + + inline TUint32 SPI(); + + inline TUint16 TOSorTrafficClass(); + inline TUint32 FlowLabel(); + protected: + /** Initialised in the constructor - type can be I, II or III + */ + TPacketFilterType iType; + /** Bitmap of allowed attributes set in the constructor in accordance to type + of the filter as defined in TS 23.060. + */ + TUint16 iAllowedDataBitmap; + /** Bitmap of data members that are set(initialised) - data member can be set + in allowed for the specified type of the filter only. + */ + TUint16 iPresentDataBitmap; + }; + /** Packaged TPacketFilterV3.*/ + typedef TPckg TPacketFilterV3Pckg; + + /** + Contains Authorization Token and associated Flow Identifiers. + Defines member data needed to set media authorization TFT parameters - single Authorization Token parameter + followed by the list of Flow Identifier parameter(s), as defined in 3GPP TS 24.008. + + Contains data member that's instance of TPacketBase class to make it future proof (extensible); In order to support serialization, + present implementation of TPacketBase has to be extended so that it supports methods needed (ExternalizeL()/InternalizeL()). + Supported from 9.1. + + @publishedPartner + @released + */ + class CTFTMediaAuthorizationV3 : public CBase + { + public: + IMPORT_C ~CTFTMediaAuthorizationV3(); + IMPORT_C static CTFTMediaAuthorizationV3* NewL(); + public: + IMPORT_C virtual void ExternalizeL(HBufC8*& aBuffer) const; + IMPORT_C virtual void InternalizeL(TDes8& aBuffer); + IMPORT_C TUint ExtensionId()const; + + + /** Flow identifier */ + struct TFlowIdentifier + { + /** Media component number. */ + TUint16 iMediaComponentNumber; + /** IP flow number. */ + TUint16 iIPFlowNumber; + }; + /** Authorization token */ + TAuthorizationToken iAuthorizationToken; + /** List of flow identifiers authorization token is granted for*/ + RArray iFlowIds; + protected: + CTFTMediaAuthorizationV3(); + TUint iExtensionId; + }; + + IMPORT_C void AddMediaAuthorizationL(TRequestStatus& aStatus, CTFTMediaAuthorizationV3& aMediaAuthorization) const; + IMPORT_C void RemoveMediaAuthorization(TRequestStatus& aStatus, TAuthorizationToken& aAuthorizationToken) const; + + + IMPORT_C TInt OpenNewSecondaryContext(RPacketService& aPacketService, const TDesC& aExistingContextName, TDes& aNewContextName); + IMPORT_C void EnumeratePacketFilters(TRequestStatus& aStatus, TInt& aCount) const; + IMPORT_C void GetPacketFilterInfo(TRequestStatus& aStatus, TInt aIndex, TDes8& aPacketFilterInfo) const; + IMPORT_C void AddPacketFilter(TRequestStatus& aStatus, const TDesC8& aPacketFilterInfo) const; + IMPORT_C void RemovePacketFilter(TRequestStatus& aStatus, TInt aId) const; + IMPORT_C void ModifyActiveContext(TRequestStatus& aStatus) const; + IMPORT_C void CreateNewTFT(TRequestStatus& aStatus, const TInt aSize) const; + IMPORT_C void DeleteTFT(TRequestStatus& aStatus) const; + + + + /** + Protocol identifiers, as defined in 24.008, section 10.5.6.3 + */ + enum TPcoProtocolId + { + /** PCO identifier for LCP.*/ + EETelPcktProtocolLcpId = 0xc021, + /** PCO identifier for PAP.*/ + EETelPcktProtocolPapId = 0xc023, + /** PCO identifier for CHAP.*/ + EETelPcktProtocolChapId = 0xc223, + /** PCO identifier for IPCP.*/ + EETelPcktProtocolIpcpId = 0x8021 + }; + + /** + PCO additional parameter identifiers in MS to network direction, as defined in 3GPP TS 24.008, section 10.5.6.3 + */ + enum TPcoIDMSToNetwork + { + /** PCO MS additional parameter identifier for a PCSCF address request.*/ + EEtelPcktPCSCFAddressRequest = 0x01, + /** PCO MS additional parameter identifier for an IM CN subsystem signalling flag.*/ + EEtelPcktIMCNMSSubsystemSignallingFlag = 0x02, + /** PCO MS additional parameter identifier for a DNS server address request.*/ + EEtelPcktDNSServerAddressRequest = 0x03, + /** Not currently supported.*/ + EEtelPcktNotSupported = 0x04, + }; + + /** + PCO additional parameter identifiers in network to MS direction, as defined in 3GPP TS 24.008, section 10.5.6.3 + */ + enum TPcoIDNetworkToMS + { + /** PCO network additional parameter identifier for a PCSCF address.*/ + EEtelPcktPCSCFAddress = 0x01, + /** PCO network additional parameter identifier for an IM CN subsystem signalling flag.*/ + EEtelPcktIMCNNetworkSubsystemSignallingFlag = 0x02, + /** PCO network additional parameter identifier for a DNS server address.*/ + EEtePcktDNSServerAddress= 0x03, + /** PCO network additional parameter identifier for a policy control rejection code.*/ + EEtelPcktPolicyControlRejectionCode = 0x04, + }; + + + /** + Helper class that implements PCO IE identifier. + + @publishedPartner + @released + */ + class TPcoId : public MTlvItemIdType + { + public: + inline TPcoId(); + inline TPcoId(TUint16 aId); + inline void ExternalizeL(TDes8&)const; + inline void InternalizeL(TDesC8&); + inline TUint SerializedLength() const; + inline TUint16 Id()const; + inline void SetId(TUint16); + inline TBool IsEqual(const MTlvItemIdType& aOtherIdType)const; + protected: + /** PCO Id*/ + TUint16 iId; + }; + + /** + Helper class that implements PCO IE identifier length. + + @publishedPartner + @released + */ + class TPcoItemDataLength: public MTlvItemDataLengthType + { + public: + inline TPcoItemDataLength(); + inline TPcoItemDataLength(TUint8 aLen); + inline void SetDataLength(TUint aLength); + inline TUint DataLength() const; + inline void ExternalizeL(TDes8&) const; + inline void InternalizeL(TDesC8&); + inline TUint SerializedLength()const; + protected: + /** length of associated item data*/ + TUint8 iDataLength; + }; + + /** + Identifiers for the type of data data compression applicable for SNDCP only, + as defined in 3GPP TS 44.065, section 6.6.1.1.4. + Values listed in the enumeration do not hold same numerical values as those defined in the specifications, + as ENoDataComression and EManufacturerDefaultDataComression are introduced in order to be utilised when no + compression and device default compression algorithm are needed, respectively. + */ + enum TDataCompression + { + /** + No compression + */ + ENoDataCompression, + /** + Compression algorithm preferred by the device manufacturer + */ + EManufacturerDefaultDataCompression, + /** + V.42 bis + */ + EV42, + /** + V.44 + */ + EV44, + }; + + /** + Identifiers for type of SNDCP & PDCP header compression as defined + in 3GPP TS 44.065, section 6.5.1.1.4, + Values listed in the enumeration do not hold same numerical values as those defined in the specifications, + as ENoHeaderCompression and EManufacturerDefaultHeaderCompression are introduced in order to be utilised when no + compression and device default compression algorithm are needed, respectively. + */ + enum THeaderCompression + { + /** + No compression + */ + ENoHeaderCompression, + /** + Compression algorithm preferred by the device manufacturer + */ + EManufacturerDefaultHeaderCompression, + /** + Compression algorithm defined in RFC 1144 + */ + ERfc1144, + /** + Compression algorithm defined in RFC 2507 + */ + ERfc2507, + /** + Robust header compression algorithm defined in RFC 3095 + */ + ERohc, + }; + + class TContextConfig_R5 : public TContextConfigR99_R4 + /** + Reintroduces support for setting of header/data compression in SNDCP & PDCP + Supported from v9.1. + @publishedPartner + @released + */ + { + public: + IMPORT_C TContextConfig_R5(); + + public: + /** defines whether SNDCP & PDCP header compression shall be utilised or not. + If former is the case, it holds value of that defines compression algorithm to be exercised. + The default value is ENone - no compression is needed. + */ + THeaderCompression iPdpHeaderCompression; + /** defines whether SNDCP data compression shall be utilised or not. + If former is the case, it holds value of that defines compression algorithm to be exercised. + The default value is ENone - no compression is needed. + */ + TDataCompression iPdpDataCompression; + }; + +protected: + IMPORT_C virtual void ConstructL(); + IMPORT_C virtual void Destruct(); +protected: + CPacketContextPtrHolder* iEtelPacketContextPtrHolder; + }; + +// +// MBMS Context +// +class RPacketMbmsContext : public RPacketContext +/** +Defines the MBMS context and the configuration of a connection to the network's +packet-switched service. +The functionality associated with the context of a MBMS connection is inherited +from RPacketContext class. +The behaviour of OpenNewContext API is redefined. +Every instance of this class has RPacketService as a base class. + +@publishedPartner +@released +*/ + { +public: + IMPORT_C RPacketMbmsContext(); + IMPORT_C TInt OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName); + IMPORT_C void Close(); + friend class CRetrievePcktMbmsSessionList; + + class TContextConfigMbmsV1: public TPacketDataConfigBase + /** + Context configurations for MBMS support. + + Contains all the data necessary to configure a context on a MBMS network. + + @see RPacketContext::SetConfig() + + @publishedPartner + @released + */ + { + public: + IMPORT_C TContextConfigMbmsV1(); + public: + /** Input parameter : Temporary mobile group identity + * A unique name to an MBMS service + */ + TTmgi iTmgi; + + /** Input Parameter : MBMS access bearer information + * @see TMbmsScope + */ + TMbmsScope iMbmsAccessBearer; + + /** Input parameter : MBMS service priority options + * Specifies the priority of the MBMS service to be received. + * @see TMbmsServicePriority + */ + TMbmsServicePriority iMbmsServicePriority; + + /** Input parameter : MBMS service mode + * @see TMbmsServiceMode + */ + TMbmsServiceMode iMbmsServiceMode; + + /** Input parameter : MBMS session flag + * ETrue indicates that an MBMS service has one or more sessions. + */ + TBool iMbmsSessionFlag; + }; + + + //Packaged version of TContextConfigMbmsV1, used when this structure has to be passed via IPC. + typedef TPckg TContextConfigMbmsV1Pckg; + + IMPORT_C void UpdateMbmsSessionList(TRequestStatus& aStatus,const TMbmsAction aAction, const TMbmsSessionId aSessionId = 0) const; + + class CMbmsSession : public CBase + /** + * Captures the list of session(s) of an MBMS service. + * @publishedPartner + * @released + */ + { + public: + IMPORT_C static CMbmsSession* NewL(); + IMPORT_C void InternalizeL(const TDesC8& aBuffer); + IMPORT_C void ExternalizeL(HBufC8*& aBuffer); + IMPORT_C TUint ExtensionId() const; + IMPORT_C ~CMbmsSession(); + public: + /** + * Output Parameter. + * Contains the list of sessions pertaining to the MBMS service. + */ + TMbmsSessionIdList iSessionIdList; + /** + * Defines the type of the class + */ + TUint iExtensionId; + protected: + CMbmsSession(); + }; + + }; + +class CPacketPtrHolder; +class CPcktMbmsMonitoredServiceList; +class RPacketService : public RTelSubSessionBase +/** +Defines a packet-switched connection to a packet network. + +This is the main packet network class. +It encapsulates functionality associated with controlling a packet-switched connection: +attaching, detaching, querying packet network capabilities, etc. +@publishedPartner +@released +*/ + { +public: + IMPORT_C RPacketService(); + IMPORT_C TInt Open(RPhone& aPhone); + IMPORT_C void Close(); + + IMPORT_C void NotifyContextAdded(TRequestStatus& aStatus, TDes& aContextId) const; + IMPORT_C void Attach(TRequestStatus& aStatus) const; + IMPORT_C void Detach(TRequestStatus& aStatus) const; + + friend TInt RPacketContext::OpenNewSecondaryContext(RPacketService& aPacketService, const TDesC& aExistingContextName, TDes& aNewContextName); //< This method calls the internal method RPacketService::PrepareOpenSecondary(const TDesC& aOriginalContextName) + friend TInt RPacketContext::OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName); + friend TInt RPacketMbmsContext::OpenNewContext(RPacketService& aPacketNetwork, TDes& aContextName); + + friend class CRetrievePcktMbmsMonitoredServices; + +/** Defines the packet data connection status. */ + enum TStatus + { + /** Unattached to network and inactive packet data connection. */ + EStatusUnattached, + /** Attached to network and inactive packet data connection. */ + EStatusAttached, + /** Attached to network and active packet data connection. */ + EStatusActive, + /** Attached to network and suspended packet data connection. */ + EStatusSuspended + }; + + IMPORT_C TInt GetStatus(TStatus& aPacketStatus) const; + IMPORT_C void NotifyStatusChange(TRequestStatus& aStatus,TStatus& aPacketStatus) const; + IMPORT_C void NotifyContextActivationRequested(TRequestStatus& aStatus, TDes8& aContextParameters) const; + IMPORT_C void RejectActivationRequest(TRequestStatus& aStatus) const; + + struct TContextInfo + /** Struct to contain the context information. + + @see GetContextInfo() */ + { + /** The name of the context. + + @see TName */ + TName iName; + /** The current status of the context. + + @see RPacketContext::TContextStatus */ + RPacketContext::TContextStatus iStatus; + }; + + IMPORT_C void EnumerateContexts(TRequestStatus& aStatus,TInt& aCount, TInt& aMaxAllowed) const; //< Enumerate all Primary and Secondary contexts (whether active or inactive) + IMPORT_C void GetContextInfo(TRequestStatus& aStatus, TInt aIndex, TContextInfo& aInfo) const; + + // + // Packet Network Registration and Availability + // + /** Packet Network Registration/Availability. */ + enum TRegistrationStatus + { + /** Not registered and not searching for a network. A network may or may not be + available. */ + ENotRegisteredNotSearching, + /** Registered on a home network. */ + ERegisteredOnHomeNetwork, + /** Not registered but searching for a network. */ + ENotRegisteredSearching, + /** Registration denied. */ + ERegistrationDenied, + /** Registration status unknown. */ + EUnknown, + /** Registered on foreign network. */ + ERegisteredRoaming, + /** Not registered or searching, but network available. */ + ENotRegisteredButAvailable, + /** Not registered or searching, and network not available. */ + ENotRegisteredAndNotAvailable + }; + + IMPORT_C void GetNtwkRegStatus(TRequestStatus& aStatus, TRegistrationStatus& aRegistrationStatus) const; + IMPORT_C void NotifyChangeOfNtwkRegStatus(TRequestStatus& aStatus,TRegistrationStatus& aRegistrationStatus) const; + + /** MS class configuration. */ + enum TMSClass + { + /** Active simultaneous PS and CS calls supported (Class A). */ + EMSClassDualMode, + /** Active CS and Suspended PS simultaneous calls supported (Class B). */ + EMSClassSuspensionRequired, + /** Active CS or Active PS only call supported (Class C). */ + EMSClassAlternateMode, + /** Active CS only call supported (Class C). */ + EMSClassCircuitSwitchedOnly, + /** Active PS only call supported (Class C) */ + EMSClassPacketSwitchedOnly, + /** Unknown what configuration is supported */ + EMSClassUnknown + }; + + IMPORT_C void GetMSClass(TRequestStatus& aStatus, TMSClass& aCurrentClass, TMSClass& aMaxClass) const; + IMPORT_C void SetMSClass(TRequestStatus& aStatus, TMSClass aClass) const; + IMPORT_C void NotifyMSClassChange(TRequestStatus& aStatus, TMSClass& aNewClass) const; + + /** Static capabilities. + + Modes: GPRS */ + enum TStaticMiscCaps + { + // + // GPRS-specific + // + /** Suspend supported. + + Modes: GPRS */ + KCapsSuspendSupported=0x0001, + /** Anonymous Access supported. + + Modes: GPRS */ + KCapsAASupported=0x0002, + /** Network availability supported. + + Modes: GPRS */ + KCapsNetworkAvailabilitySupported=0x0004, + /** Set default context supported. + + Modes: GPRS */ + KCapsSetDefaultContextSupported=0x0008, + /** Change attach mode supported. + + Modes: GPRS */ + KCapsChangeAttachModeSupported=0x0010, + /** Get data transferred supported. + + Modes: GPRS */ + KCapsGetDataTransferredSupported=0x0020, + /** Notify data transferred supported + + Modes: GPRS */ + KCapsNotifyDataTransferredSupported=0x0040, + /** Preferred bearer supported. + + Modes: GPRS */ + KCapsPreferredBearerSupported=0x0080, + /** PDP data compression supported. + + Modes: GPRS */ + KCapsPdpDataCompSupported=0x0100, + /** PDP header compression supported + + Modes: GPRS */ + KCapsPdpHeaderCompSupported=0x0200, + /** MS class supported. + + Modes: GPRS */ + KCapsMSClassSupported=0x0400, + /** Notify MS class changes supported. + + Modes: GPRS */ + KCapsNotifyMSClassSupported=0x0800, + // + // CDMA Specific + // + /** Service Option (7,15) or (8,16). + + Modes: CDMA2000 + @deprecated 9.5 + */ + KCapsCDMAOneLowSpeedDataSupported=0x00001000, + /** Service Option (22-25) or (26-29). + + Modes: CDMA2000 + @deprecated 9.5 + */ + KCapsCDMAOneHighSpeedDataSupported=0x00002000, + /** Service Option 33 or 34. + + Modes: CDMA2000 + @deprecated 9.5 + */ + KCapsCDMA2000HighSpeedDataSupported=0x00004000, + /** PPP protocol supported. + + Modes: CDMA2000 + @deprecated 9.5 + */ + KCapsProtocolPPPSupported=0x00008000, + /** CDPD protocol supported + + Modes: CDMA2000 + @deprecated 9.5 + */ + KCapsProtocolCDPDSupported=0x00010000, + /*@deprecated 9.5*/ + KCapsPacketReleaseModeSupported=0x00020000, + /*@deprecated 9.5*/ + KCapsNotifyReleaseModeChangeSupported=0x00040000, + + /** The phone supports HSDPA + + Modes: WCDMA */ + KCapsHSDPASupported=0x00080000, + + /** The phone supports EGPRS + + Modes: GPRS/WCDMA */ + KCapsEGPRSSupported=0x00100000, + + /** The phone supports HSUPA + + Modes: WCDMA */ + KCapsHSUPASupported=0x00200000, + /** The phone supports MBMS + + Modes: GPRS/WCDMA */ + KCapsMBMSSupported=0x00400000 + }; + + IMPORT_C TInt GetStaticCaps(TUint& aCaps, RPacketContext::TProtocolType aPdpType) const; + + /** Dynamic capabilities. + + Modes: GPRS/CDMA */ + enum TDynamicCaps + { + // Common GPRS and CDMA caps + /** Activate supported. + + Modes: GPRS/CDMA */ + KCapsActivate=0x00000001, + /** Rx Circuit Switched call supported. + + Modes: GPRS/CDMA */ + KCapsRxCSCall=0x00000002, + /** RX context activation request supported. + + Modes: GPRS/CDMA */ + KCapsRxContextActivationReq=0x00000004, + // GPRS-specific caps + /** Manual attach supported. + + Modes: GPRS */ + KCapsManualAttach=0x00000008, + /** Manual detach supported. + + Modes: GPRS */ + KCapsManualDetach=0x00000010, + /** SMS transfer supported. + + Modes: GPRS */ + KCapsSMSTransfer=0x00000020, + // CDMA-specific caps + /** Service Option (7,15) or (8,16). + + Modes: CDMA + @deprecated 9.5 + */ + KCapsCDMAOneLowSpeedDataAllowed=0x00000040, + /** Service Option (22-25) or (26-29). + + Modes: CDMA + @deprecated 9.5 + */ + KCapsCDMAOneHighSpeedDataAllowed=0x00000080, + /** Service Option 33 or 34. + + Modes: CDMA + @deprecated 9.5 + */ + KCapsCDMA2000HighSpeedDataAllowed=0x00000100, + + /** HSDPA is currently being used + + Modes: WCDMA */ + KCapsHSDPA=0x00000200, + + /** EGPRS is currently being used + + Modes: GPRS/WCDMA */ + KCapsEGPRS=0x00000400, + + /** HSUPA is currently being used + + Modes: WCDMA */ + KCapsHSUPA=0x00000800, + + /** MBMS is currently being used + + Modes: GPRS/WCDMA */ + KCapsMBMS=0x00001000 + + }; + + /** Typedef to hold the RPacketService::TDynamicCaps. */ + typedef TUint TDynamicCapsFlags; + + IMPORT_C TInt GetDynamicCaps(TDynamicCapsFlags& aCaps) const; + IMPORT_C void NotifyDynamicCapsChange(TRequestStatus& aStatus, TDynamicCapsFlags& aCaps) const; + + /** The preferred bearer. */ + enum TPreferredBearer + { + /** Packet Switched (PS) bearer preferred. */ + EBearerPacketSwitched, + /** Circuit Switched (CS) bearer preferred. */ + EBearerCircuitSwitched + }; + + IMPORT_C void SetPreferredBearer(TRequestStatus& aStatus, TPreferredBearer aBearer) const; + IMPORT_C TInt GetPreferredBearer(TPreferredBearer& aBearer) const;// Deprecated method. + + IMPORT_C void GetPreferredBearer(TRequestStatus& aStatus, TPreferredBearer& aBearer) const; // Recommended method variant + + /** Defines when the attachment to the GPRS network should occur. + + Modes: GPRS */ + enum TAttachMode + { + /** The phone will attach to the packet network whenever it can. */ + EAttachWhenPossible,// instruct phone stack to attach to packet network whenever it can + /** The phone will attach to the packet network only when required (e.g. when activating + a connection). */ + EAttachWhenNeeded // instruct phone stack to attach to network only when required + }; + + IMPORT_C TInt SetAttachMode(TAttachMode aMode) const; // Deprecated method. + IMPORT_C TInt GetAttachMode(TAttachMode& aMode) const; // Deprecated method. + IMPORT_C TInt SetDefaultContextParams(const TDesC8& aPckg) const; // Deprecated method. + IMPORT_C TInt GetDefaultContextParams(TDes8& aPckg) const; // Deprecated method. + + IMPORT_C void SetAttachMode(TRequestStatus& aStatus, TAttachMode aMode) const; // Recommended method variant + IMPORT_C void GetAttachMode(TRequestStatus& aStatus, TAttachMode& aMode) const; // Recommended method variant + IMPORT_C void NotifyAttachModeChange(TRequestStatus& aStatus, TAttachMode& aMode) const; + IMPORT_C void SetDefaultContextParams(TRequestStatus& aStatus, const TDesC8& aPckg) const; // Recommended method variant + IMPORT_C void GetDefaultContextParams(TRequestStatus& aStatus, TDes8& aPckg) const; // Recommended method variant + + enum TPacketReleaseMode + { + EReleaseModeUnknown, + EReleaseModeUnregistered, + EReleaseMode97_98, + EReleaseMode99, + EReleaseMode4, + /*@deprecated 9.5*/ + EReleaseModeCDMA2000 + }; + + IMPORT_C void GetCurrentReleaseMode(TRequestStatus& aStatus, TPacketReleaseMode& aReleaseMode) const; + IMPORT_C void NotifyReleaseModeChange(TRequestStatus& aStatus, TPacketReleaseMode& aReleaseMode) const; + + enum TContextType + { + EUnspecified, //< Unspecified context type + EInternalContext, //< Internally created context + EExternalContext //< Externally created context + }; + + + class TNifInfoV2 : public TPacketBase + /** + Rel99/R4 Network information class. This V2 class inherits from the + TPacketBase class to make it future proof (extensible). + @publishedPartner + @released + */ + { + public: + IMPORT_C TNifInfoV2(); //< Constructor + public: + TName iContextName; //< The name of any defined context for this Network Interface + TInt iNumberOfContexts; //< Number of contexts belonging to the Network Interface + RPacketContext::TContextStatus iNifStatus; //< Status of the Network Interface + RPacketContext::TProtocolAddress iPdpAddress; //< PDP address of the interface + TContextType iContextType; //< Context type (internally or externally created) + }; + typedef TPckg TNifInfoV2Pckg; //< TNifInfoV2 package + + // Internal API/TSY struct, used by GetContextNameInNif() method + struct TContextNameInNif + { + TInt iIndex; //< Integer specifying a context within a Nif. + TName iExistingContextName; //< Existing Context name. + }; + + IMPORT_C void EnumerateNifs(TRequestStatus& aStatus, TInt& aCount) const; + IMPORT_C void GetNifInfo(TRequestStatus& aStatus, TInt aIndex, TDes8& aNifInfoV2) const; + IMPORT_C void EnumerateContextsInNif(TRequestStatus& aStatus, const TDesC& aExistingContextName, TInt& aCount) const; + IMPORT_C void GetContextNameInNif(TRequestStatus& aStatus, const TDesC& aExistingContextName, TInt aIndex, TDes& aContextName) const; + IMPORT_C void DeactivateNIF(TRequestStatus& aStatus, const TDesC& aContextName) const; + +// +// +// MBMS Service Availability +// +// + + class TMbmsServiceAvailabilityV1 : public TPacketType + /** + Holds the service availability parameters needed to register with TSY + for the services to be monitored. + + @publishedPartner + @released + */ + { + public: + IMPORT_C TMbmsServiceAvailabilityV1(); + public: + void InternalizeL(RReadStream& aStream); + void ExternalizeL(RWriteStream& aStream) const; + public: + /** Input Parameter : Temporary Mobile Group Identity */ + TTmgi iTmgi; + + /** Input Parameter : MBMS service mode */ + TMbmsServiceMode iMbmsServiceMode; + + /** Output Parameter : MBMS availability status */ + TMbmsAvailabilityStatus iMbmsAvailabilityStatus; + + /** Input Parameter : MBMS access bearer information */ + TMbmsScope iMbmsAccessBearer; + }; + + //Packaged version of TMbmsServiceAvailabilityV1, used when this structure has to be passed via IPC. + typedef TPckg TMbmsServiceAvailabilityV1Pckg; + + IMPORT_C void NotifyMbmsServiceAvailabilityChange(TRequestStatus& aReqStatus) const; + IMPORT_C void UpdateMbmsMonitorServiceListL (TRequestStatus& aReqStatus, const TMbmsAction aAction, CPcktMbmsMonitoredServiceList* aList = NULL) const; + IMPORT_C void GetMbmsNetworkServiceStatus(TRequestStatus& aStatus, TBool aAttemptAttach, TMbmsNetworkServiceStatus& aServiceStatus) const; + IMPORT_C void NotifyMbmsNetworkServiceStatusChange(TRequestStatus& aStatus, TMbmsNetworkServiceStatus& aServiceStatus) const; + IMPORT_C void EnumerateMbmsMonitorServiceList(TRequestStatus& aStatus, TInt& aCount, TInt& aMaxAllowed) const; + IMPORT_C void EnumerateMbmsActiveServiceList(TRequestStatus& aStatus, TInt& aCount, TInt& aMaxAllowed) const; +protected: + IMPORT_C virtual void ConstructL(); + IMPORT_C virtual void Destruct(); +private: + TInt PrepareOpenSecondary(const TDesC& aOriginalContextName); //< Internal method, not for Client use + CPacketPtrHolder* iEtelPacketPtrHolder; + RMutex iMutex; //< Internal mutex, used to prevent concurent use of PrepareOpenSecondary() and OpenNewContext() + }; + +#include +#endif