| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/socket/transport_client_socket_pool.h" | 5 #include "net/socket/transport_client_socket_pool.h" |
| 6 | 6 |
| 7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 const scoped_refptr<TransportSocketParams>& params, | 92 const scoped_refptr<TransportSocketParams>& params, |
| 93 base::TimeDelta timeout_duration, | 93 base::TimeDelta timeout_duration, |
| 94 ClientSocketFactory* client_socket_factory, | 94 ClientSocketFactory* client_socket_factory, |
| 95 HostResolver* host_resolver, | 95 HostResolver* host_resolver, |
| 96 Delegate* delegate, | 96 Delegate* delegate, |
| 97 NetLog* net_log) | 97 NetLog* net_log) |
| 98 : ConnectJob(group_name, timeout_duration, delegate, | 98 : ConnectJob(group_name, timeout_duration, delegate, |
| 99 BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)), | 99 BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)), |
| 100 params_(params), | 100 params_(params), |
| 101 client_socket_factory_(client_socket_factory), | 101 client_socket_factory_(client_socket_factory), |
| 102 ALLOW_THIS_IN_INITIALIZER_LIST( | 102 resolver_(host_resolver) {} |
| 103 callback_(this, | |
| 104 &TransportConnectJob::OnIOComplete)), | |
| 105 resolver_(host_resolver), | |
| 106 ALLOW_THIS_IN_INITIALIZER_LIST( | |
| 107 fallback_callback_( | |
| 108 this, | |
| 109 &TransportConnectJob::DoIPv6FallbackTransportConnectComplete)) {} | |
| 110 | 103 |
| 111 TransportConnectJob::~TransportConnectJob() { | 104 TransportConnectJob::~TransportConnectJob() { |
| 112 // We don't worry about cancelling the host resolution and TCP connect, since | 105 // We don't worry about cancelling the host resolution and TCP connect, since |
| 113 // ~SingleRequestHostResolver and ~StreamSocket will take care of it. | 106 // ~SingleRequestHostResolver and ~StreamSocket will take care of it. |
| 114 } | 107 } |
| 115 | 108 |
| 116 LoadState TransportConnectJob::GetLoadState() const { | 109 LoadState TransportConnectJob::GetLoadState() const { |
| 117 switch (next_state_) { | 110 switch (next_state_) { |
| 118 case STATE_RESOLVE_HOST: | 111 case STATE_RESOLVE_HOST: |
| 119 case STATE_RESOLVE_HOST_COMPLETE: | 112 case STATE_RESOLVE_HOST_COMPLETE: |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 if (result == OK) | 202 if (result == OK) |
| 210 next_state_ = STATE_TRANSPORT_CONNECT; | 203 next_state_ = STATE_TRANSPORT_CONNECT; |
| 211 return result; | 204 return result; |
| 212 } | 205 } |
| 213 | 206 |
| 214 int TransportConnectJob::DoTransportConnect() { | 207 int TransportConnectJob::DoTransportConnect() { |
| 215 next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; | 208 next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; |
| 216 transport_socket_.reset(client_socket_factory_->CreateTransportClientSocket( | 209 transport_socket_.reset(client_socket_factory_->CreateTransportClientSocket( |
| 217 addresses_, net_log().net_log(), net_log().source())); | 210 addresses_, net_log().net_log(), net_log().source())); |
| 218 connect_start_time_ = base::TimeTicks::Now(); | 211 connect_start_time_ = base::TimeTicks::Now(); |
| 219 int rv = transport_socket_->Connect(&callback_); | 212 int rv = transport_socket_->Connect( |
| 213 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this))); |
| 220 if (rv == ERR_IO_PENDING && | 214 if (rv == ERR_IO_PENDING && |
| 221 AddressListStartsWithIPv6AndHasAnIPv4Addr(addresses_)) { | 215 AddressListStartsWithIPv6AndHasAnIPv4Addr(addresses_)) { |
| 222 fallback_timer_.Start(FROM_HERE, | 216 fallback_timer_.Start(FROM_HERE, |
| 223 base::TimeDelta::FromMilliseconds(kIPv6FallbackTimerInMs), | 217 base::TimeDelta::FromMilliseconds(kIPv6FallbackTimerInMs), |
| 224 this, &TransportConnectJob::DoIPv6FallbackTransportConnect); | 218 this, &TransportConnectJob::DoIPv6FallbackTransportConnect); |
| 225 } | 219 } |
| 226 return rv; | 220 return rv; |
| 227 } | 221 } |
| 228 | 222 |
| 229 int TransportConnectJob::DoTransportConnectComplete(int result) { | 223 int TransportConnectJob::DoTransportConnectComplete(int result) { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 | 283 |
| 290 DCHECK(!fallback_transport_socket_.get()); | 284 DCHECK(!fallback_transport_socket_.get()); |
| 291 DCHECK(!fallback_addresses_.get()); | 285 DCHECK(!fallback_addresses_.get()); |
| 292 | 286 |
| 293 fallback_addresses_.reset(new AddressList(addresses_)); | 287 fallback_addresses_.reset(new AddressList(addresses_)); |
| 294 MakeAddrListStartWithIPv4(fallback_addresses_.get()); | 288 MakeAddrListStartWithIPv4(fallback_addresses_.get()); |
| 295 fallback_transport_socket_.reset( | 289 fallback_transport_socket_.reset( |
| 296 client_socket_factory_->CreateTransportClientSocket( | 290 client_socket_factory_->CreateTransportClientSocket( |
| 297 *fallback_addresses_, net_log().net_log(), net_log().source())); | 291 *fallback_addresses_, net_log().net_log(), net_log().source())); |
| 298 fallback_connect_start_time_ = base::TimeTicks::Now(); | 292 fallback_connect_start_time_ = base::TimeTicks::Now(); |
| 299 int rv = fallback_transport_socket_->Connect(&fallback_callback_); | 293 int rv = fallback_transport_socket_->Connect( |
| 294 base::Bind( |
| 295 &TransportConnectJob::DoIPv6FallbackTransportConnectComplete, |
| 296 base::Unretained(this))); |
| 300 if (rv != ERR_IO_PENDING) | 297 if (rv != ERR_IO_PENDING) |
| 301 DoIPv6FallbackTransportConnectComplete(rv); | 298 DoIPv6FallbackTransportConnectComplete(rv); |
| 302 } | 299 } |
| 303 | 300 |
| 304 void TransportConnectJob::DoIPv6FallbackTransportConnectComplete(int result) { | 301 void TransportConnectJob::DoIPv6FallbackTransportConnectComplete(int result) { |
| 305 // This should only happen when we're waiting for the main connect to succeed. | 302 // This should only happen when we're waiting for the main connect to succeed. |
| 306 if (next_state_ != STATE_TRANSPORT_CONNECT_COMPLETE) { | 303 if (next_state_ != STATE_TRANSPORT_CONNECT_COMPLETE) { |
| 307 NOTREACHED(); | 304 NOTREACHED(); |
| 308 return; | 305 return; |
| 309 } | 306 } |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 | 486 |
| 490 base::TimeDelta TransportClientSocketPool::ConnectionTimeout() const { | 487 base::TimeDelta TransportClientSocketPool::ConnectionTimeout() const { |
| 491 return base_.ConnectionTimeout(); | 488 return base_.ConnectionTimeout(); |
| 492 } | 489 } |
| 493 | 490 |
| 494 ClientSocketPoolHistograms* TransportClientSocketPool::histograms() const { | 491 ClientSocketPoolHistograms* TransportClientSocketPool::histograms() const { |
| 495 return base_.histograms(); | 492 return base_.histograms(); |
| 496 } | 493 } |
| 497 | 494 |
| 498 } // namespace net | 495 } // namespace net |
| OLD | NEW |