mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
Fix DTMF atxfer running h exten after the wrong bridge ends.
When party B does an attended transfer of party A to party C, the attending bridge between party B and C should not be running an h exten when the bridge ends. Running an h exten now sets a softhangup flag to ensure that an AGI will run in dead AGI mode. * Set the AST_FLAG_BRIDGE_HANGUP_DONT on the party B channel for the attending bridge between party B and C. (closes issue AST-870) (closes issue ASTERISK-19717) Reported by: Mario (closes issue ASTERISK-19633) Reported by: Andrey Solovyev Patches: jira_asterisk_19633_v1.8.patch (license #5621) patch uploaded by rmudgett Tested by: rmudgett, Andrey Solovyev, Mario ........ Merged revisions 364060 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 364065 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@364082 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -2686,16 +2686,30 @@ static int builtin_atxfer(struct ast_channel *chan, struct ast_channel *peer, st
|
||||
ast_set_flag(&(bconfig.features_caller), AST_FEATURE_DISCONNECT);
|
||||
ast_set_flag(&(bconfig.features_callee), AST_FEATURE_DISCONNECT);
|
||||
|
||||
/* ast_bridge_call clears AST_FLAG_BRIDGE_HANGUP_DONT, but we don't
|
||||
want that to happen here because we're also in another bridge already
|
||||
/*
|
||||
* ast_bridge_call clears AST_FLAG_BRIDGE_HANGUP_DONT, but we
|
||||
* don't want that to happen here because the transferer is in
|
||||
* another bridge already.
|
||||
*/
|
||||
if (ast_test_flag(ast_channel_flags(chan), AST_FLAG_BRIDGE_HANGUP_DONT)) {
|
||||
if (ast_test_flag(ast_channel_flags(transferer), AST_FLAG_BRIDGE_HANGUP_DONT)) {
|
||||
hangup_dont = 1;
|
||||
}
|
||||
/* Let party B and party C talk as long as they want. */
|
||||
|
||||
/*
|
||||
* Don't let the after-bridge code run the h-exten. It is the
|
||||
* wrong bridge to run the h-exten after.
|
||||
*/
|
||||
ast_set_flag(ast_channel_flags(transferer), AST_FLAG_BRIDGE_HANGUP_DONT);
|
||||
|
||||
/*
|
||||
* Let party B and C talk as long as they want while party A
|
||||
* languishes in autoservice listening to MOH.
|
||||
*/
|
||||
ast_bridge_call(transferer, newchan, &bconfig);
|
||||
|
||||
if (hangup_dont) {
|
||||
ast_set_flag(ast_channel_flags(chan), AST_FLAG_BRIDGE_HANGUP_DONT);
|
||||
/* Restore the AST_FLAG_BRIDGE_HANGUP_DONT flag */
|
||||
ast_set_flag(ast_channel_flags(transferer), AST_FLAG_BRIDGE_HANGUP_DONT);
|
||||
}
|
||||
|
||||
if (ast_check_hangup(newchan) || !ast_check_hangup(transferer)) {
|
||||
|
Reference in New Issue
Block a user