Asterisk - The Open Source Telephony Project GIT-master-754dea3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Modules Pages
Data Structures | Macros | Typedefs | Enumerations | Functions
manager.h File Reference

The AMI - Asterisk Manager Interface - is a TCP protocol created to manage Asterisk with third-party software. More...

#include "asterisk/network.h"
#include "asterisk/lock.h"
#include "asterisk/datastore.h"
#include "asterisk/xmldoc.h"
Include dependency graph for manager.h:

Go to the source code of this file.

Data Structures

struct  ast_manager_event_blob
 Struct containing info for an AMI event to send out. More...
 
struct  manager_action
 
struct  manager_custom_hook
 
struct  message
 

Macros

#define AMI_VERSION   "12.0.0"
 
#define ast_manager_event(chan, category, event, contents, ...)
 
#define ast_manager_event_multichan(category, event, nchans, chans, contents, ...)    __ast_manager_event_multichan(category, event, nchans, chans, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__);
 
#define ast_manager_register(action, authority, func, synopsis)   ast_manager_register2(action, authority, func, AST_MODULE_SELF, synopsis, NULL)
 External routines may register/unregister manager callbacks this way. More...
 
#define ast_manager_register_xml(action, authority, func)   ast_manager_register2(action, authority, func, AST_MODULE_SELF, NULL, NULL)
 Register a manager callback using XML documentation to describe the manager. More...
 
#define ast_manager_register_xml_core(action, authority, func)   ast_manager_register2(action, authority, func, NULL, NULL, NULL)
 Register a manager callback using XML documentation to describe the manager. More...
 
#define AST_MAX_MANHEADERS   128
 Export manager structures. More...
 
#define DEFAULT_MANAGER_PORT   5038 /* Default port for Asterisk management via TCP */
 
#define DEFAULT_MANAGER_TLS_PORT   5039 /* Default port for Asterisk management via TCP */
 
#define manager_event(category, event, contents, ...)    __ast_manager_event_multichan(category, event, 0, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__)
 External routines may send asterisk manager events this way. More...
 
#define NO_EXTRA_FIELDS   "%s", ""
 
Constant return values
Note
Currently, returning anything other than zero causes the session to terminate.
#define AMI_DESTROY   (-1)
 
#define AMI_SUCCESS   (0)
 
Manager event classes
#define EVENT_FLAG_AGENT   (1 << 5) /* Ability to read/set agent info */
 
#define EVENT_FLAG_AGI   (1 << 13) /* AGI events */
 
#define EVENT_FLAG_AOC   (1 << 16) /* Advice Of Charge events */
 
#define EVENT_FLAG_CALL   (1 << 1) /* Call event, such as state change, etc */
 
#define EVENT_FLAG_CC   (1 << 15) /* Call Completion events */
 
#define EVENT_FLAG_CDR   (1 << 10) /* CDR events */
 
#define EVENT_FLAG_COMMAND   (1 << 4) /* Ability to read/set commands */
 
#define EVENT_FLAG_CONFIG   (1 << 7) /* Ability to modify configurations */
 
#define EVENT_FLAG_DIALPLAN   (1 << 11) /* Dialplan events (VarSet, NewExten) */
 
#define EVENT_FLAG_DTMF   (1 << 8) /* Ability to read DTMF events */
 
#define EVENT_FLAG_HOOKRESPONSE   (1 << 14) /* Hook Response */
 
#define EVENT_FLAG_LOG   (1 << 2) /* Log events */
 
#define EVENT_FLAG_MESSAGE   (1 << 30) /* MESSAGE events. */
 
#define EVENT_FLAG_ORIGINATE   (1 << 12) /* Originate a call to an extension */
 
#define EVENT_FLAG_REPORTING   (1 << 9) /* Reporting events such as rtcp sent */
 
#define EVENT_FLAG_SECURITY   (1 << 18) /* Security Message as AMI Event */
 
#define EVENT_FLAG_SYSTEM   (1 << 0) /* System events such as module load/unload */
 
#define EVENT_FLAG_TEST   (1 << 17) /* Test event used to signal the Asterisk Test Suite */
 
#define EVENT_FLAG_USER   (1 << 6) /* Ability to read/set user info */
 
#define EVENT_FLAG_VERBOSE   (1 << 3) /* Verbose messages */
 

Typedefs

typedef int(* key_exclusion_cb) (const char *key)
 Callback used to determine whether a key should be skipped when converting a JSON object to a manager blob. More...
 
typedef int(* manager_hangup_cause_validator_t) (const char *channel_name, const char *cause)
 Callback used by ast_manager_hangup_helper that will validate the cause code. More...
 
typedef void(* manager_hangup_handler_t) (struct ast_channel *chan, int causecode)
 Callback used by ast_manager_hangup_helper that will actually hangup a channel. More...
 
typedef int(* manager_hook_t) (int category, const char *event, char *body)
 Manager Helper Function. More...
 

Enumerations

enum  variable_orders { ORDER_NATURAL , ORDER_REVERSE }
 

Functions

int __ast_manager_event_multichan (int category, const char *event, int chancount, struct ast_channel **chans, const char *file, int line, const char *func, const char *contents,...)
 
int ast_hook_send_action (struct manager_custom_hook *hook, const char *msg)
 Registered hooks can call this function to invoke actions and they will receive responses through registered callback. More...
 
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...
 
struct ast_strast_manager_build_channel_state_string (const struct ast_channel_snapshot *snapshot)
 Generate the AMI message body from a channel snapshot. More...
 
struct ast_strast_manager_build_channel_state_string_prefix (const struct ast_channel_snapshot *snapshot, const char *prefix)
 Generate the AMI message body from a channel snapshot. More...
 
int ast_manager_check_enabled (void)
 Check if AMI is enabled. More...
 
struct ast_manager_event_blobast_manager_event_blob_create (int event_flags, const char *manager_event, const char *extra_fields_fmt,...)
 Construct a ast_manager_event_blob. More...
 
struct stasis_message_typeast_manager_get_generic_type (void)
 Get the stasis_message_type for generic messages. More...
 
struct stasis_message_routerast_manager_get_message_router (void)
 Get the stasis_message_router for AMI. More...
 
struct stasis_topicast_manager_get_topic (void)
 Get the Stasis Message Bus API topic for AMI. More...
 
int ast_manager_hangup_helper (struct mansession *s, const struct message *m, manager_hangup_handler_t handler, manager_hangup_cause_validator_t cause_validator)
 A manager helper function that hangs up a channel using a supplied channel type specific hangup function and cause code validator. More...
 
void ast_manager_publish_event (const char *type, int class_type, struct ast_json *obj)
 Publish an event to AMI. More...
 
int ast_manager_register2 (const char *action, int authority, int(*func)(struct mansession *s, const struct message *m), struct ast_module *module, const char *synopsis, const char *description)
 Register a manager command with the manager interface. More...
 
void ast_manager_register_hook (struct manager_custom_hook *hook)
 Add a custom hook to be called when an event is fired. More...
 
