mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-12 15:45:18 +00:00
Revert "ConfBridge: Rework announcer channel methodology"
This reverts commit 0cdeb2bfb0
.
Change-Id: I18ba73b6d4dc0b994f4ffb01ae0b6cfad36ac636
This commit is contained in:
@@ -143,6 +143,31 @@ struct ast_channel_tech *conf_announce_get_tech(void)
|
||||
return &announce_tech;
|
||||
}
|
||||
|
||||
void conf_announce_channel_depart(struct ast_channel *chan)
|
||||
{
|
||||
struct announce_pvt *p = ast_channel_tech_pvt(chan);
|
||||
|
||||
if (!p) {
|
||||
return;
|
||||
}
|
||||
|
||||
ao2_ref(p, +1);
|
||||
ao2_lock(p);
|
||||
if (!ast_test_flag(&p->base, AST_UNREAL_CARETAKER_THREAD)) {
|
||||
ao2_unlock(p);
|
||||
ao2_ref(p, -1);
|
||||
return;
|
||||
}
|
||||
ast_clear_flag(&p->base, AST_UNREAL_CARETAKER_THREAD);
|
||||
chan = p->base.chan;
|
||||
ao2_unlock(p);
|
||||
ao2_ref(p, -1);
|
||||
if (chan) {
|
||||
ast_bridge_depart(chan);
|
||||
ast_channel_unref(chan);
|
||||
}
|
||||
}
|
||||
|
||||
int conf_announce_channel_push(struct ast_channel *ast)
|
||||
{
|
||||
struct ast_bridge_features *features;
|
||||
@@ -161,17 +186,20 @@ int conf_announce_channel_push(struct ast_channel *ast)
|
||||
if (!chan) {
|
||||
return -1;
|
||||
}
|
||||
ast_channel_ref(chan);
|
||||
}
|
||||
|
||||
features = ast_bridge_features_new();
|
||||
if (!features) {
|
||||
ast_channel_unref(chan);
|
||||
return -1;
|
||||
}
|
||||
ast_set_flag(&features->feature_flags, AST_BRIDGE_CHANNEL_FLAG_IMMOVABLE);
|
||||
|
||||
/* Impart the output channel into the bridge */
|
||||
if (ast_bridge_impart(p->bridge, chan, NULL, features,
|
||||
AST_BRIDGE_IMPART_CHAN_INDEPENDENT)) {
|
||||
AST_BRIDGE_IMPART_CHAN_DEPARTABLE)) {
|
||||
ast_channel_unref(chan);
|
||||
return -1;
|
||||
}
|
||||
ao2_lock(p);
|
||||
|
@@ -225,9 +225,9 @@ struct confbridge_conference {
|
||||
struct ast_channel *record_chan; /*!< Channel used for recording the conference */
|
||||
struct ast_str *record_filename; /*!< Recording filename. */
|
||||
struct ast_str *orig_rec_file; /*!< Previous b_profile.rec_file. */
|
||||
ast_mutex_t playback_lock; /*!< Lock used for playback channel */
|
||||
AST_LIST_HEAD_NOLOCK(, confbridge_user) active_list; /*!< List of users participating in the conference bridge */
|
||||
AST_LIST_HEAD_NOLOCK(, confbridge_user) waiting_list; /*!< List of users waiting to join the conference bridge */
|
||||
struct ast_taskprocessor *playback_queue; /*!< Queue for playing back bridge announcements and managing the announcer channel */
|
||||
};
|
||||
|
||||
extern struct ao2_container *conference_bridges;
|
||||
@@ -606,6 +606,16 @@ struct ast_channel_tech *conf_record_get_tech(void);
|
||||
*/
|
||||
struct ast_channel_tech *conf_announce_get_tech(void);
|
||||
|
||||
/*!
|
||||
* \brief Remove the announcer channel from the conference.
|
||||
* \since 12.0.0
|
||||
*
|
||||
* \param chan Either channel in the announcer channel pair.
|
||||
*
|
||||
* \return Nothing
|
||||
*/
|
||||
void conf_announce_channel_depart(struct ast_channel *chan);
|
||||
|
||||
/*!
|
||||
* \brief Push the announcer channel into the conference.
|
||||
* \since 12.0.0
|
||||
|
Reference in New Issue
Block a user