diff --git a/src/include/switch_loadable_module.h b/src/include/switch_loadable_module.h index 36817e96c3..a703801440 100644 --- a/src/include/switch_loadable_module.h +++ b/src/include/switch_loadable_module.h @@ -241,6 +241,13 @@ SWITCH_DECLARE(switch_status_t) switch_api_execute(const char *cmd, const char * */ SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, char *fname, switch_bool_t runtime, const char **err); +/*! + \brief Check if a module is loaded + \param mod the module name + \return the status +*/ +SWITCH_DECLARE(switch_status_t) switch_loadable_module_exists(const char *mod); + /*! \brief Unoad a module \param dir the directory where the module resides diff --git a/src/mod/applications/mod_commands/mod_commands.c b/src/mod/applications/mod_commands/mod_commands.c index 47d79e6958..c1405aec0f 100644 --- a/src/mod/applications/mod_commands/mod_commands.c +++ b/src/mod/applications/mod_commands/mod_commands.c @@ -196,6 +196,21 @@ SWITCH_STANDARD_API(url_decode_function) } +SWITCH_STANDARD_API(module_exists_function) +{ + if (!switch_strlen_zero(cmd)) { + if(switch_loadable_module_exists(cmd) == SWITCH_STATUS_SUCCESS) { + stream->write_function(stream, "true"); + } else { + stream->write_function(stream, "false"); + + } + } + + return SWITCH_STATUS_SUCCESS; +} + + SWITCH_STANDARD_API(url_encode_function) { char *reply = ""; @@ -2431,6 +2446,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_commands_load) SWITCH_ADD_API(commands_api_interface, "user_data", "find user data", user_data_function, "@ [var|param] "); SWITCH_ADD_API(commands_api_interface, "url_encode", "url encode a string", url_encode_function, ""); SWITCH_ADD_API(commands_api_interface, "url_decode", "url decode a string", url_decode_function, ""); + SWITCH_ADD_API(commands_api_interface, "module_exists", "check if module exists", module_exists_function, ""); /* indicate that the module should continue to be loaded */ return SWITCH_STATUS_NOUNLOAD; diff --git a/src/switch_loadable_module.c b/src/switch_loadable_module.c index 47c1ba57c4..e5be4654da 100644 --- a/src/switch_loadable_module.c +++ b/src/switch_loadable_module.c @@ -830,7 +830,24 @@ SWITCH_DECLARE(switch_status_t) switch_loadable_module_load_module(char *dir, ch } +SWITCH_DECLARE(switch_status_t) switch_loadable_module_exists(const char *mod) +{ + switch_status_t status; + if (switch_strlen_zero(mod)) { + return SWITCH_STATUS_FALSE; + } + + switch_mutex_lock(loadable_modules.mutex); + if (switch_core_hash_find(loadable_modules.module_hash, mod)) { + status = SWITCH_STATUS_SUCCESS; + } else { + status = SWITCH_STATUS_FALSE; + } + switch_mutex_unlock(loadable_modules.mutex); + + return status; +} SWITCH_DECLARE(switch_status_t) switch_loadable_module_unload_module(char *dir, char *fname, const char **err) {