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

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
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];


_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to