diff --git a/cli.c b/cli.c index 3eb8dda799c22bfb0205835cd0361fe8ee79a4f2..983c25deab42f383e951587b0d4f345d3cd74e03 100755 --- a/cli.c +++ b/cli.c @@ -213,16 +213,20 @@ static int handle_unload(int fd, int argc, char *argv[]) AST_MUTEX_DEFINE_STATIC(climodentrylock); static int climodentryfd = -1; -static int modlist_modentry(char *module, char *description, int usecnt) +static int modlist_modentry(char *module, char *description, int usecnt, char *like) { - ast_cli(climodentryfd, MODLIST_FORMAT, module, description, usecnt); + /* Comparing the like with the module */ + if ( strstr(module,like) != NULL) { + ast_cli(climodentryfd, MODLIST_FORMAT, module, description, usecnt); + return 1; + + } return 0; } static char modlist_help[] = -"Usage: show modules\n" -" Shows Asterisk modules currently in use, and usage " -"statistics.\n"; +"Usage: show modules [like keyword]\n" +" Shows Asterisk modules currently in use, and usage statistics.\n"; static char version_help[] = "Usage: show version\n" @@ -332,12 +336,19 @@ static int handle_showuptime(int fd, int argc, char *argv[]) static int handle_modlist(int fd, int argc, char *argv[]) { - if (argc != 2) + char *like = ""; + if (argc == 3) return RESULT_SHOWUSAGE; + else if (argc >= 4) { + if ( strcmp(argv[2],"like") ) + return RESULT_SHOWUSAGE; + like = argv[3]; + } + ast_mutex_lock(&climodentrylock); climodentryfd = fd; ast_cli(fd, MODLIST_FORMAT2, "Module", "Description", "Use Count"); - ast_cli(fd,"%d modules loaded\n",ast_update_module_list(modlist_modentry)); + ast_cli(fd,"%d modules loaded\n",ast_update_module_list(modlist_modentry,like)); climodentryfd = -1; ast_mutex_unlock(&climodentrylock); return RESULT_SUCCESS; diff --git a/include/asterisk/module.h b/include/asterisk/module.h index 87aa590f91e21ffbc292a35acd718c784ff17c34..d8e5e1285c790cdbf1f7c6cd38fa441b08543d0d 100755 --- a/include/asterisk/module.h +++ b/include/asterisk/module.h @@ -114,7 +114,7 @@ void ast_update_use_count(void); * For each of the modules loaded, modentry will be executed with the resource, description, * and usecount values of each particular module. */ -int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt)); +int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt, char *like), char *like); //! Ask this procedure to be run with modules have been updated /*! diff --git a/loader.c b/loader.c index 09d406541a7403d2d6b5f5c2fd07ae497e820665..b042301bf00dbd2fc5fc0e8842ae278c2397b43d 100755 --- a/loader.c +++ b/loader.c @@ -314,16 +314,16 @@ int ast_load_resource(char *resource_name) ast_verbose(VERBOSE_PREFIX_1 "Loaded %s => (%s)\n", fn, m->description()); } - // add module 'm' to end of module_list chain - // so reload commands will be issued in same order modules were loaded + /* add module 'm' to end of module_list chain + so reload commands will be issued in same order modules were loaded */ m->next = NULL; if (module_list == NULL) { - // empty list so far, add at front + /* empty list so far, add at front */ module_list = m; } else { struct module *i; - // find end of chain, and add there + /* find end of chain, and add there */ for (i = module_list; i->next; i = i->next) ; i->next = m; @@ -460,7 +460,7 @@ void ast_update_use_count(void) } -int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt)) +int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt, char *like), char *like) { struct module *m; int unlock = -1; @@ -469,9 +469,8 @@ int ast_update_module_list(int (*modentry)(char *module, char *description, int unlock = 0; m = module_list; while(m) { - modentry(m->resource, m->description(), m->usecount()); + total_mod_loaded += modentry(m->resource, m->description(), m->usecount(), like); m = m->next; - total_mod_loaded++; } if (unlock) ast_mutex_unlock(&modlock);