struct ast_strast_manager_str_from_json_object (struct ast_json *blob, key_exclusion_cb exclusion_cb)
 Convert a JSON object into an AMI compatible string. More...
 
int ast_manager_unregister (const char *action)
 Unregister a registered manager command. More...
 
void ast_manager_unregister_hook (struct manager_custom_hook *hook)
 Delete a custom hook to be called when an event is fired. More...
 
int ast_str_append_event_header (struct ast_str **fields_string, const char *header, const char *value)
 append an event header to an ast string More...
 
int ast_webmanager_check_enabled (void)
 Check if AMI/HTTP is enabled. More...
 
void astman_append (struct mansession *s, const char *fmt,...)
 
int astman_datastore_add (struct mansession *s, struct ast_datastore *datastore)
 Add a datastore to a session. More...
 
struct ast_datastoreastman_datastore_find (struct mansession *s, const struct ast_datastore_info *info, const char *uid)
 Find a datastore on a session. More...
 
int astman_datastore_remove (struct mansession *s, struct ast_datastore *datastore)
 Remove a datastore from a session. More...
 
const char * astman_get_header (const struct message *m, char *var)
 Get header from manager transaction. More...
 
struct ast_variableastman_get_variables (const struct message *m)
 Get a linked list of the Variable: headers. More...
 
struct ast_variableastman_get_variables_order (const struct message *m, enum variable_orders order)
 Get a linked list of the Variable: headers with order specified. More...
 
int astman_is_authed (uint32_t ident)
 Determine if a manager session ident is authenticated. More...
 
void astman_live_dangerously (int new_live_dangerously)
 Enable/disable the inclusion of 'dangerous' configurations outside of the ast_config_AST_CONFIG_DIR. More...
 
void astman_send_ack (struct mansession *s, const struct message *m, char *msg)
 Send ack in manager transaction. More...
 
void astman_send_error (struct mansession *s, const struct message *m, char *error)
 Send error in manager transaction. More...
 
void astman_send_error_va (struct mansession *s, const struct message *m, const char *fmt,...)
 Send error in manager transaction (with va_args support) More...
 
void astman_send_list_complete_end (struct mansession *s)
 End the list complete event. More...
 
void astman_send_list_complete_start (struct mansession *s, const struct message *m, const char *event_name, int count)
 Start the list complete event. More...
 
void astman_send_listack (struct mansession *s, const struct message *m, char *msg, char *listflag)
 Send ack in manager transaction to begin a list. More...
 
void astman_send_response (struct mansession *s, const struct message *m, char *resp, char *msg)
 Send response in manager transaction. More...
 
int astman_verify_session_readpermissions (uint32_t ident, int perm)
 Verify a session's read permissions against a permission mask. More...
 
int astman_verify_session_writepermissions (uint32_t ident, int perm)
 Verify a session's write permissions against a permission mask. More...
 
int manager_bridging_init (void)
 Initialize support for AMI channel events. More...
 
int manager_channels_init (void)
 Initialize support for AMI channel events. More...
 
int manager_endpoints_init (void)
 Initialize support for AMI endpoint events. More...
 
int manager_mwi_init (void)
 Initialize support for AMI MWI events. More...
 
int manager_system_init (void)
 Initialize support for AMI system events. More...
 

Detailed Description

The AMI - Asterisk Manager Interface - is a TCP protocol created to manage Asterisk with third-party software.

Manager protocol packages are text fields of the form a: b. There is always exactly one space after the colon.

 For Actions replies, the first line of the reply is a "Response:" header with
 values "success", "error" or "follows". "Follows" implies that the
 response is coming as separate events with the same ActionID. If the
 Action request has no ActionID, it will be hard matching events
 to the Action request in the manager client.

 The first header type is the "Event" header.  Other headers vary from
 event to event.  Headers end with standard \\r\\n termination.
 The last line of the manager response or event is an empty line.
 (\\r\\n)
Note
Please try to re-use existing headers to simplify manager message parsing in clients. Don't re-use an existing header with a new meaning, please. You can find a reference of standard headers in doc/manager.txt

Definition in file manager.h.

Macro Definition Documentation

◆ AMI_DESTROY

#define AMI_DESTROY   (-1)

Definition at line 67 of file manager.h.

◆ AMI_SUCCESS

#define AMI_SUCCESS   (0)

Definition at line 66 of file manager.h.

◆ AMI_VERSION

#define AMI_VERSION   "12.0.0"

Definition at line 57 of file manager.h.

◆ ast_manager_event

#define ast_manager_event (   chan,
  category,
  event,
  contents,
  ... 
)
Value:
do { \
struct ast_channel *_chans[] = { chan, }; \
__ast_manager_event_multichan(category, event, 1, _chans, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__); \
} while (0)
Main Channel structure associated with a channel.
Definition: astman.c:222
const char * contents

Definition at line 256 of file manager.h.

◆ ast_manager_event_multichan

#define ast_manager_event_multichan (   category,
  event,
  nchans,
  chans,
  contents,
  ... 
)     __ast_manager_event_multichan(category, event, nchans, chans, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__);

Definition at line 261 of file manager.h.

◆ ast_manager_register

#define ast_manager_register (   action,
  authority,
  func,
  synopsis 
)    ast_manager_register2(action, authority, func, AST_MODULE_SELF, synopsis, NULL)

External routines may register/unregister manager callbacks this way.

Note
Use ast_manager_register2() to register with help text for new manager commands

Definition at line 189 of file manager.h.

◆ ast_manager_register_xml

#define ast_manager_register_xml (   action,
  authority,
  func 
)    ast_manager_register2(action, authority, func, AST_MODULE_SELF, NULL, NULL)

Register a manager callback using XML documentation to describe the manager.

Definition at line 192 of file manager.h.

◆ ast_manager_register_xml_core

#define ast_manager_register_xml_core (   action,
  authority,
  func 
)    ast_manager_register2(action, authority, func, NULL, NULL, NULL)

Register a manager callback using XML documentation to describe the manager.

Note
For Asterisk core modules that are not independently loadable.
Warning
If you use ast_manager_register_xml() instead when you need to use this function, Asterisk will crash on load.

Definition at line 203 of file manager.h.

◆ AST_MAX_MANHEADERS

#define AST_MAX_MANHEADERS   128

Export manager structures.

Definition at line 100 of file manager.h.

◆ DEFAULT_MANAGER_PORT

#define DEFAULT_MANAGER_PORT   5038 /* Default port for Asterisk management via TCP */

Definition at line 58 of file manager.h.

◆ DEFAULT_MANAGER_TLS_PORT

#define DEFAULT_MANAGER_TLS_PORT   5039 /* Default port for Asterisk management via TCP */

Definition at line 59 of file manager.h.

◆ EVENT_FLAG_AGENT

#define EVENT_FLAG_AGENT   (1 << 5) /* Ability to read/set agent info */

Definition at line 80 of file manager.h.

◆ EVENT_FLAG_AGI

#define EVENT_FLAG_AGI   (1 << 13) /* AGI events */

Definition at line 88 of file manager.h.

◆ EVENT_FLAG_AOC

#define EVENT_FLAG_AOC   (1 << 16) /* Advice Of Charge events */

