diff options
author | David Goulet <dgoulet@torproject.org> | 2020-09-17 08:33:10 -0400 |
---|---|---|
committer | David Goulet <dgoulet@torproject.org> | 2020-09-17 08:33:10 -0400 |
commit | 7eef9ced61e72b1df02d3e9629d21e717fff74f7 (patch) | |
tree | 234813c5ebbaa669a3c427398ff1c1ce1dcc5c49 /src | |
parent | ca389d22a1ce90081566616adf4efac889cc1930 (diff) | |
parent | 83052372a00a03ae8de9604aa00aa8ee3c1e644d (diff) | |
download | tor-7eef9ced61e72b1df02d3e9629d21e717fff74f7.tar.gz tor-7eef9ced61e72b1df02d3e9629d21e717fff74f7.zip |
Merge branch 'tor-gitlab/mr/131'
Diffstat (limited to 'src')
-rw-r--r-- | src/feature/nodelist/routerlist.c | 26 |
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; |