| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 // don't synchronize. | 31 // don't synchronize. |
| 32 const int TransportConnectJob::kIPv6FallbackTimerInMs = 300; | 32 const int TransportConnectJob::kIPv6FallbackTimerInMs = 300; |
| 33 | 33 |
| 34 namespace { | 34 namespace { |
| 35 | 35 |
| 36 // Returns true iff all addresses in |list| are in the IPv6 family. | 36 // Returns true iff all addresses in |list| are in the IPv6 family. |
| 37 bool AddressListOnlyContainsIPv6(const AddressList& list) { | 37 bool AddressListOnlyContainsIPv6(const AddressList& list) { |
| 38 DCHECK(!list.empty()); | 38 DCHECK(!list.empty()); |
| 39 for (AddressList::const_iterator iter = list.begin(); iter != list.end(); | 39 for (AddressList::const_iterator iter = list.begin(); iter != list.end(); |
| 40 ++iter) { | 40 ++iter) { |
| 41 if (iter->GetFamily() != AF_INET6) | 41 if (iter->GetFamily() != ADDRESS_FAMILY_IPV6) |
| 42 return false; | 42 return false; |
| 43 } | 43 } |
| 44 return true; | 44 return true; |
| 45 } | 45 } |
| 46 | 46 |
| 47 } // namespace | 47 } // namespace |
| 48 | 48 |
| 49 TransportSocketParams::TransportSocketParams( | 49 TransportSocketParams::TransportSocketParams( |
| 50 const HostPortPair& host_port_pair, | 50 const HostPortPair& host_port_pair, |
| 51 RequestPriority priority, | 51 RequestPriority priority, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 return LOAD_STATE_CONNECTING; | 109 return LOAD_STATE_CONNECTING; |
| 110 default: | 110 default: |
| 111 NOTREACHED(); | 111 NOTREACHED(); |
| 112 return LOAD_STATE_IDLE; | 112 return LOAD_STATE_IDLE; |
| 113 } | 113 } |
| 114 } | 114 } |
| 115 | 115 |
| 116 // static | 116 // static |
| 117 void TransportConnectJob::MakeAddressListStartWithIPv4(AddressList* list) { | 117 void TransportConnectJob::MakeAddressListStartWithIPv4(AddressList* list) { |
| 118 for (AddressList::iterator i = list->begin(); i != list->end(); ++i) { | 118 for (AddressList::iterator i = list->begin(); i != list->end(); ++i) { |
| 119 if (i->GetFamily() == AF_INET) { | 119 if (i->GetFamily() == ADDRESS_FAMILY_IPV4) { |
| 120 std::rotate(list->begin(), i, list->end()); | 120 std::rotate(list->begin(), i, list->end()); |
| 121 break; | 121 break; |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 } | 124 } |
| 125 | 125 |
| 126 void TransportConnectJob::OnIOComplete(int result) { | 126 void TransportConnectJob::OnIOComplete(int result) { |
| 127 int rv = DoLoop(result); | 127 int rv = DoLoop(result); |
| 128 if (rv != ERR_IO_PENDING) | 128 if (rv != ERR_IO_PENDING) |
| 129 NotifyDelegateOfCompletion(rv); // Deletes |this| | 129 NotifyDelegateOfCompletion(rv); // Deletes |this| |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 182 } |
| 183 | 183 |
| 184 int TransportConnectJob::DoTransportConnect() { | 184 int TransportConnectJob::DoTransportConnect() { |
| 185 next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; | 185 next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; |
| 186 transport_socket_.reset(client_socket_factory_->CreateTransportClientSocket( | 186 transport_socket_.reset(client_socket_factory_->CreateTransportClientSocket( |
| 187 addresses_, net_log().net_log(), net_log().source())); | 187 addresses_, net_log().net_log(), net_log().source())); |
| 188 connect_start_time_ = base::TimeTicks::Now(); | 188 connect_start_time_ = base::TimeTicks::Now(); |
| 189 int rv = transport_socket_->Connect( | 189 int rv = transport_socket_->Connect( |
| 190 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this))); | 190 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this))); |
| 191 if (rv == ERR_IO_PENDING && | 191 if (rv == ERR_IO_PENDING && |
| 192 addresses_.front().GetFamily() == AF_INET6 && | 192 addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV6 && |
| 193 !AddressListOnlyContainsIPv6(addresses_)) { | 193 !AddressListOnlyContainsIPv6(addresses_)) { |
| 194 fallback_timer_.Start(FROM_HERE, | 194 fallback_timer_.Start(FROM_HERE, |
| 195 base::TimeDelta::FromMilliseconds(kIPv6FallbackTimerInMs), | 195 base::TimeDelta::FromMilliseconds(kIPv6FallbackTimerInMs), |
| 196 this, &TransportConnectJob::DoIPv6FallbackTransportConnect); | 196 this, &TransportConnectJob::DoIPv6FallbackTransportConnect); |
| 197 } | 197 } |
| 198 return rv; | 198 return rv; |
| 199 } | 199 } |
| 200 | 200 |
| 201 int TransportConnectJob::DoTransportConnectComplete(int result) { | 201 int TransportConnectJob::DoTransportConnectComplete(int result) { |
| 202 if (result == OK) { | 202 if (result == OK) { |
| 203 bool is_ipv4 = addresses_.front().GetFamily() != AF_INET6; | 203 bool is_ipv4 = addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV4; |
| 204 DCHECK(connect_start_time_ != base::TimeTicks()); | 204 DCHECK(connect_start_time_ != base::TimeTicks()); |
| 205 DCHECK(start_time_ != base::TimeTicks()); | 205 DCHECK(start_time_ != base::TimeTicks()); |
| 206 base::TimeTicks now = base::TimeTicks::Now(); | 206 base::TimeTicks now = base::TimeTicks::Now(); |
| 207 base::TimeDelta total_duration = now - start_time_; | 207 base::TimeDelta total_duration = now - start_time_; |
| 208 UMA_HISTOGRAM_CUSTOM_TIMES( | 208 UMA_HISTOGRAM_CUSTOM_TIMES( |
| 209 "Net.DNS_Resolution_And_TCP_Connection_Latency2", | 209 "Net.DNS_Resolution_And_TCP_Connection_Latency2", |
| 210 total_duration, | 210 total_duration, |
| 211 base::TimeDelta::FromMilliseconds(1), | 211 base::TimeDelta::FromMilliseconds(1), |
| 212 base::TimeDelta::FromMinutes(10), | 212 base::TimeDelta::FromMinutes(10), |
| 213 100); | 213 100); |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 | 462 |
| 463 base::TimeDelta TransportClientSocketPool::ConnectionTimeout() const { | 463 base::TimeDelta TransportClientSocketPool::ConnectionTimeout() const { |
| 464 return base_.ConnectionTimeout(); | 464 return base_.ConnectionTimeout(); |
| 465 } | 465 } |
| 466 | 466 |
| 467 ClientSocketPoolHistograms* TransportClientSocketPool::histograms() const { | 467 ClientSocketPoolHistograms* TransportClientSocketPool::histograms() const { |
| 468 return base_.histograms(); | 468 return base_.histograms(); |
| 469 } | 469 } |
| 470 | 470 |
| 471 } // namespace net | 471 } // namespace net |
| OLD | NEW |