Definition at line 91 of file manager.h.

◆ EVENT_FLAG_CALL

#define EVENT_FLAG_CALL   (1 << 1) /* Call event, such as state change, etc */

Definition at line 76 of file manager.h.

◆ EVENT_FLAG_CC

#define EVENT_FLAG_CC   (1 << 15) /* Call Completion events */

Definition at line 90 of file manager.h.

◆ EVENT_FLAG_CDR

#define EVENT_FLAG_CDR   (1 << 10) /* CDR events */

Definition at line 85 of file manager.h.

◆ EVENT_FLAG_COMMAND

#define EVENT_FLAG_COMMAND   (1 << 4) /* Ability to read/set commands */

Definition at line 79 of file manager.h.

◆ EVENT_FLAG_CONFIG

#define EVENT_FLAG_CONFIG   (1 << 7) /* Ability to modify configurations */

Definition at line 82 of file manager.h.

◆ EVENT_FLAG_DIALPLAN

#define EVENT_FLAG_DIALPLAN   (1 << 11) /* Dialplan events (VarSet, NewExten) */

Definition at line 86 of file manager.h.

◆ EVENT_FLAG_DTMF

#define EVENT_FLAG_DTMF   (1 << 8) /* Ability to read DTMF events */

Definition at line 83 of file manager.h.

◆ EVENT_FLAG_HOOKRESPONSE

#define EVENT_FLAG_HOOKRESPONSE   (1 << 14) /* Hook Response */

Definition at line 89 of file manager.h.

◆ EVENT_FLAG_LOG

#define EVENT_FLAG_LOG   (1 << 2) /* Log events */

Definition at line 77 of file manager.h.

◆ EVENT_FLAG_MESSAGE

#define EVENT_FLAG_MESSAGE   (1 << 30) /* MESSAGE events. */

Definition at line 95 of file manager.h.

◆ EVENT_FLAG_ORIGINATE

#define EVENT_FLAG_ORIGINATE   (1 << 12) /* Originate a call to an extension */

Definition at line 87 of file manager.h.

◆ EVENT_FLAG_REPORTING

#define EVENT_FLAG_REPORTING   (1 << 9) /* Reporting events such as rtcp sent */

Definition at line 84 of file manager.h.

◆ EVENT_FLAG_SECURITY

#define EVENT_FLAG_SECURITY   (1 << 18) /* Security Message as AMI Event */

Definition at line 93 of file manager.h.

◆ EVENT_FLAG_SYSTEM

#define EVENT_FLAG_SYSTEM   (1 << 0) /* System events such as module load/unload */

Definition at line 75 of file manager.h.

◆ EVENT_FLAG_TEST

#define EVENT_FLAG_TEST   (1 << 17) /* Test event used to signal the Asterisk Test Suite */

Definition at line 92 of file manager.h.

◆ EVENT_FLAG_USER

#define EVENT_FLAG_USER   (1 << 6) /* Ability to read/set user info */

Definition at line 81 of file manager.h.

◆ EVENT_FLAG_VERBOSE

#define EVENT_FLAG_VERBOSE   (1 << 3) /* Verbose messages */

Definition at line 78 of file manager.h.

◆ manager_event

#define manager_event (   category,
  event,
  contents,
  ... 
)     __ast_manager_event_multichan(category, event, 0, NULL, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__)

External routines may send asterisk manager events this way.

Parameters
categoryEvent category, matches manager authorization
eventEvent name
contentsContents of event

Definition at line 254 of file manager.h.

◆ NO_EXTRA_FIELDS

#define NO_EXTRA_FIELDS   "%s", ""

GCC warns about blank or NULL format strings. So, shenanigans!

Definition at line 534 of file manager.h.

Typedef Documentation

◆ key_exclusion_cb

typedef int(* key_exclusion_cb) (const char *key)

Callback used to determine whether a key should be skipped when converting a JSON object to a manager blob.

Since
12
Parameters
keyKey from JSON blob to be evaluated
Return values
non-zeroif the key should be excluded
zeroif the key should not be excluded

Definition at line 456 of file manager.h.

◆ manager_hangup_cause_validator_t

typedef int(* manager_hangup_cause_validator_t) (const char *channel_name, const char *cause)

Callback used by ast_manager_hangup_helper that will validate the cause code.

Parameters
channel_nameMostly for displaying log messages
causeCause code string
Returns
integer cause code

Definition at line 643 of file manager.h.

◆ manager_hangup_handler_t

typedef void(* manager_hangup_handler_t) (struct ast_channel *chan, int causecode)

Callback used by ast_manager_hangup_helper that will actually hangup a channel.

Parameters
chanThe channel to hang up
causecodeCause code to set on the channel

Definition at line 632 of file manager.h.

◆ manager_hook_t

typedef int(* manager_hook_t) (int category, const char *event, char *body)

Manager Helper Function.

Parameters
categoryThe class authorization category of the event
eventThe name of the event being raised
bodyThe body of the event
Return values
0Success
non-zeroError

Definition at line 111 of file manager.h.

Enumeration Type Documentation

◆ variable_orders

Enumerator
ORDER_NATURAL 
ORDER_REVERSE 

Definition at line 288 of file manager.h.

288 {
291};
@ ORDER_NATURAL
Definition: manager.h:289
@ ORDER_REVERSE
Definition: manager.h:290

Function Documentation

◆ ast_manager_build_bridge_state_string()

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 301 of file manager_bridges.c.

303{
305}
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.

References ast_manager_build_bridge_state_string_prefix().

Referenced by blind_transfer_to_ami(), bridge_snapshot_update(), channel_enter_cb(), channel_leave_cb(), confbridge_publish_manager_event(), manager_bridge_info(), and send_bridge_list_item_cb().

◆ ast_manager_build_bridge_state_string_prefix()

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 257 of file manager_bridges.c.

260{
261 struct ast_str *out = ast_str_create(128);
262 int res;
263
264 if (!out) {
265 return NULL;
266 }
267
268 res = ast_str_set(&out, 0,
269 "%sBridgeUniqueid: %s\r\n"
270 "%sBridgeType: %s\r\n"
271 "%sBridgeTechnology: %s\r\n"
272 "%sBridgeCreator: %s\r\n"
273 "%sBridgeName: %s\r\n"
274 "%sBridgeNumChannels: %u\r\n"
275 "%sBridgeVideoSourceMode: %s\r\n",
276 prefix, snapshot->uniqueid,
277 prefix, snapshot->subclass,
278 prefix, snapshot->technology,
279 prefix, ast_strlen_zero(snapshot->creator) ? "<unknown>": snapshot->creator,
280 prefix, ast_strlen_zero(snapshot->name) ? "<unknown>": snapshot->name,
281 prefix, snapshot->num_channels,
283 if (!res) {
284 ast_free(out);
285 return NULL;
286 }
287
289 && !ast_strlen_zero(snapshot->video_source_id)) {
290 res = ast_str_append(&out, 0, "%sBridgeVideoSource: %s\r\n",
291 prefix, snapshot->video_source_id);
292 if (!res) {
293 ast_free(out);
294 return NULL;
295 }
296 }
297
298 return out;
299}
#define ast_free(a)
Definition: astmm.h:180
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:4020
@ AST_BRIDGE_VIDEO_MODE_NONE
Definition: bridge.h:104
static char prefix[MAX_PREFIX]
Definition: http.c:144
#define NULL
Definition: resample.c:96
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
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition: strings.h:65
#define ast_str_create(init_len)
Create a malloc'ed dynamic length string.
Definition: strings.h:659
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
enum ast_bridge_video_mode_type video_mode
Definition: bridge.h:345
const ast_string_field video_source_id
Definition: bridge.h:332
const ast_string_field creator
Definition: bridge.h:332
const ast_string_field uniqueid
Definition: bridge.h:332
unsigned int num_channels
Definition: bridge.h:341
const ast_string_field technology
Definition: bridge.h:332
const ast_string_field name
Definition: bridge.h:332
const ast_string_field subclass
Definition: bridge.h:332
Support for dynamic strings.
Definition: strings.h:623
FILE * out
Definition: utils/frame.c:33

