aboutsummaryrefslogtreecommitdiffstats
path: root/cdr
diff options
context:
space:
mode:
authorrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2004-12-10 11:59:43 +0000
committerrussell <russell@f38db490-d61c-443f-a65b-d21fe96a405b>2004-12-10 11:59:43 +0000
commite922df8efbf1a4fcff376ff00218a83f04131159 (patch)
treeb1e20e696c27439fc42d1881895c3491489a03b4 /cdr
parent2795ea48a5f7b4208f67459df0577224f787339d (diff)
make table configurable for cdr_odbc (bug #2755)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4416 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'cdr')
-rwxr-xr-xcdr/cdr_odbc.c44
1 files changed, 37 insertions, 7 deletions
diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c
index c28a329c9..e48fa07bf 100755
--- a/cdr/cdr_odbc.c
+++ b/cdr/cdr_odbc.c
@@ -37,8 +37,8 @@
static char *desc = "ODBC CDR Backend";
static char *name = "ODBC";
static char *config = "cdr_odbc.conf";
-static char *dsn = NULL, *username = NULL, *password = NULL, *loguniqueid = NULL;
-static int dsn_alloc = 0, username_alloc = 0, password_alloc = 0, loguniqueid_alloc = 0;
+static char *dsn = NULL, *username = NULL, *password = NULL, *loguniqueid = NULL, *table = NULL;
+static int dsn_alloc = 0, username_alloc = 0, password_alloc = 0, loguniqueid_alloc = 0, table_alloc = 0;
static int connected = 0;
AST_MUTEX_DEFINE_STATIC(odbc_lock);
@@ -66,15 +66,15 @@ static int odbc_log(struct ast_cdr *cdr)
strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm);
memset(sqlcmd,0,2048);
if ((loguniqueid != NULL) && (ast_true(loguniqueid))) {
- snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO cdr "
+ snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,"
"lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield) "
- "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", table);
} else {
- snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO cdr "
+ snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s "
"(calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,"
"duration,billsec,disposition,amaflags,accountcode) "
- "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+ "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", table);
}
if (!connected) {
@@ -211,6 +211,13 @@ static int odbc_unload_module(void)
loguniqueid = NULL;
loguniqueid_alloc = 0;
}
+ if (table && table_alloc) {
+ if (option_verbose > 10)
+ ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: free table\n");
+ free(table);
+ table = NULL;
+ table_alloc = 0;
+ }
ast_cdr_unregister(name);
ast_mutex_unlock(&odbc_lock);
return 0;
@@ -302,11 +309,28 @@ static int odbc_load_module(void)
loguniqueid = NULL;
}
+ tmp = ast_variable_retrieve(cfg,"global","table");
+ if (tmp) {
+ table = malloc(strlen(tmp) + 1);
+ if (table != NULL) {
+ memset(table, 0, strlen(tmp) + 1);
+ table_alloc = 1;
+ strncpy(table, tmp, strlen(tmp));
+ } else {
+ ast_log(LOG_ERROR,"cdr_odbc: Out of memory error.\n");
+ return -1;
+ }
+ } else {
+ ast_log(LOG_WARNING,"cdr_odbc: table not specified. Assuming cdr\n");
+ table = "cdr";
+ }
+
ast_destroy(cfg);
if (option_verbose > 3) {
ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: dsn is %s\n",dsn);
ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: username is %s\n",username);
ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: password is [secret]\n");
+ ast_verbose( VERBOSE_PREFIX_4 "cdr_odbc: table is %s\n",table);
}
res = odbc_init();
@@ -420,7 +444,13 @@ int reload(void)
int usecount(void)
{
- return connected;
+ /* Simplistic use count */
+ if (ast_mutex_trylock(&odbc_lock)) {
+ return 1;
+ } else {
+ ast_mutex_unlock(&odbc_lock);
+ return 0;
+ }
}
char *key()