From: Joshua Colp Date: Mon, 19 Oct 2009 19:47:50 +0000 (+0000) Subject: Do not attempt early media bridging (ie: direct RTP setup) if options are enabled... X-Git-Tag: 1.4.27-rc3~43 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=926a033bf91816dfb1daf7776915eddffd39640c;p=thirdparty%2Fasterisk.git 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: https://origsvn.digium.com/svn/asterisk/branches/1.4@224565 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/apps/app_dial.c b/apps/app_dial.c index 5a8f626799..f821163489 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);