Asterisk - The Open Source Telephony Project  21.4.1
Data Structures | Typedefs | Functions | Variables
manager_bridges.c File Reference

The Asterisk Management Interface - AMI (bridge event handling) More...

#include "asterisk.h"
#include "asterisk/stasis_bridges.h"
#include "asterisk/stasis_channels.h"
#include "asterisk/manager.h"
#include "asterisk/stasis_message_router.h"

Go to the source code of this file.

Data Structures

struct  bridge_list_data
 

Typedefs

typedef struct ast_manager_event_blob *(* bridge_snapshot_monitor) (struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
 Typedef for callbacks that get called on channel snapshot updates.
 

Functions

struct ast_strast_manager_build_bridge_state_string (const struct ast_bridge_snapshot *snapshot)
 Generate the AMI message body from a bridge snapshot. More...
 
struct ast_strast_manager_build_bridge_state_string_prefix (const struct ast_bridge_snapshot *snapshot, const char *prefix)
 Generate the AMI message body from a bridge snapshot. More...
 
static struct ast_manager_event_blobbridge_create (struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
 Handle bridge creation.
 
static struct ast_manager_event_blobbridge_destroy (struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
 Handle bridge destruction.
 
static void bridge_merge_cb (void *data, struct stasis_subscription *sub, struct stasis_message *message)
 
static void bridge_snapshot_update (void *data, struct stasis_subscription *sub, struct stasis_message *message)
 
static struct ast_manager_event_blobbridge_video_update (struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
 Handle video source updates.
 
static void channel_enter_cb (void *data, struct stasis_subscription *sub, struct stasis_message *message)
 
static void channel_leave_cb (void *data, struct stasis_subscription *sub, struct stasis_message *message)
 
static int manager_bridge_destroy (struct mansession *s, const struct message *m)
 
static int manager_bridge_info (struct mansession *s, const struct message *m)
 
static int manager_bridge_kick (struct mansession *s, const struct message *m)
 
static int manager_bridges_list (struct mansession *s, const struct message *m)
 
static void manager_bridging_cleanup (void)
 
int manager_bridging_init (void)
 Initialize support for AMI channel events. More...
 
static int send_bridge_info_item_cb (void *obj, void *arg, void *data, int flags)
 
static int send_bridge_list_item_cb (void *obj, void *arg, void *data, int flags)
 

Variables

bridge_snapshot_monitor bridge_monitors []
 
static struct stasis_message_routerbridge_state_router
 Message router for cached bridge state snapshot updates.
 
static struct stasis_forwardtopic_forwarder
 The Stasis Message Bus API subscription returned by the forwarding of the channel topic to the manager topic.
 

Detailed Description

The Asterisk Management Interface - AMI (bridge event handling)

Author
Kinsey Moore kmoor.nosp@m.e@di.nosp@m.gium..nosp@m.com

Definition in file manager_bridges.c.

Function Documentation

struct ast_str* ast_manager_build_bridge_state_string ( const struct ast_bridge_snapshot snapshot)

Generate the AMI message body from a bridge snapshot.

Since
12
Parameters
snapshotthe bridge snapshot for which to generate an AMI message body
Return values
NULLon error
Returns
ast_str* on success (must be ast_freed by caller)

Definition at line 267 of file manager_bridges.c.

References ast_manager_build_bridge_state_string_prefix().

269 {
271 }
struct ast_str * ast_manager_build_bridge_state_string_prefix(const struct ast_bridge_snapshot *snapshot, const char *prefix)
Generate the AMI message body from a bridge snapshot.
struct ast_str* ast_manager_build_bridge_state_string_prefix ( const struct ast_bridge_snapshot snapshot,
const char *  prefix 
)

Generate the AMI message body from a bridge snapshot.

Since
12
Parameters
snapshotthe bridge snapshot for which to generate an AMI message body
prefixWhat to prepend to the bridge fields
Return values
NULLon error
Returns
ast_str* on success (must be ast_freed by caller)

Definition at line 223 of file manager_bridges.c.

References AST_BRIDGE_VIDEO_MODE_NONE, ast_bridge_video_mode_to_string(), ast_str_append(), ast_str_create, ast_str_set(), ast_bridge_snapshot::creator, ast_bridge_snapshot::name, ast_bridge_snapshot::num_channels, ast_bridge_snapshot::subclass, ast_bridge_snapshot::technology, ast_bridge_snapshot::uniqueid, ast_bridge_snapshot::video_mode, and ast_bridge_snapshot::video_source_id.

Referenced by ast_manager_build_bridge_state_string().

226 {
227  struct ast_str *out = ast_str_create(128);
228  int res;
229 
230  if (!out) {
231  return NULL;
232  }
233 
234  res = ast_str_set(&out, 0,
235  "%sBridgeUniqueid: %s\r\n"
236  "%sBridgeType: %s\r\n"
237  "%sBridgeTechnology: %s\r\n"
238  "%sBridgeCreator: %s\r\n"
239  "%sBridgeName: %s\r\n"
240  "%sBridgeNumChannels: %u\r\n"
241  "%sBridgeVideoSourceMode: %s\r\n",
242  prefix, snapshot->uniqueid,
243  prefix, snapshot->subclass,
244  prefix, snapshot->technology,
245  prefix, ast_strlen_zero(snapshot->creator) ? "<unknown>": snapshot->creator,
246  prefix, ast_strlen_zero(snapshot->name) ? "<unknown>": snapshot->name,
247  prefix, snapshot->num_channels,
248  prefix, ast_bridge_video_mode_to_string(snapshot->video_mode));
249  if (!res) {
250  ast_free(out);
251  return NULL;
252  }
253 
254  if (snapshot->video_mode != AST_BRIDGE_VIDEO_MODE_NONE
255  && !ast_strlen_zero(snapshot->video_source_id)) {
256  res = ast_str_append(&out, 0, "%sBridgeVideoSource: %s\r\n",
257  prefix, snapshot->video_source_id);
258  if (!res) {
259  ast_free(out);
260  return NULL;
261  }
262  }
263 
264  return out;
265 }
const ast_string_field video_source_id
Definition: bridge.h:328
int ast_str_append(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Append to a thread local dynamic string.
Definition: strings.h:1139
const ast_string_field creator
Definition: bridge.h:328
int ast_str_set(struct ast_str **buf, ssize_t max_len, const char *fmt,...)
Set a dynamic string using variable arguments.
Definition: strings.h:1113
const ast_string_field technology
Definition: bridge.h:328
const char * ast_bridge_video_mode_to_string(enum ast_bridge_video_mode_type video_mode)
Converts an enum representation of a bridge video mode to string.
Definition: bridge.c:3951
Support for dynamic strings.
Definition: strings.h:623
const ast_string_field name
Definition: bridge.h:328
enum ast_bridge_video_mode_type video_mode
Definition: bridge.h:341
const ast_string_field uniqueid
Definition: bridge.h:328
unsigned int num_channels
Definition: bridge.h:337
const ast_string_field subclass
Definition: bridge.h:328
#define ast_str_create(init_len)
Create a malloc'ed dynamic length string.
Definition: strings.h:659
int manager_bridging_init ( void  )

Initialize support for AMI channel events.

Return values
0on success.
non-zeroon error.
Since
12

Definition at line 683 of file manager_bridges.c.

References ast_bridge_topic_all(), ast_manager_get_message_router(), ast_manager_get_topic(), ast_manager_register_xml_core, ast_register_cleanup(), manager_topic, stasis_forward_all(), and stasis_message_router_add().

684 {
685  int ret = 0;
686  struct stasis_topic *manager_topic;
687  struct stasis_topic *bridge_topic;
688 
689  if (bridge_state_router) {
690  /* Already initialized */
691  return 0;
692  }
693 
694  ast_register_cleanup(manager_bridging_cleanup);
695 
696  manager_topic = ast_manager_get_topic();
697  if (!manager_topic) {
698  return -1;
699  }
700 
701  bridge_topic = ast_bridge_topic_all();
702  if (!bridge_topic) {
703  return -1;
704  }
705 
706  topic_forwarder = stasis_forward_all(bridge_topic, manager_topic);
707  if (!topic_forwarder) {
708  return -1;
709  }
710 
712  if (!bridge_state_router) {
713  return -1;
714  }
715 
717  ast_bridge_snapshot_type(), bridge_snapshot_update, NULL);
718 
720  ast_bridge_merge_message_type(), bridge_merge_cb, NULL);
721 
723  ast_channel_entered_bridge_type(), channel_enter_cb, NULL);
724 
726  ast_channel_left_bridge_type(), channel_leave_cb, NULL);
727 
728  ret |= ast_manager_register_xml_core("BridgeList", 0, manager_bridges_list);
729  ret |= ast_manager_register_xml_core("BridgeInfo", 0, manager_bridge_info);
730  ret |= ast_manager_register_xml_core("BridgeDestroy", 0, manager_bridge_destroy);
731  ret |= ast_manager_register_xml_core("BridgeKick", 0, manager_bridge_kick);
732 
733  /* If somehow we failed to add any routes, just shut down the whole
734  * thing and fail it.
735  */
736  if (ret) {
737  manager_bridging_cleanup();
738  return -1;
739  }
740 
741  return 0;
742 }
int stasis_message_router_add(struct stasis_message_router *router, struct stasis_message_type *message_type, stasis_subscription_cb callback, void *data)
Add a route to a message router.
struct stasis_topic * ast_bridge_topic_all(void)
A topic which publishes the events for all bridges.
static struct stasis_topic * manager_topic
A stasis_topic that all topics AMI cares about will be forwarded to.
Definition: manager.c:1644
#define ast_manager_register_xml_core(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition: manager.h:202
int ast_register_cleanup(void(*func)(void))
Register a function to be executed before Asterisk gracefully exits.
Definition: clicompat.c:19
struct stasis_message_router * ast_manager_get_message_router(void)
Get the stasis_message_router for AMI.
Definition: manager.c:1885
struct stasis_topic * ast_manager_get_topic(void)
Get the Stasis Message Bus API topic for AMI.
Definition: manager.c:1880
static struct stasis_message_router * bridge_state_router
Message router for cached bridge state snapshot updates.
static struct stasis_forward * topic_forwarder
The Stasis Message Bus API subscription returned by the forwarding of the channel topic to the manage...
struct stasis_forward * stasis_forward_all(struct stasis_topic *from_topic, struct stasis_topic *to_topic)
Create a subscription which forwards all messages from one topic to another.
Definition: stasis.c:1578

Variable Documentation

bridge_snapshot_monitor bridge_monitors[]
Initial value:
= {
}
static struct ast_manager_event_blob * bridge_create(struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
Handle bridge creation.
static struct ast_manager_event_blob * bridge_video_update(struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
Handle video source updates.
static struct ast_manager_event_blob * bridge_destroy(struct ast_bridge_snapshot *old_snapshot, struct ast_bridge_snapshot *new_snapshot)
Handle bridge destruction.

Definition at line 323 of file manager_bridges.c.