aboutsummaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorNeil Fuller <nfuller@google.com>2014-09-03 17:01:55 +0100
committerNeil Fuller <nfuller@google.com>2014-09-17 17:05:31 +0100
commit54a6fb9990ddb2ab66d4afc79541a0801b1aaac9 (patch)
tree0dbd5e342499995e93d1015427b596afa0b4ef8b /android
parent0918fed942d08acff9a6fa0b6800c483d66fdf11 (diff)
downloadplatform_external_okhttp-54a6fb9990ddb2ab66d4afc79541a0801b1aaac9.tar.gz
platform_external_okhttp-54a6fb9990ddb2ab66d4afc79541a0801b1aaac9.tar.bz2
platform_external_okhttp-54a6fb9990ddb2ab66d4afc79541a0801b1aaac9.zip
external/okhttp changes to support connection pool flushing
When the preferred network / default network for a device changes we must flush any pooled connections. This change has a known issue which will be fixed in a later commit: Any connections that are in use when the pool is cleared can be put (back) into the pool after evictAll(). This means those connections will continue to reference the old preferred / default network. Bug: 17314604 (cherry-picked from commit 84f674f3abba1083e1efd94520d516036a3f0b6a) Change-Id: Ib5dbeb5a90aff68da3dd312f924c2bdb44f6f213
Diffstat (limited to 'android')
-rw-r--r--android/main/java/com/squareup/okhttp/HttpHandler.java23
-rw-r--r--android/main/java/com/squareup/okhttp/HttpsHandler.java8
2 files changed, 25 insertions, 6 deletions
diff --git a/android/main/java/com/squareup/okhttp/HttpHandler.java b/android/main/java/com/squareup/okhttp/HttpHandler.java
index 3a02848..3b21c33 100644
--- a/android/main/java/com/squareup/okhttp/HttpHandler.java
+++ b/android/main/java/com/squareup/okhttp/HttpHandler.java
@@ -23,8 +23,12 @@ import java.net.ResponseCache;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
+import libcore.net.event.NetworkEventDispatcher;
+import libcore.net.event.NetworkEventListener;
public class HttpHandler extends URLStreamHandler {
+ private static ConnectionPool connectionPool;
+
@Override protected URLConnection openConnection(URL url) throws IOException {
return newOkHttpClient(null /* proxy */).open(url);
}
@@ -60,6 +64,25 @@ public class HttpHandler extends URLStreamHandler {
if (responseCache != null) {
client.setResponseCache(responseCache);
}
+
+ client.setConnectionPool(getConnectionPool());
return client;
}
+
+ private static synchronized ConnectionPool getConnectionPool() {
+ if (connectionPool == null) {
+ // We assume the default com.android.okhttp.ConnectionPool instance is only used by
+ // us.
+ final ConnectionPool defaultInstance = ConnectionPool.getDefault();
+ NetworkEventDispatcher.getInstance().addListener(new NetworkEventListener() {
+ @Override
+ public void onNetworkConfigurationChanged() {
+ defaultInstance.evictAll();
+ }
+ });
+ connectionPool = defaultInstance;
+ }
+ return connectionPool;
+ }
+
}
diff --git a/android/main/java/com/squareup/okhttp/HttpsHandler.java b/android/main/java/com/squareup/okhttp/HttpsHandler.java
index 670dcc1..16a6ddd 100644
--- a/android/main/java/com/squareup/okhttp/HttpsHandler.java
+++ b/android/main/java/com/squareup/okhttp/HttpsHandler.java
@@ -43,7 +43,9 @@ public final class HttpsHandler extends HttpHandler {
* Android.
*/
public static OkHttpClient createHttpsOkHttpClient(Proxy proxy) {
+ // The HTTPS OkHttpClient is an HTTP OkHttpClient with extra configuration.
OkHttpClient client = HttpHandler.createHttpOkHttpClient(proxy);
+
client.setProtocols(ENABLED_PROTOCOLS);
HostnameVerifier verifier = HttpsURLConnection.getDefaultHostnameVerifier();
@@ -57,12 +59,6 @@ public final class HttpsHandler extends HttpHandler {
// See https://github.com/square/okhttp/issues/184 for details.
client.setSslSocketFactory(HttpsURLConnection.getDefaultSSLSocketFactory());
- // Explicitly set the response cache.
- ResponseCache responseCache = ResponseCache.getDefault();
- if (responseCache != null) {
- client.setResponseCache(responseCache);
- }
-
return client;
}
}