When a device registers we need to unlink them (if linked) from the peers_by_ip container and link them back in since their IP address has changed. This would have manifested itself if you configured a new device (as type=peer), registered, and then tried to place a call from the device. Since the peer was not linked into the peers_by_ip container it would have never been found.

(closes issue #13811)
Reported by: pj


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@163629 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Joshua Colp 2008-12-12 18:17:12 +00:00
parent 39e47e88e9
commit 44b93b6859
1 changed files with 8 additions and 0 deletions

View File

@ -11153,6 +11153,11 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
oldsin = peer->addr;
/* If we were already linked into the peers_by_ip container unlink ourselves so nobody can find us */
if (peer->addr.sin_addr.s_addr) {
ao2_t_unlink(peers_by_ip, peer, "ao2_unlink of peer from peers_by_ip table");
}
/* Check that they're allowed to register at this IP */
/* XXX This could block for a long time XXX */
/*! \todo Check NAPTR/SRV if we have not got a port in the URI */
@ -11184,6 +11189,9 @@ static enum parse_register_result parse_register_contact(struct sip_pvt *pvt, st
peer->addr = pvt->recv;
}
/* Now that our address has been updated put ourselves back into the container for lookups */
ao2_t_link(peers_by_ip, peer, "ao2_link into peers_by_ip table");
/* Save SIP options profile */
peer->sipoptions = pvt->sipoptions;