From 40a7f68e4ba631515809b9d838e00ae3fc0b5f08 Mon Sep 17 00:00:00 2001
From: "David M. Lee" <dlee@digium.com>
Date: Fri, 20 Dec 2013 22:04:15 +0000
Subject: [PATCH] ari: Remove support for specifying channel vars during
 origination.

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         | 42 -----------------------------
 res/ari/resource_channels.h         |  2 --
 res/res_ari_channels.c              | 35 +++++++++++++++++++++++-
 rest-api/api-docs/applications.json |  2 +-
 rest-api/api-docs/channels.json     |  8 ------
 5 files changed, 35 insertions(+), 54 deletions(-)

diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c
index 667ea73f06..c6900f1b21 100644
--- a/res/ari/resource_channels.c
+++ b/res/ari/resource_channels.c
@@ -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);
 
diff --git a/res/ari/resource_channels.h b/res/ari/resource_channels.h
index 36c7339ba1..49ab8eb342 100644
--- a/res/ari/resource_channels.h
+++ b/res/ari/resource_channels.h
@@ -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).
diff --git a/res/res_ari_channels.c b/res/res_ari_channels.c
index 6b741b04c1..40ad32b2b8 100644
--- a/res/res_ari_channels.c
+++ b/res/res_ari_channels.c
@@ -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;
diff --git a/rest-api/api-docs/applications.json b/rest-api/api-docs/applications.json
index e0a1cfaa6d..32ee3c4582 100644
--- a/rest-api/api-docs/applications.json
+++ b/rest-api/api-docs/applications.json
@@ -107,7 +107,7 @@
 						},
 						{
 							"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,
diff --git a/rest-api/api-docs/channels.json b/rest-api/api-docs/channels.json
index d5094f3cca..3b14c8fbb3 100644
--- a/rest-api/api-docs/channels.json
+++ b/rest-api/api-docs/channels.json
@@ -88,14 +88,6 @@
 							"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": [
-- 
GitLab