diff options
Diffstat (limited to 'main/asterisk/ASTERISK-19106.patch')
-rw-r--r-- | main/asterisk/ASTERISK-19106.patch | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/main/asterisk/ASTERISK-19106.patch b/main/asterisk/ASTERISK-19106.patch new file mode 100644 index 0000000000..d2f44c1d93 --- /dev/null +++ b/main/asterisk/ASTERISK-19106.patch @@ -0,0 +1,40 @@ +diff --git a/channels/chan_sip.c b/channels/chan_sip.c +index e7b678b..f1e5578 100644 +--- a/channels/chan_sip.c ++++ b/channels/chan_sip.c +@@ -13062,17 +13062,8 @@ static int sip_reg_timeout(const void *data) + } + + if (r->dnsmgr) { +- struct sip_peer *peer; + /* If the registration has timed out, maybe the IP changed. Force a refresh. */ + ast_dnsmgr_refresh(r->dnsmgr); +- /* If we are resolving a peer, we have to make sure the refreshed address gets copied */ +- if ((peer = sip_find_peer(r->hostname, NULL, TRUE, FINDPEERS, FALSE, 0))) { +- ast_sockaddr_copy(&peer->addr, &r->us); +- if (r->portno) { +- ast_sockaddr_set_port(&peer->addr, r->portno); +- } +- peer = sip_unref_peer(peer, "unref after sip_find_peer"); +- } + } + + /* If the initial tranmission failed, we may not have an existing dialog, +@@ -13187,14 +13178,14 @@ static int transmit_register(struct sip_registry *r, int sipmethod, const char * + } + + /* Use port number specified if no SRV record was found */ +- if (!ast_sockaddr_port(&r->us) && r->portno) { +- ast_sockaddr_set_port(&r->us, r->portno); ++ if (!ast_sockaddr_port(&r->us)) { ++ ast_sockaddr_set_port(&r->us, r->portno ? r->portno : STANDARD_SIP_PORT); + } + + /* It is possible that DNS is unavailable at the time the peer is created. Here, if + * we've updated the address in the registry, we copy it to the peer so that + * create_addr() can copy it to the dialog via create_addr_from_peer */ +- if ((peer = sip_find_peer(r->hostname, NULL, TRUE, FINDPEERS, FALSE, 0))) { ++ if ((peer = sip_find_peer(S_OR(r->peername, r->hostname), NULL, TRUE, FINDPEERS, FALSE, 0))) { + if (ast_sockaddr_isnull(&peer->addr) && !(ast_sockaddr_isnull(&r->us))) { + ast_sockaddr_copy(&peer->addr, &r->us); + } |