diff --git a/channels/chan_sip.c b/channels/chan_sip.c index fbb6b70d99..ec5177033d 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -3937,47 +3937,47 @@ static int copy_via_headers(struct sip_pvt *p, struct sip_request *req, struct s if (ast_strlen_zero(oh)) break; - if (!copied) { /* Only check for empty rport in topmost via header */ - char iabuf[INET_ADDRSTRLEN]; - char *rport; + if (!copied) { /* Only check for empty rport in topmost via header */ + char iabuf[INET_ADDRSTRLEN]; + char *rport; - /* Find ;rport; (empty request) */ - rport = strstr(oh, ";rport"); - if (rport && *(rport+6) == '=') - rport = NULL; /* We already have a parameter to rport */ + /* Find ;rport; (empty request) */ + rport = strstr(oh, ";rport"); + if (rport && *(rport+6) == '=') + rport = NULL; /* We already have a parameter to rport */ - if (rport && ast_test_flag(&p->flags[0], SIP_NAT) == SIP_NAT_ALWAYS) { - /* We need to add received port - rport */ - char tmp[256], *end; + if (rport && ast_test_flag(&p->flags[0], SIP_NAT) == SIP_NAT_ALWAYS) { + /* We need to add received port - rport */ + char tmp[256], *end; - ast_copy_string(tmp, oh, sizeof(tmp)); + ast_copy_string(tmp, oh, sizeof(tmp)); - rport = strstr(tmp, ";rport"); + rport = strstr(tmp, ";rport"); - if (rport) { - end = strchr(rport + 1, ';'); - if (end) - memmove(rport, end, strlen(end) + 1); - else - *rport = '\0'; - } - - /* Add rport to first VIA header if requested */ - /* Whoo hoo! Now we can indicate port address translation too! Just - another RFC (RFC3581). I'll leave the original comments in for - posterity. */ - snprintf(new, sizeof(new), "%s;received=%s;rport=%d", - tmp, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), - ntohs(p->recv.sin_port)); - } else { - /* We should *always* add a received to the topmost via */ - snprintf(new, sizeof(new), "%s;received=%s", - oh, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr)); + if (rport) { + end = strchr(rport + 1, ';'); + if (end) + memmove(rport, end, strlen(end) + 1); + else + *rport = '\0'; } - oh = new; /* the header to copy */ - } /* else add the following via headers untouched */ - add_header(req, field, oh); - copied++; + + /* Add rport to first VIA header if requested */ + /* Whoo hoo! Now we can indicate port address translation too! Just + another RFC (RFC3581). I'll leave the original comments in for + posterity. */ + snprintf(new, sizeof(new), "%s;received=%s;rport=%d", + tmp, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr), + ntohs(p->recv.sin_port)); + } else { + /* We should *always* add a received to the topmost via */ + snprintf(new, sizeof(new), "%s;received=%s", + oh, ast_inet_ntoa(iabuf, sizeof(iabuf), p->recv.sin_addr)); + } + oh = new; /* the header to copy */ + } /* else add the following via headers untouched */ + add_header(req, field, oh); + copied++; } if (!copied) { ast_log(LOG_NOTICE, "No header field '%s' present to copy\n", field);