References AST_BRIDGE_VIDEO_MODE_NONE, ast_bridge_video_mode_to_string(), ast_free, ast_str_append(), ast_str_create, ast_str_set(), ast_strlen_zero(), ast_bridge_snapshot::creator, ast_bridge_snapshot::name, NULL, ast_bridge_snapshot::num_channels, out, prefix, 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(), attended_transfer_to_ami(), bridge_merge_cb(), and multi_object_blob_to_ami().

◆ ast_manager_build_channel_state_string()

struct ast_str * ast_manager_build_channel_state_string ( const struct ast_channel_snapshot snapshot)

Generate the AMI message body from a channel snapshot.

Since
12
Parameters
snapshotthe channel 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 612 of file manager_channels.c.

614{
616}
struct ast_str * ast_manager_build_channel_state_string_prefix(const struct ast_channel_snapshot *snapshot, const char *prefix)
Generate the AMI message body from a channel snapshot.

References ast_manager_build_channel_state_string_prefix().

Referenced by action_agents(), action_confbridgelist_item(), agent_login_to_ami(), agent_logoff_to_ami(), agi_channel_to_ami(), aoc_to_ami(), call_pickup_to_ami(), channel_dial_cb(), channel_dtmf_begin_cb(), channel_dtmf_end_cb(), channel_enter_cb(), channel_fax_cb(), channel_flash_cb(), channel_hangup_handler_cb(), channel_hangup_request_cb(), channel_hold_cb(), channel_leave_cb(), channel_mixmonitor_mute_cb(), channel_moh_start_cb(), channel_snapshot_update(), channel_unhold_cb(), channel_wink_cb(), confbridge_publish_manager_event(), dahdichannel_to_ami(), generate_status(), meetme_stasis_cb(), mwi_app_event_cb(), mwi_update_cb(), publish_basic_channel_event(), queue_channel_to_ami(), queue_multi_channel_to_ami(), rtcp_report_to_ami(), send_bridge_info_item_cb(), talking_start_to_ami(), talking_stop_to_ami(), and varset_to_ami().

◆ ast_manager_build_channel_state_string_prefix()

struct ast_str * ast_manager_build_channel_state_string_prefix ( const struct ast_channel_snapshot snapshot,
const char *  prefix 
)

Generate the AMI message body from a channel snapshot.

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

Definition at line 534 of file manager_channels.c.

537{
538 struct ast_str *out;
539 char *caller_name;
540 char *connected_name;
541 int res;
542
543 if (!snapshot || (snapshot->base->tech_properties & AST_CHAN_TP_INTERNAL)) {
544 return NULL;
545 }
546
547 out = ast_str_create(1024);
548 if (!out) {
549 return NULL;
550 }
551
552 caller_name = ast_escape_c_alloc(snapshot->caller->name);
553 connected_name = ast_escape_c_alloc(snapshot->connected->name);
554
555 res = ast_str_set(&out, 0,
556 "%sChannel: %s\r\n"
557 "%sChannelState: %u\r\n"
558 "%sChannelStateDesc: %s\r\n"
559 "%sCallerIDNum: %s\r\n"
560 "%sCallerIDName: %s\r\n"
561 "%sConnectedLineNum: %s\r\n"
562 "%sConnectedLineName: %s\r\n"
563 "%sLanguage: %s\r\n"
564 "%sAccountCode: %s\r\n"
565 "%sContext: %s\r\n"
566 "%sExten: %s\r\n"
567 "%sPriority: %d\r\n"
568 "%sUniqueid: %s\r\n"
569 "%sLinkedid: %s\r\n",
570 prefix, snapshot->base->name,
571 prefix, snapshot->state,
572 prefix, ast_state2str(snapshot->state),
573 prefix, S_OR(snapshot->caller->number, "<unknown>"),
574 prefix, S_OR(caller_name, "<unknown>"),
575 prefix, S_OR(snapshot->connected->number, "<unknown>"),
576 prefix, S_OR(connected_name, "<unknown>"),
577 prefix, snapshot->base->language,
578 prefix, snapshot->base->accountcode,
579 prefix, snapshot->dialplan->context,
580 prefix, snapshot->dialplan->exten,
581 prefix, snapshot->dialplan->priority,
582 prefix, snapshot->base->uniqueid,
583 prefix, snapshot->peer->linkedid);
584
585 ast_free(caller_name);
586 ast_free(connected_name);
587
588 if (!res) {
589 ast_free(out);
590 return NULL;
591 }
592
593 if (!ast_strlen_zero(snapshot->base->tenantid)) {
594 ast_str_append(&out, 0, "%sTenantid: %s\r\n", prefix, snapshot->base->tenantid);
595 }
596
597 if (snapshot->manager_vars) {
598 struct ast_var_t *var;
599 char *val;
601 val = ast_escape_c_alloc(var->value);
602 ast_str_append(&out, 0, "%sChanVariable: %s=%s\r\n",
603 prefix,
604 var->name, S_OR(val, ""));
605 ast_free(val);
606 }
607 }
608
609 return out;
610}
#define var
Definition: ast_expr2f.c:605
@ AST_CHAN_TP_INTERNAL
Channels with this particular technology are an implementation detail of Asterisk and should generall...
Definition: channel.h:991
const char * ast_state2str(enum ast_channel_state state)
Gives the string form of a given channel state.
Definition: channel.c:636
#define AST_LIST_TRAVERSE(head, var, field)
Loops over (traverses) the entries in a list.
Definition: linkedlists.h:491
#define S_OR(a, b)
returns the equivalent of logic or for strings: first one if not empty, otherwise second one.
Definition: strings.h:80
char * ast_escape_c_alloc(const char *s)
Escape standard 'C' sequences in the given string.
Definition: utils.c:2140
const ast_string_field language
const ast_string_field tenantid
const ast_string_field accountcode
const ast_string_field uniqueid
const ast_string_field name
const ast_string_field number
const ast_string_field name
const ast_string_field context
const ast_string_field exten
struct ast_channel_snapshot_connected * connected
struct varshead * manager_vars
struct ast_channel_snapshot_dialplan * dialplan
struct ast_channel_snapshot_peer * peer
struct ast_channel_snapshot_base * base
enum ast_channel_state state
struct ast_channel_snapshot_caller * caller
struct ast_var_t::@213 entries
Definition: ast_expr2.c:325

