| Index: net/socket/websocket_transport_client_socket_pool.h
|
| diff --git a/net/socket/websocket_transport_client_socket_pool.h b/net/socket/websocket_transport_client_socket_pool.h
|
| deleted file mode 100644
|
| index f0a94be417f2cffa9acfd04549502ee6bc7ee995..0000000000000000000000000000000000000000
|
| --- a/net/socket/websocket_transport_client_socket_pool.h
|
| +++ /dev/null
|
| @@ -1,246 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#ifndef NET_SOCKET_WEBSOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_
|
| -#define NET_SOCKET_WEBSOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_
|
| -
|
| -#include <list>
|
| -#include <map>
|
| -#include <set>
|
| -#include <string>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/time/time.h"
|
| -#include "base/timer/timer.h"
|
| -#include "net/base/net_export.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/socket/client_socket_pool.h"
|
| -#include "net/socket/client_socket_pool_base.h"
|
| -#include "net/socket/transport_client_socket_pool.h"
|
| -
|
| -namespace net {
|
| -
|
| -class ClientSocketFactory;
|
| -class ClientSocketPoolHistograms;
|
| -class HostResolver;
|
| -class NetLog;
|
| -class WebSocketEndpointLockManager;
|
| -class WebSocketTransportConnectSubJob;
|
| -
|
| -// WebSocketTransportConnectJob handles the host resolution necessary for socket
|
| -// creation and the TCP connect. WebSocketTransportConnectJob also has fallback
|
| -// logic for IPv6 connect() timeouts (which may happen due to networks / routers
|
| -// with broken IPv6 support). Those timeouts take 20s, so rather than make the
|
| -// user wait 20s for the timeout to fire, we use a fallback timer
|
| -// (kIPv6FallbackTimerInMs) and start a connect() to an IPv4 address if the
|
| -// timer fires. Then we race the IPv4 connect(s) against the IPv6 connect(s) and
|
| -// use the socket that completes successfully first or fails last.
|
| -class NET_EXPORT_PRIVATE WebSocketTransportConnectJob : public ConnectJob {
|
| - public:
|
| - WebSocketTransportConnectJob(
|
| - const std::string& group_name,
|
| - RequestPriority priority,
|
| - const scoped_refptr<TransportSocketParams>& params,
|
| - base::TimeDelta timeout_duration,
|
| - const CompletionCallback& callback,
|
| - ClientSocketFactory* client_socket_factory,
|
| - HostResolver* host_resolver,
|
| - ClientSocketHandle* handle,
|
| - Delegate* delegate,
|
| - NetLog* pool_net_log,
|
| - const BoundNetLog& request_net_log);
|
| - ~WebSocketTransportConnectJob() override;
|
| -
|
| - // Unlike normal socket pools, the WebSocketTransportClientPool uses
|
| - // early-binding of sockets.
|
| - ClientSocketHandle* handle() const { return handle_; }
|
| -
|
| - // Stash the callback from RequestSocket() here for convenience.
|
| - const CompletionCallback& callback() const { return callback_; }
|
| -
|
| - const BoundNetLog& request_net_log() const { return request_net_log_; }
|
| -
|
| - // ConnectJob methods.
|
| - LoadState GetLoadState() const override;
|
| -
|
| - private:
|
| - friend class WebSocketTransportConnectSubJob;
|
| - friend class TransportConnectJobHelper;
|
| - friend class WebSocketEndpointLockManager;
|
| -
|
| - // Although it is not strictly necessary, it makes the code simpler if each
|
| - // subjob knows what type it is.
|
| - enum SubJobType { SUB_JOB_IPV4, SUB_JOB_IPV6 };
|
| -
|
| - int DoResolveHost();
|
| - int DoResolveHostComplete(int result);
|
| - int DoTransportConnect();
|
| - int DoTransportConnectComplete(int result);
|
| -
|
| - // Called back from a SubJob when it completes.
|
| - void OnSubJobComplete(int result, WebSocketTransportConnectSubJob* job);
|
| -
|
| - // Called from |fallback_timer_|.
|
| - void StartIPv4JobAsync();
|
| -
|
| - // Begins the host resolution and the TCP connect. Returns OK on success
|
| - // and ERR_IO_PENDING if it cannot immediately service the request.
|
| - // Otherwise, it returns a net error code.
|
| - int ConnectInternal() override;
|
| -
|
| - TransportConnectJobHelper helper_;
|
| -
|
| - // The addresses are divided into IPv4 and IPv6, which are performed partially
|
| - // in parallel. If the list of IPv6 addresses is non-empty, then the IPv6 jobs
|
| - // go first, followed after |kIPv6FallbackTimerInMs| by the IPv4
|
| - // addresses. First sub-job to establish a connection wins.
|
| - scoped_ptr<WebSocketTransportConnectSubJob> ipv4_job_;
|
| - scoped_ptr<WebSocketTransportConnectSubJob> ipv6_job_;
|
| -
|
| - base::OneShotTimer<WebSocketTransportConnectJob> fallback_timer_;
|
| - TransportConnectJobHelper::ConnectionLatencyHistogram race_result_;
|
| - ClientSocketHandle* const handle_;
|
| - CompletionCallback callback_;
|
| - BoundNetLog request_net_log_;
|
| -
|
| - bool had_ipv4_;
|
| - bool had_ipv6_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebSocketTransportConnectJob);
|
| -};
|
| -
|
| -class NET_EXPORT_PRIVATE WebSocketTransportClientSocketPool
|
| - : public TransportClientSocketPool {
|
| - public:
|
| - WebSocketTransportClientSocketPool(int max_sockets,
|
| - int max_sockets_per_group,
|
| - ClientSocketPoolHistograms* histograms,
|
| - HostResolver* host_resolver,
|
| - ClientSocketFactory* client_socket_factory,
|
| - NetLog* net_log);
|
| -
|
| - ~WebSocketTransportClientSocketPool() override;
|
| -
|
| - // Allow another connection to be started to the IPEndPoint that this |handle|
|
| - // is connected to. Used when the WebSocket handshake completes successfully.
|
| - // This only works if the socket is connected, however the caller does not
|
| - // need to explicitly check for this. Instead, ensure that dead sockets are
|
| - // returned to ReleaseSocket() in a timely fashion.
|
| - static void UnlockEndpoint(ClientSocketHandle* handle);
|
| -
|
| - // ClientSocketPool implementation.
|
| - int RequestSocket(const std::string& group_name,
|
| - const void* resolve_info,
|
| - RequestPriority priority,
|
| - ClientSocketHandle* handle,
|
| - const CompletionCallback& callback,
|
| - const BoundNetLog& net_log) override;
|
| - void RequestSockets(const std::string& group_name,
|
| - const void* params,
|
| - int num_sockets,
|
| - const BoundNetLog& net_log) override;
|
| - void CancelRequest(const std::string& group_name,
|
| - ClientSocketHandle* handle) override;
|
| - void ReleaseSocket(const std::string& group_name,
|
| - scoped_ptr<StreamSocket> socket,
|
| - int id) override;
|
| - void FlushWithError(int error) override;
|
| - void CloseIdleSockets() override;
|
| - int IdleSocketCount() const override;
|
| - int IdleSocketCountInGroup(const std::string& group_name) const override;
|
| - LoadState GetLoadState(const std::string& group_name,
|
| - const ClientSocketHandle* handle) const override;
|
| - base::DictionaryValue* GetInfoAsValue(
|
| - const std::string& name,
|
| - const std::string& type,
|
| - bool include_nested_pools) const override;
|
| - base::TimeDelta ConnectionTimeout() const override;
|
| - ClientSocketPoolHistograms* histograms() const override;
|
| -
|
| - // HigherLayeredPool implementation.
|
| - bool IsStalled() const override;
|
| -
|
| - private:
|
| - class ConnectJobDelegate : public ConnectJob::Delegate {
|
| - public:
|
| - explicit ConnectJobDelegate(WebSocketTransportClientSocketPool* owner);
|
| - ~ConnectJobDelegate() override;
|
| -
|
| - void OnConnectJobComplete(int result, ConnectJob* job) override;
|
| -
|
| - private:
|
| - WebSocketTransportClientSocketPool* owner_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(ConnectJobDelegate);
|
| - };
|
| -
|
| - // Store the arguments from a call to RequestSocket() that has stalled so we
|
| - // can replay it when there are available socket slots.
|
| - struct StalledRequest {
|
| - StalledRequest(const scoped_refptr<TransportSocketParams>& params,
|
| - RequestPriority priority,
|
| - ClientSocketHandle* handle,
|
| - const CompletionCallback& callback,
|
| - const BoundNetLog& net_log);
|
| - ~StalledRequest();
|
| - const scoped_refptr<TransportSocketParams> params;
|
| - const RequestPriority priority;
|
| - ClientSocketHandle* const handle;
|
| - const CompletionCallback callback;
|
| - const BoundNetLog net_log;
|
| - };
|
| - friend class ConnectJobDelegate;
|
| - typedef std::map<const ClientSocketHandle*, WebSocketTransportConnectJob*>
|
| - PendingConnectsMap;
|
| - // This is a list so that we can remove requests from the middle, and also
|
| - // so that iterators are not invalidated unless the corresponding request is
|
| - // removed.
|
| - typedef std::list<StalledRequest> StalledRequestQueue;
|
| - typedef std::map<const ClientSocketHandle*, StalledRequestQueue::iterator>
|
| - StalledRequestMap;
|
| -
|
| - void OnConnectJobComplete(int result, WebSocketTransportConnectJob* job);
|
| - void InvokeUserCallbackLater(ClientSocketHandle* handle,
|
| - const CompletionCallback& callback,
|
| - int rv);
|
| - void InvokeUserCallback(ClientSocketHandle* handle,
|
| - const CompletionCallback& callback,
|
| - int rv);
|
| - bool ReachedMaxSocketsLimit() const;
|
| - void HandOutSocket(scoped_ptr<StreamSocket> socket,
|
| - const LoadTimingInfo::ConnectTiming& connect_timing,
|
| - ClientSocketHandle* handle,
|
| - const BoundNetLog& net_log);
|
| - void AddJob(ClientSocketHandle* handle,
|
| - scoped_ptr<WebSocketTransportConnectJob> connect_job);
|
| - bool DeleteJob(ClientSocketHandle* handle);
|
| - const WebSocketTransportConnectJob* LookupConnectJob(
|
| - const ClientSocketHandle* handle) const;
|
| - void ActivateStalledRequest();
|
| - bool DeleteStalledRequest(ClientSocketHandle* handle);
|
| -
|
| - ConnectJobDelegate connect_job_delegate_;
|
| - std::set<const ClientSocketHandle*> pending_callbacks_;
|
| - PendingConnectsMap pending_connects_;
|
| - StalledRequestQueue stalled_request_queue_;
|
| - StalledRequestMap stalled_request_map_;
|
| - ClientSocketPoolHistograms* const histograms_;
|
| - NetLog* const pool_net_log_;
|
| - ClientSocketFactory* const client_socket_factory_;
|
| - HostResolver* const host_resolver_;
|
| - const int max_sockets_;
|
| - int handed_out_socket_count_;
|
| - bool flushing_;
|
| -
|
| - base::WeakPtrFactory<WebSocketTransportClientSocketPool> weak_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebSocketTransportClientSocketPool);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_SOCKET_WEBSOCKET_TRANSPORT_CLIENT_SOCKET_POOL_H_
|
|
|