41 #include "rtpconfig.h"
47 #define RTPSOURCES_HASHSIZE 8317
49 class RTPSources_GetHashIndex
52 static int GetIndex(
const uint32_t &ssrc) {
return ssrc%RTPSOURCES_HASHSIZE; }
58 class RTPInternalSourceData;
88 #ifdef RTP_SUPPORT_PROBATION
91 #endif // RTP_SUPPORT_PROBATION
141 uint32_t packetcount,uint32_t octetcount,
const RTPTime &receivetime,
150 uint32_t exthighseqnr,uint32_t jitter,uint32_t lsr,
159 const void *itemdata,
const RTPTime &receivetime,
const RTPAddress *senderaddress);
160 #ifdef RTP_SUPPORT_SDESPRIV
167 size_t valuelen,
const void *valuedata,
const RTPTime &receivetime,
169 #endif //RTP_SUPPORT_SDESPRIV
175 int ProcessBYE(uint32_t ssrc,
size_t reasonlength,
const void *reasondata,
const RTPTime &receivetime,
286 void SafeCountTotal();
287 void SafeCountSenders();
288 void SafeCountActive();
307 const uint8_t *cname,
size_t cnamelength) { }
341 void ClearSourceList();
342 int ObtainSourceDataInstance(uint32_t ssrc,RTPInternalSourceData **srcdat,
bool *created);
343 int GetRTCPSourceData(uint32_t ssrc,
const RTPAddress *senderaddress,RTPInternalSourceData **srcdat,
bool *newsource);
344 bool CheckCollision(RTPInternalSourceData *srcdat,
const RTPAddress *senderaddress,
bool isrtp);
346 RTPKeyHashTable<const uint32_t,RTPInternalSourceData*,RTPSources_GetHashIndex,RTPSOURCES_HASHSIZE> sourcelist;
352 #ifdef RTP_SUPPORT_PROBATION
354 #endif // RTP_SUPPORT_PROBATION
356 RTPInternalSourceData *owndata;
359 #endif // RTPSOURCES_H
int ProcessRawPacket(RTPRawPacket *rawpack, RTPTransmitter *trans, bool acceptownpackets)
Processes a raw packet rawpack.
Store incoming RTP packet from a source that's on probation for later retrieval.
Definition: rtpsources.h:79
bool GotoPreviousSource()
Sets the current source to be the previous source in the table.
void Timeout(const RTPTime &curtime, const RTPTime &timeoutdelay)
Assuming that the current time is curtime, time out the members from whom we haven't heard during the...
int ProcessRTPPacket(RTPPacket *rtppack, const RTPTime &receivetime, const RTPAddress *senderaddress, bool *stored)
Processes an RTPPacket instance rtppack which was received at time receivetime and which originated f...
virtual void OnBYETimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed after having sent a BYE packet.
Definition: rtpsources.h:319
int ProcessSDESNormalItem(uint32_t ssrc, RTCPSDESPacket::ItemType t, size_t itemlength, const void *itemdata, const RTPTime &receivetime, const RTPAddress *senderaddress)
Processes the non-private SDES item from source ssrc into the source table.
bool GotoFirstSource()
Starts the iteration over the participants by going to the first member in the table.
Represents an RTP Packet.
Definition: rtppacket.h:53
virtual void OnNewSource(RTPSourceData *srcdat)
Is called when a new entry srcdat is added to the source table.
Definition: rtpsources.h:310
RTPSourceData * GetCurrentSourceInfo()
Returns the RTPSourceData instance for the currently selected participant.
Don't use the probation algorithm; accept RTP packets immediately.
Definition: rtpsources.h:77
int GetTotalCount() const
Returns the total number of entries in the source table.
Definition: rtpsources.h:280
A memory manager.
Definition: rtpmemorymanager.h:144
void SetProbationType(ProbationType probtype)
Changes the current probation type.
Definition: rtpsources.h:90
Represents a table in which information about the participating sources is kept.
Definition: rtpsources.h:71
virtual void OnBYEPacket(RTPSourceData *srcdat)
Is called when a BYE packet has been processed for source srcdat.
Definition: rtpsources.h:322
bool GotoFirstSourceWithData()
Sets the current source to be the first source in the table which has RTPPacket instances that we hav...
virtual void OnAPPPacket(RTCPAPPPacket *apppacket, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an RTCP APP packet apppacket has been received at time receivetime from address sender...
Definition: rtpsources.h:327
virtual void OnUnknownPacketFormat(RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an unknown packet format for a known packet type was detected.
Definition: rtpsources.h:335
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:77
Describes an RTCP APP packet.
Definition: rtcpapppacket.h:51
Base class for specific types of RTCP packets.
Definition: rtcppacket.h:47
virtual void OnUnknownPacketType(RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an unknown RTCP packet type was detected.
Definition: rtpsources.h:331
virtual void OnTimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed out.
Definition: rtpsources.h:316
RTPPacket * GetNextPacket()
Extracts the next packet from the received packets queue of the current participant.
void BYETimeout(const RTPTime &curtime, const RTPTime &timeoutdelay)
Assuming that the current time is curtime, remove the members who sent a BYE packet more than the tim...
Represents an RTCP compound packet.
Definition: rtcpcompoundpacket.h:50
RTPSources(ProbationType=ProbationStore, RTPMemoryManager *mgr=0)
In the constructor you can select the probation type you'd like to use and also a memory manager...
bool GotEntry(uint32_t ssrc)
Returns true if an entry for participant ssrc exists and false otherwise.
void Clear()
Clears the source table.
ProbationType
Type of probation to use for new sources.
Definition: rtpsources.h:75
virtual void OnRTCPCompoundPacket(RTCPCompoundPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an RTCP compound packet is about to be processed.
Definition: rtpsources.h:295
void MultipleTimeouts(const RTPTime &curtime, const RTPTime &sendertimeout, const RTPTime &byetimeout, const RTPTime &generaltimeout, const RTPTime ¬etimeout)
Combines the functions SenderTimeout, BYETimeout, Timeout and NoteTimeout.
This class is used by the transmission component to store the incoming RTP and RTCP data in...
Definition: rtprawpacket.h:48
RTPSourceData * GetOwnSourceInfo()
If present, it returns the RTPSourceData instance of the entry which was created by CreateOwnSSRC...
Definition: rtpsources.h:246
int ProcessRTCPSenderInfo(uint32_t ssrc, const RTPNTPTime &ntptime, uint32_t rtptime, uint32_t packetcount, uint32_t octetcount, const RTPTime &receivetime, const RTPAddress *senderaddress)
Process the sender information of SSRC ssrc into the source table.
bool GotoPreviousSourceWithData()
Sets the current source to be the previous source in the table which has RTPPacket instances that we ...
int CreateOwnSSRC(uint32_t ssrc)
Creates an entry for our own SSRC identifier.
bool GotoNextSource()
Sets the current source to be the next source in the table.
virtual void OnSSRCCollision(RTPSourceData *srcdat, const RTPAddress *senderaddress, bool isrtp)
Is called when an SSRC collision was detected.
Definition: rtpsources.h:303
bool GotoNextSourceWithData()
Sets the current source to be the next source in the table which has RTPPacket instances that we have...
virtual void OnCNAMECollision(RTPSourceData *srcdat, const RTPAddress *senderaddress, const uint8_t *cname, size_t cnamelength)
Is called when another CNAME was received than the one already present for source srcdat...
Definition: rtpsources.h:306
int GetActiveMemberCount() const
Returns the number of members which have been validated and which haven't sent a BYE packet yet...
Definition: rtpsources.h:283
int UpdateReceiveTime(uint32_t ssrc, const RTPTime &receivetime, const RTPAddress *senderaddress)
If we heard from source ssrc, but no actual data was added to the source table (for example...
Abstract class from which actual transmission components should be derived.
Definition: rtptransmitter.h:57
ItemType
Identifies the type of an SDES item.
Definition: rtcpsdespacket.h:56
int ProcessSDESPrivateItem(uint32_t ssrc, size_t prefixlen, const void *prefixdata, size_t valuelen, const void *valuedata, const RTPTime &receivetime, const RTPAddress *senderaddress)
Processes the SDES private item from source ssrc into the source table.
void SenderTimeout(const RTPTime &curtime, const RTPTime &timeoutdelay)
Assuming that the current time is curtime, remove the sender flag for senders from whom we haven't re...
int ProcessRTCPReportBlock(uint32_t ssrc, uint8_t fractionlost, int32_t lostpackets, uint32_t exthighseqnr, uint32_t jitter, uint32_t lsr, uint32_t dlsr, const RTPTime &receivetime, const RTPAddress *senderaddress)
Processes the report block information which was sent by participant ssrc into the source table...
void SentRTPPacket()
This function should be called if our own session has sent an RTP packet.
This class is an abstract class which is used to specify destinations, multicast groups etc...
Definition: rtpaddress.h:47
virtual void OnRemoveSource(RTPSourceData *srcdat)
Is called when the entry srcdat is about to be deleted from the source table.
Definition: rtpsources.h:313
int ProcessRTCPCompoundPacket(RTCPCompoundPacket *rtcpcomppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Processes the RTCP compound packet rtcpcomppack which was received at time receivetime from senderadd...
virtual void OnRTPPacket(RTPPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an RTP packet is about to be processed.
Definition: rtpsources.h:292
RTPSourceData * GetSourceInfo(uint32_t ssrc)
Returns the RTPSourceData instance for the participant identified by ssrc, or NULL if no such entry e...
int GetSenderCount() const
Returns the number of participants which are marked as a sender.
Definition: rtpsources.h:277
Discard incoming RTP packets originating from a source that's on probation.
Definition: rtpsources.h:78
virtual void OnNoteTimeout(RTPSourceData *srcdat)
Is called when the SDES NOTE item for source srcdat has been timed out.
Definition: rtpsources.h:339
void NoteTimeout(const RTPTime &curtime, const RTPTime &timeoutdelay)
Assuming that the current time is curtime, clear the SDES NOTE items which haven't been updated durin...
int ProcessBYE(uint32_t ssrc, size_t reasonlength, const void *reasondata, const RTPTime &receivetime, const RTPAddress *senderaddress)
Processes the BYE message for SSRC ssrc.
This is a simple wrapper for the most significant word (MSW) and least significant word (LSW) of an N...
Definition: rtptimeutilities.h:58
Describes an entry in the RTPSources source table.
Definition: rtpsourcedata.h:164
int DeleteOwnSSRC()
Deletes the entry for our own SSRC identifier.