Move address caching logic from AsyncSSLSocket to AsyncSocket.
[folly.git] / folly / IPAddressV6.cpp
index c7a93efef96224f3564caedf787b85187b7b7665..038a68f9b88661767487f25651395930cab53234 100644 (file)
@@ -186,14 +186,14 @@ IPAddressV6 IPAddressV6::fromInverseArpaName(const std::string& arpaname) {
     throw IPAddressFormatException(sformat("Invalid input. Got '{}'", piece));
   }
   std::array<char, IPAddressV6::kToFullyQualifiedSize> ip;
-  int pos = 0;
+  size_t pos = 0;
   int count = 0;
-  for (int p = pieces.size() - 1; p >= 0; p--) {
-    ip[pos] = pieces[p][0];
+  for (size_t i = 1; i <= pieces.size(); i++) {
+    ip[pos] = pieces[pieces.size() - i][0];
     pos++;
     count++;
     // add ':' every 4 chars
-    if (count == 4) {
+    if (count == 4 && pos < ip.size()) {
       ip[pos++] = ':';
       count = 0;
     }
@@ -425,6 +425,11 @@ string IPAddressV6::toFullyQualified() const {
   return detail::fastIpv6ToString(addr_.in6Addr_);
 }
 
+// public
+void IPAddressV6::toFullyQualifiedAppend(std::string& out) const {
+  detail::fastIpv6AppendToString(addr_.in6Addr_, out);
+}
+
 // public
 string IPAddressV6::toInverseArpaName() const {
   constexpr folly::StringPiece lut = "0123456789abcdef";