private boolean establishConnectTunnel(final ProxyServer proxy,
final HttpTransactionContext httpCtx, final Uri uri,
final FilterChainContext ctx) throws IOException {
final Connection connection = ctx.getConnection();
final HttpRequestPacket requestPacket = HttpRequestPacket.builder()
.protocol(Protocol.HTTP_1_0)
.method(Method.CONNECT)
.uri(AsyncHttpProviderUtils.getAuthority(uri))
.build();
setupKeepAlive(requestPacket, connection);
httpCtx.establishingTunnel = true;
final Request request = httpCtx.getAhcRequest();
addHostHeaderIfNeeded(request, uri, requestPacket);
addServiceHeaders(requestPacket);
final Realm realm = getRealm(request);
addAuthorizationHeader(request, requestPacket, realm, uri, proxy, false);
addProxyHeaders(request, requestPacket, realm, proxy, false, true);
ctx.notifyDownstream(new SSLSwitchingEvent(connection, false));
return sendRequest(httpCtx, ctx, requestPacket, null);
}