Allow changing retry limit and timeout via experiment flags.

Test: built / flashed / booted
      netd_unit_test, netd_integration_test, libnetd_resolv_test

Change-Id: Ica8f2ccddc60f2b8e006ac6923064b6171a13821
diff --git a/resolv/res_cache.cpp b/resolv/res_cache.cpp
index ad5a2c5..53122f6 100644
--- a/resolv/res_cache.cpp
+++ b/resolv/res_cache.cpp
@@ -46,9 +46,12 @@
 #include <netdb.h>
 
 #include <android-base/logging.h>
+#include <android-base/parseint.h>
 #include <android-base/thread_annotations.h>
 #include <android/multinetwork.h>  // ResNsendFlags
 
+#include <server_configurable_flags/get_flags.h>
+
 #include "res_state_ext.h"
 #include "resolv_private.h"
 
@@ -1674,6 +1677,22 @@
     params->retry_count = 0;
 }
 
+static void resolv_set_experiment_params(res_params* params) {
+    using android::base::ParseInt;
+    using server_configurable_flags::GetServerConfigurableFlag;
+
+    if (params->retry_count == 0) {
+        params->retry_count = RES_DFLRETRY;
+        ParseInt(GetServerConfigurableFlag("netd_native", "retry_count", ""), &params->retry_count);
+    }
+
+    if (params->base_timeout_msec == 0) {
+        params->base_timeout_msec = RES_TIMEOUT;
+        ParseInt(GetServerConfigurableFlag("netd_native", "retransmission_time_interval", ""),
+                 &params->base_timeout_msec);
+    }
+}
+
 int resolv_set_nameservers_for_net(unsigned netid, const char** servers, const int numservers,
                                    const char* domains, const res_params* params) {
     char* cp;
@@ -1717,7 +1736,7 @@
         } else {
             resolv_set_default_params(&cache_info->params);
         }
-
+        resolv_set_experiment_params(&cache_info->params);
         if (!resolv_is_nameservers_equal_locked(cache_info, servers, numservers)) {
             // free current before adding new
             free_nameservers_locked(cache_info);