| Index: net/http/http_proxy_client_socket.cc
|
| ===================================================================
|
| --- net/http/http_proxy_client_socket.cc (revision 60753)
|
| +++ net/http/http_proxy_client_socket.cc (working copy)
|
| @@ -14,13 +14,42 @@
|
| #include "net/base/net_util.h"
|
| #include "net/http/http_net_log_params.h"
|
| #include "net/http/http_network_session.h"
|
| -#include "net/http/http_proxy_utils.h"
|
| #include "net/http/http_request_info.h"
|
| #include "net/http/http_stream_parser.h"
|
| #include "net/socket/client_socket_handle.h"
|
|
|
| namespace net {
|
|
|
| +namespace {
|
| +
|
| +// The HTTP CONNECT method for establishing a tunnel connection is documented
|
| +// in draft-luotonen-web-proxy-tunneling-01.txt and RFC 2817, Sections 5.2 and
|
| +// 5.3.
|
| +void BuildTunnelRequest(const HttpRequestInfo* request_info,
|
| + const HttpRequestHeaders& authorization_headers,
|
| + const HostPortPair& endpoint,
|
| + std::string* request_line,
|
| + HttpRequestHeaders* request_headers) {
|
| + // RFC 2616 Section 9 says the Host request-header field MUST accompany all
|
| + // HTTP/1.1 requests. Add "Proxy-Connection: keep-alive" for compat with
|
| + // HTTP/1.0 proxies such as Squid (required for NTLM authentication).
|
| + *request_line = base::StringPrintf(
|
| + "CONNECT %s HTTP/1.1\r\n", endpoint.ToString().c_str());
|
| + request_headers->SetHeader(HttpRequestHeaders::kHost,
|
| + GetHostAndOptionalPort(request_info->url));
|
| + request_headers->SetHeader(HttpRequestHeaders::kProxyConnection,
|
| + "keep-alive");
|
| +
|
| + std::string user_agent;
|
| + if (request_info->extra_headers.GetHeader(HttpRequestHeaders::kUserAgent,
|
| + &user_agent))
|
| + request_headers->SetHeader(HttpRequestHeaders::kUserAgent, user_agent);
|
| +
|
| + request_headers->MergeFrom(authorization_headers);
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| HttpProxyClientSocket::HttpProxyClientSocket(
|
| ClientSocketHandle* transport_socket,
|
| const GURL& request_url,
|
| @@ -329,7 +358,7 @@
|
| auth_->AddAuthorizationHeader(&authorization_headers);
|
| std::string request_line;
|
| HttpRequestHeaders request_headers;
|
| - BuildTunnelRequest(request_, authorization_headers, endpoint_,
|
| + BuildTunnelRequest(&request_, authorization_headers, endpoint_,
|
| &request_line, &request_headers);
|
| if (net_log_.IsLoggingAll()) {
|
| net_log_.AddEvent(
|
|
|