Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Side by Side Diff: net/http/http_proxy_client_socket.cc

Issue 2870030: Implement SSLClientSocketPool. (Closed)
Patch Set: Rebase and fix mac compile error Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698