diff options
-rwxr-xr-x | cli.c | 2 | ||||
-rwxr-xr-x | config.c | 15 | ||||
-rwxr-xr-x | include/asterisk/config.h | 13 | ||||
-rwxr-xr-x | include/asterisk/config_pvt.h | 1 | ||||
-rwxr-xr-x | loader.c | 4 |
5 files changed, 33 insertions, 2 deletions
@@ -337,7 +337,7 @@ static int handle_modlist(int fd, int argc, char *argv[]) ast_mutex_lock(&climodentrylock); climodentryfd = fd; ast_cli(fd, MODLIST_FORMAT2, "Module", "Description", "Use Count"); - ast_update_module_list(modlist_modentry); + ast_cli(fd,"%d modules loaded\n",ast_update_module_list(modlist_modentry)); climodentryfd = -1; ast_mutex_unlock(&climodentrylock); return RESULT_SUCCESS; @@ -431,6 +431,21 @@ struct ast_variable *ast_load_realtime(const char *family, ...) return res; } +struct ast_config *ast_load_realtime_multientry(const char *family, ...) +{ + struct ast_config_reg *reg; + char db[256]=""; + char table[256]=""; + struct ast_config *res=NULL; + va_list ap; + va_start(ap, family); + reg = get_ast_cust_config_keyword(family, db, sizeof(db), table, sizeof(table)); + if (reg && reg->realtime_multi_func) + res = reg->realtime_multi_func(db, table, ap); + va_end(ap); + return res; +} + int ast_update_realtime(const char *family, const char *keyfield, const char *lookup, ...) { struct ast_config_reg *reg; diff --git a/include/asterisk/config.h b/include/asterisk/config.h index e377f7ce6..0812b98c9 100755 --- a/include/asterisk/config.h +++ b/include/asterisk/config.h @@ -116,6 +116,19 @@ int ast_category_exist(struct ast_config *config, char *category_name); */ struct ast_variable *ast_load_realtime(const char *family, ...); +//! Retrieve realtime configuration +/*! + * \param family which family/config to lookup + * \param keyfield which field to use as the key + * \param lookup which value to look for in the key field to match the entry. + * This will use builtin configuration backends to look up a particular + * entity in realtime and return a variable list of its parameters. Unlike + * the ast_load_realtime, this function can return more than one entry and + * is thus stored inside a taditional ast_config structure rather than + * just returning a linked list of variables. + */ +struct ast_config *ast_load_realtime_multientry(const char *family, ...); + //! Update realtime configuration /*! * \param family which family/config to be updated diff --git a/include/asterisk/config_pvt.h b/include/asterisk/config_pvt.h index 1e7238e7c..c79c26e19 100755 --- a/include/asterisk/config_pvt.h +++ b/include/asterisk/config_pvt.h @@ -31,6 +31,7 @@ struct ast_config_reg { char name[CONFIG_KEYWORD_STRLEN]; struct ast_config *(*static_func)(const char *database, const char *table, const char *, struct ast_config *,struct ast_category **,struct ast_variable **,int); struct ast_variable *(*realtime_func)(const char *database, const char *table, va_list ap); + struct ast_config *(*realtime_multi_func)(const char *database, const char *table, va_list ap); int (*update_func)(const char *database, const char *table, const char *keyfield, const char *entity, va_list ap); struct ast_config_reg *next; }; @@ -464,16 +464,18 @@ int ast_update_module_list(int (*modentry)(char *module, char *description, int { struct module *m; int unlock = -1; + int total_mod_loaded = 0; if (ast_mutex_trylock(&modlock)) unlock = 0; m = module_list; while(m) { modentry(m->resource, m->description(), m->usecount()); m = m->next; + total_mod_loaded++; } if (unlock) ast_mutex_unlock(&modlock); - return 0; + return total_mod_loaded; } int ast_loader_register(int (*v)(void)) |