#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.
Defines | |
#define | ast_manager_register(a, b, c, d) ast_manager_register2(a, b, c, d, NULL) |
#define | AST_MAX_MANHEADER_LEN 256 |
#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_LOG (1 << 2) |
#define | EVENT_FLAG_SYSTEM (1 << 0) |
#define | EVENT_FLAG_USER (1 << 6) |
#define | EVENT_FLAG_VERBOSE (1 << 3) |
Functions | |
int | ast_carefulwrite (int fd, char *s, int len, int timeoutms) |
int | ast_manager_register2 (const char *action, int authority, int(*func)(struct mansession *s, 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 | |
int | ast_manager_unregister (char *action) |
int char * | astman_get_header (struct message *m, char *var) |
ast_variable * | astman_get_variables (struct message *m) |
void | astman_send_ack (struct mansession *s, struct message *m, char *msg) |
void | astman_send_error (struct mansession *s, struct message *m, char *error) |
void | astman_send_response (struct mansession *s, struct message *m, char *resp, char *msg) |
int | init_manager (void) |
int | manager_event (int category, char *event, char *contents,...) __attribute__((format(printf |
int | reload_manager (void) |
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.
|
Definition at line 125 of file manager.h. Referenced by astdb_init(), init_manager(), and load_module(). |
|
|
|
Definition at line 59 of file manager.h. Referenced by session_do(). |
|
Definition at line 48 of file manager.h. Referenced by init_manager(). |
|
Definition at line 55 of file manager.h. Referenced by __login_exec(), action_agent_callback_login(), add_to_queue(), agent_hangup(), agent_logoff(), changethread(), load_module(), remove_from_queue(), ring_entry(), set_member_paused(), try_calling(), and update_status(). |
|
|
Definition at line 54 of file manager.h. Referenced by init_manager(). |
|
|
|
|
Definition at line 56 of file manager.h. Referenced by userevent_exec(). |
|
|
|
Called by Asterisk initialization Definition at line 1643 of file manager.c. References accept_thread(), action_command(), action_events(), action_extensionstate(), action_getvar(), action_hangup(), action_listcommands(), action_logoff(), action_mailboxcount(), action_mailboxstatus(), action_originate(), action_ping(), action_redirect(), action_setvar(), action_status(), action_timeout(), asock, ast_cli_register(), ast_config_destroy(), ast_config_load(), ast_extension_state_add(), ast_log(), ast_manager_register, ast_manager_register2(), ast_pthread_create, ast_true(), ast_variable_retrieve(), ast_verbose(), block_sockets, cfg, DEFAULT_MANAGER_PORT, displayconnects, enabled, EVENT_FLAG_CALL, EVENT_FLAG_COMMAND, LOG_NOTICE, LOG_WARNING, manager_state_cb(), mandescr_command, mandescr_events, mandescr_extensionstate, mandescr_getvar, mandescr_hangup, mandescr_listcommands, mandescr_logoff, mandescr_mailboxcount, mandescr_mailboxstatus, mandescr_originate, mandescr_ping, mandescr_redirect, mandescr_setvar, mandescr_timeout, option_verbose, portno, and t. Referenced by main(), and reload_manager(). 01644 { 01645 struct ast_config *cfg; 01646 char *val; 01647 int oldportno = portno; 01648 static struct sockaddr_in ba; 01649 int x = 1; 01650 if (!registered) { 01651 /* Register default actions */ 01652 ast_manager_register2("Ping", 0, action_ping, "Keepalive command", mandescr_ping); 01653 ast_manager_register2("Events", 0, action_events, "Control Event Flow", mandescr_events); 01654 ast_manager_register2("Logoff", 0, action_logoff, "Logoff Manager", mandescr_logoff); 01655 ast_manager_register2("Hangup", EVENT_FLAG_CALL, action_hangup, "Hangup Channel", mandescr_hangup); 01656 ast_manager_register("Status", EVENT_FLAG_CALL, action_status, "Lists channel status" ); 01657 ast_manager_register2("Setvar", EVENT_FLAG_CALL, action_setvar, "Set Channel Variable", mandescr_setvar ); 01658 ast_manager_register2("Getvar", EVENT_FLAG_CALL, action_getvar, "Gets a Channel Variable", mandescr_getvar ); 01659 ast_manager_register2("Redirect", EVENT_FLAG_CALL, action_redirect, "Redirect (transfer) a call", mandescr_redirect ); 01660 ast_manager_register2("Originate", EVENT_FLAG_CALL, action_originate, "Originate Call", mandescr_originate); 01661 ast_manager_register2("Command", EVENT_FLAG_COMMAND, action_command, "Execute Asterisk CLI Command", mandescr_command ); 01662 ast_manager_register2("ExtensionState", EVENT_FLAG_CALL, action_extensionstate, "Check Extension Status", mandescr_extensionstate ); 01663 ast_manager_register2("AbsoluteTimeout", EVENT_FLAG_CALL, action_timeout, "Set Absolute Timeout", mandescr_timeout ); 01664 ast_manager_register2("MailboxStatus", EVENT_FLAG_CALL, action_mailboxstatus, "Check Mailbox", mandescr_mailboxstatus ); 01665 ast_manager_register2("MailboxCount", EVENT_FLAG_CALL, action_mailboxcount, "Check Mailbox Message Count", mandescr_mailboxcount ); 01666 ast_manager_register2("ListCommands", 0, action_listcommands, "List available manager commands", mandescr_listcommands); 01667 01668 ast_cli_register(&show_mancmd_cli); 01669 ast_cli_register(&show_mancmds_cli); 01670 ast_cli_register(&show_manconn_cli); 01671 ast_extension_state_add(NULL, NULL, manager_state_cb, NULL); 01672 registered = 1; 01673 } 01674 portno = DEFAULT_MANAGER_PORT; 01675 displayconnects = 1; 01676 cfg = ast_config_load("manager.conf"); 01677 if (!cfg) { 01678 ast_log(LOG_NOTICE, "Unable to open management configuration manager.conf. Call management disabled.\n"); 01679 return 0; 01680 } 01681 memset(&ba, 0, sizeof(ba)); 01682 val = ast_variable_retrieve(cfg, "general", "enabled"); 01683 if (val) 01684 enabled = ast_true(val); 01685 01686 val = ast_variable_retrieve(cfg, "general", "block-sockets"); 01687 if(val) 01688 block_sockets = ast_true(val); 01689 01690 if ((val = ast_variable_retrieve(cfg, "general", "port"))) { 01691 if (sscanf(val, "%d", &portno) != 1) { 01692 ast_log(LOG_WARNING, "Invalid port number '%s'\n", val); 01693 portno = DEFAULT_MANAGER_PORT; 01694 } 01695 } else if ((val = ast_variable_retrieve(cfg, "general", "portno"))) { 01696 if (sscanf(val, "%d", &portno) != 1) { 01697 ast_log(LOG_WARNING, "Invalid port number '%s'\n", val); 01698 portno = DEFAULT_MANAGER_PORT; 01699 } 01700 ast_log(LOG_NOTICE, "Use of portno in manager.conf deprecated. Please use 'port=%s' instead.\n", val); 01701 } 01702 /* Parsing the displayconnects */ 01703 if ((val = ast_variable_retrieve(cfg, "general", "displayconnects"))) { 01704 displayconnects = ast_true(val);; 01705 } 01706 01707 01708 ba.sin_family = AF_INET; 01709 ba.sin_port = htons(portno); 01710 memset(&ba.sin_addr, 0, sizeof(ba.sin_addr)); 01711 01712 if ((val = ast_variable_retrieve(cfg, "general", "bindaddr"))) { 01713 if (!inet_aton(val, &ba.sin_addr)) { 01714 ast_log(LOG_WARNING, "Invalid address '%s' specified, using 0.0.0.0\n", val); 01715 memset(&ba.sin_addr, 0, sizeof(ba.sin_addr)); 01716 } 01717 } 01718 01719 if ((asock > -1) && ((portno != oldportno) || !enabled)) { 01720 #if 0 01721 /* Can't be done yet */ 01722 close(asock); 01723 asock = -1; 01724 #else 01725 ast_log(LOG_WARNING, "Unable to change management port / enabled\n"); 01726 #endif 01727 } 01728 ast_config_destroy(cfg); 01729 01730 /* If not enabled, do nothing */ 01731 if (!enabled) { 01732 return 0; 01733 } 01734 if (asock < 0) { 01735 asock = socket(AF_INET, SOCK_STREAM, 0); 01736 if (asock < 0) { 01737 ast_log(LOG_WARNING, "Unable to create socket: %s\n", strerror(errno)); 01738 return -1; 01739 } 01740 setsockopt(asock, SOL_SOCKET, SO_REUSEADDR, &x, sizeof(x)); 01741 if (bind(asock, (struct sockaddr *)&ba, sizeof(ba))) { 01742 ast_log(LOG_WARNING, "Unable to bind socket: %s\n", strerror(errno)); 01743 close(asock); 01744 asock = -1; 01745 return -1; 01746 } 01747 if (listen(asock, 2)) { 01748 ast_log(LOG_WARNING, "Unable to listen on socket: %s\n", strerror(errno)); 01749 close(asock); 01750 asock = -1; 01751 return -1; 01752 } 01753 if (option_verbose) 01754 ast_verbose("Asterisk Management interface listening on port %d\n", portno); 01755 ast_pthread_create(&t, NULL, accept_thread, NULL); 01756 } 01757 return 0; 01758 }
|
|
|
|
Called by Asterisk initialization Definition at line 1760 of file manager.c. References EVENT_FLAG_SYSTEM, init_manager(), and manager_event(). Referenced by ast_module_reload(), and main(). 01761 { 01762 manager_event(EVENT_FLAG_SYSTEM, "Reload", "Message: Reload Requested\r\n"); 01763 return init_manager(); 01764 }
|