[asterisk-commits] file: trunk r230145 - in /trunk: ./ channels/chan_sip.c
SVN commits to the Asterisk project
asterisk-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 asterisk-commits
mailing list