|
|
@@ -4013,17 +4013,37 @@ update_consensus_router_descriptor_downloads(time_t now)
|
|
|
smartlist_free(no_longer_old);
|
|
|
}
|
|
|
|
|
|
+/** How often should we launch a server/authority request to be sure of getting
|
|
|
+ * a guess for our IP? */
|
|
|
+/*XXXX021 this info should come from netinfo cells or something, or we should
|
|
|
+ * do this only when we aren't seeing incoming data. see bug 652. */
|
|
|
+#define DUMMY_DOWNLOAD_INTERVAL (20*60)
|
|
|
+
|
|
|
/** Launch downloads for router status as needed. */
|
|
|
void
|
|
|
update_router_descriptor_downloads(time_t now)
|
|
|
{
|
|
|
or_options_t *options = get_options();
|
|
|
+ static time_t last_dummy_download = 0;
|
|
|
if (should_delay_dir_fetches(options))
|
|
|
return;
|
|
|
if (directory_fetches_dir_info_early(options)) {
|
|
|
update_router_descriptor_cache_downloads_v2(now);
|
|
|
}
|
|
|
update_consensus_router_descriptor_downloads(now);
|
|
|
+
|
|
|
+ /* XXXX021 we could be smarter here; see notes on bug 652. */
|
|
|
+ /* If we're a server that doesn't have a configured address, we rely on
|
|
|
+ * directory fetches to learn when our address changes. So if we haven't
|
|
|
+ * tried to get any routerdescs in a long time, try a dummy fetch now. */
|
|
|
+ if (!options->Address &&
|
|
|
+ server_mode(options) &&
|
|
|
+ last_routerdesc_download_attempted + DUMMY_DOWNLOAD_INTERVAL < now &&
|
|
|
+ last_dummy_download + DUMMY_DOWNLOAD_INTERVAL < now) {
|
|
|
+ last_dummy_download = now;
|
|
|
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_SERVERDESC,
|
|
|
+ ROUTER_PURPOSE_GENERAL, "authority.z", 1);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/** Launch extrainfo downloads as needed. */
|