References ast_channel_snapshot_base::accountcode, AST_CHAN_TP_INTERNAL, ast_escape_c_alloc(), ast_free, AST_LIST_TRAVERSE, ast_state2str(), ast_str_append(), ast_str_create, ast_str_set(), ast_strlen_zero(), ast_channel_snapshot::base, ast_channel_snapshot::caller, ast_channel_snapshot::connected, ast_channel_snapshot_dialplan::context, ast_channel_snapshot::dialplan, ast_var_t::entries, ast_channel_snapshot_dialplan::exten, ast_channel_snapshot_base::language, ast_channel_snapshot_peer::linkedid, ast_channel_snapshot::manager_vars, ast_channel_snapshot_caller::name, ast_channel_snapshot_connected::name, ast_channel_snapshot_base::name, NULL, ast_channel_snapshot_caller::number, ast_channel_snapshot_connected::number, out, ast_channel_snapshot::peer, prefix, ast_channel_snapshot_dialplan::priority, S_OR, ast_channel_snapshot::state, ast_channel_snapshot_base::tech_properties, ast_channel_snapshot_base::tenantid, ast_channel_snapshot_base::uniqueid, and var.

Referenced by action_coreshowchannels(), ast_manager_build_channel_state_string(), attended_transfer_to_ami(), blind_transfer_to_ami(), call_pickup_to_ami(), channel_chanspy_start_cb(), channel_chanspy_stop_cb(), channel_dial_cb(), local_message_to_ami(), manager_build_parked_call_string(), multi_object_blob_to_ami(), and queue_multi_channel_to_ami().

◆ ast_manager_event_blob_create()

struct ast_manager_event_blob * ast_manager_event_blob_create ( int  event_flags,
const char *  manager_event,
const char *  extra_fields_fmt,
  ... 
)

Construct a ast_manager_event_blob.

Since
12

The returned object is AO2 managed, so clean up with ao2_cleanup().

Parameters
event_flagsFlags the event should be raised with.
manager_eventThe event to be raised, should be a string literal.
extra_fields_fmtFormat string for extra fields to include. Or NO_EXTRA_FIELDS for no extra fields.
Returns
New ast_manager_event_blob object.
Return values
NULLon error.

Definition at line 10237 of file manager.c.

10242{
10243 struct ast_manager_event_blob *ev;
10244 va_list argp;
10245
10246 ast_assert(extra_fields_fmt != NULL);
10248
10250 if (!ev) {
10251 return NULL;
10252 }
10253
10254 if (ast_string_field_init(ev, 20)) {
10255 ao2_ref(ev, -1);
10256 return NULL;
10257 }
10258
10261
10262 va_start(argp, extra_fields_fmt);
10263 ast_string_field_ptr_build_va(ev, &ev->extra_fields, extra_fields_fmt, argp);
10264 va_end(argp);
10265
10266 return ev;
10267}
@ AO2_ALLOC_OPT_LOCK_NOLOCK
Definition: astobj2.h:367
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition: astobj2.h:459
#define ao2_alloc_options(data_size, destructor_fn, options)
Definition: astobj2.h:404
static void manager_event_blob_dtor(void *obj)
Definition: manager.c:10228
#define manager_event(category, event, contents,...)
External routines may send asterisk manager events this way.
Definition: manager.h:254
#define ast_string_field_ptr_build_va(x, ptr, fmt, args)
Set a field to a complex (built) value with prebuilt va_lists.
Definition: stringfields.h:573
#define ast_string_field_init(x, size)
Initialize a field pool and fields.
Definition: stringfields.h:359
Struct containing info for an AMI event to send out.
Definition: manager.h:503
const ast_string_field extra_fields
Definition: manager.h:508
const char * manager_event
Definition: manager.h:505
#define ast_assert(a)
Definition: utils.h:739

References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_alloc_options, ao2_ref, ast_assert, ast_string_field_init, ast_string_field_ptr_build_va, ast_manager_event_blob::event_flags, ast_manager_event_blob::extra_fields, manager_event, ast_manager_event_blob::manager_event, manager_event_blob_dtor(), and NULL.

Referenced by agent_login_to_ami(), agent_logoff_to_ami(), agi_channel_to_ami(), aoc_to_ami(), attended_transfer_to_ami(), blind_transfer_to_ami(), bridge_create(), bridge_destroy(), bridge_video_update(), call_pickup_to_ami(), cc_available_to_ami(), cc_callerrecalling_to_ami(), cc_callerstartmonitoring_to_ami(), cc_callerstopmonitoring_to_ami(), cc_failure_to_ami(), cc_monitorfailed_to_ami(), cc_offertimerstart_to_ami(), cc_recallcomplete_to_ami(), cc_requestacknowledged_to_ami(), cc_requested_to_ami(), channel_new_accountcode(), channel_new_callerid(), channel_new_connected_line(), channel_newexten(), channel_state_change(), contactstatus_to_ami(), dahdichannel_to_ami(), devstate_to_ami(), fake_ami(), local_message_to_ami(), multi_user_event_to_ami(), peerstatus_to_ami(), presence_state_to_ami(), queue_channel_to_ami(), queue_member_to_ami(), queue_multi_channel_to_ami(), rtcp_report_to_ami(), security_event_to_ami_blob(), system_registry_to_ami(), talking_start_to_ami(), talking_stop_to_ami(), and varset_to_ami().

◆ ast_manager_get_generic_type()

struct stasis_message_type * ast_manager_get_generic_type ( void  )

Get the stasis_message_type for generic messages.

Since
12

A generic AMI message expects a JSON only payload. The payload must have the following structure: {type: s, class_type: i, event: [ {s: s}, ...] }

  • type is the AMI event type
  • class_type is the class authorization type for the event
  • event is a list of key/value tuples to be sent out in the message
Returns
A stasis_message_type for AMI messages

Referenced by __init_manager(), ast_manager_publish_event(), load_module(), manager_shutdown(), manager_subscriptions_init(), mwi_startup_event_cb(), publish_load_message_type(), startup_event_cb(), and subscription_persistence_event_cb().

◆ ast_str_append_event_header()

int ast_str_append_event_header ( struct ast_str **  fields_string,
const char *  header,
const char *  value 
)

append an event header to an ast string

Since
12
Parameters
fields_stringpointer to an ast_string pointer. It may be a pointer to a NULL ast_str pointer, in which case the ast_str will be initialized.
headerThe header being applied
valuethe value of the header
Return values
0if successful
non-zeroon failure

Definition at line 10215 of file manager.c.

10217{
10218 if (!*fields_string) {
10219 *fields_string = ast_str_create(128);
10220 if (!*fields_string) {
10221 return -1;
10222 }
10223 }
10224
10225 return (ast_str_append(fields_string, 0, "%s: %s\r\n", header, value) < 0) ? -1 : 0;
10226}
int value
Definition: syslog.c:37

