[sr-dev] git:master: modules_k/nathelper: Add is_rfc1918(ip_addr) function to test ip_addr for rfc1918addresses.

Alex Hermann alex at speakup.nl
Fri Jul 22 18:38:12 CEST 2011


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

Author: Alex Hermann <alex at speakup.nl>
Committer: Alex Hermann <alex at speakup.nl>
Date:   Tue Jul 19 15:24:11 2011 +0200

modules_k/nathelper: Add is_rfc1918(ip_addr) function to test ip_addr for rfc1918addresses.

---

 modules_k/nathelper/README                  |   46 ++++++++++++++++----------
 modules_k/nathelper/doc/nathelper_admin.xml |   13 +++++++
 modules_k/nathelper/nathelper.c             |   18 ++++++++++
 3 files changed, 59 insertions(+), 18 deletions(-)

diff --git a/modules_k/nathelper/README b/modules_k/nathelper/README
index a911951..7497492 100644
--- a/modules_k/nathelper/README
+++ b/modules_k/nathelper/README
@@ -64,8 +64,9 @@ Ovidiu Sas
               5.4. add_rcv_param([flag]),
               5.5. fix_nated_register()
               5.6. nat_uac_test(flags)
-              5.7. add_contact_alias()
-              5.8. handle_ruri_alias()
+              5.7. is_rfc1918(ip_address)
+              5.8. add_contact_alias()
+              5.9. handle_ruri_alias()
 
         6. Exported Pseudo Variables
 
@@ -131,8 +132,9 @@ Chapter 1. Admin Guide
         5.4. add_rcv_param([flag]),
         5.5. fix_nated_register()
         5.6. nat_uac_test(flags)
-        5.7. add_contact_alias()
-        5.8. handle_ruri_alias()
+        5.7. is_rfc1918(ip_address)
+        5.8. add_contact_alias()
+        5.9. handle_ruri_alias()
 
    6. Exported Pseudo Variables
 
@@ -235,7 +237,7 @@ modparam("nathelper", "natping_interval", 10)
 
 4.2. ping_nated_only (integer)
 
-   If this variable is set then only contacts that have “behind_NAT” flag
+   If this variable is set then only contacts that have "behind_NAT" flag
    in user location database set will get ping.
 
    Default value is 0.
@@ -310,7 +312,7 @@ modparam("nathelper", "sipping_bflag", 7)
    feature, you have to set this parameter. The SIP request pinging will
    be used only for requests marked so.
 
-   Default value is “NULL”.
+   Default value is "NULL".
 
    Example 1.7. Set sipping_from parameter
 ...
@@ -322,7 +324,7 @@ modparam("nathelper", "sipping_from", "sip:pinger at siphub.net")
    The parameter sets the SIP method to be used in generating the SIP
    requests for NAT ping purposes.
 
-   Default value is “OPTIONS”.
+   Default value is "OPTIONS".
 
    Example 1.8. Set sipping_method parameter
 ...
@@ -340,7 +342,7 @@ Note
 
    The string must be a complete SDP line, including the EOH (\r\n).
 
-   Default value is “a=nortpproxy:yes\r\n”.
+   Default value is "a=nortpproxy:yes\r\n".
 
    Example 1.9. Set nortpproxy_str parameter
 ...
@@ -355,8 +357,9 @@ modparam("nathelper", "nortpproxy_str", "a=sdpmangled:yes\r\n")
    5.4. add_rcv_param([flag]),
    5.5. fix_nated_register()
    5.6. nat_uac_test(flags)
-   5.7. add_contact_alias()
-   5.8. handle_ruri_alias()
+   5.7. is_rfc1918(ip_address)
+   5.8. add_contact_alias()
+   5.9. handle_ruri_alias()
 
 5.1.  fix_nated_contact()
 
@@ -373,15 +376,15 @@ if (search("User-Agent: Cisco ATA.*") {fix_nated_contact();};
 5.2.  fix_nated_sdp(flags [, ip_address])
 
    Alters the SDP information in orer to facilitate NAT traversal. What
-   changes to be performed may be controled via the “flags” parameter.
+   changes to be performed may be controled via the "flags" parameter.
 
    Meaning of the parameters is as follows:
      * flags - the value may be a bitwise OR of the following flags:
-          + 0x01 - adds “a=direction:active” SDP line;
+          + 0x01 - adds "a=direction:active" SDP line;
           + 0x02 - rewrite media IP address (c=) with source address of
             the message or the provided IP address (the provide IP address
             take precedence over the source address).
-          + 0x04 - adds “a=nortpproxy:yes” SDP line;
+          + 0x04 - adds "a=nortpproxy:yes" SDP line;
           + 0x08 - rewrite IP from origin description (o=) with source
             address of the message or the provided IP address (the provide
             IP address take precedence over the source address).
@@ -476,7 +479,14 @@ fix_nated_register();
    This function can be used from REQUEST_ROUTE, ONREPLY_ROUTE,
    FAILURE_ROUTE, BRANCH_ROUTE.
 
-5.7.  add_contact_alias()
+5.7.  is_rfc1918(ip_address)
+
+   Determines if the address in the parameter is an rfc1918 address. The
+   parameter allows pseudo-variables usage.
+
+   This function can be used from ANY_ROUTE.
+
+5.8.  add_contact_alias()
 
    Adds ;alias=ip:port parameter to contact URI containing received
    ip:port if contact uri ip:port does not match received ip:port.
@@ -495,7 +505,7 @@ fix_nated_register();
     };
 ...
 
