aboutsummaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorluigi1111 <luigi1111w@gmail.com>2023-01-11 11:40:13 -0500
committerluigi1111 <luigi1111w@gmail.com>2023-01-11 11:40:13 -0500
commitcbc5cf43f2e40940f6a3e42b9d833753305baf35 (patch)
treef323badb0cfd659a4250e9457c2862abeb782430 /src/net
parent1976c9afa07575b16f7ace72c92fffe67fac2b6c (diff)
parent38d4811c890997f20f4a3eea1b429e18bbfb4024 (diff)
downloadmonzero-core-cbc5cf43f2e40940f6a3e42b9d833753305baf35.tar.gz
monzero-core-cbc5cf43f2e40940f6a3e42b9d833753305baf35.tar.xz
monzero-core-cbc5cf43f2e40940f6a3e42b9d833753305baf35.zip
Merge pull request #8644
38d4811 p2p: fix exclusive node DNS resolution for certain hosts [release] (Jeffrey Ryan)
Diffstat (limited to 'src/net')
-rw-r--r--src/net/parse.cpp8
-rw-r--r--src/net/parse.h10
2 files changed, 17 insertions, 1 deletions
diff --git a/src/net/parse.cpp b/src/net/parse.cpp
index 1df6175b4..92be492a3 100644
--- a/src/net/parse.cpp
+++ b/src/net/parse.cpp
@@ -38,7 +38,7 @@ namespace net
{
void get_network_address_host_and_port(const std::string& address, std::string& host, std::string& port)
{
- // require ipv6 address format "[addr:addr:addr:...:addr]:port"
+ // If IPv6 address format with port "[addr:addr:addr:...:addr]:port"
if (address.find(']') != std::string::npos)
{
host = address.substr(1, address.rfind(']') - 1);
@@ -47,6 +47,12 @@ namespace net
port = address.substr(address.rfind(':') + 1);
}
}
+ // Else if IPv6 address format without port e.g. "addr:addr:addr:...:addr"
+ else if (std::count(address.begin(), address.end(), ':') >= 2)
+ {
+ host = address;
+ }
+ // Else IPv4, Tor, I2P address or hostname
else
{
host = address.substr(0, address.rfind(':'));
diff --git a/src/net/parse.h b/src/net/parse.h
index 648076d7b..6ece931c6 100644
--- a/src/net/parse.h
+++ b/src/net/parse.h
@@ -38,6 +38,16 @@
namespace net
{
+ /*!
+ * \brief Takes a valid address string (IP, Tor, I2P, or DNS name) and splits it into host and port
+ *
+ * The host of an IPv6 addresses in the format "[x:x:..:x]:port" will have the braces stripped.
+ * For example, when the address is "[ffff::2023]", host will be set to "ffff::2023".
+ *
+ * \param address The address string one wants to split
+ * \param[out] host The host part of the address string. Is always set.
+ * \param[out] port The port part of the address string. Is only set when address string contains a port.
+ */
void get_network_address_host_and_port(const std::string& address, std::string& host, std::string& port);
/*!