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

Side by Side Diff: net/socket/client_socket_pool_manager.cc

Issue 6800009: Attn: Mike Belshe Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 9 years, 8 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 | Annotate | Revision Log
OLDNEW
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 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a 5 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a
6 // simple container for all of them. Most importantly, it handles the lifetime 6 // simple container for all of them. Most importantly, it handles the lifetime
7 // and destruction order properly. 7 // and destruction order properly.
8 8
9 #include "net/socket/client_socket_pool_manager.h" 9 #include "net/socket/client_socket_pool_manager.h"
10 10
11 #include <string> 11 #include <string>
12 12
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/stringprintf.h" 14 #include "base/stringprintf.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "net/base/ssl_config_service.h" 16 #include "net/base/ssl_config_service.h"
17 #include "net/http/http_network_session.h" 17 #include "net/http/http_network_session.h"
18 #include "net/http/http_proxy_client_socket_pool.h" 18 #include "net/http/http_proxy_client_socket_pool.h"
19 #include "net/http/http_request_info.h" 19 #include "net/http/http_request_info.h"
20 #include "net/proxy/proxy_service.h" 20 #include "net/proxy/proxy_service.h"
21 #include "net/socket/client_socket_factory.h" 21 #include "net/socket/client_socket_factory.h"
22 #include "net/socket/client_socket_handle.h" 22 #include "net/socket/client_socket_handle.h"
23 #include "net/socket/client_socket_pool_histograms.h" 23 #include "net/socket/client_socket_pool_histograms.h"
24 #include "net/socket/sctp_client_socket_pool.h"
25 #include "net/socket/sctp_support.h"
24 #include "net/socket/socks_client_socket_pool.h" 26 #include "net/socket/socks_client_socket_pool.h"
25 #include "net/socket/ssl_client_socket_pool.h" 27 #include "net/socket/ssl_client_socket_pool.h"
26 #include "net/socket/tcp_client_socket_pool.h" 28 #include "net/socket/tcp_client_socket_pool.h"
27 29
28 namespace net { 30 namespace net {
29 31
30 namespace { 32 namespace {
31 33
32 // Total limit of sockets. 34 // Total limit of sockets.
33 int g_max_sockets = 256; 35 int g_max_sockets = 256;
(...skipping 29 matching lines...) Expand all
63 const ProxyInfo& proxy_info, 65 const ProxyInfo& proxy_info,
64 bool force_spdy_over_ssl, 66 bool force_spdy_over_ssl,
65 bool want_spdy_over_npn, 67 bool want_spdy_over_npn,
66 const SSLConfig& ssl_config_for_origin, 68 const SSLConfig& ssl_config_for_origin,
67 const SSLConfig& ssl_config_for_proxy, 69 const SSLConfig& ssl_config_for_proxy,
68 const BoundNetLog& net_log, 70 const BoundNetLog& net_log,
69 int num_preconnect_streams, 71 int num_preconnect_streams,
70 ClientSocketHandle* socket_handle, 72 ClientSocketHandle* socket_handle,
71 CompletionCallback* callback) { 73 CompletionCallback* callback) {
72 scoped_refptr<TCPSocketParams> tcp_params; 74 scoped_refptr<TCPSocketParams> tcp_params;
75 scoped_refptr<SCTPSocketParams> sctp_params;
73 scoped_refptr<HttpProxySocketParams> http_proxy_params; 76 scoped_refptr<HttpProxySocketParams> http_proxy_params;
74 scoped_refptr<SOCKSSocketParams> socks_params; 77 scoped_refptr<SOCKSSocketParams> socks_params;
75 scoped_ptr<HostPortPair> proxy_host_port; 78 scoped_ptr<HostPortPair> proxy_host_port;
76 79
77 bool using_ssl = request_info.url.SchemeIs("https") || force_spdy_over_ssl; 80 bool using_ssl = request_info.url.SchemeIs("https") || force_spdy_over_ssl;
81 if (using_ssl && sctp_enabled()) {
82 printf("InitSocketPoolHelper: forcing using_ssl = false\n");
Mike Belshe 2011/04/06 18:32:53 nix this
83 using_ssl = false;
84 }
78 85
79 HostPortPair origin_host_port = 86 HostPortPair origin_host_port =
80 HostPortPair(request_info.url.HostNoBrackets(), 87 HostPortPair(request_info.url.HostNoBrackets(),
81 request_info.url.EffectiveIntPort()); 88 request_info.url.EffectiveIntPort());
82 89
83 bool disable_resolver_cache = 90 bool disable_resolver_cache =
84 request_info.load_flags & LOAD_BYPASS_CACHE || 91 request_info.load_flags & LOAD_BYPASS_CACHE ||
85 request_info.load_flags & LOAD_VALIDATE_CACHE || 92 request_info.load_flags & LOAD_VALIDATE_CACHE ||
86 request_info.load_flags & LOAD_DISABLE_CACHE; 93 request_info.load_flags & LOAD_DISABLE_CACHE;
87 94
88 int load_flags = request_info.load_flags; 95 int load_flags = request_info.load_flags;
89 if (HttpStreamFactory::ignore_certificate_errors()) 96 if (HttpStreamFactory::ignore_certificate_errors())
90 load_flags |= LOAD_IGNORE_ALL_CERT_ERRORS; 97 load_flags |= LOAD_IGNORE_ALL_CERT_ERRORS;
91 98
92 // Build the string used to uniquely identify connections of this type. 99 // Build the string used to uniquely identify connections of this type.
93 // Determine the host and port to connect to. 100 // Determine the host and port to connect to.
94 std::string connection_group = origin_host_port.ToString(); 101 std::string connection_group = origin_host_port.ToString();
95 DCHECK(!connection_group.empty()); 102 DCHECK(!connection_group.empty());
96 if (using_ssl) 103 if (using_ssl)
97 connection_group = base::StringPrintf("ssl/%s", connection_group.c_str()); 104 connection_group = base::StringPrintf("ssl/%s", connection_group.c_str());
98 105
99 bool ignore_limits = (request_info.load_flags & LOAD_IGNORE_LIMITS) != 0; 106 bool ignore_limits = (request_info.load_flags & LOAD_IGNORE_LIMITS) != 0;
100 if (proxy_info.is_direct()) { 107 if (proxy_info.is_direct()) {
101 tcp_params = new TCPSocketParams(origin_host_port, 108 if (sctp_enabled()) {
102 request_info.priority, 109 sctp_params = new SCTPSocketParams(origin_host_port,
103 request_info.referrer, 110 request_info.priority,
104 disable_resolver_cache, 111 request_info.referrer,
105 ignore_limits); 112 disable_resolver_cache,
113 ignore_limits);
114 } else {
115 tcp_params = new TCPSocketParams(origin_host_port,
116 request_info.priority,
117 request_info.referrer,
118 disable_resolver_cache,
119 ignore_limits);
120 }
106 } else { 121 } else {
107 ProxyServer proxy_server = proxy_info.proxy_server(); 122 ProxyServer proxy_server = proxy_info.proxy_server();
108 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair())); 123 proxy_host_port.reset(new HostPortPair(proxy_server.host_port_pair()));
109 scoped_refptr<TCPSocketParams> proxy_tcp_params( 124 scoped_refptr<TCPSocketParams> proxy_tcp_params(
110 new TCPSocketParams(*proxy_host_port, 125 new TCPSocketParams(*proxy_host_port,
111 request_info.priority, 126 request_info.priority,
112 request_info.referrer, 127 request_info.referrer,
113 disable_resolver_cache, 128 disable_resolver_cache,
114 ignore_limits)); 129 ignore_limits));
115 130
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 return OK; 228 return OK;
214 } 229 }
215 230
216 return socket_handle->Init(connection_group, socks_params, 231 return socket_handle->Init(connection_group, socks_params,
217 request_info.priority, callback, pool, 232 request_info.priority, callback, pool,
218 net_log); 233 net_log);
219 } 234 }
220 235
221 DCHECK(proxy_info.is_direct()); 236 DCHECK(proxy_info.is_direct());
222 237
223 TCPClientSocketPool* pool = session->tcp_socket_pool(); 238 if (sctp_enabled()) {
224 if (num_preconnect_streams) { 239 SCTPClientSocketPool* pool = session->sctp_socket_pool();
225 RequestSocketsForPool(pool, connection_group, tcp_params, 240 if (num_preconnect_streams) {
226 num_preconnect_streams, net_log); 241 RequestSocketsForPool(pool, connection_group, sctp_params,
227 return OK; 242 num_preconnect_streams, net_log);
243 return OK;
244 }
245
246 return socket_handle->Init(connection_group, sctp_params,
247 request_info.priority, callback,
248 pool, net_log);
249 } else {
250 TCPClientSocketPool* pool = session->tcp_socket_pool();
251 if (num_preconnect_streams) {
252 RequestSocketsForPool(pool, connection_group, tcp_params,
253 num_preconnect_streams, net_log);
254 return OK;
255 }
256
257 return socket_handle->Init(connection_group, tcp_params,
258 request_info.priority, callback,
259 pool, net_log);
228 } 260 }
229
230 return socket_handle->Init(connection_group, tcp_params,
231 request_info.priority, callback,
232 pool, net_log);
233 } 261 }
234 262
235 } // namespace 263 } // namespace
236 264
237 ClientSocketPoolManager::ClientSocketPoolManager( 265 ClientSocketPoolManager::ClientSocketPoolManager(
238 NetLog* net_log, 266 NetLog* net_log,
239 ClientSocketFactory* socket_factory, 267 ClientSocketFactory* socket_factory,
240 HostResolver* host_resolver, 268 HostResolver* host_resolver,
241 CertVerifier* cert_verifier, 269 CertVerifier* cert_verifier,
242 DnsRRResolver* dnsrr_resolver, 270 DnsRRResolver* dnsrr_resolver,
(...skipping 10 matching lines...) Expand all
253 ssl_host_info_factory_(ssl_host_info_factory), 281 ssl_host_info_factory_(ssl_host_info_factory),
254 proxy_service_(proxy_service), 282 proxy_service_(proxy_service),
255 ssl_config_service_(ssl_config_service), 283 ssl_config_service_(ssl_config_service),
256 tcp_pool_histograms_("TCP"), 284 tcp_pool_histograms_("TCP"),
257 tcp_socket_pool_(new TCPClientSocketPool( 285 tcp_socket_pool_(new TCPClientSocketPool(
258 g_max_sockets, g_max_sockets_per_group, 286 g_max_sockets, g_max_sockets_per_group,
259 &tcp_pool_histograms_, 287 &tcp_pool_histograms_,
260 host_resolver, 288 host_resolver,
261 socket_factory_, 289 socket_factory_,
262 net_log)), 290 net_log)),
291 sctp_pool_histograms_("SCTP"),
292 sctp_socket_pool_(new SCTPClientSocketPool(
293 g_max_sockets, g_max_sockets_per_group,
294 &sctp_pool_histograms_,
295 host_resolver,
296 socket_factory_,
297 net_log)),
263 ssl_pool_histograms_("SSL2"), 298 ssl_pool_histograms_("SSL2"),
264 ssl_socket_pool_(new SSLClientSocketPool( 299 ssl_socket_pool_(new SSLClientSocketPool(
265 g_max_sockets, g_max_sockets_per_group, 300 g_max_sockets, g_max_sockets_per_group,
266 &ssl_pool_histograms_, 301 &ssl_pool_histograms_,
267 host_resolver, 302 host_resolver,
268 cert_verifier, 303 cert_verifier,
269 dnsrr_resolver, 304 dnsrr_resolver,
270 dns_cert_checker, 305 dns_cert_checker,
271 ssl_host_info_factory, 306 ssl_host_info_factory,
272 socket_factory, 307 socket_factory,
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 int ClientSocketPoolManager::max_sockets_per_group() { 563 int ClientSocketPoolManager::max_sockets_per_group() {
529 return g_max_sockets_per_group; 564 return g_max_sockets_per_group;
530 } 565 }
531 566
532 // static 567 // static
533 void ClientSocketPoolManager::set_max_sockets_per_group(int socket_count) { 568 void ClientSocketPoolManager::set_max_sockets_per_group(int socket_count) {
534 DCHECK_LT(0, socket_count); 569 DCHECK_LT(0, socket_count);
535 // The following is a sanity check... but we should NEVER be near this value. 570 // The following is a sanity check... but we should NEVER be near this value.
536 DCHECK_GT(100, socket_count); 571 DCHECK_GT(100, socket_count);
537 g_max_sockets_per_group = socket_count; 572 g_max_sockets_per_group = socket_count;
573 // TODO(jtl): Remove this - it's only used for testing SCTP.
574 g_max_sockets_per_group = 1;
Mike Belshe 2011/04/06 18:32:53 can this be if (sctp_enabled()) g_max_sock
538 575
539 DCHECK_GE(g_max_sockets, g_max_sockets_per_group); 576 DCHECK_GE(g_max_sockets, g_max_sockets_per_group);
540 DCHECK_GE(g_max_sockets_per_proxy_server, g_max_sockets_per_group); 577 DCHECK_GE(g_max_sockets_per_proxy_server, g_max_sockets_per_group);
541 } 578 }
542 579
543 // static 580 // static
544 void ClientSocketPoolManager::set_max_sockets_per_proxy_server( 581 void ClientSocketPoolManager::set_max_sockets_per_proxy_server(
545 int socket_count) { 582 int socket_count) {
546 DCHECK_LT(0, socket_count); 583 DCHECK_LT(0, socket_count);
547 DCHECK_GT(100, socket_count); // Sanity check. 584 DCHECK_GT(100, socket_count); // Sanity check.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 ssl_config_for_origin, 692 ssl_config_for_origin,
656 ssl_config_for_proxy, 693 ssl_config_for_proxy,
657 net_log, 694 net_log,
658 num_preconnect_streams, 695 num_preconnect_streams,
659 NULL, 696 NULL,
660 NULL); 697 NULL);
661 } 698 }
662 699
663 700
664 } // namespace net 701 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698