Location:
es_prot.h
Link against: esock.lib
CServProviderBase
Supported from 5.0
Service Access Point.
This class provides transport services to a single protocol.
Several of the calls to CServProviderBase
have pre-conditions
attached to them — for example a connection oriented protocol must have
its local address set (either by a SetLocalName()
or
AutoBind()
) before it is opened. If the socket server calls the
CServProviderBase
in such an erroneous way, the protocol should
panic.
|
Defined in CServProviderBase
:
ActiveOpen()
, AutoBind()
, CancelIoctl()
, EImmediate
, ENormal
, EStopInput
, EStopOutput
, GetData()
, GetOption()
, Ioctl()
, LocalName()
, PassiveOpen()
, RemName()
, SetLocalName()
, SetOption()
, SetRemName()
, Shutdown()
, TCloseType
, Write()
, iSocket
Inherited from CBase
:
operator new()
virtual void LocalName(TSockAddr& anAddr)=0;
Gets the local name (address) of the socket service provider
entity. The format of the data in the TSockAddr
object is defined
by individual protocols.
The local address is the address of the local machine plus a local port number. Generally only the port number is important, unless you have two IP interfaces, for example.
|
virtual TInt SetLocalName(TSockAddr& anAddr)=0;
Sets the local name (address) of the socket service provider
entity. The format of the data in the TSockAddr
object is defined
by individual protocols.
|
|
virtual void AutoBind()=0;
Specifies that the protocol should choose a local address for the service access point itself.
virtual void RemName(TSockAddr& anAddr)=0;
Gets the remote name (address) of the socket service provider entity.
The format of the data in the TSockAddr
object is defined by
individual protocols.
A remote address is either the address you’re sending data to (non connection-oriented sockets)* or the remote end of the connection. It is the address of the remote machine (your peer in the network) plus a port number.
Note:
RemName
is only meaningful if the socket server client
has called Connect()
to set up a default address for
SendTo()
. This function will only be called on the protocol if
this is the case.
|
virtual TInt SetRemName(TSockAddr &anAddr)=0;
Sets the remote name (address) of the socket service provider entity.
The format of the data in the TSockAddr
object is defined by
individual protocols.
|
|
virtual void Ioctl(TUint aLevel, TUint aName,TDes8* anOption)=0;
Performs some protocol specific IO control.
Notes:
If this function is called erroneously, the protocol should call
Error()
on the socket. If an Ioctl call is already outstanding,
the client will be panicked with the value ETwoIoctls
.
|
virtual void CancelIoctl(TUint aLevel, TUint aName)=0;
Cancels an outstanding Ioctl call. You are guaranteed only to have one outstanding at once.
|
virtual void GetOption(TUint aLevel,TUint aName,TDes8& anOption) const =0;
Gets some protocol specific option when called by the socket server on
behalf of a client. A protocol may pass the request down a protocol stack (to
protocols it is bound to) using the GetOption()
function
ofCProtocolBase
.
|
virtual void SetOption(TUint aLevel, TUint aName, const TDesC8& anOption)=0;
Sets some protocol specific option when called by the socket server on
behalf of a client. A protocol may pass the request down a protocol stack (to
protocols it is bound to) using the SetOption()
function
ofCProtocolBase
.
|
virtual TUint Write(const TDesC8& aDesc, TUint aOptions, TSockAddr* anAddr=NULL)=0;
Sends data onto the network via the protocol. Connection-oriented sockets
must be in a connected state (that is ConnectComplete()
has been
called on their MSocketNotify
) before Write()
is
called.
The socket server keeps track of how much data is waiting and then tries
to send it all until the protocol tells it to hold off by returning 0 (datagram
sockets) or ‘less than all data consumed’ (stream sockets)
toWrite()
. The protocol should call CanSend()
when it
is ready to send more data.
anAddr
is the address to write the data to. Connection
oriented sockets always use the default value.
|
|
virtual void GetData(TDes8 &aDesc,TUint aOptions, TSockAddr* anAddr)=0;
Gets data which the protocol has indicated is waiting in its buffers
using the NewData
up-call on theMSocketNotify
.
GetData()
will only ever be called for as much data as the
protocol has specified it can process using the
NewData
up-call.
For stream oriented protocols GetData()
should fill the
descriptor with data from the stream. On a datagram
protocolGetData()
should copy one datagram into the descriptor and
set the length of the descriptor. If a full datagram will not fit into the
supplied descriptor, the overflow should be discarded.
anAddr
should be filled in by the protocol with the address
of where the data came from.
|
virtual void ActiveOpen()=0;
virtual void ActiveOpen(const TDesC8 &aConnectionData)=0;
Initiates a connection operation - this means that it tells the protocol to attempt to connect to a peer. It is called by the socket server in response to a connect request from a client.
The second version of the function is the same, but with user data in the connection frame.
ActiveOpen()
is only ever called on connection-oriented
sockets. Such a socket should always have both the local address and the remote
address specified before ActiveOpen()
is called. If this is not
the case, then the protocol should panic.
When a connection has completed, the protocol should
callConnectComplete()
on its TNotify
. If an error
occurs during connection the protocol should not call
ConnectComplete()
at all; instead it should call
Error()
.
|
virtual void PassiveOpen(TUint aQueSize)=0;
virtual void PassiveOpen(TUint aQueSize, const TDesC8 &aConnectionData)=0;
Tells the protocol to start waiting for an incoming connection request on this socket (i.e. port). It is called by the socket server in response to a listen request from a client.
The second version of the function is the same, but with user data in the connection frame.
PassiveOpen()
is only ever called on connection-oriented
sockets. Such a socket should always have both the local address and the remote
address specified before PassiveOpen()
is called. If this is not
the case, then the protocol should panic.
The aQue
parameter is the number of sockets which can be
waiting for an outstanding Start after calling ConnectComplete()
.
The protocol should keep a count of sockets in this state - incrementing a
variable in ConnectComplete()
, and decrementing it
inStart()
.
When a connection has completed, the protocol should
callConnectComplete()
on its TNotify
. If an error
occurs during connection the protocol should not call
ConnectComplete()
at all; instead it should call
Error()
.
|
virtual void Shutdown(TCloseType option)=0;
virtual void Shutdown(TCloseType option,const TDesC8& aDisconnectionData)=0;
Terminates a connection (or closes a non connection-oriented socket
down). The value of the option argument specifies the type of processing which
will be required of the protocol after Shutdown()
is
called.
Normally, when the socket server has called Shutdown()
for a
socket, it will wait for the socket to call CanClose()
before
destroying the CServProviderBase
object. However, if the option
argument is EImmediate
, the CServProviderBase
will be
destroyed as soon as Shutdown()
returns.
|
TCloseType
Describes the behaviour the SAP should take on shutdown.
|
protected: MSocketNotify* iSocket
On socket creation, the socket server sets this member to point to a server notification interface.