References ast_str_append(), ast_str_create, and value.

Referenced by confbridge_talking_cb(), get_bool_header(), and meetme_stasis_cb().

◆ astman_datastore_add()

int astman_datastore_add ( struct mansession s,
struct ast_datastore datastore 
)

Add a datastore to a session.

Return values
0success
non-zerofailure
Since
1.6.1

Definition at line 10176 of file manager.c.

10177{
10178 AST_LIST_INSERT_HEAD(&s->session->datastores, datastore, entry);
10179
10180 return 0;
10181}
#define AST_LIST_INSERT_HEAD(head, elm, field)
Inserts a list entry at the head of a list.
Definition: linkedlists.h:711
struct mansession_session::mansession_datastores datastores
struct mansession_session * session
Definition: manager.c:328

References AST_LIST_INSERT_HEAD, mansession_session::datastores, and mansession::session.

◆ astman_datastore_find()

struct ast_datastore * astman_datastore_find ( struct mansession s,
const struct ast_datastore_info info,
const char *  uid 
)

Find a datastore on a session.

Returns
pointer to the datastore if found
Return values
NULLif not found
Since
1.6.1

Definition at line 10188 of file manager.c.

10189{
10190 struct ast_datastore *datastore = NULL;
10191
10192 if (info == NULL)
10193 return NULL;
10194
10196 if (datastore->info != info) {
10197 continue;
10198 }
10199
10200 if (uid == NULL) {
10201 /* matched by type only */
10202 break;
10203 }
10204
10205 if ((datastore->uid != NULL) && !strcasecmp(uid, datastore->uid)) {
10206 /* Matched by type AND uid */
10207 break;
10208 }
10209 }
10211
10212 return datastore;
10213}
#define AST_LIST_TRAVERSE_SAFE_END
Closes a safe loop traversal block.
Definition: linkedlists.h:615
#define AST_LIST_TRAVERSE_SAFE_BEGIN(head, var, field)
Loops safely over (traverses) the entries in a list.
Definition: linkedlists.h:529
def info(msg)
Structure for a data store object.
Definition: datastore.h:64
const struct ast_datastore_info * info
Definition: datastore.h:67
const char * uid
Definition: datastore.h:65
struct ast_datastore::@216 entry

References AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, mansession_session::datastores, ast_datastore::entry, sip_to_pjsip::info(), ast_datastore::info, NULL, mansession::session, and ast_datastore::uid.

◆ astman_datastore_remove()

int astman_datastore_remove ( struct mansession s,
struct ast_datastore datastore 
)

Remove a datastore from a session.

Return values
0success
non-zerofailure
Since
1.6.1

Definition at line 10183 of file manager.c.

10184{
10185 return AST_LIST_REMOVE(&s->session->datastores, datastore, entry) ? 0 : -1;
10186}
#define AST_LIST_REMOVE(head, elm, field)
Removes a specific entry from a list.
Definition: linkedlists.h:856

References AST_LIST_REMOVE, mansession_session::datastores, and mansession::session.

◆ astman_is_authed()

int astman_is_authed ( uint32_t  ident)

Determine if a manager session ident is authenticated.

Definition at line 7998 of file manager.c.

7999{
8000 int authed;
8002
8003 if (!(session = find_session(ident, 0)))
8004 return 0;
8005
8006 authed = (session->authenticated != 0);
8007
8010
8011 return authed;
8012}
static struct ast_mansession session
#define ao2_unlock(a)
Definition: astobj2.h:729
static struct mansession_session * unref_mansession(struct mansession_session *s)
Unreference manager session object. If no more references, then go ahead and delete it.
Definition: manager.c:918
static struct mansession_session * find_session(uint32_t ident, int incinuse)
Definition: manager.c:7926

References ao2_unlock, find_session(), session, and unref_mansession().

Referenced by http_post_callback(), and static_callback().

◆ astman_verify_session_readpermissions()

int astman_verify_session_readpermissions ( uint32_t  ident,
int  perm 
)

Verify a session's read permissions against a permission mask.

Parameters
identsession identity
permpermission mask to verify
Return values
1if the session has the permission mask capabilities
0otherwise

Definition at line 8014 of file manager.c.

8015{
8016 int result = 0;
8018 struct ao2_container *sessions;
8019 struct ao2_iterator i;
8020
8021 if (ident == 0) {
8022 return 0;
8023 }
8024
8025 sessions = ao2_global_obj_ref(mgr_sessions);
8026 if (!sessions) {
8027 return 0;
8028 }
8030 ao2_ref(sessions, -1);
8031 while ((session = ao2_iterator_next(&i))) {
8033 if ((session->managerid == ident) && (session->readperm & perm)) {
8034 result = 1;
8037 break;
8038 }
8041 }
8043
8044 return result;
8045}
#define ao2_iterator_next(iter)
Definition: astobj2.h:1911
#define ao2_global_obj_ref(holder)
Get a reference to the object stored in the global holder.
Definition: astobj2.h:918
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) attribute_warn_unused_result
Create an iterator for a container.
#define ao2_lock(a)
Definition: astobj2.h:717
void ao2_iterator_destroy(struct ao2_iterator *iter)
Destroy a container iterator.
static PGresult * result
Definition: cel_pgsql.c:84
static struct unistimsession * sessions
Generic container type.
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
Definition: astobj2.h:1821

References ao2_global_obj_ref, ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_lock, ao2_ref, ao2_unlock, result, session, sessions, and unref_mansession().

◆ astman_verify_session_writepermissions()

int astman_verify_session_writepermissions ( uint32_t  ident,
int  perm 
)

Verify a session's write permissions against a permission mask.

Parameters
identsession identity
permpermission mask to verify
Return values
1if the session has the permission mask capabilities, otherwise 0
0otherwise

Definition at line 8047 of file manager.c.

8048{
8049 int result = 0;
8051 struct ao2_container *sessions;
8052 struct ao2_iterator i;
8053
8054 if (ident == 0) {
8055 return 0;
8056 }
8057
8058 sessions = ao2_global_obj_ref(mgr_sessions);
8059 if (!sessions) {
8060 return 0;
8061 }
8063 ao2_ref(sessions, -1);
8064 while ((session = ao2_iterator_next(&i))) {
8066 if ((session->managerid == ident) && (session->writeperm & perm)) {
8067 result = 1;
8070 break;
8071 }
8074 }
8076
8077 return result;
8078}

References ao2_global_obj_ref, ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_lock, ao2_ref, ao2_unlock, result, session, sessions, and unref_mansession().

Referenced by http_post_callback().

◆ manager_bridging_init()

int manager_bridging_init ( void  )

Initialize support for AMI channel events.

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

Definition at line 722 of file manager_bridges.c.

