[svn-commits] dlee: branch dlee/allow-multiple r395449 - in /team/dlee/allow-multiple: res/...

SVN commits to the Digium repositories svn-commits at lists.digium.com
Thu Jul 25 14:45:35 CDT 2013


Author: dlee
Date: Thu Jul 25 14:45:34 2013
New Revision: 395449

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=395449
Log:
Report allowMultiple failures

Modified:
    team/dlee/allow-multiple/res/res_stasis_http_asterisk.c
    team/dlee/allow-multiple/res/res_stasis_http_bridges.c
    team/dlee/allow-multiple/res/res_stasis_http_channels.c
    team/dlee/allow-multiple/res/res_stasis_http_endpoints.c
    team/dlee/allow-multiple/res/res_stasis_http_events.c
    team/dlee/allow-multiple/res/res_stasis_http_playback.c
    team/dlee/allow-multiple/res/res_stasis_http_recordings.c
    team/dlee/allow-multiple/res/res_stasis_http_sounds.c
    team/dlee/allow-multiple/rest-api-templates/param_cleanup.mustache
    team/dlee/allow-multiple/rest-api-templates/param_parsing.mustache
    team/dlee/allow-multiple/rest-api-templates/res_stasis_http_resource.c.mustache

Modified: team/dlee/allow-multiple/res/res_stasis_http_asterisk.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_asterisk.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_asterisk.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_asterisk.c Thu Jul 25 14:45:34 2013
@@ -62,13 +62,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_asterisk_info_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_get_asterisk_info_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "only") == 0) {
@@ -78,27 +77,28 @@
 
 			args.only_parse = ast_strdup(i->value);
 			if (!args.only_parse) {
-				ast_log(LOG_ERROR, "OOM parsing only\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			args.only_count = ast_app_separate_args(
 				args.only_parse, ',', vals, ARRAY_LEN(vals));
 			if (args.only_count == 0) {
-				ast_log(LOG_ERROR, "Error parsing only\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			if (args.only_count >= MAX_VALS) {
-				ast_log(LOG_ERROR, "Too many values for only\n");
-				args.only_count = 0;
-				continue;
+				stasis_http_response_error(response, 400,
+					"Bad Request",
+					"Too many values for only");
+				goto fin;
 			}
 
 			args.only = ast_malloc(sizeof(*args.only) * args.only_count);
 			if (!args.only) {
-				ast_log(LOG_ERROR, "OOM parsing only\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			for (j = 0; j < args.only_count; ++j) {
@@ -109,8 +109,6 @@
 	}
 	stasis_http_get_asterisk_info(headers, &args, response);
 
-	ast_free(args.only_parse);
-	ast_free(args.only);
 #if defined(AST_DEVMODE)
 	code = response->response_code;
 
@@ -138,6 +136,11 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	ast_free(args.only_parse);
+	ast_free(args.only);
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /asterisk/variable.
@@ -150,13 +153,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_global_var_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_get_global_var_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "variable") == 0) {
@@ -193,6 +195,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /asterisk/variable.
@@ -205,13 +210,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_set_global_var_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_set_global_var_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "variable") == 0) {
@@ -251,6 +255,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 
 /*! \brief REST handler for /api-docs/asterisk.{format} */

Modified: team/dlee/allow-multiple/res/res_stasis_http_bridges.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_bridges.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_bridges.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_bridges.c Thu Jul 25 14:45:34 2013
@@ -62,12 +62,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_bridges_args args = {};
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
 
-	struct ast_get_bridges_args args = {};
 	stasis_http_get_bridges(headers, &args, response);
 
 #if defined(AST_DEVMODE)
@@ -97,6 +97,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges.
@@ -109,13 +112,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_new_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_new_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "type") == 0) {
@@ -152,6 +154,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges/{bridgeId}.
@@ -164,13 +169,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_get_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "bridgeId") == 0) {
@@ -208,6 +212,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges/{bridgeId}.
@@ -220,13 +227,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_delete_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_delete_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "bridgeId") == 0) {
@@ -264,6 +270,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges/{bridgeId}/addChannel.
@@ -276,13 +285,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_add_channel_to_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_add_channel_to_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "channel") == 0) {
@@ -292,27 +300,28 @@
 
 			args.channel_parse = ast_strdup(i->value);
 			if (!args.channel_parse) {
-				ast_log(LOG_ERROR, "OOM parsing channel\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			args.channel_count = ast_app_separate_args(
 				args.channel_parse, ',', vals, ARRAY_LEN(vals));
 			if (args.channel_count == 0) {
-				ast_log(LOG_ERROR, "Error parsing channel\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			if (args.channel_count >= MAX_VALS) {
-				ast_log(LOG_ERROR, "Too many values for channel\n");
-				args.channel_count = 0;
-				continue;
+				stasis_http_response_error(response, 400,
+					"Bad Request",
+					"Too many values for channel");
+				goto fin;
 			}
 
 			args.channel = ast_malloc(sizeof(*args.channel) * args.channel_count);
 			if (!args.channel) {
-				ast_log(LOG_ERROR, "OOM parsing channel\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			for (j = 0; j < args.channel_count; ++j) {
@@ -329,8 +338,6 @@
 	}
 	stasis_http_add_channel_to_bridge(headers, &args, response);
 
-	ast_free(args.channel_parse);
-	ast_free(args.channel);
 #if defined(AST_DEVMODE)
 	code = response->response_code;
 
@@ -361,6 +368,11 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	ast_free(args.channel_parse);
+	ast_free(args.channel);
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges/{bridgeId}/removeChannel.
@@ -373,13 +385,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_remove_channel_from_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_remove_channel_from_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "channel") == 0) {
@@ -389,27 +400,28 @@
 
 			args.channel_parse = ast_strdup(i->value);
 			if (!args.channel_parse) {
-				ast_log(LOG_ERROR, "OOM parsing channel\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			args.channel_count = ast_app_separate_args(
 				args.channel_parse, ',', vals, ARRAY_LEN(vals));
 			if (args.channel_count == 0) {
-				ast_log(LOG_ERROR, "Error parsing channel\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			if (args.channel_count >= MAX_VALS) {
-				ast_log(LOG_ERROR, "Too many values for channel\n");
-				args.channel_count = 0;
-				continue;
+				stasis_http_response_error(response, 400,
+					"Bad Request",
+					"Too many values for channel");
+				goto fin;
 			}
 
 			args.channel = ast_malloc(sizeof(*args.channel) * args.channel_count);
 			if (!args.channel) {
-				ast_log(LOG_ERROR, "OOM parsing channel\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			for (j = 0; j < args.channel_count; ++j) {
@@ -426,8 +438,6 @@
 	}
 	stasis_http_remove_channel_from_bridge(headers, &args, response);
 
-	ast_free(args.channel_parse);
-	ast_free(args.channel);
 #if defined(AST_DEVMODE)
 	code = response->response_code;
 
@@ -455,6 +465,11 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	ast_free(args.channel_parse);
+	ast_free(args.channel);
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges/{bridgeId}/play.
@@ -467,13 +482,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_play_on_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_play_on_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "media") == 0) {
@@ -527,6 +541,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /bridges/{bridgeId}/record.
@@ -539,13 +556,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_record_bridge_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_record_bridge_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "name") == 0) {
@@ -606,6 +622,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 
 /*! \brief REST handler for /api-docs/bridges.{format} */

Modified: team/dlee/allow-multiple/res/res_stasis_http_channels.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_channels.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_channels.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_channels.c Thu Jul 25 14:45:34 2013
@@ -62,12 +62,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_channels_args args = {};
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	stasis_http_get_channels(headers, &args, response);
 
 #if defined(AST_DEVMODE)
@@ -97,6 +97,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels.
@@ -109,13 +112,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_originate_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "endpoint") == 0) {
@@ -174,6 +176,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}.
@@ -186,13 +191,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "channelId") == 0) {
@@ -230,6 +234,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}.
@@ -242,13 +249,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_delete_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "channelId") == 0) {
@@ -286,6 +292,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/dial.
@@ -298,13 +307,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_dial_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "endpoint") == 0) {
@@ -358,6 +366,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/continue.
@@ -370,13 +381,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_continue_in_dialplan_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "context") == 0) {
@@ -427,6 +437,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/answer.
@@ -439,13 +452,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_answer_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "channelId") == 0) {
@@ -484,6 +496,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/mute.
@@ -496,13 +511,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_mute_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "direction") == 0) {
@@ -547,6 +561,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/unmute.
@@ -559,13 +576,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_unmute_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "direction") == 0) {
@@ -610,6 +626,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/hold.
@@ -622,13 +641,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_hold_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "channelId") == 0) {
@@ -667,6 +685,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/unhold.
@@ -679,13 +700,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_unhold_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "channelId") == 0) {
@@ -724,6 +744,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/mohstart.
@@ -736,13 +759,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_moh_start_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "mohClass") == 0) {
@@ -787,6 +809,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/mohstop.
@@ -799,13 +824,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_moh_stop_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "channelId") == 0) {
@@ -844,6 +868,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/play.
@@ -856,13 +883,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_play_on_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "media") == 0) {
@@ -916,6 +942,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/record.
@@ -928,13 +957,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_record_channel_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "name") == 0) {
@@ -998,6 +1026,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/variable.
@@ -1010,13 +1041,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_channel_var_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "variable") == 0) {
@@ -1061,6 +1091,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/variable.
@@ -1073,13 +1106,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_set_channel_var_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "variable") == 0) {
@@ -1127,6 +1159,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 
 /*! \brief REST handler for /api-docs/channels.{format} */

Modified: team/dlee/allow-multiple/res/res_stasis_http_endpoints.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_endpoints.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_endpoints.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_endpoints.c Thu Jul 25 14:45:34 2013
@@ -62,12 +62,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_endpoints_args args = {};
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
 
-	struct ast_get_endpoints_args args = {};
 	stasis_http_get_endpoints(headers, &args, response);
 
 #if defined(AST_DEVMODE)
@@ -97,6 +97,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /endpoints/{tech}.
@@ -109,13 +112,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_endpoints_by_tech_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_get_endpoints_by_tech_args args = {};
-	struct ast_variable *i;
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "tech") == 0) {
@@ -152,6 +154,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /endpoints/{tech}/{resource}.
@@ -164,13 +169,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_endpoint_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_get_endpoint_args args = {};
-	struct ast_variable *i;
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "tech") == 0) {
@@ -210,6 +214,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 
 /*! \brief REST handler for /api-docs/endpoints.{format} */

Modified: team/dlee/allow-multiple/res/res_stasis_http_events.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_events.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_events.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_events.c Thu Jul 25 14:45:34 2013
@@ -54,10 +54,28 @@
 static void stasis_http_event_websocket_ws_cb(struct ast_websocket *ws_session,
 	struct ast_variable *get_params, struct ast_variable *headers)
 {
+	struct ast_event_websocket_args args = {};
+	RAII_VAR(struct stasis_http_response *, response, NULL, ast_free);
+	struct ast_variable *i;
 	RAII_VAR(struct ast_websocket *, s, ws_session, ast_websocket_unref);
 	RAII_VAR(struct ari_websocket_session *, session, NULL, ao2_cleanup);
-	struct ast_event_websocket_args args = {};
-	struct ast_variable *i;
+
+	response = ast_calloc(1, sizeof(*response));
+	if (!response) {
+		ast_log(LOG_ERROR, "Failed to create response.\n");
+		goto fin;
+	}
+
+#if defined(AST_DEVMODE)
+	session = ari_websocket_session_create(ws_session,
+		ari_validate_message_fn());
+#else
+	session = ari_websocket_session_create(ws_session, NULL);
+#endif
+	if (!session) {
+		ast_log(LOG_ERROR, "Failed to create ARI session\n");
+		goto fin;
+	}
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "app") == 0) {
@@ -67,27 +85,28 @@
 
 			args.app_parse = ast_strdup(i->value);
 			if (!args.app_parse) {
-				ast_log(LOG_ERROR, "OOM parsing app\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			args.app_count = ast_app_separate_args(
 				args.app_parse, ',', vals, ARRAY_LEN(vals));
 			if (args.app_count == 0) {
-				ast_log(LOG_ERROR, "Error parsing app\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			if (args.app_count >= MAX_VALS) {
-				ast_log(LOG_ERROR, "Too many values for app\n");
-				args.app_count = 0;
-				continue;
+				stasis_http_response_error(response, 400,
+					"Bad Request",
+					"Too many values for app");
+				goto fin;
 			}
 
 			args.app = ast_malloc(sizeof(*args.app) * args.app_count);
 			if (!args.app) {
-				ast_log(LOG_ERROR, "OOM parsing app\n");
-				continue;
+				stasis_http_response_alloc_failed(response);
+				goto fin;
 			}
 
 			for (j = 0; j < args.app_count; ++j) {
@@ -96,18 +115,26 @@
 		} else /* Looks weird, but makes the codegen much simpler */
 		{}
 	}
-#if defined(AST_DEVMODE)
-	session = ari_websocket_session_create(ws_session,
-		ari_validate_message_fn());
-#else
-	session = ari_websocket_session_create(ws_session, NULL);
-#endif
-	if (!session) {
-		ast_log(LOG_ERROR, "Failed to create ARI session\n");
-	} else {
-		ari_websocket_event_websocket(session, headers, &args);
+
+	ari_websocket_event_websocket(session, headers, &args);
+
+fin: __attribute__((unused))
+	if (response && response->response_code != 0) {
+		/* Param parsing failure */
+		/* TODO - ideally, this would return the error code to the
+		 * HTTP client; but we've already done the WebSocket
+		 * negotiation. Param parsing should happen earlier, but we
+		 * need a way to pass it through the WebSocket code to the
+		 * callback */
+		RAII_VAR(char *, msg, NULL, ast_free);
+		if (response->message) {
+			msg = ast_json_dump_string(response->message);
+		} else {
+			msg = ast_strdup("?");
+		}
+		ast_websocket_write(ws_session, AST_WEBSOCKET_OPCODE_TEXT, msg,
+			strlen(msg));
 	}
-
 	ast_free(args.app_parse);
 	ast_free(args.app);
 }

Modified: team/dlee/allow-multiple/res/res_stasis_http_playback.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_playback.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_playback.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_playback.c Thu Jul 25 14:45:34 2013
@@ -62,13 +62,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_get_playback_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_get_playback_args args = {};
-	struct ast_variable *i;
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "playbackId") == 0) {
@@ -105,6 +104,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /playback/{playbackId}.
@@ -117,13 +119,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_stop_playback_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_stop_playback_args args = {};
-	struct ast_variable *i;
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "playbackId") == 0) {
@@ -160,6 +161,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /playback/{playbackId}/control.
@@ -172,13 +176,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
+	struct ast_control_playback_args args = {};
+	struct ast_variable *i;
 #if defined(AST_DEVMODE)
 	int is_valid;
 	int code;
 #endif /* AST_DEVMODE */
-
-	struct ast_control_playback_args args = {};
-	struct ast_variable *i;
 
 	for (i = get_params; i; i = i->next) {
 		if (strcmp(i->name, "operation") == 0) {
@@ -224,6 +227,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 
 /*! \brief REST handler for /api-docs/playback.{format} */

Modified: team/dlee/allow-multiple/res/res_stasis_http_recordings.c
URL: http://svnview.digium.com/svn/asterisk/team/dlee/allow-multiple/res/res_stasis_http_recordings.c?view=diff&rev=395449&r1=395448&r2=395449
==============================================================================
--- team/dlee/allow-multiple/res/res_stasis_http_recordings.c (original)
+++ team/dlee/allow-multiple/res/res_stasis_http_recordings.c Thu Jul 25 14:45:34 2013
@@ -62,12 +62,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_stored_recordings_args args = {};
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	stasis_http_get_stored_recordings(headers, &args, response);
 
 #if defined(AST_DEVMODE)
@@ -97,6 +97,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/stored/{recordingName}.
@@ -109,13 +112,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_stored_recording_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "recordingName") == 0) {
@@ -152,6 +154,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/stored/{recordingName}.
@@ -164,13 +169,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_delete_stored_recording_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "recordingName") == 0) {
@@ -207,6 +211,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/live.
@@ -219,12 +226,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_live_recordings_args args = {};
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	stasis_http_get_live_recordings(headers, &args, response);
 
 #if defined(AST_DEVMODE)
@@ -254,6 +261,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/live/{recordingName}.
@@ -266,13 +276,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_get_live_recording_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "recordingName") == 0) {
@@ -309,6 +318,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/live/{recordingName}.
@@ -321,13 +333,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_cancel_recording_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "recordingName") == 0) {
@@ -364,6 +375,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/live/{recordingName}/stop.
@@ -376,13 +390,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,
 	struct ast_variable *headers, struct stasis_http_response *response)
 {
-#if defined(AST_DEVMODE)
-	int is_valid;
-	int code;
-#endif /* AST_DEVMODE */
-
 	struct ast_stop_recording_args args = {};
 	struct ast_variable *i;
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
 
 	for (i = path_vars; i; i = i->next) {
 		if (strcmp(i->name, "recordingName") == 0) {
@@ -419,6 +432,9 @@
 			"Internal Server Error", "Response validation failed");
 	}
 #endif /* AST_DEVMODE */
+
+fin: __attribute__((unused))
+	return;
 }
 /*!
  * \brief Parameter parsing callback for /recordings/live/{recordingName}/pause.
@@ -431,13 +447,12 @@
 	struct ast_variable *get_params, struct ast_variable *path_vars,

[... 340 lines stripped ...]



More information about the svn-commits mailing list