From c296179535d66a28fe18b6bae2969447ab447348 Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 21 Sep 2010 17:08:44 -0400 Subject: [PATCH 1/2] freetdm: make config and module directory to be a variable and not a macro --- libs/freetdm/src/ftdm_config.c | 31 +++++++++++++++++++++++++++++-- libs/freetdm/src/ftdm_io.c | 21 --------------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/libs/freetdm/src/ftdm_config.c b/libs/freetdm/src/ftdm_config.c index f6d9c1ae30..291ca33109 100644 --- a/libs/freetdm/src/ftdm_config.c +++ b/libs/freetdm/src/ftdm_config.c @@ -37,6 +37,13 @@ #include "private/ftdm_core.h" +#ifndef FTDM_MOD_DIR +#define FTDM_MOD_DIR "." +#endif + +static char g_ftdm_config_dir[] = FTDM_CONFIG_DIR; +static char g_ftdm_mod_dir[] = FTDM_MOD_DIR; + int ftdm_config_open_file(ftdm_config_t *cfg, const char *file_path) { FILE *f; @@ -46,7 +53,7 @@ int ftdm_config_open_file(ftdm_config_t *cfg, const char *file_path) if (file_path[0] == '/') { path = file_path; } else { - snprintf(path_buf, sizeof(path_buf), "%s%s%s", FTDM_CONFIG_DIR, FTDM_PATH_SEPARATOR, file_path); + snprintf(path_buf, sizeof(path_buf), "%s%s%s", g_ftdm_config_dir, FTDM_PATH_SEPARATOR, file_path); path = path_buf; } @@ -64,7 +71,7 @@ int ftdm_config_open_file(ftdm_config_t *cfg, const char *file_path) int last = -1; char *var, *val; - snprintf(path_buf, sizeof(path_buf), "%s%sfreetdm.conf", FTDM_CONFIG_DIR, FTDM_PATH_SEPARATOR); + snprintf(path_buf, sizeof(path_buf), "%s%sfreetdm.conf", g_ftdm_config_dir, FTDM_PATH_SEPARATOR); path = path_buf; if ((f = fopen(path, "r")) == 0) { @@ -329,6 +336,26 @@ FT_DECLARE(ftdm_status_t) ftdm_conf_node_destroy(ftdm_conf_node_t *node) return FTDM_SUCCESS; } +FT_DECLARE(char *) ftdm_build_dso_path(const char *name, char *path, ftdm_size_t len) +{ +#ifdef WIN32 + const char *ext = ".dll"; + //const char *EXT = ".DLL"; +#elif defined (MACOSX) || defined (DARWIN) + const char *ext = ".dylib"; + //const char *EXT = ".DYLIB"; +#else + const char *ext = ".so"; + //const char *EXT = ".SO"; +#endif + if (*name == *FTDM_PATH_SEPARATOR) { + snprintf(path, len, "%s%s", name, ext); + } else { + snprintf(path, len, "%s%s%s%s", g_ftdm_mod_dir, FTDM_PATH_SEPARATOR, name, ext); + } + return path; +} + /* For Emacs: * Local Variables: * mode:c diff --git a/libs/freetdm/src/ftdm_io.c b/libs/freetdm/src/ftdm_io.c index 97aa01bca0..bb46e798b2 100644 --- a/libs/freetdm/src/ftdm_io.c +++ b/libs/freetdm/src/ftdm_io.c @@ -4073,27 +4073,6 @@ static ftdm_status_t process_module_config(ftdm_io_interface_t *fio) return FTDM_SUCCESS; } -FT_DECLARE(char *) ftdm_build_dso_path(const char *name, char *path, ftdm_size_t len) -{ -#ifdef WIN32 - const char *ext = ".dll"; - //const char *EXT = ".DLL"; -#define FTDM_MOD_DIR "." //todo -#elif defined (MACOSX) || defined (DARWIN) - const char *ext = ".dylib"; - //const char *EXT = ".DYLIB"; -#else - const char *ext = ".so"; - //const char *EXT = ".SO"; -#endif - if (*name == *FTDM_PATH_SEPARATOR) { - snprintf(path, len, "%s%s", name, ext); - } else { - snprintf(path, len, "%s%s%s%s", FTDM_MOD_DIR, FTDM_PATH_SEPARATOR, name, ext); - } - return path; -} - FT_DECLARE(ftdm_status_t) ftdm_global_add_io_interface(ftdm_io_interface_t *interface1) { ftdm_status_t ret = FTDM_SUCCESS; From 5e60c62e08d055f11adb7a4bc73e08af668ba7f9 Mon Sep 17 00:00:00 2001 From: Moises Silva Date: Tue, 21 Sep 2010 13:56:11 -0400 Subject: [PATCH 2/2] freetdm: set conf and mod directory in runtime --- libs/freetdm/mod_freetdm/mod_freetdm.c | 4 ++++ libs/freetdm/src/ftdm_config.c | 18 ++++++++++++++++-- libs/freetdm/src/include/freetdm.h | 6 ++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index b4a40f0bad..e5311468e3 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -4074,6 +4074,10 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_freetdm_load) ftdm_global_set_logger(ftdm_logger); + ftdm_global_set_mod_directory(SWITCH_GLOBAL_dirs.mod_dir); + + ftdm_global_set_config_directory(SWITCH_GLOBAL_dirs.conf_dir); + ftdm_cpu_monitor_disable(); if (ftdm_global_init() != FTDM_SUCCESS) { diff --git a/libs/freetdm/src/ftdm_config.c b/libs/freetdm/src/ftdm_config.c index 291ca33109..1b023e93eb 100644 --- a/libs/freetdm/src/ftdm_config.c +++ b/libs/freetdm/src/ftdm_config.c @@ -41,8 +41,22 @@ #define FTDM_MOD_DIR "." #endif -static char g_ftdm_config_dir[] = FTDM_CONFIG_DIR; -static char g_ftdm_mod_dir[] = FTDM_MOD_DIR; +#define FTDM_MAX_CONF_DIR 512 + +static char g_ftdm_config_dir[FTDM_MAX_CONF_DIR] = FTDM_CONFIG_DIR; +static char g_ftdm_mod_dir[FTDM_MAX_CONF_DIR] = FTDM_MOD_DIR; + +FT_DECLARE(void) ftdm_global_set_mod_directory(const char *path) +{ + snprintf(g_ftdm_mod_dir, sizeof(g_ftdm_mod_dir), "%s", path); + ftdm_log(FTDM_LOG_DEBUG, "New mod directory: %s\n", g_ftdm_mod_dir); +} + +FT_DECLARE(void) ftdm_global_set_config_directory(const char *path) +{ + snprintf(g_ftdm_config_dir, sizeof(g_ftdm_config_dir), "%s", path); + ftdm_log(FTDM_LOG_DEBUG, "New config directory: %s\n", g_ftdm_config_dir); +} int ftdm_config_open_file(ftdm_config_t *cfg, const char *file_path) { diff --git a/libs/freetdm/src/include/freetdm.h b/libs/freetdm/src/include/freetdm.h index 1f50a2ccaa..3b847f821e 100644 --- a/libs/freetdm/src/include/freetdm.h +++ b/libs/freetdm/src/include/freetdm.h @@ -1301,6 +1301,12 @@ FT_DECLARE(void) ftdm_global_set_logger(ftdm_logger_t logger); /*! \brief Set the default logger level */ FT_DECLARE(void) ftdm_global_set_default_logger(int level); +/*! \brief Set the directory to look for modules */ +FT_DECLARE(void) ftdm_global_set_mod_directory(const char *path); + +/*! \brief Set the directory to look for configs */ +FT_DECLARE(void) ftdm_global_set_config_directory(const char *path); + /*! \brief Check if the FTDM library is initialized and running */ FT_DECLARE(ftdm_bool_t) ftdm_running(void);