From d65c0560aa1331c2f47a1dc6fa50211774477786 Mon Sep 17 00:00:00 2001 From: klzgrad Date: Sun, 9 Jun 2019 15:19:03 +0000 Subject: [PATCH] socket: Force tunneling for all sockets After the upstream large refactor, now only WebSocket sockets have tunneling via HTTP/1 proxies. "Raw" sockets in the normal socket pool don't have tunneling via HTTP/1 proxies, i.e. CONNECT headers are not sent, instead the raw payload is sent as-is to the HTTP/1 proxy, which makes it not work. For the reference the official code does this: - HTTP sockets via HTTP/1 proxies: normal pool, no tunneling. - HTTPS sockets via HTTP/1 proxies: normal pool, no tunneling but does its own proxy encapsulation. - WS sockets via HTTP/1 proxies: WS pool, tunneling. We want the normal pool because the WS pool has some extra restrictions but we also want tunneling to expose a client socket with the proxy built in. Therefore we can force tunneling for all sockets. This will always send CONNECT headers first and thus break HTTP client sockets via HTTP/1 proxies, but since we don't use this combination this is ok. --- src/net/socket/client_socket_pool_manager_impl.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/net/socket/client_socket_pool_manager_impl.cc b/src/net/socket/client_socket_pool_manager_impl.cc index d1835a50c1..e48974599f 100644 --- a/src/net/socket/client_socket_pool_manager_impl.cc +++ b/src/net/socket/client_socket_pool_manager_impl.cc @@ -82,8 +82,7 @@ ClientSocketPool* ClientSocketPoolManagerImpl::GetSocketPool( new_pool = std::make_unique( sockets_per_proxy_server, sockets_per_group, unused_idle_socket_timeout(pool_type_), proxy_server, - pool_type_ == HttpNetworkSession::WEBSOCKET_SOCKET_POOL, - &common_connect_job_params_); + /*force_tunnel=*/true, &common_connect_job_params_); } std::pair ret =