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 |