Only attempt early bridging if the options given to Dial() permit it.

(closes issue #10861)
Reported by: peekyb


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@84158 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.4
Joshua Colp 18 years ago
parent 2ef9410363
commit e7f6101587

@ -291,6 +291,8 @@ AST_APP_OPTIONS(dial_exec_options, {
AST_APP_OPTION('W', OPT_CALLER_MONITOR), AST_APP_OPTION('W', OPT_CALLER_MONITOR),
}); });
#define CAN_EARLY_BRIDGE(flags) (!ast_test_flag(flags, OPT_CALLEE_HANGUP) && !ast_test_flag(flags, OPT_CALLER_HANGUP) && !ast_test_flag(flags, OPT_CALLEE_TRANSFER) && !ast_test_flag(flags, OPT_CALLER_TRANSFER) && !ast_test_flag(flags, OPT_CALLEE_MONITOR) && !ast_test_flag(flags, OPT_CALLER_MONITOR) && !ast_test_flag(flags, OPT_CALLEE_PARK) && !ast_test_flag(flags, OPT_CALLER_PARK))
/* We define a custom "local user" structure because we /* We define a custom "local user" structure because we
use it not only for keeping track of what is in use but use it not only for keeping track of what is in use but
also for keeping track of who we're dialing. */ also for keeping track of who we're dialing. */
@ -584,7 +586,8 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct dial_l
ast_copy_string(c->dialcontext, "", sizeof(c->dialcontext)); ast_copy_string(c->dialcontext, "", sizeof(c->dialcontext));
ast_copy_string(c->exten, "", sizeof(c->exten)); ast_copy_string(c->exten, "", sizeof(c->exten));
/* Setup RTP early bridge if appropriate */ /* Setup RTP early bridge if appropriate */
ast_rtp_early_bridge(in, peer); if (CAN_EARLY_BRIDGE(peerflags))
ast_rtp_early_bridge(in, peer);
} }
/* If call has been answered, then the eventual hangup is likely to be normal hangup */ /* If call has been answered, then the eventual hangup is likely to be normal hangup */
in->hangupcause = AST_CAUSE_NORMAL_CLEARING; in->hangupcause = AST_CAUSE_NORMAL_CLEARING;
@ -612,7 +615,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct dial_l
if (option_verbose > 2) if (option_verbose > 2)
ast_verbose(VERBOSE_PREFIX_3 "%s is ringing\n", c->name); ast_verbose(VERBOSE_PREFIX_3 "%s is ringing\n", c->name);
/* Setup early media if appropriate */ /* Setup early media if appropriate */
if (single) if (single && CAN_EARLY_BRIDGE(peerflags))
ast_rtp_early_bridge(in, c); ast_rtp_early_bridge(in, c);
if (!(*sentringing) && !ast_test_flag(outgoing, OPT_MUSICBACK)) { if (!(*sentringing) && !ast_test_flag(outgoing, OPT_MUSICBACK)) {
ast_indicate(in, AST_CONTROL_RINGING); ast_indicate(in, AST_CONTROL_RINGING);
@ -623,7 +626,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct dial_l
if (option_verbose > 2) if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "%s is making progress passing it to %s\n", c->name, in->name); ast_verbose (VERBOSE_PREFIX_3 "%s is making progress passing it to %s\n", c->name, in->name);
/* Setup early media if appropriate */ /* Setup early media if appropriate */
if (single) if (single && CAN_EARLY_BRIDGE(peerflags))
ast_rtp_early_bridge(in, c); ast_rtp_early_bridge(in, c);
if (!ast_test_flag(outgoing, OPT_RINGBACK)) if (!ast_test_flag(outgoing, OPT_RINGBACK))
ast_indicate(in, AST_CONTROL_PROGRESS); ast_indicate(in, AST_CONTROL_PROGRESS);
@ -636,7 +639,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct dial_l
case AST_CONTROL_PROCEEDING: case AST_CONTROL_PROCEEDING:
if (option_verbose > 2) if (option_verbose > 2)
ast_verbose (VERBOSE_PREFIX_3 "%s is proceeding passing it to %s\n", c->name, in->name); ast_verbose (VERBOSE_PREFIX_3 "%s is proceeding passing it to %s\n", c->name, in->name);
if (single) if (single && CAN_EARLY_BRIDGE(peerflags))
ast_rtp_early_bridge(in, c); ast_rtp_early_bridge(in, c);
if (!ast_test_flag(outgoing, OPT_RINGBACK)) if (!ast_test_flag(outgoing, OPT_RINGBACK))
ast_indicate(in, AST_CONTROL_PROCEEDING); ast_indicate(in, AST_CONTROL_PROCEEDING);

Loading…
Cancel
Save