update
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4632 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
0f9eecd3c9
commit
d4f6fb8e8c
|
@ -48,7 +48,7 @@
|
|||
#endif
|
||||
|
||||
#define FREESWITCH_PEN "27880"
|
||||
#define FREESWITCH_MIB ".1.3.6.1.4.1." FREESWITCH_PEN
|
||||
#define FREESWITCH_OID_PREFIX ".1.3.6.1.4.1." FREESWITCH_PEN
|
||||
#define FREESWITCH_ITAD "543"
|
||||
|
||||
|
||||
|
|
|
@ -240,7 +240,7 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(char *cmd, char *arg, switch_
|
|||
\param fname the file name of the module
|
||||
\return the status
|
||||
*/
|
||||
SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname);
|
||||
SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname, switch_bool_t runtime);
|
||||
|
||||
/* Prototypes of module interface functions */
|
||||
|
||||
|
|
|
@ -128,6 +128,11 @@ SWITCH_BEGIN_EXTERN_C
|
|||
#define SWITCH_BITS_PER_BYTE 8
|
||||
typedef uint8_t switch_byte_t;
|
||||
|
||||
typedef enum {
|
||||
SWITCH_FALSE = 0,
|
||||
SWITCH_TRUE = 1
|
||||
} switch_bool_t;
|
||||
|
||||
typedef enum {
|
||||
SSM_NA,
|
||||
SSM_PRONOUNCED,
|
||||
|
|
|
@ -158,8 +158,11 @@ static switch_status_t load_function(char *mod, switch_core_session_t *session,
|
|||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) mod);
|
||||
stream->write_function(stream, "OK\n");
|
||||
if (switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) mod, SWITCH_TRUE) == SWITCH_STATUS_SUCCESS) {
|
||||
stream->write_function(stream, "OK\n");
|
||||
} else {
|
||||
stream->write_function(stream, "ERROR\n");
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -96,8 +96,22 @@ static void *switch_loadable_module_exec(switch_thread_t *thread, void *obj)
|
|||
}
|
||||
|
||||
|
||||
static void switch_loadable_module_runtime(void)
|
||||
{
|
||||
switch_hash_index_t *hi;
|
||||
void *val;
|
||||
switch_loadable_module_t *module;
|
||||
|
||||
|
||||
for (hi = switch_hash_first(loadable_modules.pool, loadable_modules.module_hash); hi; hi = switch_hash_next(hi)) {
|
||||
switch_hash_this(hi, NULL, NULL, &val);
|
||||
module = (switch_loadable_module_t *) val;
|
||||
|
||||
if (module->switch_module_runtime) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Starting runtime thread for %s\n", module->module_interface->module_name);
|
||||
switch_core_launch_thread(switch_loadable_module_exec, module, loadable_modules.pool);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static switch_status_t switch_loadable_module_process(char *key, switch_loadable_module_t *new_module)
|
||||
{
|
||||
|
@ -349,13 +363,20 @@ static switch_status_t switch_loadable_module_process(char *key, switch_loadable
|
|||
if (!ptr->relative_oid) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to load management interface from %s due to no interface name.\n", key);
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Adding Management interface '%s'\n", ptr->relative_oid);
|
||||
if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "type", "management");
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "name", "%s", ptr->relative_oid);
|
||||
switch_event_fire(&event);
|
||||
if (switch_core_hash_find(loadable_modules.management_hash, ptr->relative_oid)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
|
||||
"Failed to load management interface %s. OID %s already exists\n", key, ptr->relative_oid);
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE,
|
||||
"Adding Management interface '%s' OID[%s.%s]\n", key, FREESWITCH_OID_PREFIX, ptr->relative_oid);
|
||||
switch_core_hash_insert(loadable_modules.management_hash, ptr->relative_oid, (const void *) ptr);
|
||||
if (switch_event_create(&event, SWITCH_EVENT_MODULE_LOAD) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "type", "management");
|
||||
switch_event_add_header(event, SWITCH_STACK_BOTTOM, "name", "%s", ptr->relative_oid);
|
||||
switch_event_fire(&event);
|
||||
}
|
||||
}
|
||||
switch_core_hash_insert(loadable_modules.management_hash, ptr->relative_oid, (const void *) ptr);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -429,10 +450,6 @@ static switch_status_t switch_loadable_module_load_file(char *filename, switch_l
|
|||
|
||||
module->lib = dso;
|
||||
|
||||
if (module->switch_module_runtime) {
|
||||
switch_core_launch_thread(switch_loadable_module_exec, module, loadable_modules.pool);
|
||||
}
|
||||
|
||||
*new_module = module;
|
||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Successfully Loaded [%s]\n", module_interface->module_name);
|
||||
|
||||
|
@ -440,7 +457,7 @@ static switch_status_t switch_loadable_module_load_file(char *filename, switch_l
|
|||
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname)
|
||||
SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname, switch_bool_t runtime)
|
||||
{
|
||||
switch_size_t len = 0;
|
||||
char *path;
|
||||
|
@ -485,10 +502,15 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, ch
|
|||
}
|
||||
|
||||
if ((status = switch_loadable_module_load_file(path, &new_module) == SWITCH_STATUS_SUCCESS)) {
|
||||
return switch_loadable_module_process((char *) file, new_module);
|
||||
} else {
|
||||
return status;
|
||||
if ((status = switch_loadable_module_process((char *) file, new_module)) == SWITCH_STATUS_SUCCESS && runtime) {
|
||||
if (new_module->switch_module_runtime) {
|
||||
switch_core_launch_thread(switch_loadable_module_exec, new_module, loadable_modules.pool);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return status;
|
||||
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_loadable_module_build_dynamic(char *filename,
|
||||
|
@ -625,7 +647,7 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
|
|||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val);
|
||||
continue;
|
||||
}
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) val);
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) val, SWITCH_FALSE);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -645,7 +667,7 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
|
|||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CONSOLE, "Invalid extension for %s\n", val);
|
||||
continue;
|
||||
}
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) val);
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) val, SWITCH_FALSE);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
@ -685,11 +707,12 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_init()
|
|||
continue;
|
||||
}
|
||||
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) fname);
|
||||
switch_loadable_module_load_module((char *) SWITCH_GLOBAL_dirs.mod_dir, (char *) fname, SWITCH_FALSE);
|
||||
}
|
||||
apr_dir_close(module_dir_handle);
|
||||
}
|
||||
|
||||
switch_loadable_module_runtime();
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue