summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorRichard Begg <asterisk@meric.id.au>2017-03-15 08:51:41 +1100
committerRichard Begg <asterisk@meric.id.au>2017-03-15 08:51:41 +1100
commit5389666d6f0e31709fb75907b578186ba7dcaaa9 (patch)
tree4c44d38c0379b0fc686d87986e10567119813a48 /channels
parent071e6d971cb97df767b2c6c4c1fdcac17bf92038 (diff)
chan_iax2: Reload of iax peer results in loss of host address/port
When using a non-dynamic peer address, build_peer() invalidates the peer address structure by setting the address family to unspecified. However, if dnsmgr is enabled, the subsequent call to ast_dnsmgr_lookup() will not amend the peer address if the cache is still valid, resulting in peer connectivity failures. To fix this, we call ast_dnsmgr_refresh() instead. ASTERISK-26865 Change-Id: Id8a89a2f771ebbaf32255a35fe596a6dcb97a082
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_iax2.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index db5e4fa4d..e8c47ce9f 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -12928,7 +12928,13 @@ static struct iax2_peer *build_peer(const char *name, struct ast_variable *v, st
/* Non-dynamic. Make sure we become that way if we're not */
AST_SCHED_DEL(sched, peer->expire);
ast_clear_flag64(peer, IAX_DYNAMIC);
- peer->addr.ss.ss_family = AST_AF_UNSPEC;
+ if (peer->dnsmgr) {
+ // Make sure we refresh dnsmgr if we're using it
+ ast_dnsmgr_refresh(peer->dnsmgr);
+ } else {
+ // Or just invalidate the address
+ peer->addr.ss.ss_family = AST_AF_UNSPEC;
+ }
if (ast_dnsmgr_lookup(v->value, &peer->addr, &peer->dnsmgr, srvlookup ? "_iax._udp" : NULL)) {
return peer_unref(peer);
}