<p>N A has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.asterisk.org/c/asterisk/+/16331">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">app_originate: Add ability to set codecs<br><br>A list of codecs to use for dialplan-originated calls can<br>now be specified in Originate, similar to the ability<br>in call files and the manager action.<br><br>Additionally, we now default to just using the slin codec<br>for originated calls, rather than all the slin* codecs up<br>through slin192, which has been known to cause issues<br>and inconsistencies from AMI and call file behavior.<br><br>ASTERISK-29543<br><br>Change-Id: I96a1aeb83d54b635b7a51e1b4680f03791622883<br>---<br>M apps/app_originate.c<br>A doc/CHANGES-staging/app_originate_codecs.txt<br>2 files changed, 30 insertions(+), 17 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/31/16331/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/apps/app_originate.c b/apps/app_originate.c</span><br><span>index 2af46e3..1736c6c 100644</span><br><span>--- a/apps/app_originate.c</span><br><span>+++ b/apps/app_originate.c</span><br><span>@@ -95,6 +95,10 @@</span><br><span>                                               <argument name="argN" /></span><br><span>                                     </argument></span><br><span>                            </option></span><br><span style="color: hsl(120, 100%, 40%);">+                               <option name="C"></span><br><span style="color: hsl(120, 100%, 40%);">+                                     <para>Comma-separated list of codecs to use for this call.</span><br><span style="color: hsl(120, 100%, 40%);">+                                      Default is <literal>slin</literal>.</para></span><br><span style="color: hsl(120, 100%, 40%);">+                          </option></span><br><span>                              <option name="c"></span><br><span>                                    <para>The caller ID number to use for the called channel. Default is</span><br><span>                                   the current channel's Caller ID number.</para></span><br><span>@@ -114,7 +118,7 @@</span><br><span>                       </parameter></span><br><span>           </syntax></span><br><span>              <description></span><br><span style="color: hsl(0, 100%, 40%);">-             <para>This application originates an outbound call and connects it to a specified extension or application.  This application will block until the outgoing call fails or gets answered.  At that point, this application will exit with the status variable set and dialplan processing will continue.</para></span><br><span style="color: hsl(120, 100%, 40%);">+            <para>This application originates an outbound call and connects it to a specified extension or application.  This application will block until the outgoing call fails or gets answered, unless the async option is used.  At that point, this application will exit with the status variable set and dialplan processing will continue.</para></span><br><span>          <para>This application sets the following channel variable before exiting:</para></span><br><span>                <variablelist></span><br><span>                         <variable name="ORIGINATE_STATUS"></span><br><span>@@ -141,7 +145,8 @@</span><br><span>     OPT_ASYNC =             (1 << 2),</span><br><span>      OPT_CALLER_NUM =        (1 << 3),</span><br><span>      OPT_CALLER_NAME =       (1 << 4),</span><br><span style="color: hsl(0, 100%, 40%);">- OPT_VARIABLES =         (1 << 5),</span><br><span style="color: hsl(120, 100%, 40%);">+       OPT_CODECS =            (1 << 5),</span><br><span style="color: hsl(120, 100%, 40%);">+       OPT_VARIABLES =         (1 << 6),</span><br><span> };</span><br><span> </span><br><span> enum {</span><br><span>@@ -149,6 +154,7 @@</span><br><span>    OPT_ARG_PREDIAL_CALLER,</span><br><span>      OPT_ARG_CALLER_NUM,</span><br><span>  OPT_ARG_CALLER_NAME,</span><br><span style="color: hsl(120, 100%, 40%);">+  OPT_ARG_CODECS,</span><br><span>      OPT_ARG_VARIABLES,</span><br><span>   /* note: this entry _MUST_ be the last one in the enum */</span><br><span>    OPT_ARG_ARRAY_SIZE,</span><br><span>@@ -158,6 +164,7 @@</span><br><span>    AST_APP_OPTION('a', OPT_ASYNC),</span><br><span>      AST_APP_OPTION_ARG('b', OPT_PREDIAL_CALLEE, OPT_ARG_PREDIAL_CALLEE),</span><br><span>         AST_APP_OPTION_ARG('B', OPT_PREDIAL_CALLER, OPT_ARG_PREDIAL_CALLER),</span><br><span style="color: hsl(120, 100%, 40%);">+  AST_APP_OPTION_ARG('C', OPT_CODECS, OPT_ARG_CODECS),</span><br><span>         AST_APP_OPTION_ARG('c', OPT_CALLER_NUM, OPT_ARG_CALLER_NUM),</span><br><span>         AST_APP_OPTION_ARG('n', OPT_CALLER_NAME, OPT_ARG_CALLER_NAME),</span><br><span>       AST_APP_OPTION_ARG('v', OPT_VARIABLES, OPT_ARG_VARIABLES),</span><br><span>@@ -178,7 +185,7 @@</span><br><span>     char *opt_args[OPT_ARG_ARRAY_SIZE];</span><br><span>  char *predial_callee = NULL;</span><br><span>         char *parse, *cnum = NULL, *cname = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-       </span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   struct ast_variable *vars = NULL;</span><br><span>    char *chantech, *chandata;</span><br><span>   int res = -1;</span><br><span>@@ -186,22 +193,15 @@</span><br><span>        int outgoing_status = 0;</span><br><span>     unsigned int timeout = 30;</span><br><span>   static const char default_exten[] = "s";</span><br><span style="color: hsl(0, 100%, 40%);">-      struct ast_format_cap *cap_slin = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);</span><br><span style="color: hsl(120, 100%, 40%);">+  struct ast_format_cap *capabilities;</span><br><span style="color: hsl(120, 100%, 40%);">+  capabilities = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);</span><br><span> </span><br><span>        ast_autoservice_start(chan);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (!cap_slin) {</span><br><span style="color: hsl(120, 100%, 40%);">+      if (!capabilities) {</span><br><span>                 goto return_cleanup;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   ast_format_cap_append(cap_slin, ast_format_slin, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-    ast_format_cap_append(cap_slin, ast_format_slin12, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin16, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin24, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin32, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin44, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin48, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin96, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-  ast_format_cap_append(cap_slin, ast_format_slin192, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       ast_format_cap_append(capabilities, ast_format_slin, 0);</span><br><span> </span><br><span>         if (ast_strlen_zero(data)) {</span><br><span>                 ast_log(LOG_ERROR, "Originate() requires arguments\n");</span><br><span>@@ -257,6 +257,13 @@</span><br><span>             goto return_cleanup;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (ast_test_flag64(&opts, OPT_CODECS)) {</span><br><span style="color: hsl(120, 100%, 40%);">+         if (!ast_strlen_zero(opt_args[OPT_ARG_CODECS])) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     ast_format_cap_remove_by_type(capabilities, AST_MEDIA_TYPE_UNKNOWN);</span><br><span style="color: hsl(120, 100%, 40%);">+                  ast_format_cap_update_by_allow_disallow(capabilities, opt_args[OPT_ARG_CODECS], 1);</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (ast_test_flag64(&opts, OPT_CALLER_NUM)) {</span><br><span>            if (!ast_strlen_zero(opt_args[OPT_ARG_CALLER_NUM])) {</span><br><span>                        cnum = opt_args[OPT_ARG_CALLER_NUM];</span><br><span>@@ -318,7 +325,7 @@</span><br><span>           ast_debug(1, "Originating call to '%s/%s' and connecting them to extension %s,%s,%d\n",</span><br><span>                            chantech, chandata, args.arg1, exten, priority);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            res = ast_pbx_outgoing_exten_predial(chantech, cap_slin, chandata,</span><br><span style="color: hsl(120, 100%, 40%);">+            res = ast_pbx_outgoing_exten_predial(chantech, capabilities, chandata,</span><br><span>                               timeout * 1000, args.arg1, exten, priority, &outgoing_status,</span><br><span>                            ast_test_flag64(&opts, OPT_ASYNC) ? AST_OUTGOING_NO_WAIT : AST_OUTGOING_WAIT,</span><br><span>                            cid_num, cid_name, vars, NULL, NULL, 0, NULL,</span><br><span>@@ -329,7 +336,7 @@</span><br><span>          ast_debug(1, "Originating call to '%s/%s' and connecting them to %s(%s)\n",</span><br><span>                                chantech, chandata, args.arg1, S_OR(args.arg2, ""));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-              res = ast_pbx_outgoing_app_predial(chantech, cap_slin, chandata,</span><br><span style="color: hsl(120, 100%, 40%);">+              res = ast_pbx_outgoing_app_predial(chantech, capabilities, chandata,</span><br><span>                                 timeout * 1000, args.arg1, args.arg2, &outgoing_status,</span><br><span>                          ast_test_flag64(&opts, OPT_ASYNC) ? AST_OUTGOING_NO_WAIT : AST_OUTGOING_WAIT,</span><br><span>                            cid_num, cid_name, vars, NULL, NULL, NULL,</span><br><span>@@ -380,7 +387,7 @@</span><br><span>     if (vars) {</span><br><span>          ast_variables_destroy(vars);</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-       ao2_cleanup(cap_slin);</span><br><span style="color: hsl(120, 100%, 40%);">+        ao2_cleanup(capabilities);</span><br><span>   ast_autoservice_stop(chan);</span><br><span> </span><br><span>      return continue_in_dialplan ? 0 : -1;</span><br><span>diff --git a/doc/CHANGES-staging/app_originate_codecs.txt b/doc/CHANGES-staging/app_originate_codecs.txt</span><br><span>new file mode 100644</span><br><span>index 0000000..a0f52b1</span><br><span>--- /dev/null</span><br><span>+++ b/doc/CHANGES-staging/app_originate_codecs.txt</span><br><span>@@ -0,0 +1,6 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Subject: app_originate</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Codecs can now be specified for dialplan-originated</span><br><span style="color: hsl(120, 100%, 40%);">+calls, as with call files and the manager action.</span><br><span style="color: hsl(120, 100%, 40%);">+By default, only the slin codec is now used, instead</span><br><span style="color: hsl(120, 100%, 40%);">+of all the slin* codecs.</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.asterisk.org/c/asterisk/+/16331">change 16331</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/+/16331"/><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: I96a1aeb83d54b635b7a51e1b4680f03791622883 </div>
<div style="display:none"> Gerrit-Change-Number: 16331 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: N A <mail@interlinked.x10host.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>