merge in klp-release history after reset to klp-dev
diff --git a/src/main/java/com/squareup/okhttp/internal/http/HttpAuthenticator.java b/src/main/java/com/squareup/okhttp/internal/http/HttpAuthenticator.java
index 566431e..63f39e4 100644
--- a/src/main/java/com/squareup/okhttp/internal/http/HttpAuthenticator.java
+++ b/src/main/java/com/squareup/okhttp/internal/http/HttpAuthenticator.java
@@ -39,6 +39,10 @@
@Override public Credential authenticate(
Proxy proxy, URL url, List<Challenge> challenges) throws IOException {
for (Challenge challenge : challenges) {
+ if (!"Basic".equals(challenge.getScheme())) {
+ continue;
+ }
+
PasswordAuthentication auth = Authenticator.requestPasswordAuthentication(url.getHost(),
getConnectToInetAddress(proxy, url), url.getPort(), url.getProtocol(),
challenge.getRealm(), challenge.getScheme(), url, Authenticator.RequestorType.SERVER);
@@ -52,6 +56,10 @@
@Override public Credential authenticateProxy(
Proxy proxy, URL url, List<Challenge> challenges) throws IOException {
for (Challenge challenge : challenges) {
+ if (!"Basic".equals(challenge.getScheme())) {
+ continue;
+ }
+
InetSocketAddress proxyAddress = (InetSocketAddress) proxy.address();
PasswordAuthentication auth = Authenticator.requestPasswordAuthentication(
proxyAddress.getHostName(), getConnectToInetAddress(proxy, url), proxyAddress.getPort(),
diff --git a/src/main/java/com/squareup/okhttp/internal/http/HttpEngine.java b/src/main/java/com/squareup/okhttp/internal/http/HttpEngine.java
index 61e6ede..eae10ee 100644
--- a/src/main/java/com/squareup/okhttp/internal/http/HttpEngine.java
+++ b/src/main/java/com/squareup/okhttp/internal/http/HttpEngine.java
@@ -309,6 +309,7 @@
* pool. Subclasses use this hook to get a reference to the TLS data.
*/
protected void connected(Connection connection) {
+ policy.setSelectedProxy(connection.getRoute().getProxy());
connected = true;
}
diff --git a/src/main/java/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java b/src/main/java/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java
index 214f25a..5b5e91d 100644
--- a/src/main/java/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java
+++ b/src/main/java/com/squareup/okhttp/internal/http/HttpURLConnectionImpl.java
@@ -75,6 +75,7 @@
private int redirectionCount;
protected IOException httpEngineFailure;
protected HttpEngine httpEngine;
+ private Proxy selectedProxy;
public HttpURLConnectionImpl(URL url, OkHttpClient client) {
super(url);
@@ -345,6 +346,7 @@
if (readResponse) {
httpEngine.readResponse();
}
+
return true;
} catch (IOException e) {
if (handleFailure(e)) {
@@ -477,7 +479,19 @@
}
@Override public final boolean usingProxy() {
- Proxy proxy = client.getProxy();
+ if (selectedProxy != null) {
+ return isValidNonDirectProxy(selectedProxy);
+ }
+
+ // This behavior is a bit odd (but is probably justified by the
+ // oddness of the APIs involved). Before a connection is established,
+ // this method will return true only if this connection was explicitly
+ // opened with a Proxy. We don't attempt to query the ProxySelector
+ // at all.
+ return isValidNonDirectProxy(client.getProxy());
+ }
+
+ private static final boolean isValidNonDirectProxy(Proxy proxy) {
return proxy != null && proxy.type() != Proxy.Type.DIRECT;
}
@@ -564,4 +578,8 @@
this.fixedContentLength = contentLength;
super.fixedContentLength = (int) Math.min(contentLength, Integer.MAX_VALUE);
}
+
+ @Override public final void setSelectedProxy(Proxy proxy) {
+ this.selectedProxy = proxy;
+ }
}
diff --git a/src/main/java/com/squareup/okhttp/internal/http/Policy.java b/src/main/java/com/squareup/okhttp/internal/http/Policy.java
index fcdd5ce..0a29d4b 100644
--- a/src/main/java/com/squareup/okhttp/internal/http/Policy.java
+++ b/src/main/java/com/squareup/okhttp/internal/http/Policy.java
@@ -16,6 +16,7 @@
package com.squareup.okhttp.internal.http;
import java.net.HttpURLConnection;
+import java.net.Proxy;
import java.net.URL;
public interface Policy {
@@ -39,4 +40,10 @@
/** @see java.net.HttpURLConnection#setFixedLengthStreamingMode(int) */
long getFixedContentLength();
+
+ /**
+ * Sets the current proxy that this connection is using.
+ * @see java.net.HttpURLConnection#usingProxy
+ */
+ void setSelectedProxy(Proxy proxy);
}