43 #ifndef CCXX_RTP_IQUEUE_H_
44 #define CCXX_RTP_IQUEUE_H_
88 { activeSenders = n; }
100 {
return activeSenders; }
115 uint32 activeSenders;
135 {
return source.getLink(); }
139 { source.setLink(link); }
143 { source.setParticipant(p); }
147 { source.setState(ns); }
151 { source.setSender(active); }
155 { source.setDataTransportPort(p); }
159 { source.setControlTransportPort(p); }
163 { source.setNetworkAddress(addr); }
184 const std::string& val)
185 { part->setSDESItem(item,val); }
189 { part->setPRIVPrefix(val); }
210 { app.addParticipant(part); }
214 RTPApplication::ParticipantLink* pl)
215 { app.removeParticipant(pl); }
238 tpport_t dtp, tpport_t ctp);
244 {
return networkAddress; }
247 {
return dataTransportPort; }
250 {
return controlTransportPort; }
276 void addConflict(
const InetAddress& na, tpport_t dtp, tpport_t ctp);
280 { firstConflict = lastConflict = NULL; }
307 {
return defaultMembersHashSize; }
334 struct SyncSourceLink;
343 {
return getLink(source)->getMembership() ==
this; }
354 struct timeval& recv_ts,
363 srcPrev(sp), srcNext(sn),
364 receptionTime(recv_ts),
365 shiftedTimestamp(shifted_ts)
372 {
return sourceLink; }
375 { sourceLink = src; }
415 { receptionTime = t; }
421 {
return receptionTime; }
432 {
return shiftedTimestamp; }
435 { shiftedTimestamp = ts;}
446 struct timeval receptionTime;
481 membership(m), source(s), first(fp), last(lp),
482 prev(ps), next(ns), nextCollis(ncollis),
494 {
return membership; }
547 {
return nextCollis; }
553 {
return prevConflict; }
559 tpport_t controlPort);
562 {
return senderInfo; }
567 {
return receiverInfo; }
572 {
return lastPacketTime; }
575 {
return lastRTCPPacketTime; }
578 {
return lastRTCPSRTime; }
585 {
return obsPacketCount; }
588 { obsPacketCount++; }
595 {
return obsOctetCount; }
598 { obsOctetCount += n; }
605 {
return maxSeqNum; }
617 {
return extendedMaxSeqNum; }
621 { extendedMaxSeqNum = seq; }
624 {
return cumulativePacketLost; }
627 { cumulativePacketLost = pl; }
630 {
return fractionLost; }
633 { fractionLost = fl; }
636 {
return lastPacketTransitTime; }
639 { lastPacketTransitTime = time; }
648 {
return initialDataTimestamp; }
651 { initialDataTimestamp = ts; }
654 {
return initialDataTime; }
657 { initialDataTime = it; }
688 {
return badSeqNum; }
694 {
return probation; }
703 {
return 0 == probation; }
706 {
return baseSeqNum; }
709 { baseSeqNum = seqnum; }
712 {
return seqNumAccum; }
715 { seqNumAccum += SEQNUMMOD; }
721 { maxSeqNum = seqNumAccum = seqnum; }
871 uint32 sourceBucketsNum;
910 {
return *(link->getSource()); }
913 {
return link->getSource(); }
916 link = link->getNext();
928 {
return l.link == r.link; }
932 {
return l.link != r.link; }
999 { minValidPacketSequence = packets; }
1003 {
return defaultMinValidPacketSequence; }
1011 {
return minValidPacketSequence; }
1015 { maxPacketMisorder = packets; }
1019 {
return defaultMaxPacketMisorder; }
1023 {
return maxPacketMisorder; }
1032 { maxPacketDropout = packets; }
1036 {
return defaultMaxPacketDropout; }
1040 {
return maxPacketDropout; }
1044 inline static size_t
1046 {
return defaultMembersSize; }
1104 bool is_new, InetAddress& na,
1123 { sourceExpirationPeriod = intervals; }
1165 const timeval recvtime);
1272 InetHostAddress& host, tpport_t& port) = 0;
Interface (envelope) to data received over RTP packets.
Definition: queuebase.h:69
Application objects modification methods.
Definition: iqueue.h:206
void removeParticipant(RTPApplication &app, RTPApplication::ParticipantLink *pl)
Definition: iqueue.h:213
virtual ~ApplicationHandler()
Definition: iqueue.h:221
ApplicationHandler()
Definition: iqueue.h:218
void addParticipant(RTPApplication &app, Participant &part)
Definition: iqueue.h:209
To track addresses of sources conflicting with the local one.
Definition: iqueue.h:233
virtual ~ConflictHandler()
Definition: iqueue.h:282
void addConflict(const InetAddress &na, tpport_t dtp, tpport_t ctp)
ConflictingTransportAddress * firstConflict
Definition: iqueue.h:285
ConflictingTransportAddress * searchDataConflict(InetAddress na, tpport_t dtp)
ConflictHandler()
Definition: iqueue.h:279
ConflictingTransportAddress * searchControlConflict(InetAddress na, tpport_t ctp)
void updateConflict(ConflictingTransportAddress &ca)
Definition: iqueue.h:273
The implementation for a SRTP cryptographic context.
Definition: CryptoContext.h:82
iterator through the list of synchronizations sources in this session
Definition: iqueue.h:893
std::ptrdiff_t difference_type
Definition: iqueue.h:897
SyncSource value_type
Definition: iqueue.h:896
reference operator*() const
Definition: iqueue.h:909
pointer operator->() const
Definition: iqueue.h:912
std::forward_iterator_tag iterator_category
Definition: iqueue.h:895
friend bool operator==(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition: iqueue.h:926
const SyncSource * pointer
Definition: iqueue.h:898
SyncSourcesIterator & operator++()
Definition: iqueue.h:915
SyncSourcesIterator operator++(int)
Definition: iqueue.h:920
friend bool operator!=(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition: iqueue.h:930
const SyncSource & reference
Definition: iqueue.h:899
SyncSourcesIterator(SyncSourceLink *l=NULL)
Definition: iqueue.h:901
SyncSourcesIterator(const SyncSourcesIterator &si)
Definition: iqueue.h:905
Definition: queuebase.h:296
Queue for incoming RTP data packets in an RTP session.
Definition: iqueue.h:885
static const size_t defaultMembersSize
Definition: iqueue.h:1287
static const uint16 defaultMaxPacketDropout
Definition: iqueue.h:1283
bool insertRecvPacket(IncomingRTPPktLink *packetLink)
Insert a just received packet in the queue (both general and source specific queues).
uint16 getDefaultMaxPacketMisorder() const
Definition: iqueue.h:1018
uint8 getMinValidPacketSequence() const
Get the minimun number of consecutive packets that must be received from a source before accepting it...
Definition: iqueue.h:1010
bool isWaiting(const SyncSource *src=NULL) const
Determine if packets are waiting in the reception queue.
CryptoContext * getInQueueCryptoContext(uint32 ssrc)
Get an input queue CryptoContext identified by SSRC.
void recordExtraction(const IncomingRTPPkt &pkt)
Log extraction of a packet from this source from the scheduled reception queue.
uint32 getFirstTimestamp(const SyncSource *src=NULL) const
Get timestamp of first packet waiting in the queue.
uint16 maxPacketMisorder
Definition: iqueue.h:1285
uint8 getDefaultMinValidPacketSequence() const
Definition: iqueue.h:1002
virtual void onExpireRecv(IncomingRTPPkt &)
A hook to filter packets in the receive queue that are being expired.
Definition: iqueue.h:1217
virtual bool end2EndDelayed(IncomingRTPPktLink &)
Definition: iqueue.h:1238
void setMaxPacketMisorder(uint16 packets)
Definition: iqueue.h:1014
bool recordReception(SyncSourceLink &srcLink, const IncomingRTPPkt &pkt, const timeval recvtime)
Log reception of a new RTP packet from this source.
void setMinValidPacketSequence(uint8 packets)
When receiving packets from a new source, it may be convenient to reject a first few packets before w...
Definition: iqueue.h:998
void setSourceExpirationPeriod(uint8 intervals)
Set the number of RTCP intervals that the stack will wait to change the state of a source from stateA...
Definition: iqueue.h:1122
SyncSourcesIterator end()
Definition: iqueue.h:941
static size_t getDefaultMembersSize()
Definition: iqueue.h:1045
void setMaxPacketDropout(uint16 packets)
It also prevents packets sent after a restart of the source being immediately accepted.
Definition: iqueue.h:1031
void setInQueueCryptoContext(CryptoContext *cc)
Set input queue CryptoContext.
virtual void onNewSyncSource(const SyncSource &)
Virtual called when a new synchronization source has joined the session.
Definition: iqueue.h:1185
uint8 minValidPacketSequence
Definition: iqueue.h:1284
const AppDataUnit * getData(uint32 stamp, const SyncSource *src=NULL)
Retreive data from a specific timestamped packet if such a packet is currently available in the recei...
static const uint16 defaultMaxPacketMisorder
Definition: iqueue.h:1282
uint16 getMaxPacketMisorder() const
Definition: iqueue.h:1022
uint8 sourceExpirationPeriod
Definition: iqueue.h:1288
IncomingDataQueue::IncomingRTPPktLink * getWaiting(uint32 timestamp, const SyncSource *src=NULL)
This is used to fetch a packet in the receive queue and to expire packets older than the current time...
IncomingRTPPktLink * recvFirst
Definition: iqueue.h:1279
Mutex cryptoMutex
Definition: iqueue.h:1289
virtual ~IncomingDataQueue()
Definition: iqueue.h:1088
bool checkSSRCInIncomingRTPPkt(SyncSourceLink &sourceLink, bool is_new, InetAddress &na, tpport_t tp)
Apply collision and loop detection and correction algorithm when receiving RTP data packets.
void removeInQueueCryptoContext(CryptoContext *cc)
Remove input queue CryptoContext.
virtual bool onSRTPPacketError(IncomingRTPPkt &pkt, int32 errorCode)
A hook that gets called if the decoding of an incoming SRTP was erroneous.
Definition: iqueue.h:1234
uint16 getMaxPacketDropout() const
Definition: iqueue.h:1039
uint16 maxPacketDropout
Definition: iqueue.h:1286
void purgeIncomingQueue()
virtual bool onRTPPacketRecv(IncomingRTPPkt &)
A virtual function to support parsing of arriving packets to determine if they should be kept in the ...
Definition: iqueue.h:1206
uint16 getDefaultMaxPacketDropout() const
Definition: iqueue.h:1035
virtual size_t getNextDataPacketSize() const =0
ThreadLock recvLock
Definition: iqueue.h:1277
SyncSourcesIterator begin()
Definition: iqueue.h:938
virtual size_t recvData(unsigned char *buffer, size_t length, InetHostAddress &host, tpport_t &port)=0
This function performs the physical I/O for reading a packet from the source.
IncomingDataQueue(uint32 size)
virtual size_t takeInDataPacket()
This function is used by the service thread to process the next incoming packet and place it in the r...
static const uint8 defaultMinValidPacketSequence
Definition: iqueue.h:1281
std::list< CryptoContext * > cryptoContexts
Definition: iqueue.h:1290
RTP packets received from other participants.
Definition: rtppkt.h:705
members and senders accounting
Definition: iqueue.h:68
void setMembersCount(uint32 n)
Definition: iqueue.h:71
void increaseMembersCount()
Definition: iqueue.h:75
void increaseSendersCount()
Definition: iqueue.h:91
uint32 getSendersCount() const
Definition: iqueue.h:99
void decreaseSendersCount()
Definition: iqueue.h:95
void setSendersCount(uint32 n)
Definition: iqueue.h:87
void decreaseMembersCount()
Definition: iqueue.h:79
Members()
Definition: iqueue.h:103
uint32 getMembersCount() const
Definition: iqueue.h:83
virtual ~Members()
Definition: iqueue.h:108
Controls the group membership in the current session.
Definition: iqueue.h:304
virtual ~MembershipBookkeeping()
Purges all RTPSource structures created during the session, as well as the hash table and the list of...
Definition: iqueue.h:331
static const uint32 SEQNUMMOD
Definition: iqueue.h:855
size_t getDefaultMembersHashSize()
Definition: iqueue.h:306
bool isMine(const SyncSource &source) const
Get whether a synchronization source is recorded in this membership controller.
Definition: iqueue.h:342
SyncSourceLink * getFirst()
Definition: iqueue.h:836
void setMembersCount(uint32 n)
Definition: iqueue.h:847
SyncSourceLink * getLast()
Definition: iqueue.h:839
static const size_t defaultMembersHashSize
Definition: iqueue.h:854
uint32 getSendersCount()
Definition: iqueue.h:851
uint32 getMembersCount()
Definition: iqueue.h:843
bool BYESource(uint32 ssrc)
Mark the source identified by ssrc as having sent a BYE packet.
bool removeSource(uint32 ssrc)
Remove the description of the source identified by ssrc
SyncSourceLink * getLink(const SyncSource &source) const
Definition: iqueue.h:336
SyncSourceLink * getSourceBySSRC(uint32 ssrc, bool &created)
Get the description of a source by its ssrc identifier.
bool isRegistered(uint32 ssrc)
Returns whether there is already a synchronizacion source with "ssrc" SSRC identifier.
MembershipBookkeeping(uint32 initialSize=defaultMembersHashSize)
The initial size is a hint to allocate the resources needed in order to keep the members' identifiers...
Participant objects modification methods.
Definition: iqueue.h:180
void setSDESItem(Participant *part, SDESItemType item, const std::string &val)
Definition: iqueue.h:183
virtual ~ParticipantHandler()
Definition: iqueue.h:195
ParticipantHandler()
Definition: iqueue.h:192
void setPRIVPrefix(Participant *part, const std::string val)
Definition: iqueue.h:188
A class of objects representing remote participants (RTP applications) in a multimedia session.
Definition: sources.h:125
An RTP application, holding identifying RTCP SDES item values.
Definition: sources.h:365
SyncSource objects modification methods.
Definition: iqueue.h:125
void * getLink(const SyncSource &source) const
This requires SyncSource - SyncSourceHandler friendship.
Definition: iqueue.h:134
void setParticipant(SyncSource &source, Participant &p)
Definition: iqueue.h:142
virtual ~SyncSourceHandler()
Definition: iqueue.h:169
void setDataTransportPort(SyncSource &source, tpport_t p)
Definition: iqueue.h:154
SyncSourceHandler()
Definition: iqueue.h:166
void setNetworkAddress(SyncSource &source, InetAddress addr)
Definition: iqueue.h:162
void setSender(SyncSource &source, bool active)
Definition: iqueue.h:150
void setState(SyncSource &source, SyncSource::State ns)
Definition: iqueue.h:146
void setLink(SyncSource &source, void *link)
Definition: iqueue.h:138
void setControlTransportPort(SyncSource &source, tpport_t p)
Definition: iqueue.h:158
Synchronization source in an RTP session.
Definition: sources.h:193
State
Synchronization source states during an RTP session.
Definition: sources.h:225
SDESItemType
SDES items that may be carried in a Source DEScription RTCP packet.
Definition: rtcppkt.h:65
Base classes for RTP queues.
ConflictingTransportAddress(InetAddress na, tpport_t dtp, tpport_t ctp)
tpport_t getDataTransportPort() const
Definition: iqueue.h:246
void setNext(ConflictingTransportAddress *nc)
Definition: iqueue.h:240
tpport_t getControlTransportPort() const
Definition: iqueue.h:249
timeval lastPacketTime
Definition: iqueue.h:257
tpport_t dataTransportPort
Definition: iqueue.h:253
const InetAddress & getNetworkAddress() const
Definition: iqueue.h:243
ConflictingTransportAddress * next
Definition: iqueue.h:255
InetAddress networkAddress
Definition: iqueue.h:252
tpport_t controlTransportPort
Definition: iqueue.h:254
Incoming RTP data packets control structure within the incoming packet queue class.
Definition: iqueue.h:352
void setSourceLink(SyncSourceLink *src)
Definition: iqueue.h:374
IncomingRTPPktLink * getNext() const
Definition: iqueue.h:377
IncomingRTPPktLink * next
Definition: iqueue.h:442
uint32 shiftedTimestamp
Definition: iqueue.h:450
IncomingRTPPktLink * getPrev() const
Definition: iqueue.h:383
~IncomingRTPPktLink()
Definition: iqueue.h:368
void setRecvTime(const timeval &t)
Set the time this packet was received at.
Definition: iqueue.h:414
IncomingRTPPkt * getPacket() const
Definition: iqueue.h:401
IncomingRTPPktLink(IncomingRTPPkt *pkt, SyncSourceLink *sLink, struct timeval &recv_ts, uint32 shifted_ts, IncomingRTPPktLink *sp, IncomingRTPPktLink *sn, IncomingRTPPktLink *p, IncomingRTPPktLink *n)
Definition: iqueue.h:353
void setNext(IncomingRTPPktLink *nl)
Definition: iqueue.h:380
void setPrev(IncomingRTPPktLink *pl)
Definition: iqueue.h:386
void setPacket(IncomingRTPPkt *pkt)
Definition: iqueue.h:404
SyncSourceLink * sourceLink
Definition: iqueue.h:440
IncomingRTPPktLink * getSrcNext() const
Definition: iqueue.h:389
void setSrcNext(IncomingRTPPktLink *sn)
Definition: iqueue.h:392
IncomingRTPPkt * packet
Definition: iqueue.h:438
SyncSourceLink * getSourceLink() const
Definition: iqueue.h:371
timeval getRecvTime() const
Get the time this packet was received at.
Definition: iqueue.h:420
uint32 getTimestamp() const
Get timestamp of this packet.
Definition: iqueue.h:431
IncomingRTPPktLink * getSrcPrev() const
Definition: iqueue.h:395
void setTimestamp(uint32 ts)
Definition: iqueue.h:434
void setSrcPrev(IncomingRTPPktLink *sp)
Definition: iqueue.h:398
Synchronization Source internal handler within the incoming packets queue.
Definition: iqueue.h:470
void setLast(IncomingRTPPktLink *lp)
Definition: iqueue.h:519
timeval getLastRTCPSRTime() const
Definition: iqueue.h:577
MembershipBookkeeping * membership
Definition: iqueue.h:743
unsigned char * receiverInfo
Definition: iqueue.h:755
void setSenderInfo(unsigned char *si)
timeval lastPacketTime
Definition: iqueue.h:758
SyncSourceLink * next
Definition: iqueue.h:750
uint16 baseSeqNum
Definition: iqueue.h:789
void setExtendedMaxSeqNum(uint32 seq)
Definition: iqueue.h:620
uint32 receivedPrior
Definition: iqueue.h:791
uint16 maxSeqNum
Definition: iqueue.h:771
void setNext(SyncSourceLink *ns)
Definition: iqueue.h:537
void setBadSeqNum(uint32 seq)
Definition: iqueue.h:690
uint32 badSeqNum
Definition: iqueue.h:787
unsigned char * getReceiverInfo()
Definition: iqueue.h:566
timeval getInitialDataTime() const
Definition: iqueue.h:653
float jitter
Definition: iqueue.h:778
uint8 getFractionLost() const
Definition: iqueue.h:629
void initSequence(uint16 seqnum)
Start a new sequence of received packets.
Definition: iqueue.h:720
void incSeqNumAccum()
Definition: iqueue.h:714
bool isValid() const
Definition: iqueue.h:702
SyncSourceLink * getPrev()
Get the link object for the previous RTP source.
Definition: iqueue.h:525
uint32 obsOctetCount
Definition: iqueue.h:769
void recordInsertion(const IncomingRTPPktLink &pl)
Record the insertion of an RTP packet from this source into the scheduled reception queue.
void setInitialDataTime(timeval it)
Definition: iqueue.h:656
void decProbation()
Definition: iqueue.h:699
SyncSource * source
Definition: iqueue.h:745
void setMaxSeqNum(uint16 max)
Set the highest valid sequence number recived.
Definition: iqueue.h:612
timeval initialDataTime
Definition: iqueue.h:780
void incObservedPacketCount()
Definition: iqueue.h:587
uint32 expectedPrior
Definition: iqueue.h:790
void setJitter(float j)
Definition: iqueue.h:644
void setLastPacketTransitTime(uint32 time)
Definition: iqueue.h:638
bool getGoodbye()
Mark this source as having sent a BYE control packet.
Definition: iqueue.h:666
void setNextCollis(SyncSourceLink *ns)
Definition: iqueue.h:549
uint32 initialDataTimestamp
Definition: iqueue.h:779
uint32 getInitialDataTimestamp() const
Definition: iqueue.h:647
void incObservedOctetCount(uint32 n)
Definition: iqueue.h:597
SyncSource * getSource()
Get the synchronization source object this link objet holds information for.
Definition: iqueue.h:500
void setProbation(uint8 p)
Definition: iqueue.h:696
IncomingRTPPktLink * getFirst()
Get first RTP (data) packet in the queue of packets received from this socket.
Definition: iqueue.h:506
unsigned char * getSenderInfo()
Definition: iqueue.h:561
uint32 lastPacketTransitTime
Definition: iqueue.h:776
~SyncSourceLink()
Note it deletes the source.
void setCumulativePacketLost(uint32 pl)
Definition: iqueue.h:626
uint32 extendedMaxSeqNum
Definition: iqueue.h:772
bool getHello()
Mark this source as having sent some packet.
Definition: iqueue.h:680
static const uint32 SEQNUMMOD
Definition: iqueue.h:472
uint32 getExtendedMaxSeqNum() const
Definition: iqueue.h:616
timeval getLastPacketTime() const
Definition: iqueue.h:571
unsigned char * senderInfo
Definition: iqueue.h:754
void setFirst(IncomingRTPPktLink *fp)
Definition: iqueue.h:509
SyncSourceLink * nextCollis
Definition: iqueue.h:752
uint8 fractionLost
Definition: iqueue.h:774
float getJitter() const
Definition: iqueue.h:641
uint32 cumulativePacketLost
Definition: iqueue.h:773
void setFractionLost(uint8 fl)
Definition: iqueue.h:632
timeval lastRTCPSRTime
Definition: iqueue.h:763
uint32 seqNumAccum
Definition: iqueue.h:792
void setInitialDataTimestamp(uint32 ts)
Definition: iqueue.h:650
uint32 getObservedOctetCount() const
Get the total number of payload octets received from this source.
Definition: iqueue.h:594
uint32 obsPacketCount
Definition: iqueue.h:767
uint32 getSeqNumAccum() const
Definition: iqueue.h:711
uint32 getLastPacketTransitTime()
Definition: iqueue.h:635
SyncSourceLink * getNextCollis()
Get the link object for the next RTP source in the hash table entry collision list.
Definition: iqueue.h:546
uint8 probation
Definition: iqueue.h:788
void setPrevConflict(InetAddress &addr, tpport_t dataPort, tpport_t controlPort)
Get conflicting address.
ConflictingTransportAddress * prevConflict
Definition: iqueue.h:753
MembershipBookkeeping * getMembership()
Definition: iqueue.h:493
uint32 getObservedPacketCount() const
Get the total number of RTP packets received from this source.
Definition: iqueue.h:584
uint16 getBaseSeqNum() const
Definition: iqueue.h:705
IncomingRTPPktLink * getLast()
Get last RTP (data) packet in the queue of packets received from this socket.
Definition: iqueue.h:516
bool flag
Definition: iqueue.h:784
timeval getLastRTCPPacketTime() const
Definition: iqueue.h:574
void computeStats()
Compute cumulative packet lost and fraction of packets lost during the last reporting interval.
void setReceiverInfo(unsigned char *ri)
timeval lastRTCPPacketTime
Definition: iqueue.h:760
uint32 getCumulativePacketLost() const
Definition: iqueue.h:623
uint16 getMaxSeqNum() const
Get the highest valid sequence number received.
Definition: iqueue.h:604
ConflictingTransportAddress * getPrevConflict() const
Definition: iqueue.h:552
uint8 getProbation() const
Definition: iqueue.h:693
IncomingRTPPktLink * first
Definition: iqueue.h:747
SyncSourceLink(MembershipBookkeeping *m, SyncSource *s, IncomingRTPPktLink *fp=NULL, IncomingRTPPktLink *lp=NULL, SyncSourceLink *ps=NULL, SyncSourceLink *ns=NULL, SyncSourceLink *ncollis=NULL)
Definition: iqueue.h:474
void setPrev(SyncSourceLink *ps)
Definition: iqueue.h:528
uint32 getBadSeqNum() const
Definition: iqueue.h:687
SyncSourceLink * getNext()
Get the link object for the next RTP source.
Definition: iqueue.h:534
void setBaseSeqNum(uint16 seqnum)
Definition: iqueue.h:708