Extend DnsTlsServer to return IP string

No functionality change.

Bug: 79727473
Test: cd packages/modules/DnsResolver && atest
Change-Id: I7adca3f240197fe59f683abefaa0005af0fbc141
diff --git a/DnsTlsServer.cpp b/DnsTlsServer.cpp
index 1bdb1aa..89ea841 100644
--- a/DnsTlsServer.cpp
+++ b/DnsTlsServer.cpp
@@ -18,6 +18,8 @@
 
 #include <algorithm>
 
+#include <netdutils/InternetAddresses.h>
+
 namespace {
 
 // Returns a tuple of references to the elements of a.
@@ -124,5 +126,9 @@
     return !name.empty();
 }
 
+std::string DnsTlsServer::toIpString() const {
+    return netdutils::IPSockAddr::toIPSockAddr(ss).ip().toString();
+}
+
 }  // namespace net
 }  // namespace android
diff --git a/DnsTlsServer.h b/DnsTlsServer.h
index 0dd136a..6a72d88 100644
--- a/DnsTlsServer.h
+++ b/DnsTlsServer.h
@@ -69,6 +69,7 @@
     bool operator==(const DnsTlsServer& other) const;
 
     bool wasExplicitlyConfigured() const;
+    std::string toIpString() const;
 
     Validation validationState() const { return mValidation; }
     void setValidationState(Validation val) { mValidation = val; }
diff --git a/PrivateDnsConfiguration.cpp b/PrivateDnsConfiguration.cpp
index 43596bb..47969b3 100644
--- a/PrivateDnsConfiguration.cpp
+++ b/PrivateDnsConfiguration.cpp
@@ -20,7 +20,6 @@
 
 #include <android-base/logging.h>
 #include <android-base/stringprintf.h>
-#include <netdb.h>
 #include <netdutils/ThreadUtil.h>
 #include <sys/socket.h>
 
