aboutsummaryrefslogtreecommitdiff
path: root/src/netbase.cpp
diff options
context:
space:
mode:
authorPieter Wuille <[email protected]>2012-05-14 04:14:28 -0700
committerPieter Wuille <[email protected]>2012-05-14 04:14:28 -0700
commit0071a540d40f8e7cf75eb555f007ab61473a3a81 (patch)
treee3b6f8dd8ca9573336c28be75ad368f287bd12a8 /src/netbase.cpp
parentReally do not consider blocked networks local (diff)
parentUse getnameinfo() to get canonical IPv6 addresses (diff)
downloaddiscoin-0071a540d40f8e7cf75eb555f007ab61473a3a81.tar.xz
discoin-0071a540d40f8e7cf75eb555f007ab61473a3a81.zip
Merge pull request #1291 from sipa/canonames
Use getnameinfo() to get canonical IPv6 addresses
Diffstat (limited to 'src/netbase.cpp')
-rw-r--r--src/netbase.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/netbase.cpp b/src/netbase.cpp
index 2131bdf75..3fe42a7a7 100644
--- a/src/netbase.cpp
+++ b/src/netbase.cpp
@@ -711,7 +711,19 @@ enum Network CNetAddr::GetNetwork() const
std::string CNetAddr::ToStringIP() const
{
- if (IsIPv4())
+ CService serv(*this, 0);
+#ifdef USE_IPV6
+ struct sockaddr_storage sockaddr;
+#else
+ struct sockaddr sockaddr;
+#endif
+ socklen_t socklen = sizeof(sockaddr);
+ if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) {
+ char name[1025] = "";
+ if (!getnameinfo((const struct sockaddr*)&sockaddr, socklen, name, sizeof(name), NULL, 0, NI_NUMERICHOST))
+ return std::string(name);
+ }
+ if (IsIPv4())
return strprintf("%u.%u.%u.%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0));
else
return strprintf("%x:%x:%x:%x:%x:%x:%x:%x",