Log DNS results for network validation attempts

This should help aid debugging network validation failures.

Bug:19417093
Change-Id: Idb06f7334d7c14e69fd721a81a00ce3f8d529364
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index 8b661e3..e4729286 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -47,6 +47,7 @@
 import android.telephony.CellInfoLte;
 import android.telephony.CellInfoWcdma;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.LocalLog;
 import android.util.LocalLog.ReadOnlyLocalLog;
 import android.util.Log;
@@ -59,6 +60,7 @@
 
 import java.io.IOException;
 import java.net.HttpURLConnection;
+import java.net.InetAddress;
 import java.net.URL;
 import java.util.List;
 import java.util.Random;
@@ -643,15 +645,31 @@
             //    fact block fetching of the generate_204 URL which would lead to false negative
             //    results for network validation.
             boolean fetchPac = false;
-            {
-                final ProxyInfo proxyInfo = mNetworkAgentInfo.linkProperties.getHttpProxy();
-                if (proxyInfo != null && !Uri.EMPTY.equals(proxyInfo.getPacFileUrl())) {
-                    url = new URL(proxyInfo.getPacFileUrl().toString());
-                    fetchPac = true;
+            final ProxyInfo proxyInfo = mNetworkAgentInfo.linkProperties.getHttpProxy();
+            if (proxyInfo != null && !Uri.EMPTY.equals(proxyInfo.getPacFileUrl())) {
+                url = new URL(proxyInfo.getPacFileUrl().toString());
+                fetchPac = true;
+            }
+            final StringBuffer connectInfo = new StringBuffer();
+            String hostToResolve = null;
+            // Only resolve a host if HttpURLConnection is about to, to avoid any potentially
+            // unnecessary resolution.
+            if (proxyInfo == null || fetchPac) {
+                hostToResolve = url.getHost();
+            } else if (proxyInfo != null) {
+                hostToResolve = proxyInfo.getHost();
+            }
+            if (!TextUtils.isEmpty(hostToResolve)) {
+                connectInfo.append(", " + hostToResolve + "=");
+                final InetAddress[] addresses =
+                        mNetworkAgentInfo.network.getAllByName(hostToResolve);
+                for (InetAddress address : addresses) {
+                    connectInfo.append(address.getHostAddress());
+                    if (address != addresses[addresses.length-1]) connectInfo.append(",");
                 }
             }
             validationLog("Checking " + url.toString() + " on " +
-                    mNetworkAgentInfo.networkInfo.getExtraInfo());
+                    mNetworkAgentInfo.networkInfo.getExtraInfo() + connectInfo);
             urlConnection = (HttpURLConnection) mNetworkAgentInfo.network.openConnection(url);
             urlConnection.setInstanceFollowRedirects(fetchPac);
             urlConnection.setConnectTimeout(SOCKET_TIMEOUT_MS);