44 #ifndef CCXX_RTP_OQUEUE_H_
45 #define CCXX_RTP_OQUEUE_H_
70 std::list<TransportAddress*>
destList;
81 {
return (1 == destList.size()); }
84 {
return destList.front(); }
87 { destinationLock.readLock(); }
90 { destinationLock.unlock(); }
94 { destinationLock.writeLock(); }
100 addDestinationToList(
const InetAddress& ia, tpport_t data,
106 bool removeDestinationFromList(
const InetAddress& ia,
108 tpport_t controlPort);
113 networkAddress(na), dataTransportPort(dtp),
114 controlTransportPort(ctp)
118 {
return networkAddress; }
121 {
return dataTransportPort; }
124 {
return controlTransportPort; }
131 mutable ThreadLock destinationLock;
143 class __EXPORT DestinationListHandlerIPV6
146 struct TransportAddressIPV6;
147 std::list<TransportAddressIPV6*> destListIPV6;
150 DestinationListHandlerIPV6();
152 ~DestinationListHandlerIPV6();
157 inline bool isSingleDestinationIPV6()
const
158 {
return (1 == destListIPV6.size()); }
160 inline TransportAddressIPV6* getFirstDestinationIPV6()
const
161 {
return destListIPV6.front(); }
163 inline void lockDestinationListIPV6()
const
164 { destinationLock.readLock(); }
166 inline void unlockDestinationListIPV6()
const
167 { destinationLock.unlock(); }
170 inline void writeLockDestinationListIPV6()
const
171 { destinationLock.writeLock(); }
177 addDestinationToListIPV6(
const IPV6Address& ia, tpport_t data,
183 bool removeDestinationFromListIPV6(
const IPV6Address& ia,
185 tpport_t controlPort);
187 struct TransportAddressIPV6
189 TransportAddressIPV6(IPV6Address na, tpport_t dtp, tpport_t ctp) :
190 networkAddress(na), dataTransportPort(dtp),
191 controlTransportPort(ctp)
194 inline const IPV6Address& getNetworkAddress()
const
195 {
return networkAddress; }
197 inline tpport_t getDataTransportPort()
const
198 {
return dataTransportPort; }
200 inline tpport_t getControlTransportPort()
const
201 {
return controlTransportPort; }
203 IPV6Address networkAddress;
204 tpport_t dataTransportPort, controlTransportPort;
208 mutable ThreadLock destinationLock;
223 protected DestinationListHandlerIPV6,
230 addDestination(
const IPV6Address& ia,
232 tpport_t controlPort = 0);
235 forgetDestination(
const IPV6Address& ia,
237 tpport_t controlPort = 0);
242 addDestination(
const InetHostAddress& ia,
244 tpport_t controlPort = 0);
247 addDestination(
const InetMcastAddress& ia,
249 tpport_t controlPort = 0);
252 forgetDestination(
const InetHostAddress& ia,
254 tpport_t controlPort = 0);
257 forgetDestination(
const InetMcastAddress& ia,
259 tpport_t controlPort = 0);
267 addContributor(uint32 csrc);
273 removeContributor(uint32 csrc);
297 putData(uint32 stamp,
const unsigned char* data = NULL,
size_t len = 0);
312 sendImmediate(uint32 stamp,
const unsigned char* data = NULL,
size_t len = 0);
322 { sendInfo.paddinglen = paddinglen; }
333 { sendInfo.marked = mark; }
339 {
return sendInfo.marked; }
352 setPartial(uint32 timestamp,
unsigned char* data,
size_t offset,
size_t max);
356 {
return defaultSchedulingTimeout; }
366 { schedulingTimeout = to; }
370 {
return defaultExpireTimeout; }
381 { expireTimeout = to; }
384 {
return expireTimeout; }
393 {
return sendInfo.packetCount; }
402 {
return sendInfo.octetCount; }
411 {
return sendInfo.sendSeq; }
443 getOutQueueCryptoContext(uint32 ssrc);
457 packet(pkt), prev(p), next(n) { }
499 getSchedulingTimeout();
508 dispatchDataPacket();
520 { sendInfo.sendSeq = seqNum; }
524 {
return sendInfo.sendSeq; }
530 { initialTimestamp = ts; }
536 {
return initialTimestamp; }
538 void purgeOutgoingQueue();
545 setControlPeerIPV6(
const IPV6Address &host, tpport_t port) {}
562 setDataPeer(
const InetAddress &host, tpport_t port) {}
566 setDataPeerIPV6(
const IPV6Address &host, tpport_t port) {}
579 sendData(
const unsigned char*
const buffer,
size_t len) {
return 0;}
583 sendDataIPV6(
const unsigned char*
const buffer,
size_t len) {
return 0;}
588 mutable ThreadLock sendLock;
590 OutgoingRTPPktLink* sendFirst, * sendLast;
591 uint32 initialTimestamp;
606 uint32 sendSources[16];
618 uint32 initialTimestamp;
629 #endif //CCXX_RTP_OQUEUE_H_