---
name: "MembershipBookkeeping"
section: "3"
platform: "linux"
package: "libccrtp-doc"
version: "2.0.9-4.1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/MembershipBookkeeping"
---

# MembershipBookkeeping(3)

Controls the group membership in the current session.

## NAME

MembershipBookkeeping - Controls the group membership in the current session.

## SYNOPSIS

`#include <iqueue.h>`

Inherits **SyncSourceHandler**, **ParticipantHandler**, **ApplicationHandler**, **ConflictHandler**, and **Members**.

Inherited by **IncomingDataQueue**` [protected]`.

### Classes

struct **IncomingRTPPktLink**\
 Incoming RTP data packets control structure within the incoming packet queue class.  struct **SyncSourceLink**\
 Synchronization Source internal handler within the incoming packets queue.

### Public Member Functions

size\_t **getDefaultMembersHashSize** ()\

Public Member Functions inherited from **SyncSourceHandler** void \* **getLink** (const **SyncSource** &source) const\
 This requires **SyncSource** - **SyncSourceHandler** friendship.  void **setLink** (**SyncSource** &source, void \*link)\
 void **setParticipant** (**SyncSource** &source, **Participant** &p)\
 void **setState** (**SyncSource** &source, **SyncSource::State** ns)\
 void **setSender** (**SyncSource** &source, bool active)\
 void **setDataTransportPort** (**SyncSource** &source, tpport\_t p)\
 void **setControlTransportPort** (**SyncSource** &source, tpport\_t p)\
 void **setNetworkAddress** (**SyncSource** &source, InetAddress addr)\

Public Member Functions inherited from **ParticipantHandler** void **setSDESItem** (**Participant** \*part, **SDESItemType** item, const std::string &val)\
 void **setPRIVPrefix** (**Participant** \*part, const std::string val)\

Public Member Functions inherited from **ApplicationHandler** void **addParticipant** (**RTPApplication** &app, **Participant** &part)\
 void **removeParticipant** (**RTPApplication** &app, RTPApplication::ParticipantLink \*pl)\

Public Member Functions inherited from **ConflictHandler** **ConflictingTransportAddress** \* **searchDataConflict** (InetAddress na, tpport\_t dtp)\
 **ConflictingTransportAddress** \* **searchControlConflict** (InetAddress na, tpport\_t ctp)\
 void **updateConflict** (**ConflictingTransportAddress** &ca)\
 void **addConflict** (const InetAddress &na, tpport\_t dtp, tpport\_t ctp)\

### Protected Member Functions

**MembershipBookkeeping** (uint32 initialSize=**defaultMembersHashSize**)\
 The initial size is a hint to allocate the resources needed in order to keep the members' identifiers and associated information.  virtual **~MembershipBookkeeping** ()\
 Purges all RTPSource structures created during the session, as well as the hash table and the list of sources.  **SyncSourceLink** \* **getLink** (const **SyncSource** &source) const\
 bool **isMine** (const **SyncSource** &source) const\
 Get whether a synchronization source is recorded in this membership controller.  bool **isRegistered** (uint32 ssrc)\
 Returns whether there is already a synchronizacion source with 'ssrc' SSRC identifier.  **SyncSourceLink** \* **getSourceBySSRC** (uint32 ssrc, bool &created)\
 Get the description of a source by its `ssrc` identifier.  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`  **SyncSourceLink** \* **getFirst** ()\
 **SyncSourceLink** \* **getLast** ()\
 uint32 **getMembersCount** ()\
 void **setMembersCount** (uint32 n)\
 uint32 **getSendersCount** ()\

Protected Member Functions inherited from **SyncSourceHandler** **SyncSourceHandler** ()\
 virtual **~SyncSourceHandler** ()\

Protected Member Functions inherited from **ParticipantHandler** **ParticipantHandler** ()\
 virtual **~ParticipantHandler** ()\

Protected Member Functions inherited from **ApplicationHandler** **ApplicationHandler** ()\
 virtual **~ApplicationHandler** ()\

Protected Member Functions inherited from **ConflictHandler** **ConflictHandler** ()\
 virtual **~ConflictHandler** ()\

### Static Protected Attributes

static const size\_t **defaultMembersHashSize**\
 static const uint32 **SEQNUMMOD**\

### Additional Inherited Members

Protected Attributes inherited from **ConflictHandler** **ConflictingTransportAddress** \* **firstConflict**\
 **ConflictingTransportAddress** \* **lastConflict**\

## Detailed Description

Controls the group membership in the current session.

For now, this class implements only a hash table of members, but its design and relation with other classes is intented to support group membership sampling in case scalability problems arise.

**Author**

Federico Montesino Pouzols fedemp@altern.org

## Constructor & Destructor Documentation

### MembershipBookkeeping::MembershipBookkeeping (uint32 initialSize = defaultMembersHashSize)` [protected]`

The initial size is a hint to allocate the resources needed in order to keep the members' identifiers and associated information. Although ccRTP will reallocate resources when it becomes necessary, a good hint may save a lot of unpredictable time penalties.

**Parameters**

*initialSize* an estimation of how many participants the session will consist of.

### virtual MembershipBookkeeping::~MembershipBookkeeping ()` [inline]`, ` [protected]`, ` [virtual]`

Purges all RTPSource structures created during the session, as well as the hash table and the list of sources.

## Member Function Documentation

### bool MembershipBookkeeping::BYESource (uint32 ssrc)` [protected]`

Mark the source identified by `ssrc` as having sent a BYE packet. It is not deleted until a timeout expires, so that in case some packets from this source arrive a bit later the source is not inserted again in the table of known sources.

**Returns**

true if the source had been previously identified. false if it was not in the table of known sources.

### size\_t MembershipBookkeeping::getDefaultMembersHashSize ()` [inline]`

### SyncSourceLink \* MembershipBookkeeping::getFirst ()` [inline]`, ` [protected]`

### SyncSourceLink \* MembershipBookkeeping::getLast ()` [inline]`, ` [protected]`

### SyncSourceLink \* MembershipBookkeeping::getLink (const SyncSource & source) const` [inline]`, ` [protected]`

### uint32 MembershipBookkeeping::getMembersCount ()` [inline]`, ` [protected]`

### uint32 MembershipBookkeeping::getSendersCount ()` [inline]`, ` [protected]`

### SyncSourceLink \* MembershipBookkeeping::getSourceBySSRC (uint32 ssrc, bool & created)` [protected]`

Get the description of a source by its `ssrc` identifier.

**Parameters**

*ssrc* SSRC identifier, in host order. \
 *created* whether a new source has been created.

**Returns**

Pointer to the **SyncSource** object identified by `ssrc`.

### bool MembershipBookkeeping::isMine (const SyncSource & source) const` [inline]`, ` [protected]`

Get whether a synchronization source is recorded in this membership controller.

### bool MembershipBookkeeping::isRegistered (uint32 ssrc)` [protected]`

Returns whether there is already a synchronizacion source with 'ssrc' SSRC identifier.

### bool MembershipBookkeeping::removeSource (uint32 ssrc)` [protected]`

Remove the description of the source identified by `ssrc`

**Returns**

whether the source has been actually removed or it did not exist.

### void MembershipBookkeeping::setMembersCount (uint32 n)` [inline]`, ` [protected]`

## Member Data Documentation

### const size\_t MembershipBookkeeping::defaultMembersHashSize` [static]`, ` [protected]`

### const uint32 MembershipBookkeeping::SEQNUMMOD` [static]`, ` [protected]`

## Author

Generated automatically by Doxygen for ccRTP from the source code.
