diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-04-04 16:18:11 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-04-04 16:18:11 +0000 |
commit | 09571d527a33c50909ddeee535ea73e474c9c6c8 (patch) | |
tree | 8590a347463f9c015cf2e449b3817cf5d0b1fb4a /manager.c | |
parent | c6c5ab0b39ddcf83afcec36e2640d941cee40e61 (diff) |
make the manager interface list the privileges required for each command (bug #3917)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5385 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'manager.c')
-rwxr-xr-x | manager.c | 28 |
1 files changed, 20 insertions, 8 deletions
@@ -79,6 +79,7 @@ static struct permalias { { EVENT_FLAG_AGENT, "agent" }, { EVENT_FLAG_USER, "user" }, { -1, "all" }, + { 0, "none" }, }; static struct mansession *sessions = NULL; @@ -109,6 +110,7 @@ int ast_carefulwrite(int fd, char *s, int len, int timeoutms) return res; } +/*--- authority_to_str: Convert authority code to string with serveral options */ static char *authority_to_str(int authority, char *res, int reslen) { int running_total = 0, i; @@ -171,14 +173,17 @@ static int handle_showmancmd(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } +/*--- handle_showmancmds: CLI command */ +/* Should change to "manager show commands" */ static int handle_showmancmds(int fd, int argc, char *argv[]) { struct manager_action *cur = first_action; char authority[80]; - char *format = " %-15.15s %-10.10s %-45.45s\n"; + char *format = " %-15.15s %-15.15s %-55.55s\n"; ast_mutex_lock(&actionlock); ast_cli(fd, format, "Action", "Privilege", "Synopsis"); + ast_cli(fd, format, "------", "---------", "--------"); while (cur) { /* Walk the list of actions */ ast_cli(fd, format, cur->action, authority_to_str(cur->authority, authority, sizeof(authority) -1), cur->synopsis); cur = cur->next; @@ -188,6 +193,8 @@ static int handle_showmancmds(int fd, int argc, char *argv[]) return RESULT_SUCCESS; } +/*--- handle_showmanconn: CLI command show manager connected */ +/* Should change to "manager show connected" */ static int handle_showmanconn(int fd, int argc, char *argv[]) { struct mansession *s; @@ -497,6 +504,7 @@ static int action_listcommands(struct mansession *s, struct message *m) { struct manager_action *cur = first_action; char idText[256] = ""; + char temp[BUFSIZ]; char *id = astman_get_header(m,"ActionID"); if (id && !ast_strlen_zero(id)) @@ -506,7 +514,7 @@ static int action_listcommands(struct mansession *s, struct message *m) ast_mutex_lock(&actionlock); while (cur) { /* Walk the list of actions */ if ((s->writeperm & cur->authority) == cur->authority) - ast_cli(s->fd, "%s: %s\r\n", cur->action, cur->synopsis); + ast_cli(s->fd, "%s: %s (Priv: %s)\r\n", cur->action, cur->synopsis, authority_to_str(cur->authority, temp, sizeof(temp)) ); cur = cur->next; } ast_mutex_unlock(&actionlock); @@ -718,6 +726,7 @@ static int action_status(struct mansession *s, struct message *m) } ast_cli(s->fd, "Event: Status\r\n" + "Privilege: Call\r\n" "Channel: %s\r\n" "CallerID: %s\r\n" "CallerIDName: %s\r\n" @@ -740,6 +749,7 @@ static int action_status(struct mansession *s, struct message *m) } else { ast_cli(s->fd, "Event: Status\r\n" + "Privilege: Call\r\n" "Channel: %s\r\n" "CallerID: %s\r\n" "CallerIDName: %s\r\n" @@ -830,7 +840,7 @@ static int action_command(struct mansession *s, struct message *m) ast_mutex_lock(&s->lock); s->blocking = 1; ast_mutex_unlock(&s->lock); - ast_cli(s->fd, "Response: Follows\r\n"); + ast_cli(s->fd, "Response: Follows\r\nPrivilege: Command\r\n"); if (id && !ast_strlen_zero(id)) ast_cli(s->fd, "ActionID: %s\r\n", id); /* FIXME: Wedge a ActionID response in here, waiting for later changes */ @@ -1375,6 +1385,7 @@ static void *accept_thread(void *ignore) return NULL; } +/*--- manager_event: Send AMI event to client */ int manager_event(int category, char *event, char *fmt, ...) { struct mansession *s; @@ -1388,6 +1399,7 @@ int manager_event(int category, char *event, char *fmt, ...) ast_mutex_lock(&s->lock); if (!s->blocking) { ast_cli(s->fd, "Event: %s\r\n", event); + ast_cli(s->fd, "Privilege: %s\r\n", authority_to_str(category, tmp, sizeof(tmp))); va_start(ap, fmt); vsnprintf(tmp, sizeof(tmp), fmt, ap); va_end(ap); @@ -1503,16 +1515,16 @@ int init_manager(void) int x = 1; if (!registered) { /* Register default actions */ - ast_manager_register2("Ping", 0, action_ping, "Ping", mandescr_ping); - ast_manager_register2("Events", 0, action_events, "Contol Event Flow", mandescr_events); + ast_manager_register2("Ping", 0, action_ping, "Keepalive command", mandescr_ping); + ast_manager_register2("Events", 0, action_events, "Control Event Flow", mandescr_events); ast_manager_register2("Logoff", 0, action_logoff, "Logoff Manager", mandescr_logoff); ast_manager_register2("Hangup", EVENT_FLAG_CALL, action_hangup, "Hangup Channel", mandescr_hangup); - ast_manager_register( "Status", EVENT_FLAG_CALL, action_status, "Status" ); + ast_manager_register( "Status", EVENT_FLAG_CALL, action_status, "Lists channel status" ); ast_manager_register2( "Setvar", EVENT_FLAG_CALL, action_setvar, "Set Channel Variable", mandescr_setvar ); ast_manager_register2( "Getvar", EVENT_FLAG_CALL, action_getvar, "Gets a Channel Variable", mandescr_getvar ); - ast_manager_register( "Redirect", EVENT_FLAG_CALL, action_redirect, "Redirect" ); + ast_manager_register( "Redirect", EVENT_FLAG_CALL, action_redirect, "Redirect (transfer) a call" ); ast_manager_register2("Originate", EVENT_FLAG_CALL, action_originate, "Originate Call", mandescr_originate); - ast_manager_register2( "Command", EVENT_FLAG_COMMAND, action_command, "Execute Command", mandescr_command ); + ast_manager_register2( "Command", EVENT_FLAG_COMMAND, action_command, "Execute Asterisk CLI Command", mandescr_command ); ast_manager_register2( "ExtensionState", EVENT_FLAG_CALL, action_extensionstate, "Check Extension Status", mandescr_extensionstate ); ast_manager_register2( "AbsoluteTimeout", EVENT_FLAG_CALL, action_timeout, "Set Absolute Timeout", mandescr_timeout ); ast_manager_register2( "MailboxStatus", EVENT_FLAG_CALL, action_mailboxstatus, "Check Mailbox", mandescr_mailboxstatus ); |