From 2f0a8974d1f45aad590829042df8cff07e989635 Mon Sep 17 00:00:00 2001 From: Paul Jensen Date: Thu, 25 Jun 2015 10:07:14 -0400 Subject: [PATCH] Log DNS results for network validation attempts This should help aid debugging network validation failures. Bug:19417093 Change-Id: Idb06f7334d7c14e69fd721a81a00ce3f8d529364 --- .../server/connectivity/NetworkMonitor.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java index 8b661e3a5d18c..e47292866d9c3 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.CellInfoGsm; 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 com.android.server.connectivity.NetworkAgentInfo; 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 @@ public class NetworkMonitor extends StateMachine { // 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);