diff options
| author | Neil Fuller <nfuller@google.com> | 2014-09-03 17:01:55 +0100 |
|---|---|---|
| committer | Neil Fuller <nfuller@google.com> | 2014-09-17 17:05:31 +0100 |
| commit | 54a6fb9990ddb2ab66d4afc79541a0801b1aaac9 (patch) | |
| tree | 0dbd5e342499995e93d1015427b596afa0b4ef8b /android | |
| parent | 0918fed942d08acff9a6fa0b6800c483d66fdf11 (diff) | |
| download | platform_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.java | 23 | ||||
| -rw-r--r-- | android/main/java/com/squareup/okhttp/HttpsHandler.java | 8 |
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; } } |
