[asterisk-commits] file: trunk r163629 - /trunk/channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Dec 12 12:17:13 CST 2008


Author: file
Date: Fri Dec 12 12:17:12 2008
New Revision: 163629

URL: http://svn.digium.com/view/asterisk?view=rev&rev=163629
Log:
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

Modified:
    trunk/channels/chan_sip.c

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=163629&r1=163628&r2=163629
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Fri Dec 12 12:17:12 2008
@@ -11153,6 +11153,11 @@
 
 	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 */
@@ -11183,6 +11188,9 @@
 		   with */
 		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;




More information about the asterisk-commits mailing list