mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 20:20:07 +00:00
add support for per-module version numbers
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5862 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
15
cli.c
15
cli.c
@@ -227,19 +227,18 @@ static int handle_unload(int fd, int argc, char *argv[])
|
|||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MODLIST_FORMAT "%-25s %-40.40s %-10d\n"
|
#define MODLIST_FORMAT "%-30s %-40.40s %-20.20s %-10d\n"
|
||||||
#define MODLIST_FORMAT2 "%-25s %-40.40s %-10s\n"
|
#define MODLIST_FORMAT2 "%-30s %-40.40s %-20.20s %-10s\n"
|
||||||
|
|
||||||
AST_MUTEX_DEFINE_STATIC(climodentrylock);
|
AST_MUTEX_DEFINE_STATIC(climodentrylock);
|
||||||
static int climodentryfd = -1;
|
static int climodentryfd = -1;
|
||||||
|
|
||||||
static int modlist_modentry(char *module, char *description, int usecnt, char *like)
|
static int modlist_modentry(const char *module, const char *description, int usecnt, const char *version, const char *like)
|
||||||
{
|
{
|
||||||
/* Comparing the like with the module */
|
/* Comparing the like with the module */
|
||||||
if ( strstr(module,like) != NULL) {
|
if (strstr(module, like) != NULL) {
|
||||||
ast_cli(climodentryfd, MODLIST_FORMAT, module, description, usecnt);
|
ast_cli(climodentryfd, MODLIST_FORMAT, module, description, version, usecnt);
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -385,8 +384,8 @@ static int handle_modlist(int fd, int argc, char *argv[])
|
|||||||
|
|
||||||
ast_mutex_lock(&climodentrylock);
|
ast_mutex_lock(&climodentrylock);
|
||||||
climodentryfd = fd;
|
climodentryfd = fd;
|
||||||
ast_cli(fd, MODLIST_FORMAT2, "Module", "Description", "Use Count");
|
ast_cli(fd, MODLIST_FORMAT2, "Module", "Description", "Version", "Use Count");
|
||||||
ast_cli(fd,"%d modules loaded\n",ast_update_module_list(modlist_modentry,like));
|
ast_cli(fd,"%d modules loaded\n", ast_update_module_list(modlist_modentry, like));
|
||||||
climodentryfd = -1;
|
climodentryfd = -1;
|
||||||
ast_mutex_unlock(&climodentrylock);
|
ast_mutex_unlock(&climodentrylock);
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
|
@@ -56,3 +56,8 @@ char *key()
|
|||||||
{
|
{
|
||||||
return ASTERISK_GPL_KEY;
|
return ASTERISK_GPL_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *version()
|
||||||
|
{
|
||||||
|
return "$Revision$";
|
||||||
|
}
|
||||||
|
@@ -66,6 +66,8 @@ char *key(void); /*! Return the below mentioned key, unmodified */
|
|||||||
*/
|
*/
|
||||||
int reload(void); /*! reload configs */
|
int reload(void); /*! reload configs */
|
||||||
|
|
||||||
|
const char *version(void);
|
||||||
|
|
||||||
#define ASTERISK_GPL_KEY \
|
#define ASTERISK_GPL_KEY \
|
||||||
"This paragraph is Copyright (C) 2000, Linux Support Services, Inc. \
|
"This paragraph is Copyright (C) 2000, Linux Support Services, Inc. \
|
||||||
In order for your module to load, it must return this key via a function \
|
In order for your module to load, it must return this key via a function \
|
||||||
@@ -112,9 +114,10 @@ void ast_update_use_count(void);
|
|||||||
/*!
|
/*!
|
||||||
* \param modentry a callback to an updater function
|
* \param modentry a callback to an updater function
|
||||||
* For each of the modules loaded, modentry will be executed with the resource, description,
|
* For each of the modules loaded, modentry will be executed with the resource, description,
|
||||||
* and usecount values of each particular module.
|
* version, and usecount values of each particular module.
|
||||||
*/
|
*/
|
||||||
int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt, char *like), char *like);
|
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *version, const char *like),
|
||||||
|
const char *like);
|
||||||
|
|
||||||
/*! Ask this procedure to be run with modules have been updated */
|
/*! Ask this procedure to be run with modules have been updated */
|
||||||
/*!
|
/*!
|
||||||
|
23
loader.c
23
loader.c
@@ -51,6 +51,7 @@ struct module {
|
|||||||
char *(*description)(void);
|
char *(*description)(void);
|
||||||
char *(*key)(void);
|
char *(*key)(void);
|
||||||
int (*reload)(void);
|
int (*reload)(void);
|
||||||
|
const char *(*version)(void);
|
||||||
void *lib;
|
void *lib;
|
||||||
char resource[256];
|
char resource[256];
|
||||||
struct module *next;
|
struct module *next;
|
||||||
@@ -252,6 +253,11 @@ int ast_module_reload(const char *name)
|
|||||||
return reloaded;
|
return reloaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *unknown_version(void)
|
||||||
|
{
|
||||||
|
return "--unknown--";
|
||||||
|
}
|
||||||
|
|
||||||
static int __load_resource(const char *resource_name, const struct ast_config *cfg)
|
static int __load_resource(const char *resource_name, const struct ast_config *cfg)
|
||||||
{
|
{
|
||||||
static char fn[256];
|
static char fn[256];
|
||||||
@@ -347,9 +353,17 @@ static int __load_resource(const char *resource_name, const struct ast_config *c
|
|||||||
ast_log(LOG_WARNING, "No key routine in module %s\n", fn);
|
ast_log(LOG_WARNING, "No key routine in module %s\n", fn);
|
||||||
errors++;
|
errors++;
|
||||||
}
|
}
|
||||||
|
|
||||||
m->reload = dlsym(m->lib, "reload");
|
m->reload = dlsym(m->lib, "reload");
|
||||||
if (m->reload == NULL)
|
if (m->reload == NULL)
|
||||||
m->reload = dlsym(m->lib, "_reload");
|
m->reload = dlsym(m->lib, "_reload");
|
||||||
|
|
||||||
|
m->version = dlsym(m->lib, "version");
|
||||||
|
if (m->version == NULL)
|
||||||
|
m->version = dlsym(m->lib, "_version");
|
||||||
|
if (m->version == NULL)
|
||||||
|
m->version = unknown_version;
|
||||||
|
|
||||||
if (!m->key || !(key = m->key())) {
|
if (!m->key || !(key = m->key())) {
|
||||||
ast_log(LOG_WARNING, "Key routine returned NULL in module %s\n", fn);
|
ast_log(LOG_WARNING, "Key routine returned NULL in module %s\n", fn);
|
||||||
key = NULL;
|
key = NULL;
|
||||||
@@ -549,20 +563,23 @@ void ast_update_use_count(void)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int ast_update_module_list(int (*modentry)(char *module, char *description, int usecnt, char *like), char *like)
|
int ast_update_module_list(int (*modentry)(const char *module, const char *description, int usecnt, const char *version, const char *like),
|
||||||
|
const char *like)
|
||||||
{
|
{
|
||||||
struct module *m;
|
struct module *m;
|
||||||
int unlock = -1;
|
int unlock = -1;
|
||||||
int total_mod_loaded = 0;
|
int total_mod_loaded = 0;
|
||||||
|
|
||||||
if (ast_mutex_trylock(&modlock))
|
if (ast_mutex_trylock(&modlock))
|
||||||
unlock = 0;
|
unlock = 0;
|
||||||
m = module_list;
|
m = module_list;
|
||||||
while(m) {
|
while (m) {
|
||||||
total_mod_loaded += modentry(m->resource, m->description(), m->usecount(), like);
|
total_mod_loaded += modentry(m->resource, m->description(), m->usecount(), m->version(), like);
|
||||||
m = m->next;
|
m = m->next;
|
||||||
}
|
}
|
||||||
if (unlock)
|
if (unlock)
|
||||||
ast_mutex_unlock(&modlock);
|
ast_mutex_unlock(&modlock);
|
||||||
|
|
||||||
return total_mod_loaded;
|
return total_mod_loaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user