diff options
author | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-12-10 11:59:43 +0000 |
---|---|---|
committer | russell <russell@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-12-10 11:59:43 +0000 |
commit | e922df8efbf1a4fcff376ff00218a83f04131159 (patch) | |
tree | b1e20e696c27439fc42d1881895c3491489a03b4 /cdr | |
parent | 2795ea48a5f7b4208f67459df0577224f787339d (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-x | cdr/cdr_odbc.c | 44 |
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() |