diff --git a/modules/acc/acc_cdr.c b/modules/acc/acc_cdr.c index d01beb96f62..a547c34ab31 100644 --- a/modules/acc/acc_cdr.c +++ b/modules/acc/acc_cdr.c @@ -90,6 +90,8 @@ extern str acc_cdrs_table; extern int cdr_log_enable; extern int _acc_cdr_on_failed; +static int string2time( str* time_str, struct timeval* time_value); + /* write all basic information to buffers(e.g. start-time ...) */ static int cdr_core2strar( struct dlg_cell* dlg, str* values, @@ -111,13 +113,13 @@ static int cdr_core2strar( struct dlg_cell* dlg, duration = dlgb.get_dlg_var( dlg, (str*)&cdr_duration_str); values[0] = ( start != NULL ? *start : empty_string); - types[0] = ( start != NULL ? TYPE_STR : TYPE_NULL); + types[0] = ( start != NULL ? TYPE_DATE : TYPE_NULL); values[1] = ( end != NULL ? *end : empty_string); - types[1] = ( end != NULL ? TYPE_STR : TYPE_NULL); + types[1] = ( end != NULL ? TYPE_DATE : TYPE_NULL); values[2] = ( duration != NULL ? *duration : empty_string); - types[2] = ( duration != NULL ? TYPE_STR : TYPE_NULL); + types[2] = ( duration != NULL ? TYPE_DOUBLE : TYPE_NULL); return MAX_CDR_CORE; } @@ -138,6 +140,10 @@ static int db_write_cdr( struct dlg_cell* dialog, db1_con_t *dh=NULL; void *vf=NULL; void *vh=NULL; + struct timeval timeval_val; + long long_val; + double double_val; + char * end; if(acc_cdrs_table.len<=0) return 0; @@ -157,9 +163,45 @@ static int db_write_cdr( struct dlg_cell* dialog, for(i=0; i