Index: net/socket_stream/socket_stream.h |
diff --git a/net/socket_stream/socket_stream.h b/net/socket_stream/socket_stream.h |
deleted file mode 100644 |
index 7387eb68a9b338d58c7fd26aef7a5ce8eef88eba..0000000000000000000000000000000000000000 |
--- a/net/socket_stream/socket_stream.h |
+++ /dev/null |
@@ -1,404 +0,0 @@ |
-// 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_SOCKET_STREAM_SOCKET_STREAM_H_ |
-#define NET_SOCKET_STREAM_SOCKET_STREAM_H_ |
- |
-#include <deque> |
-#include <map> |
-#include <string> |
- |
-#include "base/memory/linked_ptr.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "net/base/address_list.h" |
-#include "net/base/completion_callback.h" |
-#include "net/base/io_buffer.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/net_export.h" |
-#include "net/base/net_log.h" |
-#include "net/base/privacy_mode.h" |
-#include "net/cookies/cookie_store.h" |
-#include "net/proxy/proxy_service.h" |
-#include "net/ssl/ssl_config_service.h" |
-#include "net/url_request/url_request.h" |
- |
-namespace net { |
- |
-class AuthChallengeInfo; |
-class CertVerifier; |
-class ChannelIDService; |
-class ClientSocketFactory; |
-class ClientSocketHandle; |
-class CookieOptions; |
-class HostResolver; |
-class HttpAuthController; |
-class SSLInfo; |
-class SingleRequestHostResolver; |
-class SocketStreamMetrics; |
-class TransportSecurityState; |
-class URLRequestContext; |
- |
-// SocketStream is used to implement Web Sockets. |
-// It provides plain full-duplex stream with proxy and SSL support. |
-// For proxy authentication, only basic mechanisum is supported. It will try |
-// authentication identity for proxy URL first. If server requires proxy |
-// authentication, it will try authentication identity for realm that server |
-// requests. |
-class NET_EXPORT SocketStream |
- : public base::RefCountedThreadSafe<SocketStream> { |
- public: |
- // Derive from this class and add your own data members to associate extra |
- // information with a SocketStream. Use GetUserData(key) and |
- // SetUserData(key, data). |
- class UserData { |
- public: |
- UserData() {} |
- virtual ~UserData() {} |
- }; |
- |
- class NET_EXPORT Delegate { |
- public: |
- virtual int OnStartOpenConnection(SocketStream* socket, |
- const CompletionCallback& callback); |
- |
- // Called when a socket stream has been connected. The socket stream is |
- // allowed to buffer pending send data at most |max_pending_send_allowed| |
- // bytes. A client of the socket stream should keep track of how much |
- // pending send data it has and must not call SendData() if the pending |
- // data goes over |max_pending_send_allowed| bytes. |
- virtual void OnConnected(SocketStream* socket, |
- int max_pending_send_allowed) = 0; |
- |
- // Called when |amount_sent| bytes of data are sent. |
- virtual void OnSentData(SocketStream* socket, |
- int amount_sent) = 0; |
- |
- // Called when |len| bytes of |data| are received. |
- virtual void OnReceivedData(SocketStream* socket, |
- const char* data, int len) = 0; |
- |
- // Called when the socket stream has been closed. |
- virtual void OnClose(SocketStream* socket) = 0; |
- |
- // Called when proxy authentication required. |
- // The delegate should call RestartWithAuth() if credential for |auth_info| |
- // is found in password database, or call Close() to close the connection. |
- virtual void OnAuthRequired(SocketStream* socket, |
- AuthChallengeInfo* auth_info); |
- |
- // Called when using SSL and the server responds with a certificate with an |
- // error. The delegate should call CancelBecauseOfCertError() or |
- // ContinueDespiteCertError() to resume connection handling. |
- virtual void OnSSLCertificateError(SocketStream* socket, |
- const SSLInfo& ssl_info, |
- bool fatal); |
- |
- // Called when an error occured. |
- // This is only for error reporting to the delegate. |
- // |error| is net::Error. |
- virtual void OnError(const SocketStream* socket, int error) {} |
- |
- // Called when reading cookies to allow the delegate to block access to the |
- // cookie. |
- virtual bool CanGetCookies(SocketStream* socket, const GURL& url); |
- |
- // Called when a cookie is set to allow the delegate to block access to the |
- // cookie. |
- virtual bool CanSetCookie(SocketStream* request, |
- const GURL& url, |
- const std::string& cookie_line, |
- CookieOptions* options); |
- |
- protected: |
- virtual ~Delegate() {} |
- }; |
- |
- SocketStream(const GURL& url, Delegate* delegate, URLRequestContext* context, |
- CookieStore* cookie_store); |
- |
- // The user data allows the clients to associate data with this job. |
- // Multiple user data values can be stored under different keys. |
- // This job will TAKE OWNERSHIP of the given data pointer, and will |
- // delete the object if it is changed or the job is destroyed. |
- UserData* GetUserData(const void* key) const; |
- void SetUserData(const void* key, UserData* data); |
- |
- const GURL& url() const { return url_; } |
- bool is_secure() const; |
- const AddressList& address_list() const { return addresses_; } |
- Delegate* delegate() const { return delegate_; } |
- int max_pending_send_allowed() const { return max_pending_send_allowed_; } |
- |
- URLRequestContext* context() { return context_; } |
- |
- const SSLConfig& server_ssl_config() const { return server_ssl_config_; } |
- PrivacyMode privacy_mode() const { return privacy_mode_; } |
- void CheckPrivacyMode(); |
- |
- BoundNetLog* net_log() { return &net_log_; } |
- |
- // Opens the connection on the IO thread. |
- // Once the connection is established, calls delegate's OnConnected. |
- virtual void Connect(); |
- |
- // Buffers |data| of |len| bytes for send and returns true if successful. |
- // If size of buffered data exceeds |max_pending_send_allowed_|, sends no |
- // data and returns false. |len| must be positive. |
- virtual bool SendData(const char* data, int len); |
- |
- // Requests to close the connection. |
- // Once the connection is closed, calls delegate's OnClose. |
- virtual void Close(); |
- |
- // Restarts with authentication info. |
- // Should be used for response of OnAuthRequired. |
- virtual void RestartWithAuth(const AuthCredentials& credentials); |
- |
- // Detach delegate. Call before delegate is deleted. |
- // Once delegate is detached, close the socket stream and never call delegate |
- // back. |
- virtual void DetachDelegate(); |
- |
- // Detach the context. |
- virtual void DetachContext(); |
- |
- const ProxyServer& proxy_server() const; |
- |
- // Sets an alternative ClientSocketFactory. Doesn't take ownership of |
- // |factory|. For testing purposes only. |
- void SetClientSocketFactory(ClientSocketFactory* factory); |
- |
- // Cancels the connection because of an error. |
- // |error| is net::Error which represents the error. |
- void CancelWithError(int error); |
- |
- // Cancels the connection because of receiving a certificate with an error. |
- void CancelWithSSLError(const SSLInfo& ssl_info); |
- |
- // Continues to establish the connection in spite of an error. Usually this |
- // case happens because users allow certificate with an error by manual |
- // actions on alert dialog or browser cached such kinds of user actions. |
- void ContinueDespiteError(); |
- |
- CookieStore* cookie_store() const; |
- |
- protected: |
- friend class base::RefCountedThreadSafe<SocketStream>; |
- virtual ~SocketStream(); |
- |
- Delegate* delegate_; |
- |
- private: |
- FRIEND_TEST_ALL_PREFIXES(SocketStreamTest, IOPending); |
- FRIEND_TEST_ALL_PREFIXES(SocketStreamTest, SwitchAfterPending); |
- FRIEND_TEST_ALL_PREFIXES(SocketStreamTest, |
- NullContextSocketStreamShouldNotCrash); |
- |
- friend class WebSocketThrottleTest; |
- |
- typedef std::map<const void*, linked_ptr<UserData> > UserDataMap; |
- typedef std::deque< scoped_refptr<IOBufferWithSize> > PendingDataQueue; |
- |
- class RequestHeaders : public IOBuffer { |
- public: |
- RequestHeaders() : IOBuffer() {} |
- |
- void SetDataOffset(size_t offset) { |
- data_ = const_cast<char*>(headers_.data()) + offset; |
- } |
- |
- std::string headers_; |
- |
- private: |
- ~RequestHeaders() override; |
- }; |
- |
- class ResponseHeaders : public IOBuffer { |
- public: |
- ResponseHeaders(); |
- |
- void SetDataOffset(size_t offset) { data_ = headers_.get() + offset; } |
- char* headers() const { return headers_.get(); } |
- void Reset() { headers_.reset(); } |
- void Realloc(size_t new_size); |
- |
- private: |
- ~ResponseHeaders() override; |
- |
- scoped_ptr<char, base::FreeDeleter> headers_; |
- }; |
- |
- enum State { |
- STATE_NONE, |
- STATE_BEFORE_CONNECT, |
- STATE_BEFORE_CONNECT_COMPLETE, |
- STATE_RESOLVE_PROXY, |
- STATE_RESOLVE_PROXY_COMPLETE, |
- STATE_RESOLVE_HOST, |
- STATE_RESOLVE_HOST_COMPLETE, |
- STATE_RESOLVE_PROTOCOL, |
- STATE_RESOLVE_PROTOCOL_COMPLETE, |
- STATE_TCP_CONNECT, |
- STATE_TCP_CONNECT_COMPLETE, |
- STATE_GENERATE_PROXY_AUTH_TOKEN, |
- STATE_GENERATE_PROXY_AUTH_TOKEN_COMPLETE, |
- STATE_WRITE_TUNNEL_HEADERS, |
- STATE_WRITE_TUNNEL_HEADERS_COMPLETE, |
- STATE_READ_TUNNEL_HEADERS, |
- STATE_READ_TUNNEL_HEADERS_COMPLETE, |
- STATE_SOCKS_CONNECT, |
- STATE_SOCKS_CONNECT_COMPLETE, |
- STATE_SECURE_PROXY_CONNECT, |
- STATE_SECURE_PROXY_CONNECT_COMPLETE, |
- STATE_SECURE_PROXY_HANDLE_CERT_ERROR, |
- STATE_SECURE_PROXY_HANDLE_CERT_ERROR_COMPLETE, |
- STATE_SSL_CONNECT, |
- STATE_SSL_CONNECT_COMPLETE, |
- STATE_SSL_HANDLE_CERT_ERROR, |
- STATE_SSL_HANDLE_CERT_ERROR_COMPLETE, |
- STATE_READ_WRITE, |
- STATE_AUTH_REQUIRED, |
- STATE_CLOSE, |
- }; |
- |
- enum ProxyMode { |
- kDirectConnection, // If using a direct connection |
- kTunnelProxy, // If using a tunnel (CONNECT method as HTTPS) |
- kSOCKSProxy, // If using a SOCKS proxy |
- }; |
- |
- // Use the same number as HttpNetworkTransaction::kMaxHeaderBufSize. |
- enum { kMaxTunnelResponseHeadersSize = 32768 }; // 32 kilobytes. |
- |
- // Used for WebSocketThrottleTest. |
- void set_addresses(const AddressList& addresses); |
- |
- void DoClose(); |
- |
- // Finishes the job. |
- // Calls OnError and OnClose of delegate, and no more |
- // notifications will be sent to delegate. |
- void Finish(int result); |
- |
- int DidEstablishConnection(); |
- int DidReceiveData(int result); |
- // Given the number of bytes sent, |
- // - notifies the |delegate_| and |metrics_| of this event. |
- // - drains sent data from |current_write_buf_|. |
- // - if |current_write_buf_| has been fully sent, sets NULL to |
- // |current_write_buf_| to get ready for next write. |
- // and then, returns OK. |
- void DidSendData(int result); |
- |
- void OnIOCompleted(int result); |
- void OnReadCompleted(int result); |
- void OnWriteCompleted(int result); |
- |
- void DoLoop(int result); |
- |
- int DoBeforeConnect(); |
- int DoBeforeConnectComplete(int result); |
- int DoResolveProxy(); |
- int DoResolveProxyComplete(int result); |
- int DoResolveHost(); |
- int DoResolveHostComplete(int result); |
- int DoResolveProtocol(int result); |
- int DoResolveProtocolComplete(int result); |
- int DoTcpConnect(int result); |
- int DoTcpConnectComplete(int result); |
- int DoGenerateProxyAuthToken(); |
- int DoGenerateProxyAuthTokenComplete(int result); |
- int DoWriteTunnelHeaders(); |
- int DoWriteTunnelHeadersComplete(int result); |
- int DoReadTunnelHeaders(); |
- int DoReadTunnelHeadersComplete(int result); |
- int DoSOCKSConnect(); |
- int DoSOCKSConnectComplete(int result); |
- int DoSecureProxyConnect(); |
- int DoSecureProxyConnectComplete(int result); |
- int DoSecureProxyHandleCertError(int result); |
- int DoSecureProxyHandleCertErrorComplete(int result); |
- int DoSSLConnect(); |
- int DoSSLConnectComplete(int result); |
- int DoSSLHandleCertError(int result); |
- int DoSSLHandleCertErrorComplete(int result); |
- int DoReadWrite(int result); |
- |
- GURL ProxyAuthOrigin() const; |
- int HandleAuthChallenge(const HttpResponseHeaders* headers); |
- int HandleCertificateRequest(int result, SSLConfig* ssl_config); |
- void DoAuthRequired(); |
- void DoRestartWithAuth(); |
- |
- int HandleCertificateError(int result); |
- int AllowCertErrorForReconnection(SSLConfig* ssl_config); |
- |
- // Returns the sum of the size of buffers in |pending_write_bufs_|. |
- size_t GetTotalSizeOfPendingWriteBufs() const; |
- |
- BoundNetLog net_log_; |
- |
- GURL url_; |
- // The number of bytes allowed to be buffered in this object. If the size of |
- // buffered data which is |
- // current_write_buf_.BytesRemaining() + |
- // sum of the size of buffers in |pending_write_bufs_| |
- // exceeds this limit, SendData() fails. |
- int max_pending_send_allowed_; |
- URLRequestContext* context_; |
- |
- UserDataMap user_data_; |
- |
- State next_state_; |
- ClientSocketFactory* factory_; |
- |
- ProxyMode proxy_mode_; |
- |
- GURL proxy_url_; |
- ProxyService::PacRequest* pac_request_; |
- ProxyInfo proxy_info_; |
- |
- scoped_refptr<HttpAuthController> proxy_auth_controller_; |
- |
- scoped_refptr<RequestHeaders> tunnel_request_headers_; |
- size_t tunnel_request_headers_bytes_sent_; |
- scoped_refptr<ResponseHeaders> tunnel_response_headers_; |
- int tunnel_response_headers_capacity_; |
- int tunnel_response_headers_len_; |
- |
- scoped_ptr<SingleRequestHostResolver> resolver_; |
- AddressList addresses_; |
- scoped_ptr<ClientSocketHandle> connection_; |
- |
- SSLConfig server_ssl_config_; |
- SSLConfig proxy_ssl_config_; |
- PrivacyMode privacy_mode_; |
- |
- CompletionCallback io_callback_; |
- |
- scoped_refptr<IOBuffer> read_buf_; |
- int read_buf_size_; |
- |
- // Buffer to hold data to pass to socket_. |
- scoped_refptr<DrainableIOBuffer> current_write_buf_; |
- // True iff there's no error and this instance is waiting for completion of |
- // Write operation by socket_. |
- bool waiting_for_write_completion_; |
- PendingDataQueue pending_write_bufs_; |
- |
- bool closing_; |
- bool server_closed_; |
- |
- scoped_ptr<SocketStreamMetrics> metrics_; |
- |
- // Cookie store to use for this socket stream. |
- scoped_refptr<CookieStore> cookie_store_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SocketStream); |
-}; |
- |
-} // namespace net |
- |
-#endif // NET_SOCKET_STREAM_SOCKET_STREAM_H_ |