Loading DnsTlsDispatcher.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,8 @@ std::list<DnsTlsServer> DnsTlsDispatcher::getOrderedAndUsableServerList( DnsTlsTransport::Response DnsTlsDispatcher::query(const std::list<DnsTlsServer>& tlsServers, ResState* statp, const Slice query, const Slice ans, int* resplen) { const Slice ans, int* resplen, bool dotQuickFallback) { const std::list<DnsTlsServer> servers( getOrderedAndUsableServerList(tlsServers, statp->netid, statp->mark)); Loading Loading @@ -150,6 +151,9 @@ DnsTlsTransport::Response DnsTlsDispatcher::query(const std::list<DnsTlsServer>& // Sync from res_tls_send in res_send.cpp dnsQueryEvent->set_rcode(NS_R_TIMEOUT); resolv_stats_add(statp->netid, IPSockAddr::toIPSockAddr(server.ss), dnsQueryEvent); if (dotQuickFallback) { return code; } break; case DnsTlsTransport::Response::internal_error: dnsQueryEvent->set_rcode(NS_R_INTERNAL_ERROR); Loading DnsTlsDispatcher.h +2 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,8 @@ class DnsTlsDispatcher : public PrivateDnsValidationObserver { // order passed in by the caller. DnsTlsTransport::Response query(const std::list<DnsTlsServer>& tlsServers, ResState* _Nonnull statp, const netdutils::Slice query, const netdutils::Slice ans, int* _Nonnull resplen); const netdutils::Slice ans, int* _Nonnull resplen, bool dotQuickFallback); // Given a |query|, sends it to the server on the network indicated by |mark|, // and writes the response into |ans|, and indicates the number of bytes written in |resplen|. Loading Experiments.h +2 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ class Experiments { "dot_revalidation_threshold", "dot_xport_unusable_threshold", "dot_query_timeout_ms", "dot_quick_fallback", "dot_validation_latency_factor", "dot_validation_latency_offset_ms", "doh", Loading @@ -67,6 +68,7 @@ class Experiments { "doh_idle_timeout_ms", "doh_session_resumption", "mdns_resolution", "max_queries_global", }; // This value is used in updateInternal as the default value if any flags can't be found. static constexpr int kFlagIntDefault = INT_MIN; Loading OperationLimiter.h +12 −7 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <android-base/logging.h> #include <android-base/thread_annotations.h> #include "Experiments.h" namespace android { namespace netdutils { Loading @@ -43,8 +45,7 @@ namespace netdutils { template <typename KeyType> class OperationLimiter { public: OperationLimiter(int limitPerKey, int globalLimit = INT_MAX) : mLimitPerKey(limitPerKey), mGlobalLimit(globalLimit) {} OperationLimiter(int limitPerKey) : mLimitPerKey(limitPerKey) {} ~OperationLimiter() { DCHECK(mCounters.empty()) << "Destroying OperationLimiter with active operations"; Loading @@ -57,15 +58,22 @@ class OperationLimiter { // finish(key). bool start(KeyType key) EXCLUDES(mMutex) { std::lock_guard lock(mMutex); if (mGlobalCounter >= mGlobalLimit) { int globalLimit = android::net::Experiments::getInstance()->getFlag("max_queries_global", INT_MAX); if (globalLimit < mLimitPerKey) { LOG(ERROR) << "Misconfiguration on max_queries_global " << globalLimit; globalLimit = INT_MAX; } if (mGlobalCounter >= globalLimit) { // Oh, no! LOG(ERROR) << "Query from " << key << " denied due to global limit: " << globalLimit; return false; } auto& cnt = mCounters[key]; // operator[] creates new entries as needed. if (cnt >= mLimitPerKey) { // Oh, no! LOG(ERROR) << "Query from " << key << " denied due to limit: " << mLimitPerKey; return false; } Loading Loading @@ -109,9 +117,6 @@ class OperationLimiter { // Maximum number of outstanding queries from a single key. const int mLimitPerKey; // Maximum number of outstanding queries, globally. const int mGlobalLimit; }; } // namespace netdutils Loading apex/manifest.json +1 −1 Original line number Diff line number Diff line { "name": "com.android.resolv", "version": 319999900 "version": 330000000 } Loading
DnsTlsDispatcher.cpp +5 −1 Original line number Diff line number Diff line Loading @@ -107,7 +107,8 @@ std::list<DnsTlsServer> DnsTlsDispatcher::getOrderedAndUsableServerList( DnsTlsTransport::Response DnsTlsDispatcher::query(const std::list<DnsTlsServer>& tlsServers, ResState* statp, const Slice query, const Slice ans, int* resplen) { const Slice ans, int* resplen, bool dotQuickFallback) { const std::list<DnsTlsServer> servers( getOrderedAndUsableServerList(tlsServers, statp->netid, statp->mark)); Loading Loading @@ -150,6 +151,9 @@ DnsTlsTransport::Response DnsTlsDispatcher::query(const std::list<DnsTlsServer>& // Sync from res_tls_send in res_send.cpp dnsQueryEvent->set_rcode(NS_R_TIMEOUT); resolv_stats_add(statp->netid, IPSockAddr::toIPSockAddr(server.ss), dnsQueryEvent); if (dotQuickFallback) { return code; } break; case DnsTlsTransport::Response::internal_error: dnsQueryEvent->set_rcode(NS_R_INTERNAL_ERROR); Loading
DnsTlsDispatcher.h +2 −1 Original line number Diff line number Diff line Loading @@ -52,7 +52,8 @@ class DnsTlsDispatcher : public PrivateDnsValidationObserver { // order passed in by the caller. DnsTlsTransport::Response query(const std::list<DnsTlsServer>& tlsServers, ResState* _Nonnull statp, const netdutils::Slice query, const netdutils::Slice ans, int* _Nonnull resplen); const netdutils::Slice ans, int* _Nonnull resplen, bool dotQuickFallback); // Given a |query|, sends it to the server on the network indicated by |mark|, // and writes the response into |ans|, and indicates the number of bytes written in |resplen|. Loading
Experiments.h +2 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ class Experiments { "dot_revalidation_threshold", "dot_xport_unusable_threshold", "dot_query_timeout_ms", "dot_quick_fallback", "dot_validation_latency_factor", "dot_validation_latency_offset_ms", "doh", Loading @@ -67,6 +68,7 @@ class Experiments { "doh_idle_timeout_ms", "doh_session_resumption", "mdns_resolution", "max_queries_global", }; // This value is used in updateInternal as the default value if any flags can't be found. static constexpr int kFlagIntDefault = INT_MIN; Loading
OperationLimiter.h +12 −7 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ #include <android-base/logging.h> #include <android-base/thread_annotations.h> #include "Experiments.h" namespace android { namespace netdutils { Loading @@ -43,8 +45,7 @@ namespace netdutils { template <typename KeyType> class OperationLimiter { public: OperationLimiter(int limitPerKey, int globalLimit = INT_MAX) : mLimitPerKey(limitPerKey), mGlobalLimit(globalLimit) {} OperationLimiter(int limitPerKey) : mLimitPerKey(limitPerKey) {} ~OperationLimiter() { DCHECK(mCounters.empty()) << "Destroying OperationLimiter with active operations"; Loading @@ -57,15 +58,22 @@ class OperationLimiter { // finish(key). bool start(KeyType key) EXCLUDES(mMutex) { std::lock_guard lock(mMutex); if (mGlobalCounter >= mGlobalLimit) { int globalLimit = android::net::Experiments::getInstance()->getFlag("max_queries_global", INT_MAX); if (globalLimit < mLimitPerKey) { LOG(ERROR) << "Misconfiguration on max_queries_global " << globalLimit; globalLimit = INT_MAX; } if (mGlobalCounter >= globalLimit) { // Oh, no! LOG(ERROR) << "Query from " << key << " denied due to global limit: " << globalLimit; return false; } auto& cnt = mCounters[key]; // operator[] creates new entries as needed. if (cnt >= mLimitPerKey) { // Oh, no! LOG(ERROR) << "Query from " << key << " denied due to limit: " << mLimitPerKey; return false; } Loading Loading @@ -109,9 +117,6 @@ class OperationLimiter { // Maximum number of outstanding queries from a single key. const int mLimitPerKey; // Maximum number of outstanding queries, globally. const int mGlobalLimit; }; } // namespace netdutils Loading
apex/manifest.json +1 −1 Original line number Diff line number Diff line { "name": "com.android.resolv", "version": 319999900 "version": 330000000 }