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; }
559 void setPrevConflict(InetAddress& addr, tpport_t dataPort,
560 tpport_t controlPort);
563 {
return senderInfo; }
565 void setSenderInfo(
unsigned char* si);
568 {
return receiverInfo; }
570 void setReceiverInfo(
unsigned char* ri);
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; }
801 isRegistered(uint32 ssrc);
812 getSourceBySSRC(uint32 ssrc,
bool& created);
825 BYESource(uint32 ssrc);
835 removeSource(uint32 ssrc);
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; }
955 getData(uint32 stamp,
const SyncSource* src = NULL);
965 isWaiting(
const SyncSource* src = NULL)
const;
974 getFirstTimestamp(
const SyncSource* src = NULL)
const;
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; }
1081 getInQueueCryptoContext(uint32 ssrc);
1104 bool checkSSRCInIncomingRTPPkt(SyncSourceLink& sourceLink,
1105 bool is_new, InetAddress& na,
1124 { sourceExpirationPeriod = intervals; }
1147 getWaiting(uint32 timestamp,
const SyncSource *src = NULL);
1165 recordReception(SyncSourceLink& srcLink,
const IncomingRTPPkt& pkt,
1166 const timeval recvtime);
1177 void purgeIncomingQueue();
1258 insertRecvPacket(IncomingRTPPktLink* packetLink);
1272 recvData(
unsigned char* buffer,
size_t length,
1273 InetHostAddress& host, tpport_t& port) = 0;
1276 getNextDataPacketSize()
const = 0;
1298 #endif //CCXX_RTP_IQUEUE_H_
MembershipBookkeeping * getMembership()
Definition: iqueue.h:494
virtual void renewLocalSSRC()
Definition: queuebase.h:233
bool flag
Definition: iqueue.h:785
SyncSourceLink * getNext()
Get the link object for the next RTP source.
Definition: iqueue.h:535
void setMaxPacketDropout(uint16 packets)
It also prevents packets sent after a restart of the source being immediately accepted.
Definition: iqueue.h:1032
void initSequence(uint16 seqnum)
Start a new sequence of received packets.
Definition: iqueue.h:721
ConflictingTransportAddress * prevConflict
Definition: iqueue.h:754
uint32 badSeqNum
Definition: iqueue.h:788
void setControlTransportPort(SyncSource &source, tpport_t p)
Definition: iqueue.h:159
uint32 getTimestamp() const
Get timestamp of this packet.
Definition: iqueue.h:432
void setMaxSeqNum(uint16 max)
Set the highest valid sequence number recived.
Definition: iqueue.h:613
void setMembersCount(uint32 n)
Definition: iqueue.h:72
void setPacket(IncomingRTPPkt *pkt)
Definition: iqueue.h:405
uint32 getObservedPacketCount() const
Get the total number of RTP packets received from this source.
Definition: iqueue.h:585
static size_t getDefaultMembersSize()
Definition: iqueue.h:1046
IncomingRTPPktLink * srcPrev
Definition: iqueue.h:445
void setSrcNext(IncomingRTPPktLink *sn)
Definition: iqueue.h:393
Definition: queuebase.h:295
The implementation for a SRTP cryptographic context.
Definition: CryptoContext.h:83
uint8 getFractionLost() const
Definition: iqueue.h:630
uint32 seqNumAccum
Definition: iqueue.h:793
timeval lastRTCPPacketTime
Definition: iqueue.h:761
virtual ~IncomingDataQueue()
Definition: iqueue.h:1089
void setLink(SyncSource &source, void *link)
Definition: iqueue.h:139
void setPrev(IncomingRTPPktLink *pl)
Definition: iqueue.h:387
timeval getLastRTCPSRTime() const
Definition: iqueue.h:578
void setBaseSeqNum(uint16 seqnum)
Definition: iqueue.h:709
void setSrcPrev(IncomingRTPPktLink *sp)
Definition: iqueue.h:399
SyncSourceLink * getLink(const SyncSource &source) const
Definition: iqueue.h:337
void setState(SyncSource &source, SyncSource::State ns)
Definition: iqueue.h:147
void decProbation()
Definition: iqueue.h:700
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
void setSender(SyncSource &source, bool active)
Definition: iqueue.h:151
static const uint32 SEQNUMMOD
Definition: iqueue.h:473
timeval getLastPacketTime() const
Definition: iqueue.h:572
void setProbation(uint8 p)
Definition: iqueue.h:697
IncomingRTPPktLink * getLast()
Get last RTP (data) packet in the queue of packets received from this socket.
Definition: iqueue.h:517
SyncSourceLink * sourceLink
Definition: iqueue.h:441
timeval lastPacketTime
Definition: iqueue.h:759
void increaseMembersCount()
Definition: iqueue.h:76
void setCumulativePacketLost(uint32 pl)
Definition: iqueue.h:627
void incSeqNumAccum()
Definition: iqueue.h:715
uint32 getSeqNumAccum() const
Definition: iqueue.h:712
friend bool operator!=(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition: iqueue.h:931
To track addresses of sources conflicting with the local one.
Definition: iqueue.h:233
std::forward_iterator_tag iterator_category
Definition: iqueue.h:896
void setPRIVPrefix(Participant *part, const std::string val)
Definition: iqueue.h:189
size_t getDefaultMembersHashSize()
Definition: iqueue.h:307
virtual bool end2EndDelayed(IncomingRTPPktLink &)
Definition: iqueue.h:1239
float getJitter() const
Definition: iqueue.h:642
uint8 getMinValidPacketSequence() const
Get the minimun number of consecutive packets that must be received from a source before accepting it...
Definition: iqueue.h:1011
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
void setTimestamp(uint32 ts)
Definition: iqueue.h:435
void * getLink(const SyncSource &source) const
This requires SyncSource - SyncSourceHandler friendship.
Definition: iqueue.h:135
uint8 probation
Definition: iqueue.h:789
void setPrev(SyncSourceLink *ps)
Definition: iqueue.h:529
void decreaseSendersCount()
Definition: iqueue.h:96
void incObservedPacketCount()
Definition: iqueue.h:588
void setSourceLink(SyncSourceLink *src)
Definition: iqueue.h:375
IncomingRTPPkt * getPacket() const
Definition: iqueue.h:402
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
tpport_t getDataTransportPort() const
Definition: iqueue.h:247
Members()
Definition: iqueue.h:104
Queue for incoming RTP data packets in an RTP session.
Definition: iqueue.h:884
unsigned char * receiverInfo
Definition: iqueue.h:756
ConflictingTransportAddress * lastConflict
Definition: iqueue.h:286
uint16 getMaxPacketMisorder() const
Definition: iqueue.h:1023
void increaseSendersCount()
Definition: iqueue.h:92
SyncSourceLink * nextCollis
Definition: iqueue.h:753
SyncSourceLink * getSourceLink() const
Definition: iqueue.h:372
timeval getRecvTime() const
Get the time this packet was received at.
Definition: iqueue.h:421
uint16 getDefaultMaxPacketMisorder() const
Definition: iqueue.h:1019
MembershipBookkeeping * membership
Definition: iqueue.h:744
reference operator*() const
Definition: iqueue.h:910
SyncSource objects modification methods.
Definition: iqueue.h:125
timeval lastRTCPSRTime
Definition: iqueue.h:764
State
Synchronization source states during an RTP session.
Definition: sources.h:226
uint32 getMembersCount()
Definition: iqueue.h:844
virtual ~ConflictHandler()
Definition: iqueue.h:283
uint16 maxPacketMisorder
Definition: iqueue.h:1286
tpport_t controlTransportPort
Definition: iqueue.h:255
unsigned char * getReceiverInfo()
Definition: iqueue.h:567
bool isValid() const
Definition: iqueue.h:703
void incObservedOctetCount(uint32 n)
Definition: iqueue.h:598
SyncSourceLink * getNextCollis()
Get the link object for the next RTP source in the hash table entry collision list.
Definition: iqueue.h:547
SyncSource * source
Definition: iqueue.h:746
IncomingRTPPktLink * getSrcNext() const
Definition: iqueue.h:390
IncomingRTPPktLink(IncomingRTPPkt *pkt, SyncSourceLink *sLink, struct timeval &recv_ts, uint32 shifted_ts, IncomingRTPPktLink *sp, IncomingRTPPktLink *sn, IncomingRTPPktLink *p, IncomingRTPPktLink *n)
Definition: iqueue.h:354
Synchronization source in an RTP session.
Definition: sources.h:193
void setJitter(float j)
Definition: iqueue.h:645
void setExtendedMaxSeqNum(uint32 seq)
Definition: iqueue.h:621
IncomingRTPPktLink * getFirst()
Get first RTP (data) packet in the queue of packets received from this socket.
Definition: iqueue.h:507
uint32 getExtendedMaxSeqNum() const
Definition: iqueue.h:617
uint16 baseSeqNum
Definition: iqueue.h:790
uint32 receivedPrior
Definition: iqueue.h:792
void setParticipant(SyncSource &source, Participant &p)
Definition: iqueue.h:143
Participant objects modification methods.
Definition: iqueue.h:180
IncomingRTPPktLink * recvLast
Definition: iqueue.h:1280
void setBadSeqNum(uint32 seq)
Definition: iqueue.h:691
void setInitialDataTime(timeval it)
Definition: iqueue.h:657
SyncSourcesIterator end()
Definition: iqueue.h:942
SyncSourcesIterator operator++(int)
Definition: iqueue.h:921
uint8 getProbation() const
Definition: iqueue.h:694
Interface (envelope) to data received over RTP packets.
Definition: queuebase.h:69
uint16 getDefaultMaxPacketDropout() const
Definition: iqueue.h:1036
SyncSourceLink * prev
Definition: iqueue.h:751
uint32 getSendersCount() const
Definition: iqueue.h:100
SyncSourcesIterator(SyncSourceLink *l=NULL)
Definition: iqueue.h:902
unsigned char * senderInfo
Definition: iqueue.h:755
friend bool operator==(const SyncSourcesIterator &l, const SyncSourcesIterator &r)
Definition: iqueue.h:927
void setNetworkAddress(SyncSource &source, InetAddress addr)
Definition: iqueue.h:163
SyncSourceLink * getPrev()
Get the link object for the previous RTP source.
Definition: iqueue.h:526
float jitter
Definition: iqueue.h:779
uint32 shiftedTimestamp
Definition: iqueue.h:451
IncomingRTPPktLink * getSrcPrev() const
Definition: iqueue.h:396
uint32 getObservedOctetCount() const
Get the total number of payload octets received from this source.
Definition: iqueue.h:595
SyncSourcesIterator begin()
Definition: iqueue.h:939
Base classes for RTP queues.
static const size_t defaultMembersSize
Definition: iqueue.h:1288
void addParticipant(RTPApplication &app, Participant &part)
Definition: iqueue.h:210
uint32 getMembersCount() const
Definition: iqueue.h:84
uint16 maxPacketDropout
Definition: iqueue.h:1287
uint8 getDefaultMinValidPacketSequence() const
Definition: iqueue.h:1003
SyncSourceHandler()
Definition: iqueue.h:167
bool getHello()
Mark this source as having sent some packet.
Definition: iqueue.h:681
timeval getLastRTCPPacketTime() const
Definition: iqueue.h:575
uint8 minValidPacketSequence
Definition: iqueue.h:1285
IncomingRTPPktLink * prev
Definition: iqueue.h:443
tpport_t dataTransportPort
Definition: iqueue.h:254
void setMembersCount(uint32 n)
Definition: iqueue.h:848
void removeParticipant(RTPApplication &app, RTPApplication::ParticipantLink *pl)
Definition: iqueue.h:214
ApplicationHandler()
Definition: iqueue.h:219
unsigned char * getSenderInfo()
Definition: iqueue.h:562
void setLast(IncomingRTPPktLink *lp)
Definition: iqueue.h:520
void setDataTransportPort(SyncSource &source, tpport_t p)
Definition: iqueue.h:155
An RTP application, holding identifying RTCP SDES item values.
Definition: sources.h:365
static const uint32 SEQNUMMOD
Definition: iqueue.h:856
void decreaseMembersCount()
Definition: iqueue.h:80
static const uint8 defaultMinValidPacketSequence
Definition: iqueue.h:1282
void setNext(ConflictingTransportAddress *nc)
Definition: iqueue.h:241
ConflictingTransportAddress * getPrevConflict() const
Definition: iqueue.h:553
uint16 getMaxPacketDropout() const
Definition: iqueue.h:1040
void setLastPacketTransitTime(uint32 time)
Definition: iqueue.h:639
Incoming RTP data packets control structure within the incoming packet queue class.
Definition: iqueue.h:352
timeval getInitialDataTime() const
Definition: iqueue.h:654
void setNext(SyncSourceLink *ns)
Definition: iqueue.h:538
const InetAddress & getNetworkAddress() const
Definition: iqueue.h:244
uint32 getBadSeqNum() const
Definition: iqueue.h:688
uint32 obsPacketCount
Definition: iqueue.h:768
std::ptrdiff_t difference_type
Definition: iqueue.h:898
timeval initialDataTime
Definition: iqueue.h:781
RTP packets received from other participants.
Definition: rtppkt.h:705
uint32 initialDataTimestamp
Definition: iqueue.h:780
ParticipantHandler()
Definition: iqueue.h:193
iterator through the list of synchronizations sources in this session
Definition: iqueue.h:893
ConflictHandler()
Definition: iqueue.h:280
ThreadLock recvLock
Definition: iqueue.h:1278
virtual ~ApplicationHandler()
Definition: iqueue.h:222
static const size_t defaultMembersHashSize
Definition: iqueue.h:855
IncomingRTPPktLink * last
Definition: iqueue.h:748
uint32 getLastPacketTransitTime()
Definition: iqueue.h:636
std::list< CryptoContext * > cryptoContexts
Definition: iqueue.h:1291
void setFirst(IncomingRTPPktLink *fp)
Definition: iqueue.h:510
static const uint16 defaultMaxPacketMisorder
Definition: iqueue.h:1283
virtual ~Members()
Definition: iqueue.h:109
bool getGoodbye()
Mark this source as having sent a BYE control packet.
Definition: iqueue.h:667
SyncSource * getSource()
Get the synchronization source object this link objet holds information for.
Definition: iqueue.h:501
timeval lastPacketTime
Definition: iqueue.h:258
Mutex cryptoMutex
Definition: iqueue.h:1290
ConflictingTransportAddress * next
Definition: iqueue.h:256
SyncSourcesIterator & operator++()
Definition: iqueue.h:916
void setNext(IncomingRTPPktLink *nl)
Definition: iqueue.h:381
void setRecvTime(const timeval &t)
Set the time this packet was received at.
Definition: iqueue.h:415
IncomingRTPPktLink * getNext() const
Definition: iqueue.h:378
pointer operator->() const
Definition: iqueue.h:913
virtual void onExpireRecv(IncomingRTPPkt &)
A hook to filter packets in the receive queue that are being expired.
Definition: iqueue.h:1218
const SyncSource & reference
Definition: iqueue.h:900
void setNextCollis(SyncSourceLink *ns)
Definition: iqueue.h:550
members and senders accounting
Definition: iqueue.h:68
uint32 extendedMaxSeqNum
Definition: iqueue.h:773
virtual void onNewSyncSource(const SyncSource &)
Virtual called when a new synchronization source has joined the session.
Definition: iqueue.h:1186
void updateConflict(ConflictingTransportAddress &ca)
Definition: iqueue.h:274
static const uint16 defaultMaxPacketDropout
Definition: iqueue.h:1284
uint32 lastPacketTransitTime
Definition: iqueue.h:777
bool isMine(const SyncSource &source) const
Get whether a synchronization source is recorded in this membership controller.
Definition: iqueue.h:343
SyncSourcesIterator(const SyncSourcesIterator &si)
Definition: iqueue.h:906
uint8 sourceExpirationPeriod
Definition: iqueue.h:1289
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 setSDESItem(Participant *part, SDESItemType item, const std::string &val)
Definition: iqueue.h:184
~IncomingRTPPktLink()
Definition: iqueue.h:369
virtual ~SyncSourceHandler()
Definition: iqueue.h:170
uint32 getInitialDataTimestamp() const
Definition: iqueue.h:648
const SyncSource * pointer
Definition: iqueue.h:899
Application objects modification methods.
Definition: iqueue.h:206
uint32 cumulativePacketLost
Definition: iqueue.h:774
SyncSourceLink * getLast()
Definition: iqueue.h:840
uint8 fractionLost
Definition: iqueue.h:775
InetAddress networkAddress
Definition: iqueue.h:253
IncomingRTPPkt * packet
Definition: iqueue.h:439
SyncSource value_type
Definition: iqueue.h:897
uint16 getMaxSeqNum() const
Get the highest valid sequence number received.
Definition: iqueue.h:605
void setSendersCount(uint32 n)
Definition: iqueue.h:88
void setInitialDataTimestamp(uint32 ts)
Definition: iqueue.h:651
uint32 getSendersCount()
Definition: iqueue.h:852
void setFractionLost(uint8 fl)
Definition: iqueue.h:633
A class of objects representing remote participants (RTP applications) in a multimedia session...
Definition: sources.h:125
uint16 maxSeqNum
Definition: iqueue.h:772
uint16 getBaseSeqNum() const
Definition: iqueue.h:706
virtual ~MembershipBookkeeping()
Purges all RTPSource structures created during the session, as well as the hash table and the list of...
Definition: iqueue.h:332
SDESItemType
SDES items that may be carried in a Source DEScription RTCP packet.
Definition: rtcppkt.h:65
uint32 obsOctetCount
Definition: iqueue.h:770
Controls the group membership in the current session.
Definition: iqueue.h:299
virtual ~ParticipantHandler()
Definition: iqueue.h:196
SyncSourceLink(MembershipBookkeeping *m, SyncSource *s, IncomingRTPPktLink *fp=NULL, IncomingRTPPktLink *lp=NULL, SyncSourceLink *ps=NULL, SyncSourceLink *ns=NULL, SyncSourceLink *ncollis=NULL)
Definition: iqueue.h:475
Synchronization Source internal handler within the incoming packets queue.
Definition: iqueue.h:470
tpport_t getControlTransportPort() const
Definition: iqueue.h:250
SyncSourceLink * getFirst()
Definition: iqueue.h:837
void setMaxPacketMisorder(uint16 packets)
Definition: iqueue.h:1015
uint32 getCumulativePacketLost() const
Definition: iqueue.h:624
IncomingRTPPktLink * getPrev() const
Definition: iqueue.h:384
uint32 expectedPrior
Definition: iqueue.h:791