[DRUEL03] Implement unsolicited private DNS validation event
Implement unsolicited private DNS validation event that will
report to the listener when process a private DNS validation
and get result.
Bug: 173485754
Test: atest resolv_integration_test resolv_unit_test\
resolv_stress_test resolv_stats_test_utils_test
Change-Id: I2b90f4e5ad298e06efbb07c8bcc56808df46fdd0
diff --git a/PrivateDnsConfiguration.cpp b/PrivateDnsConfiguration.cpp
index 8f3b836..c8b070a 100644
--- a/PrivateDnsConfiguration.cpp
+++ b/PrivateDnsConfiguration.cpp
@@ -30,6 +30,8 @@
#include "netdutils/BackoffSequence.h"
#include "util.h"
+using aidl::android::net::resolv::aidl::IDnsResolverUnsolicitedEventListener;
+using aidl::android::net::resolv::aidl::PrivateDnsValidationEventParcel;
using android::base::StringPrintf;
using android::netdutils::setThreadName;
using std::chrono::milliseconds;
@@ -222,6 +224,35 @@
validate_thread.detach();
}
+void PrivateDnsConfiguration::sendPrivateDnsValidationEvent(const DnsTlsServer& server,
+ unsigned netId, bool success) {
+ LOG(DEBUG) << "Sending validation " << (success ? "success" : "failure") << " event on netId "
+ << netId << " for " << server.toIpString() << " with hostname {" << server.name
+ << "}";
+ // Send a validation event to NetdEventListenerService.
+ const auto& listeners = ResolverEventReporter::getInstance().getListeners();
+ if (listeners.empty()) {
+ LOG(ERROR)
+ << "Validation event not sent since no INetdEventListener receiver is available.";
+ }
+ for (const auto& it : listeners) {
+ it->onPrivateDnsValidationEvent(netId, server.toIpString(), server.name, success);
+ }
+
+ // Send a validation event to unsolicited event listeners.
+ const auto& unsolEventListeners = ResolverEventReporter::getInstance().getUnsolEventListeners();
+ const PrivateDnsValidationEventParcel validationEvent = {
+ .netId = static_cast<int32_t>(netId),
+ .ipAddress = server.toIpString(),
+ .hostname = server.name,
+ .validation = success ? IDnsResolverUnsolicitedEventListener::VALIDATION_RESULT_SUCCESS
+ : IDnsResolverUnsolicitedEventListener::VALIDATION_RESULT_FAILURE,
+ };
+ for (const auto& it : unsolEventListeners) {
+ it->onPrivateDnsValidationEvent(validationEvent);
+ }
+}
+
bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId,
bool success) {
constexpr bool NEEDS_REEVALUATION = true;
@@ -268,19 +299,8 @@
reevaluationStatus = DONT_REEVALUATE;
}
- // Send a validation event to NetdEventListenerService.
- const auto& listeners = ResolverEventReporter::getInstance().getListeners();
- if (listeners.size() != 0) {
- for (const auto& it : listeners) {
- it->onPrivateDnsValidationEvent(netId, server.toIpString(), server.name, success);
- }
- LOG(DEBUG) << "Sent validation " << (success ? "success" : "failure") << " event on netId "
- << netId << " for " << server.toIpString() << " with hostname {" << server.name
- << "}";
- } else {
- LOG(ERROR)
- << "Validation event not sent since no INetdEventListener receiver is available.";
- }
+ // Send private dns validation result to listeners.
+ sendPrivateDnsValidationEvent(server, netId, success);
if (success) {
updateServerState(identity, Validation::success, netId);