![]() |
Home page |
Mailing list |
Docs
Asterisk developer's documentation :: Codename Pineapple
manager.h File Reference
Manager protocol packages are text fields of the form a: b. There is always exactly one space after the colon.
The first header type is the "Event" header. Other headers vary from event to event. Headers end with standard
termination. The last line of the manager response or event is an empty line. (
)
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.
#include <stdarg.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "asterisk/lock.h"
Include dependency graph for manager.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.
Data Structures | |
| struct | manager_action |
| struct | manager_custom_hook |
| struct | message |
Defines | |
| #define | ast_manager_register(a, b, c, d) ast_manager_register2(a, b, c, d, NULL) |
| #define | AST_MAX_MANHEADERS 80 |
| #define | DEFAULT_MANAGER_PORT 5038 |
| #define | EVENT_FLAG_AGENT (1 << 5) |
| #define | EVENT_FLAG_CALL (1 << 1) |
| #define | EVENT_FLAG_COMMAND (1 << 4) |
| #define | EVENT_FLAG_CONFIG (1 << 7) |
| #define | EVENT_FLAG_LOG (1 << 2) |
| #define | EVENT_FLAG_SYSTEM (1 << 0) |
| #define | EVENT_FLAG_USER (1 << 6) |
| #define | EVENT_FLAG_VERBOSE (1 << 3) |
| #define | manager_event(category, event, contents,) __manager_event(category, event, __FILE__, __LINE__, __PRETTY_FUNCTION__, contents , ## __VA_ARGS__) |
Typedefs | |
| typedef int(* | manager_hook_t )(int, const char *, char *) |
Functions | |
| void | __attribute__ ((format(printf, 2, 3))) astman_append(struct mansession *s |
| int | __attribute__ ((format(printf, 6, 7))) __manager_event(int category |
| int | ast_manager_register2 (const char *action, int authority, int(*func)(struct mansession *s, const struct message *m), const char *synopsis, const char *description) |
| register a new command with manager, including online help. This is the preferred way to register a manager command | |
| void | ast_manager_register_hook (struct manager_custom_hook *hook) |
| Add a custom hook to be called when an event is fired. | |
| int | ast_manager_unregister (char *action) |
| void | ast_manager_unregister_hook (struct manager_custom_hook *hook) |
| Delete a custom hook to be called when an event is fired. | |
| int const char const char int const char const char const char * | astman_get_header (const struct message *m, char *var) |
| ast_variable * | astman_get_variables (const struct message *m) |
| void | astman_send_ack (struct mansession *s, const struct message *m, char *msg) |
| void | astman_send_error (struct mansession *s, const struct message *m, char *error) |
| void | astman_send_listack (struct mansession *s, const struct message *m, char *msg, char *listflag) |
| void | astman_send_response (struct mansession *s, const struct message *m, char *resp, char *msg) |
| void const char int | init_manager (void) |
| int | reload_manager (void) |
Variables | |
| int const char const char int const char const char * | contents |
| int const char * | event |
| int const char const char * | file |
| void const char * | fmt |
| int const char const char int const char * | func |
| int const char const char int | line |
|
|
Definition at line 107 of file manager.h. Referenced by astdb_init(), init_manager(), and load_module(). |
|
|
Definition at line 60 of file manager.h. Referenced by do_message(). |
|
|
Definition at line 48 of file manager.h. Referenced by init_manager(). |
|
|
Definition at line 55 of file manager.h. Referenced by __login_exec(), agent_logoff_maintenance(), and load_module(). |
|
|
Definition at line 51 of file manager.h. Referenced by ast_change_name(), ast_channel_bridge(), ast_do_masquerade(), ast_hangup(), ast_set_callerid(), ast_setstate(), fast_originate(), init_manager(), load_module(), manager_state_cb(), park_exec(), pbx_extension_helper(), post_manager_event(), realtime_exec(), and socket_process(). |
|
|
Definition at line 54 of file manager.h. Referenced by init_manager(). |
|
|
Definition at line 57 of file manager.h. Referenced by init_manager(), and manager_show_dialplan(). |
|
|
|
|
|
|
Definition at line 56 of file manager.h. Referenced by aji_log_hook(), and init_manager(). |
|
|
|
|
|
Definition at line 138 of file manager.h. Referenced by __expire_registry(), __iax2_poke_noanswer(), __login_exec(), agent_logoff_maintenance(), aji_log_hook(), ast_change_name(), ast_channel_bridge(), ast_do_masquerade(), ast_hangup(), ast_set_callerid(), ast_setstate(), expire_register(), fast_originate(), handle_init_event(), handle_response_peerpoke(), handle_response_register(), iax2_ack_registry(), logger_print_normal(), manager_show_dialplan(), manager_state_cb(), park_exec(), parse_register_contact(), pbx_extension_helper(), post_manager_event(), realtime_exec(), register_verify(), reload_logger(), reload_manager(), sip_poke_noanswer(), sip_reg_timeout(), socket_process(), ss_thread(), update_registry(), and zt_handle_event(). |
|
|
|
|
|
|
|
|
|
|
|
Called by Asterisk initialization Definition at line 2931 of file manager.c. References action_challenge(), action_command(), action_events(), action_extensionstate(), action_getconfig(), action_getvar(), action_hangup(), action_listcommands(), action_login(), action_logoff(), action_mailboxcount(), action_mailboxstatus(), action_originate(), action_ping(), action_redirect(), action_sendtext(), action_setvar(), action_status(), action_timeout(), action_updateconfig(), action_userevent(), action_waitevent(), ahp, ami_desc, ami_tls_cfg, amis_desc, append_event(), AST_CERTFILE, ast_cli_register_multiple(), ast_config_load(), ast_extension_state_add(), ast_gethostbyname(), ast_log(), ast_manager_register, ast_manager_register2(), ast_strdup, ast_true(), ast_variable_browse(), tls_config::certfile, tls_config::cipher, cli_manager, DEFAULT_MANAGER_PORT, tls_config::enabled, enabled, EVENT_FLAG_CALL, EVENT_FLAG_COMMAND, EVENT_FLAG_CONFIG, EVENT_FLAG_USER, free, hp, LOG_NOTICE, manager_state_cb(), mandescr_command, mandescr_events, mandescr_extensionstate, mandescr_getconfig, mandescr_getvar, mandescr_hangup, mandescr_listcommands, mandescr_logoff, mandescr_mailboxcount, mandescr_mailboxstatus, mandescr_originate, mandescr_ping, mandescr_redirect, mandescr_sendtext, mandescr_setvar, mandescr_timeout, mandescr_updateconfig, mandescr_userevent, mandescr_waitevent, server_args::sin, and var. Referenced by reload_manager(). 02932 { 02933 struct ast_config *cfg = NULL; 02934 const char *val; 02935 char *cat = NULL; 02936 int webenabled = 0; 02937 int enabled = 0; 02938 int newhttptimeout = 60; 02939 int have_sslbindaddr = 0; 02940 struct hostent *hp; 02941 struct ast_hostent ahp; 02942 struct ast_manager_user *user = NULL; 02943 struct ast_variable *var; 02944 02945 if (!registered) { 02946 /* Register default actions */ 02947 ast_manager_register2("Ping", 0, action_ping, "Keepalive command", mandescr_ping); 02948 ast_manager_register2("Events", 0, action_events, "Control Event Flow", mandescr_events); 02949 ast_manager_register2("Logoff", 0, action_logoff, "Logoff Manager", mandescr_logoff); 02950 ast_manager_register2("Login", 0, action_login, "Login Manager", NULL); 02951 ast_manager_register2("Challenge", 0, action_challenge, "Generate Challenge for MD5 Auth", NULL); 02952 ast_manager_register2("Hangup", EVENT_FLAG_CALL, action_hangup, "Hangup Channel", mandescr_hangup); 02953 ast_manager_register("Status", EVENT_FLAG_CALL, action_status, "Lists channel status" ); 02954 ast_manager_register2("Setvar", EVENT_FLAG_CALL, action_setvar, "Set Channel Variable", mandescr_setvar ); 02955 ast_manager_register2("Getvar", EVENT_FLAG_CALL, action_getvar, "Gets a Channel Variable", mandescr_getvar ); 02956 ast_manager_register2("GetConfig", EVENT_FLAG_CONFIG, action_getconfig, "Retrieve configuration", mandescr_getconfig); 02957 ast_manager_register2("UpdateConfig", EVENT_FLAG_CONFIG, action_updateconfig, "Update basic configuration", mandescr_updateconfig); 02958 ast_manager_register2("Redirect", EVENT_FLAG_CALL, action_redirect, "Redirect (transfer) a call", mandescr_redirect ); 02959 ast_manager_register2("Originate", EVENT_FLAG_CALL, action_originate, "Originate Call", mandescr_originate); 02960 ast_manager_register2("Command", EVENT_FLAG_COMMAND, action_command, "Execute Asterisk CLI Command", mandescr_command ); 02961 ast_manager_register2("ExtensionState", EVENT_FLAG_CALL, action_extensionstate, "Check Extension Status", mandescr_extensionstate ); 02962 ast_manager_register2("AbsoluteTimeout", EVENT_FLAG_CALL, action_timeout, "Set Absolute Timeout", mandescr_timeout ); 02963 ast_manager_register2("MailboxStatus", EVENT_FLAG_CALL, action_mailboxstatus, "Check Mailbox", mandescr_mailboxstatus ); 02964 ast_manager_register2("MailboxCount", EVENT_FLAG_CALL, action_mailboxcount, "Check Mailbox Message Count", mandescr_mailboxcount ); 02965 ast_manager_register2("ListCommands", 0, action_listcommands, "List available manager commands", mandescr_listcommands); 02966 ast_manager_register2("SendText", EVENT_FLAG_CALL, action_sendtext, "Send text message to channel", mandescr_sendtext); 02967 ast_manager_register2("UserEvent", EVENT_FLAG_USER, action_userevent, "Send an arbitrary event", mandescr_userevent); 02968 ast_manager_register2("WaitEvent", 0, action_waitevent, "Wait for an event to occur", mandescr_waitevent); 02969 02970 ast_cli_register_multiple(cli_manager, sizeof(cli_manager) / sizeof(struct ast_cli_entry)); 02971 ast_extension_state_add(NULL, NULL, manager_state_cb, NULL); 02972 registered = 1; 02973 /* Append placeholder event so master_eventq never runs dry */ 02974 append_event("Event: Placeholder\r\n\r\n", 0); 02975 } 02976 displayconnects = 1; 02977 cfg = ast_config_load("manager.conf"); 02978 if (!cfg) { 02979 ast_log(LOG_NOTICE, "Unable to open management configuration manager.conf. Call management disabled.\n"); 02980 return 0; 02981 } 02982 02983 /* default values */ 02984 memset(&ami_desc.sin, 0, sizeof(struct sockaddr_in)); 02985 memset(&amis_desc.sin, 0, sizeof(amis_desc.sin)); 02986 amis_desc.sin.sin_port = htons(5039); 02987 ami_desc.sin.sin_port = htons(DEFAULT_MANAGER_PORT); 02988 02989 ami_tls_cfg.enabled = 0; 02990 if (ami_tls_cfg.certfile) 02991 free(ami_tls_cfg.certfile); 02992 ami_tls_cfg.certfile = ast_strdup(AST_CERTFILE); 02993 if (ami_tls_cfg.cipher) 02994 free(ami_tls_cfg.cipher); 02995 ami_tls_cfg.cipher = ast_strdup(""); 02996 02997 for (var = ast_variable_browse(cfg, "general"); var; var = var->next) { 02998 val = var->value; 02999 if (!strcasecmp(var->name, "ssenable")) 03000 ami_tls_cfg.enabled = ast_true(val); 03001 else if (!strcasecmp(var->name, "ssbindport")) 03002 amis_desc.sin.sin_port = htons(atoi(val)); 03003 else if (!strcasecmp(var->name, "ssbindaddr")) { 03004 if ((hp = ast_gethostbyname(val, &ahp))) { 03005 memcpy(&amis_desc.sin.sin_addr, hp->h_addr, sizeof(amis_desc.sin.sin_addr)); 03006 have_sslbindaddr = 1; 03007 } else { 03008 ast_log(LOG_WARNING, "Invalid bind address '%s'\n", val); 03009 } 03010 } else if (!strcasecmp(var->name, "sslcert")) { 03011 free(ami_tls_cfg.certfile); 03012 ami_tls_cfg.certfile = ast_strdup(val); 03013 } else if (!strcasecmp(var->name, "sslcipher")) { 03014 free(ami_tls_cfg.cipher); 03015 ami_tls_cfg.cipher = ast_strdup(val); 03016 } else if (!strcasecmp(var->name, "enabled")) { 03017 enabled = ast_true(val); 03018 } else if (!strcasecmp(var->name, "block-sockets")) { 03019 block_sockets = ast_true(val); 03020 } else if (!strcasecmp(var->name, "webenabled")) { 03021 webenabled = ast_true(val); 03022 } else if (!strcasecmp(var->name, "port")) { 03023 ami_desc.sin.sin_port = htons(atoi(val)); 03024 } else if (!strcasecmp(var->name, "bindaddr")) { 03025 if (!inet_aton(val, &ami_desc.sin.sin_addr)) { 03026 ast_log(LOG_WARNING, "Invalid address '%s' specified, using 0.0.0.0\n", val); 03027 memset(&ami_desc.sin.sin_addr, 0, sizeof(ami_desc.sin.sin_addr)); 03028 } 03029 } else if (!strcasecmp(var->name, "displayconnects")) { 03030 displayconnects = ast_true(val); 03031 } else if (!strcasecmp(var->name, "timestampevents")) { 03032 timestampevents = ast_true(val); 03033 } else if (!strcasecmp(var->name, "debug")) { 03034 manager_debug = ast_true(val); 03035 } else if (!strcasecmp(var->name, "httptimeout")) { 03036 newhttptimeout = atoi(val); 03037 } else { 03038 ast_log(LOG_NOTICE, "Invalid keyword <%s> = <%s> in manager.conf [general]\n", 03039 var->name, val); 03040 } 03041 } 03042 03043 if (enabled) 03044 ami_desc.sin.sin_family = AF_INET; 03045 if (!have_sslbindaddr) 03046 amis_desc.sin.sin_addr = ami_desc.sin.sin_addr; 03047 if (ami_tls_cfg.enabled) 03048 amis_desc.sin.sin_family = AF_INET; 03049 03050 03051 AST_LIST_LOCK(&users); 03052 03053 while ((cat = ast_category_browse(cfg, cat))) { 03054 03055 if (!strcasecmp(cat, "general")) 03056 continue; 03057 03058 /* Look for an existing entry, if none found - create one and add it to the list */ 03059 if (!(user = get_manager_by_name_locked(cat))) { 03060 if (!(user = ast_calloc(1, sizeof(*user)))) 03061 break; 03062 /* Copy name over */ 03063 ast_copy_string(user->username, cat, sizeof(user->username)); 03064 /* Insert into list */ 03065 AST_LIST_INSERT_TAIL(&users, user, list); 03066 } 03067 03068 /* Make sure we keep this user and don't destroy it during cleanup */ 03069 user->keep = 1; 03070 03071 var = ast_variable_browse(cfg, cat); 03072 while (var) { 03073 if (!strcasecmp(var->name, "secret")) { 03074 if (user->secret) 03075 free(user->secret); 03076 user->secret = ast_strdup(var->value); 03077 } else if (!strcasecmp(var->name, "deny") ) { 03078 if (user->deny) 03079 free(user->deny); 03080 user->deny = ast_strdup(var->value); 03081 } else if (!strcasecmp(var->name, "permit") ) { 03082 if (user->permit) 03083 free(user->permit); 03084 user->permit = ast_strdup(var->value); 03085 } else if (!strcasecmp(var->name, "read") ) { 03086 if (user->read) 03087 free(user->read); 03088 user->read = ast_strdup(var->value); 03089 } else if (!strcasecmp(var->name, "write") ) { 03090 if (user->write) 03091 free(user->write); 03092 user->write = ast_strdup(var->value); 03093 } else if (!strcasecmp(var->name, "displayconnects") ) 03094 user->displayconnects = ast_true(var->value); 03095 else { 03096 if (option_debug) 03097 ast_log(LOG_DEBUG, "%s is an unknown option.\n", var->name); 03098 } 03099 var = var->next; 03100 } 03101 } 03102 03103 /* Perform cleanup - essentially prune out old users that no longer exist */ 03104 AST_LIST_TRAVERSE_SAFE_BEGIN(&users, user, list) { 03105 if (user->keep) { /* valid record. clear flag for the next round */ 03106 user->keep = 0; 03107 continue; 03108 } 03109 /* We do not need to keep this user so take them out of the list */ 03110 AST_LIST_REMOVE_CURRENT(&users, list); 03111 /* Free their memory now */ 03112 if (user->secret) 03113 free(user->secret); 03114 if (user->deny) 03115 free(user->deny); 03116 if (user->permit) 03117 free(user->permit); 03118 if (user->read) 03119 free(user->read); 03120 if (user->write) 03121 free(user->write); 03122 free(user); 03123 } 03124 AST_LIST_TRAVERSE_SAFE_END 03125 03126 AST_LIST_UNLOCK(&users); 03127 03128 ast_config_destroy(cfg); 03129 03130 if (webenabled && enabled) { 03131 if (!webregged) { 03132 ast_http_uri_link(&rawmanuri); 03133 ast_http_uri_link(&manageruri); 03134 ast_http_uri_link(&managerxmluri); 03135 webregged = 1; 03136 } 03137 } else { 03138 if (webregged) { 03139 ast_http_uri_unlink(&rawmanuri); 03140 ast_http_uri_unlink(&manageruri); 03141 ast_http_uri_unlink(&managerxmluri); 03142 webregged = 0; 03143 } 03144 } 03145 03146 if (newhttptimeout > 0) 03147 httptimeout = newhttptimeout; 03148 03149 server_start(&ami_desc); 03150 if (ssl_setup(amis_desc.tls_cfg)) 03151 server_start(&amis_desc); 03152 return 0; 03153 }
|
|
|
Definition at line 3155 of file manager.c. References EVENT_FLAG_SYSTEM, init_manager(), and manager_event. 03156 { 03157 manager_event(EVENT_FLAG_SYSTEM, "Reload", "Message: Reload Requested\r\n"); 03158 return init_manager(); 03159 }
|
|
|
|
|
|
Definition at line 141 of file manager.h. Referenced by action_userevent(), ast_rtp_read(), handle_request_info(), handle_request_notify(), handle_request_subscribe(), handle_soft_key_event_message(), handle_stimulus_message(), process_cisco_dtmf(), and process_rfc2833(). |
|
|
Definition at line 141 of file manager.h. Referenced by ast_smdi_mwi_set(), ast_smdi_mwi_unset(), handle_save_dialplan(), and loadModule(). |
|
|
Definition at line 157 of file manager.h. Referenced by __oh323_new(), add_codec_to_sdp(), ast_cdr_getvar(), ast_cli_netstats(), ast_openvstream(), ast_request(), ast_rtp_write(), ast_streamfile(), get_filestream(), gtalk_new(), handle_open_receive_channel_ack_message(), iax2_request(), jingle_new(), local_new(), mgcp_new(), setformat(), sip_new(), skinny_new(), transmit_connect(), and try_suggested_sip_codec(). |
|
|
Definition at line 141 of file manager.h. Referenced by __ast_read(), ss_thread(), and zt_indicate(). |
|
|
Definition at line 141 of file manager.h. Referenced by find_line_by_name(), and misdn_cfg_update_ptp(). |