From f726304283251f811b4d73e6d958baac45e37efa Mon Sep 17 00:00:00 2001
From: Joshua Colp <jcolp@digium.com>
Date: Sat, 21 Feb 2015 20:47:19 +0000
Subject: [PATCH] res_ari_channels: Return a 404 response when a requested
 channel variable does not exist.

This change makes it so that if a channel variable is requested and it does not exist
a 404 response will be returned instead of an allocation failed response. This makes
it easier to debug and figure out what is going on for a user.

ASTERISK-24677 #close
Reported by: Joshua Colp


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@432154 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 res/ari/resource_channels.c     | 9 ++++++++-
 res/res_ari_channels.c          | 2 +-
 rest-api/api-docs/channels.json | 2 +-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/res/ari/resource_channels.c b/res/ari/resource_channels.c
index 67498af9f4..edd319d371 100644
--- a/res/ari/resource_channels.c
+++ b/res/ari/resource_channels.c
@@ -1242,6 +1242,11 @@ void ast_ari_channels_get_channel_var(struct ast_variable *headers,
 
 	ast_assert(response != NULL);
 
+	if (!value) {
+		ast_ari_response_alloc_failed(response);
+		return;
+	}
+
 	if (ast_strlen_zero(args->variable)) {
 		ast_ari_response_error(
 			response, 400, "Bad Request",
@@ -1280,7 +1285,9 @@ void ast_ari_channels_get_channel_var(struct ast_variable *headers,
 		}
 	} else {
 		if (!ast_str_retrieve_variable(&value, 0, channel, NULL, args->variable)) {
-			ast_ari_response_alloc_failed(response);
+			ast_ari_response_error(
+				response, 404, "Variable Not Found",
+				"Provided variable was not found");
 			return;
 		}
 	}
diff --git a/res/res_ari_channels.c b/res/res_ari_channels.c
index a088705ad8..0d1334eb04 100644
--- a/res/res_ari_channels.c
+++ b/res/res_ari_channels.c
@@ -2173,7 +2173,7 @@ static void ast_ari_channels_get_channel_var_cb(
 	case 500: /* Internal Server Error */
 	case 501: /* Not Implemented */
 	case 400: /* Missing variable parameter. */
-	case 404: /* Channel not found */
+	case 404: /* Channel or variable not found */
 	case 409: /* Channel not in a Stasis application */
 		is_valid = 1;
 		break;
diff --git a/rest-api/api-docs/channels.json b/rest-api/api-docs/channels.json
index 9a0a4f356d..9bcfda9786 100644
--- a/rest-api/api-docs/channels.json
+++ b/rest-api/api-docs/channels.json
@@ -1199,7 +1199,7 @@
 						},
 						{
 							"code": 404,
-							"reason": "Channel not found"
+							"reason": "Channel or variable not found"
 						},
 						{
 							"code": 409,
-- 
GitLab