diff options
author | Cory Fields <cory-nospam-@coryfields.com> | 2017-05-23 20:04:38 -0400 |
---|---|---|
committer | Cory Fields <cory-nospam-@coryfields.com> | 2017-06-14 18:05:00 -0400 |
commit | 7f31762cb6261806542cc6d1188ca07db98a6950 (patch) | |
tree | 6ed637d6ebbb0a3d572b1dfa02bbd152fbae6c32 /src/netaddress.h | |
parent | fbf5d3ba15161f71cbb84a51c1703c22b651e8a9 (diff) |
net: add an internal subnet for representing unresolved hostnames
We currently do two resolves for dns seeds: one for the results, and one to
serve in addrman as the source for those addresses.
There's no requirement that the source hostname resolves to the stored
identifier, only that the mapping is unique. So rather than incurring the
second lookup, combine a private subnet with a hash of the hostname.
The resulting v6 ip is guaranteed not to be publicy routable, and has only a
negligible chance of colliding with a user's internal network (which would be
of no consequence anyway).
Diffstat (limited to 'src/netaddress.h')
-rw-r--r-- | src/netaddress.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/netaddress.h b/src/netaddress.h index fbc4d1a65f..80716600d1 100644 --- a/src/netaddress.h +++ b/src/netaddress.h @@ -22,6 +22,7 @@ enum Network NET_IPV4, NET_IPV6, NET_TOR, + NET_INTERNAL, NET_MAX, }; @@ -45,6 +46,12 @@ class CNetAddr */ void SetRaw(Network network, const uint8_t *data); + /** + * Transform an arbitrary string into a non-routable ipv6 address. + * Useful for mapping resolved addresses back to their source. + */ + bool SetInternal(const std::string& name); + bool SetSpecial(const std::string &strName); // for Tor addresses bool IsIPv4() const; // IPv4 mapped address (::FFFF:0:0/96, 0.0.0.0/0) bool IsIPv6() const; // IPv6 address (not mapped IPv4, not Tor) @@ -64,6 +71,7 @@ class CNetAddr bool IsTor() const; bool IsLocal() const; bool IsRoutable() const; + bool IsInternal() const; bool IsValid() const; enum Network GetNetwork() const; std::string ToString() const; |