Loading Android.bp +9 −8 Original line number Original line Diff line number Diff line Loading @@ -51,6 +51,7 @@ cc_library { "res_query.cpp", "res_query.cpp", "res_send.cpp", "res_send.cpp", "res_stats.cpp", "res_stats.cpp", "util.cpp", "Dns64Configuration.cpp", "Dns64Configuration.cpp", "DnsProxyListener.cpp", "DnsProxyListener.cpp", "DnsResolver.cpp", "DnsResolver.cpp", Loading @@ -69,7 +70,7 @@ cc_library { // Link most things statically to minimize our dependence on system ABIs. // Link most things statically to minimize our dependence on system ABIs. stl: "libc++_static", stl: "libc++_static", static_libs: [ static_libs: [ "dnsresolver_aidl_interface-ndk_platform", "dnsresolver_aidl_interface-unstable-ndk_platform", "libbase", "libbase", "libcutils", "libcutils", "libjsoncpp", "libjsoncpp", Loading @@ -80,7 +81,7 @@ cc_library { "libstatssocket", "libstatssocket", "libsysutils", "libsysutils", "libutils", // Used by libstatslog_resolv "libutils", // Used by libstatslog_resolv "netd_event_listener_interface-V1-ndk_platform", "netd_event_listener_interface-ndk_platform", "server_configurable_flags", "server_configurable_flags", "stats_proto", "stats_proto", ], ], Loading Loading @@ -174,7 +175,7 @@ cc_test { "libutils", "libutils", ], ], static_libs: [ static_libs: [ "dnsresolver_aidl_interface-cpp", "dnsresolver_aidl_interface-unstable-cpp", "libbase", "libbase", "libgmock", "libgmock", "libnetd_test_dnsresponder", "libnetd_test_dnsresponder", Loading @@ -183,8 +184,8 @@ cc_test { "libnetd_test_tun_interface", "libnetd_test_tun_interface", "libnetd_test_utils", "libnetd_test_utils", "libnetdutils", "libnetdutils", "netd_aidl_interface-V2-cpp", "netd_aidl_interface-cpp", "netd_event_listener_interface-V1-cpp", "netd_event_listener_interface-cpp", ], ], compile_multilib: "both", compile_multilib: "both", sanitize: { sanitize: { Loading Loading @@ -213,9 +214,9 @@ cc_test { "libbinder_ndk", "libbinder_ndk", ], ], static_libs: [ static_libs: [ "dnsresolver_aidl_interface-V2-cpp", "dnsresolver_aidl_interface-cpp", "dnsresolver_aidl_interface-V2-ndk_platform", "dnsresolver_aidl_interface-ndk_platform", "netd_event_listener_interface-V1-ndk_platform", "netd_event_listener_interface-ndk_platform", "libgmock", "libgmock", "liblog", "liblog", "libnetd_resolv", "libnetd_resolv", Loading DnsProxyListener.cpp +25 −5 Original line number Original line Diff line number Diff line Loading @@ -535,6 +535,13 @@ DnsProxyListener::GetAddrInfoHandler::~GetAddrInfoHandler() { free(mHints); free(mHints); } } static bool evaluate_domain_name(const android_net_context &netcontext, const char *host) { if (!gResNetdCallbacks.evaluate_domain_name) return true; return gResNetdCallbacks.evaluate_domain_name(netcontext, host); } static bool sendBE32(SocketClient* c, uint32_t data) { static bool sendBE32(SocketClient* c, uint32_t data) { uint32_t be_data = htonl(data); uint32_t be_data = htonl(data); return c->sendData(&be_data, sizeof(be_data)) == 0; return c->sendData(&be_data, sizeof(be_data)) == 0; Loading Loading @@ -672,7 +679,12 @@ void DnsProxyListener::GetAddrInfoHandler::run() { NetworkDnsEventReported event; NetworkDnsEventReported event; initDnsEvent(&event); initDnsEvent(&event); if (queryLimiter.start(uid)) { if (queryLimiter.start(uid)) { rv = resolv_getaddrinfo(mHost, mService, mHints, &mNetContext, &result, &event); if (evaluate_domain_name(mNetContext, mHost)) { rv = resolv_getaddrinfo(mHost, mService, mHints, &mNetContext, &result, &event); } else { rv = EAI_SYSTEM; } queryLimiter.finish(uid); queryLimiter.finish(uid); } else { } else { // Note that this error code is currently not passed down to the client. // Note that this error code is currently not passed down to the client. Loading Loading @@ -887,8 +899,12 @@ void DnsProxyListener::ResNSendHandler::run() { NetworkDnsEventReported event; NetworkDnsEventReported event; initDnsEvent(&event); initDnsEvent(&event); if (queryLimiter.start(uid)) { if (queryLimiter.start(uid)) { if (evaluate_domain_name(mNetContext, rr_name.c_str())) { nsendAns = resolv_res_nsend(&mNetContext, msg.data(), msgLen, ansBuf.data(), MAXPACKET, nsendAns = resolv_res_nsend(&mNetContext, msg.data(), msgLen, ansBuf.data(), MAXPACKET, &rcode, static_cast<ResNsendFlags>(mFlags), &event); &rcode, static_cast<ResNsendFlags>(mFlags), &event); } else { nsendAns = -EAI_SYSTEM; } queryLimiter.finish(uid); queryLimiter.finish(uid); } else { } else { LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid Loading Loading @@ -1080,8 +1096,12 @@ void DnsProxyListener::GetHostByNameHandler::run() { NetworkDnsEventReported event; NetworkDnsEventReported event; initDnsEvent(&event); initDnsEvent(&event); if (queryLimiter.start(uid)) { if (queryLimiter.start(uid)) { if (evaluate_domain_name(mNetContext, mName)) { rv = resolv_gethostbyname(mName, mAf, &hbuf, tmpbuf, sizeof tmpbuf, &mNetContext, &hp, rv = resolv_gethostbyname(mName, mAf, &hbuf, tmpbuf, sizeof tmpbuf, &mNetContext, &hp, &event); &event); } else { rv = EAI_SYSTEM; } queryLimiter.finish(uid); queryLimiter.finish(uid); } else { } else { rv = EAI_MEMORY; rv = EAI_MEMORY; Loading DnsResolver.cpp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ bool resolv_init(const ResolverNetdCallbacks* callbacks) { gResNetdCallbacks.log = callbacks->log; gResNetdCallbacks.log = callbacks->log; if (gApiLevel >= 30) { if (gApiLevel >= 30) { gResNetdCallbacks.tagSocket = callbacks->tagSocket; gResNetdCallbacks.tagSocket = callbacks->tagSocket; gResNetdCallbacks.evaluate_domain_name = callbacks->evaluate_domain_name; } } android::net::gDnsResolv = android::net::DnsResolver::getInstance(); android::net::gDnsResolv = android::net::DnsResolver::getInstance(); return android::net::gDnsResolv->start(); return android::net::gDnsResolv->start(); Loading PrivateDnsConfiguration.cpp +51 −0 Original line number Original line Diff line number Diff line Loading @@ -97,6 +97,7 @@ int PrivateDnsConfiguration::set(int32_t netId, uint32_t mark, mPrivateDnsModes[netId] = PrivateDnsMode::OFF; mPrivateDnsModes[netId] = PrivateDnsMode::OFF; mPrivateDnsTransports.erase(netId); mPrivateDnsTransports.erase(netId); resolv_stats_set_servers_for_dot(netId, {}); resolv_stats_set_servers_for_dot(netId, {}); mPrivateDnsValidateThreads.erase(netId); return 0; return 0; } } Loading Loading @@ -155,6 +156,7 @@ void PrivateDnsConfiguration::clear(unsigned netId) { std::lock_guard guard(mPrivateDnsLock); std::lock_guard guard(mPrivateDnsLock); mPrivateDnsModes.erase(netId); mPrivateDnsModes.erase(netId); mPrivateDnsTransports.erase(netId); mPrivateDnsTransports.erase(netId); mPrivateDnsValidateThreads.erase(netId); } } void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& server, void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& server, Loading @@ -163,6 +165,10 @@ void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& ser tracker[server] = Validation::in_process; tracker[server] = Validation::in_process; LOG(DEBUG) << "Server " << addrToString(&server.ss) << " marked as in_process on netId " LOG(DEBUG) << "Server " << addrToString(&server.ss) << " marked as in_process on netId " << netId << ". Tracker now has size " << tracker.size(); << netId << ". Tracker now has size " << tracker.size(); // This judge must be after "tracker[server] = Validation::in_process;" if (!needValidateThread(server, netId)) { return; } // Note that capturing |server| and |netId| in this lambda create copies. // Note that capturing |server| and |netId| in this lambda create copies. std::thread validate_thread([this, server, netId, mark] { std::thread validate_thread([this, server, netId, mark] { Loading Loading @@ -205,6 +211,7 @@ void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& ser break; break; } } } } this->cleanValidateThreadTracker(server, netId); }); }); validate_thread.detach(); validate_thread.detach(); } } Loading Loading @@ -279,6 +286,50 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser return reevaluationStatus; return reevaluationStatus; } } bool PrivateDnsConfiguration::needValidateThread(const DnsTlsServer& server, unsigned netId) REQUIRES(mPrivateDnsLock) { // Create the thread tracker if it was not present auto threadPair = mPrivateDnsValidateThreads.find(netId); if (threadPair == mPrivateDnsValidateThreads.end()) { // No thread tracker yet for this netId. bool added; std::tie(threadPair, added) = mPrivateDnsValidateThreads.emplace(netId, ThreadTracker()); if (!added) { LOG(ERROR) << "Memory error while needValidateThread for netId " << netId; return true; } } auto& threadTracker = threadPair->second; if (threadTracker.count(server)) { LOG(DEBUG) << "Server " << addrToString(&(server.ss)) << " validate thread is already running. Thread tracker now has size " << threadTracker.size(); return false; } else { threadTracker.insert(server); LOG(DEBUG) << "Server " << addrToString(&(server.ss)) << " validate thread is not running. Thread tracker now has size " << threadTracker.size(); return true; } } void PrivateDnsConfiguration::cleanValidateThreadTracker(const DnsTlsServer& server, unsigned netId) { std::lock_guard<std::mutex> guard(mPrivateDnsLock); LOG(DEBUG) << "cleanValidateThreadTracker Server " << addrToString(&(server.ss)) << " validate thread is stopped."; auto threadPair = mPrivateDnsValidateThreads.find(netId); if (threadPair != mPrivateDnsValidateThreads.end()) { auto& threadTracker = threadPair->second; threadTracker.erase(server); LOG(DEBUG) << "Server " << addrToString(&(server.ss)) << " validate thread is stopped. Thread tracker now has size " << threadTracker.size(); } } // Start validation for newly added servers as well as any servers that have // Start validation for newly added servers as well as any servers that have // landed in Validation::fail state. Note that servers that have failed // landed in Validation::fail state. Note that servers that have failed // multiple validation attempts but for which there is still a validating // multiple validation attempts but for which there is still a validating Loading PrivateDnsConfiguration.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -62,12 +62,16 @@ class PrivateDnsConfiguration { private: private: typedef std::map<DnsTlsServer, Validation, AddressComparator> PrivateDnsTracker; typedef std::map<DnsTlsServer, Validation, AddressComparator> PrivateDnsTracker; typedef std::set<DnsTlsServer, AddressComparator> ThreadTracker; void validatePrivateDnsProvider(const DnsTlsServer& server, PrivateDnsTracker& tracker, void validatePrivateDnsProvider(const DnsTlsServer& server, PrivateDnsTracker& tracker, unsigned netId, uint32_t mark) REQUIRES(mPrivateDnsLock); unsigned netId, uint32_t mark) REQUIRES(mPrivateDnsLock); bool recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId, bool success); bool recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId, bool success); bool needValidateThread(const DnsTlsServer& server, unsigned netId) REQUIRES(mPrivateDnsLock); void cleanValidateThreadTracker(const DnsTlsServer& server, unsigned netId); // Start validation for newly added servers as well as any servers that have // Start validation for newly added servers as well as any servers that have // landed in Validation::fail state. Note that servers that have failed // landed in Validation::fail state. Note that servers that have failed // multiple validation attempts but for which there is still a validating // multiple validation attempts but for which there is still a validating Loading @@ -79,6 +83,7 @@ class PrivateDnsConfiguration { // Structure for tracking the validation status of servers on a specific netId. // Structure for tracking the validation status of servers on a specific netId. // Using the AddressComparator ensures at most one entry per IP address. // Using the AddressComparator ensures at most one entry per IP address. std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock); std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock); std::map<unsigned, ThreadTracker> mPrivateDnsValidateThreads GUARDED_BY(mPrivateDnsLock); }; }; extern PrivateDnsConfiguration gPrivateDnsConfiguration; extern PrivateDnsConfiguration gPrivateDnsConfiguration; Loading Loading
Android.bp +9 −8 Original line number Original line Diff line number Diff line Loading @@ -51,6 +51,7 @@ cc_library { "res_query.cpp", "res_query.cpp", "res_send.cpp", "res_send.cpp", "res_stats.cpp", "res_stats.cpp", "util.cpp", "Dns64Configuration.cpp", "Dns64Configuration.cpp", "DnsProxyListener.cpp", "DnsProxyListener.cpp", "DnsResolver.cpp", "DnsResolver.cpp", Loading @@ -69,7 +70,7 @@ cc_library { // Link most things statically to minimize our dependence on system ABIs. // Link most things statically to minimize our dependence on system ABIs. stl: "libc++_static", stl: "libc++_static", static_libs: [ static_libs: [ "dnsresolver_aidl_interface-ndk_platform", "dnsresolver_aidl_interface-unstable-ndk_platform", "libbase", "libbase", "libcutils", "libcutils", "libjsoncpp", "libjsoncpp", Loading @@ -80,7 +81,7 @@ cc_library { "libstatssocket", "libstatssocket", "libsysutils", "libsysutils", "libutils", // Used by libstatslog_resolv "libutils", // Used by libstatslog_resolv "netd_event_listener_interface-V1-ndk_platform", "netd_event_listener_interface-ndk_platform", "server_configurable_flags", "server_configurable_flags", "stats_proto", "stats_proto", ], ], Loading Loading @@ -174,7 +175,7 @@ cc_test { "libutils", "libutils", ], ], static_libs: [ static_libs: [ "dnsresolver_aidl_interface-cpp", "dnsresolver_aidl_interface-unstable-cpp", "libbase", "libbase", "libgmock", "libgmock", "libnetd_test_dnsresponder", "libnetd_test_dnsresponder", Loading @@ -183,8 +184,8 @@ cc_test { "libnetd_test_tun_interface", "libnetd_test_tun_interface", "libnetd_test_utils", "libnetd_test_utils", "libnetdutils", "libnetdutils", "netd_aidl_interface-V2-cpp", "netd_aidl_interface-cpp", "netd_event_listener_interface-V1-cpp", "netd_event_listener_interface-cpp", ], ], compile_multilib: "both", compile_multilib: "both", sanitize: { sanitize: { Loading Loading @@ -213,9 +214,9 @@ cc_test { "libbinder_ndk", "libbinder_ndk", ], ], static_libs: [ static_libs: [ "dnsresolver_aidl_interface-V2-cpp", "dnsresolver_aidl_interface-cpp", "dnsresolver_aidl_interface-V2-ndk_platform", "dnsresolver_aidl_interface-ndk_platform", "netd_event_listener_interface-V1-ndk_platform", "netd_event_listener_interface-ndk_platform", "libgmock", "libgmock", "liblog", "liblog", "libnetd_resolv", "libnetd_resolv", Loading
DnsProxyListener.cpp +25 −5 Original line number Original line Diff line number Diff line Loading @@ -535,6 +535,13 @@ DnsProxyListener::GetAddrInfoHandler::~GetAddrInfoHandler() { free(mHints); free(mHints); } } static bool evaluate_domain_name(const android_net_context &netcontext, const char *host) { if (!gResNetdCallbacks.evaluate_domain_name) return true; return gResNetdCallbacks.evaluate_domain_name(netcontext, host); } static bool sendBE32(SocketClient* c, uint32_t data) { static bool sendBE32(SocketClient* c, uint32_t data) { uint32_t be_data = htonl(data); uint32_t be_data = htonl(data); return c->sendData(&be_data, sizeof(be_data)) == 0; return c->sendData(&be_data, sizeof(be_data)) == 0; Loading Loading @@ -672,7 +679,12 @@ void DnsProxyListener::GetAddrInfoHandler::run() { NetworkDnsEventReported event; NetworkDnsEventReported event; initDnsEvent(&event); initDnsEvent(&event); if (queryLimiter.start(uid)) { if (queryLimiter.start(uid)) { rv = resolv_getaddrinfo(mHost, mService, mHints, &mNetContext, &result, &event); if (evaluate_domain_name(mNetContext, mHost)) { rv = resolv_getaddrinfo(mHost, mService, mHints, &mNetContext, &result, &event); } else { rv = EAI_SYSTEM; } queryLimiter.finish(uid); queryLimiter.finish(uid); } else { } else { // Note that this error code is currently not passed down to the client. // Note that this error code is currently not passed down to the client. Loading Loading @@ -887,8 +899,12 @@ void DnsProxyListener::ResNSendHandler::run() { NetworkDnsEventReported event; NetworkDnsEventReported event; initDnsEvent(&event); initDnsEvent(&event); if (queryLimiter.start(uid)) { if (queryLimiter.start(uid)) { if (evaluate_domain_name(mNetContext, rr_name.c_str())) { nsendAns = resolv_res_nsend(&mNetContext, msg.data(), msgLen, ansBuf.data(), MAXPACKET, nsendAns = resolv_res_nsend(&mNetContext, msg.data(), msgLen, ansBuf.data(), MAXPACKET, &rcode, static_cast<ResNsendFlags>(mFlags), &event); &rcode, static_cast<ResNsendFlags>(mFlags), &event); } else { nsendAns = -EAI_SYSTEM; } queryLimiter.finish(uid); queryLimiter.finish(uid); } else { } else { LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid LOG(WARNING) << "ResNSendHandler::run: resnsend: from UID " << uid Loading Loading @@ -1080,8 +1096,12 @@ void DnsProxyListener::GetHostByNameHandler::run() { NetworkDnsEventReported event; NetworkDnsEventReported event; initDnsEvent(&event); initDnsEvent(&event); if (queryLimiter.start(uid)) { if (queryLimiter.start(uid)) { if (evaluate_domain_name(mNetContext, mName)) { rv = resolv_gethostbyname(mName, mAf, &hbuf, tmpbuf, sizeof tmpbuf, &mNetContext, &hp, rv = resolv_gethostbyname(mName, mAf, &hbuf, tmpbuf, sizeof tmpbuf, &mNetContext, &hp, &event); &event); } else { rv = EAI_SYSTEM; } queryLimiter.finish(uid); queryLimiter.finish(uid); } else { } else { rv = EAI_MEMORY; rv = EAI_MEMORY; Loading
DnsResolver.cpp +1 −0 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,7 @@ bool resolv_init(const ResolverNetdCallbacks* callbacks) { gResNetdCallbacks.log = callbacks->log; gResNetdCallbacks.log = callbacks->log; if (gApiLevel >= 30) { if (gApiLevel >= 30) { gResNetdCallbacks.tagSocket = callbacks->tagSocket; gResNetdCallbacks.tagSocket = callbacks->tagSocket; gResNetdCallbacks.evaluate_domain_name = callbacks->evaluate_domain_name; } } android::net::gDnsResolv = android::net::DnsResolver::getInstance(); android::net::gDnsResolv = android::net::DnsResolver::getInstance(); return android::net::gDnsResolv->start(); return android::net::gDnsResolv->start(); Loading
PrivateDnsConfiguration.cpp +51 −0 Original line number Original line Diff line number Diff line Loading @@ -97,6 +97,7 @@ int PrivateDnsConfiguration::set(int32_t netId, uint32_t mark, mPrivateDnsModes[netId] = PrivateDnsMode::OFF; mPrivateDnsModes[netId] = PrivateDnsMode::OFF; mPrivateDnsTransports.erase(netId); mPrivateDnsTransports.erase(netId); resolv_stats_set_servers_for_dot(netId, {}); resolv_stats_set_servers_for_dot(netId, {}); mPrivateDnsValidateThreads.erase(netId); return 0; return 0; } } Loading Loading @@ -155,6 +156,7 @@ void PrivateDnsConfiguration::clear(unsigned netId) { std::lock_guard guard(mPrivateDnsLock); std::lock_guard guard(mPrivateDnsLock); mPrivateDnsModes.erase(netId); mPrivateDnsModes.erase(netId); mPrivateDnsTransports.erase(netId); mPrivateDnsTransports.erase(netId); mPrivateDnsValidateThreads.erase(netId); } } void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& server, void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& server, Loading @@ -163,6 +165,10 @@ void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& ser tracker[server] = Validation::in_process; tracker[server] = Validation::in_process; LOG(DEBUG) << "Server " << addrToString(&server.ss) << " marked as in_process on netId " LOG(DEBUG) << "Server " << addrToString(&server.ss) << " marked as in_process on netId " << netId << ". Tracker now has size " << tracker.size(); << netId << ". Tracker now has size " << tracker.size(); // This judge must be after "tracker[server] = Validation::in_process;" if (!needValidateThread(server, netId)) { return; } // Note that capturing |server| and |netId| in this lambda create copies. // Note that capturing |server| and |netId| in this lambda create copies. std::thread validate_thread([this, server, netId, mark] { std::thread validate_thread([this, server, netId, mark] { Loading Loading @@ -205,6 +211,7 @@ void PrivateDnsConfiguration::validatePrivateDnsProvider(const DnsTlsServer& ser break; break; } } } } this->cleanValidateThreadTracker(server, netId); }); }); validate_thread.detach(); validate_thread.detach(); } } Loading Loading @@ -279,6 +286,50 @@ bool PrivateDnsConfiguration::recordPrivateDnsValidation(const DnsTlsServer& ser return reevaluationStatus; return reevaluationStatus; } } bool PrivateDnsConfiguration::needValidateThread(const DnsTlsServer& server, unsigned netId) REQUIRES(mPrivateDnsLock) { // Create the thread tracker if it was not present auto threadPair = mPrivateDnsValidateThreads.find(netId); if (threadPair == mPrivateDnsValidateThreads.end()) { // No thread tracker yet for this netId. bool added; std::tie(threadPair, added) = mPrivateDnsValidateThreads.emplace(netId, ThreadTracker()); if (!added) { LOG(ERROR) << "Memory error while needValidateThread for netId " << netId; return true; } } auto& threadTracker = threadPair->second; if (threadTracker.count(server)) { LOG(DEBUG) << "Server " << addrToString(&(server.ss)) << " validate thread is already running. Thread tracker now has size " << threadTracker.size(); return false; } else { threadTracker.insert(server); LOG(DEBUG) << "Server " << addrToString(&(server.ss)) << " validate thread is not running. Thread tracker now has size " << threadTracker.size(); return true; } } void PrivateDnsConfiguration::cleanValidateThreadTracker(const DnsTlsServer& server, unsigned netId) { std::lock_guard<std::mutex> guard(mPrivateDnsLock); LOG(DEBUG) << "cleanValidateThreadTracker Server " << addrToString(&(server.ss)) << " validate thread is stopped."; auto threadPair = mPrivateDnsValidateThreads.find(netId); if (threadPair != mPrivateDnsValidateThreads.end()) { auto& threadTracker = threadPair->second; threadTracker.erase(server); LOG(DEBUG) << "Server " << addrToString(&(server.ss)) << " validate thread is stopped. Thread tracker now has size " << threadTracker.size(); } } // Start validation for newly added servers as well as any servers that have // Start validation for newly added servers as well as any servers that have // landed in Validation::fail state. Note that servers that have failed // landed in Validation::fail state. Note that servers that have failed // multiple validation attempts but for which there is still a validating // multiple validation attempts but for which there is still a validating Loading
PrivateDnsConfiguration.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -62,12 +62,16 @@ class PrivateDnsConfiguration { private: private: typedef std::map<DnsTlsServer, Validation, AddressComparator> PrivateDnsTracker; typedef std::map<DnsTlsServer, Validation, AddressComparator> PrivateDnsTracker; typedef std::set<DnsTlsServer, AddressComparator> ThreadTracker; void validatePrivateDnsProvider(const DnsTlsServer& server, PrivateDnsTracker& tracker, void validatePrivateDnsProvider(const DnsTlsServer& server, PrivateDnsTracker& tracker, unsigned netId, uint32_t mark) REQUIRES(mPrivateDnsLock); unsigned netId, uint32_t mark) REQUIRES(mPrivateDnsLock); bool recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId, bool success); bool recordPrivateDnsValidation(const DnsTlsServer& server, unsigned netId, bool success); bool needValidateThread(const DnsTlsServer& server, unsigned netId) REQUIRES(mPrivateDnsLock); void cleanValidateThreadTracker(const DnsTlsServer& server, unsigned netId); // Start validation for newly added servers as well as any servers that have // Start validation for newly added servers as well as any servers that have // landed in Validation::fail state. Note that servers that have failed // landed in Validation::fail state. Note that servers that have failed // multiple validation attempts but for which there is still a validating // multiple validation attempts but for which there is still a validating Loading @@ -79,6 +83,7 @@ class PrivateDnsConfiguration { // Structure for tracking the validation status of servers on a specific netId. // Structure for tracking the validation status of servers on a specific netId. // Using the AddressComparator ensures at most one entry per IP address. // Using the AddressComparator ensures at most one entry per IP address. std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock); std::map<unsigned, PrivateDnsTracker> mPrivateDnsTransports GUARDED_BY(mPrivateDnsLock); std::map<unsigned, ThreadTracker> mPrivateDnsValidateThreads GUARDED_BY(mPrivateDnsLock); }; }; extern PrivateDnsConfiguration gPrivateDnsConfiguration; extern PrivateDnsConfiguration gPrivateDnsConfiguration; Loading