---
name: "OutgoingDataQueue"
section: "3"
platform: "linux"
package: "libccrtp-doc"
version: "2.0.9-4.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/OutgoingDataQueue"
---

# OutgoingDataQueue(3)

A generic outgoing RTP data queue supporting multiple destinations.

## NAME

OutgoingDataQueue - A generic outgoing RTP data queue supporting multiple destinations.

## SYNOPSIS

`#include <oqueue.h>`

Inherits **OutgoingDataQueueBase**, and **DestinationListHandler**.

Inherited by **RTPDataQueue**.

### 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.  bool **removeContributor** (uint32 csrc)\
 Remove CSRC from the list of contributors.  bool **isSending** () const\
 Determine if outgoing packets are waiting to send.  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.  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.  void **setPadding** (uint8 **paddinglen**)\
 Set padding.  void **setMark** (bool mark)\
 Set marker bit for the packet in which the next data provided will be send.  bool **getMark** () const\
 Get whether the mark bit will be set in the next packet.  size\_t **setPartial** (uint32 timestamp, unsigned char \*data, size\_t offset, size\_t max)\
 Set partial data for an already queued packet.  **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.  **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.  **microtimeout\_t** **getExpireTimeout** () const\
 uint32 **getSendPacketCount** () const\
 Get the total number of packets sent so far.  uint32 **getSendOctetCount** () const\
 Get the total number of octets (payload only) sent so far.  uint16 **getSequenceNumber** () const\
 Get the sequence number of the next outgoing packet.  void **setOutQueueCryptoContext** (**CryptoContext** \*cc)\
 Set output queue **CryptoContext**.  void **removeOutQueueCryptoContext** (**CryptoContext** \*cc)\
 Remove output queue **CryptoContext**.  **CryptoContext** \* **getOutQueueCryptoContext** (uint32 ssrc)\
 Get an output queue **CryptoContext** identified by SSRC.

Public Member Functions inherited from **OutgoingDataQueueBase** size\_t **getDefaultMaxSendSegmentSize** ()\
 void **setMaxSendSegmentSize** (size\_t size)\
 Set maximum payload segment size before fragmenting sends.  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.  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).  **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.  **microtimeout\_t** **getSchedulingTimeout** ()\
 This computes the timeout period for scheduling transmission of the next packet at the 'head' of the send buffer.  size\_t **dispatchDataPacket** ()\
 This function is used by the service thread to process the next outgoing packet pending in the sending queue.  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).  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.  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.  bool **removeDestinationFromList** (const InetAddress &ia, tpport\_t dataPort, tpport\_t controlPort)\
 Locks the object before modifying it.  **DestinationListHandler** ()\
 **~DestinationListHandler** ()\
 bool **isSingleDestination** () const\
 Get whether there is only a destination in the list.  **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 fedemp@altern.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`)

**Examples** **audiorx.cpp**, **audiotx.cpp**, **rtphello.cpp**, and **rtpsend.cpp**.

### 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.

**Examples** **audiotx.cpp**, **ccrtptest.cpp**, **rtpduphello.cpp**, **rtphello.cpp**, and **rtpsend.cpp**.

### 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**, **TRTPSessionBase\< RTPDataChannel, RTCPChannel, ServiceQueue \>**, and **TRTPSessionBase\< DualRTPUDPIPv4Channel, DualRTPUDPIPv4Channel, AVPQueue \>**.

### 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.

**Examples** **ccrtptest.cpp**, **rtpduphello.cpp**, **rtphello.cpp**, **rtplisten.cpp**, and **rtpsend.cpp**.

### 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.

**Examples** **audiorx.cpp**, **audiotx.cpp**, **ccrtptest.cpp**, **rtpduphello.cpp**, **rtphello.cpp**, and **rtpsend.cpp**.

## 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\]

## Author

Generated automatically by Doxygen for ccRTP from the source code.
