summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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: