Skip to content

Commit

Permalink
acc: Fix "ms_duration" computation
Browse files Browse the repository at this point in the history
Reported by John Quick

(cherry picked from commit f2c86ed)
(cherry picked from commit 88b3cb6)
  • Loading branch information
liviuchircu committed May 7, 2018
1 parent 053f1fe commit 6a07d58
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
9 changes: 4 additions & 5 deletions modules/acc/acc.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ int acc_log_cdrs(struct dlg_cell *dlg, struct sip_msg *msg,
acc_env.text.len, acc_env.text.s,(unsigned long)created,
(unsigned long)start_time.tv_sec,
(unsigned long)(end->tv_sec-start_time.tv_sec),
(unsigned long)((end->tv_sec-start_time.tv_sec)*1000+(end->tv_usec-start_time.tv_usec)%1000),
(unsigned long)TIMEVAL_MS_DIFF(start_time, *end),
(unsigned long)(start_time.tv_sec - created), log_msg);

res = 1;
Expand Down Expand Up @@ -730,7 +730,7 @@ int acc_db_cdrs(struct dlg_cell *dlg, struct sip_msg *msg,
VAL_TIME(db_vals_cdrs+ret+nr_vals+nr_bye_vals+2) = created;
VAL_INT(db_vals_cdrs+ret+nr_vals+nr_bye_vals+3) = end->tv_sec - start_time.tv_sec;
VAL_INT(db_vals_cdrs+ret+nr_vals+nr_bye_vals+4) =
(end->tv_sec-start_time.tv_sec)*1000+(end->tv_usec-start_time.tv_usec)%1000;
TIMEVAL_MS_DIFF(start_time, *end);

total = ret + 5;
acc_dbf.use_table(db_handle, &table);
Expand Down Expand Up @@ -1054,7 +1054,7 @@ int acc_aaa_cdrs(struct dlg_cell *dlg, struct sip_msg *msg,
/* add duration and setup values */
av_type = (uint32_t)(end->tv_sec - start_time.tv_sec);
ADD_AAA_AVPAIR( offset + nr_vals, &av_type, -1);
av_type = (uint32_t)((end->tv_sec-start_time.tv_sec)*1000+(end->tv_usec-start_time.tv_usec)%1000);
av_type = (uint32_t)TIMEVAL_MS_DIFF(start_time, *end);;
ADD_AAA_AVPAIR( offset + nr_vals + 1, &av_type, -1);
av_type = (uint32_t)(start_time.tv_sec - created);
ADD_AAA_AVPAIR( offset + nr_vals + 2, &av_type, -1);
Expand Down Expand Up @@ -1601,8 +1601,7 @@ int acc_evi_cdrs(struct dlg_cell *dlg, struct sip_msg *msg,
LM_ERR("cannot set duration parameter\n");
goto end;
}
aux_time = (end->tv_sec-start_time.tv_sec)*1000
+ (end->tv_usec-start_time.tv_usec)%1000;
aux_time = TIMEVAL_MS_DIFF(start_time, *end);
if (evi_param_set_int(evi_params[ret+nr_vals+nr_bye_vals+2], &aux_time) < 0) {
LM_ERR("cannot set duration parameter\n");
goto end;
Expand Down
4 changes: 4 additions & 0 deletions ut.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,10 @@ struct sip_msg;
#define translate_pointer( _new_buf , _org_buf , _p) \
( (_p)?(_new_buf + (_p-_org_buf)):(0) )

#define TIMEVAL_MS_DIFF(_tva, _tvb) \
((((_tvb).tv_sec * 1000000UL + (_tvb).tv_usec) - \
((_tva).tv_sec * 1000000UL + (_tva).tv_usec)) / 1000UL)

#define via_len(_via) \
((_via)->bsize-((_via)->name.s-\
((_via)->hdr.s+(_via)->hdr.len)))
Expand Down

0 comments on commit 6a07d58

Please sign in to comment.