mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 03:20:57 +00:00
This commit adds the ability to make ARI REST requests over the same websocket used to receive events. For full details on how to use the new capability, visit... https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/ Changes: * Added utilities to http.c: * ast_get_http_method_from_string(). * ast_http_parse_post_form(). * Added utilities to json.c: * ast_json_nvp_array_to_ast_variables(). * ast_variables_to_json_nvp_array(). * Added definitions for new events to carry REST responses. * Created res/ari/ari_websocket_requests.c to house the new request handlers. * Moved non-event specific code out of res/ari/resource_events.c into res/ari/ari_websockets.c * Refactored res/res_ari.c to move non-http code out of ast_ari_callback() (which is http specific) and into ast_ari_invoke() so it can be shared between both the http and websocket transports. UpgradeNote: This commit adds the ability to make ARI REST requests over the same websocket used to receive events. See https://docs.asterisk.org/Configuration/Interfaces/Asterisk-REST-Interface-ARI/ARI-REST-over-WebSocket/
90 lines
2.3 KiB
C
90 lines
2.3 KiB
C
/*
|
|
* Asterisk -- An open source telephony toolkit.
|
|
*
|
|
* Copyright (C) 2012 - 2013, Digium, Inc.
|
|
*
|
|
* David M. Lee, II <dlee@digium.com>
|
|
*
|
|
* See http://www.asterisk.org for more information about
|
|
* the Asterisk project. Please do not directly contact
|
|
* any of the maintainers of this project for assistance;
|
|
* the project provides a web site, mailing lists and IRC
|
|
* channels for your use.
|
|
*
|
|
* This program is free software, distributed under the terms of
|
|
* the GNU General Public License Version 2. See the LICENSE file
|
|
* at the top of the source tree.
|
|
*/
|
|
|
|
/*! \file
|
|
*
|
|
* \brief /api-docs/events.{format} implementation- WebSocket resource
|
|
*
|
|
* \author David M. Lee, II <dlee@digium.com>
|
|
*/
|
|
|
|
/*** MODULEINFO
|
|
<support_level>core</support_level>
|
|
***/
|
|
|
|
#include "asterisk.h"
|
|
|
|
#include "resource_events.h"
|
|
#include "internal.h"
|
|
#include "asterisk/stasis_app.h"
|
|
|
|
void ast_ari_events_user_event(struct ast_variable *headers,
|
|
struct ast_ari_events_user_event_args *args,
|
|
struct ast_ari_response *response)
|
|
{
|
|
enum stasis_app_user_event_res res;
|
|
struct ast_json *json_variables = NULL;
|
|
|
|
if (args->variables) {
|
|
ast_ari_events_user_event_parse_body(args->variables, args);
|
|
json_variables = ast_json_object_get(args->variables, "variables");
|
|
}
|
|
|
|
if (ast_strlen_zero(args->application)) {
|
|
ast_ari_response_error(response, 400, "Bad Request",
|
|
"Missing parameter application");
|
|
return;
|
|
}
|
|
|
|
res = stasis_app_user_event(args->application,
|
|
args->event_name,
|
|
args->source, args->source_count,
|
|
json_variables);
|
|
|
|
switch (res) {
|
|
case STASIS_APP_USER_OK:
|
|
ast_ari_response_no_content(response);
|
|
break;
|
|
|
|
case STASIS_APP_USER_APP_NOT_FOUND:
|
|
ast_ari_response_error(response, 404, "Not Found",
|
|
"Application not found");
|
|
break;
|
|
|
|
case STASIS_APP_USER_EVENT_SOURCE_NOT_FOUND:
|
|
ast_ari_response_error(response, 422, "Unprocessable Entity",
|
|
"Event source was not found");
|
|
break;
|
|
|
|
case STASIS_APP_USER_EVENT_SOURCE_BAD_SCHEME:
|
|
ast_ari_response_error(response, 400, "Bad Request",
|
|
"Invalid event source URI scheme");
|
|
break;
|
|
|
|
case STASIS_APP_USER_USEREVENT_INVALID:
|
|
ast_ari_response_error(response, 400, "Bad Request",
|
|
"Invalid userevent data");
|
|
break;
|
|
|
|
case STASIS_APP_USER_INTERNAL_ERROR:
|
|
default:
|
|
ast_ari_response_error(response, 500, "Internal Server Error",
|
|
"Error processing request");
|
|
}
|
|
}
|