From: Eliel C. Sardanons Date: Thu, 28 May 2009 15:21:32 +0000 (+0000) Subject: Use the address we already know when reloading a peer with nat=yes. X-Git-Tag: 1.4.26~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26cec158af677509882897d817cf42cf21cffe10;p=thirdparty%2Fasterisk.git Use the address we already know when reloading a peer with nat=yes. If we already have an address for a peer, and we are reloading the sip configuration, try to use that address to contact the peer, instead of getting it from the Contact. (closes issue #15194) Reported by: ibc Patches: sip.patch uploaded by eliel (license 64) Tested by: manwe git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@197562 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index b457d4fe28..ce859d7c1c 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -17699,8 +17699,11 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str * address listed on the entry (or if it's 'dynamic'), then we need to * parse the entry to obtain the IP address, so a dynamic host can be * contacted immediately after reload (as opposed to waiting for it to - * register once again). */ - __set_address_from_contact(fullcontact, &peer->addr); + * register once again). But if we have an address for this peer and NAT was + * specified, use that address instead. */ + if (!ast_test_flag(&peer->flags[0], SIP_NAT_ROUTE) || !peer->addr.sin_addr.s_addr) { + __set_address_from_contact(fullcontact, &peer->addr); + } } if (!ast_test_flag(&global_flags[1], SIP_PAGE2_IGNOREREGEXPIRE) && ast_test_flag(&peer->flags[1], SIP_PAGE2_DYNAMIC) && realtime) {