OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 // | |
5 // ClientSocketPoolManager manages access to all ClientSocketPools. It's a | |
6 // simple container for all of them. Most importantly, it handles the lifetime | |
7 // and destruction order properly. | |
8 | |
9 #ifndef NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ | |
10 #define NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ | |
11 | |
12 #include "net/base/completion_callback.h" | |
13 #include "net/base/net_export.h" | |
14 #include "net/base/request_priority.h" | |
15 #include "net/http/http_network_session.h" | |
16 | |
17 class GURL; | |
18 | |
19 namespace base { | |
20 class Value; | |
21 } | |
22 | |
23 namespace net { | |
24 | |
25 typedef base::Callback<int(const AddressList&, const BoundNetLog& net_log)> | |
26 OnHostResolutionCallback; | |
27 | |
28 class BoundNetLog; | |
29 class ClientSocketHandle; | |
30 class HostPortPair; | |
31 class HttpNetworkSession; | |
32 class HttpProxyClientSocketPool; | |
33 class HttpRequestHeaders; | |
34 class ProxyInfo; | |
35 class TransportClientSocketPool; | |
36 class SOCKSClientSocketPool; | |
37 class SSLClientSocketPool; | |
38 | |
39 struct SSLConfig; | |
40 | |
41 // This should rather be a simple constant but Windows shared libs doesn't | |
42 // really offer much flexiblity in exporting contants. | |
43 enum DefaultMaxValues { kDefaultMaxSocketsPerProxyServer = 32 }; | |
44 | |
45 class NET_EXPORT_PRIVATE ClientSocketPoolManager { | |
46 public: | |
47 ClientSocketPoolManager(); | |
48 virtual ~ClientSocketPoolManager(); | |
49 | |
50 // The setter methods below affect only newly created socket pools after the | |
51 // methods are called. Normally they should be called at program startup | |
52 // before any ClientSocketPoolManagerImpl is created. | |
53 static int max_sockets_per_pool(HttpNetworkSession::SocketPoolType pool_type); | |
54 static void set_max_sockets_per_pool( | |
55 HttpNetworkSession::SocketPoolType pool_type, | |
56 int socket_count); | |
57 | |
58 static int max_sockets_per_group( | |
59 HttpNetworkSession::SocketPoolType pool_type); | |
60 static void set_max_sockets_per_group( | |
61 HttpNetworkSession::SocketPoolType pool_type, | |
62 int socket_count); | |
63 | |
64 static int max_sockets_per_proxy_server( | |
65 HttpNetworkSession::SocketPoolType pool_type); | |
66 static void set_max_sockets_per_proxy_server( | |
67 HttpNetworkSession::SocketPoolType pool_type, | |
68 int socket_count); | |
69 | |
70 virtual void FlushSocketPoolsWithError(int error) = 0; | |
71 virtual void CloseIdleSockets() = 0; | |
72 virtual TransportClientSocketPool* GetTransportSocketPool() = 0; | |
73 virtual SSLClientSocketPool* GetSSLSocketPool() = 0; | |
74 virtual SOCKSClientSocketPool* GetSocketPoolForSOCKSProxy( | |
75 const HostPortPair& socks_proxy) = 0; | |
76 virtual HttpProxyClientSocketPool* GetSocketPoolForHTTPProxy( | |
77 const HostPortPair& http_proxy) = 0; | |
78 virtual SSLClientSocketPool* GetSocketPoolForSSLWithProxy( | |
79 const HostPortPair& proxy_server) = 0; | |
80 // Creates a Value summary of the state of the socket pools. The caller is | |
81 // responsible for deleting the returned value. | |
82 virtual base::Value* SocketPoolInfoToValue() const = 0; | |
83 }; | |
84 | |
85 // A helper method that uses the passed in proxy information to initialize a | |
86 // ClientSocketHandle with the relevant socket pool. Use this method for | |
87 // HTTP/HTTPS requests. |ssl_config_for_origin| is only used if the request | |
88 // uses SSL and |ssl_config_for_proxy| is used if the proxy server is HTTPS. | |
89 // |resolution_callback| will be invoked after the the hostname is | |
90 // resolved. If |resolution_callback| does not return OK, then the | |
91 // connection will be aborted with that value. | |
92 int InitSocketHandleForHttpRequest( | |
93 const GURL& request_url, | |
94 const HttpRequestHeaders& request_extra_headers, | |
95 int request_load_flags, | |
96 RequestPriority request_priority, | |
97 HttpNetworkSession* session, | |
98 const ProxyInfo& proxy_info, | |
99 bool force_spdy_over_ssl, | |
100 bool want_spdy_over_npn, | |
101 const SSLConfig& ssl_config_for_origin, | |
102 const SSLConfig& ssl_config_for_proxy, | |
103 PrivacyMode privacy_mode, | |
104 const BoundNetLog& net_log, | |
105 ClientSocketHandle* socket_handle, | |
106 const OnHostResolutionCallback& resolution_callback, | |
107 const CompletionCallback& callback); | |
108 | |
109 // A helper method that uses the passed in proxy information to initialize a | |
110 // ClientSocketHandle with the relevant socket pool. Use this method for | |
111 // HTTP/HTTPS requests for WebSocket handshake. | |
112 // |ssl_config_for_origin| is only used if the request | |
113 // uses SSL and |ssl_config_for_proxy| is used if the proxy server is HTTPS. | |
114 // |resolution_callback| will be invoked after the the hostname is | |
115 // resolved. If |resolution_callback| does not return OK, then the | |
116 // connection will be aborted with that value. | |
117 // This function uses WEBSOCKET_SOCKET_POOL socket pools. | |
118 int InitSocketHandleForWebSocketRequest( | |
119 const GURL& request_url, | |
120 const HttpRequestHeaders& request_extra_headers, | |
121 int request_load_flags, | |
122 RequestPriority request_priority, | |
123 HttpNetworkSession* session, | |
124 const ProxyInfo& proxy_info, | |
125 bool force_spdy_over_ssl, | |
126 bool want_spdy_over_npn, | |
127 const SSLConfig& ssl_config_for_origin, | |
128 const SSLConfig& ssl_config_for_proxy, | |
129 PrivacyMode privacy_mode, | |
130 const BoundNetLog& net_log, | |
131 ClientSocketHandle* socket_handle, | |
132 const OnHostResolutionCallback& resolution_callback, | |
133 const CompletionCallback& callback); | |
134 | |
135 // A helper method that uses the passed in proxy information to initialize a | |
136 // ClientSocketHandle with the relevant socket pool. Use this method for | |
137 // a raw socket connection to a host-port pair (that needs to tunnel through | |
138 // the proxies). | |
139 NET_EXPORT int InitSocketHandleForRawConnect( | |
140 const HostPortPair& host_port_pair, | |
141 HttpNetworkSession* session, | |
142 const ProxyInfo& proxy_info, | |
143 const SSLConfig& ssl_config_for_origin, | |
144 const SSLConfig& ssl_config_for_proxy, | |
145 PrivacyMode privacy_mode, | |
146 const BoundNetLog& net_log, | |
147 ClientSocketHandle* socket_handle, | |
148 const CompletionCallback& callback); | |
149 | |
150 // A helper method that uses the passed in proxy information to initialize a | |
151 // ClientSocketHandle with the relevant socket pool. Use this method for | |
152 // a raw socket connection with TLS negotiation to a host-port pair (that needs | |
153 // to tunnel through the proxies). | |
154 NET_EXPORT int InitSocketHandleForTlsConnect( | |
155 const HostPortPair& host_port_pair, | |
156 HttpNetworkSession* session, | |
157 const ProxyInfo& proxy_info, | |
158 const SSLConfig& ssl_config_for_origin, | |
159 const SSLConfig& ssl_config_for_proxy, | |
160 PrivacyMode privacy_mode, | |
161 const BoundNetLog& net_log, | |
162 ClientSocketHandle* socket_handle, | |
163 const CompletionCallback& callback); | |
164 | |
165 // Similar to InitSocketHandleForHttpRequest except that it initiates the | |
166 // desired number of preconnect streams from the relevant socket pool. | |
167 int PreconnectSocketsForHttpRequest( | |
168 const GURL& request_url, | |
169 const HttpRequestHeaders& request_extra_headers, | |
170 int request_load_flags, | |
171 RequestPriority request_priority, | |
172 HttpNetworkSession* session, | |
173 const ProxyInfo& proxy_info, | |
174 bool force_spdy_over_ssl, | |
175 bool want_spdy_over_npn, | |
176 const SSLConfig& ssl_config_for_origin, | |
177 const SSLConfig& ssl_config_for_proxy, | |
178 PrivacyMode privacy_mode, | |
179 const BoundNetLog& net_log, | |
180 int num_preconnect_streams); | |
181 | |
182 } // namespace net | |
183 | |
184 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_MANAGER_H_ | |
OLD | NEW |