OutgoingDataQueue Class Reference
Generic RTP output queues.

A generic outgoing RTP data queue supporting multiple destinations. More...

`#include <oqueue.h>`

Inheritance diagram for OutgoingDataQueue:

## Classes

struct | OutgoingRTPPktLink

## Public Member Functions

bool | addDestination (const InetHostAddress &ia, tpport_t dataPort=DefaultRTPDataPort, tpport_t controlPort=0)
bool | addDestination (const InetMcastAddress &ia, tpport_t dataPort=DefaultRTPDataPort, tpport_t controlPort=0)
bool | forgetDestination (const InetHostAddress &ia, tpport_t dataPort=DefaultRTPDataPort, tpport_t controlPort=0)
bool | forgetDestination (const InetMcastAddress &ia, tpport_t dataPort=DefaultRTPDataPort, tpport_t controlPort=0)
void | addContributor (uint32 csrc)
| Add csrc as the CSRC identifier of a new contributor. More...
bool | removeContributor (uint32 csrc)
| Remove CSRC from the list of contributors. More...
bool | isSending () const
| Determine if outgoing packets are waiting to send. More...
void | putData (uint32 stamp, const unsigned char *data=NULL, size_t len=0)
| This is used to create a data packet in the send queue. More...
void | sendImmediate (uint32 stamp, const unsigned char *data=NULL, size_t len=0)
| This is used to create a data packet and send it immediately. More...
void | setPadding (uint8 paddinglen)
| Set padding. More...
void | setMark (bool mark)
| Set marker bit for the packet in which the next data provided will be send. More...
bool | getMark () const
| Get whether the mark bit will be set in the next packet. More...
size_t | setPartial (uint32 timestamp, unsigned char *data, size_t offset, size_t max)
| Set partial data for an already queued packet. More...
microtimeout_t | getDefaultSchedulingTimeout () const
void | setSchedulingTimeout (microtimeout_t to)
| Set the default scheduling timeout to use when no data packets are waiting to be sent. More...
microtimeout_t | getDefaultExpireTimeout () const
void | setExpireTimeout (microtimeout_t to)
| Set the "expired" timer for expiring packets pending in the send queue which have gone unsent and are already "too late" to be sent now. More...
microtimeout_t | getExpireTimeout () const
uint32 | getSendPacketCount () const
| Get the total number of packets sent so far. More...
uint32 | getSendOctetCount () const
| Get the total number of octets (payload only) sent so far. More...
uint16 | getSequenceNumber () const
| Get the sequence number of the next outgoing packet. More...
void | setOutQueueCryptoContext (CryptoContext *cc)
| Set output queue CryptoContext. More...
void | removeOutQueueCryptoContext (CryptoContext *cc)
| Remove output queue CryptoContext. More...
CryptoContext * | getOutQueueCryptoContext (uint32 ssrc)
| Get an output queue CryptoContext identified by SSRC. More...
Public Member Functions inherited from OutgoingDataQueueBase
size_t | getDefaultMaxSendSegmentSize ()
void | setMaxSendSegmentSize (size_t size)
| Set maximum payload segment size before fragmenting sends. More...
size_t | getMaxSendSegmentSize ()
Public Member Functions inherited from RTPQueueBase
bool | setPayloadFormat (const PayloadFormat &pf)
| Set the payload format in use, for timing and payload type identification purposes. More...
uint32 | getLocalSSRC () const
uint32 | getCurrentRTPClockRate () const
| Get the clock rate in RTP clock units (for instance, 8000 units per second for PCMU, or 90000 units per second for MP2T). More...
PayloadType | getCurrentPayloadType () const
timeval | getInitialTime () const

## Protected Member Functions

| OutgoingDataQueue ()
virtual | ~OutgoingDataQueue ()
void | dispatchImmediate (OutgoingRTPPkt *packet)
| This is used to write the RTP data packet to one or more destinations. More...
microtimeout_t | getSchedulingTimeout ()
| This computes the timeout period for scheduling transmission of the next packet at the "head" of the send buffer. More...
size_t | dispatchDataPacket ()
| This function is used by the service thread to process the next outgoing packet pending in the sending queue. More...
void | setNextSeqNum (uint32 seqNum)
| For thoses cases in which the application requires a method to set the sequence number for the outgoing stream (such as for implementing the RTSP PLAY command). More...
uint32 | getCurrentSeqNum (void)
void | setInitialTimestamp (uint32 ts)
uint32 | getInitialTimestamp ()
void | purgeOutgoingQueue ()
virtual void | setControlPeer (const InetAddress &host, tpport_t port)
Protected Member Functions inherited from OutgoingDataQueueBase
| OutgoingDataQueueBase ()
virtual | ~OutgoingDataQueueBase ()
Protected Member Functions inherited from RTPQueueBase
| RTPQueueBase (uint32 *ssrc=NULL)
void | setLocalSSRC (uint32 ssrc)
uint32 | getLocalSSRCNetwork () const
virtual | ~RTPQueueBase ()
virtual size_t | dispatchBYE (const std::string &)
| A plugin point for posting of BYE messages. More...
virtual void | renewLocalSSRC ()
Protected Member Functions inherited from DestinationListHandler
void | writeLockDestinationList () const
bool | addDestinationToList (const InetAddress &ia, tpport_t data, tpport_t control)
| Locks the object before modifying it. More...
bool | removeDestinationFromList (const InetAddress &ia, tpport_t dataPort, tpport_t controlPort)
| Locks the object before modifying it. More...
| DestinationListHandler ()
| ~DestinationListHandler ()
bool | isSingleDestination () const
| Get whether there is only a destination in the list. More...
TransportAddress * | getFirstDestination () const
void | lockDestinationList () const
void | unlockDestinationList () const

