diff options
| author | Pieter Wuille <[email protected]> | 2012-05-14 00:43:21 +0200 |
|---|---|---|
| committer | Pieter Wuille <[email protected]> | 2012-05-14 01:41:15 +0200 |
| commit | ca81464697ca49452ab3e399c70d450f8d3b4028 (patch) | |
| tree | e3b6f8dd8ca9573336c28be75ad368f287bd12a8 /src/netbase.cpp | |
| parent | Really do not consider blocked networks local (diff) | |
| download | discoin-ca81464697ca49452ab3e399c70d450f8d3b4028.tar.xz discoin-ca81464697ca49452ab3e399c70d450f8d3b4028.zip | |
Use getnameinfo() to get canonical IPv6 addresses
Diffstat (limited to 'src/netbase.cpp')
| -rw-r--r-- | src/netbase.cpp | 14 |
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", |