From d278467883a45db4088f4665a125f68b1d0b4011 Mon Sep 17 00:00:00 2001 From: Julien Chavanton Date: Thu, 11 Oct 2018 13:37:56 -0700 Subject: [PATCH 1/2] acc: generating duplicates for missed calls issue #1673 --- src/modules/acc/acc.c | 12 ++++++------ src/modules/acc/acc_logic.c | 18 ++++++++++++------ src/modules/acc_diameter/acc_diameter_mod.c | 4 ++-- src/modules/acc_json/acc_json_mod.c | 4 ++-- src/modules/acc_radius/acc_radius_mod.c | 4 ++-- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/modules/acc/acc.c b/src/modules/acc/acc.c index 24d26304e52..9879e697fff 100644 --- a/src/modules/acc/acc.c +++ b/src/modules/acc/acc.c @@ -526,7 +526,7 @@ int is_eng_acc_on(sip_msg_t *msg) } while(e) { if(e->flags & 1) { - if(msg->flags & e->acc_flag) { + if(isflagset(msg, e->acc_flag) == 1) { return 1; } } @@ -549,7 +549,7 @@ int is_eng_mc_on(sip_msg_t *msg) } while(e) { if(e->flags & 1) { - if(msg->flags & e->missed_flag) { + if(isflagset(msg, e->missed_flag) == 1) { return 1; } } @@ -579,15 +579,15 @@ int acc_run_engines(struct sip_msg *msg, int type, int *reset) inf.leg_info = leg_info; while(e) { if(e->flags & 1) { - if((type==0) && (msg->flags&(e->acc_flag))) { + if((type==0) && isflagset(msg, e->acc_flag) == 1) { LM_DBG("acc event for engine: %s\n", e->name); e->acc_req(msg, &inf); - if(reset) *reset |= e->acc_flag; + if(reset) *reset |= 1 << e->acc_flag; } - if((type==1) && (msg->flags&(e->missed_flag))) { + if((type==1) && isflagset(msg, e->missed_flag) == 1) { LM_DBG("missed event for engine: %s\n", e->name); e->acc_req(msg, &inf); - if(reset) *reset |= e->missed_flag; + if(reset) *reset |= 1 << e->missed_flag; } } e = e->next; diff --git a/src/modules/acc/acc_logic.c b/src/modules/acc/acc_logic.c index e0443ce906f..e913e89e861 100644 --- a/src/modules/acc/acc_logic.c +++ b/src/modules/acc/acc_logic.c @@ -55,7 +55,6 @@ struct acc_enviroment acc_env; #define is_acc_flag_set(_rq,_flag) (((_flag) != -1) && (isflagset((_rq), (_flag)) == 1)) -#define reset_acc_flag(_rq,_flag) (resetflag((_rq), (_flag))) #define is_failed_acc_on(_rq) is_acc_flag_set(_rq,failed_transaction_flag) @@ -464,7 +463,15 @@ static inline void acc_onreply_in(struct cell *t, struct sip_msg *req, } } - +static void reset_acc_flags(struct sip_msg *req, int flags_to_reset) { + int x; + for (x=0;x<32;x++) { + if (flags_to_reset & 1<=0) { req->new_uri = new_uri_bk; diff --git a/src/modules/acc_diameter/acc_diameter_mod.c b/src/modules/acc_diameter/acc_diameter_mod.c index 02ac75dc989..3a35fe7e930 100644 --- a/src/modules/acc_diameter/acc_diameter_mod.c +++ b/src/modules/acc_diameter/acc_diameter_mod.c @@ -143,9 +143,9 @@ static int mod_init( void ) memset(&_acc_diameter_engine, 0, sizeof(acc_engine_t)); if(diameter_flag != -1) - _acc_diameter_engine.acc_flag = 1< Date: Mon, 15 Oct 2018 09:23:23 -0700 Subject: [PATCH 2/2] core: adding helper function resetflags --- src/core/flags.c | 5 +++++ src/core/flags.h | 1 + src/modules/acc/acc_logic.c | 11 +---------- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/core/flags.c b/src/core/flags.c index 5b603706e3a..c20f45f67f4 100644 --- a/src/core/flags.c +++ b/src/core/flags.c @@ -52,6 +52,11 @@ int resetflag( struct sip_msg* msg, flag_t flag ) { return 1; } +int resetflags( struct sip_msg* msg, flag_t flags ) { + msg->flags &= ~ flags; + return 1; +} + int isflagset( struct sip_msg* msg, flag_t flag ) { return (msg->flags & (1<=0) { req->new_uri = new_uri_bk;