[asterisk-commits] simon.perreault: trunk r280780 - in /trunk: ./ channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Aug 3 14:59:42 CDT 2010


Author: simon.perreault
Date: Tue Aug  3 14:59:37 2010
New Revision: 280780

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=280780
Log:
Merged revisions 280778 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.8

........
  r280778 | simon.perreault | 2010-08-03 15:54:03 -0400 (Tue, 03 Aug 2010) | 9 lines
  
  Fixed IPv6-related SIP parsing bugs.
  
  (closes issue #17663)
  Reported by: oej
  Patches:
        diff uploaded by sperreault (license 252)
        diff2 uploaded by sperreault (license 252)
        get_domain.diff uploaded by sperreault (license 252)
........

Modified:
    trunk/   (props changed)
    trunk/channels/chan_sip.c

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.8-merged' - no diff available.

Modified: trunk/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/trunk/channels/chan_sip.c?view=diff&rev=280780&r1=280779&r2=280780
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Tue Aug  3 14:59:37 2010
@@ -9875,12 +9875,22 @@
 		from = NULL;
 
 	if (from) {
+		int bracket = 0;
+
 		/* Strip any params or options from user */
 		if ((a = strchr(from, ';')))
 			*a = '\0';
 		/* Strip port from domain if present */
-		if ((a = strchr(from, ':')))
-			*a = '\0';
+		for (a = from; *a != '\0'; ++a) {
+			if (*a == ':' && bracket == 0) {
+				*a = '\0';
+				break;
+			} else if (*a == '[') {
+				++bracket;
+			} else if (*a == ']') {
+				--bracket;
+			}
+		}
 		if ((a = strchr(from, '@'))) {
 			*a = '\0';
 			ast_copy_string(domain, a + 1, len);
@@ -14476,17 +14486,27 @@
 	
 	if ((ptr = strchr(refer_to, '@'))) {	/* Separate domain */
 		char *urioption = NULL, *domain;
+		int bracket = 0;
 		*ptr++ = '\0';
 
 		if ((urioption = strchr(ptr, ';'))) { /* Separate urioptions */
 			*urioption++ = '\0';
 		}
-		
+
 		domain = ptr;
-		if ((ptr = strchr(domain, ':'))) {	/* Remove :port */
-			*ptr = '\0';
-		}
-		
+
+		/* Remove :port */
+		for (; *ptr != '\0'; ++ptr) {
+			if (*ptr == ':' && bracket == 0) {
+				*ptr = '\0';
+				break;
+			} else if (*ptr == '[') {
+				++bracket;
+			} else if (*ptr == ']') {
+				--bracket;
+			}
+		}
+
 		SIP_PEDANTIC_DECODE(domain);
 		SIP_PEDANTIC_DECODE(urioption);
 
@@ -27073,10 +27093,12 @@
 
 		/* First our default IP address */
 		if (!ast_sockaddr_isnull(&bindaddr)) {
-			add_sip_domain(ast_sockaddr_stringify(&bindaddr), SIP_DOMAIN_AUTO, NULL);
+			add_sip_domain(ast_sockaddr_stringify_addr(&bindaddr),
+				       SIP_DOMAIN_AUTO, NULL);
 		} else if (!ast_sockaddr_isnull(&internip)) {
 		/* Our internal IP address, if configured */
-			add_sip_domain(ast_sockaddr_stringify(&internip), SIP_DOMAIN_AUTO, NULL);
+			add_sip_domain(ast_sockaddr_stringify_addr(&internip),
+				       SIP_DOMAIN_AUTO, NULL);
 		} else {
 			ast_log(LOG_NOTICE, "Can't add wildcard IP address to domain list, please add IP address to domain manually.\n");
 		}
@@ -27084,7 +27106,7 @@
 		/* If TCP is running on a different IP than UDP, then add it too */
 		if (!ast_sockaddr_isnull(&sip_tcp_desc.local_address) &&
 		    !ast_sockaddr_cmp(&bindaddr, &sip_tcp_desc.local_address)) {
-			add_sip_domain(ast_sockaddr_stringify(&sip_tcp_desc.local_address),
+			add_sip_domain(ast_sockaddr_stringify_addr(&sip_tcp_desc.local_address),
 				       SIP_DOMAIN_AUTO, NULL);
 		}
 
@@ -27093,14 +27115,14 @@
 		    !ast_sockaddr_cmp(&bindaddr, &sip_tls_desc.local_address) &&
 		    !ast_sockaddr_cmp(&sip_tcp_desc.local_address,
 				      &sip_tls_desc.local_address)) {
-			add_sip_domain(ast_sockaddr_stringify(&sip_tcp_desc.local_address),
+			add_sip_domain(ast_sockaddr_stringify_addr(&sip_tcp_desc.local_address),
 				       SIP_DOMAIN_AUTO, NULL);
 		}
 
 		/* Our extern IP address, if configured */
 		if (!ast_sockaddr_isnull(&externaddr)) {
-			add_sip_domain(ast_sockaddr_stringify(&externaddr), SIP_DOMAIN_AUTO,
-				       NULL);
+			add_sip_domain(ast_sockaddr_stringify_addr(&externaddr),
+				       SIP_DOMAIN_AUTO, NULL);
 		}
 
 		/* Extern host name (NAT traversal support) */




More information about the asterisk-commits mailing list