When we added support for specifying channel variables for an
origination, we didn't consider how that would interact with another
feature, namely specifying request parameters in a JSON request body.
The method of specifying channel variables (as a flat JSON object passed
in the JSON body) interferes with parsing parameters out of the request
body.
Unfortunately, fixing this would be a backward incompatible change. In
the interest of keeping the API sane and keeping our release schedule,
we're dropping the feature for specifying channel variables in the
origination request.
We will bring the feature back soon, as a backward compatible addition
to the API.
(closes issue ASTERISK-23051)
Review: https://reviewboard.asterisk.org/r/3088
........
Merged revisions 404509 from http://svn.asterisk.org/svn/asterisk/branches/12
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@404512
65c4cc65-6c06-0410-ace0-
fbb531ad65f3
ast_ari_response_ok(response, ast_json_ref(json));
}
-static int ari_channels_set_channel_var(struct ast_channel *chan,
- const char *variable, const char *value, struct ast_ari_response *response)
-{
- if (pbx_builtin_setvar_helper(chan, variable, value)) {
- ast_ari_response_error(
- response, 400, "Bad Request",
- "Unable to set channel variable %s=%s", variable, value);
- return -1;
- }
-
- return 0;
-}
-
-static int ari_channels_set_channel_vars(struct ast_channel *chan,
- struct ast_json *variables, struct ast_ari_response *response)
-{
- struct ast_json_iter *i;
-
- if (!variables) {
- /* nothing to do */
- return 0;
- }
-
- for (i = ast_json_object_iter(variables); i;
- i = ast_json_object_iter_next(variables, i)) {
- if (ari_channels_set_channel_var(
- chan, ast_json_object_iter_key(i),
- ast_json_string_get(ast_json_object_iter_value(i)),
- response)) {
- /* response filled in by called function */
- return -1;
- }
- }
-
- return 0;
-}
-
void ast_ari_channels_originate(struct ast_variable *headers,
struct ast_ari_channels_originate_args *args,
struct ast_ari_response *response)
return;
}
- if (ari_channels_set_channel_vars(chan, args->variables, response)) {
- /* response filled in by called function */
- return;
- }
-
snapshot = ast_channel_snapshot_create(chan);
ast_channel_unlock(chan);
const char *caller_id;
/*! \brief Timeout (in seconds) before giving up dialing, or -1 for no timeout. */
int timeout;
- /*! \brief Variables to be set on the channel. */
- struct ast_json *variables;
};
/*!
* \brief Create a new channel (originate).
struct ast_ari_channels_originate_args args = {};
struct ast_variable *i;
RAII_VAR(struct ast_json *, body, NULL, ast_json_unref);
+ struct ast_json *field;
#if defined(AST_DEVMODE)
int is_valid;
int code;
goto fin;
}
}
- args.variables = ast_json_ref(body);
+ /* Parse query parameters out of it */
+ field = ast_json_object_get(body, "endpoint");
+ if (field) {
+ args.endpoint = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "extension");
+ if (field) {
+ args.extension = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "context");
+ if (field) {
+ args.context = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "priority");
+ if (field) {
+ args.priority = ast_json_integer_get(field);
+ }
+ field = ast_json_object_get(body, "app");
+ if (field) {
+ args.app = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "appArgs");
+ if (field) {
+ args.app_args = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "callerId");
+ if (field) {
+ args.caller_id = ast_json_string_get(field);
+ }
+ field = ast_json_object_get(body, "timeout");
+ if (field) {
+ args.timeout = ast_json_integer_get(field);
+ }
ast_ari_channels_originate(headers, &args, response);
#if defined(AST_DEVMODE)
code = response->response_code;
},
{
"name": "eventSource",
- "description": "URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}/{resource}, device_state:{deviceName}",
+ "description": "URI for event source (channel:{channelId}, bridge:{bridgeId}, endpoint:{tech}/{resource}, deviceState:{deviceName}",
"paramType": "query",
"required": true,
"allowMultiple": true,
"allowMultiple": false,
"dataType": "int",
"defaultValue": 30
- },
- {
- "name": "variables",
- "description": "Variables to be set on the channel.",
- "paramType": "body",
- "required": false,
- "allowMultiple": false,
- "dataType": "containers"
}
],
"errorResponses": [