<argument name="argN" />
</argument>
</option>
+ <option name="C">
+ <para>Comma-separated list of codecs to use for this call.
+ Default is <literal>slin</literal>.</para>
+ </option>
<option name="c">
<para>The caller ID number to use for the called channel. Default is
the current channel's Caller ID number.</para>
</parameter>
</syntax>
<description>
- <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>
+ <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>
<para>This application sets the following channel variable before exiting:</para>
<variablelist>
<variable name="ORIGINATE_STATUS">
OPT_ASYNC = (1 << 2),
OPT_CALLER_NUM = (1 << 3),
OPT_CALLER_NAME = (1 << 4),
- OPT_VARIABLES = (1 << 5),
+ OPT_CODECS = (1 << 5),
+ OPT_VARIABLES = (1 << 6),
};
enum {
OPT_ARG_PREDIAL_CALLER,
OPT_ARG_CALLER_NUM,
OPT_ARG_CALLER_NAME,
+ OPT_ARG_CODECS,
OPT_ARG_VARIABLES,
/* note: this entry _MUST_ be the last one in the enum */
OPT_ARG_ARRAY_SIZE,
AST_APP_OPTION('a', OPT_ASYNC),
AST_APP_OPTION_ARG('b', OPT_PREDIAL_CALLEE, OPT_ARG_PREDIAL_CALLEE),
AST_APP_OPTION_ARG('B', OPT_PREDIAL_CALLER, OPT_ARG_PREDIAL_CALLER),
+ AST_APP_OPTION_ARG('C', OPT_CODECS, OPT_ARG_CODECS),
AST_APP_OPTION_ARG('c', OPT_CALLER_NUM, OPT_ARG_CALLER_NUM),
AST_APP_OPTION_ARG('n', OPT_CALLER_NAME, OPT_ARG_CALLER_NAME),
AST_APP_OPTION_ARG('v', OPT_VARIABLES, OPT_ARG_VARIABLES),
char *opt_args[OPT_ARG_ARRAY_SIZE];
char *predial_callee = NULL;
char *parse, *cnum = NULL, *cname = NULL;
-
+
struct ast_variable *vars = NULL;
char *chantech, *chandata;
int res = -1;
int outgoing_status = 0;
unsigned int timeout = 30;
static const char default_exten[] = "s";
- struct ast_format_cap *cap_slin = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
+ struct ast_format_cap *capabilities;
+ capabilities = ast_format_cap_alloc(AST_FORMAT_CAP_FLAG_DEFAULT);
ast_autoservice_start(chan);
- if (!cap_slin) {
+ if (!capabilities) {
goto return_cleanup;
}
- ast_format_cap_append(cap_slin, ast_format_slin, 0);
- ast_format_cap_append(cap_slin, ast_format_slin12, 0);
- ast_format_cap_append(cap_slin, ast_format_slin16, 0);
- ast_format_cap_append(cap_slin, ast_format_slin24, 0);
- ast_format_cap_append(cap_slin, ast_format_slin32, 0);
- ast_format_cap_append(cap_slin, ast_format_slin44, 0);
- ast_format_cap_append(cap_slin, ast_format_slin48, 0);
- ast_format_cap_append(cap_slin, ast_format_slin96, 0);
- ast_format_cap_append(cap_slin, ast_format_slin192, 0);
+ ast_format_cap_append(capabilities, ast_format_slin, 0);
if (ast_strlen_zero(data)) {
ast_log(LOG_ERROR, "Originate() requires arguments\n");
goto return_cleanup;
}
+ if (ast_test_flag64(&opts, OPT_CODECS)) {
+ if (!ast_strlen_zero(opt_args[OPT_ARG_CODECS])) {
+ ast_format_cap_remove_by_type(capabilities, AST_MEDIA_TYPE_UNKNOWN);
+ ast_format_cap_update_by_allow_disallow(capabilities, opt_args[OPT_ARG_CODECS], 1);
+ }
+ }
+
if (ast_test_flag64(&opts, OPT_CALLER_NUM)) {
if (!ast_strlen_zero(opt_args[OPT_ARG_CALLER_NUM])) {
cnum = opt_args[OPT_ARG_CALLER_NUM];
ast_debug(1, "Originating call to '%s/%s' and connecting them to extension %s,%s,%d\n",
chantech, chandata, args.arg1, exten, priority);
- res = ast_pbx_outgoing_exten_predial(chantech, cap_slin, chandata,
+ res = ast_pbx_outgoing_exten_predial(chantech, capabilities, chandata,
timeout * 1000, args.arg1, exten, priority, &outgoing_status,
ast_test_flag64(&opts, OPT_ASYNC) ? AST_OUTGOING_NO_WAIT : AST_OUTGOING_WAIT,
cid_num, cid_name, vars, NULL, NULL, 0, NULL,
ast_debug(1, "Originating call to '%s/%s' and connecting them to %s(%s)\n",
chantech, chandata, args.arg1, S_OR(args.arg2, ""));
- res = ast_pbx_outgoing_app_predial(chantech, cap_slin, chandata,
+ res = ast_pbx_outgoing_app_predial(chantech, capabilities, chandata,
timeout * 1000, args.arg1, args.arg2, &outgoing_status,
ast_test_flag64(&opts, OPT_ASYNC) ? AST_OUTGOING_NO_WAIT : AST_OUTGOING_WAIT,
cid_num, cid_name, vars, NULL, NULL, NULL,
if (vars) {
ast_variables_destroy(vars);
}
- ao2_cleanup(cap_slin);
+ ao2_cleanup(capabilities);
ast_autoservice_stop(chan);
return continue_in_dialplan ? 0 : -1;