aboutsummaryrefslogtreecommitdiffstats
path: root/addons
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2010-01-11 21:03:46 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2010-01-11 21:03:46 +0000
commit31afdebaba3e2e5aee66c3be6db2f56d750ddb1b (patch)
tree97edfde708307d21ef610b8854307e773843054e /addons
parent5943d0abab253605d39155b21e59ebb006c3581a (diff)
Permit dates and times to be stored in timezones other than the default (typically, UTC)
(closes issue #16401) Reported by: lordmortis git-svn-id: http://svn.digium.com/svn/asterisk/trunk@239152 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'addons')
-rw-r--r--addons/cdr_mysql.c14
1 files changed, 12 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));