aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
diff options
context:
space:
mode:
authorMatt Corallo <git@bluematt.me>2017-10-19 17:32:45 -0400
committerMatt Corallo <git@bluematt.me>2018-01-19 12:41:28 -1000
commit62e764219b25f5d5a4de855e53f62c43130ec918 (patch)
tree6c3737fcfda7f104a23de961b0f636bd4168e2c1 /src/net.cpp
parent51ae7660b81f536fb33fff775c1f4f46829d67a7 (diff)
downloadbitcoin-62e764219b25f5d5a4de855e53f62c43130ec918.tar.xz
Fall back to oneshot for DNS Seeds which don't support filtering.
This allows us to not have to update the chainparams whenever a DNS Seed changes its filtering support, as well fixes a bug introduced in 44407100f where returned nodes will never be attempted.
Diffstat (limited to 'src/net.cpp')
-rw-r--r--src/net.cpp25
1 files changed, 8 insertions, 17 deletions
diff --git a/src/net.cpp b/src/net.cpp
index 5252128400..82bae05b39 100644
--- a/src/net.cpp
+++ b/src/net.cpp
@@ -1577,19 +1577,6 @@ void MapPort(bool)
-static std::string GetDNSHost(const CDNSSeedData& data, ServiceFlags* requiredServiceBits)
-{
- //use default host for non-filter-capable seeds or if we use the default service bits (NODE_NETWORK)
- if (!data.supportsServiceBitsFiltering || *requiredServiceBits == NODE_NETWORK) {
- *requiredServiceBits = NODE_NETWORK;
- return data.host;
- }
-
- // See chainparams.cpp, most dnsseeds only support one or two possible servicebits hostnames
- return strprintf("x%x.%s", *requiredServiceBits, data.host);
-}
-
-
void CConnman::ThreadDNSAddressSeed()
{
// goal: only query DNS seeds if address need is acute
@@ -1612,22 +1599,22 @@ void CConnman::ThreadDNSAddressSeed()
}
}
- const std::vector<CDNSSeedData> &vSeeds = Params().DNSSeeds();
+ const std::vector<std::string> &vSeeds = Params().DNSSeeds();
int found = 0;
LogPrintf("Loading addresses from DNS seeds (could take a while)\n");
- for (const CDNSSeedData &seed : vSeeds) {
+ for (const std::string &seed : vSeeds) {
if (interruptNet) {
return;
}
if (HaveNameProxy()) {
- AddOneShot(seed.host);
+ AddOneShot(seed);
} else {
std::vector<CNetAddr> vIPs;
std::vector<CAddress> vAdd;
ServiceFlags requiredServiceBits = GetDesirableServiceFlags(NODE_NONE);
- std::string host = GetDNSHost(seed, &requiredServiceBits);
+ std::string host = strprintf("x%x.%s", requiredServiceBits, seed);
CNetAddr resolveSource;
if (!resolveSource.SetInternal(host)) {
continue;
@@ -1643,6 +1630,10 @@ void CConnman::ThreadDNSAddressSeed()
found++;
}
addrman.Add(vAdd, resolveSource);
+ } else {
+ // We now avoid directly using results from DNS Seeds which do not support service bit filtering,
+ // instead using them as a oneshot to get nodes with our desired service bits.
+ AddOneShot(seed);
}
}
}