williamr@2: // Copyright (c) 1997-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: // williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: #if !defined(__ES_SOCK_H__) williamr@2: #define __ES_SOCK_H__ williamr@2: williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: #undef _DEBUG_SOCKET_FUNCTIONS williamr@2: #if defined(_DEBUG) williamr@2: #define _DEBUG_SOCKET_FUNCTIONS williamr@2: #endif williamr@2: williamr@2: #include williamr@2: using Meta::STypeId; williamr@2: using Meta::SMetaDataECom; williamr@2: using Meta::RMetaDataEComContainer; williamr@2: williamr@2: williamr@2: // Forward declaration of CCommsDataObjectBase williamr@2: namespace ESock williamr@2: { williamr@2: class CCommsDataObjectBase; williamr@2: } williamr@2: williamr@2: /** williamr@2: Name of ESock server in EKA2 williamr@2: @internalComponent williamr@2: */ williamr@2: _LIT(SOCKET_SERVER_NAME, "!SocketServer"); williamr@2: williamr@2: /** williamr@2: Canonical names for the core ESOCKSVR modules williamr@2: */ williamr@2: _LIT8(SOCKET_SERVER_MAIN_MODULE_NAME, "ESock_Main"); // Worker 0 williamr@2: _LIT8(SOCKET_SERVER_IP_MODULE_NAME, "ESock_IP"); // Worker 1 williamr@2: _LIT8(SOCKET_SERVER_BT_MODULE_NAME, "ESock_Bt"); // Worker 2 williamr@2: _LIT8(SOCKET_SERVER_IR_MODULE_NAME, "ESock_Ir"); // Worker 3 williamr@2: _LIT8(SOCKET_SERVER_SMSWAP_MODULE_NAME, "ESock_SmsWap"); // Worker 4 williamr@2: williamr@2: /** williamr@2: Id of the network layer. williamr@2: @publishedPartner williamr@2: */ williamr@2: const TUint KCommsNetworkLayerId = 1; williamr@2: williamr@2: /** williamr@2: Default number of message slots. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: const TUint KESockDefaultMessageSlots=8; williamr@2: williamr@2: /** williamr@2: Major Version Number of Connection williamr@2: williamr@2: @internalComponent williamr@2: */ williamr@2: const TUint KConnectionMajorVersionNumber=1; williamr@2: williamr@2: /** williamr@2: Minor Version Number of Connection williamr@2: williamr@2: @internalComponent williamr@2: */ williamr@2: const TUint KConnectionMinorVersionNumber=0; williamr@2: williamr@2: /** williamr@2: Build Version Number of Connection williamr@2: this must not be changed - expected by TCPIP to be >=68 williamr@2: williamr@2: @internalComponent williamr@2: */ williamr@2: const TUint KConnectionBuildVersionNumber=68; williamr@2: williamr@2: /** williamr@2: Size of Maximum SubConnection event williamr@2: williamr@2: @internalComponent williamr@2: @note If you allocate this on the heap, remember to delete through the pointer to the buffer and not any pointers to the events held inside it williamr@2: if you change this value, you will alter the function signature and break the .def file williamr@2: */ williamr@2: const TUint KMaxSubConnectionEventSize = 512; williamr@2: williamr@2: /** williamr@2: SubConnection Unique Id williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: typedef TUint TSubConnectionUniqueId; williamr@2: williamr@2: /** williamr@2: Buffer for notification of any change in the state of SubConnection. williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: typedef TBuf8 TSubConnectionNotificationBuf; williamr@2: // williamr@2: const TUint KUseEmbeddedUniqueId = 0; ///< Used by RConnection to identify cases where the subconnection id is embedded in the data structure williamr@2: williamr@2: const TUint KConnProgressDefault = 0; ///< Default Connection Progress williamr@2: williamr@2: class TSessionPref williamr@2: /** williamr@2: Hint to the Socket Server on what will be the principal usage of the connection. williamr@2: It is by no means a restriction but may result in better performance for the session. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TSessionPref(); williamr@2: public: williamr@2: /** The protocol's address family. For example, for TCP/IP protocols, KAfInet. */ williamr@2: TUint iAddrFamily; williamr@2: /** The protocol type. */ williamr@2: TUint iProtocol; williamr@2: /** Reserved. */ williamr@2: TUint iReserved; williamr@2: /** Reserved. */ williamr@2: TUint iReserved1; williamr@2: /** Reserved. */ williamr@2: TUint iReserved2; williamr@2: /** Reserved. */ williamr@2: TUint iReserved3; williamr@2: /** Reserved. */ williamr@2: TUint iReserved4; williamr@2: }; williamr@2: williamr@2: class TNifProgress williamr@2: /** williamr@2: Contains progress information on a dial-up connection williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: inline TNifProgress(); williamr@2: TInt iStage; williamr@2: TInt iError; williamr@2: }; williamr@2: williamr@2: class TNifAgentInfo williamr@2: /** williamr@2: Contains information describing an agent williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: /** This class Contains version information */ williamr@2: TVersion iVersion; williamr@2: williamr@2: /** This class Defines a modifiable buffer descriptor that can contain the name of a reference counting object */ williamr@2: TName iName; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Buffer for Network Interface Progress williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TPckgBuf TNifProgressBuf; williamr@2: williamr@2: /** williamr@2: Socket address offsets. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: struct SSockAddr williamr@2: /** Socket address offsets. williamr@2: williamr@2: This class defines the internal offsets of data members for the TSockAddr williamr@2: class. */ williamr@2: { williamr@2: /** Address family of socket address */ williamr@2: TUint iFamily; williamr@2: /** Port (or equivilent) number */ williamr@2: TUint iPort; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Maximum sockets address size. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: const TUint KMaxSockAddrSize=0x20; williamr@2: williamr@2: class TSockAddr : public TBuf8 williamr@2: /** Represents an end point address. williamr@2: williamr@2: Protocols interpret the class within the socket server to route packets and williamr@2: form connections. It can be used on its own or as derived by protocols. The williamr@2: SSockAddr class acts as an offset map for the TSockAddr class which has a williamr@2: family field and a port field. The family field may be used by protocols to williamr@2: "up-cast" the base-class to the correct derived class. The port field is provided williamr@2: because it is a common practice for protocols to use port equivalents in addressing. williamr@2: williamr@2: Writing derived classes: williamr@2: williamr@2: The two protected member functions allow further data members to be defined williamr@2: past the area of the base SSockAddr. In any derived constructor the length williamr@2: of the descriptor should be set to the length of the valid data contained williamr@2: in the address. Subsequent member function calls should also adjust the length williamr@2: if it affects valid data. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TSockAddr(); williamr@2: IMPORT_C TSockAddr(TUint aFamily); williamr@2: IMPORT_C TUint Family() const; williamr@2: IMPORT_C void SetFamily(TUint aFamily); williamr@2: IMPORT_C TUint Port() const; williamr@2: IMPORT_C void SetPort(TUint aPort); williamr@2: IMPORT_C TBool CmpPort(const TSockAddr& anAddr) const; williamr@2: IMPORT_C TInt GetUserLen(); williamr@2: protected: williamr@2: IMPORT_C void SetUserLen(TInt aLen); williamr@2: inline TUint8* UserPtr() const; williamr@2: private: williamr@2: inline SSockAddr* BasePtr() const; williamr@2: }; williamr@2: williamr@2: // Address families (based upon protocol IDs used by ARP/REVARP) williamr@2: /** Default (unspecified) protocol module. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KAFUnspec=0; williamr@2: williamr@2: // Socket types williamr@2: /** Stream socket. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KSockStream=1; williamr@2: /** Datagram socket. */ williamr@2: const TUint KSockDatagram=2; williamr@2: /** Datagrams with sequence numbers. */ williamr@2: const TUint KSockSeqPacket=3; williamr@2: /** Raw socket. */ williamr@2: const TUint KSockRaw=4; williamr@2: williamr@2: // constants for various socket calls - can't be enums cos they're largely defined by protocols williamr@2: // The following constants are used to define level parameters for RSocket::Ioctl(), RSocket::GetOpt() williamr@2: // and RSocket::SetOpt(). williamr@2: /** Generic socket options/commands. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TInt KSOLSocket=1; williamr@2: /** Unspecified level. */ williamr@2: const TInt KLevelUnspecified=0; williamr@2: williamr@2: // Socket options defined by the server. williamr@2: // Used through RSocket::SetOpt(), and RSocket::GetOpt() with anOptionLevel set williamr@2: // to KSOLSocket. Options can be both get and set unless otherwise. williamr@2: // stated. williamr@2: // Notes: williamr@2: // Setting the send and receive buffer sizes explicitly can help to reduce williamr@2: // the memory requirements if many data sockets are used in an application. If a williamr@2: // socket is datagram-oriented and its receive/send buffer size is set williamr@2: // to KSocketBufSizeUndefined, then the initial buffer size will williamr@2: // be KSocketDefaultBufferSize and buffers will grow to accommodate williamr@2: // larger sends/receives. If the buffer size is set explicitly for williamr@2: // datagram-oriented sockets, sends which exceed the set size will fail williamr@2: // with KErrTooBig and receives will be truncated. For stream based williamr@2: // sockets there should be no noticeable effect on client reads, unless the buffer williamr@2: // size is set to a prohibitively low value. williamr@2: /** Debugging enabled or disabled . Values are: williamr@2: williamr@2: (TInt)0. Disabled williamr@2: williamr@2: (TInt)1. Enabled williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KSODebug=1; williamr@2: /** Socket receive buffer size. Values are: williamr@2: williamr@2: KSocketBufSizeUndefined williamr@2: williamr@2: 1 to KMaxTUint: explicit buffer size, supplied as a TPckgBuf */ williamr@2: const TUint KSORecvBuf=2; williamr@2: /** Socket send buffer size. Values are: williamr@2: williamr@2: KSocketBufSizeUndefined williamr@2: williamr@2: 1 to KMaxTUint: explicit buffer size, supplied as a TPckgBuf */ williamr@2: const TUint KSOSendBuf=3; williamr@2: /** Socket nonblocking mode. To set, no option values are required. For getting, williamr@2: values are: williamr@2: williamr@2: (TInt)0. Disabled williamr@2: williamr@2: (TInt)1. Enabled */ williamr@2: const TUint KSONonBlockingIO=4; williamr@2: /** Socket blocking mode. To set, no values are required. For getting, values are: williamr@2: williamr@2: (TInt)0. Disabled williamr@2: williamr@2: (TInt)1. Enabled */ williamr@2: const TUint KSOBlockingIO=5; williamr@2: /** Getting only: gets a bitmask of flags describing the read/write/exception status williamr@2: of the socket. Value is a TInt containing a bitmask of socket status (KSockSelectExcept williamr@2: etc.) constants. */ williamr@2: const TUint KSOSelectPoll=6; williamr@2: /** Getting only: retrieve the number of bytes currently available for reading. williamr@2: Value is a TInt. */ williamr@2: const TUint KSOReadBytesPending=7; williamr@2: /** Getting only: retrieve the urgent data offset (only for stream protocols that williamr@2: support urgent data). williamr@2: Value is a TInt. */ williamr@2: const TUint KSOUrgentDataOffset=8; williamr@2: /** Getting only: retrieves the last error. Value is a TInt. */ williamr@2: const TUint KSOSelectLastError=9; williamr@2: williamr@2: williamr@2: /** williamr@2: Setting only. Enables socket to be transferred to the process with given capabilities. williamr@2: The capabilities set should be supplied as TPckgBuf. williamr@2: Each RSocket::Transfer() call must be enabled by setting this option. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KSOEnableTransfer = 10; williamr@2: williamr@2: /** Setting only. Disables a socket's possibility to be transferred. No option required. williamr@2: @publishedAll williamr@2: @released */ williamr@2: williamr@2: const TUint KSODisableTransfer = 11; williamr@2: williamr@2: // The following constants relating to buffer sizes are defined williamr@2: williamr@2: /** Use default buffer size. */ williamr@2: const TInt KSocketBufSizeUndefined=0; williamr@2: /** Default buffer size. */ williamr@2: const TInt KSocketDefaultBufferSize=4096; williamr@2: williamr@2: //internal williamr@2: const TUint KSocketInternalOptionBit=0x80000000; ///< Must not be set for client requests williamr@2: williamr@2: /** williamr@2: Ioctls williamr@2: williamr@2: Must not be set for client requests williamr@2: williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: const TUint KInternalIoctlBit=0x80000000; williamr@2: williamr@2: /** The aDesc parameter of RSocket::Ioctl() specifies a TUint containing a bitmask williamr@2: of Socket status constants. The completion status will be the subset of those williamr@2: conditions which is now true for the socket. williamr@2: williamr@2: Used through RSocket::Ioctl(), with aLevel set to KSOLSocket. williamr@2: williamr@2: @see KSOSelectPoll parameter to RSocket::GetOpt(), which allows the williamr@2: current select state of the socket to be read synchronously, and KSOSelectLastError, williamr@2: which returns the error code. */ williamr@2: const TUint KIOctlSelect=1; williamr@2: williamr@2: // Select ioctl states williamr@2: // Socket status. See also KSOSelectLastError and KSOSelectPoll. williamr@2: /** Data is available to be read; for listening sockets, a connect is pending. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KSockSelectRead =0x00000001; williamr@2: /** Writing to the socket is not currently blocked by flow-control. */ williamr@2: const TUint KSockSelectWrite =0x00000002; williamr@2: /** An error has occurred. */ williamr@2: const TUint KSockSelectExcept =0x00000004; williamr@2: /** Include tail of prior read datagram as available data (ie indicates next read will be with read continuation) */ williamr@2: const TUint KSockSelectReadContinuation = 0x01000000; williamr@2: williamr@2: // Socket write flags williamr@2: /** The data to be sent is urgent and is given a higher priority than ordinary data in the send queue. williamr@2: KSockWriteUrgent may only be provided as a flag to Send() if the protocol's information flag is marked with williamr@2: KSIUrgentData, otherwise Send() will return with KErrNotSupported. AKA: Out of band or unit data. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KSockWriteUrgent=0x00000001; williamr@2: /** Must not be set for client requests. */ williamr@2: const TUint KSocketInternalWriteBit=0x80000000; williamr@2: /** The top 8 bits are reserved for system purposes; protocols must not define these bits. */ williamr@2: const TUint KSockWriteSystemMask=0xFF000000; williamr@2: williamr@2: // Socket read flags williamr@2: /** Read data without consuming it, data remains in the receive queue. KSockReadPeek may only be provided williamr@2: as a flag to Recv() if the protocol's information flag is marked with KSIPeekData, otherwise Recv() will williamr@2: return with KErrNotSupported. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: const TUint KSockReadPeek=0x00000001; williamr@2: /** Must not be set for client requests. */ williamr@2: const TUint KSocketInternalReadBit=0x80000000; williamr@2: /** Read from datagram in a stream-like fashion (not discarding tails). */ williamr@2: const TUint KSockReadContinuation = 0x01000000; williamr@2: // Types williamr@2: williamr@2: /** Used in structure TProtocolDesc to describes the endianness of a protocol. williamr@2: @publishedAll williamr@2: @released */ williamr@2: enum TByteOrder williamr@2: { williamr@2: /** Big endian */ williamr@2: EBigEndian, williamr@2: /** Little endian */ williamr@2: ELittleEndian, williamr@2: /** Other byte order */ williamr@2: EOtherByteOrder, williamr@2: }; williamr@2: williamr@2: // williamr@2: // Protocol Service information bitmasks. williamr@2: // The following constants are defined for williamr@2: // TServerProtocolDesc and TProtocolDesc williamr@2: // williamr@2: /** The protocol is connectionless. williamr@2: @publishedPartner williamr@2: @released */ williamr@2: const TUint KSIConnectionLess=0x00000001; williamr@2: /** The protocol is reliable. */ williamr@2: const TUint KSIReliable=0x00000002; williamr@2: /** The protocol guarantees in-order delivery. */ williamr@2: const TUint KSIInOrder=0x00000004; williamr@2: /** The protocol is message based. */ williamr@2: const TUint KSIMessageBased=0x00000008; williamr@2: /** The same as message based. */ williamr@2: const TUint KSIDatagram=KSIMessageBased; williamr@2: /** The protocol is stream based. */ williamr@2: const TUint KSIStreamBased=0x00000010; williamr@2: /** The protocol supports a stream like interface but maintains datagram boundaries. */ williamr@2: const TUint KSIPseudoStream=0x00000020; williamr@2: /** The protocol offers an expedited data service. */ williamr@2: const TUint KSIUrgentData=0x00000040; williamr@2: /** The protocol can send user data on a connection request. */ williamr@2: const TUint KSIConnectData=0x00000080; williamr@2: /** The protocol can send user data on a disconnect request. */ williamr@2: const TUint KSIDisconnectData=0x00000100; williamr@2: /** The protocol supports broadcast addresses. */ williamr@2: const TUint KSIBroadcast=0x00000200; williamr@2: /** The protocol supports point to multi-point connections. */ williamr@2: const TUint KSIMultiPoint=0x00000400; williamr@2: /** The protocol supports a quality of service metric. */ williamr@2: const TUint KSIQOS=0x00000800; williamr@2: /** The protocol is write only. */ williamr@2: const TUint KSIWriteOnly=0x00001000; williamr@2: /** The protocol is read only. */ williamr@2: const TUint KSIReadOnly=0x00002000; williamr@2: /** The protocol supports graceful close. */ williamr@2: const TUint KSIGracefulClose=0x00004000; williamr@2: /** The same socket can be reconnected if it disconnects (for whatever reason). */ williamr@2: const TUint KSICanReconnect=0x00008000; williamr@2: /** Protocol supports peeking (looking at the data without removing it from the williamr@2: protocol). */ williamr@2: const TUint KSIPeekData=0x00010000; williamr@2: /** Protocol is to be informed of the identity of the client (i.e. process ID, williamr@2: thread ID and UID) of each SAP (i.e. Socket Service Provider) created. williamr@2: @see KSoOwnerInfo and TSoOwnerInfo */ williamr@2: const TUint KSIRequiresOwnerInfo=0x00020000; // SetOption(KSoOwnerInfo) invoked on each SAP williamr@2: williamr@2: // williamr@2: // Naming service constants williamr@2: // The following constants are defined for williamr@2: // TServerProtocolDesc and TProtocolDesc williamr@2: // williamr@2: /** Protocol supports resolving human readable entity names into network addresses williamr@2: (like DNS). williamr@2: @publishedPartner williamr@2: @released */ williamr@2: const TUint KNSNameResolution=0x00000001; williamr@2: /** Network naming is hierarchical. */ williamr@2: const TUint KNSHierarchicalNaming=0x00000002; williamr@2: /** @deprecated Use KNSHierarchicalNaming instead. */ williamr@2: const TUint KNSHeirarchicalNaming=0x00000002; williamr@2: /** Addressing is dynamic and should be attempted every time before connecting williamr@2: (like IrDA). */ williamr@2: const TUint KNSRemoteDiscovery=0x00000004; williamr@2: /** Protocol supports service name to port number resolution. (For example, you williamr@2: can look up TCP to get port 48.) */ williamr@2: const TUint KNSServiceResolution=0x00000008; williamr@2: /** Protocol supports additions to the name database. */ williamr@2: const TUint KNSNameRegistration=0x00000010; williamr@2: /** Protocol supports additions to the service database. */ williamr@2: const TUint KNSServiceRegistration=0x00000020; williamr@2: /** Addressing is dynamic - i.e. name to address mapping may change (like IrDA williamr@2: which randomly chooses machine addresses.) */ williamr@2: const TUint KNSDynamicAddressing=0x00000040; williamr@2: /** Protocol has another database which is defined by the protocol. */ williamr@2: const TUint KNSInfoDatabase=0x00000080; williamr@2: /** Protocol may request Socket Server to startup a connection on its behalf (via williamr@2: the KErrCompletion error code)*/ williamr@2: const TUint KNSRequiresConnectionStartup=0x00000100; williamr@2: williamr@2: // Security Schemes williamr@2: // The following constants are defined for williamr@2: // TServerProtocolDesc and TProtocolDesc williamr@2: /** No security williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KSocketNoSecurity=0x00000000; williamr@2: /** Secure Sockets Layer. williamr@2: williamr@2: @see CSecureSocket */ williamr@2: const TUint KSecureSockets=0x00000001; williamr@2: williamr@2: // Special message sizes williamr@2: // The following constants are defined for williamr@2: // TServerProtocolDesc and TProtocolDesc williamr@2: /** Reads and writes can be of any size: the data is treated as a stream. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TInt KSocketMessageSizeIsStream=0; williamr@2: /** Depends on lower layer or is dynamic. */ williamr@2: const TInt KSocketMessageSizeUndefined=1; williamr@2: /** Data is packet-oriented but packets can be of any size (i.e. the remote end williamr@2: must specify a Read of the same size as your Write, but there is no limit williamr@2: on this size.) */ williamr@2: const TInt KSocketMessageSizeNoLimit=-1; williamr@2: williamr@2: williamr@2: /** Undefined socket type. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TUint KUndefinedSockType=0xFFFFFFFF; williamr@2: williamr@2: williamr@2: /** Undefined socket type. williamr@2: Undefined Protocol williamr@2: @released */ williamr@2: const TUint KUndefinedProtocol=0xFFFFFFFE; williamr@2: williamr@2: /** Contains the name of a protocol in structure TProtocolDesc. williamr@2: @publishedAll williamr@2: @released */ williamr@2: typedef TBuf<0x20> TProtocolName; williamr@2: /** Defines a descriptor to hold a service name string. */ williamr@2: typedef TBuf<0x20> TServiceName; williamr@2: /** Defines a descriptor to hold a host name string. */ williamr@2: typedef TBuf<0x100> THostName; williamr@2: williamr@2: /** williamr@2: Socket protocol information for use by clients williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: struct TProtocolDesc williamr@2: /** Socket protocol information for use by clients. */ williamr@2: { williamr@2: public: williamr@2: /** The name of the protocol williamr@2: williamr@2: @see TProtocolName */ williamr@2: TProtocolName iName; williamr@2: /** An integer identifying the protocol's address family. For example, for TCP/IP williamr@2: protocols, KAfInet. */ williamr@2: TUint iAddrFamily; williamr@2: /** An integer specifying the socket type. For example, for TCP, KSockStream. */ williamr@2: TUint iSockType; williamr@2: /** An integer specifying the specific protocol. For example, for TCP, KProtocolInetTcp. */ williamr@2: TUint iProtocol; williamr@2: /** The version of the protocol williamr@2: williamr@2: @see TVersion */ williamr@2: TVersion iVersion; williamr@2: /** The byte order that the protocol uses williamr@2: williamr@2: @see TByteOrder */ williamr@2: TByteOrder iByteOrder; williamr@2: /** A bit mask of service information flags. williamr@2: williamr@2: @see KSockStream etc. */ williamr@2: TUint iServiceInfo; williamr@2: /** A bit mask indicating if the protocol supports name resolution, service resolution, williamr@2: or database access services. williamr@2: williamr@2: @see KNSNameResolution etc. */ williamr@2: TUint iNamingServices; williamr@2: /** A bitmask of security flags. williamr@2: williamr@2: @see KSocketNoSecurity etc. */ williamr@2: TUint iSecurity; williamr@2: /** The message size of datagram protocols. williamr@2: williamr@2: @see KSocketMessageSizeIsStream etc. */ williamr@2: TInt iMessageSize; williamr@2: }; williamr@2: williamr@2: // socket errors williamr@2: /** This error is returned from operations on non-blocking sockets that cannot williamr@2: be completed immediately, for example receive when no data is queued for reading. williamr@2: It is a non-fatal error, and the operation should be retried later. williamr@2: @publishedAll williamr@2: @released */ williamr@2: const TInt KErrWouldBlock=-1000; williamr@2: williamr@2: /** williamr@2: socket errors williamr@2: williamr@2: The value -17210 is taken from the range allocated for Esock (beginning at -17200) williamr@2: A gap has been left between the currently existing vals and this one. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: const TInt KErrConnectionTerminated=-17210; williamr@2: williamr@2: const TInt KErrCannotFindProtocol = -17211; williamr@2: williamr@2: /** Used in RSocket read and write calls to pass the length of data read and written. williamr@2: @publishedAll williamr@2: @released */ williamr@2: typedef TPckgBuf TSockXfrLength; williamr@2: williamr@2: class TSockIO williamr@2: /** williamr@2: IPC Data holder williamr@2: williamr@2: @internalComponent williamr@2: */ williamr@2: { williamr@2: public: williamr@2: const TSockXfrLength* iLength; ///< length of data read and written williamr@2: TUint iFlags; ///< Flag williamr@2: TSockAddr* iAddr; ///< Socket Address williamr@2: }; williamr@2: williamr@2: class TSockIOBufC : public TPckgC williamr@2: /** @internalComponent */ williamr@2: { williamr@2: public: williamr@2: inline TSockIOBufC(); williamr@2: TSockIO iArgs; williamr@2: }; williamr@2: williamr@2: class TSockOpen williamr@2: /** @internalComponent */ williamr@2: { williamr@2: public: williamr@2: TUint iAddrFamily; williamr@2: TUint iSockType; williamr@2: TUint iProtocol; williamr@2: TInt iHandle; williamr@2: TInt iReserved; williamr@2: }; williamr@2: williamr@2: class TSockOpenBufC : public TPckgC williamr@2: /** @internalComponent */ williamr@2: { williamr@2: public: williamr@2: inline TSockOpenBufC(); williamr@2: TSockOpen iArgs; williamr@2: }; williamr@2: williamr@2: class RSocket; williamr@2: class RConnection; williamr@2: class RSocketServ : public RSessionBase williamr@2: /** Provides the Connect() function to create an IPC communication channel to the williamr@2: socket server. To close the channel RHandleBase provides a RHandleBase::Close() williamr@2: function. williamr@2: williamr@2: The prime use for instances of RSocketServ is to establish subsession communications williamr@2: for RSocket, RHostResolver, RNetDatabase and RConnection. Any of the resources williamr@2: which are open using the session are automatically closed when the session is williamr@2: terminated, however it is more appropriate to issue a Close() on each subsession object williamr@2: before closing the session. williamr@2: williamr@2: The following operations are also provided: williamr@2: williamr@2: NumProtocols() - enumerates the number of protocols of which the socket server williamr@2: is currently aware. williamr@2: williamr@2: GetProtocolInfo()/FindProtocol() - return information about a specific protocol. williamr@2: williamr@2: StartProtocol() - loads a protocol asynchronously. williamr@2: williamr@2: @note This class is not intended for user derivation. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C RSocketServ(); williamr@2: IMPORT_C TInt Connect(TUint aMessageSlots=KESockDefaultMessageSlots); williamr@2: IMPORT_C TInt Connect(const TSessionPref& aPref, TUint aMessageSlots=KESockDefaultMessageSlots); williamr@2: IMPORT_C TVersion Version() const; williamr@2: IMPORT_C TInt NumProtocols(TUint& aCount); williamr@2: IMPORT_C TInt GetProtocolInfo(TUint anIndex,TProtocolDesc& aProtocol); williamr@2: IMPORT_C TInt FindProtocol(const TProtocolName& aName,TProtocolDesc& aProtocol); williamr@2: IMPORT_C void StartProtocol(TUint anAddrFamily,TUint aSockType,TUint aProtocol,TRequestStatus& aStatus); williamr@2: IMPORT_C void StopProtocol(TUint anAddrFamily,TUint aSockType,TUint aProtocol,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt InstallExtension(const TDesC& aDllName, const TDesC& aArgs=TPtrC()); williamr@2: IMPORT_C void SetExclusiveMode(TRequestStatus& aStatus); williamr@2: IMPORT_C void ClearExclusiveMode(); williamr@2: IMPORT_C TInt __DbgMarkHeap(); williamr@2: IMPORT_C TInt __DbgCheckHeap(TInt aCount); williamr@2: IMPORT_C TInt __DbgMarkEnd(TInt aCount); williamr@2: IMPORT_C TInt __DbgFailNext(TInt aCount); williamr@2: IMPORT_C TBool __DbgCheckFailNext() const; williamr@2: IMPORT_C TInt __DbgFailNextMbuf(TInt aCount); williamr@2: IMPORT_C TInt __DbgSetMbufPoolLimit(TInt asize); williamr@2: IMPORT_C TInt __DbgCheckMbuf(TInt asize); williamr@2: IMPORT_C TInt __DbgMbufFreeSpace(); williamr@2: IMPORT_C TInt __DbgMbufTotalSpace(); williamr@2: }; williamr@2: williamr@2: NONSHARABLE_CLASS(RCommsSubSession) : public RSubSessionBase williamr@2: { williamr@2: friend class RCommsApiExtensionBase; williamr@2: }; williamr@2: williamr@2: class RSubConnection; williamr@2: class RSocket : public RCommsSubSession williamr@2: /** Provides a client endpoint to a protocol. It provides functions for socket williamr@2: creation, reading, writing, passive connection, active connection, setting williamr@2: addresses and querying addresses. Use this class as an endpoint for network williamr@2: type communications. It provides the following services: williamr@2: williamr@2: reading from and writing to protocol williamr@2: williamr@2: binding to addresses williamr@2: williamr@2: active connecting williamr@2: williamr@2: passive connection through the listen/accept model williamr@2: williamr@2: Before using any of these services, a connection to a socket server session williamr@2: must have been made and the socket must be open. williamr@2: williamr@2: @publishedAll williamr@2: @released Since v5.0*/ williamr@2: { williamr@2: friend class RSocketServ; williamr@2: public: williamr@2: /** Used in structure TProtocolDesc to describes the endianness of a protocol. */ williamr@2: enum TShutdown williamr@2: { williamr@2: /** Complete when socket output/input stopped. */ williamr@2: ENormal, williamr@2: /** Stop socket input and complete when output is stopped. */ williamr@2: EStopInput, williamr@2: /** Stop socket output and complete when input is stopped. */ williamr@2: EStopOutput, williamr@2: /** Stop socket input/output and complete (abortive close). */ williamr@2: EImmediate williamr@2: }; williamr@2: public: williamr@2: IMPORT_C RSocket(); williamr@2: williamr@2: IMPORT_C TInt Open(RSocketServ& aServer,TUint addrFamily,TUint sockType,TUint protocol); williamr@2: IMPORT_C TInt Open(RSocketServ& aServer,TUint addrFamily,TUint sockType,TUint protocol, RConnection& aConnection); williamr@2: IMPORT_C TInt Open(RSocketServ& aServer,TUint addrFamily,TUint sockType,TUint protocol, RSubConnection& aSubConnection); williamr@2: IMPORT_C TInt Open(RSocketServ &aServer,const TDesC& aName); williamr@2: IMPORT_C TInt Open(RSocketServ& aServer); williamr@2: IMPORT_C void Send(const TDesC8& aDesc,TUint someFlags,TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void Send(const TDesC8& aDesc,TUint someFlags,TRequestStatus& aStatus,TSockXfrLength& aLen); williamr@2: IMPORT_C void CancelSend(); williamr@2: williamr@2: IMPORT_C void Recv(TDes8& aDesc,TUint flags,TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void Recv(TDes8& aDesc,TUint flags,TRequestStatus& aStatus,TSockXfrLength& aLen); williamr@2: williamr@2: IMPORT_C void RecvOneOrMore(TDes8& aDesc,TUint flags,TRequestStatus& aStatus,TSockXfrLength& aLen); williamr@2: IMPORT_C void CancelRecv(); williamr@2: williamr@2: IMPORT_C void Read(TDes8& aDesc,TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelRead(); williamr@2: williamr@2: IMPORT_C void Write(const TDesC8& aDesc,TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelWrite(); williamr@2: IMPORT_C void SendTo(const TDesC8& aDesc,TSockAddr& anAddr,TUint flags,TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void SendTo(const TDesC8& aDesc,TSockAddr& anAddr,TUint flags,TRequestStatus& aStatus,TSockXfrLength& aLen); williamr@2: williamr@2: IMPORT_C void RecvFrom(TDes8& aDesc,TSockAddr& anAddr,TUint flags,TRequestStatus& aStatus); williamr@2: williamr@2: IMPORT_C void RecvFrom(TDes8& aDesc,TSockAddr& anAddr,TUint flags,TRequestStatus& aStatus,TSockXfrLength& aLen); williamr@2: IMPORT_C void Connect(TSockAddr& anAddr,TRequestStatus& aStatus); williamr@2: IMPORT_C void Connect(TSockAddr& anAddr,const TDesC8& aConnectDataOut,TDes8& aConnectDataIn,TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelConnect(); williamr@2: IMPORT_C TInt Bind(TSockAddr& anAddr); williamr@2: IMPORT_C TInt SetLocalPort(TInt aPort); williamr@2: IMPORT_C void Accept(RSocket& aBlankSocket,TRequestStatus& aStatus); williamr@2: IMPORT_C void Accept(RSocket& aBlankSocket,TDes8& aConnectData,TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelAccept(); williamr@2: IMPORT_C TInt Listen(TUint qSize); williamr@2: IMPORT_C TInt Listen(TUint qSize,const TDesC8& aConnectData); williamr@2: IMPORT_C TInt SetOpt(TUint anOptionName,TUint anOptionLevel,const TDesC8& anOption=TPtrC8(NULL,0)); williamr@2: IMPORT_C TInt SetOpt(TUint anOptionName,TUint anOptionLevel,TInt anOption); williamr@2: IMPORT_C TInt GetOpt(TUint anOptionName,TUint anOptionLevel,TDes8& anOption); williamr@2: IMPORT_C TInt GetOpt(TUint anOptionName,TUint anOptionLevel,TInt& anOption); williamr@2: IMPORT_C void Ioctl(TUint aCommand,TRequestStatus& aStatus,TDes8* aDesc=NULL,TUint aLevel=KLevelUnspecified); williamr@2: IMPORT_C void CancelIoctl(); williamr@2: IMPORT_C TInt GetDisconnectData(TDes8& aDesc); williamr@2: IMPORT_C void LocalName(TSockAddr& anAddr); williamr@2: IMPORT_C TUint LocalPort(); williamr@2: IMPORT_C void RemoteName(TSockAddr& anAddr); williamr@2: IMPORT_C void Close(); williamr@2: IMPORT_C void Shutdown(TShutdown aHow,TRequestStatus& aStatus); williamr@2: IMPORT_C void Shutdown(TShutdown aHow,const TDesC8& aDisconnectDataOut,TDes8& aDisconnectDataIn,TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelAll(); williamr@2: IMPORT_C TInt Info(TProtocolDesc& aProtocol); williamr@2: IMPORT_C TInt Name(TName& aName); williamr@2: IMPORT_C TInt Transfer(RSocketServ& aServer, const TDesC& aName); williamr@2: }; williamr@2: williamr@2: class TNameRecord williamr@2: /** Contains the results of name queries. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: inline TNameRecord(); williamr@2: /** williamr@2: @internalComponent williamr@2: */ williamr@2: enum {EAlias=0x00000001,}; williamr@2: /** A host name williamr@2: williamr@2: @see THostName */ williamr@2: THostName iName; williamr@2: /** An address williamr@2: williamr@2: @see TSockAddr */ williamr@2: TSockAddr iAddr; williamr@2: /** Flags indicating some attribute about the name, i.e. EAlias */ williamr@2: TInt iFlags; williamr@2: }; williamr@2: williamr@2: /** Packages the TNameRecord class so that it can be passed between a client and williamr@2: the socket server. williamr@2: @publishedAll williamr@2: @released */ williamr@2: typedef TPckgBuf TNameEntry; williamr@2: williamr@2: class RHostResolver : public RSubSessionBase williamr@2: /** Provides an interface to host name resolution services, such as DNS, that may williamr@2: be provided by particular protocol modules. williamr@2: williamr@2: The interface provides functions to access the following facilities: williamr@2: williamr@2: Obtaining names from addresses. williamr@2: williamr@2: Obtaining addresses from names. williamr@2: williamr@2: Getting and setting local host name. williamr@2: williamr@2: Not all actual services provide all these facilities. You should also consult williamr@2: the documentation on the protocol you are intending to use. Functions return williamr@2: KErrNotSupported if the protocol does not support a given operation. Note williamr@2: that a description of the protocol family name resolution capabilities is williamr@2: available at run-time from TProtocolDesc::iNamingServices. williamr@2: williamr@2: Before using any service, a connection to a socket server session must be williamr@2: made. williamr@2: williamr@2: Each function is available in both synchronous and asynchronous versions. williamr@2: williamr@2: A single RHostResolver can only perform one request of any type at once. A williamr@2: client is panicked if it makes two requests. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TInt Open(RSocketServ& aSocketServer,TUint anAddrFamily,TUint aProtocol); williamr@2: IMPORT_C TInt Open(RSocketServ& aSocketServer,TUint anAddrFamily,TUint aProtocol, RConnection& aConnection); williamr@2: IMPORT_C void GetByName(const TDesC& aName,TNameEntry& aResult,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt GetByName(const TDesC& aName,TNameEntry& aResult); williamr@2: IMPORT_C void Next(TNameEntry& aResult,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt Next(TNameEntry& aResult); williamr@2: IMPORT_C void GetByAddress(const TSockAddr& anAddr,TNameEntry& aResult,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt GetByAddress(const TSockAddr& anAddr,TNameEntry& aResult); williamr@2: IMPORT_C TInt GetHostName(TDes& aName); williamr@2: IMPORT_C void GetHostName(TDes& aName,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt SetHostName(const TDesC& aName); williamr@2: IMPORT_C void Close(); williamr@2: IMPORT_C void Cancel(); williamr@2: williamr@2: IMPORT_C void Query(const TDesC8& aQuery, TDes8& aResult, TRequestStatus& aStatus); williamr@2: IMPORT_C TInt Query(const TDesC8& aQuery, TDes8& aResult); williamr@2: IMPORT_C void QueryGetNext(TDes8& aResult, TRequestStatus& aStatus); williamr@2: IMPORT_C TInt QueryGetNext(TDes8& aResult); williamr@2: williamr@2: private: williamr@2: }; williamr@2: williamr@2: /** williamr@2: Port number on service williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: typedef TPckgBuf TPortNum; williamr@2: williamr@2: class RServiceResolver : public RSubSessionBase williamr@2: /** Provides an interface to resolver service names and ports. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TInt Open(RSocketServ& aSocketServer,TUint anAddrFamily,TUint sockType,TUint aProtocol); williamr@2: IMPORT_C void GetByName(const TDesC& aName,TPortNum& aPort,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt GetByName(const TDesC& aName,TPortNum& aPort); williamr@2: IMPORT_C void GetByNumber(const TUint aPort,TDes& aName,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt GetByNumber(const TUint aPort,TDes& aName); williamr@2: IMPORT_C void RegisterService(const TDesC& aName,const TUint& aPort,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt RegisterService(const TDesC& aName,const TUint& aPort); williamr@2: IMPORT_C void RemoveService(const TDesC& aName,const TUint& aPort,TRequestStatus& aStatus); williamr@2: IMPORT_C TInt RemoveService(const TDesC& aName,const TUint& aPort); williamr@2: IMPORT_C void Close(); williamr@2: IMPORT_C void Cancel(); williamr@2: private: williamr@2: }; williamr@2: williamr@2: class RNetDatabase: public RSubSessionBase williamr@2: /** Provides an interface to network databases, such as LM-IAS with IrDA, that williamr@2: may be provided by particular protocol modules. williamr@2: williamr@2: Before making any queries, a connection to a socket server session must be williamr@2: made. williamr@2: williamr@2: Each function is available in both synchronous and asynchronous versions. williamr@2: williamr@2: A single RNetDatabase can only perform one request of any type at once. A williamr@2: client is panicked if it makes two requests. williamr@2: williamr@2: Particular database access services will specify the format of queries and williamr@2: of responses. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TInt Open(RSocketServ& aSocketServer,TUint anAddrFamily,TUint aProtocol); williamr@2: IMPORT_C void Query(const TDesC8& aQuery,TDes8& aResult,TRequestStatus& aStat); williamr@2: IMPORT_C TInt Query(const TDesC8& aQuery,TDes8& aResult); williamr@2: IMPORT_C void Add(const TDesC8& anItem,TRequestStatus& aStat); williamr@2: IMPORT_C TInt Add(const TDesC8& anItem); williamr@2: IMPORT_C void Remove(const TDesC8& anItem,TRequestStatus& aStat); williamr@2: IMPORT_C TInt Remove(const TDesC8& anItem); williamr@2: IMPORT_C void Close(); williamr@2: IMPORT_C void Cancel(); williamr@2: private: williamr@2: }; williamr@2: williamr@2: /** williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: williamr@2: const TUint KCOLConnection = 1; // level for RConnection::Control() williamr@2: const TUint KCOLProvider = 2; // level for RConnection::Control() williamr@2: const TUint KConnInternalOptionBit = 0x80000000; // Must not be set for client requests williamr@2: const TUint KConnWriteUserDataBit = 0x40000000; williamr@2: const TUint KConnReadUserDataBit = 0x20000000; williamr@2: williamr@2: /** williamr@2: Level for RConnection::Control() williamr@2: williamr@2: @publishedPartner williamr@2: @deprecated in 8.1 williamr@2: @capability NetworkControl Restrict access to connection clients williamr@2: @ref RConnection::Control() williamr@2: */ williamr@2: const TUint KCoEnumerateConnectionClients = 1 | (KConnWriteUserDataBit | KConnReadUserDataBit); williamr@2: williamr@2: /** williamr@2: Level for RConnection::Control() williamr@2: Information about client williamr@2: williamr@2: @publishedPartner williamr@2: @deprecated in 8.1 williamr@2: @capability NetworkControl Restrict access to connection client info williamr@2: @ref RConnection::Control() williamr@2: */ williamr@2: const TUint KCoGetConnectionClientInfo = 2 | (KConnWriteUserDataBit | KConnReadUserDataBit); williamr@2: williamr@2: /** @internalTechnology */ williamr@2: const TUint KCoEnumerateConnectionSockets = 3 | (KConnWriteUserDataBit | KConnReadUserDataBit); williamr@2: williamr@2: /** williamr@2: Level for RConnection::Control() williamr@2: Information about connected socket williamr@2: williamr@2: @publishedPartner williamr@2: @deprecated williamr@2: @capability NetworkControl Restrict access to socket info on a connection williamr@2: @ref RConnection::Control() williamr@2: */ williamr@2: const TUint KCoGetConnectionSocketInfo = 4 | (KConnWriteUserDataBit | KConnReadUserDataBit); williamr@2: williamr@2: /** williamr@2: Default connection type williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: const TUint KConnectionTypeDefault = 0x0800; // KAfInet is the default connection type williamr@2: williamr@2: /** williamr@2: Setting only: enable processes to "clone" open this RConnection instance via a call to williamr@2: RConnection::Open(..., TName&), as long as they conform to the security policy williamr@2: passed as argument (specified as a TSecurityPolicyBuf). williamr@2: @internalTechnology williamr@2: */ williamr@2: const TUint KCoEnableCloneOpen = 5 | (KConnReadUserDataBit); williamr@2: williamr@2: /** williamr@2: Setting only: disable "clone" open of this RConnection instance, which was enabled via williamr@2: a previous KCoEnableCloneOpen option. williamr@2: @internalTechnology williamr@2: */ williamr@2: const TUint KCoDisableCloneOpen = 6 | (KConnReadUserDataBit); williamr@2: williamr@2: class TConnPref; williamr@2: class TSubConnectionInfo; williamr@2: class TSubConnectionEvent; williamr@2: williamr@2: class RConnection : public RCommsSubSession williamr@2: /** williamr@2: williamr@2: The management interface for a network connection or subconnection. williamr@2: williamr@2: Provides clients with the following functionality: williamr@2: williamr@2: Opening and closing the connection williamr@2: williamr@2: Starting a connection, which means associating it with a new underlying interface williamr@2: williamr@2: Attaching the RConnection instance to an existing interface williamr@2: williamr@2: Stopping the connection, which means disassociating it from the underlying williamr@2: interface williamr@2: williamr@2: Obtaining progress information and notification during connection start-up williamr@2: williamr@2: Notifying when subconnections come up and go down williamr@2: williamr@2: Notifying when there is a service change for the connection williamr@2: williamr@2: Notifying when a given amount of data has been sent or received on a connection williamr@2: or subconnection williamr@2: williamr@2: Reading CommDB fields specific to an active connection williamr@2: williamr@2: Collecting statistical information on the network connection and subconnections. williamr@2: A UI component can display the collected statistical information in order williamr@2: to allow the user to examine the status of connections. The information that williamr@2: can be gathered is the following: williamr@2: williamr@2: All available internet access point names and internet access point 'friendly' williamr@2: names as appropriate for each network (GPRS/UMTS) connection williamr@2: williamr@2: Enumerating the currently active connections and subconnections williamr@2: williamr@2: The current status of all network connections e.g. active/suspended williamr@2: williamr@2: The amount of data (in bytes) transferred uplink and downlink by the network williamr@2: connection and subconnections williamr@2: williamr@2: The amount of time each network connection has been active (in seconds) williamr@2: williamr@2: The current status of the connection and subconnections with respect to data williamr@2: transfer, i.e. active/inactive williamr@2: williamr@2: The Quality of Service profile associated with each Packet Data Protocol (GPRS/UMTS) williamr@2: context, e.g. low/medium/high williamr@2: williamr@2: Note that several of the new functions are asynchronous. It is essential for williamr@2: these calls that the client ensures that the parameters they pass to the RConnection williamr@2: API remain in scope for the duration of the asynchronous call. williamr@2: @publishedAll williamr@2: @released since v7.0s */ williamr@2: { williamr@2: public: williamr@2: /** Identifies the intended use of the connection. */ williamr@2: enum TConnAttachType williamr@2: { williamr@2: /** The application wishes to use the connection for normal data transfer, and williamr@2: the idle timers will take that into account. */ williamr@2: EAttachTypeNormal, williamr@2: /** The system control type of application wishes to monitor the state of the connection williamr@2: without otherwise affecting it. In particular, the interface idle timers will williamr@2: not be affected. */ williamr@2: EAttachTypeMonitor williamr@2: }; williamr@2: /** Identifies the type of requirement for stopping the connection. */ williamr@2: enum TConnStopType williamr@2: { williamr@2: /** Any sockets or host/service resolvers associated with this interface will be williamr@2: errored with KErrCancel. */ williamr@2: williamr@2: EStopNormal, williamr@2: williamr@2: /** Any sockets or host/service resolvers associated with this interface will be williamr@2: errored with KErrConnectionTerminated and should clean up quietly without williamr@2: prompting the user. */ williamr@2: williamr@2: EStopAuthoritative williamr@2: }; williamr@2: williamr@2: /** williamr@2: Connection Management Interface williamr@2: */ williamr@2: IMPORT_C RConnection(); williamr@2: IMPORT_C virtual ~RConnection(); williamr@2: IMPORT_C TInt Open(RSocketServ& aSocketServer, TUint aConnectionType = KConnectionTypeDefault); williamr@2: IMPORT_C TInt Open(RSocketServ& aSocketServer, TName& aName); williamr@2: IMPORT_C void Close(); williamr@2: williamr@2: IMPORT_C void Start(TRequestStatus& aStatus); williamr@2: IMPORT_C void Start(TConnPref& aPref, TRequestStatus& aStatus); williamr@2: IMPORT_C TInt Start(); williamr@2: IMPORT_C TInt Start(TConnPref& aPref); williamr@2: IMPORT_C TInt Stop(); williamr@2: IMPORT_C TInt Stop(TConnStopType aStopType); williamr@2: IMPORT_C TInt Stop(TSubConnectionUniqueId aSubConnectionUniqueId); williamr@2: IMPORT_C TInt Stop(TSubConnectionUniqueId aSubConnectionUniqueId, TConnStopType aStopType); williamr@2: williamr@2: IMPORT_C void WaitForIncoming(RSubConnection& aIncomingSubConnection, TRequestStatus& aStatus); williamr@2: IMPORT_C TInt WaitForIncoming(RSubConnection& aIncomingSubConnection); williamr@2: IMPORT_C void CancelWaitForIncoming(); williamr@2: williamr@2: IMPORT_C void ProgressNotification(TNifProgressBuf& aProgress, TRequestStatus& aStatus, TUint aSelectedProgress = KConnProgressDefault); williamr@2: IMPORT_C void ProgressNotification(TSubConnectionUniqueId aSubConnectionUniqueId, TNifProgressBuf& aProgress, TRequestStatus& aStatus, TUint aSelectedProgress = KConnProgressDefault); williamr@2: IMPORT_C void CancelProgressNotification(); williamr@2: IMPORT_C void CancelProgressNotification(TSubConnectionUniqueId aSubConnectionUniqueId); williamr@2: IMPORT_C TInt Progress(TNifProgress& aProgress); williamr@2: IMPORT_C TInt Progress(TSubConnectionUniqueId aSubConnectionUniqueId, TNifProgress& aProgress); williamr@2: IMPORT_C TInt LastProgressError(TNifProgress& aProgress); williamr@2: IMPORT_C void ServiceChangeNotification(TUint32& aNewISPId, TDes& aNewServiceType, TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelServiceChangeNotification(); williamr@2: williamr@2: IMPORT_C TInt GetIntSetting(const TDesC& aSettingName, TUint32& aValue); williamr@2: IMPORT_C TInt GetBoolSetting(const TDesC& aSettingName, TBool& aValue); williamr@2: IMPORT_C TInt GetDesSetting(const TDesC& aSettingName, TDes8& aValue); williamr@2: IMPORT_C TInt GetDesSetting(const TDesC& aSettingName, TDes16& aValue); williamr@2: IMPORT_C TInt GetLongDesSetting(const TDesC& aSettingName, TDes& aValue); williamr@2: williamr@2: williamr@2: /** williamr@2: @prototype SymbianOS v9.4 williamr@2: */ williamr@2: IMPORT_C TInt GetParameters(ESock::CCommsDataObjectBase& aDataObject); williamr@2: williamr@2: IMPORT_C TInt Name(TName& aName); williamr@2: williamr@2: IMPORT_C TInt EnumerateConnections(TUint& aCount); williamr@2: IMPORT_C TInt GetConnectionInfo(TUint aIndex, TDes8& aConnectionInfo); williamr@2: williamr@2: IMPORT_C void AllInterfaceNotification(TDes8& aNotification, TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelAllInterfaceNotification(); williamr@2: williamr@2: IMPORT_C void Ioctl(TUint aOptionLevel, TUint aOptionName, TRequestStatus& aStatus, TDes8* aDesc); williamr@2: IMPORT_C void Ioctl(TUint aOptionLevel, TUint aOptionName, TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelIoctl(); williamr@2: IMPORT_C TInt Control(TUint aOptionLevel, TUint aOptionName, TDes8& aOption); williamr@2: IMPORT_C TInt GetOpt(TUint aOptionLevel, TUint aOptionName, TInt& aOption); williamr@2: IMPORT_C TInt SetOpt(TUint aOptionLevel, TUint aOptionName, TInt aOption = 0); williamr@2: williamr@2: IMPORT_C TInt Attach(const TDesC8& aConnectionInfo, TConnAttachType aAttachType); williamr@2: williamr@2: IMPORT_C TInt EnumerateSubConnections(TUint& aCount); williamr@2: IMPORT_C TInt GetSubConnectionInfo(TDes8& aSubConnectionInfo); williamr@2: IMPORT_C TInt GetSubConnectionInfo(TUint aIndex, TDes8& aSubConnectionInfo); williamr@2: IMPORT_C void AllSubConnectionNotification(TSubConnectionNotificationBuf& aSubConnectionEvent, TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelAllSubConnectionNotification(); williamr@2: williamr@2: IMPORT_C void DataTransferredRequest(TPckg& aUplinkVolume, TPckg& aDownlinkVolume, TRequestStatus& aStatus); williamr@2: IMPORT_C void DataTransferredRequest(TSubConnectionUniqueId aSubConnectionUniqueId, TPckg& aUplinkVolume, TPckg& aDownlinkVolume, TRequestStatus& aStatus); williamr@2: IMPORT_C void DataTransferredCancel(); williamr@2: IMPORT_C void DataTransferredCancel(TSubConnectionUniqueId aSubConnectionUniqueId); williamr@2: IMPORT_C void DataSentNotificationRequest(TUint aThreshold, TPckg& aUplinkVolume, TRequestStatus& aStatus); williamr@2: IMPORT_C void DataSentNotificationRequest(TSubConnectionUniqueId aSubConnectionUniqueId, TUint aThreshold, TPckg& aUplinkVolume, TRequestStatus& aStatus); williamr@2: IMPORT_C void DataSentNotificationCancel(); williamr@2: IMPORT_C void DataSentNotificationCancel(TSubConnectionUniqueId aSubConnectionUniqueId); williamr@2: IMPORT_C void DataReceivedNotificationRequest(TUint aThreshold, TPckg& aDownlinkVolume, TRequestStatus& aStatus); williamr@2: IMPORT_C void DataReceivedNotificationRequest(TSubConnectionUniqueId aSubConnectionUniqueId, TUint aThreshold, TPckg& aDownlinkVolume, TRequestStatus& aStatus); williamr@2: IMPORT_C void DataReceivedNotificationCancel(); williamr@2: IMPORT_C void DataReceivedNotificationCancel(TSubConnectionUniqueId aSubConnectionUniqueId); williamr@2: IMPORT_C void IsConnectionActiveRequest(TUint aSecs, TPckg& aState, TRequestStatus& aStatus); williamr@2: IMPORT_C void IsConnectionActiveCancel(); williamr@2: IMPORT_C void IsSubConnectionActiveRequest(TSubConnectionUniqueId aSubConnectionUniqueId, TUint aSecs, TPckg& aState, TRequestStatus& aStatus); williamr@2: IMPORT_C void IsSubConnectionActiveCancel(TSubConnectionUniqueId aSubConnectionUniqueId); williamr@2: williamr@2: TBool SameSession(TInt aSessionHandle); williamr@2: private: williamr@2: TPckg iNewISPId; williamr@2: TUint32 iReserved[4]; williamr@2: }; williamr@2: williamr@2: class CSubConParameterSet : public SMetaDataECom williamr@2: /** Base class for all RSubConnection parameter sets. williamr@2: williamr@2: @publishedAll williamr@2: @released since v9.0 */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CSubConParameterSet* NewL(const STypeId& aTypeId); williamr@2: virtual ~CSubConParameterSet(); williamr@2: williamr@2: protected: williamr@2: CSubConParameterSet(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CSubConGenericParameterSet : public CSubConParameterSet williamr@2: /** Base class for generic RSubConnection parameter sets. williamr@2: williamr@2: @publishedAll williamr@2: @released since v9.0 */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CSubConGenericParameterSet(); williamr@2: williamr@2: protected: williamr@2: IMPORT_C CSubConGenericParameterSet(); williamr@2: }; williamr@2: williamr@2: class CSubConExtensionParameterSet : public CSubConParameterSet williamr@2: /** Base class for extended RSubConnection parameter sets. williamr@2: williamr@2: @publishedAll williamr@2: @released since v9.0 */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CSubConExtensionParameterSet(); williamr@2: williamr@2: protected: williamr@2: IMPORT_C CSubConExtensionParameterSet(); williamr@2: }; williamr@2: williamr@2: class RSubConParameterBundle; williamr@2: class CSubConParameterBundle; williamr@2: williamr@2: const TInt32 KSubConnParamsInterfaceUid = 0x10204303; williamr@2: const TInt32 KSubConnEventInterfaceUid = 0x10204305; williamr@2: williamr@2: const TInt32 KSubConnGenericParamsImplUid = 0x10204304; williamr@2: const TInt32 KSubConnGenericEventsImplUid = 0x10204306; williamr@2: williamr@2: const TUint32 KSubConGlobalFamily = 0; williamr@2: const TUint32 KSubConQoSFamily = 1; williamr@2: const TUint32 KSubConAuthorisationFamily = 2; williamr@2: const TUint32 KSubConnCallDescrParamsFamily = 3; williamr@2: #ifdef SYMBIAN_NETWORKING_UMTSR5 williamr@2: const TUint32 KSubConnContextDescrParamsFamily = 4; williamr@2: #endif //SYMBIAN_NETWORKING_UMTSR5 williamr@2: williamr@2: class CSubConParameterFamily : public CBase williamr@2: /** Container of RSubConnection parameter sets. williamr@2: williamr@2: For each Parameter Type (Requested, Acceptable and Granted) it williamr@2: contains one generic and 0..N extended parameter sets. williamr@2: williamr@2: @publishedAll williamr@2: @released since v9.0 */ williamr@2: { williamr@2: public: williamr@2: williamr@2: enum TParameterSetType williamr@2: { williamr@2: ERequested = 0, williamr@2: EAcceptable = 1, williamr@2: EGranted = 2, williamr@2: ENumValues = 3 // The number of values in this enum williamr@2: }; williamr@2: williamr@2: public: williamr@2: IMPORT_C static CSubConParameterFamily* NewL(RSubConParameterBundle& aBundle, TUint32 aFamilyId); williamr@2: IMPORT_C static CSubConParameterFamily* LoadL(RSubConParameterBundle& aBundle, TPtrC8& aBuffer); williamr@2: IMPORT_C static CSubConParameterFamily* NewL(CSubConParameterBundle& aBundle, TUint32 aFamilyId); williamr@2: IMPORT_C static CSubConParameterFamily* LoadL(CSubConParameterBundle& aBundle, TPtrC8& aBuffer); williamr@2: williamr@2: public: williamr@2: IMPORT_C virtual ~CSubConParameterFamily(); williamr@2: IMPORT_C void SetGenericSetL(CSubConGenericParameterSet& aGenericSet, TParameterSetType aType); williamr@2: IMPORT_C void AddExtensionSetL(CSubConExtensionParameterSet& aExtensionSet, TParameterSetType aType); williamr@2: williamr@2: IMPORT_C CSubConExtensionParameterSet* FindExtensionSet(TUid aSetId, TParameterSetType aType); williamr@2: IMPORT_C CSubConExtensionParameterSet* FindExtensionSet(STypeId aSetId, TParameterSetType aType); williamr@2: IMPORT_C CSubConGenericParameterSet* GetGenericSet(TParameterSetType aType); williamr@2: williamr@2: inline TUint32 Id(); williamr@2: williamr@2: IMPORT_C TUint Length() const; williamr@2: IMPORT_C TInt Load(TPtrC8& aDes); williamr@2: IMPORT_C TInt Store(TDes8& aDes) const; williamr@2: IMPORT_C void ClearAllParameters(TParameterSetType aType); williamr@2: williamr@2: protected: williamr@2: explicit CSubConParameterFamily(TUint32 aFamilyId); williamr@2: void ConstructL(RSubConParameterBundle& aBundle); williamr@2: void ConstructL(CSubConParameterBundle& aBundle); williamr@2: williamr@2: static TInt32 ExtractFamilyAndCreateBufferL(TPtrC8& aBuffer, TPtrC8& aContainerBuffer); williamr@2: williamr@2: private: williamr@2: const TUint32 iFamilyId; williamr@2: RMetaDataEComContainer iGenericSets; williamr@2: RMetaDataEComContainer iExtensionSets[ENumValues]; williamr@2: }; williamr@2: williamr@2: class CSubConParameterBundle : public CObject williamr@2: /** Container for (bundle of) SubConnection parameter families. williamr@2: williamr@2: May contain and 0..N parameter families. williamr@2: williamr@2: @publishedPartner williamr@2: @released since v9.0 */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CSubConParameterBundle* NewL(); williamr@2: IMPORT_C static CSubConParameterBundle* LoadL(TDesC8& aDes); williamr@2: williamr@2: IMPORT_C ~CSubConParameterBundle(); williamr@2: williamr@2: IMPORT_C TUint Length() const; williamr@2: IMPORT_C TInt Load(const TDesC8& aDes); williamr@2: IMPORT_C TInt Store(TDes8& aDes) const; williamr@2: IMPORT_C void AddFamilyL(CSubConParameterFamily* aFamily); williamr@2: IMPORT_C CSubConParameterFamily* FindFamily(TUint32 aFamilyId); williamr@2: IMPORT_C void ClearAllParameters(CSubConParameterFamily::TParameterSetType aType); williamr@2: williamr@2: protected: williamr@2: CSubConParameterBundle(); williamr@2: williamr@2: private: williamr@2: CSubConParameterBundle(const CSubConParameterBundle& aBundle); williamr@2: CSubConParameterBundle& operator=(const CSubConParameterBundle& aBundle); williamr@2: williamr@2: private: williamr@2: RPointerArray iFamilies; williamr@2: }; williamr@2: williamr@2: class RSubConParameterBundle williamr@2: /** Container for (bundle of) SubConnection parameter families. williamr@2: williamr@2: May contain and 0..N SubConnection parameter families. williamr@2: williamr@2: williamr@2: @publishedAll williamr@2: @released since v9.0 */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C RSubConParameterBundle(); williamr@2: IMPORT_C void Close(); williamr@2: williamr@2: IMPORT_C TUint Length() const; williamr@2: IMPORT_C TInt Load(const TDesC8& aDes); williamr@2: IMPORT_C TInt Store(TDes8& aDes) const; williamr@2: IMPORT_C void AddFamilyL(CSubConParameterFamily* aFamily); williamr@2: IMPORT_C CSubConParameterFamily* FindFamily(TUint32 aFamilyId); williamr@2: IMPORT_C void ClearAllParameters(CSubConParameterFamily::TParameterSetType aType); williamr@2: williamr@2: protected: williamr@2: TInt CheckBundle() const; williamr@2: private: williamr@2: RSubConParameterBundle(const RSubConParameterBundle& aBundle); williamr@2: RSubConParameterBundle& operator=(const RSubConParameterBundle& aBundle); williamr@2: williamr@2: private: williamr@2: mutable CSubConParameterBundle* iBundle; williamr@2: }; williamr@2: williamr@2: const TInt KNotificationEventMaxSize = 2048; williamr@2: class TNotificationEventBuf : public TBuf8 williamr@2: /** williamr@2: Buffer for Sub-connection event notiifcation williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C TNotificationEventBuf(); williamr@2: IMPORT_C ~TNotificationEventBuf(); williamr@2: williamr@2: IMPORT_C TBool IsGeneric() const; williamr@2: IMPORT_C TInt32 GroupId() const; williamr@2: IMPORT_C TUint32 Id() const; williamr@2: }; williamr@2: williamr@2: class CSubConNotificationEvent : public SMetaDataECom williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CSubConNotificationEvent* NewL(const STypeId& aTypeId); williamr@2: IMPORT_C static CSubConNotificationEvent* NewL(const TNotificationEventBuf& aEventBuffer); williamr@2: williamr@2: IMPORT_C TBool IsGeneric() const; williamr@2: IMPORT_C TInt32 GroupId() const; williamr@2: IMPORT_C TUint32 Id() const; williamr@2: williamr@2: private: williamr@2: }; williamr@2: williamr@2: class TSubConnOpen williamr@2: /** @internalComponent */ williamr@2: { williamr@2: public: williamr@2: /** Defines the type of a subconnection */ williamr@2: enum TSubConnType williamr@2: { williamr@2: EAttachToDefault, // will attach to the default sub connection williamr@2: ECreateNew, // will create a new sub connection williamr@2: williamr@2: //private extension to subconnection openning modes below: williamr@2: EWaitForIncoming williamr@2: }; williamr@2: williamr@2: TSubConnType iType; williamr@2: TInt iHandle; williamr@2: TInt iReserved; williamr@2: }; williamr@2: williamr@2: class RSubConnection : public RSubSessionBase williamr@2: /** A Sub-Connection, a channel within a Connection. A representation of a channel between this device and remote devices with which we are communicating. This channel will be used by one or more sockets. williamr@2: Depending on the state of the channel, it may not be possible to bind arbitary sockets into it. Attempts to bind sockets from different protocol families to a single channel is an error, as each channel can only be used by one protocol family. williamr@2: @note The sub-connection can represent a end-to-end channel and/or a channel from this device to an intermediate device (e.g an access server such as a GGSN which using UMTS and PDP contexts. Properties can be specified simultaneously on protocol and link level. williamr@2: williamr@2: Before using any of these services, a connection to a socket server session williamr@2: must have been made and the connection must be open. williamr@2: williamr@2: @publishedAll williamr@2: @released Since v9.0*/ williamr@2: { williamr@2: public: williamr@2: friend class RConnection; williamr@2: williamr@2: enum TSubConnType williamr@2: { williamr@2: EAttachToDefault, williamr@2: ECreateNew williamr@2: }; williamr@2: williamr@2: struct TEventFilter williamr@2: { williamr@2: inline TEventFilter(TInt32 aEventGroupId = KSubConnGenericEventsImplUid, TUint32 aEventMask = 0xffffffff); williamr@2: TInt32 iEventGroupUid; williamr@2: TUint32 iEventMask; williamr@2: }; williamr@2: williamr@2: public: williamr@2: // Sub Connection Management williamr@2: IMPORT_C RSubConnection(); williamr@2: IMPORT_C TInt Open(RSocketServ& aServer, TSubConnType aSubConnType, RConnection& aConnection); williamr@2: IMPORT_C void Close(); williamr@2: IMPORT_C void Start(TRequestStatus& aStatus); williamr@2: IMPORT_C TInt Start(); williamr@2: IMPORT_C TInt Stop(); williamr@2: williamr@2: // Socket Management williamr@2: IMPORT_C void Add(RSocket& aSocket, TRequestStatus& aStatus); williamr@2: IMPORT_C void Remove(RSocket& aSocket, TRequestStatus& aStatus); williamr@2: williamr@2: // QoS Properties williamr@2: IMPORT_C TInt SetParameters(const RSubConParameterBundle& aParametersSet); williamr@2: IMPORT_C TInt GetParameters(RSubConParameterBundle& aParametersSet); williamr@2: williamr@2: // Event Notification williamr@2: IMPORT_C void EventNotification(TNotificationEventBuf& aEventBuffer, TBool aGenericEventsOnly, TRequestStatus& aStatus); williamr@2: IMPORT_C void EventNotification(TNotificationEventBuf& aEventBuffer, TEventFilter aEventFilterList[], TUint aEventListLength, TRequestStatus& aStatus); williamr@2: IMPORT_C void CancelEventNotification(); williamr@2: williamr@2: // Generic Control williamr@2: IMPORT_C TInt Control(TUint aOptionLevel, TUint aOptionName, TDes8& aOption); williamr@2: williamr@2: TBool SameSession(TInt aSessionHandle); williamr@2: williamr@2: private: williamr@2: IMPORT_C TInt Open(RSocketServ& aServer, TSubConnOpen::TSubConnType aSubConnType, RConnection& aConnection); williamr@2: williamr@2: //Note : Not used anywhere else in the code, kept in order to avoid the BC Break williamr@2: TInt iSpare; williamr@2: }; williamr@2: williamr@2: williamr@2: class ByteOrder williamr@2: /** Reverses the byte order in 16 and 32-bit values. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TUint32 Swap32(TUint32 aVal); williamr@2: IMPORT_C static TUint16 Swap16(TUint16 aVal); williamr@2: inline static TUint16 Swap16(TUint aVal); williamr@2: }; williamr@2: williamr@2: class BigEndian williamr@2: /** Inserts and extracts integers in big-endian format. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TUint32 Get32(const TUint8* aPtr); williamr@2: IMPORT_C static TUint16 Get16(const TUint8* aPtr); williamr@2: IMPORT_C static void Put32(TUint8* aPtr, TUint32 aVal); williamr@2: IMPORT_C static void Put16(TUint8* aPtr, TUint16 aVal); williamr@2: }; williamr@2: williamr@2: class LittleEndian williamr@2: /** Inserts and extracts integers in little-endian format. williamr@2: @publishedAll williamr@2: @released */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TUint32 Get32(const TUint8* aPtr); williamr@2: IMPORT_C static TUint16 Get16(const TUint8* aPtr); williamr@2: IMPORT_C static void Put32(TUint8* aPtr, TUint32 aVal); williamr@2: IMPORT_C static void Put16(TUint8* aPtr, TUint16 aVal); williamr@2: }; williamr@2: williamr@2: class TAccessPointInfo williamr@2: /** Stores Access Point information. williamr@2: @publishedAll */ williamr@2: { williamr@2: public: williamr@2: TAccessPointInfo(TUint aApId = 0); williamr@2: williamr@2: TUint AccessPoint() const; williamr@2: void SetAccessPoint(TUint aAccessPoint); williamr@2: williamr@2: TBool operator== (const TAccessPointInfo& aRhs) const; williamr@2: private: williamr@2: TUint iAccessPointId; williamr@2: }; williamr@2: williamr@2: #include williamr@2: williamr@2: #endif //__ES_SOCK_H__