## Protected Attributes

Mutex | cryptoMutex
std::list< CryptoContext * > | cryptoContexts
Protected Attributes inherited from DestinationListHandler
std::list< TransportAddress * > | destList

## Detailed Description

A generic outgoing RTP data queue supporting multiple destinations.

Author
  Federico Montesino Pouzols fedem.nosp@m.p@al.nosp@m.tern..nosp@m.org

## Constructor & Destructor Documentation

OutgoingDataQueue::OutgoingDataQueue | ( |  | ) |

protected

virtual OutgoingDataQueue::~OutgoingDataQueue | ( |  | ) |

inline protected virtual

## Member Function Documentation

void OutgoingDataQueue::addContributor | ( | uint32 | csrc | ) |

Add csrc as the CSRC identifier of a new contributor.

This method adds the CSRC identifier to a list of contributors that will be inserted in every packet enqueued from now on.

bool OutgoingDataQueue::addDestination | ( | const InetHostAddress & | ia,
|  | tpport_t | dataPort = `DefaultRTPDataPort`,
|  | tpport_t | controlPort = `0`
| ) |  |

bool OutgoingDataQueue::addDestination | ( | const InetMcastAddress & | ia,
|  | tpport_t | dataPort = `DefaultRTPDataPort`,
|  | tpport_t | controlPort = `0`
| ) |  |

size_t OutgoingDataQueue::dispatchDataPacket | ( |  | ) |

protected

This function is used by the service thread to process the next outgoing packet pending in the sending queue.

Returns
  number of bytes sent. 0 if silent, <0 if error.

void OutgoingDataQueue::dispatchImmediate | ( | OutgoingRTPPkt * | packet | ) |

protected

This is used to write the RTP data packet to one or more destinations.

It is used by both sendImmediate and by dispatchDataPacket.

Parameters

  RTP | packet to send.

bool OutgoingDataQueue::forgetDestination | ( | const InetHostAddress & | ia,
|  | tpport_t | dataPort = `DefaultRTPDataPort`,
|  | tpport_t | controlPort = `0`
| ) |  |

bool OutgoingDataQueue::forgetDestination | ( | const InetMcastAddress & | ia,
|  | tpport_t | dataPort = `DefaultRTPDataPort`,
|  | tpport_t | controlPort = `0`
| ) |  |

uint32 OutgoingDataQueue::getCurrentSeqNum | ( | void |  | ) |

inline protected

microtimeout_t OutgoingDataQueue::getDefaultExpireTimeout | ( |  | ) | const

inline

microtimeout_t OutgoingDataQueue::getDefaultSchedulingTimeout | ( |  | ) | const

inline

microtimeout_t OutgoingDataQueue::getExpireTimeout | ( |  | ) | const

inline

uint32 OutgoingDataQueue::getInitialTimestamp | ( |  | ) |

inline protected

bool OutgoingDataQueue::getMark | ( |  | ) | const

inline

Get whether the mark bit will be set in the next packet.

CryptoContext* OutgoingDataQueue::getOutQueueCryptoContext | ( | uint32 | ssrc | ) |

Get an output queue CryptoContext identified by SSRC.

Parameters

  ssrc | Request CryptoContext for this incoming SSRC

Returns
  Pointer to CryptoContext of the SSRC of NULL if no context available for this SSRC.

microtimeout_t OutgoingDataQueue::getSchedulingTimeout | ( |  | ) |

protected

This computes the timeout period for scheduling transmission of the next packet at the "head" of the send buffer.

If no packets are waiting, a default timeout is used. This actually forms the "isPending()" timeout of the rtp receiver in the service thread.

Returns
  timeout until next packet is scheduled to send.

uint32 OutgoingDataQueue::getSendOctetCount | ( |  | ) | const

inline

Get the total number of octets (payload only) sent so far.

Returns
  total number of payload octets sent in RTP packets.

uint32 OutgoingDataQueue::getSendPacketCount | ( |  | ) | const

inline

Get the total number of packets sent so far.

Returns
  total number of packets sent

uint16 OutgoingDataQueue::getSequenceNumber | ( |  | ) | const

inline

Get the sequence number of the next outgoing packet.

Returns
  the 16 bit sequence number.

