Author: file Date: Fri Aug 29 15:22:33 2014 New Revision: 422400 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=422400 Log: Add the ability to mark an origination as immediate in ARI.
Immediate originations immediately execute the specified application or dialplan extension. Modified: team/file/ari-dial-immediate/apps/app_originate.c team/file/ari-dial-immediate/apps/app_page.c team/file/ari-dial-immediate/funcs/func_periodic_hook.c team/file/ari-dial-immediate/include/asterisk/dial.h team/file/ari-dial-immediate/include/asterisk/pbx.h team/file/ari-dial-immediate/main/bridge_basic.c team/file/ari-dial-immediate/main/dial.c team/file/ari-dial-immediate/main/manager.c team/file/ari-dial-immediate/main/pbx.c team/file/ari-dial-immediate/pbx/pbx_spool.c team/file/ari-dial-immediate/res/ari/resource_channels.c team/file/ari-dial-immediate/res/ari/resource_channels.h team/file/ari-dial-immediate/res/res_ari_channels.c team/file/ari-dial-immediate/res/res_calendar.c team/file/ari-dial-immediate/res/res_clioriginate.c team/file/ari-dial-immediate/res/stasis/control.c team/file/ari-dial-immediate/rest-api/api-docs/channels.json Modified: team/file/ari-dial-immediate/apps/app_originate.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/apps/app_originate.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/apps/app_originate.c (original) +++ team/file/ari-dial-immediate/apps/app_originate.c Fri Aug 29 15:22:33 2014 @@ -179,14 +179,14 @@ ast_pbx_outgoing_exten(chantech, cap_slin, chandata, timeout * 1000, args.arg1, exten, priority, &outgoing_status, 1, NULL, - NULL, NULL, NULL, NULL, 0, NULL); + NULL, NULL, NULL, NULL, 0, NULL, 0); } else if (!strcasecmp(args.type, "app")) { ast_debug(1, "Originating call to '%s/%s' and connecting them to %s(%s)\n", chantech, chandata, args.arg1, S_OR(args.arg2, "")); ast_pbx_outgoing_app(chantech, cap_slin, chandata, timeout * 1000, args.arg1, args.arg2, &outgoing_status, 1, NULL, - NULL, NULL, NULL, NULL, NULL); + NULL, NULL, NULL, NULL, NULL, 0); } else { ast_log(LOG_ERROR, "Incorrect type, it should be 'exten' or 'app': %s\n", args.type); Modified: team/file/ari-dial-immediate/apps/app_page.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/apps/app_page.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/apps/app_page.c (original) +++ team/file/ari-dial-immediate/apps/app_page.c Fri Aug 29 15:22:33 2014 @@ -377,7 +377,7 @@ ast_dial_set_user_data(dial, &options); /* Run this dial in async mode */ - ast_dial_run(dial, chan, 1); + ast_dial_run(dial, chan, 1, 0); /* Put in our dialing array */ dial_list[pos++] = dial; Modified: team/file/ari-dial-immediate/funcs/func_periodic_hook.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/funcs/func_periodic_hook.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/funcs/func_periodic_hook.c (original) +++ team/file/ari-dial-immediate/funcs/func_periodic_hook.c Fri Aug 29 15:22:33 2014 @@ -184,7 +184,7 @@ ast_pbx_outgoing_exten("Local", NULL, full_exten_name, 60, arg->context, arg->exten, 1, NULL, 0, NULL, NULL, &chan_name_var, - NULL, NULL, 1, NULL); + NULL, NULL, 1, NULL, 0); hook_thread_arg_destroy(arg); Modified: team/file/ari-dial-immediate/include/asterisk/dial.h URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/include/asterisk/dial.h?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/include/asterisk/dial.h (original) +++ team/file/ari-dial-immediate/include/asterisk/dial.h Fri Aug 29 15:22:33 2014 @@ -87,7 +87,7 @@ * \note Dials channels in a dial structure. * \return Returns dial result code. (TRYING/INVALID/FAILED/ANSWERED/TIMEOUT/UNANSWERED). */ -enum ast_dial_result ast_dial_run(struct ast_dial *dial, struct ast_channel *chan, int async); +enum ast_dial_result ast_dial_run(struct ast_dial *dial, struct ast_channel *chan, int async, int immediate); /*! \brief Return channel that answered * \note Returns the Asterisk channel that answered Modified: team/file/ari-dial-immediate/include/asterisk/pbx.h URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/include/asterisk/pbx.h?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/include/asterisk/pbx.h (original) +++ team/file/ari-dial-immediate/include/asterisk/pbx.h Fri Aug 29 15:22:33 2014 @@ -1129,6 +1129,7 @@ * and reference bumped. * \param early_media If non-zero the channel "answers" when progress is indicated. * \param assignedids Optional. The uniqueid(s) to assign the channel(s) that are created. + * \param immediate Send the channel to the extension immediately without answering. * * \retval 0 on success * \retval -1 on failure @@ -1137,7 +1138,7 @@ int timeout, const char *context, const char *exten, int priority, int *reason, int synchronous, const char *cid_num, const char *cid_name, struct ast_variable *vars, const char *account, struct ast_channel **locked_channel, int early_media, - const struct ast_assigned_ids *assignedids); + const struct ast_assigned_ids *assignedids, int immediate); /*! * \brief Synchronously or asynchronously make an outbound call and execute an @@ -1164,6 +1165,7 @@ * is returned. Otherwise it is set to NULL. This is returned both locked * and reference bumped. * \param assignedids Optional. The uniqueid(s) to assign the channel(s) that are created. + * \param immediate Send the channel to the application immediately without answering. * * \retval 0 on success * \retval -1 on failure @@ -1172,7 +1174,7 @@ int timeout, const char *app, const char *appdata, int *reason, int synchronous, const char *cid_num, const char *cid_name, struct ast_variable *vars, const char *account, struct ast_channel **locked_channel, - const struct ast_assigned_ids *assignedids); + const struct ast_assigned_ids *assignedids, int immediate); /*! * \brief Evaluate a condition Modified: team/file/ari-dial-immediate/main/bridge_basic.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/main/bridge_basic.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/main/bridge_basic.c (original) +++ team/file/ari-dial-immediate/main/bridge_basic.c Fri Aug 29 15:22:33 2014 @@ -2407,7 +2407,7 @@ ao2_ref(props, +1); ast_dial_set_user_data(props->dial, props); - if (ast_dial_run(props->dial, NULL, 1) == AST_DIAL_RESULT_FAILED) { + if (ast_dial_run(props->dial, NULL, 1, 0) == AST_DIAL_RESULT_FAILED) { ao2_ref(props, -1); return -1; } Modified: team/file/ari-dial-immediate/main/dial.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/main/dial.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/main/dial.c (original) +++ team/file/ari-dial-immediate/main/dial.c Fri Aug 29 15:22:33 2014 @@ -905,7 +905,7 @@ * \note Dials channels in a dial structure. * \return Returns dial result code. (TRYING/INVALID/FAILED/ANSWERED/TIMEOUT/UNANSWERED). */ -enum ast_dial_result ast_dial_run(struct ast_dial *dial, struct ast_channel *chan, int async) +enum ast_dial_result ast_dial_run(struct ast_dial *dial, struct ast_channel *chan, int async, int immediate) { enum ast_dial_result res = AST_DIAL_RESULT_TRYING; @@ -936,6 +936,9 @@ ast_dial_hangup(dial); res = AST_DIAL_RESULT_FAILED; } + } else if (immediate) { + set_state(dial, AST_DIAL_RESULT_ANSWERED); + res = AST_DIAL_RESULT_ANSWERED; } else { res = monitor_dial(dial, chan); } Modified: team/file/ari-dial-immediate/main/manager.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/main/manager.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/main/manager.c (original) +++ team/file/ari-dial-immediate/main/manager.c Fri Aug 29 15:22:33 2014 @@ -4572,13 +4572,13 @@ in->timeout, in->app, in->appdata, &reason, 1, S_OR(in->cid_num, NULL), S_OR(in->cid_name, NULL), - in->vars, in->account, &chan, &assignedids); + in->vars, in->account, &chan, &assignedids, 0); } else { res = ast_pbx_outgoing_exten(in->tech, in->cap, in->data, in->timeout, in->context, in->exten, in->priority, &reason, 1, S_OR(in->cid_num, NULL), S_OR(in->cid_name, NULL), - in->vars, in->account, &chan, in->early_media, &assignedids); + in->vars, in->account, &chan, in->early_media, &assignedids, 0); } /* Any vars memory was passed to the ast_pbx_outgoing_xxx() calls. */ in->vars = NULL; @@ -5027,11 +5027,11 @@ } } } else if (!ast_strlen_zero(app)) { - res = ast_pbx_outgoing_app(tech, cap, data, to, app, appdata, &reason, 1, l, n, vars, account, NULL, assignedids.uniqueid ? &assignedids : NULL); + res = ast_pbx_outgoing_app(tech, cap, data, to, app, appdata, &reason, 1, l, n, vars, account, NULL, assignedids.uniqueid ? &assignedids : NULL, 0); /* Any vars memory was passed to ast_pbx_outgoing_app(). */ } else { if (exten && context && pi) { - res = ast_pbx_outgoing_exten(tech, cap, data, to, context, exten, pi, &reason, 1, l, n, vars, account, NULL, bridge_early, assignedids.uniqueid ? &assignedids : NULL); + res = ast_pbx_outgoing_exten(tech, cap, data, to, context, exten, pi, &reason, 1, l, n, vars, account, NULL, bridge_early, assignedids.uniqueid ? &assignedids : NULL, 0); /* Any vars memory was passed to ast_pbx_outgoing_exten(). */ } else { astman_send_error(s, m, "Originate with 'Exten' requires 'Context' and 'Priority'"); Modified: team/file/ari-dial-immediate/main/pbx.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/main/pbx.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/main/pbx.c (original) +++ team/file/ari-dial-immediate/main/pbx.c Fri Aug 29 15:22:33 2014 @@ -10186,6 +10186,8 @@ int priority; /*! \brief Result of the dial operation when dialed is set */ int dial_res; + /*! \brief Whether to send the channel to the extension or application immediately */ + int immediate; /*! \brief Set when dialing is completed */ unsigned int dialed:1; /*! \brief Set when execution is completed */ @@ -10213,7 +10215,7 @@ enum ast_dial_result res; /* Notify anyone interested that dialing is complete */ - res = ast_dial_run(outgoing->dial, NULL, 0); + res = ast_dial_run(outgoing->dial, NULL, 0, outgoing->immediate); ao2_lock(outgoing); outgoing->dial_res = res; outgoing->dialed = 1; @@ -10338,7 +10340,7 @@ const char *app, const char *appdata, int *reason, int synchronous, const char *cid_num, const char *cid_name, struct ast_variable *vars, const char *account, struct ast_channel **locked_channel, int early_media, - const struct ast_assigned_ids *assignedids) + const struct ast_assigned_ids *assignedids, int immediate) { RAII_VAR(struct pbx_outgoing *, outgoing, NULL, ao2_cleanup); struct ast_channel *dialed; @@ -10443,6 +10445,8 @@ } } + outgoing->immediate = immediate; + ao2_ref(outgoing, +1); if (ast_pthread_create_detached(&thread, NULL, pbx_outgoing_exec, outgoing)) { ast_log(LOG_WARNING, "Unable to spawn dialing thread for '%s/%s'\n", type, addr); @@ -10499,7 +10503,7 @@ int timeout, const char *context, const char *exten, int priority, int *reason, int synchronous, const char *cid_num, const char *cid_name, struct ast_variable *vars, const char *account, struct ast_channel **locked_channel, int early_media, - const struct ast_assigned_ids *assignedids) + const struct ast_assigned_ids *assignedids, int immediate) { int res; int my_reason; @@ -10514,7 +10518,7 @@ res = pbx_outgoing_attempt(type, cap, addr, timeout, context, exten, priority, NULL, NULL, reason, synchronous, cid_num, cid_name, vars, account, locked_channel, - early_media, assignedids); + early_media, assignedids, immediate); if (res < 0 /* Call failed to get connected for some reason. */ && 1 < synchronous @@ -10553,7 +10557,7 @@ int timeout, const char *app, const char *appdata, int *reason, int synchronous, const char *cid_num, const char *cid_name, struct ast_variable *vars, const char *account, struct ast_channel **locked_channel, - const struct ast_assigned_ids *assignedids) + const struct ast_assigned_ids *assignedids, int immediate) { if (reason) { *reason = 0; @@ -10567,7 +10571,7 @@ return pbx_outgoing_attempt(type, cap, addr, timeout, NULL, NULL, 0, app, appdata, reason, synchronous, cid_num, cid_name, vars, account, locked_channel, 0, - assignedids); + assignedids, immediate); } /* this is the guts of destroying a context -- Modified: team/file/ari-dial-immediate/pbx/pbx_spool.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/pbx/pbx_spool.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/pbx/pbx_spool.c (original) +++ team/file/ari-dial-immediate/pbx/pbx_spool.c Fri Aug 29 15:22:33 2014 @@ -376,14 +376,14 @@ ast_verb(3, "Attempting call on %s/%s for application %s(%s) (Retry %d)\n", o->tech, o->dest, o->app, o->data, o->retries); res = ast_pbx_outgoing_app(o->tech, o->capabilities, o->dest, o->waittime * 1000, o->app, o->data, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, - o->vars, o->account, NULL, NULL); + o->vars, o->account, NULL, NULL, 0); o->vars = NULL; } else { ast_verb(3, "Attempting call on %s/%s for %s@%s:%d (Retry %d)\n", o->tech, o->dest, o->exten, o->context,o->priority, o->retries); res = ast_pbx_outgoing_exten(o->tech, o->capabilities, o->dest, o->waittime * 1000, o->context, o->exten, o->priority, &reason, 2 /* wait to finish */, o->cid_num, o->cid_name, o->vars, o->account, NULL, - ast_test_flag(&o->options, SPOOL_FLAG_EARLY_MEDIA), NULL); + ast_test_flag(&o->options, SPOOL_FLAG_EARLY_MEDIA), NULL, 0); o->vars = NULL; } if (res) { Modified: team/file/ari-dial-immediate/res/ari/resource_channels.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/res/ari/resource_channels.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/res/ari/resource_channels.c (original) +++ team/file/ari-dial-immediate/res/ari/resource_channels.c Fri Aug 29 15:22:33 2014 @@ -734,6 +734,7 @@ struct ast_variable *variables, const char *args_channel_id, const char *args_other_channel_id, + int args_immediate, struct ast_ari_response *response) { char *dialtech; @@ -814,13 +815,13 @@ } /* originate a channel, putting it into an application */ - if (ast_pbx_outgoing_app(dialtech, cap, dialdevice, timeout, app, ast_str_buffer(appdata), NULL, 0, cid_num, cid_name, variables, NULL, &chan, &assignedids)) { + if (ast_pbx_outgoing_app(dialtech, cap, dialdevice, timeout, app, ast_str_buffer(appdata), NULL, 0, cid_num, cid_name, variables, NULL, &chan, &assignedids, args_immediate)) { ast_ari_response_alloc_failed(response); return; } } else if (!ast_strlen_zero(args_extension)) { /* originate a channel, sending it to an extension */ - if (ast_pbx_outgoing_exten(dialtech, cap, dialdevice, timeout, S_OR(args_context, "default"), args_extension, args_priority ? args_priority : 1, NULL, 0, cid_num, cid_name, variables, NULL, &chan, 0, &assignedids)) { + if (ast_pbx_outgoing_exten(dialtech, cap, dialdevice, timeout, S_OR(args_context, "default"), args_extension, args_priority ? args_priority : 1, NULL, 0, cid_num, cid_name, variables, NULL, &chan, 0, &assignedids, args_immediate)) { ast_ari_response_alloc_failed(response); return; } @@ -883,6 +884,7 @@ variables, args->channel_id, args->other_channel_id, + args->immediate, response); } @@ -919,6 +921,7 @@ variables, args->channel_id, args->other_channel_id, + args->immediate, response); } Modified: team/file/ari-dial-immediate/res/ari/resource_channels.h URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/res/ari/resource_channels.h?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/res/ari/resource_channels.h (original) +++ team/file/ari-dial-immediate/res/ari/resource_channels.h Fri Aug 29 15:22:33 2014 @@ -74,6 +74,8 @@ const char *channel_id; /*! The unique id to assign the second channel when using local channels. */ const char *other_channel_id; + /*! Whether to send the originated channel directly to the extension or application without the remote end having answered. */ + int immediate; }; /*! * \brief Body parsing function for /channels. @@ -133,6 +135,8 @@ struct ast_json *variables; /*! The unique id to assign the second channel when using local channels. */ const char *other_channel_id; + /*! Whether to send the originated channel directly to the extension or application without the remote end having answered. */ + int immediate; }; /*! * \brief Body parsing function for /channels/{channelId}. Modified: team/file/ari-dial-immediate/res/res_ari_channels.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/res/res_ari_channels.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/res/res_ari_channels.c (original) +++ team/file/ari-dial-immediate/res/res_ari_channels.c Fri Aug 29 15:22:33 2014 @@ -148,6 +148,10 @@ if (field) { args->other_channel_id = ast_json_string_get(field); } + field = ast_json_object_get(body, "immediate"); + if (field) { + args->immediate = ast_json_is_true(field); + } return 0; } @@ -201,6 +205,9 @@ } else if (strcmp(i->name, "otherChannelId") == 0) { args.other_channel_id = (i->value); + } else + if (strcmp(i->name, "immediate") == 0) { + args.immediate = ast_true(i->value); } else {} } @@ -354,6 +361,10 @@ if (field) { args->other_channel_id = ast_json_string_get(field); } + field = ast_json_object_get(body, "immediate"); + if (field) { + args->immediate = ast_json_is_true(field); + } return 0; } @@ -404,6 +415,9 @@ } else if (strcmp(i->name, "otherChannelId") == 0) { args.other_channel_id = (i->value); + } else + if (strcmp(i->name, "immediate") == 0) { + args.immediate = ast_true(i->value); } else {} } Modified: team/file/ari-dial-immediate/res/res_calendar.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/res/res_calendar.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/res/res_calendar.c (original) +++ team/file/ari-dial-immediate/res/res_calendar.c Fri Aug 29 15:22:33 2014 @@ -817,7 +817,7 @@ } ast_verb(3, "Dialing %s for notification on calendar %s\n", event->owner->notify_channel, event->owner->name); - res = ast_dial_run(dial, chan, 0); + res = ast_dial_run(dial, chan, 0, 0); if (res != AST_DIAL_RESULT_ANSWERED) { ast_verb(3, "Notification call for %s was not completed\n", event->owner->name); Modified: team/file/ari-dial-immediate/res/res_clioriginate.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/res/res_clioriginate.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/res/res_clioriginate.c (original) +++ team/file/ari-dial-immediate/res/res_clioriginate.c Fri Aug 29 15:22:33 2014 @@ -74,7 +74,7 @@ return CLI_FAILURE; } ast_format_cap_append(cap, ast_format_slin, 0); - ast_pbx_outgoing_app(chantech, cap, chandata, TIMEOUT * 1000, app, appdata, &reason, 0, NULL, NULL, NULL, NULL, NULL, NULL); + ast_pbx_outgoing_app(chantech, cap, chandata, TIMEOUT * 1000, app, appdata, &reason, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0); ao2_ref(cap, -1); return CLI_SUCCESS; @@ -118,7 +118,7 @@ return CLI_FAILURE; } ast_format_cap_append(cap, ast_format_slin, 0); - ast_pbx_outgoing_exten(chantech, cap, chandata, TIMEOUT * 1000, context, exten, 1, &reason, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL); + ast_pbx_outgoing_exten(chantech, cap, chandata, TIMEOUT * 1000, context, exten, 1, &reason, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0); ao2_ref(cap, -1); return CLI_SUCCESS; Modified: team/file/ari-dial-immediate/res/stasis/control.c URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/res/stasis/control.c?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/res/stasis/control.c (original) +++ team/file/ari-dial-immediate/res/stasis/control.c Fri Aug 29 15:22:33 2014 @@ -272,89 +272,6 @@ return exec_command_on_condition(control, command_fn, data, data_destructor, NULL); } -struct stasis_app_control_dial_data { - char endpoint[AST_CHANNEL_NAME]; - int timeout; -}; - -static int app_control_dial(struct stasis_app_control *control, - struct ast_channel *chan, void *data) -{ - RAII_VAR(struct ast_dial *, dial, ast_dial_create(), ast_dial_destroy); - struct stasis_app_control_dial_data *dial_data = data; - enum ast_dial_result res; - char *tech, *resource; - struct ast_channel *new_chan; - RAII_VAR(struct ast_bridge *, bridge, NULL, ao2_cleanup); - - tech = dial_data->endpoint; - if (!(resource = strchr(tech, '/'))) { - return -1; - } - *resource++ = '\0'; - - if (!dial) { - ast_log(LOG_ERROR, "Failed to create dialing structure.\n"); - return -1; - } - - if (ast_dial_append(dial, tech, resource, NULL) < 0) { - ast_log(LOG_ERROR, "Failed to add %s/%s to dialing structure.\n", tech, resource); - return -1; - } - - ast_dial_set_global_timeout(dial, dial_data->timeout); - - res = ast_dial_run(dial, NULL, 0); - if (res != AST_DIAL_RESULT_ANSWERED || !(new_chan = ast_dial_answered_steal(dial))) { - return -1; - } - - if (!(bridge = ast_bridge_basic_new())) { - ast_log(LOG_ERROR, "Failed to create basic bridge.\n"); - return -1; - } - - if (ast_bridge_impart(bridge, new_chan, NULL, NULL, - AST_BRIDGE_IMPART_CHAN_INDEPENDENT)) { - ast_hangup(new_chan); - } else { - control_add_channel_to_bridge(control, chan, bridge); - } - - return 0; -} - -int stasis_app_control_dial(struct stasis_app_control *control, const char *endpoint, const char *exten, const char *context, - int timeout) -{ - struct stasis_app_control_dial_data *dial_data; - - if (!(dial_data = ast_calloc(1, sizeof(*dial_data)))) { - return -1; - } - - if (!ast_strlen_zero(endpoint)) { - ast_copy_string(dial_data->endpoint, endpoint, sizeof(dial_data->endpoint)); - } else if (!ast_strlen_zero(exten) && !ast_strlen_zero(context)) { - snprintf(dial_data->endpoint, sizeof(dial_data->endpoint), "Local/%s@%s", exten, context); - } else { - return -1; - } - - if (timeout > 0) { - dial_data->timeout = timeout * 1000; - } else if (timeout == -1) { - dial_data->timeout = -1; - } else { - dial_data->timeout = 30000; - } - - stasis_app_send_command_async(control, app_control_dial, dial_data, ast_free_ptr); - - return 0; -} - int stasis_app_control_add_role(struct stasis_app_control *control, const char *role) { return ast_channel_add_bridge_role(control->channel, role); Modified: team/file/ari-dial-immediate/rest-api/api-docs/channels.json URL: http://svnview.digium.com/svn/asterisk/team/file/ari-dial-immediate/rest-api/api-docs/channels.json?view=diff&rev=422400&r1=422399&r2=422400 ============================================================================== --- team/file/ari-dial-immediate/rest-api/api-docs/channels.json (original) +++ team/file/ari-dial-immediate/rest-api/api-docs/channels.json Fri Aug 29 15:22:33 2014 @@ -112,6 +112,15 @@ "required": false, "allowMultiple": false, "dataType": "string" + }, + { + "name": "immediate", + "description": "Whether to send the originated channel directly to the extension or application without the remote end having answered.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false } ], "errorResponses": [ @@ -244,6 +253,15 @@ "required": false, "allowMultiple": false, "dataType": "string" + }, + { + "name": "immediate", + "description": "Whether to send the originated channel directly to the extension or application without the remote end having answered.", + "paramType": "query", + "required": false, + "allowMultiple": false, + "dataType": "boolean", + "defaultValue": false } ], "errorResponses": [ -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits