]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
ari: Remove support for specifying channel vars during origination.
authorDavid M. Lee <dlee@digium.com>
Fri, 20 Dec 2013 22:04:15 +0000 (22:04 +0000)
committerDavid M. Lee <dlee@digium.com>
Fri, 20 Dec 2013 22:04:15 +0000 (22:04 +0000)
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

res/ari/resource_channels.c
res/ari/resource_channels.h
res/res_ari_channels.c
rest-api/api-docs/applications.json
rest-api/api-docs/channels.json

index 667ea73f067be88a40d51a5c1b7185442b225eba..c6900f1b21a2d8d049e93828dd49dcf79010b8ab 100644 (file)
@@ -687,43 +687,6 @@ void ast_ari_channels_list(struct ast_variable *headers,
        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)
@@ -813,11 +776,6 @@ void ast_ari_channels_originate(struct ast_variable *headers,
                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);
 
index 36c7339ba19fb9abce1220cf46aa6e12b4fd2a0c..49ab8eb3425f1a0174d2742d997551a4e24b15ba 100644 (file)
@@ -68,8 +68,6 @@ struct ast_ari_channels_originate_args {
        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).
index 6b741b04c16b6d06ec78f231b5db24e9544c860b..40ad32b2b895f8ecf958a95808052f54784d27f3 100644 (file)
@@ -117,6 +117,7 @@ static void ast_ari_channels_originate_cb(
        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;
@@ -164,7 +165,39 @@ static void ast_ari_channels_originate_cb(
                        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;
index e0a1cfaa6d58d9c8f41b6a2e28be2da0412f2dff..32ee3c458213d58a6c7bc8498463f88bfc77e820 100644 (file)
                                                },
                                                {
                                                        "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,
index d5094f3cca747ecc80cc74f9f52cb64dbceed1d2..3b14c8fbb3dc2121494335c4f53406f4fe80b060 100644 (file)
                                                        "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": [