<p>Richard Mudgett has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/13513">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">features.c: Make Bridge application tolerate unspecified channel.<br><br>The Bridge application was inconsistent if the channel to bridge with is<br>not specified.  If no parameters are given then a warning is issued and<br>the current channel is hung up.  If options are given but no channel is<br>specified then a warning is issued and the current channel is not hung up.<br><br>* Made the Bridge application give a verbose message instead of a warning<br>if the channel to bridge with is not specified and made not hang up the<br>current channel.  As a result dialplan no longer needs to check if a<br>channel name is passed before calling Bridge and simply needs to check the<br>BRIDGERESULT channel variable instead.  This is something you likely want<br>your dialplan to do anyway.<br><br>* Fixed up L() option warning message.  It is up to the caller to<br>determine if the channel is hung up because of the warning.  Dial() hangs<br>up the current channel while Bridge() does not.<br><br>Change-Id: I44349a8dc3912397f28852777de04f19e7bb9c73<br>---<br>M main/features.c<br>1 file changed, 15 insertions(+), 15 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/13/13513/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/main/features.c b/main/features.c</span><br><span>index 8c2d9bc..ab03bef 100644</span><br><span>--- a/main/features.c</span><br><span>+++ b/main/features.c</span><br><span>@@ -84,7 +84,9 @@</span><br><span>            </synopsis></span><br><span>            <syntax></span><br><span>                       <parameter name="channel" required="true"></span><br><span style="color: hsl(0, 100%, 40%);">-                            <para>The current channel is bridged to the specified <replaceable>channel</replaceable>.</para></span><br><span style="color: hsl(120, 100%, 40%);">+                              <para>The current channel is bridged to the channel</span><br><span style="color: hsl(120, 100%, 40%);">+                             identified by the channel name, channel name prefix, or channel</span><br><span style="color: hsl(120, 100%, 40%);">+                               uniqueid.</para></span><br><span>                       </parameter></span><br><span>                   <parameter name="options"></span><br><span>                           <optionlist></span><br><span>@@ -893,7 +895,7 @@</span><br><span>             config->warning_freq = atol(warnfreq_str);</span><br><span> </span><br><span>    if (!config->timelimit) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(LOG_WARNING, "Bridge does not accept L(%s), hanging up.\n", limit_str);</span><br><span style="color: hsl(120, 100%, 40%);">+             ast_log(LOG_WARNING, "Bridge does not accept L(%s)\n", limit_str);</span><br><span>                 config->timelimit = config->play_warning = config->warning_freq = 0;</span><br><span>                config->warning_sound = NULL;</span><br><span>             return -1; /* error */</span><br><span>@@ -996,7 +998,7 @@</span><br><span>  */</span><br><span> static int bridge_exec(struct ast_channel *chan, const char *data)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  struct ast_channel *current_dest_chan;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct ast_channel *current_dest_chan = NULL;</span><br><span>        char *tmp_data  = NULL;</span><br><span>      struct ast_flags opts = { 0, };</span><br><span>      struct ast_bridge_config bconfig = { { 0, }, };</span><br><span>@@ -1017,22 +1019,20 @@</span><br><span>            AST_APP_ARG(options);</span><br><span>        );</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  if (ast_strlen_zero(data)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ast_log(LOG_WARNING, "Bridge require at least 1 argument specifying the other end of the bridge\n");</span><br><span style="color: hsl(0, 100%, 40%);">-          return -1;</span><br><span style="color: hsl(120, 100%, 40%);">+    tmp_data = ast_strdupa(data ?: "");</span><br><span style="color: hsl(120, 100%, 40%);">+ AST_STANDARD_APP_ARGS(args, tmp_data);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!ast_strlen_zero(args.options)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         ast_app_parse_options(bridge_exec_options, &opts, opt_args, args.options);</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   tmp_data = ast_strdupa(data);</span><br><span style="color: hsl(0, 100%, 40%);">-   AST_STANDARD_APP_ARGS(args, tmp_data);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (!ast_strlen_zero(args.options))</span><br><span style="color: hsl(0, 100%, 40%);">-             ast_app_parse_options(bridge_exec_options, &opts, opt_args, args.options);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>       /* make sure we have a valid end point */</span><br><span style="color: hsl(0, 100%, 40%);">-       current_dest_chan = ast_channel_get_by_name_prefix(args.dest_chan,</span><br><span style="color: hsl(0, 100%, 40%);">-              strlen(args.dest_chan));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!ast_strlen_zero(args.dest_chan)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               current_dest_chan = ast_channel_get_by_name_prefix(args.dest_chan,</span><br><span style="color: hsl(120, 100%, 40%);">+                    strlen(args.dest_chan));</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span>    if (!current_dest_chan) {</span><br><span style="color: hsl(0, 100%, 40%);">-               ast_log(LOG_WARNING, "Bridge failed because channel %s does not exist\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                     args.dest_chan);</span><br><span style="color: hsl(120, 100%, 40%);">+              ast_verb(4, "Bridge failed because channel '%s' does not exist\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  args.dest_chan ?: "");</span><br><span>             pbx_builtin_setvar_helper(chan, "BRIDGERESULT", "NONEXISTENT");</span><br><span>          return 0;</span><br><span>    }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/13513">change 13513</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.asterisk.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.asterisk.org/c/asterisk/+/13513"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: asterisk </div>
<div style="display:none"> Gerrit-Branch: 16 </div>
<div style="display:none"> Gerrit-Change-Id: I44349a8dc3912397f28852777de04f19e7bb9c73 </div>
<div style="display:none"> Gerrit-Change-Number: 13513 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Richard Mudgett <rmudgett@digium.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>