[asterisk-commits] mmichelson: trunk r144025 - /trunk/channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Sep 23 10:37:00 CDT 2008


Author: mmichelson
Date: Tue Sep 23 10:37:00 2008
New Revision: 144025

URL: http://svn.digium.com/view/asterisk?view=rev&rev=144025
Log:
When a promiscuous redirect contained both a user and
host portion in the Contact URI and specifies a 
transport, the parsing done in parse_moved_contact
resulted in a malformed URI.

This commit fixes the parsing so that a proper
Dial string may be formed when the forwarded
call is placed.

(closes issue #13523)
Reported by: mattdarnell
Patches:
      13523v2.patch uploaded by putnopvut (license 60)
Tested by: mattdarnell


Modified:
    trunk/channels/chan_sip.c

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=144025&r1=144024&r2=144025
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Tue Sep 23 10:37:00 2008
@@ -15095,6 +15095,7 @@
 	p->socket.type = transport;
 
 	if (ast_test_flag(&p->flags[0], SIP_PROMISCREDIR)) {
+		char *host = NULL;
 		if (!strncasecmp(s, "sip:", 4))
 			s += 4;
 		else if (!strncasecmp(s, "sips:", 5))
@@ -15102,9 +15103,16 @@
 		e = strchr(s, '/');
 		if (e)
 			*e = '\0';
-		ast_debug(2, "Found promiscuous redirection to 'SIP/::::%s@%s'\n", get_transport(transport), s);
-		if (p->owner)
-			ast_string_field_build(p->owner, call_forward, "SIP/::::%s@%s", get_transport(transport), s);
+		if ((host = strchr(s, '@'))) {
+			*host++ = '\0';
+			ast_debug(2, "Found promiscuous redirection to 'SIP/%s::::%s@%s'\n", s, get_transport(transport), host);
+			if (p->owner)
+				ast_string_field_build(p->owner, call_forward, "SIP/%s::::%s@%s", s, get_transport(transport), host);
+		} else {
+			ast_debug(2, "Found promiscuous redirection to 'SIP/::::%s@%s'\n", get_transport(transport), s);
+			if (p->owner)
+				ast_string_field_build(p->owner, call_forward, "SIP/::::%s@%s", get_transport(transport), s);
+		}
 	} else {
 		e = strchr(tmp, '@');
 		if (e) {




More information about the asterisk-commits mailing list