[svn-commits] file: trunk r230145 - in /trunk: ./ channels/chan_sip.c

SVN commits to the Digium repositories svn-commits at lists.digium.com
Fri Nov 13 16:00:49 CST 2009


Author: file
Date: Fri Nov 13 16:00:44 2009
New Revision: 230145

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

........
  r230144 | file | 2009-11-13 16:00:19 -0600 (Fri, 13 Nov 2009) | 8 lines
  
  Respect the maddr parameter in the Via header.
  
  (closes issue #14446)
  Reported by: frawd
  Patches:
        via_maddr.patch uploaded by frawd (license 610)
  Tested by: frawd
........

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

Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-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=230145&r1=230144&r2=230145
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Fri Nov 13 16:00:44 2009
@@ -14490,7 +14490,7 @@
 static void check_via(struct sip_pvt *p, struct sip_request *req)
 {
 	char via[512];
-	char *c, *pt;
+	char *c, *pt, *maddr;
 
 	ast_copy_string(via, get_header(req, "Via"), sizeof(via));
 
@@ -14504,12 +14504,23 @@
 	if (c && (c[6] != '='))	/* rport query, not answer */
 		ast_set_flag(&p->flags[1], SIP_PAGE2_RPORT_PRESENT);
 
+	/* Check for maddr */
+	maddr = strstr(via, "maddr=");
+	if (maddr) {
+		maddr += 6;
+		c = maddr + strspn(maddr, "0123456789.");
+		*c = '\0';
+	}
+
 	c = strchr(via, ';');
 	if (c)
 		*c = '\0';
 
 	c = strchr(via, ' ');
 	if (c) {
+		struct hostent *hp;
+		struct ast_hostent ahp;
+
 		*c = '\0';
 		c = ast_skip_blanks(c+1);
 		if (strcasecmp(via, "SIP/2.0/UDP") && strcasecmp(via, "SIP/2.0/TCP") && strcasecmp(via, "SIP/2.0/TLS")) {
@@ -14519,7 +14530,12 @@
 		pt = strchr(c, ':');
 		if (pt)
 			*pt++ = '\0';	/* remember port pointer */
-		p->sa = p->recv;
+
+		if (maddr && (hp = ast_gethostbyname(maddr, &ahp))) {
+			memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr));
+		} else {
+			p->sa = p->recv;
+		}
 		p->sa.sin_port = htons(port_str2int(pt, STANDARD_SIP_PORT));
 
 		if (sip_debug_test_pvt(p)) {




More information about the svn-commits mailing list