![]() |
TSDuck v3.43-4441
MPEG Transport Stream Toolkit
|
Base class for a TLS session. More...
#include <tsTLSConnection.h>
Public Types | |
using | SuperClass = TCPConnection |
Reference to the superclass. | |
Public Member Functions | |
TLSConnection () | |
Constructor. | |
TLSConnection (const TLSArgs &args) | |
Constructor with initial client arguments. | |
void | addVerifyServer (const UString &name) |
For a client connection, add another accepted host name for the server's certificate verification during connect(). | |
bool | bind (const IPSocketAddress &addr, Report &report=(ts::CerrReport::Instance())) |
Bind to a local address and port. | |
virtual bool | close (Report &report=(ts::CerrReport::Instance())) override |
Close the socket. | |
virtual bool | closeWriter (Report &=(ts::CerrReport::Instance())) override |
Close the write direction of the connection. | |
virtual bool | connect (const IPSocketAddress &, Report &=(ts::CerrReport::Instance())) override |
Connect to a remote address and port. | |
virtual bool | disconnect (Report &=(ts::CerrReport::Instance())) override |
Disconnect from remote partner. | |
IP | generation () const |
Get the IP generation with which the socket was open. | |
bool | getLocalAddress (IPSocketAddress &addr, Report &report=(ts::CerrReport::Instance())) |
Get local socket address. | |
bool | getPeer (IPSocketAddress &addr, Report &report=(ts::CerrReport::Instance())) const |
Get the connected remote peer. | |
SysSocketType | getSocket () const |
Get the underlying socket device handle (use with care). | |
bool | isConnected () const |
Check if the socket is connected. | |
bool | isOpen () const |
Check if socket is open. | |
virtual bool | open (IP gen, Report &report=(ts::CerrReport::Instance())) override |
Open the socket. | |
UString | peerName () const |
Get the connected remote peer as a string. | |
virtual bool | receive (void *, size_t, const AbortInterface *=nullptr, Report &=(ts::CerrReport::Instance())) override |
Receive data until buffer is full. | |
virtual bool | receive (void *, size_t, size_t &, const AbortInterface *=nullptr, Report &=(ts::CerrReport::Instance())) override |
Receive data. | |
bool | reusePort (bool reuse_port, Report &report=(ts::CerrReport::Instance())) |
Set the "reuse port" option. | |
virtual bool | send (const void *, size_t, Report &=(ts::CerrReport::Instance())) override |
Send data. | |
void | setArgs (const TLSArgs &args) |
Set command line arguments for the client. | |
bool | setKeepAlive (bool active, Report &report=(ts::CerrReport::Instance())) |
Set the "keep alive" option. | |
bool | setLingerTime (int seconds, Report &report=(ts::CerrReport::Instance())) |
Set the linger time option. | |
bool | setNoDelay (bool active, Report &report=(ts::CerrReport::Instance())) |
Set the "no delay" option. | |
bool | setNoLinger (Report &report=(ts::CerrReport::Instance())) |
Remove the linger time option. | |
bool | setReceiveBufferSize (size_t size, Report &report=(ts::CerrReport::Instance())) |
Set the receive buffer size. | |
bool | setReceiveTimeout (cn::milliseconds timeout, Report &report=(ts::CerrReport::Instance())) |
Set the receive timeout. | |
bool | setSendBufferSize (size_t size, Report &report=(ts::CerrReport::Instance())) |
Set the send buffer size. | |
void | setServerName (const UString &server_name) |
For a client connection, specify the server name to be used in SNI (Server Name Indication). | |
bool | setTTL (int ttl, Report &report=(ts::CerrReport::Instance())) |
Set the Time To Live (TTL) option. | |
void | setVerifyPeer (bool on) |
Check if the peer's certificate shall be verified. | |
Static Public Member Functions | |
static UString | GetLibraryVersion () |
Get the version of the underlying SSL/TLS library. | |
Protected Member Functions | |
bool | convert (IPAddress &addr, Report &report) const |
Convert an IP address to make it compatible with the socket IP generation. | |
bool | createSocket (IP gen, int type, int protocol, Report &report) |
Create the socket. | |
virtual void | declareOpened (SysSocketType sock, Report &report) override |
Set an open socket descriptor from a subclass. | |
virtual void | handleClosed (Report &report=(ts::CerrReport::Instance())) override |
This virtual method can be overriden by subclasses to be notified of close. | |
virtual void | handleConnected (Report &report=(ts::CerrReport::Instance())) |
This virtual method can be overriden by subclasses to be notified of connection. | |
virtual void | handleDisconnected (Report &report=(ts::CerrReport::Instance())) |
This virtual method can be overriden by subclasses to be notified of disconnection. | |
virtual void | handleOpened (Report &report) |
This virtual method can be overriden by subclasses to be notified of open. | |
Protected Attributes | |
std::recursive_mutex | _mutex {} |
Mutex protecting this object. | |
Base class for a TLS session.
This class is used in two contexts:
Possible public servers to test various invalid certificates:
|
inline |
Constructor with initial client arguments.
[in] | args | Initial TLS client arguments. |
void ts::TLSConnection::setArgs | ( | const TLSArgs & | args | ) |
Set command line arguments for the client.
[in] | args | TLS arguments. |
|
inline |
Check if the peer's certificate shall be verified.
[in] | on | If true, the peer's certificate will be verified. |
void ts::TLSConnection::setServerName | ( | const UString & | server_name | ) |
For a client connection, specify the server name to be used in SNI (Server Name Indication).
[in] | server_name | Main server name, as specified in SNI (Server Name Indication). Also used to verify the server's certificate when setVerifyPeer() is true. |
void ts::TLSConnection::addVerifyServer | ( | const UString & | name | ) |
For a client connection, add another accepted host name for the server's certificate verification during connect().
The list is reset by setVerifyServer().
[in] | name | Additional accepted host name used to verify the server's certificate. |
|
overridevirtual |
Connect to a remote address and port.
Use this method when acting as TCP client. Do not use on server side: the TCPConnection object is passed to TCPServer::accept() which establishes the connection.
[in] | addr | IP address and port of the server to connect. |
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Close the write direction of the connection.
The application shall call this routine after sending the last message but may still want to receive messages, waiting for the peer to voluntary disconnect.
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Disconnect from remote partner.
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Send data.
[in] | data | Address of the data to send. |
[in] | size | Size in bytes of the data to send. |
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Receive data.
This version of receiveMessage() returns when "some" data are received into the user buffer. The actual received data may be shorter than the user buffer size.
The version is typically useful when the application cannot predict how much data will be received and must respond even if the user buffer is not full.
[out] | buffer | Address of the buffer for the received data. |
[in] | max_size | Size in bytes of the reception buffer. |
[out] | ret_size | Size in bytes of the received data. Will never be larger than max_size. |
[in] | abort | If non-zero, invoked when I/O is interrupted (in case of user-interrupt, return, otherwise retry). |
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPConnection.
|
overridevirtual |
Receive data until buffer is full.
This version of receiveMessage() returns only when sufficient data are received to completely fill the user buffer. The size of the actual received data is identical to the user buffer size.
The version is typically useful when the application knows that a certain amount of data is expected and must wait for them.
This base implementation uses the variable-length version of receiveMessage(). Therefore, a subclass may only override the variable-length version.
[out] | buffer | Address of the buffer for the received data. |
[in] | size | Size in bytes of the buffer. |
[in] | abort | If non-zero, invoked when I/O is interrupted (in case of user-interrupt, return, otherwise retry). |
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPConnection.
|
static |
Get the version of the underlying SSL/TLS library.
|
inlineinherited |
Check if the socket is connected.
|
inherited |
Get the connected remote peer.
[out] | addr | IP address and port of the remote socket. |
[in,out] | report | Where to report error. |
|
inherited |
Get the connected remote peer as a string.
|
protectedvirtualinherited |
This virtual method can be overriden by subclasses to be notified of connection.
All subclasses should explicitly invoke their superclass' handlers.
[in,out] | report | Where to report error. |
Reimplemented in ts::tlv::Connection< SAFETY >, ts::tlv::Connection< ThreadSafety::Full >, and ts::tlv::Connection< ThreadSafety::None >.
|
protectedvirtualinherited |
This virtual method can be overriden by subclasses to be notified of disconnection.
All subclasses should explicitly invoke their superclass' handlers.
[in,out] | report | Where to report error. |
|
overrideprotectedvirtualinherited |
This virtual method can be overriden by subclasses to be notified of close.
All subclasses should explicitly invoke their superclass' handlers.
[in,out] | report | Where to report error. |
Reimplemented from ts::TCPSocket.
|
inherited |
Set the Time To Live (TTL) option.
[in] | ttl | The TTL value, ie. the maximum number of "hops" between routers before an IP packet is dropped. |
[in,out] | report | Where to report error. |
|
inherited |
Remove the linger time option.
[in,out] | report | Where to report error. |
|
inherited |
Set the linger time option.
[in] | seconds | Number of seconds to wait after shuting down the socket. |
[in,out] | report | Where to report error. |
|
inherited |
Set the "keep alive" option.
[in] | active | If true, the socket periodically sends "keep alive" packets when the connection is idle. |
[in,out] | report | Where to report error. |
|
inherited |
Set the "no delay" option.
[in] | active | If true, the socket immediately sends outgoing packets. By default, a TCP socket waits a small amount of time after a send() operation to get a chance to group outgoing data from successive send() operations into one single packet. |
[in,out] | report | Where to report error. |
|
inherited |
Bind to a local address and port.
The IP address part of the socket address must one of:
The port number part of the socket address must be one of:
[in] | addr | Local socket address to bind to. |
[in,out] | report | Where to report error. |
|
overridevirtualinherited |
Open the socket.
[in] | gen | IP generation, IPv4 or IPv6. If set to IP::Any, open an IPv6 socket (IPv4 connections allowed). |
[in,out] | report | Where to report error. |
Implements ts::Socket.
|
overridevirtualinherited |
Close the socket.
[in,out] | report | Where to report error. |
Reimplemented from ts::Socket.
Reimplemented in ts::TCPServer, and ts::TLSServer.
|
protectedvirtualinherited |
This virtual method can be overriden by subclasses to be notified of open.
All subclasses should explicitly invoke their superclass' handlers.
[in,out] | report | Where to report error. |
|
overrideprotectedvirtualinherited |
Set an open socket descriptor from a subclass.
This method is used by a server to declare that a client socket has just become opened.
[in] | sock | New socket descriptor. |
[in,out] | report | Where to report error. |
Reimplemented from ts::Socket.
|
inlineinherited |
Check if socket is open.
|
inlineinherited |
Get the IP generation with which the socket was open.
|
inherited |
Set the send buffer size.
[in] | size | Send buffer size in bytes. |
[in,out] | report | Where to report error. |
|
inherited |
Set the receive buffer size.
[in] | size | Receive buffer size in bytes. |
[in,out] | report | Where to report error. |
|
inherited |
Set the receive timeout.
[in] | timeout | Receive timeout in milliseconds. If negative or zero, receive timeout is not used, reception waits forever. |
[in,out] | report | Where to report error. |
|
inherited |
Set the "reuse port" option.
[in] | reuse_port | If true, the socket is allowed to reuse a local UDP port which is already bound. |
[in,out] | report | Where to report error. |
|
inherited |
Get local socket address.
[out] | addr | Local socket address of the connection. |
[in,out] | report | Where to report error. |
|
inlineinherited |
Get the underlying socket device handle (use with care).
This method is reserved for low-level operations and should not be used by normal applications.
Convert an IP address to make it compatible with the socket IP generation.
addr | [in,out] The address to convert. | |
[in,out] | report | Where to report error. |