/external/chromium/net/http/http_proxy_client_socket_pool.h
https://gitlab.com/brian0218/rk3066_r-box_android4.2.2_sdk · C Header · 265 lines · 192 code · 50 blank · 23 comment · 0 complexity · f3e0f8638d05fc1caf588eeadd95e5bf MD5 · raw file
- // 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_HTTP_HTTP_PROXY_CLIENT_SOCKET_POOL_H_
- #define NET_HTTP_HTTP_PROXY_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 "net/base/host_port_pair.h"
- #include "net/http/http_auth.h"
- #include "net/http/http_response_info.h"
- #include "net/http/proxy_client_socket.h"
- #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 HostResolver;
- class HttpAuthCache;
- class HttpAuthHandlerFactory;
- class SSLClientSocketPool;
- class SSLSocketParams;
- class SpdySessionPool;
- class SpdyStream;
- class TransportClientSocketPool;
- class TransportSocketParams;
- // HttpProxySocketParams only needs the socket params for one of the proxy
- // types. The other param must be NULL. When using an HTTP Proxy,
- // |transport_params| must be set. When using an HTTPS Proxy, |ssl_params|
- // must be set.
- class HttpProxySocketParams : public base::RefCounted<HttpProxySocketParams> {
- public:
- HttpProxySocketParams(
- const scoped_refptr<TransportSocketParams>& transport_params,
- const scoped_refptr<SSLSocketParams>& ssl_params,
- const GURL& request_url,
- const std::string& user_agent,
- HostPortPair endpoint,
- HttpAuthCache* http_auth_cache,
- HttpAuthHandlerFactory* http_auth_handler_factory,
- SpdySessionPool* spdy_session_pool,
- bool tunnel);
- const scoped_refptr<TransportSocketParams>& transport_params() const {
- return transport_params_;
- }
- const scoped_refptr<SSLSocketParams>& ssl_params() const {
- return ssl_params_;
- }
- const GURL& request_url() const { return request_url_; }
- const std::string& user_agent() const { return user_agent_; }
- const HostPortPair& endpoint() const { return endpoint_; }
- HttpAuthCache* http_auth_cache() const { return http_auth_cache_; }
- HttpAuthHandlerFactory* http_auth_handler_factory() const {
- return http_auth_handler_factory_;
- }
- SpdySessionPool* spdy_session_pool() {
- return spdy_session_pool_;
- }
- const HostResolver::RequestInfo& destination() const;
- bool tunnel() const { return tunnel_; }
- bool ignore_limits() const { return ignore_limits_; }
- #ifdef ANDROID
- // Gets the UID of the calling process
- bool getUID(uid_t *uid) const;
- void setUID(uid_t uid);
- #endif
- private:
- friend class base::RefCounted<HttpProxySocketParams>;
- ~HttpProxySocketParams();
- const scoped_refptr<TransportSocketParams> transport_params_;
- const scoped_refptr<SSLSocketParams> ssl_params_;
- SpdySessionPool* spdy_session_pool_;
- const GURL request_url_;
- const std::string user_agent_;
- const HostPortPair endpoint_;
- HttpAuthCache* const http_auth_cache_;
- HttpAuthHandlerFactory* const http_auth_handler_factory_;
- const bool tunnel_;
- bool ignore_limits_;
- DISALLOW_COPY_AND_ASSIGN(HttpProxySocketParams);
- };
- // HttpProxyConnectJob optionally establishes a tunnel through the proxy
- // server after connecting the underlying transport socket.
- class HttpProxyConnectJob : public ConnectJob {
- public:
- HttpProxyConnectJob(const std::string& group_name,
- const scoped_refptr<HttpProxySocketParams>& params,
- const base::TimeDelta& timeout_duration,
- TransportClientSocketPool* transport_pool,
- SSLClientSocketPool* ssl_pool,
- HostResolver* host_resolver,
- Delegate* delegate,
- NetLog* net_log);
- virtual ~HttpProxyConnectJob();
- // ConnectJob methods.
- virtual LoadState GetLoadState() const;
- virtual void GetAdditionalErrorState(ClientSocketHandle* handle);
- private:
- enum State {
- STATE_TCP_CONNECT,
- STATE_TCP_CONNECT_COMPLETE,
- STATE_SSL_CONNECT,
- STATE_SSL_CONNECT_COMPLETE,
- STATE_HTTP_PROXY_CONNECT,
- STATE_HTTP_PROXY_CONNECT_COMPLETE,
- STATE_SPDY_PROXY_CREATE_STREAM,
- STATE_SPDY_PROXY_CREATE_STREAM_COMPLETE,
- STATE_SPDY_PROXY_CONNECT_COMPLETE,
- STATE_NONE,
- };
- void OnIOComplete(int result);
- // Runs the state transition loop.
- int DoLoop(int result);
- // Connecting to HTTP Proxy
- int DoTransportConnect();
- int DoTransportConnectComplete(int result);
- // Connecting to HTTPS Proxy
- int DoSSLConnect();
- int DoSSLConnectComplete(int result);
- int DoHttpProxyConnect();
- int DoHttpProxyConnectComplete(int result);
- int DoSpdyProxyCreateStream();
- int DoSpdyProxyCreateStreamComplete(int result);
- // Begins the tcp connection and the optional Http proxy tunnel. If the
- // request is not immediately servicable (likely), the request will return
- // ERR_IO_PENDING. An OK return from this function or the callback means
- // that the connection is established; ERR_PROXY_AUTH_REQUESTED means
- // that the tunnel needs authentication credentials, the socket will be
- // returned in this case, and must be release back to the pool; or
- // a standard net error code will be returned.
- virtual int ConnectInternal();
- scoped_refptr<HttpProxySocketParams> params_;
- TransportClientSocketPool* const transport_pool_;
- SSLClientSocketPool* const ssl_pool_;
- HostResolver* const resolver_;
- State next_state_;
- CompletionCallbackImpl<HttpProxyConnectJob> callback_;
- scoped_ptr<ClientSocketHandle> transport_socket_handle_;
- scoped_ptr<ProxyClientSocket> transport_socket_;
- bool using_spdy_;
- HttpResponseInfo error_response_info_;
- scoped_refptr<SpdyStream> spdy_stream_;
- DISALLOW_COPY_AND_ASSIGN(HttpProxyConnectJob);
- };
- class HttpProxyClientSocketPool : public ClientSocketPool {
- public:
- HttpProxyClientSocketPool(
- int max_sockets,
- int max_sockets_per_group,
- ClientSocketPoolHistograms* histograms,
- HostResolver* host_resolver,
- TransportClientSocketPool* transport_pool,
- SSLClientSocketPool* ssl_pool,
- NetLog* net_log);
- virtual ~HttpProxyClientSocketPool();
- // ClientSocketPool methods:
- virtual int RequestSocket(const std::string& group_name,
- const void* connect_params,
- 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<HttpProxySocketParams> PoolBase;
- class HttpProxyConnectJobFactory : public PoolBase::ConnectJobFactory {
- public:
- HttpProxyConnectJobFactory(
- TransportClientSocketPool* transport_pool,
- SSLClientSocketPool* ssl_pool,
- HostResolver* host_resolver,
- NetLog* net_log);
- // ClientSocketPoolBase::ConnectJobFactory methods.
- virtual ConnectJob* NewConnectJob(const std::string& group_name,
- const PoolBase::Request& request,
- ConnectJob::Delegate* delegate) const;
- virtual base::TimeDelta ConnectionTimeout() const { return timeout_; }
- private:
- TransportClientSocketPool* const transport_pool_;
- SSLClientSocketPool* const ssl_pool_;
- HostResolver* const host_resolver_;
- NetLog* net_log_;
- base::TimeDelta timeout_;
- DISALLOW_COPY_AND_ASSIGN(HttpProxyConnectJobFactory);
- };
- TransportClientSocketPool* const transport_pool_;
- SSLClientSocketPool* const ssl_pool_;
- PoolBase base_;
- DISALLOW_COPY_AND_ASSIGN(HttpProxyClientSocketPool);
- };
- REGISTER_SOCKET_PARAMS_FOR_POOL(HttpProxyClientSocketPool,
- HttpProxySocketParams);
- } // namespace net
- #endif // NET_HTTP_HTTP_PROXY_CLIENT_SOCKET_POOL_H_