From b4504ada8b188cdbba8f5d7321d3881410256db7 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Mon, 11 Jan 2010 21:03:46 +0000 Subject: Permit dates and times to be stored in timezones other than the default (typically, UTC) (closes issue #16401) Reported by: lordmortis git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@239152 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- addons/cdr_mysql.c | 14 ++++++++++++-- configs/cdr_mysql.conf.sample | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/addons/cdr_mysql.c b/addons/cdr_mysql.c index dc1e1b89f..a6a527b24 100644 --- a/addons/cdr_mysql.c +++ b/addons/cdr_mysql.c @@ -66,7 +66,7 @@ static const char desc[] = "MySQL CDR Backend"; static const char name[] = "mysql"; static const char config[] = "cdr_mysql.conf"; -static struct ast_str *hostname = NULL, *dbname = NULL, *dbuser = NULL, *password = NULL, *dbsock = NULL, *dbtable = NULL, *dbcharset = NULL; +static struct ast_str *hostname = NULL, *dbname = NULL, *dbuser = NULL, *password = NULL, *dbsock = NULL, *dbtable = NULL, *dbcharset = NULL, *cdrzone = NULL; static struct ast_str *ssl_ca = NULL, *ssl_cert = NULL, *ssl_key = NULL; @@ -247,7 +247,7 @@ db_reconnect: struct timeval tv = ast_tvnow(); struct ast_tm tm; char timestr[128]; - ast_localtime(&tv, &tm, NULL); + ast_localtime(&tv, &tm, ast_str_strlen(cdrzone) ? ast_str_buffer(cdrzone) : NULL); ast_strftime(timestr, sizeof(timestr), "%Y-%m-%d %T", &tm); ast_cdr_setvar(cdr, "calldate", timestr, 0); cdrname = "calldate"; @@ -444,6 +444,15 @@ static int my_load_module(int reload) res |= my_load_config_number(cfg, "global", "port", &dbport, 0); res |= my_load_config_number(cfg, "global", "timeout", &timeout, 0); res |= my_load_config_string(cfg, "global", "compat", &compat, "no"); + res |= my_load_config_string(cfg, "global", "cdrzone", &cdrzone, ""); + if (ast_str_strlen(cdrzone) == 0) { + for (; var; var = var->next) { + if (!strcasecmp(var->name, "usegmtime") && ast_true(var->value)) { + ast_str_set(&cdrzone, 0, "UTC"); + } + } + } + if (ast_true(ast_str_buffer(compat))) { calldate_compat = 1; } else { @@ -475,6 +484,7 @@ static int my_load_module(int reload) ast_debug(1, "Got dbname of %s\n", ast_str_buffer(dbname)); ast_debug(1, "Got password of %s\n", ast_str_buffer(password)); ast_debug(1, "%sunning in calldate compatibility mode\n", calldate_compat ? "R" : "Not r"); + ast_debug(1, "Dates and times are localized to %s\n", S_OR(ast_str_buffer(cdrzone), "local timezone")); if (dbcharset) { ast_debug(1, "Got DB charset of %s\n", ast_str_buffer(dbcharset)); diff --git a/configs/cdr_mysql.conf.sample b/configs/cdr_mysql.conf.sample index c0c4a5fc4..dd37e2ce9 100644 --- a/configs/cdr_mysql.conf.sample +++ b/configs/cdr_mysql.conf.sample @@ -18,6 +18,7 @@ ;user=asteriskcdruser ;port=3306 ;sock=/tmp/mysql.sock +;timezone=UTC ; Previously called usegmtime ; ; If your system's locale differs from mysql database character set, ; cdr_mysql can damage non-latin characters in CDR variables. Use this -- cgit v1.2.3