TSDuck v3.44-4659
MPEG Transport Stream Toolkit
Loading...
Searching...
No Matches
ts::SRTSocket Class Reference

Secure Reliable Transport (SRT) Socket. More...

#include <tsSRTSocket.h>

Inheritance diagram for ts::SRTSocket:
Collaboration diagram for ts::SRTSocket:

Public Member Functions

 SRTSocket (Report *report)
 Constructor.
 
virtual ~SRTSocket () override
 Destructor.
 
bool close (bool silent=false)
 Close the socket.
 
void defineArgs (Args &args)
 Add command line option definitions in an Args.
 
bool getMessageApi () const
 Check if the SRT socket uses the Message API.
 
bool getPeers (IPSocketAddress &local, IPSocketAddress &remote)
 Get the socket peers, local and remote.
 
int getSocket () const
 Get the underlying SRT socket handle (use with care).
 
bool getSockOpt (int optName, const char *optNameStr, void *optval, int &optlen) const
 Get SRT option.
 
bool loadArgs (DuckContext &duck, Args &args)
 Load arguments from command line.
 
bool muteReport (bool mute)
 Temporarily mute the associated report.
 
bool open (size_t max_payload=NPOS)
 Open the socket using parameters from the command line.
 
bool open (SRTSocketMode mode, const IPSocketAddress &local, const IPSocketAddress &remote, size_t max_payload=NPOS)
 Open the socket.
 
bool peerDisconnected () const
 Check if the connection was disconnected by the peer.
 
bool receive (void *data, size_t max_size, size_t &ret_size)
 Receive a message.
 
bool receive (void *data, size_t max_size, size_t &ret_size, cn::microseconds &timestamp)
 Receive a message with timestamp.
 
Reportreport () const
 Access the Report which is associated with this object.
 
bool reportStatistics (SRTStatMode mode=SRTStatMode::ALL)
 Get statistics about the socket and report them.
 
bool send (const void *data, size_t size)
 Send a message to the default destination address and port.
 
bool setAddresses (const IPSocketAddress &listener, const IPSocketAddress &caller, const IPAddress &local=IPAddress())
 Preset local and remote socket addresses in string form.
 
ReportsetReport (Report *report)
 Associate this object with another Report to log errors.
 
ReporterBasesetReport (ReporterBase *delegate)
 Associate this object with another ReporterBase to log errors.
 
size_t totalReceivedBytes () const
 Get the total number of received bytes since the socket was opened.
 
size_t totalSentBytes () const
 Get the total number of sent bytes since the socket was opened.
 

Static Public Member Functions

static UString GetLibraryVersion ()
 Get the version of the SRT library.
 
static int SilentLevel (bool silent)
 Compute a log severity level from a "silent" parameter.
 

Detailed Description

Secure Reliable Transport (SRT) Socket.

If the libsrt is not available during compilation of this class, all methods will fail with an error status.

See also
https://github.com/Haivision/srt
https://www.srtalliance.org/

Constructor & Destructor Documentation

◆ SRTSocket()

ts::SRTSocket::SRTSocket ( Report report)
explicit

Constructor.

Parameters
[in]reportWhere to report errors. The report object must remain valid as long as this object exists or setReport() is used with another Report object. If report is null, log messages are discarded.

Member Function Documentation

◆ open() [1/2]

bool ts::SRTSocket::open ( size_t  max_payload = NPOS)
inline

Open the socket using parameters from the command line.

Parameters
[in]max_payloadMaximum payload size in bytes. Unset if NPOS.
Returns
True on success, false on error.

◆ open() [2/2]

bool ts::SRTSocket::open ( SRTSocketMode  mode,
const IPSocketAddress local,
const IPSocketAddress remote,
size_t  max_payload = NPOS 
)

Open the socket.

Parameters
[in]modeSRT socket mode. If set to DEFAULT, the mode must have been specified in the command line options.
[in]localLocal socket address. Ignored in DEFAULT mode. Optional local IP address used in CALLER mode.
[in]remoteRemote socket address. Ignored in DEFAULT and LISTENER modes.
[in]max_payloadMaximum payload size in bytes. Unset if NPOS.
Returns
True on success, false on error.

◆ close()

bool ts::SRTSocket::close ( bool  silent = false)

Close the socket.

Parameters
[in]silentIf true, do not report errors through the logger. This is typically useful when the socket is in some error condition and closing it is necessary although it may generate additional meaningless errors.
Returns
True on success, false on error.

◆ defineArgs()

void ts::SRTSocket::defineArgs ( Args args)

Add command line option definitions in an Args.

Parameters
[in,out]argsCommand line arguments to update.

◆ loadArgs()

bool ts::SRTSocket::loadArgs ( DuckContext duck,
Args args 
)

Load arguments from command line.

Args error indicator is set in case of incorrect arguments.

Parameters
[in,out]duckTSDuck execution context.
[in,out]argsCommand line arguments.
Returns
True on success, false on error in argument line.

◆ setAddresses()

bool ts::SRTSocket::setAddresses ( const IPSocketAddress listener,
const IPSocketAddress caller,
const IPAddress local = IPAddress() 
)
inline

Preset local and remote socket addresses in string form.

  • If only listener is not empty, the socket is set in listener mode.
  • If only caller is not empty, the socket is set in caller mode.
  • If both addresses are not empty, the socket is set in rendezvous mode.
  • If both addresses are empty, the current mode of the socket is reset and local and/or remote addresses must be specified by command line arguments or through open().
    Parameters
    [in]listenerLocal "[address:]port".
    [in]callerRemote "address:port".
    [in]localOptional, can be empty. In caller mode, specify the local outgoing IP address.
    Returns
    True on success, false on error.

