summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorPaul Jensen <pauljensen@google.com>2015-02-03 21:11:51 +0000
committerandroid-build-merger <android-build-merger@google.com>2015-02-03 21:11:51 +0000
commitf1b78d046965f91c2e03d541cba4c91ea707111a (patch)
tree7958acef77939c1fe142c359958e1ffa2b7dbd46 /services
parentb6b526eaafdcc39e9d55a82f61f1e03c4a3487c3 (diff)
parent39ae0547ca5a1e7cfe24a945b2f8a910e09b7f3c (diff)
downloadframeworks_base-f1b78d046965f91c2e03d541cba4c91ea707111a.zip
frameworks_base-f1b78d046965f91c2e03d541cba4c91ea707111a.tar.gz
frameworks_base-f1b78d046965f91c2e03d541cba4c91ea707111a.tar.bz2
Merge "Facilitate network validation on networks with a per-network PAC." into lmp-mr1-dev
automerge: 39ae054 * commit '39ae0547ca5a1e7cfe24a945b2f8a910e09b7f3c': Facilitate network validation on networks with a per-network PAC.
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/connectivity/NetworkMonitor.java32
1 files changed, 31 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/connectivity/NetworkMonitor.java b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
index f900d0d..87f78c1 100644
--- a/services/core/java/com/android/server/connectivity/NetworkMonitor.java
+++ b/services/core/java/com/android/server/connectivity/NetworkMonitor.java
@@ -28,6 +28,7 @@ import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.net.NetworkRequest;
+import android.net.ProxyInfo;
import android.net.TrafficStats;
import android.net.Uri;
import android.net.wifi.WifiInfo;
@@ -656,12 +657,36 @@ public class NetworkMonitor extends StateMachine {
int httpResponseCode = 599;
try {
URL url = new URL("http", mServer, "/generate_204");
+ // On networks with a PAC instead of fetching a URL that should result in a 204
+ // reponse, we instead simply fetch the PAC script. This is done for a few reasons:
+ // 1. At present our PAC code does not yet handle multiple PACs on multiple networks
+ // until something like https://android-review.googlesource.com/#/c/115180/ lands.
+ // Network.openConnection() will ignore network-specific PACs and instead fetch
+ // using NO_PROXY. If a PAC is in place, the only fetch we know will succeed with
+ // NO_PROXY is the fetch of the PAC itself.
+ // 2. To proxy the generate_204 fetch through a PAC would require a number of things
+ // happen before the fetch can commence, namely:
+ // a) the PAC script be fetched
+ // b) a PAC script resolver service be fired up and resolve mServer
+ // Network validation could be delayed until these prerequisities are satisifed or
+ // could simply be left to race them. Neither is an optimal solution.
+ // 3. PAC scripts are sometimes used to block or restrict Internet access and may in
+ // 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;
+ }
+ }
if (DBG) {
log("Checking " + url.toString() + " on " +
mNetworkAgentInfo.networkInfo.getExtraInfo());
}
urlConnection = (HttpURLConnection) mNetworkAgentInfo.network.openConnection(url);
- urlConnection.setInstanceFollowRedirects(false);
+ urlConnection.setInstanceFollowRedirects(fetchPac);
urlConnection.setConnectTimeout(SOCKET_TIMEOUT_MS);
urlConnection.setReadTimeout(SOCKET_TIMEOUT_MS);
urlConnection.setUseCaches(false);
@@ -695,6 +720,11 @@ public class NetworkMonitor extends StateMachine {
httpResponseCode = 204;
}
+ if (httpResponseCode == 200 && fetchPac) {
+ if (DBG) log("PAC fetch 200 response interpreted as 204 response.");
+ httpResponseCode = 204;
+ }
+
sendNetworkConditionsBroadcast(true /* response received */,
httpResponseCode != 204 /* isCaptivePortal */,
requestTimestamp, responseTimestamp);