@@ -653,6 +653,7 @@ fix_nated_contact_f(struct sip_msg* msg, char* str1, char* str2)
653
653
654
654
cp = ip_addr2a (& msg -> rcv .src_ip );
655
655
len = (hostport .s - c -> uri .s ) + strlen (cp ) + 6 /* :port */
656
+ + 2 /* just in case if IPv6 */
656
657
+ (params ?params -> len + (is_enclosed ?0 :2 ):0 )
657
658
+ 1 + left .len + left2 .len ;
658
659
buf = pkg_malloc (len );
@@ -662,15 +663,28 @@ fix_nated_contact_f(struct sip_msg* msg, char* str1, char* str2)
662
663
}
663
664
temp = hostport .s [0 ]; hostport .s [0 ] = '\0' ;
664
665
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 );
667
672
} 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 );
670
679
} 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 );
674
688
}
675
689
if (len1 < len )
676
690
len = len1 ;
0 commit comments