From 0ae1c14007738055e86b83960936ff0a0aab26f1 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 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/net/socket/client_socket_pool_manager_impl.cc b/src/net/socket/client_socket_pool_manager_impl.cc index 4b4d334fc7..f84a6981e1 100644 --- a/src/net/socket/client_socket_pool_manager_impl.cc +++ b/src/net/socket/client_socket_pool_manager_impl.cc @@ -85,7 +85,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, + true /* force_tunnel */, &common_connect_job_params_, ssl_config_service_); }