Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 165796) +++ channels/chan_sip.c (working copy) @@ -4821,7 +4821,7 @@ dialog->socket.type = SIP_TRANSPORT_UDP; if (!dialog->socket.port) dialog->socket.port = bindaddr.sin_port; - dialog->sa.sin_port = htons(portno); + dialog->sa.sin_port = htons(portno ? portno : STANDARD_SIP_PORT); dialog->recv = dialog->sa; return 0; } @@ -6535,6 +6535,9 @@ p->ourip = internip; else { p->sa = *sin; + if (!p->sa.sin_port) { + p->sa.sin_port = htons(STANDARD_SIP_PORT); + } ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip); } @@ -8527,6 +8530,9 @@ p->ourip = internip; else { p->sa = *sin; + if (!p->sa.sin_port) { + p->sa.sin_port = STANDARD_SIP_PORT; + } ast_sip_ouraddrfor(&p->sa.sin_addr, &p->ourip); } @@ -12515,7 +12521,7 @@ memset(&p->sa, 0, sizeof(p->sa)); p->sa.sin_family = AF_INET; memcpy(&p->sa.sin_addr, hp->h_addr, sizeof(p->sa.sin_addr)); - p->sa.sin_port = htons(pt ? atoi(pt) : STANDARD_SIP_PORT); + p->sa.sin_port = htons(pt && atoi(pt) ? atoi(pt) : STANDARD_SIP_PORT); if (sip_debug_test_pvt(p)) { const struct sockaddr_in *dst = sip_real_dst(p);