diff options
Diffstat (limited to 'main/bridge_basic.c')
-rw-r--r-- | main/bridge_basic.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/main/bridge_basic.c b/main/bridge_basic.c index cee56b1b5..eb44867f1 100644 --- a/main/bridge_basic.c +++ b/main/bridge_basic.c @@ -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; |