// Copyright (c) 2012 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_HTTP_HTTP_PIPELINED_CONNECTION_H_ #define NET_HTTP_HTTP_PIPELINED_CONNECTION_H_ #include "net/base/net_export.h" #include "net/base/net_log.h" #include "net/socket/ssl_client_socket.h" namespace net { class BoundNetLog; class ClientSocketHandle; class HostPortPair; class HttpPipelinedStream; class ProxyInfo; struct SSLConfig; class NET_EXPORT_PRIVATE HttpPipelinedConnection { public: enum Feedback { OK, PIPELINE_SOCKET_ERROR, OLD_HTTP_VERSION, MUST_CLOSE_CONNECTION, AUTHENTICATION_REQUIRED, }; class Delegate { public: // Called when a pipeline has newly available capacity. This may be because // the first request has been sent and the pipeline is now active. Or, it // may be because a request successfully completed. virtual void OnPipelineHasCapacity(HttpPipelinedConnection* pipeline) = 0; // Called every time a pipeline receives headers. Lets the delegate know if // the headers indicate that pipelining can be used. virtual void OnPipelineFeedback(HttpPipelinedConnection* pipeline, Feedback feedback) = 0; }; class Factory { public: virtual ~Factory() {} virtual HttpPipelinedConnection* CreateNewPipeline( ClientSocketHandle* connection, Delegate* delegate, const HostPortPair& origin, const SSLConfig& used_ssl_config, const ProxyInfo& used_proxy_info, const BoundNetLog& net_log, bool was_npn_negotiated, NextProto protocol_negotiated) = 0; }; virtual ~HttpPipelinedConnection() {} // Returns a new stream that uses this pipeline. virtual HttpPipelinedStream* CreateNewStream() = 0; // The number of streams currently associated with this pipeline. virtual int depth() const = 0; // True if this pipeline can accept new HTTP requests. False if a fatal error // has occurred. virtual bool usable() const = 0; // True if this pipeline has bound one request and is ready for additional // requests. virtual bool active() const = 0; // The SSLConfig used to establish this connection. virtual const SSLConfig& used_ssl_config() const = 0; // The ProxyInfo used to establish this connection. virtual const ProxyInfo& used_proxy_info() const = 0; // The BoundNetLog of this pipelined connection. virtual const BoundNetLog& net_log() const = 0; // True if this connection was NPN negotiated. virtual bool was_npn_negotiated() const = 0; // Protocol negotiated with the server. virtual NextProto protocol_negotiated() const = 0; }; } // namespace net #endif // NET_HTTP_HTTP_PIPELINED_CONNECTION_H_