ACE_SSL  6.1.0
Public Types | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes
ACE_SSL_SOCK_Stream Class Reference

Defines methods in the ACE_SSL_SOCK_Stream abstraction. More...

#include <SSL_SOCK_Stream.h>

Inheritance diagram for ACE_SSL_SOCK_Stream:
Inheritance graph
[legend]
Collaboration diagram for ACE_SSL_SOCK_Stream:
Collaboration graph
[legend]

List of all members.

Public Types

typedef ACE_INET_Addr PEER_ADDR
 Meta-type info.

Public Member Functions

 ACE_SSL_SOCK_Stream (ACE_SSL_Context *context=ACE_SSL_Context::instance())
 Constructor.
 ~ACE_SSL_SOCK_Stream (void)
 Destructor.
ssize_t send (const void *buf, size_t n, int flags) const
ssize_t recv (void *buf, size_t n, int flags) const
ssize_t send (const void *buf, size_t n) const
ssize_t recv (void *buf, size_t n) const
ssize_t sendv (const iovec iov[], size_t n, const ACE_Time_Value *timeout=0) const
 Send an iovec of size n to the ssl socket.
ssize_t recvv (iovec *io_vec, const ACE_Time_Value *timeout=0) const
ssize_t send (const void *buf, size_t n, int flags, const ACE_Time_Value *timeout) const
ssize_t recv (void *buf, size_t n, int flags, const ACE_Time_Value *timeout) const
ssize_t send (const void *buf, size_t n, const ACE_Time_Value *timeout) const
ssize_t recv (void *buf, size_t n, const ACE_Time_Value *timeout) const
ssize_t send (size_t n,...) const
 Send n varargs messages to the connected ssl socket.
ssize_t recv (size_t n,...) const
 Recv n varargs messages to the connected ssl socket.
ssize_t send_n (const void *buf, int n) const
 Send n bytes, keep trying until n are sent.
ssize_t recv_n (void *buf, int n) const
 Recv n bytes, keep trying until n are received.
ssize_t sendv_n (const iovec iov[], size_t n) const
ssize_t recvv_n (iovec iov[], size_t n) const
 Receive an iovec of size n to the connected socket.
int close (void)
 Close down the socket.
void set_handle (ACE_HANDLE fd)
 Overridden set_handle() method.
SSL * ssl (void) const
 Return a pointer to the underlying SSL structure.
int get_remote_addr (ACE_Addr &) const
ACE_SOCK_Streampeer (void)
 Return the underlying ACE_SOCK_Stream which ACE_SSL runs atop of.
ssize_t send_n (const void *buf, int n, int flags) const
 Send n bytes, keep trying until n are sent.
ssize_t recv_n (void *buf, int n, int flags) const
 Recv n bytes, keep trying until n are sent.
ssize_t send_n (const void *buf, size_t len, int flags, const ACE_Time_Value *timeout, size_t *bytes_transferred=0) const
ssize_t send_n (const void *buf, size_t len, const ACE_Time_Value *timeout, size_t *bytes_transferred=0) const
ssize_t recv_n (void *buf, size_t len, int flags, const ACE_Time_Value *timeout, size_t *bytes_transferred=0) const
ssize_t recv_n (void *buf, size_t len, const ACE_Time_Value *timeout, size_t *bytes_transferred=0) const
int close_reader (void)
 Close down the reader.
int close_writer (void)
 Close down the writer.

Public Attributes

 ACE_ALLOC_HOOK_DECLARE
 Declare the dynamic allocation hooks.

Protected Member Functions

ssize_t send_i (const void *buf, size_t n, int flags) const
ssize_t recv_i (void *buf, size_t n, int flags, const ACE_Time_Value *timeout) const

Protected Attributes

SSL * ssl_
 The SSL session.
ACE_SOCK_Stream stream_
 The stream which works under the ssl connection.

Detailed Description

Defines methods in the ACE_SSL_SOCK_Stream abstraction.

This class encapsulates the methods and functionality necessary to send and receive data over TLS/SSL.

Since SSL is record-oriented, some additional steps must be taken to make the ACE_SSL_SOCK_Stream interact properly with the Reactor (if one is used) when performing non-blocking IO. In particular, if ::SSL_pending (ssl), where "ssl" is a pointer to the SSL data structure returned from ACE_SSL_SOCK_Stream::ssl(), returns a non-zero value then the event handler that calls the IO methods in this class should return a value greater than zero to force the Reactor to invoke the event handler before polling for additional events (e.g. blocking on select()).
Note:
The user must currently ensure that only one thread services a given SSL session at any given time since underlying SSL implementations, such as OpenSSL, are not entirely thread-safe or reentrant.

