
Public Member Functions | |
| RTCPMemberDatabase (RTCPInstance &ourRTCPInstance) | |
| virtual | ~RTCPMemberDatabase () |
| Boolean | isMember (unsigned ssrc) const |
| Boolean | noteMembership (unsigned ssrc, unsigned curTimeCount) |
| Boolean | remove (unsigned ssrc) |
| unsigned | numMembers () const |
| void | reapOldMembers (unsigned threshold) |
Private Attributes | |
| RTCPInstance & | fOurRTCPInstance |
| unsigned | fNumMembers |
| HashTable * | fTable |
Definition at line 27 of file RTCP.cpp.
| RTCPMemberDatabase::RTCPMemberDatabase | ( | RTCPInstance & | ourRTCPInstance | ) | [inline] |
Definition at line 29 of file RTCP.cpp.
00030 : fOurRTCPInstance(ourRTCPInstance), fNumMembers(1 /*ourself*/), 00031 fTable(HashTable::create(ONE_WORD_HASH_KEYS)) { 00032 }
| virtual RTCPMemberDatabase::~RTCPMemberDatabase | ( | ) | [inline, virtual] |
| Boolean RTCPMemberDatabase::isMember | ( | unsigned | ssrc | ) | const [inline] |
Definition at line 38 of file RTCP.cpp.
References fTable, HashTable::Lookup(), and NULL.
Referenced by noteMembership().
| Boolean RTCPMemberDatabase::noteMembership | ( | unsigned | ssrc, | |
| unsigned | curTimeCount | |||
| ) | [inline] |
Definition at line 42 of file RTCP.cpp.
References HashTable::Add(), fNumMembers, fTable, and isMember().
Referenced by RTCPInstance::checkNewSSRC().
00042 { 00043 Boolean isNew = !isMember(ssrc); 00044 00045 if (isNew) { 00046 ++fNumMembers; 00047 } 00048 00049 // Record the current time, so we can age stale members 00050 fTable->Add((char*)(long)ssrc, (void*)(long)curTimeCount); 00051 00052 return isNew; 00053 }
| Boolean RTCPMemberDatabase::remove | ( | unsigned | ssrc | ) | [inline] |
Definition at line 55 of file RTCP.cpp.
References fNumMembers, fTable, and HashTable::Remove().
Referenced by RTCPInstance::removeSSRC().
00055 { 00056 Boolean wasPresent = fTable->Remove((char*)(long)ssrc); 00057 if (wasPresent) { 00058 --fNumMembers; 00059 } 00060 return wasPresent; 00061 }
| unsigned RTCPMemberDatabase::numMembers | ( | ) | const [inline] |
Definition at line 63 of file RTCP.cpp.
References fNumMembers.
Referenced by RTCPInstance::numMembers().
00063 { 00064 return fNumMembers; 00065 }
| void RTCPMemberDatabase::reapOldMembers | ( | unsigned | threshold | ) |
Definition at line 75 of file RTCP.cpp.
References HashTable::Iterator::create(), DEBUG, False, fOurRTCPInstance, fTable, iter, MediaSubsessionIterator::next(), RTCPInstance::removeSSRC(), and True.
Referenced by RTCPInstance::sendReport().
00075 { 00076 Boolean foundOldMember; 00077 unsigned oldSSRC = 0; 00078 00079 do { 00080 foundOldMember = False; 00081 00082 HashTable::Iterator* iter 00083 = HashTable::Iterator::create(*fTable); 00084 unsigned long timeCount; 00085 char const* key; 00086 while ((timeCount = (unsigned long)(iter->next(key))) != 0) { 00087 #ifdef DEBUG 00088 fprintf(stderr, "reap: checking SSRC 0x%lx: %ld (threshold %d)\n", (unsigned long)key, timeCount, threshold); 00089 #endif 00090 if (timeCount < (unsigned long)threshold) { // this SSRC is old 00091 unsigned long ssrc = (unsigned long)key; 00092 oldSSRC = (unsigned)ssrc; 00093 foundOldMember = True; 00094 } 00095 } 00096 delete iter; 00097 00098 if (foundOldMember) { 00099 #ifdef DEBUG 00100 fprintf(stderr, "reap: removing SSRC 0x%x\n", oldSSRC); 00101 #endif 00102 fOurRTCPInstance.removeSSRC(oldSSRC, True); 00103 } 00104 } while (foundOldMember); 00105 }
RTCPInstance& RTCPMemberDatabase::fOurRTCPInstance [private] |
unsigned RTCPMemberDatabase::fNumMembers [private] |
HashTable* RTCPMemberDatabase::fTable [private] |
Definition at line 72 of file RTCP.cpp.
Referenced by isMember(), noteMembership(), reapOldMembers(), remove(), and ~RTCPMemberDatabase().
1.5.2