Add "show hints" to CLI (bug #3631)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5064 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.2-netsec
Mark Spencer 21 years ago
parent 8df2830434
commit 56e13139d4

58
pbx.c

@ -1393,6 +1393,7 @@ static int pbx_extension_helper(struct ast_channel *c, struct ast_context *con,
}
/*--- ast_hint_extension: Find hint for given extension in context */
static struct ast_exten *ast_hint_extension(struct ast_channel *c, const char *context, const char *exten)
{
struct ast_exten *e;
@ -1730,6 +1731,7 @@ int ast_extension_state_del(int id, ast_state_cb_type callback)
return -1;
}
/*--- ast_add_hint: Add hint to hint list, check initial extension state */
static int ast_add_hint(struct ast_exten *e)
{
struct ast_hint *list;
@ -1744,17 +1746,24 @@ static int ast_add_hint(struct ast_exten *e)
while (list) {
if (list->exten == e) {
ast_mutex_unlock(&hintlock);
if (option_debug > 1)
ast_log(LOG_DEBUG, "HINTS: Not re-adding existing hint %s: %s\n", ast_get_extension_name(e), ast_get_extension_app(e));
return -1;
}
list = list->next;
}
if (option_debug > 1)
ast_log(LOG_DEBUG, "HINTS: Adding hint %s: %s\n", ast_get_extension_name(e), ast_get_extension_app(e));
list = malloc(sizeof(struct ast_hint));
if (!list) {
ast_mutex_unlock(&hintlock);
if (option_debug > 1)
ast_log(LOG_DEBUG, "HINTS: Out of memory...\n");
return -1;
}
/* Initialize and insert new item */
/* Initialize and insert new item at the top */
memset(list, 0, sizeof(struct ast_hint));
list->exten = e;
list->laststate = ast_extension_state2(e);
@ -1765,6 +1774,7 @@ static int ast_add_hint(struct ast_exten *e)
return 0;
}
/*--- ast_change_hint: Change hint for an extension */
static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
{
struct ast_hint *list;
@ -1785,6 +1795,7 @@ static int ast_change_hint(struct ast_exten *oe, struct ast_exten *ne)
return -1;
}
/*--- ast_remove_hint: Remove hint from extension */
static int ast_remove_hint(struct ast_exten *e)
{
/* Cleanup the Notifys if hint is removed */
@ -1829,6 +1840,7 @@ static int ast_remove_hint(struct ast_exten *e)
}
/*--- ast_get_hint: Get hint for channel */
int ast_get_hint(char *hint, int hintsize, char *name, int namesize, struct ast_channel *c, const char *context, const char *exten)
{
struct ast_exten *e;
@ -2567,6 +2579,11 @@ static char show_switches_help[] =
"Usage: show switches\n"
" Show registered switches\n";
static char show_hints_help[] =
"Usage: show hints\n"
" Show registered hints\n";
/*
* IMPLEMENTATION OF CLI FUNCTIONS IS IN THE SAME ORDER AS COMMANDS HELPS
*
@ -2690,6 +2707,35 @@ static int handle_show_application(int fd, int argc, char *argv[])
return RESULT_SUCCESS;
}
/*--- handle_show_hints: CLI support for listing registred dial plan hints */
static int handle_show_hints(int fd, int argc, char *argv[])
{
struct ast_hint *hint;
int num = 0;
if (!hints) {
ast_cli(fd, "There are no registered dialplan hints\n");
return RESULT_SUCCESS;
}
/* ... we have hints ... */
ast_cli(fd, "\n -= Registered Asterisk Dial Plan Hints =-\n");
if (ast_mutex_lock(&hintlock)) {
ast_log(LOG_ERROR, "Unable to lock hints\n");
return -1;
}
hint = hints;
while (hint) {
ast_cli(fd, " %-20.20s: %-20.20s State %2d\n", ast_get_extension_name(hint->exten), ast_get_extension_app(hint->exten), hint->laststate );
num++;
hint = hint->next;
}
ast_cli(fd, "----------------\n");
ast_cli(fd, "- %d hints registred\n", num);
ast_mutex_unlock(&hintlock);
return RESULT_SUCCESS;
}
/*--- handle_show_switches: CLI support for listing registred dial plan switches */
static int handle_show_switches(int fd, int argc, char *argv[])
{
struct ast_switch *sw;
@ -3118,6 +3164,12 @@ static struct ast_cli_entry show_switches_cli =
handle_show_switches, "Show alternative switches",
show_switches_help, NULL };
static struct ast_cli_entry show_hints_cli =
{ { "show", "hints", NULL },
handle_show_hints, "Show dial plan hints",
show_hints_help, NULL };
int ast_unregister_application(const char *app) {
struct ast_app *tmp, *tmpl = NULL;
if (ast_mutex_lock(&applock)) {
@ -4220,9 +4272,10 @@ int ast_add_extension2(struct ast_context *con,
con->root = tmp;
}
ast_mutex_unlock(&con->lock);
/* And immediately return success. */
if (tmp->priority == PRIORITY_HINT)
ast_add_hint(tmp);
ast_add_hint(tmp);
LOG;
return 0;
@ -5366,6 +5419,7 @@ int load_pbx(void)
ast_cli_register(&show_application_cli);
ast_cli_register(&show_dialplan_cli);
ast_cli_register(&show_switches_cli);
ast_cli_register(&show_hints_cli);
/* Register builtin applications */
for (x=0; x<sizeof(builtins) / sizeof(struct pbx_builtin); x++) {

Loading…
Cancel
Save