44#ifndef CCXX_RTP_IQUEUE_H_
45#define CCXX_RTP_IQUEUE_H_
89 { activeSenders = n; }
101 {
return activeSenders; }
116 uint32 activeSenders;
136 {
return source.getLink(); }
140 { source.setLink(link); }
144 { source.setParticipant(p); }
148 { source.setState(ns); }
152 { source.setSender(active); }
156 { source.setDataTransportPort(p); }
160 { source.setControlTransportPort(p); }
164 { source.setNetworkAddress(addr); }
185 const std::string& val)
186 { part->setSDESItem(item,val); }
190 { part->setPRIVPrefix(val); }
211 { app.addParticipant(part); }
215 RTPApplication::ParticipantLink* pl)
216 { app.removeParticipant(pl); }
239 tpport_t dtp, tpport_t ctp);
245 {
return networkAddress; }
248 {
return dataTransportPort; }
251 {
return controlTransportPort; }
277 void addConflict(
const InetAddress& na, tpport_t dtp, tpport_t ctp);
281 { firstConflict = lastConflict = NULL; }
308 {
return defaultMembersHashSize; }
335 struct SyncSourceLink;
344 {
return getLink(source)->getMembership() ==
this; }
355 struct timeval& recv_ts,
364 srcPrev(sp), srcNext(sn),
365 receptionTime(recv_ts),
366 shiftedTimestamp(shifted_ts)
373 {
return sourceLink; }
376 { sourceLink = src; }
416 { receptionTime = t; }
422 {
return receptionTime; }
433 {
return shiftedTimestamp; }
436 { shiftedTimestamp = ts;}
447 struct timeval receptionTime;
482 membership(m), source(s), first(fp), last(lp),
483 prev(ps), next(ns), nextCollis(ncollis),
495 {
return membership; }
548 {
return nextCollis; }
554 {
return prevConflict; }
560 tpport_t controlPort);
563 {
return senderInfo; }
568 {
return receiverInfo; }
573 {
return lastPacketTime; }
576 {
return lastRTCPPacketTime; }
579 {
return lastRTCPSRTime; }
586 {
return obsPacketCount; }
589 { obsPacketCount++; }
596 {
return obsOctetCount; }
599 { obsOctetCount += n; }
606 {
return maxSeqNum; }
618 {
return extendedMaxSeqNum; }
622 { extendedMaxSeqNum = seq; }
625 {
return cumulativePacketLost; }
628 { cumulativePacketLost = pl; }
631 {
return fractionLost; }
634 { fractionLost = fl; }
637 {
return lastPacketTransitTime; }
640 { lastPacketTransitTime = time; }
649 {
return initialDataTimestamp; }
652 { initialDataTimestamp = ts; }
655 {
return initialDataTime; }
658 { initialDataTime = it; }
689 {
return badSeqNum; }
695 {
return probation; }
704 {
return 0 == probation; }
707 {
return baseSeqNum; }
710 { baseSeqNum = seqnum; }
713 {
return seqNumAccum; }
716 { seqNumAccum += SEQNUMMOD; }
722 { maxSeqNum = seqNumAccum = seqnum; }
872 uint32 sourceBucketsNum;
911 {
return *(link->getSource()); }
914 {
return link->getSource(); }
917 link = link->getNext();
929 {
return l.link == r.link; }
933 {
return l.link != r.link; }
1000 { minValidPacketSequence = packets; }
1004 {
return defaultMinValidPacketSequence; }
1012 {
return minValidPacketSequence; }
1016 { maxPacketMisorder = packets; }
1020 {
return defaultMaxPacketMisorder; }
1024 {
return maxPacketMisorder; }
1033 { maxPacketDropout = packets; }
1037 {
return defaultMaxPacketDropout; }
1041 {
return maxPacketDropout; }
1045 inline static size_t
1047 {
return defaultMembersSize; }
1105 bool is_new, InetAddress& na,
1124 { sourceExpirationPeriod = intervals; }
1166 const timeval recvtime);
1273 InetHostAddress& host, tpport_t& port) = 0;
Interface (envelope) to data received over RTP packets.
Definition queuebase.h:70
Application objects modification methods.
Definition iqueue.h:207
void removeParticipant(RTPApplication &app, RTPApplication::ParticipantLink *pl)
Definition iqueue.h:214
virtual ~ApplicationHandler()
Definition iqueue.h:222
ApplicationHandler()
Definition iqueue.h:219
void addParticipant(RTPApplication &app, Participant &part)
Definition iqueue.h:210
To track addresses of sources conflicting with the local one.
Definition iqueue.h:234
virtual ~ConflictHandler()
Definition iqueue.h:283
void addConflict(const InetAddress &na, tpport_t dtp, tpport_t ctp)
ConflictingTransportAddress * firstConflict
Definition iqueue.h:286
ConflictingTransportAddress * searchDataConflict(InetAddress na, tpport_t dtp)
ConflictHandler()
Definition iqueue.h:280
void updateConflict(ConflictingTransportAddress &ca)
Definition iqueue.h:274
ConflictingTransportAddress * searchControlConflict(InetAddress na, tpport_t ctp)
The implementation for a SRTP cryptographic context.
Definition CryptoContext.h:83
iterator through the list of synchronizations sources in this session
Definition iqueue.h:894
std::ptrdiff_t difference_type
Definition iqueue.h:898
SyncSource value_type
Definition iqueue.h:897
reference operator*() const
Definition iqueue.h:910
pointer operator->() const
Definition iqueue.h:913
std::forward_iterator_tag iterator_category
Definition iqueue.h:896
friend bool operator==(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition iqueue.h:927
SyncSourcesIterator & operator++()
Definition iqueue.h:916
const SyncSource * pointer
Definition iqueue.h:899
SyncSourcesIterator operator++(int)
Definition iqueue.h:921
friend bool operator!=(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition iqueue.h:931
const SyncSource & reference
Definition iqueue.h:900
SyncSourcesIterator(SyncSourceLink *l=NULL)
Definition iqueue.h:902
SyncSourcesIterator(const SyncSourcesIterator &si)
Definition iqueue.h:906
Definition queuebase.h:297
Queue for incoming RTP data packets in an RTP session.
Definition iqueue.h:886
static const size_t defaultMembersSize
Definition iqueue.h:1288
static const uint16 defaultMaxPacketDropout
Definition iqueue.h:1284
bool insertRecvPacket(IncomingRTPPktLink *packetLink)
Insert a just received packet in the queue (both general and source specific queues).
uint16 getDefaultMaxPacketMisorder() const
Definition iqueue.h:1019
uint8 getMinValidPacketSequence() const
Get the minimun number of consecutive packets that must be received from a source before accepting it...
Definition iqueue.h:1011
bool isWaiting(const SyncSource *src=NULL) const
Determine if packets are waiting in the reception queue.
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.
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...
uint16 maxPacketMisorder
Definition iqueue.h:1286
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...
uint8 getDefaultMinValidPacketSequence() const
Definition iqueue.h:1003
virtual void onExpireRecv(IncomingRTPPkt &)
A hook to filter packets in the receive queue that are being expired.
Definition iqueue.h:1218
virtual bool end2EndDelayed(IncomingRTPPktLink &)
Definition iqueue.h:1239
void setMaxPacketMisorder(uint16 packets)
Definition iqueue.h:1015
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:999
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:1123
SyncSourcesIterator end()
Definition iqueue.h:942
static size_t getDefaultMembersSize()
Definition iqueue.h:1046
void setMaxPacketDropout(uint16 packets)
It also prevents packets sent after a restart of the source being immediately accepted.
Definition iqueue.h:1032
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:1186
CryptoContext * getInQueueCryptoContext(uint32 ssrc)
Get an input queue CryptoContext identified by SSRC.
uint8 minValidPacketSequence
Definition iqueue.h:1285
static const uint16 defaultMaxPacketMisorder
Definition iqueue.h:1283
uint16 getMaxPacketMisorder() const
Definition iqueue.h:1023
uint8 sourceExpirationPeriod
Definition iqueue.h:1289
IncomingRTPPktLink * recvFirst
Definition iqueue.h:1280
Mutex cryptoMutex
Definition iqueue.h:1290
virtual ~IncomingDataQueue()
Definition iqueue.h:1089
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:1235
uint16 getMaxPacketDropout() const
Definition iqueue.h:1040
uint16 maxPacketDropout
Definition iqueue.h:1287
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:1207
uint16 getDefaultMaxPacketDropout() const
Definition iqueue.h:1036
virtual size_t getNextDataPacketSize() const =0
ThreadLock recvLock
Definition iqueue.h:1278
SyncSourcesIterator begin()
Definition iqueue.h:939
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:1282
std::list< CryptoContext * > cryptoContexts
Definition iqueue.h:1291
RTP packets received from other participants.
Definition rtppkt.h:706
members and senders accounting
Definition iqueue.h:69
void setMembersCount(uint32 n)
Definition iqueue.h:72
void increaseMembersCount()
Definition iqueue.h:76
void increaseSendersCount()
Definition iqueue.h:92
uint32 getSendersCount() const
Definition iqueue.h:100
void decreaseSendersCount()
Definition iqueue.h:96
void setSendersCount(uint32 n)
Definition iqueue.h:88
void decreaseMembersCount()
Definition iqueue.h:80
Members()
Definition iqueue.h:104
uint32 getMembersCount() const
Definition iqueue.h:84
virtual ~Members()
Definition iqueue.h:109
Controls the group membership in the current session.
Definition iqueue.h:305
virtual ~MembershipBookkeeping()
Purges all RTPSource structures created during the session, as well as the hash table and the list of...
Definition iqueue.h:332
static const uint32 SEQNUMMOD
Definition iqueue.h:856
size_t getDefaultMembersHashSize()
Definition iqueue.h:307
bool isMine(const SyncSource &source) const
Get whether a synchronization source is recorded in this membership controller.
Definition iqueue.h:343
SyncSourceLink * getSourceBySSRC(uint32 ssrc, bool &created)
Get the description of a source by its ssrc identifier.
void setMembersCount(uint32 n)
Definition iqueue.h:848
static const size_t defaultMembersHashSize
Definition iqueue.h:855
SyncSourceLink * getFirst()
Definition iqueue.h:837
uint32 getSendersCount()
Definition iqueue.h:852
SyncSourceLink * getLink(const SyncSource &source) const
Definition iqueue.h:337
uint32 getMembersCount()
Definition iqueue.h:844
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
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...
SyncSourceLink * getLast()
Definition iqueue.h:840
Participant objects modification methods.
Definition iqueue.h:181
void setSDESItem(Participant *part, SDESItemType item, const std::string &val)
Definition iqueue.h:184
virtual ~ParticipantHandler()
Definition iqueue.h:196
ParticipantHandler()
Definition iqueue.h:193
void setPRIVPrefix(Participant *part, const std::string val)
Definition iqueue.h:189
A class of objects representing remote participants (RTP applications) in a multimedia session.
Definition sources.h:127
An RTP application, holding identifying RTCP SDES item values.
Definition sources.h:367
SyncSource objects modification methods.
Definition iqueue.h:126
void setParticipant(SyncSource &source, Participant &p)
Definition iqueue.h:143
virtual ~SyncSourceHandler()
Definition iqueue.h:170
void setDataTransportPort(SyncSource &source, tpport_t p)
Definition iqueue.h:155
SyncSourceHandler()
Definition iqueue.h:167
void setNetworkAddress(SyncSource &source, InetAddress addr)
Definition iqueue.h:163
void setSender(SyncSource &source, bool active)
Definition iqueue.h:151
void setState(SyncSource &source, SyncSource::State ns)
Definition iqueue.h:147
void setLink(SyncSource &source, void *link)
Definition iqueue.h:139
void setControlTransportPort(SyncSource &source, tpport_t p)
Definition iqueue.h:159
void * getLink(const SyncSource &source) const
This requires SyncSource - SyncSourceHandler friendship.
Definition iqueue.h:135
Synchronization source in an RTP session.
Definition sources.h:195
State
Synchronization source states during an RTP session.
Definition sources.h:227
SDESItemType
SDES items that may be carried in a Source DEScription RTCP packet.
Definition rtcppkt.h:66
Base classes for RTP queues.
ConflictingTransportAddress(InetAddress na, tpport_t dtp, tpport_t ctp)
tpport_t getDataTransportPort() const
Definition iqueue.h:247
void setNext(ConflictingTransportAddress *nc)
Definition iqueue.h:241
tpport_t getControlTransportPort() const
Definition iqueue.h:250
timeval lastPacketTime
Definition iqueue.h:258
tpport_t dataTransportPort
Definition iqueue.h:254
ConflictingTransportAddress * next
Definition iqueue.h:256
InetAddress networkAddress
Definition iqueue.h:253
const InetAddress & getNetworkAddress() const
Definition iqueue.h:244
tpport_t controlTransportPort
Definition iqueue.h:255
Incoming RTP data packets control structure within the incoming packet queue class.
Definition iqueue.h:353
void setSourceLink(SyncSourceLink *src)
Definition iqueue.h:375
IncomingRTPPktLink * next
Definition iqueue.h:443
IncomingRTPPkt * getPacket() const
Definition iqueue.h:402
IncomingRTPPktLink * getPrev() const
Definition iqueue.h:384
uint32 shiftedTimestamp
Definition iqueue.h:451
IncomingRTPPktLink * getSrcNext() const
Definition iqueue.h:390
IncomingRTPPktLink * srcNext
Definition iqueue.h:445
~IncomingRTPPktLink()
Definition iqueue.h:369
SyncSourceLink * getSourceLink() const
Definition iqueue.h:372
void setRecvTime(const timeval &t)
Set the time this packet was received at.
Definition iqueue.h:415
IncomingRTPPktLink(IncomingRTPPkt *pkt, SyncSourceLink *sLink, struct timeval &recv_ts, uint32 shifted_ts, IncomingRTPPktLink *sp, IncomingRTPPktLink *sn, IncomingRTPPktLink *p, IncomingRTPPktLink *n)
Definition iqueue.h:354
void setNext(IncomingRTPPktLink *nl)
Definition iqueue.h:381
void setPrev(IncomingRTPPktLink *pl)
Definition iqueue.h:387
void setPacket(IncomingRTPPkt *pkt)
Definition iqueue.h:405
IncomingRTPPktLink * getNext() const
Definition iqueue.h:378
SyncSourceLink * sourceLink
Definition iqueue.h:441
void setSrcNext(IncomingRTPPktLink *sn)
Definition iqueue.h:393
IncomingRTPPkt * packet
Definition iqueue.h:439
timeval getRecvTime() const
Get the time this packet was received at.
Definition iqueue.h:421
uint32 getTimestamp() const
Get timestamp of this packet.
Definition iqueue.h:432
void setTimestamp(uint32 ts)
Definition iqueue.h:435
void setSrcPrev(IncomingRTPPktLink *sp)
Definition iqueue.h:399
IncomingRTPPktLink * getSrcPrev() const
Definition iqueue.h:396
Synchronization Source internal handler within the incoming packets queue.
Definition iqueue.h:471
void setLast(IncomingRTPPktLink *lp)
Definition iqueue.h:520
timeval getLastRTCPSRTime() const
Definition iqueue.h:578
MembershipBookkeeping * membership
Definition iqueue.h:744
unsigned char * receiverInfo
Definition iqueue.h:756
void setSenderInfo(unsigned char *si)
timeval lastPacketTime
Definition iqueue.h:759
SyncSourceLink * next
Definition iqueue.h:751
uint16 baseSeqNum
Definition iqueue.h:790
void setExtendedMaxSeqNum(uint32 seq)
Definition iqueue.h:621
uint32 receivedPrior
Definition iqueue.h:792
uint16 maxSeqNum
Definition iqueue.h:772
void setNext(SyncSourceLink *ns)
Definition iqueue.h:538
void setBadSeqNum(uint32 seq)
Definition iqueue.h:691
uint32 badSeqNum
Definition iqueue.h:788
timeval getInitialDataTime() const
Definition iqueue.h:654
float jitter
Definition iqueue.h:779
uint8 getFractionLost() const
Definition iqueue.h:630
void initSequence(uint16 seqnum)
Start a new sequence of received packets.
Definition iqueue.h:721
void incSeqNumAccum()
Definition iqueue.h:715
bool isValid() const
Definition iqueue.h:703
uint32 obsOctetCount
Definition iqueue.h:770
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:657
void decProbation()
Definition iqueue.h:700
SyncSource * source
Definition iqueue.h:746
void setMaxSeqNum(uint16 max)
Set the highest valid sequence number recived.
Definition iqueue.h:613
timeval initialDataTime
Definition iqueue.h:781
void incObservedPacketCount()
Definition iqueue.h:588
uint32 expectedPrior
Definition iqueue.h:791
void setJitter(float j)
Definition iqueue.h:645
void setLastPacketTransitTime(uint32 time)
Definition iqueue.h:639
bool getGoodbye()
Mark this source as having sent a BYE control packet.
Definition iqueue.h:667
void setNextCollis(SyncSourceLink *ns)
Definition iqueue.h:550
uint32 initialDataTimestamp
Definition iqueue.h:780
IncomingRTPPktLink * getLast()
Get last RTP (data) packet in the queue of packets received from this socket.
Definition iqueue.h:517
uint32 getInitialDataTimestamp() const
Definition iqueue.h:648
void incObservedOctetCount(uint32 n)
Definition iqueue.h:598
void setProbation(uint8 p)
Definition iqueue.h:697
SyncSourceLink * getNextCollis()
Get the link object for the next RTP source in the hash table entry collision list.
Definition iqueue.h:547
uint32 lastPacketTransitTime
Definition iqueue.h:777
~SyncSourceLink()
Note it deletes the source.
void setCumulativePacketLost(uint32 pl)
Definition iqueue.h:627
SyncSourceLink * getNext()
Get the link object for the next RTP source.
Definition iqueue.h:535
uint32 extendedMaxSeqNum
Definition iqueue.h:773
bool getHello()
Mark this source as having sent some packet.
Definition iqueue.h:681
static const uint32 SEQNUMMOD
Definition iqueue.h:473
uint32 getExtendedMaxSeqNum() const
Definition iqueue.h:617
timeval getLastPacketTime() const
Definition iqueue.h:572
unsigned char * senderInfo
Definition iqueue.h:755
void setFirst(IncomingRTPPktLink *fp)
Definition iqueue.h:510
SyncSourceLink * nextCollis
Definition iqueue.h:753
uint8 fractionLost
Definition iqueue.h:775
float getJitter() const
Definition iqueue.h:642
uint32 cumulativePacketLost
Definition iqueue.h:774
void setFractionLost(uint8 fl)
Definition iqueue.h:633
ConflictingTransportAddress * getPrevConflict() const
Definition iqueue.h:553
timeval lastRTCPSRTime
Definition iqueue.h:764
uint32 seqNumAccum
Definition iqueue.h:793
void setInitialDataTimestamp(uint32 ts)
Definition iqueue.h:651
SyncSource * getSource()
Get the synchronization source object this link objet holds information for.
Definition iqueue.h:501
uint32 getObservedOctetCount() const
Get the total number of payload octets received from this source.
Definition iqueue.h:595
uint32 obsPacketCount
Definition iqueue.h:768
uint32 getSeqNumAccum() const
Definition iqueue.h:712
uint32 getLastPacketTransitTime()
Definition iqueue.h:636
SyncSourceLink * getPrev()
Get the link object for the previous RTP source.
Definition iqueue.h:526
uint8 probation
Definition iqueue.h:789
void setPrevConflict(InetAddress &addr, tpport_t dataPort, tpport_t controlPort)
Get conflicting address.
ConflictingTransportAddress * prevConflict
Definition iqueue.h:754
uint32 getObservedPacketCount() const
Get the total number of RTP packets received from this source.
Definition iqueue.h:585
uint16 getBaseSeqNum() const
Definition iqueue.h:706
IncomingRTPPktLink * getFirst()
Get first RTP (data) packet in the queue of packets received from this socket.
Definition iqueue.h:507
unsigned char * getSenderInfo()
Definition iqueue.h:562
bool flag
Definition iqueue.h:785
timeval getLastRTCPPacketTime() const
Definition iqueue.h:575
void computeStats()
Compute cumulative packet lost and fraction of packets lost during the last reporting interval.
unsigned char * getReceiverInfo()
Definition iqueue.h:567
void setReceiverInfo(unsigned char *ri)
timeval lastRTCPPacketTime
Definition iqueue.h:761
uint32 getCumulativePacketLost() const
Definition iqueue.h:624
uint16 getMaxSeqNum() const
Get the highest valid sequence number received.
Definition iqueue.h:605
uint8 getProbation() const
Definition iqueue.h:694
IncomingRTPPktLink * first
Definition iqueue.h:748
SyncSourceLink(MembershipBookkeeping *m, SyncSource *s, IncomingRTPPktLink *fp=NULL, IncomingRTPPktLink *lp=NULL, SyncSourceLink *ps=NULL, SyncSourceLink *ns=NULL, SyncSourceLink *ncollis=NULL)
Definition iqueue.h:475
void setPrev(SyncSourceLink *ps)
Definition iqueue.h:529
MembershipBookkeeping * getMembership()
Definition iqueue.h:494
uint32 getBadSeqNum() const
Definition iqueue.h:688
void setBaseSeqNum(uint16 seqnum)
Definition iqueue.h:709