aboutsummaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2020-09-17 08:33:10 -0400
committerDavid Goulet <dgoulet@torproject.org>2020-09-17 08:33:10 -0400
commit7eef9ced61e72b1df02d3e9629d21e717fff74f7 (patch)
tree234813c5ebbaa669a3c427398ff1c1ce1dcc5c49 /src/feature
parentca389d22a1ce90081566616adf4efac889cc1930 (diff)
parent83052372a00a03ae8de9604aa00aa8ee3c1e644d (diff)
downloadtor-7eef9ced61e72b1df02d3e9629d21e717fff74f7.tar.gz
tor-7eef9ced61e72b1df02d3e9629d21e717fff74f7.zip
Merge branch 'tor-gitlab/mr/131'
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/nodelist/routerlist.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/feature/nodelist/routerlist.c b/src/feature/nodelist/routerlist.c
index 9def90d8d5..fcaf507efc 100644
--- a/src/feature/nodelist/routerlist.c
+++ b/src/feature/nodelist/routerlist.c
@@ -89,6 +89,7 @@
#include "feature/nodelist/routerset.h"
#include "feature/nodelist/torcert.h"
#include "feature/relay/routermode.h"
+#include "feature/relay/relay_find_addr.h"
#include "feature/stats/rephist.h"
#include "lib/crypt_ops/crypto_format.h"
#include "lib/crypt_ops/crypto_rand.h"
@@ -2772,12 +2773,27 @@ launch_dummy_descriptor_download_as_needed(time_t now,
const or_options_t *options)
{
static time_t last_dummy_download = 0;
+ bool have_addr;
+ tor_addr_t addr_out;
+
+ /* This dummy fetch only matter for relays. */
+ if (!server_mode(options)) {
+ return;
+ }
+
+ /* Lookup the address cache to learn if we have a good usable address. We
+ * still force relays to have an IPv4 so that alone is enough to learn if we
+ * need a lookup. In case we don't have one, we might want to attempt a
+ * dummy fetch to learn our address as a suggestion from an authority. */
+ have_addr = relay_find_addr_to_publish(options, AF_INET,
+ RELAY_FIND_ADDR_CACHE_ONLY,
+ &addr_out);
+
/* XXXX+ 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) &&
+ /* If we're a server that doesn't have an 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 (!have_addr &&
last_descriptor_download_attempted + DUMMY_DOWNLOAD_INTERVAL < now &&
last_dummy_download + DUMMY_DOWNLOAD_INTERVAL < now) {
last_dummy_download = now;