From 3a67cc8016c64060ce8c4e2d6fd3c6249c5a1113 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Thu, 11 Sep 2008 21:45:07 +0000 Subject: Add usegmtime, as per the recent -users list discussion, and also add my explanation to the file, since that additional text helps people understand the concept. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@142536 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- cdr/cdr_adaptive_odbc.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'cdr') diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c index 67c6043c3..1f04ef8d5 100644 --- a/cdr/cdr_adaptive_odbc.c +++ b/cdr/cdr_adaptive_odbc.c @@ -69,6 +69,7 @@ struct columns { struct tables { char *connection; char *table; + unsigned int usegmtime:1; AST_LIST_HEAD_NOLOCK(odbc_columns, columns) columns; AST_RWLIST_ENTRY(tables) list; }; @@ -86,7 +87,7 @@ static int load_config(void) char columnname[80]; char connection[40]; char table[40]; - int lenconnection, lentable; + int lenconnection, lentable, usegmtime; SQLLEN sqlptr; int res = 0; SQLHSTMT stmt = NULL; @@ -110,6 +111,10 @@ static int load_config(void) ast_copy_string(connection, tmp, sizeof(connection)); lenconnection = strlen(connection); + if (!ast_strlen_zero(tmp = ast_variable_retrieve(cfg, catg, "usegmtime"))) { + usegmtime = ast_true(tmp); + } + /* When loading, we want to be sure we can connect. */ obj = ast_odbc_request_obj(connection, 1); if (!obj) { @@ -146,6 +151,7 @@ static int load_config(void) break; } + tableptr->usegmtime = usegmtime; tableptr->connection = (char *)tableptr + sizeof(*tableptr); tableptr->table = (char *)tableptr + sizeof(*tableptr) + lenconnection + 1; ast_copy_string(tableptr->connection, connection, lenconnection + 1); @@ -354,11 +360,24 @@ static int odbc_log(struct ast_cdr *cdr) } AST_LIST_TRAVERSE(&(tableptr->columns), entry, list) { + int datefield = 0; + if (strcasecmp(entry->cdrname, "start") == 0) { + datefield = 1; + } else if (strcasecmp(entry->cdrname, "answer") == 0) { + datefield = 2; + } else if (strcasecmp(entry->cdrname, "end") == 0) { + datefield = 3; + } + /* Check if we have a similarly named variable */ - ast_cdr_getvar(cdr, entry->cdrname, &colptr, colbuf, sizeof(colbuf), 0, - (strcasecmp(entry->cdrname, "start") == 0 || - strcasecmp(entry->cdrname, "answer") == 0 || - strcasecmp(entry->cdrname, "end") == 0) ? 0 : 1); + if (datefield && tableptr->usegmtime) { + struct timeval tv = (datefield == 1) ? cdr->start : (datefield == 2) ? cdr->answer : cdr->end; + struct ast_tm tm = { 0, }; + ast_localtime(&tv, &tm, "UTC"); + ast_strftime(colbuf, sizeof(colbuf), "%Y-%m-%d %H:%M:%S", &tm); + } else { + ast_cdr_getvar(cdr, entry->cdrname, &colptr, colbuf, sizeof(colbuf), 0, datefield ? 0 : 1); + } if (colptr) { /* Check first if the column filters this entry. Note that this -- cgit v1.2.3