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

Unified Diff: net/spdy/spdy_proxy_client_socket.h

Issue 3432009: Add a new class SpdyProxyClientSocket which implements ClientSocket... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 3 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
« no previous file with comments | « net/spdy/spdy_http_utils.cc ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_proxy_client_socket.h
===================================================================
--- net/spdy/spdy_proxy_client_socket.h (revision 0)
+++ net/spdy/spdy_proxy_client_socket.h (revision 0)
@@ -0,0 +1,183 @@
+// Copyright (c) 2010 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_SPDY_SPDY_PROXY_CLIENT_SOCKET_H_
+#define NET_SPDY_SPDY_PROXY_CLIENT_SOCKET_H_
+#pragma once
+
+#include <string>
+#include <list>
+
+#include "base/basictypes.h"
+#include "base/ref_counted.h"
+#include "net/base/completion_callback.h"
+#include "net/base/host_port_pair.h"
+#include "net/base/net_log.h"
+#include "net/http/http_auth_controller.h"
+#include "net/http/http_request_headers.h"
+#include "net/http/http_request_info.h"
+#include "net/http/http_response_info.h"
+#include "net/socket/client_socket.h"
+#include "net/spdy/spdy_protocol.h"
+#include "net/spdy/spdy_session.h"
+#include "net/spdy/spdy_stream.h"
+
+
+class GURL;
+
+namespace net {
+
+class AddressList;
+class ClientSocketHandle;
+class HttpStream;
+class IOBuffer;
+class SpdySession;
+class SpdyStream;
+
+class SpdyProxyClientSocket : public ClientSocket, public SpdyStream::Delegate {
+ public:
+ // Create a socket on top of the |spdy_stream| by sending a SYN_STREAM
+ // CONNECT frame for |endpoint|. After the SYN_REPLY is received,
+ // any data read/written to the socket will be transferred in data
+ // frames.
+ SpdyProxyClientSocket(SpdyStream* spdy_stream,
+ const std::string& user_agent,
+ const HostPortPair& endpoint,
+ const GURL& url,
+ const HostPortPair& proxy_server,
+ HttpAuthCache* auth_cache,
+ HttpAuthHandlerFactory* auth_handler_factory);
+
+
+ // On destruction Disconnect() is called.
+ virtual ~SpdyProxyClientSocket();
+
+ const scoped_refptr<HttpAuthController>& auth_controller() {
+ return auth_;
+ }
+
+ const HttpResponseInfo* GetConnectResponseInfo() const {
+ return response_.headers ? &response_ : NULL;
+ }
+
+ // ClientSocket methods:
+
+ virtual int Connect(CompletionCallback* callback);
+ virtual void Disconnect();
+ virtual bool IsConnected() const;
+ virtual bool IsConnectedAndIdle() const;
+ virtual const BoundNetLog& NetLog() const { return net_log_; }
+ virtual void SetSubresourceSpeculation();
+ virtual void SetOmniboxSpeculation();
+ virtual bool WasEverUsed() const;
+
+ // Socket methods:
+
+ virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback);
+ virtual int Write(IOBuffer* buf, int buf_len, CompletionCallback* callback);
+
+ virtual bool SetReceiveBufferSize(int32 size);
+ virtual bool SetSendBufferSize(int32 size);
+
+ virtual int GetPeerAddress(AddressList* address) const;
+
+ // SpdyStream::Delegate methods:
+
+ // Called when SYN frame has been sent.
+ // Returns true if no more data to be sent after SYN frame.
+ virtual bool OnSendHeadersComplete(int status);
+
+ // Called when stream is ready to send data.
+ // Returns network error code. OK when it successfully sent data.
+ virtual int OnSendBody();
+
+ // Called when data has been sent. |status| indicates network error
+ // or number of bytes has been sent.
+ // Returns true if no more data to be sent.
+ virtual bool OnSendBodyComplete(int status);
+
+ // Called when SYN_STREAM or SYN_REPLY received. |status| indicates network
+ // error. Returns network error code.
+ virtual int OnResponseReceived(const spdy::SpdyHeaderBlock& response,
+ base::Time response_time,
+ int status);
+
+ // Called when data is received.
+ virtual void OnDataReceived(const char* data, int length);
+
+ // Called when data is sent.
+ virtual void OnDataSent(int length);
+
+ // Called when SpdyStream is closed.
+ virtual void OnClose(int status);
+
+ private:
+ enum State {
+ STATE_NONE,
+ STATE_GENERATE_AUTH_TOKEN,
+ STATE_GENERATE_AUTH_TOKEN_COMPLETE,
+ STATE_SEND_REQUEST,
+ STATE_SEND_REQUEST_COMPLETE,
+ STATE_READ_REPLY_COMPLETE,
+ STATE_DONE,
+ };
+
+ void OnIOComplete(int result);
+
+ int DoLoop(int last_io_result);
+ int DoGenerateAuthToken();
+ int DoGenerateAuthTokenComplete(int result);
+ int DoSendRequest();
+ int DoSendRequestComplete(int result);
+ int DoReadReplyComplete(int result);
+
+ // Populates |user_buffer_| with as much read data as possible
+ // and returns the number of bytes read.
+ int PopulateUserReadBuffer();
+
+ CompletionCallbackImpl<SpdyProxyClientSocket> io_callback_;
+ State next_state_;
+
+ // Pointer to the SPDY Stream that this sits on top of.
+ scoped_refptr<SpdyStream> spdy_stream_;
+
+ // Stores the callback to the layer above, called on completing Read() or
+ // Connect().
+ CompletionCallback* read_callback_;
+ // Stores the callback to the layer above, called on completing Write().
+ CompletionCallback* write_callback_;
+
+ // CONNECT request and response.
+ HttpRequestInfo request_;
+ HttpResponseInfo response_;
+
+ // The hostname and port of the endpoint. This is not necessarily the one
+ // specified by the URL, due to Alternate-Protocol or fixed testing ports.
+ const HostPortPair endpoint_;
+ scoped_refptr<HttpAuthController> auth_;
+
+ // We buffer the response body as it arrives asynchronously from the stream.
+ std::list<scoped_refptr<DrainableIOBuffer> > read_buffer_;
+
+ // User provided buffer for the Read() response.
+ scoped_refptr<DrainableIOBuffer> user_buffer_;
+
+ // User specified number of bytes to be written.
+ int write_buffer_len_;
+ // Number of bytes written which have not been confirmed
+ int write_bytes_outstanding_;
+
+ // True if read has ever returned zero for eof.
+ bool eof_has_been_read_;
+ // True if the transport socket has ever sent data.
+ bool was_ever_used_;
+
+ const BoundNetLog net_log_;
+
+ DISALLOW_COPY_AND_ASSIGN(SpdyProxyClientSocket);
+};
+
+} // namespace net
+
+#endif // NET_SPDY_SPDY_PROXY_CLIENT_SOCKET_H_
Property changes on: net/spdy/spdy_proxy_client_socket.h
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « net/spdy/spdy_http_utils.cc ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698