From 750248ca22f0b8f03373cae2a56d56c3e0ae6d81 Mon Sep 17 00:00:00 2001 From: Yasin CANER Date: Fri, 23 Oct 2015 11:12:43 +0300 Subject: [PATCH 1/3] acc_radius : added radius time mode added radius time mode for new event-timestamp . Format is seconds.microseconds --- modules/acc_radius/acc_radius_mod.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/modules/acc_radius/acc_radius_mod.c b/modules/acc_radius/acc_radius_mod.c index 5a660d6e331..e3be7dfa518 100644 --- a/modules/acc_radius/acc_radius_mod.c +++ b/modules/acc_radius/acc_radius_mod.c @@ -74,6 +74,7 @@ static char *radius_config = 0; int radius_flag = -1; int radius_missed_flag = -1; static int service_type = -1; +int rad_time_mode=0; void *rh; /* rad extra variables */ static char *rad_extra_str = 0; @@ -91,11 +92,12 @@ static cmd_export_t cmds[] = { static param_export_t params[] = { - {"radius_config", PARAM_STRING, &radius_config }, + {"radius_config", PARAM_STRING, &radius_config }, {"radius_flag", INT_PARAM, &radius_flag }, {"radius_missed_flag", INT_PARAM, &radius_missed_flag }, {"service_type", INT_PARAM, &service_type }, - {"radius_extra", PARAM_STRING, &rad_extra_str }, + {"radius_extra", PARAM_STRING, &rad_extra_str }, + {"rad_time_mode", INT_PARAM, &rad_time_mode }, {0,0,0} }; @@ -328,6 +330,8 @@ int acc_radius_send_request(struct sip_msg *req, acc_info_t *inf) int m=0; int o=0; int rc_result=-1; + double tsecmicro; + char smicrosec[18]; send=NULL; @@ -347,9 +351,18 @@ int acc_radius_send_request(struct sip_msg *req, acc_info_t *inf) av_type = req->REQ_METHOD; /* method */ ADD_RAD_AVPAIR( RA_SIP_METHOD, &av_type, -1); - /* unix time */ - av_type = (uint32_t)inf->env->ts; - ADD_RAD_AVPAIR( RA_TIME_STAMP, &av_type, -1); + // Event Time Stamp with Microseconds + if(rad_time_mode==1){ + gettimeofday(&inf->env->tv, NULL); + tsecmicro=inf->env->tv.tv_sec+((double)inf->env->tv.tv_usec/1000000.0); + //radius client doesn t support double so convert it + sprintf(smicrosec,"%f",tsecmicro); + ADD_RAD_AVPAIR(RA_TIME_STAMP, &smicrosec, -1); + }else{ + av_type = (uint32_t)inf->env->ts; + ADD_RAD_AVPAIR(RA_TIME_STAMP, &av_type, -1); + } + /* add extra also */ o = accb.get_extra_attrs(rad_extra, req, inf->varr+attr_cnt, From 7d2e763b2859ef614040c7b28c3aceb132eb95d3 Mon Sep 17 00:00:00 2001 From: Yasin CANER Date: Mon, 26 Oct 2015 15:49:24 +0200 Subject: [PATCH 2/3] acc_radius : fixed representation fixed exponential representation in converting --- modules/acc_radius/acc_radius_mod.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/acc_radius/acc_radius_mod.c b/modules/acc_radius/acc_radius_mod.c index e3be7dfa518..382033990d0 100644 --- a/modules/acc_radius/acc_radius_mod.c +++ b/modules/acc_radius/acc_radius_mod.c @@ -356,7 +356,7 @@ int acc_radius_send_request(struct sip_msg *req, acc_info_t *inf) gettimeofday(&inf->env->tv, NULL); tsecmicro=inf->env->tv.tv_sec+((double)inf->env->tv.tv_usec/1000000.0); //radius client doesn t support double so convert it - sprintf(smicrosec,"%f",tsecmicro); + sprintf(smicrosec,"%17.6f",tsecmicro); ADD_RAD_AVPAIR(RA_TIME_STAMP, &smicrosec, -1); }else{ av_type = (uint32_t)inf->env->ts; From 4505878d8be26e2e5497cbba581a2a912a824912 Mon Sep 17 00:00:00 2001 From: Yasin CANER Date: Mon, 26 Oct 2015 16:16:12 +0200 Subject: [PATCH 3/3] acc_radius : added doc for rad_time_mode added information about new mod paramaeter rad_time_mode --- modules/acc_radius/doc/acc_radius_admin.xml | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/modules/acc_radius/doc/acc_radius_admin.xml b/modules/acc_radius/doc/acc_radius_admin.xml index 17ebd2cce31..f4394579152 100644 --- a/modules/acc_radius/doc/acc_radius_admin.xml +++ b/modules/acc_radius/doc/acc_radius_admin.xml @@ -166,6 +166,39 @@ modparam("acc_radius", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)") +
+ <varname>rad_time_mode</varname>(integer) + + Radius Event-Timestamp for accounting. + + + Values can be: + + + + 0 - (default), format is only unix + timestamp for Event-Timestamp (For example: 1445590624) + + + 1 - format is unix timestamp with microseconds + in Addition, it needs to change Event-Timestamp attribute type in dictionary to string + both radius server and client + (For example: 1445590624.377372) + + + + + Default value is 0 (Unix timestamp). + + + rad_time_mode example + +... +modparam("acc_radius", "rad_time_mode", 1) +... + + +