mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-15 08:44:14 +00:00
ARI Outbound Websockets
Asterisk can now establish websocket sessions _to_ your ARI applications as well as accepting websocket sessions _from_ them. Full details: http://s.asterisk.net/ari-outbound-ws Code change summary: * Added an ast_vector_string_join() function, * Added ApplicationRegistered and ApplicationUnregistered ARI events. * Converted res/ari/config.c to use sorcery to process ari.conf. * Added the "outbound-websocket" ARI config object. * Refactored res/ari/ari_websockets.c to handle outbound websockets. * Refactored res/ari/cli.c for the sorcery changeover. * Updated res/res_stasis.c for the sorcery changeover. * Updated apps/app_stasis.c to allow initiating per-call outbound websockets. * Added CLI commands to manage ARI websockets. * Added the new "outbound-websocket" object to ari.conf.sample. * Moved the ARI XML documentation out of res_ari.c into res/ari/ari_doc.xml UserNote: Asterisk can now establish websocket sessions _to_ your ARI applications as well as accepting websocket sessions _from_ them. Full details: http://s.asterisk.net/ari-outbound-ws
This commit is contained in:
committed by
github-actions[bot]
parent
5a3164c0b2
commit
c873f2ae7e
@@ -28,6 +28,7 @@
|
||||
#include "asterisk/http.h"
|
||||
#include "asterisk/json.h"
|
||||
#include "asterisk/vector.h"
|
||||
#include "asterisk/websocket_client.h"
|
||||
|
||||
struct ast_ari_events_event_websocket_args;
|
||||
|
||||
@@ -35,19 +36,45 @@ struct ast_ari_events_event_websocket_args;
|
||||
* which causes optional_api stuff to happen, which makes optional_api more
|
||||
* difficult to debug. */
|
||||
|
||||
//struct ast_websocket_server;
|
||||
struct ast_websocket;
|
||||
|
||||
/*
|
||||
* Since we create a "stasis-<appname>" dialplan context for each
|
||||
* stasis app, we need to make sure that the total length will be
|
||||
* <= AST_MAX_CONTEXT
|
||||
*/
|
||||
#define STASIS_CONTEXT_PREFIX "stasis-"
|
||||
#define STASIS_CONTEXT_PREFIX_LEN (sizeof(STASIS_CONTEXT_PREFIX) - 1)
|
||||
#define ARI_MAX_APP_NAME_LEN (AST_MAX_CONTEXT - STASIS_CONTEXT_PREFIX_LEN)
|
||||
|
||||
struct ari_ws_session {
|
||||
enum ast_websocket_type type; /*!< The type of websocket session. */
|
||||
struct ast_websocket *ast_ws_session; /*!< The parent websocket session. */
|
||||
int (*validator)(struct ast_json *); /*!< The message validator. */
|
||||
struct ao2_container *websocket_apps; /*!< List of Stasis apps registered to
|
||||
struct ast_vector_string websocket_apps; /*!< List of Stasis apps registered to
|
||||
the websocket session. */
|
||||
int subscribe_all; /*!< Flag indicating if all events are subscribed to. */
|
||||
AST_VECTOR(, struct ast_json *) message_queue; /*!< Container for holding delayed messages. */
|
||||
char *app_name; /*!< The name of the Stasis application. */
|
||||
char *remote_addr; /*!< The remote address. */
|
||||
struct ari_conf_outbound_websocket *owc; /*!< The outbound websocket configuration. */
|
||||
pthread_t thread; /*!< The thread that handles the websocket. */
|
||||
char *channel_id; /*!< The channel id for per-call websocket. */
|
||||
char *channel_name; /*!< The channel name for per-call websocket. */
|
||||
int stasis_end_sent; /*!< Flag indicating if the StasisEnd message was sent. */
|
||||
int connected; /*!< Flag indicating if the websocket is connected. */
|
||||
int closing; /*!< Flag indicating if the session is closing. */
|
||||
char session_id[]; /*!< The id for the websocket session. */
|
||||
};
|
||||
|
||||
struct ao2_container* ari_websocket_get_sessions(void);
|
||||
struct ari_ws_session *ari_websocket_get_session(const char *session_id);
|
||||
struct ari_ws_session *ari_websocket_get_session_by_app(const char *app_name);
|
||||
const char *ari_websocket_type_to_str(enum ast_websocket_type type);
|
||||
void ari_websocket_shutdown(struct ari_ws_session *session);
|
||||
void ari_websocket_shutdown_all(void);
|
||||
int ari_outbound_websocket_start(struct ari_conf_outbound_websocket *owc);
|
||||
|
||||
/*!
|
||||
* \internal
|
||||
* \brief Send a JSON event to a websocket.
|
||||
@@ -91,6 +118,6 @@ void ari_handle_websocket(struct ast_tcptls_session_instance *ser,
|
||||
struct ast_variable *headers);
|
||||
|
||||
int ari_websocket_unload_module(void);
|
||||
int ari_websocket_load_module(void);
|
||||
int ari_websocket_load_module(int is_enabled);
|
||||
|
||||
#endif /* ARI_WEBSOCKETS_H_ */
|
||||
|
Reference in New Issue
Block a user