| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "net/http/http_proxy_client_socket.h" | 5 #include "net/http/http_proxy_client_socket.h" | 
| 6 | 6 | 
| 7 #include "base/string_util.h" | 7 #include "base/string_util.h" | 
| 8 #include "googleurl/src/gurl.h" | 8 #include "googleurl/src/gurl.h" | 
| 9 #include "net/base/host_port_pair.h" | 9 #include "net/base/host_port_pair.h" | 
| 10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" | 
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 152 void HttpProxyClientSocket::Disconnect() { | 152 void HttpProxyClientSocket::Disconnect() { | 
| 153   transport_->socket()->Disconnect(); | 153   transport_->socket()->Disconnect(); | 
| 154 | 154 | 
| 155   // Reset other states to make sure they aren't mistakenly used later. | 155   // Reset other states to make sure they aren't mistakenly used later. | 
| 156   // These are the states initialized by Connect(). | 156   // These are the states initialized by Connect(). | 
| 157   next_state_ = STATE_NONE; | 157   next_state_ = STATE_NONE; | 
| 158   user_callback_ = NULL; | 158   user_callback_ = NULL; | 
| 159 } | 159 } | 
| 160 | 160 | 
| 161 bool HttpProxyClientSocket::IsConnected() const { | 161 bool HttpProxyClientSocket::IsConnected() const { | 
| 162   return next_state_ == STATE_DONE && transport_->socket()->IsConnected(); | 162   return transport_->socket()->IsConnected(); | 
| 163 } | 163 } | 
| 164 | 164 | 
| 165 bool HttpProxyClientSocket::IsConnectedAndIdle() const { | 165 bool HttpProxyClientSocket::IsConnectedAndIdle() const { | 
| 166   return next_state_ == STATE_DONE | 166   return transport_->socket()->IsConnectedAndIdle(); | 
| 167       && transport_->socket()->IsConnectedAndIdle(); | 167 } | 
|  | 168 | 
|  | 169 bool HttpProxyClientSocket::NeedsRestartWithAuth() const { | 
|  | 170   return next_state_ != STATE_DONE; | 
| 168 } | 171 } | 
| 169 | 172 | 
| 170 int HttpProxyClientSocket::Read(IOBuffer* buf, int buf_len, | 173 int HttpProxyClientSocket::Read(IOBuffer* buf, int buf_len, | 
| 171                             CompletionCallback* callback) { | 174                             CompletionCallback* callback) { | 
| 172   DCHECK(!user_callback_); | 175   DCHECK(!user_callback_); | 
| 173   if (next_state_ != STATE_DONE) { | 176   if (next_state_ != STATE_DONE) { | 
| 174     // We're trying to read the body of the response but we're still trying | 177     // We're trying to read the body of the response but we're still trying | 
| 175     // to establish an SSL tunnel through the proxy.  We can't read these | 178     // to establish an SSL tunnel through the proxy.  We can't read these | 
| 176     // bytes when establishing a tunnel because they might be controlled by | 179     // bytes when establishing a tunnel because they might be controlled by | 
| 177     // an active network attacker.  We don't worry about this for HTTP | 180     // an active network attacker.  We don't worry about this for HTTP | 
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 329   next_state_ = STATE_READ_HEADERS; | 332   next_state_ = STATE_READ_HEADERS; | 
| 330   return OK; | 333   return OK; | 
| 331 } | 334 } | 
| 332 | 335 | 
| 333 int HttpProxyClientSocket::DoReadHeaders() { | 336 int HttpProxyClientSocket::DoReadHeaders() { | 
| 334   next_state_ = STATE_READ_HEADERS_COMPLETE; | 337   next_state_ = STATE_READ_HEADERS_COMPLETE; | 
| 335   return http_stream_->ReadResponseHeaders(&io_callback_); | 338   return http_stream_->ReadResponseHeaders(&io_callback_); | 
| 336 } | 339 } | 
| 337 | 340 | 
| 338 int HttpProxyClientSocket::DoReadHeadersComplete(int result) { | 341 int HttpProxyClientSocket::DoReadHeadersComplete(int result) { | 
| 339   if (result < 0) { | 342   if (result < 0) | 
| 340     if (result == ERR_CONNECTION_CLOSED) |  | 
| 341       result = ERR_TUNNEL_CONNECTION_FAILED; |  | 
| 342     return result; | 343     return result; | 
| 343   } |  | 
| 344 | 344 | 
| 345   // Require the "HTTP/1.x" status line for SSL CONNECT. | 345   // Require the "HTTP/1.x" status line for SSL CONNECT. | 
| 346   if (response_.headers->GetParsedHttpVersion() < HttpVersion(1, 0)) | 346   if (response_.headers->GetParsedHttpVersion() < HttpVersion(1, 0)) | 
| 347     return ERR_TUNNEL_CONNECTION_FAILED; | 347     return ERR_TUNNEL_CONNECTION_FAILED; | 
| 348 | 348 | 
| 349   if (net_log_.HasListener()) { | 349   if (net_log_.HasListener()) { | 
| 350     net_log_.AddEvent( | 350     net_log_.AddEvent( | 
| 351         NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 351         NetLog::TYPE_HTTP_TRANSACTION_READ_TUNNEL_RESPONSE_HEADERS, | 
| 352         new NetLogHttpResponseParameter(response_.headers)); | 352         new NetLogHttpResponseParameter(response_.headers)); | 
| 353   } | 353   } | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 411 | 411 | 
| 412   int rv = auth_->HandleAuthChallenge(response_.headers, false, true, net_log_); | 412   int rv = auth_->HandleAuthChallenge(response_.headers, false, true, net_log_); | 
| 413   response_.auth_challenge = auth_->auth_info(); | 413   response_.auth_challenge = auth_->auth_info(); | 
| 414   if (rv == OK) | 414   if (rv == OK) | 
| 415     return ERR_PROXY_AUTH_REQUESTED; | 415     return ERR_PROXY_AUTH_REQUESTED; | 
| 416 | 416 | 
| 417   return rv; | 417   return rv; | 
| 418 } | 418 } | 
| 419 | 419 | 
| 420 }  // namespace net | 420 }  // namespace net | 
| OLD | NEW | 
|---|