◆ getPeers()

bool ts::SRTSocket::getPeers ( IPSocketAddress local,
IPSocketAddress remote 
)

Get the socket peers, local and remote.

Parameters
[out]localLocal socket address.
[out]remoteRemote socket address.
Returns
True on success, false on error.

◆ send()

bool ts::SRTSocket::send ( const void *  data,
size_t  size 
)

Send a message to the default destination address and port.

Parameters
[in]dataAddress of the message to send.
[in]sizeSize in bytes of the message to send.
Returns
True on success, false on error.

◆ receive() [1/2]

bool ts::SRTSocket::receive ( void *  data,
size_t  max_size,
size_t &  ret_size 
)

Receive a message.

Parameters
[out]dataAddress of the buffer for the received message.
[in]max_sizeSize in bytes of the reception buffer.
[out]ret_sizeSize in bytes of the received message. Will never be larger than max_size.
Returns
True on success, false on error.

◆ receive() [2/2]

bool ts::SRTSocket::receive ( void *  data,
size_t  max_size,
size_t &  ret_size,
cn::microseconds &  timestamp 
)

Receive a message with timestamp.

Parameters
[out]dataAddress of the buffer for the received message.
[in]max_sizeSize in bytes of the reception buffer.
[out]ret_sizeSize in bytes of the received message. Will never be larger than max_size.
[out]timestampSource timestamp in micro-seconds, negative if not available.
Returns
True on success, false on error.

◆ totalSentBytes()

size_t ts::SRTSocket::totalSentBytes ( ) const

Get the total number of sent bytes since the socket was opened.

Returns
The total number of sent bytes since the socket was opened.

◆ totalReceivedBytes()

size_t ts::SRTSocket::totalReceivedBytes ( ) const

Get the total number of received bytes since the socket was opened.

Returns
The total number of received bytes since the socket was opened.

◆ peerDisconnected()

bool ts::SRTSocket::peerDisconnected ( ) const

Check if the connection was disconnected by the peer.

This can be used after a send/receive error to differentiate between "end of session" and actual error.

Returns
True if the connection was closed by the peer.

◆ reportStatistics()

bool ts::SRTSocket::reportStatistics ( SRTStatMode  mode = SRTStatMode::ALL)

Get statistics about the socket and report them.

Parameters
[in]modeType of statistics to report (or'ing bitmask values is allowed).
Returns
True on success, false on error.

◆ getSockOpt()

bool ts::SRTSocket::getSockOpt ( int  optName,
const char *  optNameStr,
void *  optval,
int &  optlen 
) const

Get SRT option.

Parameters
[in]optNameOption name as enumeration. The possible values for optName are given by the enumeration type SRT_SOCKOPT in libsrt. The profile of this method uses "int" to remain portable in the absence of libsrt, but the actual values come from SRT_SOCKOPT in libsrt.
[in]optNameStrOption name as ASCII string.
[out]optvalAddress of returned value.
[in,out]optlenSize of returned buffer (input), updated to size of returned value.
Returns
True on success, false on error.

◆ getSocket()

int ts::SRTSocket::getSocket ( ) const

Get the underlying SRT socket handle (use with care).

This method is reserved for low-level operations and should not be used by normal applications.

Returns
The underlying SRT socket handle.

◆ getMessageApi()

bool ts::SRTSocket::getMessageApi ( ) const

Check if the SRT socket uses the Message API.

Returns
True if the SRT socket uses the Message API. False if it uses the Buffer API.

◆ GetLibraryVersion()

static UString ts::SRTSocket::GetLibraryVersion ( )
static

Get the version of the SRT library.

Returns
A string describing the SRT library version (or the lack of SRT support).

◆ report()

Report & ts::ReporterBase::report ( ) const
inherited

Access the Report which is associated with this object.

Can be called from another thread only if the Report object is thread-safe.

Returns
A reference to the associated report.

◆ setReport() [1/2]

Report * ts::ReporterBase::setReport ( Report report)
inherited

Associate this object with another Report to log errors.

Parameters
[in]reportWhere to report errors. The report object must remain valid as long as this object exists or setReport() is used with another Report object. If report is null, log messages are discarded.
Returns
The address of the previous Report object or a null pointer if there was none.

◆ setReport() [2/2]

ReporterBase * ts::ReporterBase::setReport ( ReporterBase delegate)
inherited

Associate this object with another ReporterBase to log errors.

Parameters
[in]delegateUse the report of another ReporterBase. If delegate is null, the previous explicit Report is used..
Returns
The address of the previous ReporterBase object or a null pointer if there was none.

◆ muteReport()

bool ts::ReporterBase::muteReport ( bool  mute)
inherited

Temporarily mute the associated report.

Parameters
[in]muteIt true, report() will return a null report (log messages are discarded), until muteReport() is invoked again with mute set to false.
Returns
Previous state of the mute field.

◆ SilentLevel()

static int ts::ReporterBase::SilentLevel ( bool  silent)
inlinestaticinherited

Compute a log severity level from a "silent" parameter.

Some subclass methods have a "silent" parameter to avoid reporting errors which may be insignificant, typically when closing a device after an error, in which case the close operation may produce other errors if the previous error left the device in an inconsistent state. While those errors should not be displayed as errors, we still display them at debug level.

Parameters
[in]silentIf true, do not report errors, report debug messages instead.
Returns
Error when silent is false, Debug otherwise.

The documentation for this class was generated from the following file: