diff --git a/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnection.java b/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnection.java
index 0771bbf4c..ed8925db6 100644
--- a/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnection.java
+++ b/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnection.java
@@ -18,11 +18,11 @@
package com.squareup.okhttp.internal.net.http;
import com.squareup.okhttp.internal.Platform;
-import com.squareup.okhttp.internal.io.IoUtils;
import com.squareup.okhttp.internal.net.spdy.SpdyConnection;
import com.squareup.okhttp.internal.util.Libcore;
import com.squareup.okhttp.internal.util.Objects;
import java.io.BufferedInputStream;
+import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -46,9 +46,23 @@ import javax.net.ssl.SSLSocketFactory;
* the {@link Address} inner class.
*
*
Do not confuse this class with the misnamed {@code HttpURLConnection},
- * which isn't so much a connection as a single request/response pair.
+ * which isn't so much a connection as a single request/response exchange.
+ *
+ *
Modern TLS
+ * There are tradeoffs when selecting which options to include when negotiating
+ * a secure connection to a remote host. Newer TLS options are quite useful:
+ *
+ * - Server Name Indication (SNI) enables one IP address to negotiate secure
+ * connections for multiple domain names.
+ *
- Next Protocol Negotiation (NPN) enables the HTTPS port (443) to be used
+ * for both HTTP and SPDY transports.
+ *
+ * Unfortunately, older HTTPS servers refuse to connect when such options are
+ * presented. Rather than avoiding these options entirely, this class allows a
+ * connection to be attempted with modern options and then retried without them
+ * should the attempt fail.
*/
-final class HttpConnection {
+public final class HttpConnection implements Closeable {
private static final byte[] NPN_PROTOCOLS = new byte[] {
6, 's', 'p', 'd', 'y', '/', '2',
8, 'h', 't', 't', 'p', '/', '1', '.', '1',
@@ -60,46 +74,27 @@ final class HttpConnection {
'h', 't', 't', 'p', '/', '1', '.', '1',
};
- /** First try a TLS connection with various extensions enabled. */
- public static final int TLS_MODE_AGGRESSIVE = 1;
-
- /**
- * If that TLS connection fails (and its not unheard of that it will)
- * fall back to a basic SSLv3 connection.
- */
- public static final int TLS_MODE_COMPATIBLE = 0;
-
- /**
- * Unknown TLS mode.
- */
- public static final int TLS_MODE_NULL = -1;
-
- final Address address;
- final Proxy proxy;
- final InetSocketAddress inetSocketAddress;
- final int tlsMode;
+ private final Address address;
+ private final Proxy proxy;
+ private final InetSocketAddress inetSocketAddress;
+ private final boolean modernTls;
private Socket socket;
private InputStream in;
private OutputStream out;
private boolean recycled = false;
private SpdyConnection spdyConnection;
+ private int httpMinorVersion = 1; // Assume HTTP/1.1
- /**
- * The version this client will use. Either 0 for HTTP/1.0, or 1 for
- * HTTP/1.1. Upon receiving a non-HTTP/1.1 response, this client
- * automatically sets its version to HTTP/1.0.
- */
- int httpMinorVersion = 1; // Assume HTTP/1.1
-
- HttpConnection(Address address, Proxy proxy, InetSocketAddress inetSocketAddress, int tlsMode) {
+ public HttpConnection(Address address, Proxy proxy, InetSocketAddress inetSocketAddress,
+ boolean modernTls) {
if (address == null || proxy == null || inetSocketAddress == null) {
throw new IllegalArgumentException();
}
this.address = address;
this.proxy = proxy;
this.inetSocketAddress = inetSocketAddress;
- this.tlsMode = tlsMode;
+ this.modernTls = modernTls;
}
public void connect(int connectTimeout, int readTimeout, TunnelConfig tunnelConfig)
@@ -143,9 +138,9 @@ final class HttpConnection {
socket = address.sslSocketFactory.createSocket(
socket, address.uriHost, address.uriPort, true /* autoClose */);
SSLSocket sslSocket = (SSLSocket) socket;
- platform.makeTlsTolerant(sslSocket, address.uriHost, tlsMode == TLS_MODE_AGGRESSIVE);
+ platform.makeTlsTolerant(sslSocket, address.uriHost, modernTls);
- if (tlsMode == TLS_MODE_AGGRESSIVE) {
+ if (modernTls) {
platform.setNpnProtocols(sslSocket, NPN_PROTOCOLS);
}
@@ -161,7 +156,7 @@ final class HttpConnection {
in = sslSocket.getInputStream();
byte[] selectedProtocol;
- if (tlsMode == TLS_MODE_AGGRESSIVE
+ if (modernTls
&& (selectedProtocol = platform.getNpnSelectedProtocol(sslSocket)) != null) {
if (Arrays.equals(selectedProtocol, SPDY2)) {
spdyConnection = new SpdyConnection.Builder(true, in, out).build();
@@ -173,10 +168,8 @@ final class HttpConnection {
}
}
- public void closeSocketAndStreams() {
- IoUtils.closeQuietly(out);
- IoUtils.closeQuietly(in);
- IoUtils.closeQuietly(socket);
+ @Override public void close() throws IOException {
+ socket.close();
}
/**
@@ -196,6 +189,18 @@ final class HttpConnection {
return address;
}
+ public InetSocketAddress getSocketAddress() {
+ return inetSocketAddress;
+ }
+
+ public boolean isModernTls() {
+ return modernTls;
+ }
+
+ /**
+ * Returns the socket that this connection uses, or null if the connection
+ * is not currently connected.
+ */
public Socket getSocket() {
return socket;
}
@@ -225,7 +230,7 @@ final class HttpConnection {
/**
* Returns the transport appropriate for this connection.
*/
- public Transport newTransport(HttpEngine httpEngine) throws IOException {
+ public Object newTransport(HttpEngine httpEngine) throws IOException {
if (spdyConnection != null) {
return new SpdyTransport(httpEngine, spdyConnection);
} else {
@@ -241,6 +246,19 @@ final class HttpConnection {
return spdyConnection != null;
}
+ /**
+ * Returns the minor HTTP version that should be used for future requests on
+ * this connection. Either 0 for HTTP/1.0, or 1 for HTTP/1.1. The default
+ * value is 1 for new connections.
+ */
+ public int getHttpMinorVersion() {
+ return httpMinorVersion;
+ }
+
+ public void setHttpMinorVersion(int httpMinorVersion) {
+ this.httpMinorVersion = httpMinorVersion;
+ }
+
public static final class TunnelConfig {
private final URL url;
private final String host;
diff --git a/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnectionPool.java b/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnectionPool.java
index 08a0828a3..0bed1fd7c 100644
--- a/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnectionPool.java
+++ b/src/main/java/com/squareup/okhttp/internal/net/http/HttpConnectionPool.java
@@ -17,6 +17,7 @@
package com.squareup.okhttp.internal.net.http;
+import com.squareup.okhttp.internal.io.IoUtils;
import com.squareup.okhttp.internal.util.Libcore;
import java.net.SocketException;
import java.util.ArrayList;
@@ -72,8 +73,11 @@ final class HttpConnectionPool {
}
if (connection.isEligibleForRecycling()) {
// Since Socket is recycled, re-tag before using
+ // TODO: don't tag SPDY connections
Libcore.tagSocket(connection.getSocket());
return connection;
+ } else {
+ // TODO: is the connection leaked here?
}
}
}
@@ -94,7 +98,7 @@ final class HttpConnectionPool {
} catch (SocketException e) {
// When unable to remove tagging, skip recycling and close
Libcore.logW("Unable to untagSocket(): " + e);
- connection.closeSocketAndStreams();
+ IoUtils.closeQuietly(connection);
return;
}
@@ -115,7 +119,7 @@ final class HttpConnectionPool {
}
// don't close streams while holding a lock!
- connection.closeSocketAndStreams();
+ IoUtils.closeQuietly(connection);
}
/**
diff --git a/src/main/java/com/squareup/okhttp/internal/net/http/HttpEngine.java b/src/main/java/com/squareup/okhttp/internal/net/http/HttpEngine.java
index a4809fffa..19bdb29fb 100644
--- a/src/main/java/com/squareup/okhttp/internal/net/http/HttpEngine.java
+++ b/src/main/java/com/squareup/okhttp/internal/net/http/HttpEngine.java
@@ -261,7 +261,7 @@ public class HttpEngine {
throw new IllegalStateException();
}
- transport = connection.newTransport(this);
+ transport = (Transport) connection.newTransport(this);
if (hasRequestBody() && requestBodyOut == null) {
// Create a request body if we don't have one already. We'll already
@@ -429,7 +429,7 @@ public class HttpEngine {
connectionReleased = true;
if (!reusable || !transport.makeReusable(requestBodyOut, responseTransferIn)) {
- connection.closeSocketAndStreams();
+ IoUtils.closeQuietly(connection);
connection = null;
} else if (automaticallyReleaseConnectionToPool) {
HttpConnectionPool.INSTANCE.recycle(connection);
@@ -500,7 +500,7 @@ public class HttpEngine {
}
// TODO: this shouldn't be set for SPDY (it's ignored)
- if ((connection == null || connection.httpMinorVersion != 0)
+ if ((connection == null || connection.getHttpMinorVersion() != 0)
&& requestHeaders.getConnection() == null) {
requestHeaders.setConnection("Keep-Alive");
}
@@ -533,7 +533,7 @@ public class HttpEngine {
* it needs to be set even if the transport is SPDY.
*/
String getRequestLine() {
- String protocol = (connection == null || connection.httpMinorVersion != 0)
+ String protocol = (connection == null || connection.getHttpMinorVersion() != 0)
? "HTTP/1.1"
: "HTTP/1.0";
return method + " " + requestString() + " " + protocol;
diff --git a/src/main/java/com/squareup/okhttp/internal/net/http/HttpTransport.java b/src/main/java/com/squareup/okhttp/internal/net/http/HttpTransport.java
index 0d999d852..a1bbd48ad 100644
--- a/src/main/java/com/squareup/okhttp/internal/net/http/HttpTransport.java
+++ b/src/main/java/com/squareup/okhttp/internal/net/http/HttpTransport.java
@@ -68,7 +68,7 @@ final class HttpTransport implements Transport {
boolean chunked = httpEngine.requestHeaders.isChunked();
if (!chunked
&& httpEngine.policy.getChunkLength() > 0
- && httpEngine.connection.httpMinorVersion != 0) {
+ && httpEngine.connection.getHttpMinorVersion() != 0) {
httpEngine.requestHeaders.setChunked();
chunked = true;
}
@@ -144,7 +144,7 @@ final class HttpTransport implements Transport {
@Override public ResponseHeaders readResponseHeaders() throws IOException {
RawHeaders headers = RawHeaders.fromBytes(socketIn);
- httpEngine.connection.httpMinorVersion = headers.getHttpMinorVersion();
+ httpEngine.connection.setHttpMinorVersion(headers.getHttpMinorVersion());
receiveHeaders(headers);
return new ResponseHeaders(httpEngine.uri, headers);
}
diff --git a/src/main/java/com/squareup/okhttp/internal/net/http/RouteSelector.java b/src/main/java/com/squareup/okhttp/internal/net/http/RouteSelector.java
index 3b7bf463b..7af105273 100644
--- a/src/main/java/com/squareup/okhttp/internal/net/http/RouteSelector.java
+++ b/src/main/java/com/squareup/okhttp/internal/net/http/RouteSelector.java
@@ -16,9 +16,6 @@
package com.squareup.okhttp.internal.net.http;
import com.squareup.okhttp.internal.net.Dns;
-import static com.squareup.okhttp.internal.net.http.HttpConnection.TLS_MODE_AGGRESSIVE;
-import static com.squareup.okhttp.internal.net.http.HttpConnection.TLS_MODE_COMPATIBLE;
-import static com.squareup.okhttp.internal.net.http.HttpConnection.TLS_MODE_NULL;
import com.squareup.okhttp.internal.util.Libcore;
import java.io.IOException;
import java.net.InetAddress;
@@ -38,6 +35,23 @@ import java.util.NoSuchElementException;
* recycled.
*/
public final class RouteSelector {
+ /**
+ * A TLS connection with useful extensions enabled. This mode supports more
+ * features, but is less likely to be compatible with older HTTP servers.
+ */
+ private static final int TLS_MODE_MODERN = 1;
+
+ /**
+ * A fallback connection with only basic functionality. Currently this uses
+ * SSL 3.0.
+ */
+ private static final int TLS_MODE_COMPATIBLE = 0;
+
+ /**
+ * Unknown TLS mode.
+ */
+ private static final int TLS_MODE_NULL = -1;
+
private final HttpConnection.Address address;
private final URI uri;
private final ProxySelector proxySelector;
@@ -102,9 +116,9 @@ public final class RouteSelector {
lastInetSocketAddress = nextInetSocketAddress();
resetNextTlsMode();
}
- int tlsMode = nextTlsMode();
+ boolean modernTls = nextTlsMode() == TLS_MODE_MODERN;
- return new HttpConnection(address, lastProxy, lastInetSocketAddress, tlsMode);
+ return new HttpConnection(address, lastProxy, lastInetSocketAddress, modernTls);
}
/**
@@ -112,9 +126,9 @@ public final class RouteSelector {
* failure on a connection returned by this route selector.
*/
public void connectFailed(HttpConnection connection, IOException failure) {
- if (connection.proxy.type() != Proxy.Type.DIRECT && proxySelector != null) {
+ if (connection.getProxy().type() != Proxy.Type.DIRECT && proxySelector != null) {
// Tell the proxy selector when we fail to connect on a fresh connection.
- proxySelector.connectFailed(uri, connection.proxy.address(), failure);
+ proxySelector.connectFailed(uri, connection.getProxy().address(), failure);
}
}
@@ -203,7 +217,7 @@ public final class RouteSelector {
/** Resets {@link #nextTlsMode} to the first option. */
private void resetNextTlsMode() {
nextTlsMode = (address.sslSocketFactory != null)
- ? TLS_MODE_AGGRESSIVE
+ ? TLS_MODE_MODERN
: TLS_MODE_COMPATIBLE;
}
@@ -214,9 +228,9 @@ public final class RouteSelector {
/** Returns the next TLS mode to try. */
private int nextTlsMode() {
- if (nextTlsMode == TLS_MODE_AGGRESSIVE) {
+ if (nextTlsMode == TLS_MODE_MODERN) {
nextTlsMode = TLS_MODE_COMPATIBLE;
- return TLS_MODE_AGGRESSIVE;
+ return TLS_MODE_MODERN;
} else if (nextTlsMode == TLS_MODE_COMPATIBLE) {
nextTlsMode = TLS_MODE_NULL; // So that hasNextTlsMode() returns false.
return TLS_MODE_COMPATIBLE;
diff --git a/src/main/java/com/squareup/okhttp/internal/net/http/SpdyTransport.java b/src/main/java/com/squareup/okhttp/internal/net/http/SpdyTransport.java
index 1cad6be62..f0fc12388 100644
--- a/src/main/java/com/squareup/okhttp/internal/net/http/SpdyTransport.java
+++ b/src/main/java/com/squareup/okhttp/internal/net/http/SpdyTransport.java
@@ -49,7 +49,7 @@ final class SpdyTransport implements Transport {
return;
}
RawHeaders requestHeaders = httpEngine.requestHeaders.getHeaders();
- String version = httpEngine.connection.httpMinorVersion == 1 ? "HTTP/1.1" : "HTTP/1.0";
+ String version = httpEngine.connection.getHttpMinorVersion() == 1 ? "HTTP/1.1" : "HTTP/1.0";
requestHeaders.addSpdyRequestHeaders(httpEngine.method, httpEngine.uri.getScheme(),
HttpEngine.requestPath(httpEngine.policy.getURL()), version);
boolean hasRequestBody = httpEngine.hasRequestBody();
diff --git a/src/test/java/com/squareup/okhttp/internal/net/http/RouteSelectorTest.java b/src/test/java/com/squareup/okhttp/internal/net/http/RouteSelectorTest.java
index e0514621e..0a9d50ea1 100644
--- a/src/test/java/com/squareup/okhttp/internal/net/http/RouteSelectorTest.java
+++ b/src/test/java/com/squareup/okhttp/internal/net/http/RouteSelectorTest.java
@@ -16,8 +16,6 @@
package com.squareup.okhttp.internal.net.http;
import com.squareup.okhttp.internal.net.Dns;
-import static com.squareup.okhttp.internal.net.http.HttpConnection.TLS_MODE_AGGRESSIVE;
-import static com.squareup.okhttp.internal.net.http.HttpConnection.TLS_MODE_COMPATIBLE;
import com.squareup.okhttp.internal.net.ssl.SslContextBuilder;
import java.io.IOException;
import java.net.InetAddress;
@@ -74,7 +72,7 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 1);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
dns.assertRequests(uriHost);
assertFalse(routeSelector.hasNext());
@@ -92,9 +90,9 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 2);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[0], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[0], proxyAPort, false);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[1], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[1], proxyAPort, false);
assertFalse(routeSelector.hasNext());
dns.assertRequests(proxyAHost);
@@ -108,9 +106,9 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 2);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[1], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[1], uriPort, false);
assertFalse(routeSelector.hasNext());
dns.assertRequests(uri.getHost());
@@ -127,7 +125,7 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 1);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
dns.assertRequests(uriHost);
assertFalse(routeSelector.hasNext());
@@ -140,9 +138,9 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 2);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[1], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[1], uriPort, false);
assertFalse(routeSelector.hasNext());
dns.assertRequests(uri.getHost());
@@ -161,23 +159,23 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 2);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[0], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[0], proxyAPort, false);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[1], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[1], proxyAPort, false);
dns.assertRequests(proxyAHost);
// Next try the IP address of the second proxy.
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(254, 1);
assertConnection(routeSelector.next(),
- address, proxyB, dns.inetAddresses[0], proxyBPort, TLS_MODE_COMPATIBLE);
+ address, proxyB, dns.inetAddresses[0], proxyBPort, false);
dns.assertRequests(proxyBHost);
// Finally try the only IP address of the origin server.
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(253, 1);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
dns.assertRequests(uriHost);
assertFalse(routeSelector.hasNext());
@@ -194,7 +192,7 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 1);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
dns.assertRequests(uriHost);
assertFalse(routeSelector.hasNext());
@@ -212,7 +210,7 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 1);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[0], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[0], proxyAPort, false);
dns.assertRequests(proxyAHost);
assertTrue(routeSelector.hasNext());
@@ -227,13 +225,13 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 1);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[0], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[0], proxyAPort, false);
dns.assertRequests(proxyAHost);
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(254, 1);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
dns.assertRequests(uriHost);
assertFalse(routeSelector.hasNext());
@@ -247,12 +245,12 @@ public final class RouteSelectorTest extends TestCase {
assertTrue(routeSelector.hasNext());
dns.inetAddresses = makeFakeAddresses(255, 1);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_AGGRESSIVE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, true);
dns.assertRequests(uriHost);
assertTrue(routeSelector.hasNext());
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
dns.assertRequests(); // No more DNS requests since the previous!
assertFalse(routeSelector.hasNext());
@@ -268,49 +266,49 @@ public final class RouteSelectorTest extends TestCase {
// Proxy A
dns.inetAddresses = makeFakeAddresses(255, 2);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[0], proxyAPort, TLS_MODE_AGGRESSIVE);
+ address, proxyA, dns.inetAddresses[0], proxyAPort, true);
dns.assertRequests(proxyAHost);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[0], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[0], proxyAPort, false);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[1], proxyAPort, TLS_MODE_AGGRESSIVE);
+ address, proxyA, dns.inetAddresses[1], proxyAPort, true);
assertConnection(routeSelector.next(),
- address, proxyA, dns.inetAddresses[1], proxyAPort, TLS_MODE_COMPATIBLE);
+ address, proxyA, dns.inetAddresses[1], proxyAPort, false);
// Proxy B
dns.inetAddresses = makeFakeAddresses(254, 2);
assertConnection(routeSelector.next(),
- address, proxyB, dns.inetAddresses[0], proxyBPort, TLS_MODE_AGGRESSIVE);
+ address, proxyB, dns.inetAddresses[0], proxyBPort, true);
dns.assertRequests(proxyBHost);
assertConnection(routeSelector.next(),
- address, proxyB, dns.inetAddresses[0], proxyBPort, TLS_MODE_COMPATIBLE);
+ address, proxyB, dns.inetAddresses[0], proxyBPort, false);
assertConnection(routeSelector.next(),
- address, proxyB, dns.inetAddresses[1], proxyBPort, TLS_MODE_AGGRESSIVE);
+ address, proxyB, dns.inetAddresses[1], proxyBPort, true);
assertConnection(routeSelector.next(),
- address, proxyB, dns.inetAddresses[1], proxyBPort, TLS_MODE_COMPATIBLE);
+ address, proxyB, dns.inetAddresses[1], proxyBPort, false);
// Origin
dns.inetAddresses = makeFakeAddresses(253, 2);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_AGGRESSIVE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, true);
dns.assertRequests(uriHost);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[0], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[0], uriPort, false);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[1], uriPort, TLS_MODE_AGGRESSIVE);
+ address, NO_PROXY, dns.inetAddresses[1], uriPort, true);
assertConnection(routeSelector.next(),
- address, NO_PROXY, dns.inetAddresses[1], uriPort, TLS_MODE_COMPATIBLE);
+ address, NO_PROXY, dns.inetAddresses[1], uriPort, false);
assertFalse(routeSelector.hasNext());
}
private void assertConnection(HttpConnection connection, HttpConnection.Address address,
- Proxy proxy, InetAddress socketAddress, int socketPort, int tlsMode) {
- assertEquals(address, connection.address);
- assertEquals(proxy, connection.proxy);
- assertEquals(socketAddress, connection.inetSocketAddress.getAddress());
- assertEquals(socketPort, connection.inetSocketAddress.getPort());
- assertEquals(tlsMode, connection.tlsMode);
+ Proxy proxy, InetAddress socketAddress, int socketPort, boolean modernTls) {
+ assertEquals(address, connection.getAddress());
+ assertEquals(proxy, connection.getProxy());
+ assertEquals(socketAddress, connection.getSocketAddress().getAddress());
+ assertEquals(socketPort, connection.getSocketAddress().getPort());
+ assertEquals(modernTls, connection.isModernTls());
}
private static InetAddress[] makeFakeAddresses(int prefix, int count) {