Member Typedef Documentation

Meta-type info.


Constructor & Destructor Documentation

ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_SSL_SOCK_Stream::ACE_SSL_SOCK_Stream ( ACE_SSL_Context context = ACE_SSL_Context::instance ())

Constructor.

Parameters:
contextPointer to ACE_SSL_Context instance containing the OpenSSL SSL data structure to be associated with this ACE_SSL_SOCK_Stream. The SSL data structure will be copied to make it at least logically independent of the supplied context.
ACE_SSL_SOCK_Stream::~ACE_SSL_SOCK_Stream ( void  )

Destructor.


Member Function Documentation

ACE_INLINE int ACE_SSL_SOCK_Stream::close ( void  )

Close down the socket.

Reimplemented from ACE_SOCK.

ACE_INLINE int ACE_SSL_SOCK_Stream::close_reader ( void  )

Close down the reader.

Selectively close endpoints.

ACE_INLINE int ACE_SSL_SOCK_Stream::close_writer ( void  )

Close down the writer.

int ACE_SSL_SOCK_Stream::get_remote_addr ( ACE_Addr addr) const

Return the address of the remotely connected peer (if there is one), in the referenced <ACE_Addr>. Returns 0 if successful, else -1.

Note:
If the TCP connection has been completed but the SSL connection has not been completed yet, -1 will be returned.

Reimplemented from ACE_SOCK.

ACE_INLINE ACE_SOCK_Stream & ACE_SSL_SOCK_Stream::peer ( void  )

Return the underlying ACE_SOCK_Stream which ACE_SSL runs atop of.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::recv ( void *  buf,
size_t  n,
int  flags 
) const

Recv an n byte buffer from the ssl socket using the semantics of recv(3n). ACE_SSL supports MSG_PEEK, but no other flags at this time.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::recv ( void *  buf,
size_t  n 
) const

Recv an n byte buffer from the ssl socket using the semantics of read(2).

ssize_t ACE_SSL_SOCK_Stream::recv ( void *  buf,
size_t  n,
int  flags,
const ACE_Time_Value timeout 
) const

Wait up to timeout amount of time to receive up to n bytes into buf (uses the recv() call). If recv() times out -1 is returned with errno == ETIME. If it succeeds the number of bytes received is returned. MSG_PEEK is the only supported flag.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::recv ( void *  buf,
size_t  n,
const ACE_Time_Value timeout 
) const

Wait up to timeout amount of time to receive up to n bytes into buf (uses the recv() call). If recv() times out a -1 is returned with errno == ETIME. If it succeeds the number of bytes received is returned.

ssize_t ACE_SSL_SOCK_Stream::recv ( size_t  n,
  ... 
) const

Recv n varargs messages to the connected ssl socket.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::recv_i ( void *  buf,
size_t  n,
int  flags,
const ACE_Time_Value timeout 
) const [protected]

Underlying send() helper method common to all public send() methods.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::recv_n ( void *  buf,
int  n 
) const

Recv n bytes, keep trying until n are received.

ssize_t ACE_SSL_SOCK_Stream::recv_n ( void *  buf,
int  n,
int  flags 
) const

Recv n bytes, keep trying until n are sent.

ssize_t ACE_SSL_SOCK_Stream::recv_n ( void *  buf,
size_t  len,
int  flags,
const ACE_Time_Value timeout,
size_t *  bytes_transferred = 0 
) const

Try to receive exactly len bytes into buf (uses the recv() call). The ACE_Time_Value indicates how long to blocking trying to receive. If timeout == 0, the caller will block until action is possible, else will wait until the relative time specified in timeout elapses). If recv() blocks for longer than timeout the number of bytes actually read is returned with errno == ETIME. If a timeout does not occur, recv_n return len (i.e., the number of bytes requested to be read).

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::recv_n ( void *  buf,
size_t  len,
const ACE_Time_Value timeout,
size_t *  bytes_transferred = 0 
) const

Try to receive exactly len bytes into buf (uses the recv() call). The ACE_Time_Value indicates how long to blocking trying to receive. If timeout == 0, the caller will block until action is possible, else will wait until the relative time specified in timeout elapses). If recv() blocks for longer than timeout the number of bytes actually read is returned with errno == ETIME. If a timeout does not occur, recv_n return len (i.e., the number of bytes requested to be read).

