mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-19 11:42:27 +00:00
ARI: Make mixing bridges propagate linkedids and accountcodes.
* Create a Stasis bridge sub-class to propagate linkedids and accountcodes. * Fixed the basic bridge sub-class to update peeraccount codes when the number of channels in the bridge drops back down to two parties. * Refactored ast_bridge_channel_update_accountcodes() to handle channels joining/leaving the bridge. * Fixed the basic bridge sub-class to not call the base bridge class pull method twice. AFS-105 #close ASTERISK-23852 #close Reported by: Richard Mudgett Review: https://reviewboard.asterisk.org/r/3720/ ........ Merged revisions 418225 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@418226 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -665,8 +665,6 @@ static int bridge_personality_normal_push(struct ast_bridge *self, struct ast_br
|
||||
return -1;
|
||||
}
|
||||
|
||||
ast_bridge_channel_update_accountcodes(bridge_channel, swap);
|
||||
ast_bridge_channel_update_linkedids(bridge_channel, swap);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -676,10 +674,14 @@ static int bridge_basic_push(struct ast_bridge *self, struct ast_bridge_channel
|
||||
|
||||
ast_assert(personality != NULL);
|
||||
|
||||
if (personality->details[personality->current].v_table->push(self, bridge_channel, swap)) {
|
||||
if (personality->details[personality->current].v_table->push
|
||||
&& personality->details[personality->current].v_table->push(self, bridge_channel, swap)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
ast_bridge_channel_update_linkedids(bridge_channel, swap);
|
||||
ast_bridge_channel_update_accountcodes(bridge_channel, swap);
|
||||
|
||||
return ast_bridge_base_v_table.push(self, bridge_channel, swap);
|
||||
}
|
||||
|
||||
@@ -693,6 +695,8 @@ static void bridge_basic_pull(struct ast_bridge *self, struct ast_bridge_channel
|
||||
personality->details[personality->current].v_table->pull(self, bridge_channel);
|
||||
}
|
||||
|
||||
ast_bridge_channel_update_accountcodes(NULL, bridge_channel);
|
||||
|
||||
ast_bridge_base_v_table.pull(self, bridge_channel);
|
||||
}
|
||||
|
||||
@@ -3315,11 +3319,16 @@ void ast_bridging_init_basic(void)
|
||||
ast_bridge_basic_v_table.pull = bridge_basic_pull;
|
||||
ast_bridge_basic_v_table.destroy = bridge_basic_destroy;
|
||||
|
||||
personality_normal_v_table = ast_bridge_base_v_table;
|
||||
/*
|
||||
* Personality vtables don't have the same rules as
|
||||
* normal bridge vtables. These vtable functions are
|
||||
* used as alterations to the ast_bridge_basic_v_table
|
||||
* method functionality and are checked for NULL before
|
||||
* calling.
|
||||
*/
|
||||
personality_normal_v_table.name = "normal";
|
||||
personality_normal_v_table.push = bridge_personality_normal_push;
|
||||
|
||||
personality_atxfer_v_table = ast_bridge_base_v_table;
|
||||
personality_atxfer_v_table.name = "attended transfer";
|
||||
personality_atxfer_v_table.push = bridge_personality_atxfer_push;
|
||||
personality_atxfer_v_table.pull = bridge_personality_atxfer_pull;
|
||||
|
Reference in New Issue
Block a user