summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2021-03-20 15:35:05 +0100
committerAndreas Eversberg <jolly@eversberg.eu>2021-03-20 15:35:05 +0100
commitd8977d4fd4361306809afa6da1c02faa10b6e114 (patch)
tree38ed9af3e1edd68355d9f19304a5f3050d1e5e17
parente15e2810a62b4a045c7828fd69f084dcf6e65883 (diff)
Re-register as soon as public IP changes when using STUN
-rw-r--r--src/sip/sip.c9
1 files 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: