From 3977a7de4de1f3e764c2169d26255c4fe87891fd Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Wed, 1 Jul 2020 17:40:50 +0200 Subject: [PATCH 1/6] cnxcc: don't store call if this cid is already registered for this client --- src/modules/cnxcc/cnxcc_mod.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/modules/cnxcc/cnxcc_mod.c b/src/modules/cnxcc/cnxcc_mod.c index 55d9bf00a13..407dbfc9f17 100644 --- a/src/modules/cnxcc/cnxcc_mod.c +++ b/src/modules/cnxcc/cnxcc_mod.c @@ -1578,6 +1578,7 @@ static int ki_set_max_credit(sip_msg_t *msg, str *sclient, str *scredit, { credit_data_t *credit_data = NULL; call_t *call = NULL; + hash_tables_t *hts = NULL; double credit = 0, connect_cost = 0, cost_per_second = 0; @@ -1619,6 +1620,12 @@ static int ki_set_max_credit(sip_msg_t *msg, str *sclient, str *scredit, return -1; } + if(try_get_call_entry(&msg->callid->body, &call, &hts) == 0) { + LM_ERR("call-id[%.*s] already present\n", + msg->callid->body.len, msg->callid->body.s); + return -2; + } + LM_DBG("Setting up new call for client [%.*s], max-credit[%f], " "connect-cost[%f], cost-per-sec[%f], initial-pulse [%d], " "final-pulse [%d], call-id[%.*s]\n", @@ -1796,6 +1803,7 @@ static int ki_set_max_channels(sip_msg_t *msg, str *sclient, int max_chan) { credit_data_t *credit_data = NULL; call_t *call = NULL; + hash_tables_t *hts = NULL; if(parse_headers(msg, HDR_CALLID_F, 0) != 0) { LM_ERR("Error parsing Call-ID"); @@ -1826,6 +1834,12 @@ static int ki_set_max_channels(sip_msg_t *msg, str *sclient, int max_chan) return -1; } + if(try_get_call_entry(&msg->callid->body, &call, &hts) == 0) { + LM_ERR("call-id[%.*s] already present\n", + msg->callid->body.len, msg->callid->body.s); + return -2; + } + LM_DBG("Setting up new call for client [%.*s], max-chan[%d], " "call-id[%.*s]\n", sclient->len, sclient->s, max_chan, msg->callid->body.len, @@ -1882,6 +1896,7 @@ static int ki_set_max_time(sip_msg_t *msg, str *sclient, int max_secs) { credit_data_t *credit_data = NULL; call_t *call = NULL; + hash_tables_t *hts = NULL; if(parse_headers(msg, HDR_CALLID_F, 0) != 0) { LM_ERR("Error parsing Call-ID"); @@ -1913,6 +1928,12 @@ static int ki_set_max_time(sip_msg_t *msg, str *sclient, int max_secs) return -1; } + if(try_get_call_entry(&msg->callid->body, &call, &hts) == 0) { + LM_ERR("call-id[%.*s] already present\n", + msg->callid->body.len, msg->callid->body.s); + return -2; + } + LM_DBG("Setting up new call for client [%.*s], max-secs[%d], " "call-id[%.*s]\n", sclient->len, sclient->s, max_secs, msg->callid->body.len, From c4f075c6b3cff4db9b75c8d8b498621589ce1d20 Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Wed, 1 Jul 2020 17:47:59 +0200 Subject: [PATCH 2/6] cnxcc: updated readme. New return value -2 if the CID is already registered [skip ci] --- src/modules/cnxcc/doc/cnxcc_admin.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/modules/cnxcc/doc/cnxcc_admin.xml b/src/modules/cnxcc/doc/cnxcc_admin.xml index 0c26cb0a581..d5c674f877d 100644 --- a/src/modules/cnxcc/doc/cnxcc_admin.xml +++ b/src/modules/cnxcc/doc/cnxcc_admin.xml @@ -543,14 +543,21 @@ route[CNXCC] $var(i_pulse) = 30; $var(f_pulse) = 6; - if (!cnxcc_set_max_credit("$var(client)", + + cnxcc_set_max_credit("$var(client)", "$var(credit)", "$var(connect_cost)", "$var(cost_per_sec)", "$var(i_pulse)", "$var(f_pulse)")) { - xlog("Error setting up credit control"); - } + + switch ($?) { + case -1: + xerr("Error setting up credit control"); + sl_send_reply("503", "Internal Server Error"); + case -2: + xwarn("$ci already exists for client $var(client)"); + }; } event_route[cnxcc:call-shutdown] From 77aec0e628d273629075b300d5a251f4d13a9ea8 Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Wed, 1 Jul 2020 17:54:01 +0200 Subject: [PATCH 3/6] cnxcc: readme example fixed [skip ci] --- src/modules/cnxcc/doc/cnxcc_admin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/cnxcc/doc/cnxcc_admin.xml b/src/modules/cnxcc/doc/cnxcc_admin.xml index d5c674f877d..6e823fce7d3 100644 --- a/src/modules/cnxcc/doc/cnxcc_admin.xml +++ b/src/modules/cnxcc/doc/cnxcc_admin.xml @@ -549,7 +549,7 @@ route[CNXCC] "$var(connect_cost)", "$var(cost_per_sec)", "$var(i_pulse)", - "$var(f_pulse)")) { + "$var(f_pulse)")); switch ($?) { case -1: From f16ea4705b9ed06184863ff63e9ad7505b1bc177 Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Thu, 2 Jul 2020 10:44:47 +0200 Subject: [PATCH 4/6] cnxcc: fix readme example [skip ci] --- src/modules/cnxcc/doc/cnxcc_admin.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/cnxcc/doc/cnxcc_admin.xml b/src/modules/cnxcc/doc/cnxcc_admin.xml index 6e823fce7d3..ca4404290eb 100644 --- a/src/modules/cnxcc/doc/cnxcc_admin.xml +++ b/src/modules/cnxcc/doc/cnxcc_admin.xml @@ -549,7 +549,7 @@ route[CNXCC] "$var(connect_cost)", "$var(cost_per_sec)", "$var(i_pulse)", - "$var(f_pulse)")); + "$var(f_pulse)"); switch ($?) { case -1: From 5b94195e3107aa4273205c8c14577d4d0f2ba5e6 Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Thu, 2 Jul 2020 12:02:28 +0200 Subject: [PATCH 5/6] cnxcc: some return values do not match in readme and code [skip ci] --- src/modules/cnxcc/doc/cnxcc.xml | 13 ------------- src/modules/cnxcc/doc/cnxcc_admin.xml | 12 +++++++++--- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/modules/cnxcc/doc/cnxcc.xml b/src/modules/cnxcc/doc/cnxcc.xml index 686583f471f..3fc10feb8d5 100644 --- a/src/modules/cnxcc/doc/cnxcc.xml +++ b/src/modules/cnxcc/doc/cnxcc.xml @@ -23,15 +23,6 @@ carlos.ruizdiaz@gmail.com - - Jose Luis - Verdeguer - verdeguer@zoonsuite.com - Zoon Suite -
- verdeguer@zoonsuite.com -
-
2013 @@ -41,10 +32,6 @@ 2014 Carlos Ruiz Díaz, carlos@latamvoices.com - - 2018 - Jose Luis Verdeguer - diff --git a/src/modules/cnxcc/doc/cnxcc_admin.xml b/src/modules/cnxcc/doc/cnxcc_admin.xml index ca4404290eb..dbc4bf20b14 100644 --- a/src/modules/cnxcc/doc/cnxcc_admin.xml +++ b/src/modules/cnxcc/doc/cnxcc_admin.xml @@ -177,7 +177,7 @@ modparam("cnxcc", "credit_check_period", 1) - -2 - failed, credit value is less than initial pulse value + -4 - call-id already present for this client @@ -345,6 +345,12 @@ if (!cnxcc_update_max_time("$var(client)", "$var(update_time)")) { + + + -4 - call-id already present for this client + + + @@ -555,8 +561,8 @@ route[CNXCC] case -1: xerr("Error setting up credit control"); sl_send_reply("503", "Internal Server Error"); - case -2: - xwarn("$ci already exists for client $var(client)"); + case -4: + xwarn("$ci already present for client $var(client)"); }; } From 2c568178154fcd174e61ea3a5168b15eb3871552 Mon Sep 17 00:00:00 2001 From: Jose Luis Verdeguer Date: Thu, 2 Jul 2020 12:05:58 +0200 Subject: [PATCH 6/6] cnxcc: Changing return code since -2 is in use --- src/modules/cnxcc/cnxcc_mod.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/cnxcc/cnxcc_mod.c b/src/modules/cnxcc/cnxcc_mod.c index 407dbfc9f17..82bcb9e0168 100644 --- a/src/modules/cnxcc/cnxcc_mod.c +++ b/src/modules/cnxcc/cnxcc_mod.c @@ -1623,7 +1623,7 @@ static int ki_set_max_credit(sip_msg_t *msg, str *sclient, str *scredit, if(try_get_call_entry(&msg->callid->body, &call, &hts) == 0) { LM_ERR("call-id[%.*s] already present\n", msg->callid->body.len, msg->callid->body.s); - return -2; + return -4; } LM_DBG("Setting up new call for client [%.*s], max-credit[%f], " @@ -1837,7 +1837,7 @@ static int ki_set_max_channels(sip_msg_t *msg, str *sclient, int max_chan) if(try_get_call_entry(&msg->callid->body, &call, &hts) == 0) { LM_ERR("call-id[%.*s] already present\n", msg->callid->body.len, msg->callid->body.s); - return -2; + return -4; } LM_DBG("Setting up new call for client [%.*s], max-chan[%d], " @@ -1931,7 +1931,7 @@ static int ki_set_max_time(sip_msg_t *msg, str *sclient, int max_secs) if(try_get_call_entry(&msg->callid->body, &call, &hts) == 0) { LM_ERR("call-id[%.*s] already present\n", msg->callid->body.len, msg->callid->body.s); - return -2; + return -4; } LM_DBG("Setting up new call for client [%.*s], max-secs[%d], "