Go to the documentation of this file.
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; }
558 void setPrevConflict(InetAddress& addr, tpport_t dataPort,
559 tpport_t controlPort);
562 {
return senderInfo; }
564 void setSenderInfo(
unsigned char* si);
567 {
return receiverInfo; }
569 void setReceiverInfo(
unsigned char* ri);
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; }
800 isRegistered(uint32 ssrc);
811 getSourceBySSRC(uint32 ssrc,
bool& created);
824 BYESource(uint32 ssrc);
834 removeSource(uint32 ssrc);
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; }
954 getData(uint32 stamp,
const SyncSource* src = NULL);
964 isWaiting(
const SyncSource* src = NULL)
const;
973 getFirstTimestamp(
const SyncSource* src = NULL)
const;
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; }
1080 getInQueueCryptoContext(uint32 ssrc);
1103 bool checkSSRCInIncomingRTPPkt(SyncSourceLink& sourceLink,
1104 bool is_new, InetAddress& na,
1123 { sourceExpirationPeriod = intervals; }
1146 getWaiting(uint32 timestamp,
const SyncSource *src = NULL);
1164 recordReception(SyncSourceLink& srcLink,
const IncomingRTPPkt& pkt,
1165 const timeval recvtime);
1176 void purgeIncomingQueue();
1257 insertRecvPacket(IncomingRTPPktLink* packetLink);
1271 recvData(
unsigned char* buffer,
size_t length,
1272 InetHostAddress& host, tpport_t& port) = 0;
1275 getNextDataPacketSize()
const = 0;
1297 #endif //CCXX_RTP_IQUEUE_H_
Synchronization Source internal handler within the incoming packets queue.
Definition: iqueue.h:469
void setControlTransportPort(SyncSource &source, tpport_t p)
Definition: iqueue.h:158
uint32 getMembersCount() const
Definition: iqueue.h:83
void increaseSendersCount()
Definition: iqueue.h:91
void * getLink(const SyncSource &source) const
This requires SyncSource - SyncSourceHandler friendship.
Definition: iqueue.h:134
MembershipBookkeeping * membership
Definition: iqueue.h:743
void increaseMembersCount()
Definition: iqueue.h:75
void setSendersCount(uint32 n)
Definition: iqueue.h:87
void setMembersCount(uint32 n)
Definition: iqueue.h:71
void setBaseSeqNum(uint16 seqnum)
Definition: iqueue.h:708
unsigned char * getReceiverInfo()
Definition: iqueue.h:566
void setFirst(IncomingRTPPktLink *fp)
Definition: iqueue.h:509
virtual bool end2EndDelayed(IncomingRTPPktLink &)
Definition: iqueue.h:1238
timeval getLastPacketTime() const
Definition: iqueue.h:571
To track addresses of sources conflicting with the local one.
Definition: iqueue.h:232
bool isMine(const SyncSource &source) const
Get whether a synchronization source is recorded in this membership controller.
Definition: iqueue.h:342
Base classes for RTP queues.
tpport_t controlTransportPort
Definition: iqueue.h:254
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 maxPacketDropout
Definition: iqueue.h:1286
MembershipBookkeeping * getMembership()
Definition: iqueue.h:493
uint16 baseSeqNum
Definition: iqueue.h:789
void initSequence(uint16 seqnum)
Start a new sequence of received packets.
Definition: iqueue.h:720
Members()
Definition: iqueue.h:103
IncomingRTPPktLink * getLast()
Get last RTP (data) packet in the queue of packets received from this socket.
Definition: iqueue.h:516
uint32 badSeqNum
Definition: iqueue.h:787
timeval lastPacketTime
Definition: iqueue.h:758
uint16 getMaxSeqNum() const
Get the highest valid sequence number received.
Definition: iqueue.h:604
void setBadSeqNum(uint32 seq)
Definition: iqueue.h:690
const typedef SyncSource & reference
Definition: iqueue.h:899
uint32 getTimestamp() const
Get timestamp of this packet.
Definition: iqueue.h:431
void setNext(IncomingRTPPktLink *nl)
Definition: iqueue.h:380
~IncomingRTPPktLink()
Definition: iqueue.h:368
IncomingRTPPktLink * recvLast
Definition: iqueue.h:1279
The implementation for a SRTP cryptographic context.
Definition: CryptoContext.h:82
Queue for incoming RTP data packets in an RTP session.
Definition: iqueue.h:883
ConflictingTransportAddress * lastConflict
Definition: iqueue.h:285
SyncSourceLink * getSourceLink() const
Definition: iqueue.h:371
uint32 extendedMaxSeqNum
Definition: iqueue.h:772
Synchronization source in an RTP session.
Definition: sources.h:192
IncomingRTPPktLink * getNext() const
Definition: iqueue.h:377
uint16 getDefaultMaxPacketDropout() const
Definition: iqueue.h:1035
members and senders accounting
Definition: iqueue.h:67
void setRecvTime(const timeval &t)
Set the time this packet was received at.
Definition: iqueue.h:414
uint8 getFractionLost() const
Definition: iqueue.h:629
uint32 getObservedPacketCount() const
Get the total number of RTP packets received from this source.
Definition: iqueue.h:584
uint32 initialDataTimestamp
Definition: iqueue.h:779
SyncSourceLink * getLink(const SyncSource &source) const
Definition: iqueue.h:336
uint8 probation
Definition: iqueue.h:788
IncomingRTPPktLink * getSrcPrev() const
Definition: iqueue.h:395
timeval getLastRTCPSRTime() const
Definition: iqueue.h:577
uint16 getDefaultMaxPacketMisorder() const
Definition: iqueue.h:1018
void setState(SyncSource &source, SyncSource::State ns)
Definition: iqueue.h:146
Mutex cryptoMutex
Definition: iqueue.h:1289
ConflictingTransportAddress * getPrevConflict() const
Definition: iqueue.h:552
void setLink(SyncSource &source, void *link)
Definition: iqueue.h:138
virtual void onExpireRecv(IncomingRTPPkt &)
A hook to filter packets in the receive queue that are being expired.
Definition: iqueue.h:1217
timeval getRecvTime() const
Get the time this packet was received at.
Definition: iqueue.h:420
SyncSourceLink * getPrev()
Get the link object for the previous RTP source.
Definition: iqueue.h:525
size_t getDefaultMembersHashSize()
Definition: iqueue.h:306
void setPrev(SyncSourceLink *ps)
Definition: iqueue.h:528
SyncSourcesIterator(const SyncSourcesIterator &si)
Definition: iqueue.h:905
IncomingRTPPktLink * prev
Definition: iqueue.h:442
void setSender(SyncSource &source, bool active)
Definition: iqueue.h:150
uint16 getMaxPacketMisorder() const
Definition: iqueue.h:1022
SyncSourcesIterator & operator++()
Definition: iqueue.h:915
SyncSource * getSource()
Get the synchronization source object this link objet holds information for.
Definition: iqueue.h:500
virtual void renewLocalSSRC()
Definition: queuebase.h:232
void setNextCollis(SyncSourceLink *ns)
Definition: iqueue.h:549
unsigned char * receiverInfo
Definition: iqueue.h:755
void setLast(IncomingRTPPktLink *lp)
Definition: iqueue.h:519
SyncSource value_type
Definition: iqueue.h:896
uint16 getMaxPacketDropout() const
Definition: iqueue.h:1039
SyncSourceLink * getNextCollis()
Get the link object for the next RTP source in the hash table entry collision list.
Definition: iqueue.h:546
void removeParticipant(RTPApplication &app, RTPApplication::ParticipantLink *pl)
Definition: iqueue.h:213
tpport_t dataTransportPort
Definition: iqueue.h:253
ConflictingTransportAddress * prevConflict
Definition: iqueue.h:753
IncomingRTPPktLink * srcPrev
Definition: iqueue.h:444
Application objects modification methods.
Definition: iqueue.h:205
bool flag
Definition: iqueue.h:784
void setSrcPrev(IncomingRTPPktLink *sp)
Definition: iqueue.h:398
std::ptrdiff_t difference_type
Definition: iqueue.h:897
void decreaseSendersCount()
Definition: iqueue.h:95
uint8 getMinValidPacketSequence() const
Get the minimun number of consecutive packets that must be received from a source before accepting it...
Definition: iqueue.h:1010
uint32 seqNumAccum
Definition: iqueue.h:792
void setMaxSeqNum(uint16 max)
Set the highest valid sequence number recived.
Definition: iqueue.h:612
static const size_t defaultMembersSize
Definition: iqueue.h:1287
uint32 getMembersCount()
Definition: iqueue.h:843
void setNext(SyncSourceLink *ns)
Definition: iqueue.h:537
void setPRIVPrefix(Participant *part, const std::string val)
Definition: iqueue.h:188
timeval lastRTCPPacketTime
Definition: iqueue.h:760
void setPacket(IncomingRTPPkt *pkt)
Definition: iqueue.h:404
void setLastPacketTransitTime(uint32 time)
Definition: iqueue.h:638
reference operator*() const
Definition: iqueue.h:909
IncomingRTPPktLink * getFirst()
Get first RTP (data) packet in the queue of packets received from this socket.
Definition: iqueue.h:506
SyncSourceLink * prev
Definition: iqueue.h:750
void setFractionLost(uint8 fl)
Definition: iqueue.h:632
uint32 getLastPacketTransitTime()
Definition: iqueue.h:635
void setInitialDataTimestamp(uint32 ts)
Definition: iqueue.h:650
void addParticipant(RTPApplication &app, Participant &part)
Definition: iqueue.h:209
IncomingRTPPktLink * getSrcNext() const
Definition: iqueue.h:389
const InetAddress & getNetworkAddress() const
Definition: iqueue.h:243
iterator through the list of synchronizations sources in this session
Definition: iqueue.h:892
virtual ~ConflictHandler()
Definition: iqueue.h:282
Participant objects modification methods.
Definition: iqueue.h:179
bool getGoodbye()
Mark this source as having sent a BYE control packet.
Definition: iqueue.h:666
uint8 sourceExpirationPeriod
Definition: iqueue.h:1288
IncomingRTPPktLink * last
Definition: iqueue.h:747
timeval getInitialDataTime() const
Definition: iqueue.h:653
float getJitter() const
Definition: iqueue.h:641
ApplicationHandler()
Definition: iqueue.h:218
virtual ~SyncSourceHandler()
Definition: iqueue.h:169
ParticipantHandler()
Definition: iqueue.h:192
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 decreaseMembersCount()
Definition: iqueue.h:79
void setSourceLink(SyncSourceLink *src)
Definition: iqueue.h:374
friend bool operator!=(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition: iqueue.h:930
unsigned char * senderInfo
Definition: iqueue.h:754
SyncSourceHandler()
Definition: iqueue.h:166
Incoming RTP data packets control structure within the incoming packet queue class.
Definition: iqueue.h:351
uint8 getProbation() const
Definition: iqueue.h:693
const typedef SyncSource * pointer
Definition: iqueue.h:898
static const uint16 defaultMaxPacketDropout
Definition: iqueue.h:1283
void decProbation()
Definition: iqueue.h:699
SyncSourceLink * getNext()
Get the link object for the next RTP source.
Definition: iqueue.h:534
tpport_t getDataTransportPort() const
Definition: iqueue.h:246
A class of objects representing remote participants (RTP applications) in a multimedia session.
Definition: sources.h:124
Definition: queuebase.h:294
IncomingRTPPktLink(IncomingRTPPkt *pkt, SyncSourceLink *sLink, struct timeval &recv_ts, uint32 shifted_ts, IncomingRTPPktLink *sp, IncomingRTPPktLink *sn, IncomingRTPPktLink *p, IncomingRTPPktLink *n)
Definition: iqueue.h:353
State
Synchronization source states during an RTP session.
Definition: sources.h:225
virtual ~Members()
Definition: iqueue.h:108
SyncSource * source
Definition: iqueue.h:745
uint32 getSendersCount() const
Definition: iqueue.h:99
uint8 getDefaultMinValidPacketSequence() const
Definition: iqueue.h:1002
unsigned char * getSenderInfo()
Definition: iqueue.h:561
Controls the group membership in the current session.
Definition: iqueue.h:298
void incObservedOctetCount(uint32 n)
Definition: iqueue.h:597
timeval lastRTCPSRTime
Definition: iqueue.h:763
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
void setNetworkAddress(SyncSource &source, InetAddress addr)
Definition: iqueue.h:162
bool getHello()
Mark this source as having sent some packet.
Definition: iqueue.h:680
void setMembersCount(uint32 n)
Definition: iqueue.h:847
IncomingRTPPkt * packet
Definition: iqueue.h:438
tpport_t getControlTransportPort() const
Definition: iqueue.h:249
SyncSource objects modification methods.
Definition: iqueue.h:124
uint16 getBaseSeqNum() const
Definition: iqueue.h:705
void setMaxPacketDropout(uint16 packets)
It also prevents packets sent after a restart of the source being immediately accepted.
Definition: iqueue.h:1031
void setProbation(uint8 p)
Definition: iqueue.h:696
timeval initialDataTime
Definition: iqueue.h:780
virtual ~IncomingDataQueue()
Definition: iqueue.h:1088
uint32 expectedPrior
Definition: iqueue.h:790
uint32 obsOctetCount
Definition: iqueue.h:769
uint32 getExtendedMaxSeqNum() const
Definition: iqueue.h:616
void setMaxPacketMisorder(uint16 packets)
Definition: iqueue.h:1014
void setCumulativePacketLost(uint32 pl)
Definition: iqueue.h:626
void setInitialDataTime(timeval it)
Definition: iqueue.h:656
void setSrcNext(IncomingRTPPktLink *sn)
Definition: iqueue.h:392
void setNext(ConflictingTransportAddress *nc)
Definition: iqueue.h:240
ThreadLock recvLock
Definition: iqueue.h:1277
uint16 maxPacketMisorder
Definition: iqueue.h:1285
InetAddress networkAddress
Definition: iqueue.h:252
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
ConflictHandler()
Definition: iqueue.h:279
uint32 getSendersCount()
Definition: iqueue.h:851
static const uint32 SEQNUMMOD
Definition: iqueue.h:855
uint32 getInitialDataTimestamp() const
Definition: iqueue.h:647
uint32 getBadSeqNum() const
Definition: iqueue.h:687
uint32 shiftedTimestamp
Definition: iqueue.h:450
An RTP application, holding identifying RTCP SDES item values. Represents local participants.
Definition: sources.h:364
SyncSourcesIterator(SyncSourceLink *l=NULL)
Definition: iqueue.h:901
RTP packets received from other participants.
Definition: rtppkt.h:704
virtual ~ParticipantHandler()
Definition: iqueue.h:195
std::forward_iterator_tag iterator_category
Definition: iqueue.h:895
uint32 lastPacketTransitTime
Definition: iqueue.h:776
float jitter
Definition: iqueue.h:778
uint32 getSeqNumAccum() const
Definition: iqueue.h:711
void setPrev(IncomingRTPPktLink *pl)
Definition: iqueue.h:386
uint32 getObservedOctetCount() const
Get the total number of payload octets received from this source.
Definition: iqueue.h:594
SyncSourcesIterator end()
Definition: iqueue.h:941
pointer operator->() const
Definition: iqueue.h:912
void setJitter(float j)
Definition: iqueue.h:644
SyncSourcesIterator operator++(int)
Definition: iqueue.h:920
static const uint32 SEQNUMMOD
Definition: iqueue.h:472
SyncSourceLink * getLast()
Definition: iqueue.h:839
static const uint16 defaultMaxPacketMisorder
Definition: iqueue.h:1282
uint32 receivedPrior
Definition: iqueue.h:791
Interface (envelope) to data received over RTP packets.
Definition: queuebase.h:68
void setSDESItem(Participant *part, SDESItemType item, const std::string &val)
Definition: iqueue.h:183
static const size_t defaultMembersHashSize
Definition: iqueue.h:854
SyncSourceLink * sourceLink
Definition: iqueue.h:440
timeval getLastRTCPPacketTime() const
Definition: iqueue.h:574
void incSeqNumAccum()
Definition: iqueue.h:714
virtual void onNewSyncSource(const SyncSource &)
Virtual called when a new synchronization source has joined the session.
Definition: iqueue.h:1185
static const uint8 defaultMinValidPacketSequence
Definition: iqueue.h:1281
void setDataTransportPort(SyncSource &source, tpport_t p)
Definition: iqueue.h:154
uint16 maxSeqNum
Definition: iqueue.h:771
void incObservedPacketCount()
Definition: iqueue.h:587
virtual ~MembershipBookkeeping()
Purges all RTPSource structures created during the session, as well as the hash table and the list of...
Definition: iqueue.h:331
void setExtendedMaxSeqNum(uint32 seq)
Definition: iqueue.h:620
uint8 fractionLost
Definition: iqueue.h:774
timeval lastPacketTime
Definition: iqueue.h:257
virtual ~ApplicationHandler()
Definition: iqueue.h:221
uint32 cumulativePacketLost
Definition: iqueue.h:773
ConflictingTransportAddress * next
Definition: iqueue.h:255
SyncSourceLink * getFirst()
Definition: iqueue.h:836
bool isValid() const
Definition: iqueue.h:702
void setTimestamp(uint32 ts)
Definition: iqueue.h:434
static size_t getDefaultMembersSize()
Definition: iqueue.h:1045
void setParticipant(SyncSource &source, Participant &p)
Definition: iqueue.h:142
std::list< CryptoContext * > cryptoContexts
Definition: iqueue.h:1290
SyncSourcesIterator begin()
Definition: iqueue.h:938
SyncSourceLink * nextCollis
Definition: iqueue.h:752
uint32 getCumulativePacketLost() const
Definition: iqueue.h:623
void updateConflict(ConflictingTransportAddress &ca)
Definition: iqueue.h:273
uint32 obsPacketCount
Definition: iqueue.h:767
IncomingRTPPkt * getPacket() const
Definition: iqueue.h:401
uint8 minValidPacketSequence
Definition: iqueue.h:1284
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
IncomingRTPPktLink * getPrev() const
Definition: iqueue.h:383
SDESItemType
SDES items that may be carried in a Source DEScription RTCP packet.
Definition: rtcppkt.h:64
friend bool operator==(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition: iqueue.h:926