aboutsummaryrefslogtreecommitdiffstats
path: root/AndroidAsync
diff options
context:
space:
mode:
authorKoushik Dutta <koush@koushikdutta.com>2014-12-28 13:46:40 -0800
committerKoushik Dutta <koush@koushikdutta.com>2014-12-28 13:46:40 -0800
commit936a6f9ee64c6b52ef01ec3cba2865fd3e1d5119 (patch)
treef3d4df7fa818dbda2238e9222e2e149288724a9f /AndroidAsync
parent7c50cd7b4bb80256ff86b50bf42c92ed6a842b7f (diff)
parentcd3f26489d57a2d413971c0c2906842f90a5e1d2 (diff)
downloadAndroidAsync-936a6f9ee64c6b52ef01ec3cba2865fd3e1d5119.tar.gz
AndroidAsync-936a6f9ee64c6b52ef01ec3cba2865fd3e1d5119.tar.bz2
AndroidAsync-936a6f9ee64c6b52ef01ec3cba2865fd3e1d5119.zip
Merge pull request #297 from zbsz/tls-proxy-fix
Fix SSL proxy tunnelling.
Diffstat (limited to 'AndroidAsync')
-rw-r--r--AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java18
1 files changed, 7 insertions, 11 deletions
diff --git a/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java b/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java
index 0a0199a..9ba7a1c 100644
--- a/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java
+++ b/AndroidAsync/src/com/koushikdutta/async/http/AsyncSSLSocketMiddleware.java
@@ -101,7 +101,8 @@ public class AsyncSSLSocketMiddleware extends AsyncSocketMiddleware {
// this SSL connection is proxied, must issue a CONNECT request to the proxy server
// http://stackoverflow.com/a/6594880/704837
- String connect = String.format("CONNECT %s:%s HTTP/1.1\r\n\r\n", uri.getHost(), port);
+ // some proxies also require 'Host' header, it should be safe to provide it every time
+ String connect = String.format("CONNECT %s:%s HTTP/1.1\r\nHost: %s\r\n\r\n", uri.getHost(), port, uri.getHost());
Util.writeAll(socket, connect.getBytes(), new CompletedCallback() {
@Override
public void onCompleted(Exception ex) {
@@ -116,22 +117,17 @@ public class AsyncSSLSocketMiddleware extends AsyncSocketMiddleware {
@Override
public void onStringAvailable(String s) {
if (statusLine == null) {
- statusLine = s;
- if (statusLine.length() > 128 || !statusLine.contains("200")) {
+ statusLine = s.trim();
+ if (!statusLine.matches("HTTP/1.\\d 2\\d\\d .*")) { // connect response is allowed to have any 2xx status code
socket.setDataCallback(null);
socket.setEndCallback(null);
- callback.onConnectCompleted(new IOException("non 200 status line"), socket);
+ callback.onConnectCompleted(new IOException("non 2xx status line"), socket);
}
}
- else {
+ else if (TextUtils.isEmpty(s.trim())) { // skip all headers, complete handshake once empty line is received
socket.setDataCallback(null);
socket.setEndCallback(null);
- if (TextUtils.isEmpty(s.trim())) {
- tryHandshake(socket, data, uri, port, callback);
- }
- else {
- callback.onConnectCompleted(new IOException("unknown second status line"), socket);
- }
+ tryHandshake(socket, data, uri, port, callback);
}
}
});