[sr-dev] git:master: modules/outbound: added force_no_outbound flag

Juha Heinanen jh at tutpro.com
Thu Apr 25 13:12:47 CEST 2013


Module: sip-router
Branch: master
Commit: 744a8d317b894a1360e3441a9e69ac9190a1745b
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=744a8d317b894a1360e3441a9e69ac9190a1745b

Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at tutpro.com>
Date:   Thu Apr 25 14:12:21 2013 +0300

modules/outbound: added force_no_outbound flag

---

 modules/outbound/README                 |   29 +++++++++++++++++++++++------
 modules/outbound/doc/outbound_admin.xml |   19 +++++++++++++++++++
 modules/outbound/ob_mod.c               |   17 ++++++++++++++++-
 3 files changed, 58 insertions(+), 7 deletions(-)

diff --git a/modules/outbound/README b/modules/outbound/README
index 057fefa..2f23ab1 100644
--- a/modules/outbound/README
+++ b/modules/outbound/README
@@ -4,7 +4,7 @@ Peter Dunkley
 
    Crocodile RCS Ltd
 
-   Copyright © 2012-2013 Crocodile RCS Ltd
+   Copyright (c) 2012-2013 Crocodile RCS Ltd
      __________________________________________________________________
 
    Table of Contents
@@ -24,6 +24,7 @@ Peter Dunkley
         3. Parameters
 
               3.1. force_outbound_flag (integer)
+              3.2. force_no_outbound_flag (integer)
 
         4. Functions
         5. MI Commands
@@ -33,6 +34,7 @@ Peter Dunkley
    1.1. Edge Proxy Configuration
    1.2. Registrar Configuration
    1.3. Set force_outbound_flag parameter
+   1.4. Set force_no_outbound_flag parameter
 
 Chapter 1. Admin Guide
 
@@ -51,6 +53,7 @@ Chapter 1. Admin Guide
    3. Parameters
 
         3.1. force_outbound_flag (integer)
+        3.2. force_no_outbound_flag (integer)
 
    4. Functions
    5. MI Commands
@@ -69,7 +72,7 @@ Chapter 1. Admin Guide
 1.1. Edge Proxy Keep-Alives (STUN)
 
    Outbound Edge Proxies MUST support STUN NAT keep-alives on their SIP
-   UDP ports. Kamailio supports this though the “stun” module.
+   UDP ports. Kamailio supports this though the "stun" module.
 
 1.2. Flow Timer
 
@@ -78,9 +81,9 @@ Chapter 1. Admin Guide
    responses to REGISTERs.
 
    When using TCP or TLS as the SIP transport care should be taken to set
-   the “tcp_connection_lifetime” on the Edge Proxy to a value slightly
+   the "tcp_connection_lifetime" on the Edge Proxy to a value slightly
    larger than the interval the Registrar is using for flow timer. Setting
-   “tcp_connection_lifetime” to less than the interval could cause
+   "tcp_connection_lifetime" to less than the interval could cause
    connections to be lost, and setting it to a value much larger than the
    interval will keep connections open far longer than is required (which
    is wasteful).
@@ -88,9 +91,9 @@ Chapter 1. Admin Guide
    Application-layer keep-alives are optional when the underlying
    transport already has a keep-alive mechanism. The WebSocket transport
    has a transport-layer keep-alive. When using the WebSocket transport
-   the “keepalive_timeout” should be set to a value a little greater than
+   the "keepalive_timeout" should be set to a value a little greater than
    the Registrar flow timer interval and a little less than the
-   “tcp_connection_lifetime”.
+   "tcp_connection_lifetime".
 
    Example 1.1. Edge Proxy Configuration
 #!KAMAILIO
