Skip to content

Note

This page discusses confbridge state information for internal development use. This is unrelated to the device, extension or presence state concepts at the user level.

Intro

The behavior of a conference bridge is defined by 6 states (EMPTY, INACTIVE, SINGLE_UNMARKED, SINGLE_MARKED, MULTI_UNMARKED, MULTI_MARKED), and 6 events (JOIN_UNMARKED, JOIN_WAITMARKED, JOIN_MARKED, LEAVE_UNMARKED, LEAVE_WAITMARKED, LEAVE_MARKED), and by the total number of ACTIVE, WAITING, and MARKED users currently in the conference.

Types of users

UNMARKED

Unmarked users are the "standard" user of a conference bridge. When they join, they are immediately active in the conference.

WAITMARKED

Waitmarked users do not actually join the conference until a marked user joins. They start out mute and unable to speak and aren't counted in any conference user counts. When a marked user joins, they become active participants in the conference. When the last marked user leaves, they go back to their waiting state.

MARKED

Marked users are just like "standard" unmarked users, except that waitmarked users become active when the first marked user joins and become inactive when the last marked user leaves.

States

EMPTY

Description

The EMPTY state is the starting state of the conference. EMPTY is defined as no active nor waiting users in the conference.

Event handling
Event Guard Target state Notes
JOIN:unmarked * SINGLE Play the "only person" prompt unless configured not to.
JOIN:waitmarked * INACTIVE
JOIN:marked * SINGLE_MARKED Play the "placed into the conference" prompt unless configured not to.
LEAVE:unmarked * INVALID You can't have someone leave an empty conference.
LEAVE:waitmarked * INVALID
LEAVE:marked * INVALID

INACTIVE

Description

The INACTIVE state is defined as having only inactive/WAITMARKED users.

Event handling
Event Guard Target state Notes
JOIN:unamrked * SINGLE Play the "only person" prompt unless configured not to.
JOIN:waitmarked * INACTIVE
JOIN:marked * MULTI_MARKED Since there is at least one waitmarked user being made active by the joining marked user, stop MOH/unmute first user if necessary and transition to MULTI_MARKED
LEAVE:unmarked * INVALID There can't be a non-waitmarked user in the conference in this state.
LEAVE:waitmarked waiting == 0 EMPTY Since only waitmarked users exist, the last user has left.
LEAVE:waitmarked waiting > 0 INACTIVE If their are still waitmarked users, nothing changes.
LEAVE:marked * INVALID There can't be a non-waitmarked user in the conference in this state.

SINGLE

Description

The SINGLE state is defined as having a single active unmarked user. There can be 0 or more inactive/WAITMARKED users in the SINGLE state.

Event handling
Event Guard Target state Notes
JOIN:unmarked * MULTI_UNMARKED There are now at least two active users. Stop MOH/unmute first user if necessary
JOIN:waitmarked * SINGLE Since waitmarked users don't have an effect, just add them to the waiting list.
JOIN:marked * MULTI_MARKED There are now at least two active users, one of which is marked. Stop MOH/unmute first user if necessary.
LEAVE:unmarked waiting == 0 EMPTY If there are not waiting users, the conference is now empty.
LEAVE:unmarked waiting > 0 INACTIVE If there are waiting users, the conference now has only waiting users.
LEAVE:waitmarked * SINGLE Since waitmarked users don't have an effect, just remove the user from the waiting list.
LEAVE:marked * INVALID If the user was marked, the conference would be in the SINGLE_MARKED state.

SINGLE_MARKED

Description

The SINGLE_MARKED state is defined as having a single active marked user. It is not possible for inactive/WAITMARKED users to exist in this state as WAITMARKED users become active in the presence of a marked user and therefor the state would be MULTI_MARKED.

Event handling
Event Guard Target state Notes
JOIN:unmarked * MULTI_MARKED There are now at least two active users, one of which is marked. Stop MOH/unmute first user if necessary
JOIN:waitmarked * MULTI_MARKED Since there is a marked user, the waitmarked behavior is the same as the unmarked
JOIN:marked * MULTI_MARKED There are now two active marked users. Stop MOH/unmute first user if necessary.
LEAVE:unmarked * INVALID There can only be a single marked user in the conference in this state.
LEAVE:waitmarked * INVALID There can only be a single marked user in the conference in this state.
LEAVE:marked * EMPTY The single marked user has left so the conference is now empty.

MULTI_UNMARKED

Description

The MULTI_UNMARKED state is defined as having more than one active unmarked user and 0 marked users. There can be 0 or more inactive/WAITMARKED users in the MULTI_UNMARKED state.

Event handling
Event Guard Target state Notes
JOIN:unmarked * MULTI_UNMARKED No change.
JOIN:waitmarked * MULTI_UNMARKED No change.
JOIN:marked * MULTI_MARKED There are now multiple active users and a marked user. Transition to MULTI_MARKED.
LEAVE:unmarked active == 1 SINGLE When the conference gets down to a single user, transition to SINGLE.
LEAVE:unmarked active > 1 MULTI_UNMARKED There are still multiple unmarked users, so no change is necessary.
LEAVE:waitmarked * MULTI_UNMARKED No change.
LEAVE:marked * INVALID There can't be any marked users in this state.

MULTI_MARKED

Description

The MULTI_MARKED state is defined of having at least one marked user in addition to at least one other active user. When a marked user is present, all WAITMARKED/inactive users become active.

Event handling
Event Guard Target state Notes
JOIN:unmarked * MULTI_MARKED No change
JOIN:waitmarked * MULTI_MARKED No change
JOIN:marked * MULTI_MARKED No change
LEAVE:unmarked active == 1 SINGLE_MARKED If an unmarked user leaves and there is only one user left, it must be marked. Transition to SINGLE_MARKED.
LEAVE:unmarked active > 1 MULTI_MARKED There are still multiple users and at least one marked user. No change.
LEAVE:waitmarked active == 1 SINGLE_MARKED Waitmarked users behave as unmarked users in the presence of a marked user.
LEAVE:waitmarked active > 1 MULTI_MARKED Waitmarked users behave as unmarked users in the presence of a marked user.
LEAVE:marked Note that if the last marked user leaves, then the "leader has left" sound plays, all waitmarked users are moved back to waiting, and users set to be kicked when the leader leaves will be kicked. This all happens before a transition decision is made.
LEAVE:marked active == 0 && waiting == 0 EMPTY There are no users left, transition to EMPTY.
LEAVE:marked active == 0 && waiting > 0 INACTIVE There are only waiting users left, transition to INACTIVE.
LEAVE:marked active == 1 && marked == 0 SINGLE There is only one unmarked user left, transition to SINGLE.
LEAVE:marked active == 1 && marked == 1 && waiting == 0 SINGLE_MARKED There is only one marked user left, transition to SINGLE_MARKED.
LEAVE:marked active == 1 && marked == 1 && waiting > 0 MULTI_MARKED I don't think this can happen since you shouldn't be able to have marked and waiting users. But, if you could, you would be in MULTI_MARKED.
LEAVE:marked active > 1 && marked == 0 MULTI_UNMARKED There are multiple users, but no marked users. Transition to MULTI_UNMARKED.
LEAVE:marked active > 1 && marked > 0 MULTI_MARKED There are still multiple marked users. No change.