aboutsummaryrefslogtreecommitdiffstats
path: root/apps
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2009-10-19 19:47:50 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2009-10-19 19:47:50 +0000
commitc9cddacd4f2f7fd8611736b5fce64b1c6514fbd6 (patch)
tree68d5d197543c4562710aa916840cc78bcfccf3bd /apps
parent666590ec05874fe23839e8e76045c822e9ba08f6 (diff)
Do not attempt early media bridging (ie: direct RTP setup) if options are enabled that should prevent it.
(closes issue #14763) Reported by: cupotka git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@224565 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'apps')
-rw-r--r--apps/app_dial.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index 5a8f62679..f82116348 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -308,7 +308,8 @@ AST_APP_OPTIONS(dial_exec_options, {
#define CAN_EARLY_BRIDGE(flags,chan,peer) (!ast_test_flag(flags, OPT_CALLEE_HANGUP | \
OPT_CALLER_HANGUP | OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER | \
- OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | OPT_CALLER_PARK) && \
+ OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK | \
+ OPT_CALLER_PARK | OPT_ANNOUNCE | OPT_CALLEE_MACRO) && \
!chan->audiohooks && !peer->audiohooks)
/* We define a custom "local user" structure because we
@@ -533,7 +534,9 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct dial_l
ast_clear_flag(o, DIAL_STILLGOING);
HANDLE_CAUSE(cause, in);
} else {
- ast_rtp_make_compatible(c, in, single);
+ if (CAN_EARLY_BRIDGE(peerflags, c, in)) {
+ ast_rtp_make_compatible(c, in, single);
+ }
if (c->cid.cid_num)
free(c->cid.cid_num);
c->cid.cid_num = NULL;
@@ -1181,7 +1184,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
outbound_group = pbx_builtin_getvar_helper(chan, "OUTBOUND_GROUP");
}
- ast_copy_flags(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_ORIGINAL_CLID | OPT_CALLER_HANGUP | OPT_IGNORE_FORWARDING);
+ ast_copy_flags(peerflags, &opts, OPT_DTMF_EXIT | OPT_GO_ON | OPT_ORIGINAL_CLID | OPT_CALLER_HANGUP | OPT_IGNORE_FORWARDING | OPT_ANNOUNCE | OPT_CALLEE_MACRO);
/* loop through the list of dial destinations */
rest = args.peers;
@@ -1286,11 +1289,13 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
continue;
}
- pbx_builtin_setvar_helper(tmp->chan, "DIALEDPEERNUMBER", numsubst);
+ pbx_builtin_setvar_helper(tmp->chan, "DIALEDPEERNUMBER", numsubst);
/* Setup outgoing SDP to match incoming one */
- ast_rtp_make_compatible(tmp->chan, chan, !outgoing && !rest);
-
+ if (CAN_EARLY_BRIDGE(peerflags, chan, tmp->chan)) {
+ ast_rtp_make_compatible(tmp->chan, chan, !outgoing && !rest);
+ }
+
/* Inherit specially named variables from parent channel */
ast_channel_inherit_variables(chan, tmp->chan);
ast_channel_datastore_inherit(chan, tmp->chan);