--- a/libpurple/stun.c Tue Sep 10 06:18:45 2019 +0000 +++ b/libpurple/stun.c Tue Sep 10 02:49:09 2019 -0400 @@ -119,7 +119,7 @@ /* set unknown */ nattype.status = PURPLE_STUN_STATUS_UNKNOWN; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); /* callbacks */ do_callbacks(); @@ -217,7 +217,7 @@ purple_debug_info("stun", "got public ip %s\n", nattype.publicip); nattype.status = PURPLE_STUN_STATUS_DISCOVERED; nattype.type = PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); /* is it a NAT? */ @@ -269,7 +269,7 @@ if(fd < 0) { nattype.status = PURPLE_STUN_STATUS_UNKNOWN; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); do_callbacks(); g_resolver_free_addresses(ld->addresses); g_free(ld); @@ -306,7 +306,7 @@ (struct sockaddr *)&(sc->addr), sizeof(struct sockaddr_in)) < (gssize)sizeof(struct stun_header)) { nattype.status = PURPLE_STUN_STATUS_UNKNOWN; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); do_callbacks(); close_stun_conn(sc); return; @@ -328,7 +328,7 @@ res, &error); if(error != NULL) { nattype.status = PURPLE_STUN_STATUS_UNDISCOVERED; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); do_callbacks(); @@ -339,7 +339,7 @@ ld->port = GPOINTER_TO_INT(data); if (!purple_network_listen_range(12108, 12208, AF_UNSPEC, SOCK_DGRAM, TRUE, hbn_listen_cb, ld)) { nattype.status = PURPLE_STUN_STATUS_UNKNOWN; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); do_callbacks(); @@ -411,8 +411,9 @@ /* If we don't have a successful status and it has been 5 minutes since we last did a lookup, redo the lookup */ - if (nattype.status != PURPLE_STUN_STATUS_DISCOVERED - && (time(NULL) - nattype.lookup_time) > 300) { + if (nattype.status != PURPLE_STUN_STATUS_DISCOVERED && + (g_get_monotonic_time() - nattype.lookup_time) > + 300 * G_USEC_PER_SEC) { use_cached_result = FALSE; } @@ -425,7 +426,7 @@ if(!servername || (strlen(servername) < 2)) { nattype.status = PURPLE_STUN_STATUS_UNKNOWN; - nattype.lookup_time = time(NULL); + nattype.lookup_time = g_get_monotonic_time(); if(cb) g_timeout_add(10, call_callback, cb); return &nattype;