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