Module: sip-router Branch: master Commit: 411de126aa30dd67663b790df7aaa9b303189be5 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=411de126...
Author: Alex Hermann alex@speakup.nl Committer: Alex Hermann alex@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@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