--- cdr/cdr_pgsql.c (svn) +++ cdr/cdr_pgsql.c (working copy) @@ -60,10 +60,10 @@ #define DATE_FORMAT "%Y-%m-%d %T" -static char *desc = "PostgreSQL CDR Backend"; +static char *tdesc = "PostgreSQL CDR Backend"; static char *name = "pgsql"; static char *config = "cdr_pgsql.conf"; -static char *pghostname = NULL, *pgdbname = NULL, *pgdbuser = NULL, *pgpassword = NULL, *pgdbsock = NULL, *pgdbport = NULL, *table = NULL; +static char *pghostname = NULL, *pgdbname = NULL, *pgdbuser = NULL, *pgpassword = NULL, *pgdbport = NULL, *table = NULL; static int connected = 0; AST_MUTEX_DEFINE_STATIC(pgsql_lock); @@ -71,14 +71,18 @@ static PGconn *conn; static PGresult *result; +static char sqlcmd[2048]; + static int pgsql_log(struct ast_cdr *cdr) { struct tm tm; - char sqlcmd[2048] = "", timestr[128]; + char timestr[128]; char *pgerror; ast_mutex_lock(&pgsql_lock); + sqlcmd[0] = 0; + localtime_r(&cdr->start.tv_sec,&tm); strftime(timestr, sizeof(timestr), DATE_FORMAT, &tm); @@ -125,6 +129,7 @@ if (option_debug > 1) ast_log(LOG_DEBUG, "cdr_pgsql: inserting a CDR record.\n"); + /* XXX: need to check string length, and, may be, realloc buffer */ snprintf(sqlcmd,sizeof(sqlcmd),"INSERT INTO %s (calldate,clid,src,dst,dcontext,channel,dstchannel," "lastapp,lastdata,duration,billsec,disposition,amaflags,accountcode,uniqueid,userfield) VALUES" " ('%s','%s','%s','%s','%s', '%s','%s','%s','%s',%ld,%ld,'%s',%ld,'%s','%s','%s')", @@ -168,8 +173,8 @@ if ( PQresultStatus(result) != PGRES_COMMAND_OK) { pgerror = PQresultErrorMessage(result); - ast_log(LOG_ERROR,"cdr_pgsql: HARD ERROR! Attempted reconnection failed. DROPPING CALL RECORD!\n"); - ast_log(LOG_ERROR,"cdr_pgsql: Reason: %s\n", pgerror); + ast_log(LOG_ERROR, "cdr_pgsql: HARD ERROR! Attempted reconnection failed. DROPPING CALL RECORD!\n"); + ast_log(LOG_ERROR, "cdr_pgsql: Reason: %s\n", pgerror); } } ast_mutex_unlock(&pgsql_lock); @@ -182,7 +187,7 @@ static const char *description(void) { - return desc; + return tdesc; } static int my_unload_module(void) @@ -195,8 +200,6 @@ free(pgdbname); if (pgdbuser) free(pgdbuser); - if (pgdbsock) - free(pgdbsock); if (pgpassword) free(pgpassword); if (pgdbport) @@ -223,7 +226,7 @@ tmp = ast_variable_retrieve(cfg,"global","hostname"); if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL server hostname not specified. Assuming localhost\n"); - tmp = "localhost"; + tmp = ""; /* connect via UNIX-socket by default */ } pghostname = strdup(tmp); if (pghostname == NULL) { @@ -234,7 +237,7 @@ tmp = ast_variable_retrieve(cfg,"global","dbname"); if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL database not specified. Assuming asterisk\n"); - tmp = "asteriskcdrdb"; + tmp = "asterisk"; } pgdbname = strdup(tmp); if (pgdbname == NULL) { @@ -245,7 +248,7 @@ tmp = ast_variable_retrieve(cfg,"global","user"); if (tmp == NULL) { ast_log(LOG_WARNING,"PostgreSQL database user not specified. Assuming root\n"); - tmp = "root"; + tmp = "asterisk"; } pgdbuser = strdup(tmp); if (pgdbuser == NULL) { @@ -289,8 +292,6 @@ if (option_debug) { ast_log(LOG_DEBUG, "cdr_pgsql: got hostname of %s\n", pghostname); ast_log(LOG_DEBUG, "cdr_pgsql: got port of %s\n", pgdbport); - if (pgdbsock) - ast_log(LOG_DEBUG, "cdr_pgsql: got sock file of %s\n", pgdbsock); ast_log(LOG_DEBUG, "cdr_pgsql: got user of %s\n", pgdbuser); ast_log(LOG_DEBUG, "cdr_pgsql: got dbname of %s\n", pgdbname); ast_log(LOG_DEBUG, "cdr_pgsql: got password of %s\n", pgpassword); @@ -309,7 +310,7 @@ connected = 0; } - res = ast_cdr_register(name, desc, pgsql_log); + res = ast_cdr_register(name, tdesc, pgsql_log); if (res) { ast_log(LOG_ERROR, "Unable to register PGSQL CDR handling\n"); }