Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(472)

Unified Diff: net/socket/sctp_client_socket_pool.h

Issue 6800009: Attn: Mike Belshe Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698