Skip to content

Commit 0a3c97b

Browse files
committed
Fix IPv6 insertion in fix_nated_contact()
Add the [ ] around IPv6 in the newly built contact URI. Reported by Jonathan Hunter on the mailing list (cherry picked from commit ce89e29)
1 parent c846598 commit 0a3c97b

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

modules/nathelper/nathelper.c

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,7 @@ fix_nated_contact_f(struct sip_msg* msg, char* str1, char* str2)
653653

654654
cp = ip_addr2a(&msg->rcv.src_ip);
655655
len = (hostport.s-c->uri.s) + strlen(cp) + 6 /* :port */
656+
+ 2 /* just in case if IPv6 */
656657
+ (params?params->len+(is_enclosed?0:2):0)
657658
+ 1 + left.len + left2.len;
658659
buf = pkg_malloc(len);
@@ -662,15 +663,28 @@ fix_nated_contact_f(struct sip_msg* msg, char* str1, char* str2)
662663
}
663664
temp = hostport.s[0]; hostport.s[0] = '\0';
664665
if (params==NULL) {
665-
len1 = snprintf(buf, len, "%s%s:%d%.*s%.*s", c->uri.s, cp,
666-
msg->rcv.src_port,left.len,left.s,left2.len,left2.s);
666+
if (msg->rcv.src_ip.af==AF_INET6)
667+
len1 = snprintf(buf, len, "%s[%s]:%d%.*s%.*s", c->uri.s, cp,
668+
msg->rcv.src_port,left.len,left.s,left2.len,left2.s);
669+
else
670+
len1 = snprintf(buf, len, "%s%s:%d%.*s%.*s", c->uri.s, cp,
671+
msg->rcv.src_port,left.len,left.s,left2.len,left2.s);
667672
} else if (!is_enclosed) {
668-
len1 = snprintf(buf, len, "<%s%s:%d%.*s>", c->uri.s, cp,
669-
msg->rcv.src_port,params->len,params->s);
673+
if (msg->rcv.src_ip.af==AF_INET6)
674+
len1 = snprintf(buf, len, "<%s[%s]:%d%.*s>", c->uri.s, cp,
675+
msg->rcv.src_port,params->len,params->s);
676+
else
677+
len1 = snprintf(buf, len, "<%s%s:%d%.*s>", c->uri.s, cp,
678+
msg->rcv.src_port,params->len,params->s);
670679
} else {
671-
len1 = snprintf(buf, len, "%s%s:%d%.*s%.*s%.*s", c->uri.s, cp,
672-
msg->rcv.src_port,params->len,params->s,
673-
left.len,left.s,left2.len,left2.s);
680+
if (msg->rcv.src_ip.af==AF_INET6)
681+
len1 = snprintf(buf, len, "%s[%s]:%d%.*s%.*s%.*s", c->uri.s, cp,
682+
msg->rcv.src_port,params->len,params->s,
683+
left.len,left.s,left2.len,left2.s);
684+
else
685+
len1 = snprintf(buf, len, "%s%s:%d%.*s%.*s%.*s", c->uri.s, cp,
686+
msg->rcv.src_port,params->len,params->s,
687+
left.len,left.s,left2.len,left2.s);
674688
}
675689
if (len1 < len)
676690
len = len1;

0 commit comments

Comments
 (0)