diff options
author | Koushik Dutta <koush@koushikdutta.com> | 2014-12-28 13:46:40 -0800 |
---|---|---|
committer | Koushik Dutta <koush@koushikdutta.com> | 2014-12-28 13:46:40 -0800 |
commit | 936a6f9ee64c6b52ef01ec3cba2865fd3e1d5119 (patch) | |
tree | f3d4df7fa818dbda2238e9222e2e149288724a9f /AndroidAsync | |
parent | 7c50cd7b4bb80256ff86b50bf42c92ed6a842b7f (diff) | |
parent | cd3f26489d57a2d413971c0c2906842f90a5e1d2 (diff) | |
download | AndroidAsync-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.java | 18 |
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); } } }); |