NULL,
args->format,
response);
- ast_variables_destroy(variables);
ast_free(endpoint);
return 0;
}
-static void external_media_audiosocket_tcp(struct ast_ari_channels_external_media_args *args,
+static int external_media_audiosocket_tcp(struct ast_ari_channels_external_media_args *args,
struct ast_variable *variables,
struct ast_ari_response *response)
{
- size_t endpoint_len;
char *endpoint;
struct ast_channel *chan;
struct varshead *vars;
if (ast_strlen_zero(args->data)) {
ast_ari_response_error(response, 400, "Bad Request", "data can not be empty");
- return;
+ return 1;
}
- endpoint_len = strlen("AudioSocket/") + strlen(args->external_host) + 1 + strlen(args->data) + 1;
- endpoint = ast_alloca(endpoint_len);
- /* The UUID is stored in the arbitrary data field */
- snprintf(endpoint, endpoint_len, "AudioSocket/%s/%s", args->external_host, args->data);
+ if (ast_asprintf(&endpoint, "AudioSocket/%s/%s",
+ args->external_host, args->data) == -1) {
+ return 1;
+ }
chan = ari_channels_handle_originate_with_id(
endpoint,
NULL,
args->format,
response);
- ast_variables_destroy(variables);
+
+ ast_free(endpoint);
if (!chan) {
- return;
+ return 1;
}
ast_channel_lock(chan);
}
ast_channel_unlock(chan);
ast_channel_unref(chan);
+ return 0;
}
#include "asterisk/config.h"
void ast_ari_channels_external_media(struct ast_variable *headers,
struct ast_ari_channels_external_media_args *args, struct ast_ari_response *response)
{
- struct ast_variable *variables = NULL;
+ RAII_VAR(struct ast_variable *, variables, NULL, ast_variables_destroy);
char *external_host;
char *host = NULL;
char *port = NULL;
"An internal error prevented this request from being handled");
}
} else if (strcasecmp(args->encapsulation, "audiosocket") == 0 && strcasecmp(args->transport, "tcp") == 0) {
- external_media_audiosocket_tcp(args, variables, response);
+ if (external_media_audiosocket_tcp(args, variables, response)) {
+ ast_ari_response_error(
+ response, 500, "Internal Server Error",
+ "An internal error prevented this request from being handled");
+ }
} else {
ast_ari_response_error(
response, 501, "Not Implemented",