ssize_t ACE_SSL_SOCK_Stream::recvv ( iovec *  io_vec,
const ACE_Time_Value timeout = 0 
) const

Allows a client to read from a socket without having to provide a buffer to read. This method determines how much data is in the socket, allocates a buffer of this size, reads in the data, and returns the number of bytes read. The caller is responsible for deleting the member in the iov_base field of io_vec using delete [] io_vec->iov_base.

ssize_t ACE_SSL_SOCK_Stream::recvv_n ( iovec  iov[],
size_t  n 
) const

Receive an iovec of size n to the connected socket.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::send ( const void *  buf,
size_t  n,
int  flags 
) const

Send an n byte buffer to the ssl socket using the semantics of send(3n). ACE_SSL supports no flags for sending at this time.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::send ( const void *  buf,
size_t  n 
) const

Send an n byte buffer to the ssl socket using the semantics of write(2).

ssize_t ACE_SSL_SOCK_Stream::send ( const void *  buf,
size_t  n,
int  flags,
const ACE_Time_Value timeout 
) const

Wait to timeout amount of time to send up to n bytes into buf (uses the send() call). If send() times out -1 is returned with errno == ETIME. If it succeeds the number of bytes sent is returned. No flags are supported.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::send ( const void *  buf,
size_t  n,
const ACE_Time_Value timeout 
) const

Wait to to timeout amount of time to send up to n bytes into buf (uses the send() call). If send() times out a -1 is returned with errno == ETIME. If it succeeds the number of bytes sent is returned.

ssize_t ACE_SSL_SOCK_Stream::send ( size_t  n,
  ... 
) const

Send n varargs messages to the connected ssl socket.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::send_i ( const void *  buf,
size_t  n,
int  flags 
) const [protected]

Underlying send() helper method common to all public send() methods.

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::send_n ( const void *  buf,
int  n 
) const

Send n bytes, keep trying until n are sent.

ssize_t ACE_SSL_SOCK_Stream::send_n ( const void *  buf,
int  n,
int  flags 
) const

Send n bytes, keep trying until n are sent.

Note:
In the following four methods, only MSG_PEEK is supported for recv_n(), and no flags are supported for send_n().
ssize_t ACE_SSL_SOCK_Stream::send_n ( const void *  buf,
size_t  len,
int  flags,
const ACE_Time_Value timeout,
size_t *  bytes_transferred = 0 
) const

Try to send exactly len bytes into buf (uses the send() call). If send() blocks for longer than timeout the number of bytes actually sent is returned with errno == ETIME. If a timeout does not occur, send_n() return len (i.e., the number of bytes requested to be sent).

ACE_INLINE ssize_t ACE_SSL_SOCK_Stream::send_n ( const void *  buf,
size_t  len,
const ACE_Time_Value timeout,
size_t *  bytes_transferred = 0 
) const

Try to send exactly len bytes into buf (uses the send() call). If send() blocks for longer than timeout the number of bytes actually sent is returned with errno == ETIME. If a timeout does not occur, send_n() return len (i.e., the number of bytes requested to be sent).

ssize_t ACE_SSL_SOCK_Stream::sendv ( const iovec  iov[],
size_t  n,
const ACE_Time_Value timeout = 0 
) const

Send an iovec of size n to the ssl socket.

Note that it is not possible to perform a "scattered" write with the underlying OpenSSL implementation. As such, the expected semantics are not fully reproduced with this implementation.

ssize_t ACE_SSL_SOCK_Stream::sendv_n ( const iovec  iov[],
size_t  n 
) const

Send an iovec of size n to the connected socket. Will block until all bytes are sent or an error occurs.

ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE void ACE_SSL_SOCK_Stream::set_handle ( ACE_HANDLE  fd)

Overridden set_handle() method.

Only an ACE_SSL_SOCK_Acceptor or ACE_SSL_SOCK_Connector should access this method since some state in the underlying "ssl_" data structure is set during SSL connection establishment.

Reimplemented from ACE_SSL_SOCK.

ACE_INLINE SSL * ACE_SSL_SOCK_Stream::ssl ( void  ) const

Return a pointer to the underlying SSL structure.


Member Data Documentation

Declare the dynamic allocation hooks.

Reimplemented from ACE_SOCK.

SSL* ACE_SSL_SOCK_Stream::ssl_ [protected]

The SSL session.

The stream which works under the ssl connection.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines