make table configurable for cdr_odbc (bug #2755)
authorRussell Bryant <russell@russellbryant.com>
Fri, 10 Dec 2004 11:59:43 +0000 (11:59 +0000)
committerRussell Bryant <russell@russellbryant.com>
Fri, 10 Dec 2004 11:59:43 +0000 (11:59 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4416 65c4cc65-6c06-0410-ace0-fbb531ad65f3

cdr/cdr_odbc.c
configs/cdr_odbc.conf.sample

index c28a329..e48fa07 100755 (executable)
@@ -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()
index 3427748..b488006 100755 (executable)
@@ -1,5 +1,5 @@
 ;
-; cdr_unixodbc.conf
+; cdr_odbc.conf
 ;
 
 ;[global]
@@ -7,3 +7,4 @@
 ;username=username
 ;password=password
 ;loguniqueid=yes
+;table=cdr             ;"cdr" is default table name