changeset 2551:bb6f81dae658 draft

Use getnameinfo() to get canonical IPv6 addresses
author Pieter Wuille <pieter.wuille@gmail.com>
date Mon, 14 May 2012 00:43:21 +0200
parents 453d84fc6e11
children e12a52335289
files src/netbase.cpp
diffstat 1 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/netbase.cpp
+++ b/src/netbase.cpp
@@ -711,7 +711,19 @@
 
 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",