-5.8.  handle_ruri_alias()
+5.9.  handle_ruri_alias()
 
    Checks if Request URI has alias param and if so, removes it and sets
    $du based on its value. Note that this means that routing of request is
@@ -576,16 +586,16 @@ $ kamctl fifo nh_enable_ping 1
 
 Chapter 2. Frequently Asked Questions
 
-   2.1. What happend with “rtpproxy_disable” parameter?
+   2.1. What happend with "rtpproxy_disable" parameter?
    2.2. Where can I find more about Kamailio?
    2.3. Where can I post a question about this module?
    2.4. How can I report a bug?
 
    2.1.
 
-       What happend with “rtpproxy_disable” parameter?
+       What happend with "rtpproxy_disable" parameter?
 
-       It was removed as it became obsolete - now “rtpproxy_sock” can take
+       It was removed as it became obsolete - now "rtpproxy_sock" can take
        empty value to disable the rtpproxy functionality.
 
    2.2.
diff --git a/modules_k/nathelper/doc/nathelper_admin.xml b/modules_k/nathelper/doc/nathelper_admin.xml
index 4d7947b..f01a4c7 100644
--- a/modules_k/nathelper/doc/nathelper_admin.xml
+++ b/modules_k/nathelper/doc/nathelper_admin.xml
@@ -552,6 +552,19 @@ fix_nated_register();
 
 	<section>
 		<title>
+		<function>is_rfc1918(ip_address)</function>
+		</title>
+		<para>
+			Determines if the address in the parameter is an rfc1918 address.
+			The parameter allows pseudo-variables usage.
+		</para>
+		<para>
+		This function can be used from ANY_ROUTE.
+		</para>
+	</section>
+
+	<section>
+		<title>
 		<function moreinfo="none">add_contact_alias()</function>
 		</title>
 		<para>
diff --git a/modules_k/nathelper/nathelper.c b/modules_k/nathelper/nathelper.c
index bc3784a..ad9954f 100644
--- a/modules_k/nathelper/nathelper.c
+++ b/modules_k/nathelper/nathelper.c
@@ -289,6 +289,7 @@ static int handle_ruri_alias_f(struct sip_msg *, char *, char *);
 static int pv_get_rr_count_f(struct sip_msg *, pv_param_t *, pv_value_t *);
 static int pv_get_rr_top_count_f(struct sip_msg *, pv_param_t *, pv_value_t *);
 static int fix_nated_sdp_f(struct sip_msg *, char *, char *);
+static int is_rfc1918_f(struct sip_msg *, char *, char *);
 static int extract_mediaip(str *, str *, int *, char *);
 static int alter_mediaip(struct sip_msg *, str *, str *, int, str *, int, int);
 static int fix_nated_register_f(struct sip_msg *, char *, char *);
@@ -378,6 +379,9 @@ static cmd_export_t cmds[] = {
 	{"add_rcv_param",      (cmd_function)add_rcv_param_f,        1,
 		fixup_uint_null, 0,
 		REQUEST_ROUTE },
+	{"is_rfc1918",         (cmd_function)is_rfc1918_f,           1,
+		fixup_spve_null, 0,
+		ANY_ROUTE },
 	{0, 0, 0, 0, 0, 0}
 };
 
@@ -1272,6 +1276,20 @@ nat_uac_test_f(struct sip_msg* msg, char* str1, char* str2)
 
 }
 
+static int
+is_rfc1918_f(struct sip_msg* msg, char* str1, char* str2)
+{
+	str address;
+
+	if(fixup_get_svalue(msg, (gparam_p)str1, &address)!=0 || address.len==0)
+	{
+		LM_ERR("invalid address parameter\n");
+		return -2;
+	}
+
+	return (is1918addr(&address) == 1) ? 1 : -1;
+}
+
 #define	ADD_ADIRECTION	0x01
 #define	FIX_MEDIP	0x02
 #define	ADD_ANORTPPROXY	0x04




More information about the sr-dev mailing list