[sr-dev] git:master:ac2572b8: modules/registrar: apply method_filtering only on initial requests w/o to-tag

Juha Heinanen jh at tutpro.com
Sat Apr 8 14:23:59 CEST 2017


Module: kamailio
Branch: master
Commit: ac2572b880c5373864a55ebe1b9e538dd9337e63
URL: https://github.com/kamailio/kamailio/commit/ac2572b880c5373864a55ebe1b9e538dd9337e63

Author: Juha Heinanen <jh at tutpro.com>
Committer: Juha Heinanen <jh at tutpro.com>
Date: 2017-04-08T15:22:54+03:00

modules/registrar: apply method_filtering only on initial requests w/o to-tag

---

Modified: src/modules/registrar/README
Modified: src/modules/registrar/doc/registrar_admin.xml
Modified: src/modules/registrar/lookup.c

---

Diff:  https://github.com/kamailio/kamailio/commit/ac2572b880c5373864a55ebe1b9e538dd9337e63.diff
Patch: https://github.com/kamailio/kamailio/commit/ac2572b880c5373864a55ebe1b9e538dd9337e63.patch

---

diff --git a/src/modules/registrar/README b/src/modules/registrar/README
index 220e2a8..0b80869 100644
--- a/src/modules/registrar/README
+++ b/src/modules/registrar/README
@@ -568,9 +568,10 @@ modparam("registrar", "sock_hdr_name", "Sock-Info")
 3.17. method_filtering (integer)
 
    Tells if the contact filtering based on supported methods should be
-   performed during lookup. It's enabled only if it has a non zero value.
-   Supported methods are listed in the “Allow:” header in the REGISTER
-   message and stored in the location database.
+   performed during lookup on initial requests without to-tag. It's
+   enabled only if it has a non zero value. Supported methods are listed
+   in the “Allow:” header in the REGISTER message and stored in the
+   location database.
 
    Default value is 0 (disabled).
 
@@ -882,9 +883,9 @@ save("location", "0x00", "sip:test at kamailio.org");
    value and optionally the rest will be appended to the message
    (depending on append_branches parameter value).
 
-   If the method_filtering option is enabled, the lookup function will
-   return only the contacts that support the method of the processed
-   request.
+   If the method_filtering option is enabled and request is initial
+   request without to-tag, the lookup function will return only the
+   contacts that support the method of the processed request.
 
    Meaning of the parameters is as follows:
      * domain - Name of table that should be used for the lookup.
diff --git a/src/modules/registrar/doc/registrar_admin.xml b/src/modules/registrar/doc/registrar_admin.xml
index 0a81b8b..7e98b05 100644
--- a/src/modules/registrar/doc/registrar_admin.xml
+++ b/src/modules/registrar/doc/registrar_admin.xml
@@ -515,7 +515,8 @@ modparam("registrar", "sock_hdr_name", "Sock-Info")
 		<title><varname>method_filtering</varname> (integer)</title>
 		<para>
 		Tells if the contact filtering based on supported methods should be
-		performed during lookup. It's enabled only if it has a non zero 
+		performed during lookup on initial requests without to-tag.
+        It's enabled only if it has a non zero 
 		value. Supported methods are listed in the <quote>Allow:</quote> 
 		header in the REGISTER message and stored in the location database.
 		</para>
@@ -1077,8 +1078,9 @@ save("location", "0x00", "sip:test at kamailio.org");
 		the message (depending on append_branches parameter value).
 		</para>
 		<para>
-		If the <varname>method_filtering</varname> option is enabled,
-		the <function>lookup</function> function
+		If the <varname>method_filtering</varname> option is enabled and
+        request is initial request without to-tag, the
+        <function>lookup</function> function 
 		will return only the contacts that support the method of the
 		processed request.
 		</para>
diff --git a/src/modules/registrar/lookup.c b/src/modules/registrar/lookup.c
index c9853a6..27d040b 100644
--- a/src/modules/registrar/lookup.c
+++ b/src/modules/registrar/lookup.c
@@ -45,9 +45,16 @@
 #include "lookup.h"
 #include "config.h"
 
-#define allowed_method(_msg, _c) \
-	( !method_filtering || ((_msg)->REQ_METHOD)&((_c)->methods) )
+static int has_to_tag(struct sip_msg* msg)
+{
 
+	if (parse_to_header(msg) < 0) return 0;
+	return (get_to(msg)->tag_value.len > 0) ? 1 : 0;
+}
+
+#define allowed_method(_msg, _c) \
+	( !method_filtering || ((_msg)->REQ_METHOD)&((_c)->methods) || \
+	  has_to_tag(_msg) )
 
 /**
  * compare two instances, by skipping '<' & '>'




More information about the sr-dev mailing list