Loading Android.bp +21 −0 Original line number Diff line number Diff line Loading @@ -9,10 +9,30 @@ aidl_interface { srcs: [ "binder/android/net/IDnsResolver.aidl", ], imports: [ "netd_event_listener_interface", ], api_dir: "binder/api", // Enable gen_log after it is supported in NDK backend. b/126501406 } cc_test_library { name: "libnetd_test_metrics_listener", defaults: ["netd_defaults"], srcs: [ "tests/BaseTestMetricsListener.cpp", "tests/TestMetrics.cpp", ], include_dirs: [ "system/netd/include", ], shared_libs: [ "libbinder", "libutils", "netd_event_listener_interface-cpp", ], } cc_library { name: "libnetd_resolv", version_script: "libnetd_resolv.map.txt", Loading Loading @@ -102,6 +122,7 @@ cc_test { ], static_libs: [ "libnetd_test_dnsresponder", "libnetd_test_metrics_listener", "libnetd_test_tun_interface", "liblogwrap", "libnetdutils", Loading DnsProxyListener.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -297,15 +297,17 @@ void reportDnsEvent(int eventType, const android_net_context& netContext, int la android::util::stats_write(android::util::NETWORK_DNS_EVENT_REPORTED, eventType, returnCode, latencyUs); const std::shared_ptr<INetdEventListener> listener = ResolverEventReporter::getListener(); if (!listener) { const auto& listeners = ResolverEventReporter::getInstance().getListeners(); if (listeners.size() == 0) { LOG(ERROR) << __func__ << ": DNS event not sent since NetdEventListenerService is unavailable."; << ": DNS event not sent since no INetdEventListener receiver is available."; return; } const int latencyMs = latencyUs / 1000; listener->onDnsEvent(netContext.dns_netid, eventType, returnCode, latencyMs, query_name, ip_addrs, total_ip_addr_count, netContext.uid); for (const auto& it : listeners) { it->onDnsEvent(netContext.dns_netid, eventType, returnCode, latencyMs, query_name, ip_addrs, total_ip_addr_count, netContext.uid); } } bool onlyIPv4Answers(const addrinfo* res) { Loading DnsResolverService.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include "DnsResolver.h" #include "NetdPermissions.h" // PERM_* #include "ResolverEventReporter.h" using android::base::Join; using android::base::StringPrintf; Loading @@ -53,6 +54,14 @@ namespace { #define ENFORCE_NETWORK_STACK_PERMISSIONS() \ ENFORCE_ANY_PERMISSION(PERM_NETWORK_STACK, PERM_MAINLINE_NETWORK_STACK) inline ::ndk::ScopedAStatus statusFromErrcode(int ret) { if (ret) { return ::ndk::ScopedAStatus( AStatus_fromServiceSpecificErrorWithMessage(-ret, strerror(-ret))); } return ::ndk::ScopedAStatus(AStatus_newOk()); } } // namespace binder_status_t DnsResolverService::start() { Loading Loading @@ -80,6 +89,15 @@ binder_status_t DnsResolverService::start() { return ::ndk::ScopedAStatus(AStatus_newOk()); } ::ndk::ScopedAStatus DnsResolverService::registerEventListener( const std::shared_ptr<aidl::android::net::metrics::INetdEventListener>& listener) { ENFORCE_NETWORK_STACK_PERMISSIONS(); int res = ResolverEventReporter::getInstance().addListener(listener); return statusFromErrcode(res); } ::ndk::ScopedAStatus DnsResolverService::checkAnyPermission( const std::vector<const char*>& permissions) { // TODO: Remove callback and move this to unnamed namespace after libbiner_ndk supports Loading DnsResolverService.h +3 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,9 @@ class DnsResolverService : public aidl::android::net::BnDnsResolver { // TODO: Add dump() after libbinder_ndk support it. ::ndk::ScopedAStatus isAlive(bool* alive) override; ::ndk::ScopedAStatus registerEventListener( const std::shared_ptr<aidl::android::net::metrics::INetdEventListener>& listener) override; private: DnsResolverService() {} Loading PrivateDnsConfiguration.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -307,17 +307,18 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser } // Send a validation event to NetdEventListenerService. const std::shared_ptr<INetdEventListener> listener = ResolverEventReporter::getListener(); if (listener != nullptr) { listener->onPrivateDnsValidationEvent(netId, addrToString(&server.ss), server.name, success); const auto& listeners = ResolverEventReporter::getInstance().getListeners(); if (listeners.size() != 0) { for (const auto& it : listeners) { it->onPrivateDnsValidationEvent(netId, addrToString(&server.ss), server.name, success); } if (DBG) { ALOGD("Sent validation %s event on netId %u for %s with hostname %s", success ? "success" : "failure", netId, addrToString(&server.ss).c_str(), server.name.c_str()); } } else { ALOGE("Validation event not sent since NetdEventListenerService is unavailable."); ALOGE("Validation event not sent since no INetdEventListener receiver is available."); } if (success) { Loading Loading
Android.bp +21 −0 Original line number Diff line number Diff line Loading @@ -9,10 +9,30 @@ aidl_interface { srcs: [ "binder/android/net/IDnsResolver.aidl", ], imports: [ "netd_event_listener_interface", ], api_dir: "binder/api", // Enable gen_log after it is supported in NDK backend. b/126501406 } cc_test_library { name: "libnetd_test_metrics_listener", defaults: ["netd_defaults"], srcs: [ "tests/BaseTestMetricsListener.cpp", "tests/TestMetrics.cpp", ], include_dirs: [ "system/netd/include", ], shared_libs: [ "libbinder", "libutils", "netd_event_listener_interface-cpp", ], } cc_library { name: "libnetd_resolv", version_script: "libnetd_resolv.map.txt", Loading Loading @@ -102,6 +122,7 @@ cc_test { ], static_libs: [ "libnetd_test_dnsresponder", "libnetd_test_metrics_listener", "libnetd_test_tun_interface", "liblogwrap", "libnetdutils", Loading
DnsProxyListener.cpp +7 −5 Original line number Diff line number Diff line Loading @@ -297,15 +297,17 @@ void reportDnsEvent(int eventType, const android_net_context& netContext, int la android::util::stats_write(android::util::NETWORK_DNS_EVENT_REPORTED, eventType, returnCode, latencyUs); const std::shared_ptr<INetdEventListener> listener = ResolverEventReporter::getListener(); if (!listener) { const auto& listeners = ResolverEventReporter::getInstance().getListeners(); if (listeners.size() == 0) { LOG(ERROR) << __func__ << ": DNS event not sent since NetdEventListenerService is unavailable."; << ": DNS event not sent since no INetdEventListener receiver is available."; return; } const int latencyMs = latencyUs / 1000; listener->onDnsEvent(netContext.dns_netid, eventType, returnCode, latencyMs, query_name, ip_addrs, total_ip_addr_count, netContext.uid); for (const auto& it : listeners) { it->onDnsEvent(netContext.dns_netid, eventType, returnCode, latencyMs, query_name, ip_addrs, total_ip_addr_count, netContext.uid); } } bool onlyIPv4Answers(const addrinfo* res) { Loading
DnsResolverService.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include "DnsResolver.h" #include "NetdPermissions.h" // PERM_* #include "ResolverEventReporter.h" using android::base::Join; using android::base::StringPrintf; Loading @@ -53,6 +54,14 @@ namespace { #define ENFORCE_NETWORK_STACK_PERMISSIONS() \ ENFORCE_ANY_PERMISSION(PERM_NETWORK_STACK, PERM_MAINLINE_NETWORK_STACK) inline ::ndk::ScopedAStatus statusFromErrcode(int ret) { if (ret) { return ::ndk::ScopedAStatus( AStatus_fromServiceSpecificErrorWithMessage(-ret, strerror(-ret))); } return ::ndk::ScopedAStatus(AStatus_newOk()); } } // namespace binder_status_t DnsResolverService::start() { Loading Loading @@ -80,6 +89,15 @@ binder_status_t DnsResolverService::start() { return ::ndk::ScopedAStatus(AStatus_newOk()); } ::ndk::ScopedAStatus DnsResolverService::registerEventListener( const std::shared_ptr<aidl::android::net::metrics::INetdEventListener>& listener) { ENFORCE_NETWORK_STACK_PERMISSIONS(); int res = ResolverEventReporter::getInstance().addListener(listener); return statusFromErrcode(res); } ::ndk::ScopedAStatus DnsResolverService::checkAnyPermission( const std::vector<const char*>& permissions) { // TODO: Remove callback and move this to unnamed namespace after libbiner_ndk supports Loading
DnsResolverService.h +3 −0 Original line number Diff line number Diff line Loading @@ -34,6 +34,9 @@ class DnsResolverService : public aidl::android::net::BnDnsResolver { // TODO: Add dump() after libbinder_ndk support it. ::ndk::ScopedAStatus isAlive(bool* alive) override; ::ndk::ScopedAStatus registerEventListener( const std::shared_ptr<aidl::android::net::metrics::INetdEventListener>& listener) override; private: DnsResolverService() {} Loading
PrivateDnsConfiguration.cpp +6 −5 Original line number Diff line number Diff line Loading @@ -307,17 +307,18 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser } // Send a validation event to NetdEventListenerService. const std::shared_ptr<INetdEventListener> listener = ResolverEventReporter::getListener(); if (listener != nullptr) { listener->onPrivateDnsValidationEvent(netId, addrToString(&server.ss), server.name, success); const auto& listeners = ResolverEventReporter::getInstance().getListeners(); if (listeners.size() != 0) { for (const auto& it : listeners) { it->onPrivateDnsValidationEvent(netId, addrToString(&server.ss), server.name, success); } if (DBG) { ALOGD("Sent validation %s event on netId %u for %s with hostname %s", success ? "success" : "failure", netId, addrToString(&server.ss).c_str(), server.name.c_str()); } } else { ALOGE("Validation event not sent since NetdEventListenerService is unavailable."); ALOGE("Validation event not sent since no INetdEventListener receiver is available."); } if (success) { Loading