Index: webrtc/base/ipaddress.cc |
diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc |
index c85624d24a7729d28c2f6efe2c0eb1d7243fdcaa..c92f33c74d8baaa9b947da93e7fa1e7099d17982 100644 |
--- a/webrtc/base/ipaddress.cc |
+++ b/webrtc/base/ipaddress.cc |
@@ -28,8 +28,9 @@ |
#include "webrtc/base/ipaddress.h" |
#include "webrtc/base/byteorder.h" |
#include "webrtc/base/checks.h" |
-#include "webrtc/base/nethelpers.h" |
#include "webrtc/base/logging.h" |
+#include "webrtc/base/nethelpers.h" |
+#include "webrtc/base/stringutils.h" |
#include "webrtc/base/win32.h" |
namespace rtc { |
@@ -158,19 +159,16 @@ std::string IPAddress::ToSensitiveString() const { |
return address; |
} |
case AF_INET6: { |
- // Remove the last 5 groups (80 bits). |
- std::string address = TruncateIP(*this, 128 - 80).ToString(); |
- |
- // If all three remaining groups are written out explicitly in the string, |
- // remove one of the two trailing colons before appending the stripped |
- // groups as "x"s. There should be max 4 colons (2 between the 3 groups + |
- // 2 trailing) in the truncated address string. |
- size_t number_of_colons = std::count(address.begin(), address.end(), ':'); |
- RTC_CHECK_LE(number_of_colons, 4u); |
- if (number_of_colons > 3) |
- address.resize(address.length() - 1); |
- |
- return address + "x:x:x:x:x"; |
+ std::string result; |
+ result.resize(INET6_ADDRSTRLEN); |
+ in6_addr addr = ipv6_address(); |
+ size_t len = |
+ rtc::sprintfn(&(result[0]), result.size(), "%x:%x:%x:x:x:x:x:x", |
+ (addr.s6_addr[0] << 8) + addr.s6_addr[1], |
+ (addr.s6_addr[2] << 8) + addr.s6_addr[3], |
+ (addr.s6_addr[4] << 8) + addr.s6_addr[5]); |
+ result.resize(len); |
+ return result; |
} |
} |
return std::string(); |