@@ -37,13 +36,6 @@
 namespace android {
 namespace net {
 
-std::string addrToString(const sockaddr_storage* addr) {
-    char out[INET6_ADDRSTRLEN] = {0};
-    getnameinfo((const sockaddr*) addr, sizeof(sockaddr_storage), out, INET6_ADDRSTRLEN, nullptr, 0,
-                NI_NUMERICHOST);
-    return std::string(out);
-}
-
 bool parseServer(const char* server, sockaddr_storage* parsed) {
     addrinfo hints = {
             .ai_flags = AI_NUMERICHOST | AI_NUMERICSERV,
@@ -178,7 +170,7 @@
             LOG(WARNING) << "Validating DnsTlsServer on netId " << netId;
             const bool success = DnsTlsTransport::validate(server, netId, mark);
             LOG(DEBUG) << "validateDnsTlsServer returned " << success << " for "
-                       << addrToString(&server.ss);
+                       << server.toIpString();
 
             const bool needs_reeval = this->recordPrivateDnsValidation(server, netId, success);
             if (!needs_reeval) {
@@ -225,20 +217,19 @@
     auto& tracker = netPair->second;
     auto serverPair = tracker.find(identity);
     if (serverPair == tracker.end()) {
-        LOG(WARNING) << "Server " << addrToString(&server.ss)
+        LOG(WARNING) << "Server " << server.toIpString()
                      << " was removed during private DNS validation";
         success = false;
         reevaluationStatus = DONT_REEVALUATE;
     } else if (!(serverPair->second == server)) {
         // TODO: It doesn't seem correct to overwrite the tracker entry for
         // |server| down below in this circumstance... Fix this.
-        LOG(WARNING) << "Server " << addrToString(&server.ss)
+        LOG(WARNING) << "Server " << server.toIpString()
                      << " was changed during private DNS validation";
         success = false;
         reevaluationStatus = DONT_REEVALUATE;
     } else if (!serverPair->second.active()) {
-        LOG(WARNING) << "Server " << addrToString(&server.ss)
-                     << " was removed from the configuration";
+        LOG(WARNING) << "Server " << server.toIpString() << " was removed from the configuration";
         success = false;
         reevaluationStatus = DONT_REEVALUATE;
     }
@@ -247,11 +238,11 @@
     const auto& listeners = ResolverEventReporter::getInstance().getListeners();
     if (listeners.size() != 0) {
         for (const auto& it : listeners) {
-            it->onPrivateDnsValidationEvent(netId, addrToString(&server.ss), server.name, success);
+            it->onPrivateDnsValidationEvent(netId, server.toIpString(), server.name, success);
         }
         LOG(DEBUG) << "Sent validation " << (success ? "success" : "failure") << " event on netId "
-                   << netId << " for " << addrToString(&server.ss) << " with hostname {"
-                   << server.name << "}";
+                   << netId << " for " << server.toIpString() << " with hostname {" << server.name
+                   << "}";
     } else {
         LOG(ERROR)
                 << "Validation event not sent since no INetdEventListener receiver is available.";
diff --git a/ResolverController.cpp b/ResolverController.cpp
index b7ac8eb..3a7f914 100644
--- a/ResolverController.cpp
+++ b/ResolverController.cpp
@@ -22,8 +22,6 @@
 #include <string>
 #include <vector>
 
-#include <netdb.h>
-
 #include <aidl/android/net/IDnsResolver.h>
 #include <android-base/logging.h>
 #include <android-base/strings.h>
@@ -46,13 +44,6 @@
 
 namespace {
 
-std::string addrToString(const sockaddr_storage* addr) {
-    char out[INET6_ADDRSTRLEN] = {0};
-    getnameinfo((const sockaddr*)addr, sizeof(sockaddr_storage), out, INET6_ADDRSTRLEN, nullptr, 0,
-                NI_NUMERICHOST);
-    return std::string(out);
-}
-
 const char* getPrivateDnsModeString(PrivateDnsMode mode) {
     switch (mode) {
         case PrivateDnsMode::OFF:
@@ -265,8 +256,8 @@
     ResolverStats::encodeAll(res_stats, stats);
 
     const auto privateDnsStatus = PrivateDnsConfiguration::getInstance().getStatus(netId);
-    for (const auto& pair : privateDnsStatus.serversMap) {
-        tlsServers->push_back(addrToString(&pair.first.ss));
+    for (const auto& [server, _] : privateDnsStatus.serversMap) {
+        tlsServers->push_back(server.toIpString());
     }
 
     params->resize(IDnsResolver::RESOLVER_PARAMS_COUNT);
@@ -365,9 +356,9 @@
             dw.println("Private DNS configuration (%u entries)",
                        static_cast<uint32_t>(privateDnsStatus.serversMap.size()));
             dw.incIndent();
-            for (const auto& pair : privateDnsStatus.serversMap) {
-                dw.println("%s name{%s} status{%s}", addrToString(&pair.first.ss).c_str(),
-                           pair.first.name.c_str(), validationStatusToString(pair.second));
+            for (const auto& [server, validation] : privateDnsStatus.serversMap) {
+                dw.println("%s name{%s} status{%s}", server.toIpString().c_str(),
+                           server.name.c_str(), validationStatusToString(validation));
             }
             dw.decIndent();
         }
diff --git a/resolv_cache_unit_test.cpp b/resolv_cache_unit_test.cpp
index d604b2d..e6dd111 100644
--- a/resolv_cache_unit_test.cpp
+++ b/resolv_cache_unit_test.cpp
@@ -32,15 +32,14 @@
 
 #include "res_init.h"
 #include "resolv_cache.h"
-#include "resolv_private.h"
 #include "stats.h"
 #include "tests/dns_responder/dns_responder.h"
+#include "tests/resolv_test_utils.h"
 
 using namespace std::chrono_literals;
 
 using android::netdutils::IPSockAddr;
 
-constexpr int TEST_NETID = 30;
 constexpr int TEST_NETID_2 = 31;
 constexpr int DNS_PORT = 53;
 
@@ -227,7 +226,7 @@
         // Server checking.
         EXPECT_EQ(nscount, static_cast<int>(expected.setup.servers.size())) << msg;
         for (int i = 0; i < nscount; i++) {
-            EXPECT_EQ(addrToString(&servers[i]), expected.setup.servers[i]) << msg;
+            EXPECT_EQ(ToString(&servers[i]), expected.setup.servers[i]) << msg;
         }
 
         // Domain checking
diff --git a/resolv_private.h b/resolv_private.h
index 8bc5035..4a3293d 100644
--- a/resolv_private.h
+++ b/resolv_private.h
@@ -183,10 +183,3 @@
         PLOG(WARNING) << "Failed to chown socket";
     }
 }
-
-inline std::string addrToString(const sockaddr_storage* addr) {
-    char out[INET6_ADDRSTRLEN] = {0};
-    getnameinfo((const sockaddr*)addr, sizeof(sockaddr_storage), out, INET6_ADDRSTRLEN, nullptr, 0,
-                NI_NUMERICHOST);
-    return std::string(out);
-}
diff --git a/resolv_tls_unit_test.cpp b/resolv_tls_unit_test.cpp
index f384ead..29171db 100644
--- a/resolv_tls_unit_test.cpp
+++ b/resolv_tls_unit_test.cpp
@@ -862,12 +862,16 @@
     parseServer("192.0.2.1", 854, &s2.ss);
     checkUnequal(s1, s2);
     EXPECT_TRUE(isAddressEqual(s1, s2));
+    EXPECT_EQ(s1.toIpString(), "192.0.2.1");
+    EXPECT_EQ(s2.toIpString(), "192.0.2.1");
 
     DnsTlsServer s3, s4;
     parseServer("2001:db8::1", 853, &s3.ss);
     parseServer("2001:db8::1", 852, &s4.ss);
     checkUnequal(s3, s4);
     EXPECT_TRUE(isAddressEqual(s3, s4));
+    EXPECT_EQ(s3.toIpString(), "2001:db8::1");
+    EXPECT_EQ(s4.toIpString(), "2001:db8::1");
 
     EXPECT_FALSE(s1.wasExplicitlyConfigured());
     EXPECT_FALSE(s2.wasExplicitlyConfigured());