mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-03 11:25:35 +00:00
Don't reload a configuration file if nothing has changed.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@79747 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -95,8 +95,9 @@ static int load_config(void)
|
||||
SQLLEN sqlptr;
|
||||
int res = 0;
|
||||
SQLHSTMT stmt = NULL;
|
||||
struct ast_flags config_flags = { 0 }; /* Part of our config comes from the database */
|
||||
|
||||
cfg = ast_config_load(CONFIG);
|
||||
cfg = ast_config_load(CONFIG, config_flags);
|
||||
if (!cfg) {
|
||||
ast_log(LOG_WARNING, "Unable to load " CONFIG ". No adaptive ODBC CDRs.\n");
|
||||
return -1;
|
||||
|
@@ -95,22 +95,24 @@ static char *name = "csv";
|
||||
static FILE *mf = NULL;
|
||||
|
||||
|
||||
static int load_config(void)
|
||||
static int load_config(int reload)
|
||||
{
|
||||
struct ast_config *cfg;
|
||||
struct ast_variable *var;
|
||||
const char *tmp;
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
|
||||
usegmtime = 0;
|
||||
loguniqueid = 0;
|
||||
loguserfield = 0;
|
||||
|
||||
cfg = ast_config_load(config);
|
||||
cfg = ast_config_load(config, config_flags);
|
||||
|
||||
if (!cfg) {
|
||||
ast_log(LOG_WARNING, "unable to load config: %s\n", config);
|
||||
return 0;
|
||||
}
|
||||
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
|
||||
return 0;
|
||||
|
||||
var = ast_variable_browse(cfg, "csv");
|
||||
if (!var) {
|
||||
@@ -316,7 +318,7 @@ static int load_module(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
if(!load_config())
|
||||
if(!load_config(0))
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
|
||||
res = ast_cdr_register(name, ast_module_info->description, csv_log);
|
||||
@@ -330,7 +332,7 @@ static int load_module(void)
|
||||
|
||||
static int reload(void)
|
||||
{
|
||||
load_config();
|
||||
load_config(1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -68,12 +68,16 @@ static int load_config(int reload)
|
||||
{
|
||||
struct ast_config *cfg;
|
||||
struct ast_variable *var;
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
int res = -1;
|
||||
|
||||
if ((cfg = ast_config_load("cdr_custom.conf", config_flags)) == CONFIG_STATUS_FILEUNCHANGED)
|
||||
return 0;
|
||||
|
||||
strcpy(format, "");
|
||||
strcpy(master, "");
|
||||
ast_mutex_lock(&lock);
|
||||
if((cfg = ast_config_load("cdr_custom.conf"))) {
|
||||
if (cfg) {
|
||||
var = ast_variable_browse(cfg, "mappings");
|
||||
while(var) {
|
||||
if (!ast_strlen_zero(var->name) && !ast_strlen_zero(var->value)) {
|
||||
|
@@ -52,15 +52,22 @@ static char *name = "cdr_manager";
|
||||
static int enablecdr = 0;
|
||||
struct ast_str *customfields;
|
||||
|
||||
static int load_config(void)
|
||||
static int load_config(int reload)
|
||||
{
|
||||
char *cat = NULL;
|
||||
struct ast_config *cfg;
|
||||
struct ast_variable *v;
|
||||
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
|
||||
cfg = ast_config_load(CONF_FILE, config_flags);
|
||||
if (cfg == CONFIG_STATUS_FILEUNCHANGED)
|
||||
return 0;
|
||||
|
||||
if (reload && customfields) {
|
||||
ast_free(customfields);
|
||||
}
|
||||
customfields = NULL;
|
||||
|
||||
cfg = ast_config_load(CONF_FILE);
|
||||
if (!cfg) {
|
||||
/* Standard configuration */
|
||||
ast_log(LOG_WARNING, "Failed to load configuration file. Module not activated.\n");
|
||||
@@ -174,7 +181,7 @@ static int load_module(void)
|
||||
int res;
|
||||
|
||||
/* Configuration file */
|
||||
if (!load_config())
|
||||
if (!load_config(0))
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
|
||||
res = ast_cdr_register(name, "Asterisk Manager Interface CDR Backend", manager_log);
|
||||
@@ -187,12 +194,7 @@ static int load_module(void)
|
||||
|
||||
static int reload(void)
|
||||
{
|
||||
if (customfields) {
|
||||
ast_free(customfields);
|
||||
}
|
||||
|
||||
load_config();
|
||||
return 0;
|
||||
return load_config(1);
|
||||
}
|
||||
|
||||
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk Manager Interface CDR Backend",
|
||||
|
205
cdr/cdr_odbc.c
205
cdr/cdr_odbc.c
@@ -226,124 +226,124 @@ static int odbc_unload_module(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int odbc_load_module(void)
|
||||
static int odbc_load_module(int reload)
|
||||
{
|
||||
int res = 0;
|
||||
struct ast_config *cfg;
|
||||
struct ast_variable *var;
|
||||
const char *tmp;
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
|
||||
ast_mutex_lock(&odbc_lock);
|
||||
|
||||
cfg = ast_config_load(config);
|
||||
if (!cfg) {
|
||||
ast_log(LOG_WARNING, "cdr_odbc: Unable to load config for ODBC CDR's: %s\n", config);
|
||||
res = AST_MODULE_LOAD_DECLINE;
|
||||
goto out;
|
||||
}
|
||||
do {
|
||||
cfg = ast_config_load(config, config_flags);
|
||||
if (!cfg) {
|
||||
ast_log(LOG_WARNING, "cdr_odbc: Unable to load config for ODBC CDR's: %s\n", config);
|
||||
res = AST_MODULE_LOAD_DECLINE;
|
||||
break;
|
||||
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
|
||||
break;
|
||||
|
||||
var = ast_variable_browse(cfg, "global");
|
||||
if (!var) {
|
||||
/* nothing configured */
|
||||
goto out;
|
||||
}
|
||||
var = ast_variable_browse(cfg, "global");
|
||||
if (!var) {
|
||||
/* nothing configured */
|
||||
break;
|
||||
}
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","dsn");
|
||||
if (tmp == NULL) {
|
||||
ast_log(LOG_WARNING,"cdr_odbc: dsn not specified. Assuming asteriskdb\n");
|
||||
tmp = "asteriskdb";
|
||||
}
|
||||
dsn = strdup(tmp);
|
||||
if (dsn == NULL) {
|
||||
ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
|
||||
res = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","dispositionstring");
|
||||
if (tmp) {
|
||||
dispositionstring = ast_true(tmp);
|
||||
} else {
|
||||
dispositionstring = 0;
|
||||
}
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","username");
|
||||
if (tmp) {
|
||||
username = strdup(tmp);
|
||||
if (username == NULL) {
|
||||
ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "dsn")) == NULL) {
|
||||
ast_log(LOG_WARNING, "cdr_odbc: dsn not specified. Assuming asteriskdb\n");
|
||||
tmp = "asteriskdb";
|
||||
}
|
||||
if (dsn)
|
||||
ast_free(dsn);
|
||||
dsn = ast_strdup(tmp);
|
||||
if (dsn == NULL) {
|
||||
res = -1;
|
||||
goto out;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","password");
|
||||
if (tmp) {
|
||||
password = strdup(tmp);
|
||||
if (password == NULL) {
|
||||
ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "dispositionstring")))
|
||||
dispositionstring = ast_true(tmp);
|
||||
else
|
||||
dispositionstring = 0;
|
||||
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "username"))) {
|
||||
if (username)
|
||||
ast_free(username);
|
||||
username = ast_strdup(tmp);
|
||||
if (username == NULL) {
|
||||
res = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "password"))) {
|
||||
if (password)
|
||||
ast_free(password);
|
||||
password = ast_strdup(tmp);
|
||||
if (password == NULL) {
|
||||
res = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "loguniqueid"))) {
|
||||
loguniqueid = ast_true(tmp);
|
||||
if (loguniqueid) {
|
||||
ast_debug(1, "cdr_odbc: Logging uniqueid\n");
|
||||
} else {
|
||||
ast_debug(1, "cdr_odbc: Not logging uniqueid\n");
|
||||
}
|
||||
} else {
|
||||
ast_debug(1, "cdr_odbc: Not logging uniqueid\n");
|
||||
loguniqueid = 0;
|
||||
}
|
||||
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "usegmtime"))) {
|
||||
usegmtime = ast_true(tmp);
|
||||
if (usegmtime) {
|
||||
ast_debug(1, "cdr_odbc: Logging in GMT\n");
|
||||
} else {
|
||||
ast_debug(1, "cdr_odbc: Not logging in GMT\n");
|
||||
}
|
||||
} else {
|
||||
ast_debug(1, "cdr_odbc: Not logging in GMT\n");
|
||||
usegmtime = 0;
|
||||
}
|
||||
|
||||
if ((tmp = ast_variable_retrieve(cfg, "global", "table")) == NULL) {
|
||||
ast_log(LOG_WARNING, "cdr_odbc: table not specified. Assuming cdr\n");
|
||||
tmp = "cdr";
|
||||
}
|
||||
if (table)
|
||||
ast_free(table);
|
||||
table = ast_strdup(tmp);
|
||||
if (table == NULL) {
|
||||
res = -1;
|
||||
goto out;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","loguniqueid");
|
||||
if (tmp) {
|
||||
loguniqueid = ast_true(tmp);
|
||||
if (loguniqueid) {
|
||||
ast_debug(1,"cdr_odbc: Logging uniqueid\n");
|
||||
} else {
|
||||
ast_debug(1,"cdr_odbc: Not logging uniqueid\n");
|
||||
ast_verb(3, "cdr_odbc: dsn is %s\n", dsn);
|
||||
if (username) {
|
||||
ast_verb(3, "cdr_odbc: username is %s\n", username);
|
||||
ast_verb(3, "cdr_odbc: password is [secret]\n");
|
||||
} else
|
||||
ast_verb(3, "cdr_odbc: retrieving username and password from odbc config\n");
|
||||
ast_verb(3, "cdr_odbc: table is %s\n", table);
|
||||
|
||||
res = odbc_init();
|
||||
if (res < 0) {
|
||||
ast_log(LOG_ERROR, "cdr_odbc: Unable to connect to datasource: %s\n", dsn);
|
||||
ast_verb(3, "cdr_odbc: Unable to connect to datasource: %s\n", dsn);
|
||||
}
|
||||
res = ast_cdr_register(name, ast_module_info->description, odbc_log);
|
||||
if (res) {
|
||||
ast_log(LOG_ERROR, "cdr_odbc: Unable to register ODBC CDR handling\n");
|
||||
}
|
||||
} else {
|
||||
ast_debug(1,"cdr_odbc: Not logging uniqueid\n");
|
||||
loguniqueid = 0;
|
||||
}
|
||||
} while (0);
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","usegmtime");
|
||||
if (tmp) {
|
||||
usegmtime = ast_true(tmp);
|
||||
if (usegmtime) {
|
||||
ast_debug(1,"cdr_odbc: Logging in GMT\n");
|
||||
} else {
|
||||
ast_debug(1,"cdr_odbc: Not logging in GMT\n");
|
||||
}
|
||||
} else {
|
||||
ast_debug(1,"cdr_odbc: Not logging in GMT\n");
|
||||
usegmtime = 0;
|
||||
}
|
||||
|
||||
tmp = ast_variable_retrieve(cfg,"global","table");
|
||||
if (tmp == NULL) {
|
||||
ast_log(LOG_WARNING,"cdr_odbc: table not specified. Assuming cdr\n");
|
||||
tmp = "cdr";
|
||||
}
|
||||
table = strdup(tmp);
|
||||
if (table == NULL) {
|
||||
ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
|
||||
res = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ast_verb(3, "cdr_odbc: dsn is %s\n",dsn);
|
||||
if (username) {
|
||||
ast_verb(3, "cdr_odbc: username is %s\n",username);
|
||||
ast_verb(3, "cdr_odbc: password is [secret]\n");
|
||||
} else
|
||||
ast_verb(3, "cdr_odbc: retreiving username and password from odbc config\n");
|
||||
ast_verb(3, "cdr_odbc: table is %s\n",table);
|
||||
|
||||
res = odbc_init();
|
||||
if (res < 0) {
|
||||
ast_log(LOG_ERROR, "cdr_odbc: Unable to connect to datasource: %s\n", dsn);
|
||||
ast_verb(3, "cdr_odbc: Unable to connect to datasource: %s\n", dsn);
|
||||
}
|
||||
res = ast_cdr_register(name, ast_module_info->description, odbc_log);
|
||||
if (res) {
|
||||
ast_log(LOG_ERROR, "cdr_odbc: Unable to register ODBC CDR handling\n");
|
||||
}
|
||||
out:
|
||||
if (cfg)
|
||||
if (cfg && cfg != CONFIG_STATUS_FILEUNCHANGED)
|
||||
ast_config_destroy(cfg);
|
||||
ast_mutex_unlock(&odbc_lock);
|
||||
return res;
|
||||
@@ -418,7 +418,7 @@ static int odbc_init(void)
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
return odbc_load_module();
|
||||
return odbc_load_module(0);
|
||||
}
|
||||
|
||||
static int unload_module(void)
|
||||
@@ -428,8 +428,7 @@ static int unload_module(void)
|
||||
|
||||
static int reload(void)
|
||||
{
|
||||
odbc_unload_module();
|
||||
return odbc_load_module();
|
||||
return odbc_load_module(1);
|
||||
}
|
||||
|
||||
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "ODBC CDR Backend",
|
||||
|
@@ -183,7 +183,7 @@ static int pgsql_log(struct ast_cdr *cdr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int my_unload_module(void)
|
||||
static int unload_module(void)
|
||||
{
|
||||
PQfinish(conn);
|
||||
if (pghostname)
|
||||
@@ -202,20 +202,30 @@ static int my_unload_module(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int process_my_load_module(struct ast_config *cfg)
|
||||
static int config_module(int reload)
|
||||
{
|
||||
struct ast_variable *var;
|
||||
char *pgerror;
|
||||
char *pgerror;
|
||||
const char *tmp;
|
||||
struct ast_config *cfg;
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
|
||||
if ((cfg = ast_config_load(config, config_flags)) == NULL) {
|
||||
ast_log(LOG_WARNING, "Unable to load config for PostgreSQL CDR's: %s\n", config);
|
||||
return -1;
|
||||
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
|
||||
return 0;
|
||||
|
||||
if (!(var = ast_variable_browse(cfg, "global")))
|
||||
return 0;
|
||||
|
||||
if (!(tmp = ast_variable_retrieve(cfg,"global","hostname"))) {
|
||||
ast_log(LOG_WARNING,"PostgreSQL server hostname not specified. Assuming unix socket connection\n");
|
||||
if (!(tmp = ast_variable_retrieve(cfg, "global", "hostname"))) {
|
||||
ast_log(LOG_WARNING, "PostgreSQL server hostname not specified. Assuming unix socket connection\n");
|
||||
tmp = ""; /* connect via UNIX-socket by default */
|
||||
}
|
||||
|
||||
|
||||
if (pghostname)
|
||||
ast_free(pghostname);
|
||||
if (!(pghostname = ast_strdup(tmp)))
|
||||
return -1;
|
||||
|
||||
@@ -224,6 +234,8 @@ static int process_my_load_module(struct ast_config *cfg)
|
||||
tmp = "asteriskcdrdb";
|
||||
}
|
||||
|
||||
if (pgdbname)
|
||||
ast_free(pgdbname);
|
||||
if (!(pgdbname = ast_strdup(tmp)))
|
||||
return -1;
|
||||
|
||||
@@ -232,6 +244,8 @@ static int process_my_load_module(struct ast_config *cfg)
|
||||
tmp = "asterisk";
|
||||
}
|
||||
|
||||
if (pgdbuser)
|
||||
ast_free(pgdbuser);
|
||||
if (!(pgdbuser = ast_strdup(tmp)))
|
||||
return -1;
|
||||
|
||||
@@ -240,6 +254,8 @@ static int process_my_load_module(struct ast_config *cfg)
|
||||
tmp = "";
|
||||
}
|
||||
|
||||
if (pgpassword)
|
||||
ast_free(pgpassword);
|
||||
if (!(pgpassword = ast_strdup(tmp)))
|
||||
return -1;
|
||||
|
||||
@@ -248,6 +264,8 @@ static int process_my_load_module(struct ast_config *cfg)
|
||||
tmp = "5432";
|
||||
}
|
||||
|
||||
if (pgdbport)
|
||||
ast_free(pgdbport);
|
||||
if (!(pgdbport = ast_strdup(tmp)))
|
||||
return -1;
|
||||
|
||||
@@ -256,6 +274,8 @@ static int process_my_load_module(struct ast_config *cfg)
|
||||
tmp = "cdr";
|
||||
}
|
||||
|
||||
if (table)
|
||||
ast_free(table);
|
||||
if (!(table = ast_strdup(tmp)))
|
||||
return -1;
|
||||
|
||||
@@ -276,49 +296,23 @@ static int process_my_load_module(struct ast_config *cfg)
|
||||
ast_debug(1, "Successfully connected to PostgreSQL database.\n");
|
||||
connected = 1;
|
||||
} else {
|
||||
pgerror = PQerrorMessage(conn);
|
||||
pgerror = PQerrorMessage(conn);
|
||||
ast_log(LOG_ERROR, "cdr_pgsql: Unable to connect to database server %s. CALLS WILL NOT BE LOGGED!!\n", pghostname);
|
||||
ast_log(LOG_ERROR, "cdr_pgsql: Reason: %s\n", pgerror);
|
||||
ast_log(LOG_ERROR, "cdr_pgsql: Reason: %s\n", pgerror);
|
||||
connected = 0;
|
||||
}
|
||||
|
||||
return ast_cdr_register(name, ast_module_info->description, pgsql_log);
|
||||
}
|
||||
|
||||
static int my_load_module(void)
|
||||
{
|
||||
struct ast_config *cfg;
|
||||
int res;
|
||||
|
||||
if (!(cfg = ast_config_load(config))) {
|
||||
ast_log(LOG_WARNING, "Unable to load config for PostgreSQL CDR's: %s\n", config);
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
}
|
||||
|
||||
res = process_my_load_module(cfg);
|
||||
ast_config_destroy(cfg);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
return my_load_module();
|
||||
}
|
||||
|
||||
static int unload_module(void)
|
||||
{
|
||||
return my_unload_module();
|
||||
return config_module(0) ? AST_MODULE_LOAD_DECLINE : 0;
|
||||
}
|
||||
|
||||
static int reload(void)
|
||||
{
|
||||
int res;
|
||||
ast_mutex_lock(&pgsql_lock);
|
||||
my_unload_module();
|
||||
res = my_load_module();
|
||||
ast_mutex_unlock(&pgsql_lock);
|
||||
return res;
|
||||
return config_module(1);
|
||||
}
|
||||
|
||||
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PostgreSQL CDR Backend",
|
||||
|
@@ -232,10 +232,11 @@ static int unload_module(void)
|
||||
static int load_module(void)
|
||||
{
|
||||
struct ast_config *cfg;
|
||||
struct ast_flags config_flags = { 0 };
|
||||
int res;
|
||||
const char *tmp;
|
||||
|
||||
if ((cfg = ast_config_load(cdr_config))) {
|
||||
if ((cfg = ast_config_load(cdr_config, config_flags))) {
|
||||
ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "usegmtime")), RADIUS_FLAG_USEGMTIME);
|
||||
ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "loguniqueid")), RADIUS_FLAG_LOGUNIQUEID);
|
||||
ast_set2_flag(&global_flags, ast_true(ast_variable_retrieve(cfg, "radius", "loguserfield")), RADIUS_FLAG_LOGUSERFIELD);
|
||||
|
@@ -74,10 +74,11 @@ static char values[1024];
|
||||
static int load_config(int reload)
|
||||
{
|
||||
struct ast_config *cfg;
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
struct ast_variable *mappingvar;
|
||||
const char *tmp;
|
||||
|
||||
if (!(cfg = ast_config_load(config_file))) {
|
||||
if (!(cfg = ast_config_load(config_file, config_flags))) {
|
||||
if (reload)
|
||||
ast_log(LOG_WARNING, "%s: Failed to reload configuration file.\n", name);
|
||||
else {
|
||||
@@ -86,10 +87,10 @@ static int load_config(int reload)
|
||||
name);
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
|
||||
return 0;
|
||||
|
||||
if (!reload)
|
||||
ast_mutex_lock(&lock);
|
||||
ast_mutex_lock(&lock);
|
||||
|
||||
if (!(mappingvar = ast_variable_browse(cfg, "master"))) {
|
||||
/* nothing configured */
|
||||
@@ -125,8 +126,7 @@ static int load_config(int reload)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!reload)
|
||||
ast_mutex_unlock(&lock);
|
||||
ast_mutex_unlock(&lock);
|
||||
|
||||
ast_config_destroy(cfg);
|
||||
|
||||
@@ -248,13 +248,7 @@ static int load_module(void)
|
||||
|
||||
static int reload(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
ast_mutex_lock(&lock);
|
||||
res = load_config(1);
|
||||
ast_mutex_unlock(&lock);
|
||||
|
||||
return res;
|
||||
return load_config(1);
|
||||
}
|
||||
|
||||
AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "SQLite3 Custom CDR Module",
|
||||
|
@@ -422,95 +422,106 @@ static int tds_unload_module(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tds_load_module(void)
|
||||
static int tds_load_module(int reload)
|
||||
{
|
||||
int res = 0;
|
||||
struct ast_config *cfg;
|
||||
struct ast_variable *var;
|
||||
const char *ptr = NULL;
|
||||
struct ast_flags config_flags = { reload ? CONFIG_FLAG_FILEUNCHANGED : 0 };
|
||||
#ifdef FREETDS_PRE_0_62
|
||||
TDS_INT result_type;
|
||||
#endif
|
||||
|
||||
cfg = ast_config_load(config);
|
||||
cfg = ast_config_load(config, config_flags);
|
||||
if (!cfg) {
|
||||
ast_log(LOG_NOTICE, "Unable to load config for MSSQL CDR's: %s\n", config);
|
||||
return 0;
|
||||
}
|
||||
} else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
|
||||
return 0;
|
||||
|
||||
var = ast_variable_browse(cfg, "global");
|
||||
if (!var) /* nothing configured */
|
||||
return 0;
|
||||
|
||||
ptr = ast_variable_retrieve(cfg, "global", "hostname");
|
||||
if (ptr)
|
||||
hostname = strdup(ptr);
|
||||
else
|
||||
ast_log(LOG_ERROR,"Database server hostname not specified.\n");
|
||||
if (ptr) {
|
||||
if (hostname)
|
||||
ast_free(hostname);
|
||||
hostname = ast_strdup(ptr);
|
||||
} else
|
||||
ast_log(LOG_ERROR, "Database server hostname not specified.\n");
|
||||
|
||||
ptr = ast_variable_retrieve(cfg, "global", "dbname");
|
||||
if (ptr)
|
||||
dbname = strdup(ptr);
|
||||
else
|
||||
ast_log(LOG_ERROR,"Database dbname not specified.\n");
|
||||
if (ptr) {
|
||||
if (dbname)
|
||||
ast_free(dbname);
|
||||
dbname = ast_strdup(ptr);
|
||||
} else
|
||||
ast_log(LOG_ERROR, "Database dbname not specified.\n");
|
||||
|
||||
ptr = ast_variable_retrieve(cfg, "global", "user");
|
||||
if (ptr)
|
||||
dbuser = strdup(ptr);
|
||||
else
|
||||
ast_log(LOG_ERROR,"Database dbuser not specified.\n");
|
||||
if (ptr) {
|
||||
if (dbuser)
|
||||
ast_free(dbuser);
|
||||
dbuser = ast_strdup(ptr);
|
||||
} else
|
||||
ast_log(LOG_ERROR, "Database dbuser not specified.\n");
|
||||
|
||||
ptr = ast_variable_retrieve(cfg, "global", "password");
|
||||
if (ptr)
|
||||
password = strdup(ptr);
|
||||
else
|
||||
if (ptr) {
|
||||
if (password)
|
||||
ast_free(password);
|
||||
password = ast_strdup(ptr);
|
||||
} else
|
||||
ast_log(LOG_ERROR,"Database password not specified.\n");
|
||||
|
||||
ptr = ast_variable_retrieve(cfg, "global", "charset");
|
||||
if (charset)
|
||||
ast_free(charset);
|
||||
if (ptr)
|
||||
charset = strdup(ptr);
|
||||
charset = ast_strdup(ptr);
|
||||
else
|
||||
charset = strdup("iso_1");
|
||||
charset = ast_strdup("iso_1");
|
||||
|
||||
if (language)
|
||||
ast_free(language);
|
||||
ptr = ast_variable_retrieve(cfg, "global", "language");
|
||||
if (ptr)
|
||||
language = strdup(ptr);
|
||||
language = ast_strdup(ptr);
|
||||
else
|
||||
language = strdup("us_english");
|
||||
language = ast_strdup("us_english");
|
||||
|
||||
ptr = ast_variable_retrieve(cfg,"global","table");
|
||||
ptr = ast_variable_retrieve(cfg, "global", "table");
|
||||
if (ptr == NULL) {
|
||||
ast_debug(1,"cdr_tds: table not specified. Assuming cdr\n");
|
||||
ast_debug(1, "cdr_tds: table not specified. Assuming cdr\n");
|
||||
ptr = "cdr";
|
||||
}
|
||||
table = strdup(ptr);
|
||||
if (table)
|
||||
ast_free(table);
|
||||
table = ast_strdup(ptr);
|
||||
|
||||
ast_config_destroy(cfg);
|
||||
|
||||
ast_mutex_lock(&tds_lock);
|
||||
mssql_disconnect();
|
||||
mssql_connect();
|
||||
|
||||
/* Register MSSQL CDR handler */
|
||||
res = ast_cdr_register(name, ast_module_info->description, tds_log);
|
||||
if (res)
|
||||
{
|
||||
ast_log(LOG_ERROR, "Unable to register MSSQL CDR handling\n");
|
||||
}
|
||||
ast_mutex_unlock(&tds_lock);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static int reload(void)
|
||||
{
|
||||
tds_unload_module();
|
||||
return tds_load_module();
|
||||
return tds_load_module(1);
|
||||
}
|
||||
|
||||
static int load_module(void)
|
||||
{
|
||||
if(!tds_load_module())
|
||||
if (!tds_load_module(0))
|
||||
return AST_MODULE_LOAD_DECLINE;
|
||||
else
|
||||
return AST_MODULE_LOAD_SUCCESS;
|
||||
ast_cdr_register(name, ast_module_info->description, tds_log);
|
||||
return AST_MODULE_LOAD_SUCCESS;
|
||||
}
|
||||
|
||||
static int unload_module(void)
|
||||
|
Reference in New Issue
Block a user