summaryrefslogtreecommitdiff
path: root/chromium/net/http/http_pipelined_connection.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/http/http_pipelined_connection.h')
-rw-r--r--chromium/net/http/http_pipelined_connection.h93
1 files changed, 93 insertions, 0 deletions
diff --git a/chromium/net/http/http_pipelined_connection.h b/chromium/net/http/http_pipelined_connection.h
new file mode 100644
index 00000000000..d0d3599e3f1
--- /dev/null
+++ b/chromium/net/http/http_pipelined_connection.h
@@ -0,0 +1,93 @@
+// 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_