(closes issue #11422)
Reported by: eliel Patches: core.show.hint.patch uploaded by eliel (license 64) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@90853 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
dd414bec14
commit
5e8a73939a
1
CHANGES
1
CHANGES
|
@ -48,6 +48,7 @@ Dialplan functions
|
|||
|
||||
CLI Changes
|
||||
-----------
|
||||
* New CLI command "core show hint" (usage: core show hint <exten>)
|
||||
* New CLI command "core show settings"
|
||||
* Added 'core show channels count' CLI command.
|
||||
* Added the ability to set the core debug and verbose values on a per-file basis.
|
||||
|
|
78
main/pbx.c
78
main/pbx.c
|
@ -4201,6 +4201,83 @@ static char *handle_show_hints(struct ast_cli_entry *e, int cmd, struct ast_cli_
|
|||
return CLI_SUCCESS;
|
||||
}
|
||||
|
||||
/*! \brief autocomplete for CLI command 'core show hint' */
|
||||
static char *complete_core_show_hint(const char *line, const char *word, int pos, int state)
|
||||
{
|
||||
struct ast_hint *hint;
|
||||
char *ret = NULL;
|
||||
int which = 0;
|
||||
int wordlen;
|
||||
|
||||
if (pos != 3)
|
||||
return NULL;
|
||||
|
||||
wordlen = strlen(word);
|
||||
|
||||
AST_RWLIST_RDLOCK(&hints);
|
||||
/* walk through all hints */
|
||||
AST_RWLIST_TRAVERSE(&hints, hint, list) {
|
||||
if (!strncasecmp(word, ast_get_extension_name(hint->exten), wordlen) && ++which > state) {
|
||||
ret = ast_strdup(ast_get_extension_name(hint->exten));
|
||||
break;
|
||||
}
|
||||
}
|
||||
AST_RWLIST_UNLOCK(&hints);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*! \brief handle_show_hint: CLI support for listing registered dial plan hint */
|
||||
static char *handle_show_hint(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
||||
{
|
||||
struct ast_hint *hint;
|
||||
int watchers;
|
||||
int num = 0, extenlen;
|
||||
struct ast_state_cb *watcher;
|
||||
|
||||
switch (cmd) {
|
||||
case CLI_INIT:
|
||||
e->command = "core show hint";
|
||||
e->usage =
|
||||
"Usage: core show hint <exten>\n"
|
||||
" List registered hint\n";
|
||||
return NULL;
|
||||
case CLI_GENERATE:
|
||||
return complete_core_show_hint(a->line, a->word, a->pos, a->n);
|
||||
}
|
||||
|
||||
if (a->argc < 4)
|
||||
return CLI_SHOWUSAGE;
|
||||
|
||||
AST_RWLIST_RDLOCK(&hints);
|
||||
if (AST_RWLIST_EMPTY(&hints)) {
|
||||
ast_cli(a->fd, "There are no registered dialplan hints\n");
|
||||
AST_RWLIST_UNLOCK(&hints);
|
||||
return CLI_SUCCESS;
|
||||
}
|
||||
extenlen = strlen(a->argv[3]);
|
||||
AST_RWLIST_TRAVERSE(&hints, hint, list) {
|
||||
if (!strncasecmp(ast_get_extension_name(hint->exten), a->argv[3], extenlen)) {
|
||||
watchers = 0;
|
||||
for (watcher = hint->callbacks; watcher; watcher = watcher->next)
|
||||
watchers++;
|
||||
ast_cli(a->fd, " %20s@%-20.20s: %-20.20s State:%-15.15s Watchers %2d\n",
|
||||
ast_get_extension_name(hint->exten),
|
||||
ast_get_context_name(ast_get_extension_context(hint->exten)),
|
||||
ast_get_extension_app(hint->exten),
|
||||
ast_extension_state2str(hint->laststate), watchers);
|
||||
num++;
|
||||
}
|
||||
}
|
||||
AST_RWLIST_UNLOCK(&hints);
|
||||
if (!num)
|
||||
ast_cli(a->fd, "No hints matching extension %s\n", a->argv[3]);
|
||||
else
|
||||
ast_cli(a->fd, "%d hint%s matching extension %s\n", num, (num!=1 ? "s":""), a->argv[3]);
|
||||
return CLI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
/*! \brief handle_show_switches: CLI support for listing registered dial plan switches */
|
||||
static char *handle_show_switches(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
|
||||
{
|
||||
|
@ -4929,6 +5006,7 @@ static struct ast_cli_entry pbx_cli[] = {
|
|||
AST_CLI_DEFINE(handle_show_functions, "Shows registered dialplan functions"),
|
||||
AST_CLI_DEFINE(handle_show_switches, "Show alternative switches"),
|
||||
AST_CLI_DEFINE(handle_show_hints, "Show dialplan hints"),
|
||||
AST_CLI_DEFINE(handle_show_hint, "Show dialplan hint"),
|
||||
AST_CLI_DEFINE(handle_show_globals, "Show global dialplan variables"),
|
||||
AST_CLI_DEFINE(handle_show_function, "Describe a specific dialplan function"),
|
||||
AST_CLI_DEFINE(handle_show_application, "Describe a specific dialplan application"),
|
||||
|
|
Reference in New Issue