723{
724 int ret = 0;
726 struct stasis_topic *bridge_topic;
727
729 /* Already initialized */
730 return 0;
731 }
732
734
736 if (!manager_topic) {
737 return -1;
738 }
739
740 bridge_topic = ast_bridge_topic_all();
741 if (!bridge_topic) {
742 return -1;
743 }
744
746 if (!topic_forwarder) {
747 return -1;
748 }
749
751 if (!bridge_state_router) {
752 return -1;
753 }
754
757
760
763
766
768 ret |= ast_manager_register_xml_core("BridgeInfo", 0, manager_bridge_info);
769 ret |= ast_manager_register_xml_core("BridgeDestroy", 0, manager_bridge_destroy);
770 ret |= ast_manager_register_xml_core("BridgeKick", 0, manager_bridge_kick);
771
772 /* If somehow we failed to add any routes, just shut down the whole
773 * thing and fail it.
774 */
775 if (ret) {
777 return -1;
778 }
779
780 return 0;
781}
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:459
struct stasis_topic * ast_manager_get_topic(void)
Get the Stasis Message Bus API topic for AMI.
Definition: manager.c:454
static struct stasis_topic * manager_topic
A stasis_topic that all topics AMI cares about will be forwarded to.
Definition: manager.c:186
#define ast_manager_register_xml_core(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition: manager.h:203
static void bridge_merge_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static struct stasis_message_router * bridge_state_router
Message router for cached bridge state snapshot updates.
static void channel_leave_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
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)
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 void bridge_snapshot_update(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_enter_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
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:1605
struct stasis_message_type * ast_bridge_snapshot_type(void)
Message type for ast_bridge_snapshot.
struct stasis_message_type * ast_channel_entered_bridge_type(void)
Message type for ast_channel enter bridge blob messages.
struct stasis_message_type * ast_bridge_merge_message_type(void)
Message type for ast_bridge_merge_message.
struct stasis_topic * ast_bridge_topic_all(void)
A topic which publishes the events for all bridges.
struct stasis_message_type * ast_channel_left_bridge_type(void)
Message type for ast_channel leave bridge blob messages.
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.

References ast_bridge_merge_message_type(), ast_bridge_snapshot_type(), ast_bridge_topic_all(), ast_channel_entered_bridge_type(), ast_channel_left_bridge_type(), ast_manager_get_message_router(), ast_manager_get_topic(), ast_manager_register_xml_core, ast_register_cleanup(), bridge_merge_cb(), bridge_snapshot_update(), bridge_state_router, channel_enter_cb(), channel_leave_cb(), manager_bridge_destroy(), manager_bridge_info(), manager_bridge_kick(), manager_bridges_list(), manager_bridging_cleanup(), manager_topic, NULL, stasis_forward_all(), stasis_message_router_add(), and topic_forwarder.

Referenced by subscribe_all().

◆ manager_channels_init()

int manager_channels_init ( void  )

Initialize support for AMI channel events.

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

Definition at line 1405 of file manager_channels.c.

1406{
1407 int ret = 0;
1409 struct stasis_topic *channel_topic;
1410 struct stasis_message_router *message_router;
1411
1413 if (!manager_topic) {
1414 return -1;
1415 }
1416 message_router = ast_manager_get_message_router();
1417 if (!message_router) {
1418 return -1;
1419 }
1420 channel_topic = ast_channel_topic_all();
1421 if (!channel_topic) {
1422 return -1;
1423 }
1424
1426 if (!topic_forwarder) {
1427 return -1;
1428 }
1429
1431
1432 /* The snapshot type has a special handler as it can result in multiple
1433 * manager events being queued due to aspects of the snapshot itself
1434 * changing.
1435 */
1436 ret |= stasis_message_router_add(message_router,
1438
1439 ret |= stasis_message_router_add(message_router,
1441
1442 ret |= stasis_message_router_add(message_router,
1444
1445 ret |= stasis_message_router_add(message_router,
1447
1448 ret |= stasis_message_router_add(message_router,
1450
1451 ret |= stasis_message_router_add(message_router,
1453 NULL);
1454
1455 ret |= stasis_message_router_add(message_router,
1457
1458 ret |= stasis_message_router_add(message_router,
1460
1461 ret |= stasis_message_router_add(message_router,
1463
1464 ret |= stasis_message_router_add(message_router,
1466
1467 ret |= stasis_message_router_add(message_router,
1469 NULL);
1470
1471 ret |= stasis_message_router_add(message_router,
1473
1474 ret |= stasis_message_router_add(message_router,
1476 NULL);
1477
1478 ret |= stasis_message_router_add(message_router,
1480
1481 ret |= stasis_message_router_add(message_router,
1483
1484 ret |= stasis_message_router_add(message_router,
1486
1487 ret |= stasis_message_router_add(message_router,
1489
1490 ret |= stasis_message_router_add(message_router,
1492
1493 /* If somehow we failed to add any routes, just shut down the whole
1494 * thing and fail it.
1495 */
1496 if (ret) {
1498 return -1;
1499 }
1500
1501 return 0;
1502}
struct stasis_message_type * ast_channel_mixmonitor_mute_type(void)
Message type for muting or unmuting mixmonitor on a channel.
struct stasis_topic * ast_channel_topic_all(void)
A topic which publishes the events for all channels.
struct stasis_message_type * ast_channel_hold_type(void)
Message type for when a channel is placed on hold.
struct stasis_message_type * ast_channel_chanspy_start_type(void)
Message type for when a channel starts spying on another channel.
struct stasis_message_type * ast_channel_chanspy_stop_type(void)
Message type for when a channel stops spying on another channel.
struct stasis_message_type * ast_channel_dtmf_begin_type(void)
Message type for when DTMF begins on a channel.
struct stasis_message_type * ast_channel_mixmonitor_stop_type(void)
Message type for stopping mixmonitor on a channel.
struct stasis_message_type * ast_channel_hangup_handler_type(void)
Message type for hangup handler related actions.
struct stasis_message_type * ast_channel_dial_type(void)
Message type for when a channel dials another channel.
struct stasis_message_type * ast_channel_moh_stop_type(void)
Message type for stopping music on hold on a channel.
struct stasis_message_type * ast_channel_unhold_type(void)
Message type for when a channel is removed from hold.
struct stasis_message_type * ast_channel_hangup_request_type(void)
Message type for when a hangup is requested on a channel.
struct stasis_message_type * ast_channel_flash_type(void)
Message type for when a hook flash occurs on a channel.
struct stasis_message_type * ast_channel_snapshot_type(void)
Message type for ast_channel_snapshot_update.
struct stasis_message_type * ast_channel_fax_type(void)
Message type for a fax operation.
struct stasis_message_type * ast_channel_dtmf_end_type(void)
Message type for when DTMF ends on a channel.
struct stasis_message_type * ast_channel_wink_type(void)
Message type for when a wink occurs on a channel.
struct stasis_message_type * ast_channel_moh_start_type(void)
Message type for starting music on hold on a channel.
struct stasis_message_type * ast_channel_mixmonitor_start_type(void)
Message type for starting mixmonitor on a channel.
static void channel_flash_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_hangup_handler_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_chanspy_stop_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_snapshot_update(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_mixmonitor_start_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_dtmf_end_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_mixmonitor_stop_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_dial_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
Callback processing messages for channel dialing.
static void channel_hold_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_moh_start_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_wink_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_fax_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_chanspy_start_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_hangup_request_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_dtmf_begin_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_moh_stop_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void channel_mixmonitor_mute_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static void manager_channels_shutdown(void)
static struct stasis_forward * topic_forwarder
The Stasis Message Bus API subscription returned by the forwarding of the channel topic to the manage...
static void channel_unhold_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)

References ast_channel_chanspy_start_type(), ast_channel_chanspy_stop_type(), ast_channel_dial_type(), ast_channel_dtmf_begin_type(), ast_channel_dtmf_end_type(), ast_channel_fax_type(), ast_channel_flash_type(), ast_channel_hangup_handler_type(), ast_channel_hangup_request_type(), ast_channel_hold_type(), ast_channel_mixmonitor_mute_type(), ast_channel_mixmonitor_start_type(), ast_channel_mixmonitor_stop_type(), ast_channel_moh_start_type(), ast_channel_moh_stop_type(), ast_channel_snapshot_type(), ast_channel_topic_all(), ast_channel_unhold_type(), ast_channel_wink_type(), ast_manager_get_message_router(), ast_manager_get_topic(), ast_register_cleanup(), channel_chanspy_start_cb(), channel_chanspy_stop_cb(), channel_dial_cb(), channel_dtmf_begin_cb(), channel_dtmf_end_cb(), channel_fax_cb(), channel_flash_cb(), channel_hangup_handler_cb(), channel_hangup_request_cb(), channel_hold_cb(), channel_mixmonitor_mute_cb(), channel_mixmonitor_start_cb(), channel_mixmonitor_stop_cb(), channel_moh_start_cb(), channel_moh_stop_cb(), channel_snapshot_update(), channel_unhold_cb(), channel_wink_cb(), manager_channels_shutdown(), manager_topic, NULL, stasis_forward_all(), stasis_message_router_add(), and topic_forwarder.

Referenced by subscribe_all().

◆ manager_endpoints_init()

int manager_endpoints_init ( void  )

Initialize support for AMI endpoint events.

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

Definition at line 52 of file manager_endpoints.c.

53{
54 struct stasis_topic *endpoint_topic;
55 int ret = 0;
56
57 if (endpoint_router) {
58 /* Already initialized */
59 return 0;
60 }
61
63
64 endpoint_topic = ast_endpoint_topic_all_cached();
65 if (!endpoint_topic) {
66 return -1;
67 }
68
70
71 if (!endpoint_router) {
72 return -1;
73 }
74
77
78 /* If somehow we failed to add any routes, just shut down the whole
79 * thing and fail it.
80 */
81 if (ret) {
83 return -1;
84 }
85
86 return 0;
87}
struct stasis_message_type * ast_endpoint_contact_state_type(void)
Message type for endpoint contact state changes.
struct stasis_topic * ast_endpoint_topic_all_cached(void)
Cached topic for all endpoint related messages.
struct stasis_message_type * ast_endpoint_state_type(void)
Message type for endpoint state changes.
static void manager_endpoints_shutdown(void)
static void endpoint_state_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
static struct stasis_message_router * endpoint_router
#define stasis_message_router_create(topic)
Create a new message router object.

References ast_endpoint_contact_state_type(), ast_endpoint_state_type(), ast_endpoint_topic_all_cached(), ast_register_cleanup(), endpoint_router, endpoint_state_cb(), manager_endpoints_shutdown(), NULL, stasis_message_router_add(), and stasis_message_router_create.

Referenced by subscribe_all().

◆ manager_mwi_init()

int manager_mwi_init ( void  )

Initialize support for AMI MWI events.

Since
12
Return values
0on success
non-zeroon error

Definition at line 160 of file manager_mwi.c.

161{
162 int ret = 0;
164 struct stasis_topic *mwi_topic;
165 struct stasis_message_router *message_router;
166
168 if (!manager_topic) {
169 return -1;
170 }
171 message_router = ast_manager_get_message_router();
172 if (!message_router) {
173 return -1;
174 }
175 mwi_topic = ast_mwi_topic_all();
176 if (!mwi_topic) {
177 return -1;
178 }
179
181 if (!topic_forwarder) {
182 return -1;
183 }
184
186
187 ret |= stasis_message_router_add(message_router,
190 NULL);
191
192 ret |= stasis_message_router_add(message_router,
195 NULL);
196
197 /* If somehow we failed to add any routes, just shut down the whole
198 * thing and fail it.
199 */
200 if (ret) {
202 return -1;
203 }
204
205 return 0;
206}
static void mwi_update_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
Definition: manager_mwi.c:86
static void mwi_app_event_cb(void *data, struct stasis_subscription *sub, struct stasis_message *message)
Generic MWI event callback used for one-off events from voicemail modules.
Definition: manager_mwi.c:55
static void manager_mwi_shutdown(void)
Definition: manager_mwi.c:154
static struct stasis_forward * topic_forwarder
The Stasis Message Bus API subscription returned by the forwarding of the MWI topic to the manager to...
Definition: manager_mwi.c:43
struct stasis_message_type * ast_mwi_state_type(void)
Get the Stasis Message Bus API message type for MWI messages.
struct stasis_message_type * ast_mwi_vm_app_type(void)
Get the Stasis Message Bus API message type for voicemail application specific messages.
struct stasis_topic * ast_mwi_topic_all(void)
Get the Stasis Message Bus API topic for MWI messages.
Definition: mwi.c:89

References ast_manager_get_message_router(), ast_manager_get_topic(), ast_mwi_state_type(), ast_mwi_topic_all(), ast_mwi_vm_app_type(), ast_register_cleanup(), manager_mwi_shutdown(), manager_topic, mwi_app_event_cb(), mwi_update_cb(), NULL, stasis_forward_all(), stasis_message_router_add(), and topic_forwarder.

Referenced by subscribe_all().

◆ manager_system_init()

int manager_system_init ( void  )

Initialize support for AMI system events.

Since
12
Return values
0on success
non-zeroon error

Definition at line 43 of file manager_system.c.

44{
47 struct stasis_message_router *message_router;
48
50 if (!manager_topic) {
51 return -1;
52 }
53 message_router = ast_manager_get_message_router();
54 if (!message_router) {
55 return -1;
56 }
58 if (!system_topic) {
59 return -1;
60 }
61
63 if (!topic_forwarder) {
64 return -1;
65 }
66
68
69 return 0;
70}
static void manager_system_shutdown(void)
static struct stasis_forward * topic_forwarder
The Stasis Message Bus API subscription returned by the forwarding of the system topic to the manager...
static struct stasis_topic * system_topic
The Stasis Message Bus API topic for system level changes.
Definition: stasis_system.c:71
struct stasis_topic * ast_system_topic(void)
A Stasis Message Bus API topic which publishes messages regarding system changes.

References ast_manager_get_message_router(), ast_manager_get_topic(), ast_register_cleanup(), ast_system_topic(), manager_system_shutdown(), manager_topic, stasis_forward_all(), system_topic, and topic_forwarder.

Referenced by subscribe_all().