Module: sip-router
Branch: 3.2
Commit: c2702ae573385493e4ddae50568a5842af9dcfcf
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=c2702ae…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: Fri Jun 1 11:34:20 2012 +0200
nathelper(k): remove maddr param in fix_nated_contact()
- if maddr exists, it makes no sense anymore if the contact uri is
changed by the proxy
- reported by Morten Isaksen
(cherry picked from commit c3caaa4c12f76c77381c6a0afc8688bc38b16999)
---
modules_k/nathelper/nathelper.c | 23 +++++++++++++++++++++--
1 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/modules_k/nathelper/nathelper.c b/modules_k/nathelper/nathelper.c
index f734a8d..884fd48 100644
--- a/modules_k/nathelper/nathelper.c
+++ b/modules_k/nathelper/nathelper.c
@@ -730,6 +730,8 @@ fix_nated_contact_f(struct sip_msg* msg, char* str1, char* str2)
struct lump *anchor;
struct sip_uri uri;
str hostport;
+ str params1 = {0};
+ str params2 = {0};
if (get_contact_uri(msg, &uri, &c) == -1)
return -1;
@@ -758,8 +760,25 @@ fix_nated_contact_f(struct sip_msg* msg, char* str1, char* str2)
temp[0] = hostport.s[0];
temp[1] = c->uri.s[c->uri.len];
c->uri.s[c->uri.len] = hostport.s[0] = '\0';
- len1 = snprintf(buf, len, "%s%s:%d%s", c->uri.s, cp, msg->rcv.src_port,
- hostport.s + hostport.len);
+ if(uri.maddr.len<=0) {
+ len1 = snprintf(buf, len, "%s%s:%d%s", c->uri.s, cp,
msg->rcv.src_port,
+ hostport.s + hostport.len);
+ } else {
+ /* skip maddr parameter - makes no sense anymore */
+ LM_DBG("removing maddr parameter from contact uri: [%.*s]\n",
+ uri.maddr.len, uri.maddr.s);
+ params1.s = hostport.s + hostport.len;
+ params1.len = uri.maddr.s - params1.s;
+ while(params1.len>0
+ && (params1.s[params1.len-1]==' '
+ || params1.s[params1.len-1]=='\t'
+ || params1.s[params1.len-1]==';'))
+ params1.len--;
+ params2.s = uri.maddr.s + uri.maddr.len;
+ params2.len = c->uri.s + c->uri.len - params2.s;
+ len1 = snprintf(buf, len, "%s%s:%d%.*s%.*s", c->uri.s, cp,
msg->rcv.src_port,
+ params1.len, params1.s, params2.len, params2.s);
+ }
if (len1 < len)
len = len1;
hostport.s[0] = temp[0];