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;
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;
*/
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
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;
};
{
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))