Module: kamailio
Branch: master
Commit: d75bb85c4a03dedb33004fe04c447182fdf37f5c
URL:
https://github.com/kamailio/kamailio/commit/d75bb85c4a03dedb33004fe04c44718…
Author: Stefan Mititelu <stefan.mititelu(a)1and1.ro>
Committer: Stefan Mititelu <stefan.mititelu(a)1and1.ro>
Date: 2015-11-10T16:04:30+02:00
rtpengine: Add rtpengine_allow_op modparam
When the param is enabled, allow current sessions to finish and deny new
sessions for manually deactivated rtpengine nodes via kamctl i.e.
"disabled(permanent)" nodes.
This is useful when deactivating the nodes for maintenance.
Default value is 0, so the current behaviour is maintained
(e.g. don't send commands to any deactivated proxy).
Updated doku.
---
Modified: modules/rtpengine/doc/rtpengine_admin.xml
Modified: modules/rtpengine/rtpengine.c
---
Diff:
https://github.com/kamailio/kamailio/commit/d75bb85c4a03dedb33004fe04c44718…
Patch:
https://github.com/kamailio/kamailio/commit/d75bb85c4a03dedb33004fe04c44718…
---
diff --git a/modules/rtpengine/doc/rtpengine_admin.xml
b/modules/rtpengine/doc/rtpengine_admin.xml
index 96a490d..34e197f 100644
--- a/modules/rtpengine/doc/rtpengine_admin.xml
+++ b/modules/rtpengine/doc/rtpengine_admin.xml
@@ -210,6 +210,30 @@ modparam("rtpengine", "rtpengine_tout_ms", 2000)
</programlisting>
</example>
</section>
+ <section id="rtpengine.p.rtpengine_allow_op">
+ <title><varname>rtpengine_allow_op</varname> (integer)</title>
+ <para>
+ Enable this to allow finishing the current sessions while denying new sessions for the
+ <emphasis>manually deactivated nodes </emphasis> via kamctl command i.e.
"disabled(permanent)" nodes.
+ Probably the manually deactivated machine is still running(did not crash).
+ </para>
+ <para>
+ This is <emphasis>useful</emphasis> when deactivating a node for
maintanance and reject new sessions but allow current ones to finish.
+ </para>
+ <para>
+ <emphasis>
+ Default value is <quote>0</quote> to keep the current behaviour.
+ </emphasis>
+ </para>
+ <example>
+ <title>Set <varname>rtpengine_allow_op</varname>
parameter</title>
+ <programlisting format="linespecific">
+...
+modparam("rtpengine", "rtpengine_allow_op", 1)
+...
+</programlisting>
+ </example>
+ </section>
<section id="rtpengine.p.queried_nodes_limit">
<title><varname>queried_nodes_limit</varname>
(integer)</title>
<para>
diff --git a/modules/rtpengine/rtpengine.c b/modules/rtpengine/rtpengine.c
index b3ca011..042c477 100644
--- a/modules/rtpengine/rtpengine.c
+++ b/modules/rtpengine/rtpengine.c
@@ -227,6 +227,7 @@ static struct mi_root* mi_show_hash_total(struct mi_root* cmd_tree,
void* param)
static int rtpengine_disable_tout = 60;
+static int rtpengine_allow_op = 0;
static int rtpengine_retr = 5;
static int rtpengine_tout_ms = 1000;
static int queried_nodes_limit = MAX_RTPP_TRIED_NODES;
@@ -334,6 +335,7 @@ static param_export_t params[] = {
{"rtpengine_disable_tout",INT_PARAM, &rtpengine_disable_tout },
{"rtpengine_retr", INT_PARAM, &rtpengine_retr },
{"rtpengine_tout_ms", INT_PARAM, &rtpengine_tout_ms },
+ {"rtpengine_allow_op", INT_PARAM, &rtpengine_allow_op },
{"queried_nodes_limit", INT_PARAM, &queried_nodes_limit },
{"db_url", PARAM_STR, &rtpp_db_url },
{"table_name", PARAM_STR, &rtpp_table_name },
@@ -2369,7 +2371,7 @@ select_rtpp_node_new(str callid, int do_test, int op)
}
/*
- * lookup the hastable (key=callid value=node) and get the old node
+ * lookup the hastable (key=callid value=node) and get the old node (e.g. for
answer/delete)
*/
static struct rtpp_node *
select_rtpp_node_old(str callid, int do_test, int op)
@@ -2396,11 +2398,22 @@ select_rtpp_node_old(str callid, int do_test, int op)
node->rn_url.len, node->rn_url.s, callid.len, callid.len, callid.s);
}
- // if node broke, don't send any message
+ // if node enabled, return it
if (!node->rn_disabled) {
return node;
+ }
+
+ // if node _manually_ disabled(e.g kamctl) and proper configuration, return it
+ if (node->rn_recheck_ticks == MI_MAX_RECHECK_TICKS) {
+ if (rtpengine_allow_op) {
+ LM_DBG("node=%.*s for calllen=%d callid=%.*s is disabled(permanent) (probably
still UP)! Return it\n",
+ node->rn_url.len, node->rn_url.s, callid.len, callid.len, callid.s);
+ return node;
+ }
+ LM_DBG("node=%.*s for calllen=%d callid=%.*s is disabled(permanent) (probably
still UP)! Return NULL\n",
+ node->rn_url.len, node->rn_url.s, callid.len, callid.len, callid.s);
} else {
- LM_DBG("rtpengine hash table lookup find node=%.*s for calllen=%d callid=%.*s,
which is disabled!\n",
+ LM_DBG("node=%.*s for calllen=%d callid=%.*s is disabled (probably BROKE)! Return
NULL\n",
node->rn_url.len, node->rn_url.s, callid.len, callid.len, callid.s);
}