void ast_ari_channels_continue_in_dialplan( struct ast_variable *headers, struct ast_ari_channels_continue_in_dialplan_args *args, struct ast_ari_response *response) { RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup); ast_assert(response != NULL); control = find_control(response, args->channel_id); if (control == NULL) { return; } if (stasis_app_control_continue(control, args->context, args->extension, args->priority)) { ast_ari_response_alloc_failed(response); return; } ast_ari_response_no_content(response); }
void ast_ari_channels_continue_in_dialplan( struct ast_variable *headers, struct ast_ari_channels_continue_in_dialplan_args *args, struct ast_ari_response *response) { RAII_VAR(struct stasis_app_control *, control, NULL, ao2_cleanup); RAII_VAR(struct ast_channel_snapshot *, snapshot, NULL, ao2_cleanup); int ipri; const char *context; const char *exten; ast_assert(response != NULL); control = find_control(response, args->channel_id); if (control == NULL) { return; } snapshot = stasis_app_control_get_snapshot(control); if (!snapshot) { return; } if (ast_strlen_zero(args->context)) { context = snapshot->context; exten = S_OR(args->extension, snapshot->exten); } else { context = args->context; exten = S_OR(args->extension, "s"); } if (!ast_strlen_zero(args->label)) { /* A label was provided in the request, use that */ if (sscanf(args->label, "%30d", &ipri) != 1) { ipri = ast_findlabel_extension(NULL, context, exten, args->label, NULL); if (ipri == -1) { ast_log(AST_LOG_ERROR, "Requested label: %s can not be found in context: %s\n", args->label, context); ast_ari_response_error(response, 404, "Not Found", "Requested label can not be found"); return; } } else { ast_debug(3, "Numeric value provided for label, jumping to that priority\n"); } if (ipri == 0) { ast_log(AST_LOG_ERROR, "Invalid priority label '%s' specified for extension %s in context: %s\n", args->label, exten, context); ast_ari_response_error(response, 400, "Bad Request", "Requested priority is illegal"); return; } } else if (args->priority) { /* No label provided, use provided priority */ ipri = args->priority; } else if (ast_strlen_zero(args->context) && ast_strlen_zero(args->extension)) { /* Special case. No exten, context, or priority provided, then move on to the next priority */ ipri = snapshot->priority + 1; } else { ipri = 1; } if (stasis_app_control_continue(control, context, exten, ipri)) { ast_ari_response_alloc_failed(response); return; } ast_ari_response_no_content(response); }