75
75
extern struct acc_extra *log_extra;
76
76
extern struct acc_extra *leg_info;
77
77
extern struct acc_enviroment acc_env;
78
extern char *acc_time_format;
80
81
extern struct acc_extra *rad_extra;
90
91
static db_func_t acc_dbf;
91
92
static db1_con_t* db_handle=0;
92
93
extern struct acc_extra *db_extra;
93
extern int acc_db_insert_mode;
96
96
/* arrays used to collect the values before being
97
* pushed to the storage backend (whatever used) */
98
static str val_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG];
99
static int int_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG];
100
static char type_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG];
97
* pushed to the storage backend (whatever used)
98
* (3 = datetime + max 2 from time_mode) */
99
static str val_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG+3];
100
static int int_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG+3];
101
static char type_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG+3];
103
#define ACC_TIME_FORMAT_SIZE 128
104
static char acc_time_format_buf[ACC_TIME_FORMAT_SIZE];
102
106
/********************************************
103
107
* acc CORE function
278
LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu%s",
279
acc_env.text.len, acc_env.text.s,(unsigned long) acc_env.ts, log_msg);
285
if(acc_time_mode==1) {
286
LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu;%s=%u%s",
287
acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts,
288
acc_time_exten.s, (unsigned int)acc_env.tv.tv_usec,
290
} else if(acc_time_mode==2) {
291
LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu;%s=%.3f%s",
292
acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts,
294
(((double)(acc_env.tv.tv_sec * 1000)
295
+ (acc_env.tv.tv_usec / 1000)) / 1000),
297
} else if(acc_time_mode==3 || acc_time_mode==4) {
298
if(acc_time_mode==3) {
299
t = localtime(&acc_env.ts);
301
t = gmtime(&acc_env.ts);
303
if(strftime(acc_time_format_buf, ACC_TIME_FORMAT_SIZE,
304
acc_time_format, t)<=0) {
305
acc_time_format_buf[0] = '\0';
307
LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu;%s=%s%s",
308
acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts,
313
LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu%s",
314
acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts,
291
/* caution: keys need to be aligned to core format */
292
static db_key_t db_keys[ACC_CORE_LEN+1+MAX_ACC_EXTRA+MAX_ACC_LEG];
293
static db_val_t db_vals[ACC_CORE_LEN+1+MAX_ACC_EXTRA+MAX_ACC_LEG];
328
/* caution: keys need to be aligned to core format
329
* (3 = datetime + max 2 from time_mode) */
330
static db_key_t db_keys[ACC_CORE_LEN+3+MAX_ACC_EXTRA+MAX_ACC_LEG];
331
static db_val_t db_vals[ACC_CORE_LEN+3+MAX_ACC_EXTRA+MAX_ACC_LEG];
334
int acc_get_db_handlers(void **vf, void **vh) {
337
*vf = (void*)&acc_dbf;
338
*vh = (void*)db_handle;
296
342
static void acc_db_init_keys(void)
311
357
db_keys[n++] = &acc_sipreason_col;
312
358
db_keys[n++] = &acc_time_col;
360
if(acc_time_mode==1 || acc_time_mode==2
361
|| acc_time_mode==3 || acc_time_mode==4) {
362
db_keys[n++] = &acc_time_attr;
363
if(acc_time_mode==1) {
364
db_keys[n++] = &acc_time_exten;
315
368
/* init the extra db keys */
316
369
for(extra=db_extra; extra ; extra=extra->next)
326
379
VAL_NULL(db_vals+i)=0;
328
381
VAL_TYPE(db_vals+time_idx)=DB1_DATETIME;
382
if(acc_time_mode==1) {
383
VAL_TYPE(db_vals+time_idx+1)=DB1_INT;
384
VAL_TYPE(db_vals+time_idx+2)=DB1_INT;
385
} else if(acc_time_mode==2) {
386
VAL_TYPE(db_vals+time_idx+1)=DB1_DOUBLE;
387
} else if(acc_time_mode==3 || acc_time_mode==4) {
388
VAL_TYPE(db_vals+time_idx+1)=DB1_STRING;
384
446
VAL_STR(db_vals+i) = val_arr[i];
386
448
VAL_TIME(db_vals+(m++)) = acc_env.ts;
449
/* extra time value */
450
if(acc_time_mode==1) {
451
VAL_INT(db_vals+(m++)) = (int)acc_env.tv.tv_sec;
453
VAL_INT(db_vals+(m++)) = (int)acc_env.tv.tv_usec;
455
} else if(acc_time_mode==2) {
456
VAL_DOUBLE(db_vals+(m++)) = ((double)(acc_env.tv.tv_sec * 1000)
457
+ (acc_env.tv.tv_usec / 1000)) / 1000;
459
} else if(acc_time_mode==3 || acc_time_mode==4) {
460
if(acc_time_mode==3) {
461
t = localtime(&acc_env.ts);
463
t = gmtime(&acc_env.ts);
465
if(strftime(acc_time_format_buf, ACC_TIME_FORMAT_SIZE,
466
acc_time_format, t)<=0) {
467
acc_time_format_buf[0] = '\0';
469
VAL_STRING(db_vals+(m++)) = acc_time_format_buf;
388
473
/* extra columns */
389
474
m += extra2strar( db_extra, rq, val_arr+m, int_arr+m, type_arr+m);