From d8977d4fd4361306809afa6da1c02faa10b6e114 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 20 Mar 2021 15:35:05 +0100 Subject: Re-register as soon as public IP changes when using STUN --- src/sip/sip.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/sip/sip.c b/src/sip/sip.c index 2a29f66..e18c423 100644 --- a/src/sip/sip.c +++ b/src/sip/sip.c @@ -1576,6 +1576,7 @@ static void stun_bind_cb(stun_discovery_magic_t *magic, stun_handle_t __attribut sip_endpoint_t *sip_ep = (sip_endpoint_t *)magic; su_sockaddr_t sa; socklen_t addrlen; + char public_ip[sizeof(sip_ep->public_ip)]; PDEBUG(DSIP, DEBUG_DEBUG, "Event %d from STUN stack received\n", event); @@ -1585,12 +1586,16 @@ static void stun_bind_cb(stun_discovery_magic_t *magic, stun_handle_t __attribut memset(&sa, 0, addrlen); if (stun_discovery_get_address(sd, &sa, &addrlen) < 0) goto failed; - su_inet_ntop(sa.su_family, SU_ADDR(&sa), sip_ep->public_ip, sizeof(sip_ep->public_ip)); + su_inet_ntop(sa.su_family, SU_ADDR(&sa), public_ip, sizeof(sip_ep->public_ip)); sip_ep->stun_state = STUN_STATE_RESOLVED; /* start timer for next stun request with sip_ep->stun_interval */ timer_start(&sip_ep->stun_retry_timer, sip_ep->stun_interval); PDEBUG(DSIP, DEBUG_INFO, "STUN resolved!\n"); - PDEBUG(DSIP, DEBUG_DEBUG, " -> Public IP = %s\n", sip_ep->public_ip); + PDEBUG(DSIP, DEBUG_DEBUG, " -> Public IP = %s\n", public_ip); + if (!!strcmp(sip_ep->public_ip, public_ip)) { + strcpy(sip_ep->public_ip, public_ip); + sip_ep->register_state = REGISTER_STATE_UNREGISTERED; + } break; default: failed: -- cgit v1.2.3