@@ -489,6 +492,7 @@ event_route[tm:branch-failure:FAIL-BRANCH] {
 3. Parameters
 
    3.1. force_outbound_flag (integer)
+   3.2. force_no_outbound_flag (integer)
 
 3.1. force_outbound_flag (integer)
 
@@ -503,6 +507,19 @@ event_route[tm:branch-failure:FAIL-BRANCH] {
 modparam("outbound", "force_outbound_flag", 1)
 ...
 
+3.2. force_no_outbound_flag (integer)
+
+   A flag which, if set for a request, will force path and rr not to add
+   flow tokens to Path: and Record-Route: headers regardless of the
+   request contents.
+
+   Default value is -1.
+
+   Example 1.4. Set force_no_outbound_flag parameter
+...
+modparam("outbound", "force_no_outbound_flag", 2)
+...
+
 4. Functions
 
    None
diff --git a/modules/outbound/doc/outbound_admin.xml b/modules/outbound/doc/outbound_admin.xml
index dca8448..4cd8f0d 100644
--- a/modules/outbound/doc/outbound_admin.xml
+++ b/modules/outbound/doc/outbound_admin.xml
@@ -481,6 +481,25 @@ modparam("outbound", "force_outbound_flag", 1)
 </programlisting>
 		</example>
 	</section>
+
+	<section>
+		<title><varname>force_no_outbound_flag</varname> (integer)</title>
+		<para>A flag which, if set for a request, will force
+		<emphasis>path</emphasis> and <emphasis>rr</emphasis> not
+		to add flow tokens to Path: and Record-Route: headers
+		regardless of the request contents.</para>
+		<para><emphasis>Default value is -1.</emphasis></para>
+		<example>
+		<title>Set <varname>force_no_outbound_flag</varname> parameter
+		</title>
+		<programlisting format="linespecific">
+...
+modparam("outbound", "force_no_outbound_flag", 2)
+...
+</programlisting>
+		</example>
+	</section>
+
 	</section>
 
 	<section>
diff --git a/modules/outbound/ob_mod.c b/modules/outbound/ob_mod.c
index 69ac1e0..a2b6d12 100644
--- a/modules/outbound/ob_mod.c
+++ b/modules/outbound/ob_mod.c
@@ -48,6 +48,7 @@ static int mod_init(void);
 static void destroy(void);
 
 static unsigned int ob_force_flag = (unsigned int) -1;
+static unsigned int ob_force_no_flag = (unsigned int) -1;
 static str ob_key = {0, 0};
 
 static cmd_export_t cmds[]= 
@@ -61,6 +62,7 @@ static cmd_export_t cmds[]=
 static param_export_t params[]=
 {
 	{ "force_outbound_flag",	INT_PARAM, &ob_force_flag },
+	{ "force_no_outbound_flag",     INT_PARAM, &ob_force_no_flag },
 	{ 0, 0, 0 }
 };
 
@@ -88,6 +90,12 @@ static int mod_init(void)
 		return -1;
 	}
 
+	if (ob_force_no_flag != -1 && !flag_in_range(ob_force_no_flag))
+	{
+		LM_ERR("bad no_outbound_flag value (%d)\n", ob_force_no_flag);
+		return -1;
+	}
+
 	if ((ob_key.s = shm_malloc(OB_KEY_LEN)) == NULL)
 	{
 		LM_ERR("Failed to allocate memory for flow-token key\n");
@@ -451,10 +459,17 @@ int use_outbound(struct sip_msg *msg)
 	/* If Outbound is forced return success without any further checks */
 	if (ob_force_flag != -1 && isflagset(msg, ob_force_flag) > 0)
 	{
-		LM_DBG("outbound forced\n");
+		LM_DBG("outbound used by force\n");
 		return 1;
 	}
 
+	/* If Outbound is turned off, return failure without any further checks */
+	if (ob_force_no_flag != -1 && isflagset(msg, ob_force_no_flag) > 0)
+	{
+		LM_DBG("outbound not used by force\n");
+		return 0;
+	}
+
 	LM_DBG("Analysing %.*s for outbound markers\n",
 		msg->first_line.u.request.method.len,
 		msg->first_line.u.request.method.s);




More information about the sr-dev mailing list