dect
/
asterisk
Archived
13
0
Fork 0

(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:
oej 2007-12-04 15:07:53 +00:00
parent dd414bec14
commit 5e8a73939a
2 changed files with 79 additions and 0 deletions

View File

@ -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.

View File

@ -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"),