bool OutgoingDataQueue::isSending | ( |  | ) | const

Determine if outgoing packets are waiting to send.

Returns
  true if there are packets waiting to be send.

void OutgoingDataQueue::purgeOutgoingQueue | ( |  | ) |

protected

void OutgoingDataQueue::putData | ( | uint32 | stamp,
|  | const unsigned char * | data = `NULL`,
|  | size_t | len = `0`
| ) |  |

This is used to create a data packet in the send queue.

Sometimes a "NULL" or empty packet will be used instead, and these are known as "silent" packets. "Silent" packets are used simply to "push" the scheduler along more accurately by giving the appearance that a next packet is waiting to be sent and to provide a valid timestamp for that packet.

Parameters

  stamp | Timestamp for expected send time of packet.
  data | Value or NULL if special "silent" packet.
  len | May be 0 to indicate a default by payload type.

bool OutgoingDataQueue::removeContributor | ( | uint32 | csrc | ) |

Remove CSRC from the list of contributors.

void OutgoingDataQueue::removeOutQueueCryptoContext | ( | CryptoContext * | cc | ) |

Remove output queue CryptoContext.

The endQueue method (provided by RTPQueue) also deletes all registered CryptoContexts.

Parameters

  cc | Pointer to initialized CryptoContext to remove.

void OutgoingDataQueue::sendImmediate | ( | uint32 | stamp,
|  | const unsigned char * | data = `NULL`,
|  | size_t | len = `0`
| ) |  |

This is used to create a data packet and send it immediately.

Sometimes a "NULL" or empty packet will be used instead, and these are known as "silent" packets. "Silent" packets are used simply to "push" the scheduler along more accurately by giving the appearance that a next packet is waiting to be sent and to provide a valid timestamp for that packet.

Parameters

  stamp | Timestamp immediate send time of packet.
  data | Value or NULL if special "silent" packet.
  len | May be 0 to indicate a default by payload type.

virtual void OutgoingDataQueue::setControlPeer | ( | const InetAddress & | host,
|  | tpport_t | port
| ) |  |

inline protected virtual

Reimplemented in RTPDuplex.

void OutgoingDataQueue::setExpireTimeout | ( | microtimeout_t | to | ) |

inline

Set the "expired" timer for expiring packets pending in the send queue which have gone unsent and are already "too late" to be sent now.

Parameters

  to | timeout to expire unsent packets in milliseconds.

void OutgoingDataQueue::setInitialTimestamp | ( | uint32 | ts | ) |

inline protected

void OutgoingDataQueue::setMark | ( | bool | mark | ) |

inline

Set marker bit for the packet in which the next data provided will be send.

When transmitting audio, should be set for the first packet of a talk spurt. When transmitting video, should be set for the last packet for a video frame.

Parameters

  mark | Marker bit value for next packet.

void OutgoingDataQueue::setNextSeqNum | ( | uint32 | seqNum | ) |

inline protected

For thoses cases in which the application requires a method to set the sequence number for the outgoing stream (such as for implementing the RTSP PLAY command).

Parameters

  seqNum | next sequence number to be used for outgoing packets.

void OutgoingDataQueue::setOutQueueCryptoContext | ( | CryptoContext * | cc | ) |

Set output queue CryptoContext.

The endQueue method (provided by RTPQueue) deletes all registered CryptoContexts.

Parameters

  cc | Pointer to initialized CryptoContext.

void OutgoingDataQueue::setPadding | ( | uint8 | paddinglen | ) |

inline

Set padding.

All outgoing packets will be transparently padded to a multiple of paddinglen.

Parameters

  paddinglen | pad packets to a length multiple of paddinglen.

size_t OutgoingDataQueue::setPartial | ( | uint32 | timestamp,
|  | unsigned char * | data,
|  | size_t | offset,
|  | size_t | max
| ) |  |

Set partial data for an already queued packet.

This is often used for multichannel data.

Parameters

  timestamp | Timestamp of packet.
  data | Buffer to copy from.
  offset | Offset to copy from.
  max | Maximum data size.

Returns
  Number of packet data bytes set.

void OutgoingDataQueue::setSchedulingTimeout | ( | microtimeout_t | to | ) |

inline

Set the default scheduling timeout to use when no data packets are waiting to be sent.

Parameters

  to | timeout in milliseconds.

## Member Data Documentation

bool OutgoingDataQueue::complete

std::list<CryptoContext *> OutgoingDataQueue::cryptoContexts

protected

Mutex OutgoingDataQueue::cryptoMutex

mutable protected

bool OutgoingDataQueue::marked

uint32 OutgoingDataQueue::octetCount

timeval OutgoingDataQueue::overflowTime

uint32 OutgoingDataQueue::packetCount

uint8 OutgoingDataQueue::paddinglen

uint16 OutgoingDataQueue::sendCC

uint16 OutgoingDataQueue::sendSeq

uint32 OutgoingDataQueue::sendSources[16]

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

- oqueue.h