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 #ifndef NET_SOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_ | 5 #ifndef NET_SOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_ |
6 #define NET_SOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_ | 6 #define NET_SOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
157 class NET_EXPORT_PRIVATE TransportConnectJob : public ConnectJob { | 157 class NET_EXPORT_PRIVATE TransportConnectJob : public ConnectJob { |
158 public: | 158 public: |
159 TransportConnectJob(const std::string& group_name, | 159 TransportConnectJob(const std::string& group_name, |
160 RequestPriority priority, | 160 RequestPriority priority, |
161 const scoped_refptr<TransportSocketParams>& params, | 161 const scoped_refptr<TransportSocketParams>& params, |
162 base::TimeDelta timeout_duration, | 162 base::TimeDelta timeout_duration, |
163 ClientSocketFactory* client_socket_factory, | 163 ClientSocketFactory* client_socket_factory, |
164 HostResolver* host_resolver, | 164 HostResolver* host_resolver, |
165 Delegate* delegate, | 165 Delegate* delegate, |
166 NetLog* net_log); | 166 NetLog* net_log); |
167 virtual ~TransportConnectJob(); | 167 ~TransportConnectJob() override; |
168 | 168 |
169 // ConnectJob methods. | 169 // ConnectJob methods. |
170 virtual LoadState GetLoadState() const override; | 170 LoadState GetLoadState() const override; |
171 | 171 |
172 // Rolls |addrlist| forward until the first IPv4 address, if any. | 172 // Rolls |addrlist| forward until the first IPv4 address, if any. |
173 // WARNING: this method should only be used to implement the prefer-IPv4 hack. | 173 // WARNING: this method should only be used to implement the prefer-IPv4 hack. |
174 static void MakeAddressListStartWithIPv4(AddressList* addrlist); | 174 static void MakeAddressListStartWithIPv4(AddressList* addrlist); |
175 | 175 |
176 private: | 176 private: |
177 enum ConnectInterval { | 177 enum ConnectInterval { |
178 CONNECT_INTERVAL_LE_10MS, | 178 CONNECT_INTERVAL_LE_10MS, |
179 CONNECT_INTERVAL_LE_20MS, | 179 CONNECT_INTERVAL_LE_20MS, |
180 CONNECT_INTERVAL_GT_20MS, | 180 CONNECT_INTERVAL_GT_20MS, |
181 }; | 181 }; |
182 | 182 |
183 friend class TransportConnectJobHelper; | 183 friend class TransportConnectJobHelper; |
184 | 184 |
185 int DoResolveHost(); | 185 int DoResolveHost(); |
186 int DoResolveHostComplete(int result); | 186 int DoResolveHostComplete(int result); |
187 int DoTransportConnect(); | 187 int DoTransportConnect(); |
188 int DoTransportConnectComplete(int result); | 188 int DoTransportConnectComplete(int result); |
189 | 189 |
190 // Not part of the state machine. | 190 // Not part of the state machine. |
191 void DoIPv6FallbackTransportConnect(); | 191 void DoIPv6FallbackTransportConnect(); |
192 void DoIPv6FallbackTransportConnectComplete(int result); | 192 void DoIPv6FallbackTransportConnectComplete(int result); |
193 | 193 |
194 // Begins the host resolution and the TCP connect. Returns OK on success | 194 // Begins the host resolution and the TCP connect. Returns OK on success |
195 // and ERR_IO_PENDING if it cannot immediately service the request. | 195 // and ERR_IO_PENDING if it cannot immediately service the request. |
196 // Otherwise, it returns a net error code. | 196 // Otherwise, it returns a net error code. |
197 virtual int ConnectInternal() override; | 197 int ConnectInternal() override; |
198 | 198 |
199 TransportConnectJobHelper helper_; | 199 TransportConnectJobHelper helper_; |
200 | 200 |
201 scoped_ptr<StreamSocket> transport_socket_; | 201 scoped_ptr<StreamSocket> transport_socket_; |
202 | 202 |
203 scoped_ptr<StreamSocket> fallback_transport_socket_; | 203 scoped_ptr<StreamSocket> fallback_transport_socket_; |
204 scoped_ptr<AddressList> fallback_addresses_; | 204 scoped_ptr<AddressList> fallback_addresses_; |
205 base::TimeTicks fallback_connect_start_time_; | 205 base::TimeTicks fallback_connect_start_time_; |
206 base::OneShotTimer<TransportConnectJob> fallback_timer_; | 206 base::OneShotTimer<TransportConnectJob> fallback_timer_; |
207 | 207 |
208 // Track the interval between this connect and previous connect. | 208 // Track the interval between this connect and previous connect. |
209 ConnectInterval interval_between_connects_; | 209 ConnectInterval interval_between_connects_; |
210 | 210 |
211 DISALLOW_COPY_AND_ASSIGN(TransportConnectJob); | 211 DISALLOW_COPY_AND_ASSIGN(TransportConnectJob); |
212 }; | 212 }; |
213 | 213 |
214 class NET_EXPORT_PRIVATE TransportClientSocketPool : public ClientSocketPool { | 214 class NET_EXPORT_PRIVATE TransportClientSocketPool : public ClientSocketPool { |
215 public: | 215 public: |
216 typedef TransportSocketParams SocketParams; | 216 typedef TransportSocketParams SocketParams; |
217 | 217 |
218 TransportClientSocketPool( | 218 TransportClientSocketPool( |
219 int max_sockets, | 219 int max_sockets, |
220 int max_sockets_per_group, | 220 int max_sockets_per_group, |
221 ClientSocketPoolHistograms* histograms, | 221 ClientSocketPoolHistograms* histograms, |
222 HostResolver* host_resolver, | 222 HostResolver* host_resolver, |
223 ClientSocketFactory* client_socket_factory, | 223 ClientSocketFactory* client_socket_factory, |
224 NetLog* net_log); | 224 NetLog* net_log); |
225 | 225 |
226 virtual ~TransportClientSocketPool(); | 226 ~TransportClientSocketPool() override; |
227 | 227 |
228 // ClientSocketPool implementation. | 228 // ClientSocketPool implementation. |
229 virtual int RequestSocket(const std::string& group_name, | 229 int RequestSocket(const std::string& group_name, |
230 const void* resolve_info, | 230 const void* resolve_info, |
231 RequestPriority priority, | 231 RequestPriority priority, |
232 ClientSocketHandle* handle, | 232 ClientSocketHandle* handle, |
233 const CompletionCallback& callback, | 233 const CompletionCallback& callback, |
234 const BoundNetLog& net_log) override; | 234 const BoundNetLog& net_log) override; |
235 virtual void RequestSockets(const std::string& group_name, | 235 void RequestSockets(const std::string& group_name, |
236 const void* params, | 236 const void* params, |
237 int num_sockets, | 237 int num_sockets, |
238 const BoundNetLog& net_log) override; | 238 const BoundNetLog& net_log) override; |
239 virtual void CancelRequest(const std::string& group_name, | 239 void CancelRequest(const std::string& group_name, |
240 ClientSocketHandle* handle) override; | 240 ClientSocketHandle* handle) override; |
241 virtual void ReleaseSocket(const std::string& group_name, | 241 void ReleaseSocket(const std::string& group_name, |
242 scoped_ptr<StreamSocket> socket, | 242 scoped_ptr<StreamSocket> socket, |
243 int id) override; | 243 int id) override; |
244 virtual void FlushWithError(int error) override; | 244 void FlushWithError(int error) override; |
245 virtual void CloseIdleSockets() override; | 245 void CloseIdleSockets() override; |
246 virtual int IdleSocketCount() const override; | 246 int IdleSocketCount() const override; |
247 virtual int IdleSocketCountInGroup( | 247 int IdleSocketCountInGroup(const std::string& group_name) const override; |
248 const std::string& group_name) const override; | 248 LoadState GetLoadState(const std::string& group_name, |
249 virtual LoadState GetLoadState( | 249 const ClientSocketHandle* handle) const override; |
250 const std::string& group_name, | 250 base::DictionaryValue* GetInfoAsValue( |
251 const ClientSocketHandle* handle) const override; | |
252 virtual base::DictionaryValue* GetInfoAsValue( | |
253 const std::string& name, | 251 const std::string& name, |
254 const std::string& type, | 252 const std::string& type, |
255 bool include_nested_pools) const override; | 253 bool include_nested_pools) const override; |
256 virtual base::TimeDelta ConnectionTimeout() const override; | 254 base::TimeDelta ConnectionTimeout() const override; |
257 virtual ClientSocketPoolHistograms* histograms() const override; | 255 ClientSocketPoolHistograms* histograms() const override; |
258 | 256 |
259 // HigherLayeredPool implementation. | 257 // HigherLayeredPool implementation. |
260 virtual bool IsStalled() const override; | 258 bool IsStalled() const override; |
261 virtual void AddHigherLayeredPool(HigherLayeredPool* higher_pool) override; | 259 void AddHigherLayeredPool(HigherLayeredPool* higher_pool) override; |
262 virtual void RemoveHigherLayeredPool(HigherLayeredPool* higher_pool) override; | 260 void RemoveHigherLayeredPool(HigherLayeredPool* higher_pool) override; |
263 | 261 |
264 protected: | 262 protected: |
265 // Methods shared with WebSocketTransportClientSocketPool | 263 // Methods shared with WebSocketTransportClientSocketPool |
266 void NetLogTcpClientSocketPoolRequestedSocket( | 264 void NetLogTcpClientSocketPoolRequestedSocket( |
267 const BoundNetLog& net_log, | 265 const BoundNetLog& net_log, |
268 const scoped_refptr<TransportSocketParams>* casted_params); | 266 const scoped_refptr<TransportSocketParams>* casted_params); |
269 | 267 |
270 private: | 268 private: |
271 typedef ClientSocketPoolBase<TransportSocketParams> PoolBase; | 269 typedef ClientSocketPoolBase<TransportSocketParams> PoolBase; |
272 | 270 |
273 class TransportConnectJobFactory | 271 class TransportConnectJobFactory |
274 : public PoolBase::ConnectJobFactory { | 272 : public PoolBase::ConnectJobFactory { |
275 public: | 273 public: |
276 TransportConnectJobFactory(ClientSocketFactory* client_socket_factory, | 274 TransportConnectJobFactory(ClientSocketFactory* client_socket_factory, |
277 HostResolver* host_resolver, | 275 HostResolver* host_resolver, |
278 NetLog* net_log) | 276 NetLog* net_log) |
279 : client_socket_factory_(client_socket_factory), | 277 : client_socket_factory_(client_socket_factory), |
280 host_resolver_(host_resolver), | 278 host_resolver_(host_resolver), |
281 net_log_(net_log) {} | 279 net_log_(net_log) {} |
282 | 280 |
283 virtual ~TransportConnectJobFactory() {} | 281 ~TransportConnectJobFactory() override {} |
284 | 282 |
285 // ClientSocketPoolBase::ConnectJobFactory methods. | 283 // ClientSocketPoolBase::ConnectJobFactory methods. |
286 | 284 |
287 virtual scoped_ptr<ConnectJob> NewConnectJob( | 285 scoped_ptr<ConnectJob> NewConnectJob( |
288 const std::string& group_name, | 286 const std::string& group_name, |
289 const PoolBase::Request& request, | 287 const PoolBase::Request& request, |
290 ConnectJob::Delegate* delegate) const override; | 288 ConnectJob::Delegate* delegate) const override; |
291 | 289 |
292 virtual base::TimeDelta ConnectionTimeout() const override; | 290 base::TimeDelta ConnectionTimeout() const override; |
293 | 291 |
294 private: | 292 private: |
295 ClientSocketFactory* const client_socket_factory_; | 293 ClientSocketFactory* const client_socket_factory_; |
296 HostResolver* const host_resolver_; | 294 HostResolver* const host_resolver_; |
297 NetLog* net_log_; | 295 NetLog* net_log_; |
298 | 296 |
299 DISALLOW_COPY_AND_ASSIGN(TransportConnectJobFactory); | 297 DISALLOW_COPY_AND_ASSIGN(TransportConnectJobFactory); |
300 }; | 298 }; |
301 | 299 |
302 PoolBase base_; | 300 PoolBase base_; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
355 break; | 353 break; |
356 } | 354 } |
357 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); | 355 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); |
358 | 356 |
359 return rv; | 357 return rv; |
360 } | 358 } |
361 | 359 |
362 } // namespace net | 360 } // namespace net |
363 | 361 |
364 #endif // NET_SOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_ | 362 #endif // NET_SOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_ |
OLD | NEW |