Logging private DNS validation state

Log the validation state whenever it's changed, and output the
result to dumpsys.

Bug: 79727473
Test: cd packages/modules/DnsResolver && atest
Change-Id: I3afe28f546562228e1a0dfc2a8a55de5b5f08a7e
diff --git a/PrivateDnsConfiguration.cpp b/PrivateDnsConfiguration.cpp
index cf8979d..8f3b836 100644
--- a/PrivateDnsConfiguration.cpp
+++ b/PrivateDnsConfiguration.cpp
@@ -18,6 +18,7 @@
 
 #include "PrivateDnsConfiguration.h"
 
+#include <android-base/format.h>
 #include <android-base/logging.h>
 #include <android-base/stringprintf.h>
 #include <netdutils/ThreadUtil.h>
@@ -312,6 +313,9 @@
 
     tracker[identity].setValidationState(state);
     notifyValidationStateUpdate(identity.ip.toString(), state, netId);
+
+    RecordEntry record(netId, identity, state);
+    mPrivateDnsLog.push(std::move(record));
 }
 
 bool PrivateDnsConfiguration::needsValidation(const DnsTlsServer& server) {
@@ -343,5 +347,18 @@
     }
 }
 
+void PrivateDnsConfiguration::dump(netdutils::DumpWriter& dw) const {
+    dw.println("PrivateDnsLog:");
+    netdutils::ScopedIndent indentStats(dw);
+
+    for (const auto& record : mPrivateDnsLog.copy()) {
+        dw.println(fmt::format("{} - netId={} PrivateDns={{{}/{}}} state={}",
+                               timestampToString(record.timestamp), record.netId,
+                               record.serverIdentity.ip.toString(), record.serverIdentity.name,
+                               validationStatusToString(record.state)));
+    }
+    dw.blankline();
+}
+
 }  // namespace net
 }  // namespace android