Changes associated with an OkHttp upgrade

Change-Id: I2a4db602aa7ffdef886e0f1a955715a2551a87a5
This commit is contained in:
Neil Fuller
2015-01-12 16:49:06 +00:00
parent 0620227e62
commit c30362d9cf

View File

@@ -16,7 +16,6 @@
package android.net; package android.net;
import android.net.NetworkUtils;
import android.os.Parcelable; import android.os.Parcelable;
import android.os.Parcel; import android.os.Parcel;
import android.system.ErrnoException; import android.system.ErrnoException;
@@ -31,15 +30,14 @@ import java.net.SocketException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.net.URL; import java.net.URL;
import java.net.URLConnection; import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.util.concurrent.atomic.AtomicReference;
import javax.net.SocketFactory; import javax.net.SocketFactory;
import com.android.okhttp.ConnectionPool; import com.android.okhttp.ConnectionPool;
import com.android.okhttp.HostResolver;
import com.android.okhttp.HttpHandler; import com.android.okhttp.HttpHandler;
import com.android.okhttp.HttpsHandler; import com.android.okhttp.HttpsHandler;
import com.android.okhttp.OkHttpClient; import com.android.okhttp.OkHttpClient;
import com.android.okhttp.OkUrlFactory;
import com.android.okhttp.internal.Internal;
/** /**
* Identifies a {@code Network}. This is supplied to applications via * Identifies a {@code Network}. This is supplied to applications via
@@ -60,10 +58,10 @@ public class Network implements Parcelable {
// Objects used to perform per-network operations such as getSocketFactory // Objects used to perform per-network operations such as getSocketFactory
// and openConnection, and a lock to protect access to them. // and openConnection, and a lock to protect access to them.
private volatile NetworkBoundSocketFactory mNetworkBoundSocketFactory = null; private volatile NetworkBoundSocketFactory mNetworkBoundSocketFactory = null;
// mLock should be used to control write access to mConnectionPool and mHostResolver. // mLock should be used to control write access to mConnectionPool and mNetwork.
// maybeInitHttpClient() must be called prior to reading either variable. // maybeInitHttpClient() must be called prior to reading either variable.
private volatile ConnectionPool mConnectionPool = null; private volatile ConnectionPool mConnectionPool = null;
private volatile HostResolver mHostResolver = null; private volatile com.android.okhttp.internal.Network mNetwork = null;
private Object mLock = new Object(); private Object mLock = new Object();
// Default connection pool values. These are evaluated at startup, just // Default connection pool values. These are evaluated at startup, just
@@ -217,10 +215,10 @@ public class Network implements Parcelable {
// out) ConnectionPools. // out) ConnectionPools.
private void maybeInitHttpClient() { private void maybeInitHttpClient() {
synchronized (mLock) { synchronized (mLock) {
if (mHostResolver == null) { if (mNetwork == null) {
mHostResolver = new HostResolver() { mNetwork = new com.android.okhttp.internal.Network() {
@Override @Override
public InetAddress[] getAllByName(String host) throws UnknownHostException { public InetAddress[] resolveInetAddresses(String host) throws UnknownHostException {
return Network.this.getAllByName(host); return Network.this.getAllByName(host);
} }
}; };
@@ -244,23 +242,26 @@ public class Network implements Parcelable {
public URLConnection openConnection(URL url) throws IOException { public URLConnection openConnection(URL url) throws IOException {
maybeInitHttpClient(); maybeInitHttpClient();
String protocol = url.getProtocol(); String protocol = url.getProtocol();
OkHttpClient client; OkUrlFactory okUrlFactory;
// TODO: HttpHandler creates OkHttpClients that share the default ResponseCache. // TODO: HttpHandler creates OkUrlFactory instances that share the default ResponseCache.
// Could this cause unexpected behavior? // Could this cause unexpected behavior?
// TODO: Should the network's proxy be specified? // TODO: Should the network's proxy be specified?
if (protocol.equals("http")) { if (protocol.equals("http")) {
client = HttpHandler.createHttpOkHttpClient(null /* proxy */); okUrlFactory = HttpHandler.createHttpOkUrlFactory(null /* proxy */);
} else if (protocol.equals("https")) { } else if (protocol.equals("https")) {
client = HttpsHandler.createHttpsOkHttpClient(null /* proxy */); okUrlFactory = HttpsHandler.createHttpsOkUrlFactory(null /* proxy */);
} else { } else {
// OkHttpClient only supports HTTP and HTTPS and returns a null URLStreamHandler if // OkHttp only supports HTTP and HTTPS and returns a null URLStreamHandler if
// passed another protocol. // passed another protocol.
throw new MalformedURLException("Invalid URL or unrecognized protocol " + protocol); throw new MalformedURLException("Invalid URL or unrecognized protocol " + protocol);
} }
return client.setSocketFactory(getSocketFactory()) OkHttpClient client = okUrlFactory.client();
.setHostResolver(mHostResolver) client.setSocketFactory(getSocketFactory()).setConnectionPool(mConnectionPool);
.setConnectionPool(mConnectionPool)
.open(url); // Use internal APIs to change the Network.
Internal.instance.setNetwork(client, mNetwork);
return okUrlFactory.open(url);
} }
/** /**