Chromium Code Reviews| Index: net/socket/sctp_client_socket_pool.h |
| =================================================================== |
| --- net/socket/sctp_client_socket_pool.h (revision 0) |
| +++ net/socket/sctp_client_socket_pool.h (revision 0) |
| @@ -0,0 +1,197 @@ |
| +// Copyright (c) 2011 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_SCTP_CLIENT_SOCKET_POOL_H_ |
| +#define NET_SOCKET_SCTP_CLIENT_SOCKET_POOL_H_ |
| +#pragma once |
| + |
| +#include <string> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/memory/ref_counted.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/time.h" |
| +#include "base/timer.h" |
| +#include "net/base/host_port_pair.h" |
| +#include "net/base/host_resolver.h" |
|
Mike Belshe
2011/04/06 18:32:53
Nix this clone.
|
| +#include "net/socket/client_socket_pool_base.h" |
| +#include "net/socket/client_socket_pool_histograms.h" |
| +#include "net/socket/client_socket_pool.h" |
| + |
| +namespace net { |
| + |
| +class ClientSocketFactory; |
| + |
| +class SCTPSocketParams : public base::RefCounted<SCTPSocketParams> { |
| + public: |
| + SCTPSocketParams(const HostPortPair& host_port_pair, RequestPriority priority, |
| + const GURL& referrer, bool disable_resolver_cache, |
| + bool ignore_limits); |
| + |
| + const HostResolver::RequestInfo& destination() const { return destination_; } |
| + bool ignore_limits() const { return ignore_limits_; } |
| + |
| + private: |
| + friend class base::RefCounted<SCTPSocketParams>; |
| + ~SCTPSocketParams(); |
| + |
| + void Initialize(RequestPriority priority, const GURL& referrer, |
| + bool disable_resolver_cache); |
| + |
| + HostResolver::RequestInfo destination_; |
| + bool ignore_limits_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SCTPSocketParams); |
| +}; |
| + |
| +// SCTPConnectJob handles the host resolution necessary for socket creation |
| +// and the sctp connect. |
| +class SCTPConnectJob : public ConnectJob { |
| + public: |
| + SCTPConnectJob(const std::string& group_name, |
| + const scoped_refptr<SCTPSocketParams>& params, |
| + base::TimeDelta timeout_duration, |
| + ClientSocketFactory* client_socket_factory, |
| + HostResolver* host_resolver, |
| + Delegate* delegate, |
| + NetLog* net_log); |
| + virtual ~SCTPConnectJob(); |
| + |
| + // ConnectJob methods. |
| + virtual LoadState GetLoadState() const; |
| + |
| + private: |
| + enum State { |
| + STATE_RESOLVE_HOST, |
| + STATE_RESOLVE_HOST_COMPLETE, |
| + STATE_SCTP_CONNECT, |
| + STATE_SCTP_CONNECT_COMPLETE, |
| + STATE_NONE, |
| + }; |
| + |
| + void OnIOComplete(int result); |
| + |
| + // Runs the state transition loop. |
| + int DoLoop(int result); |
| + |
| + int DoResolveHost(); |
| + int DoResolveHostComplete(int result); |
| + int DoSCTPConnect(); |
| + int DoSCTPConnectComplete(int result); |
| + |
| + // Begins the host resolution and the SCTP connect. Returns OK on success |
| + // and ERR_IO_PENDING if it cannot immediately service the request. |
| + // Otherwise, it returns a net error code. |
| + virtual int ConnectInternal(); |
| + |
| + scoped_refptr<SCTPSocketParams> params_; |
| + ClientSocketFactory* const client_socket_factory_; |
| + CompletionCallbackImpl<SCTPConnectJob> callback_; |
| + SingleRequestHostResolver resolver_; |
| + AddressList addresses_; |
| + State next_state_; |
| + |
| + // The time Connect() was called. |
| + base::TimeTicks start_time_; |
| + |
| + // The time the connect was started (after DNS finished). |
| + base::TimeTicks connect_start_time_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SCTPConnectJob); |
| +}; |
| + |
| +class SCTPClientSocketPool : public ClientSocketPool { |
| + public: |
| + SCTPClientSocketPool( |
| + int max_sockets, |
| + int max_sockets_per_group, |
| + ClientSocketPoolHistograms* histograms, |
| + HostResolver* host_resolver, |
| + ClientSocketFactory* client_socket_factory, |
| + NetLog* net_log); |
| + |
| + virtual ~SCTPClientSocketPool(); |
| + |
| + // ClientSocketPool methods: |
| + |
| + virtual int RequestSocket(const std::string& group_name, |
| + const void* resolve_info, |
| + RequestPriority priority, |
| + ClientSocketHandle* handle, |
| + CompletionCallback* callback, |
| + const BoundNetLog& net_log); |
| + |
| + virtual void RequestSockets(const std::string& group_name, |
| + const void* params, |
| + int num_sockets, |
| + const BoundNetLog& net_log); |
| + |
| + virtual void CancelRequest(const std::string& group_name, |
| + ClientSocketHandle* handle); |
| + |
| + virtual void ReleaseSocket(const std::string& group_name, |
| + ClientSocket* socket, |
| + int id); |
| + |
| + virtual void Flush(); |
| + |
| + virtual void CloseIdleSockets(); |
| + |
| + virtual int IdleSocketCount() const; |
| + |
| + virtual int IdleSocketCountInGroup(const std::string& group_name) const; |
| + |
| + virtual LoadState GetLoadState(const std::string& group_name, |
| + const ClientSocketHandle* handle) const; |
| + |
| + virtual DictionaryValue* GetInfoAsValue(const std::string& name, |
| + const std::string& type, |
| + bool include_nested_pools) const; |
| + |
| + virtual base::TimeDelta ConnectionTimeout() const; |
| + |
| + virtual ClientSocketPoolHistograms* histograms() const; |
| + |
| + private: |
| + typedef ClientSocketPoolBase<SCTPSocketParams> PoolBase; |
| + |
| + class SCTPConnectJobFactory |
| + : public PoolBase::ConnectJobFactory { |
| + public: |
| + SCTPConnectJobFactory(ClientSocketFactory* client_socket_factory, |
| + HostResolver* host_resolver, |
| + NetLog* net_log) |
| + : client_socket_factory_(client_socket_factory), |
| + host_resolver_(host_resolver), |
| + net_log_(net_log) {} |
| + |
| + virtual ~SCTPConnectJobFactory() {} |
| + |
| + // ClientSocketPoolBase::ConnectJobFactory methods. |
| + |
| + virtual ConnectJob* NewConnectJob( |
| + const std::string& group_name, |
| + const PoolBase::Request& request, |
| + ConnectJob::Delegate* delegate) const; |
| + |
| + virtual base::TimeDelta ConnectionTimeout() const; |
| + |
| + private: |
| + ClientSocketFactory* const client_socket_factory_; |
| + HostResolver* const host_resolver_; |
| + NetLog* net_log_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SCTPConnectJobFactory); |
| + }; |
| + |
| + PoolBase base_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(SCTPClientSocketPool); |
| +}; |
| + |
| +REGISTER_SOCKET_PARAMS_FOR_POOL(SCTPClientSocketPool, SCTPSocketParams); |
| + |
| +} // namespace net |
| + |
| +#endif // NET_SOCKET_SCTP_CLIENT_SOCKET_POOL_H_ |
| Property changes on: net/socket/sctp_client_socket_pool.h |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |