| Index: net/quic/quic_stream_factory.h
|
| diff --git a/net/quic/quic_stream_factory.h b/net/quic/quic_stream_factory.h
|
| deleted file mode 100644
|
| index 1b9946ddcc80f54b03c05b579b80cdd1f591fdbd..0000000000000000000000000000000000000000
|
| --- a/net/quic/quic_stream_factory.h
|
| +++ /dev/null
|
| @@ -1,352 +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_QUIC_QUIC_STREAM_FACTORY_H_
|
| -#define NET_QUIC_QUIC_STREAM_FACTORY_H_
|
| -
|
| -#include <list>
|
| -#include <map>
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "net/base/address_list.h"
|
| -#include "net/base/completion_callback.h"
|
| -#include "net/base/host_port_pair.h"
|
| -#include "net/base/net_log.h"
|
| -#include "net/base/network_change_notifier.h"
|
| -#include "net/cert/cert_database.h"
|
| -#include "net/proxy/proxy_server.h"
|
| -#include "net/quic/quic_config.h"
|
| -#include "net/quic/quic_crypto_stream.h"
|
| -#include "net/quic/quic_http_stream.h"
|
| -#include "net/quic/quic_protocol.h"
|
| -
|
| -namespace net {
|
| -
|
| -class CertVerifier;
|
| -class ChannelIDService;
|
| -class ClientSocketFactory;
|
| -class HostResolver;
|
| -class HttpServerProperties;
|
| -class QuicClock;
|
| -class QuicClientSession;
|
| -class QuicConnectionHelper;
|
| -class QuicCryptoClientStreamFactory;
|
| -class QuicRandom;
|
| -class QuicServerInfoFactory;
|
| -class QuicServerId;
|
| -class QuicStreamFactory;
|
| -class TransportSecurityState;
|
| -
|
| -namespace test {
|
| -class QuicStreamFactoryPeer;
|
| -} // namespace test
|
| -
|
| -// Encapsulates a pending request for a QuicHttpStream.
|
| -// If the request is still pending when it is destroyed, it will
|
| -// cancel the request with the factory.
|
| -class NET_EXPORT_PRIVATE QuicStreamRequest {
|
| - public:
|
| - explicit QuicStreamRequest(QuicStreamFactory* factory);
|
| - ~QuicStreamRequest();
|
| -
|
| - // For http, |is_https| is false.
|
| - int Request(const HostPortPair& host_port_pair,
|
| - bool is_https,
|
| - PrivacyMode privacy_mode,
|
| - base::StringPiece method,
|
| - const BoundNetLog& net_log,
|
| - const CompletionCallback& callback);
|
| -
|
| - void OnRequestComplete(int rv);
|
| -
|
| - scoped_ptr<QuicHttpStream> ReleaseStream();
|
| -
|
| - void set_stream(scoped_ptr<QuicHttpStream> stream);
|
| -
|
| - const BoundNetLog& net_log() const{
|
| - return net_log_;
|
| - }
|
| -
|
| - private:
|
| - QuicStreamFactory* factory_;
|
| - HostPortPair host_port_pair_;
|
| - bool is_https_;
|
| - BoundNetLog net_log_;
|
| - CompletionCallback callback_;
|
| - scoped_ptr<QuicHttpStream> stream_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(QuicStreamRequest);
|
| -};
|
| -
|
| -// A factory for creating new QuicHttpStreams on top of a pool of
|
| -// QuicClientSessions.
|
| -class NET_EXPORT_PRIVATE QuicStreamFactory
|
| - : public NetworkChangeNotifier::IPAddressObserver,
|
| - public CertDatabase::Observer {
|
| - public:
|
| - QuicStreamFactory(
|
| - HostResolver* host_resolver,
|
| - ClientSocketFactory* client_socket_factory,
|
| - base::WeakPtr<HttpServerProperties> http_server_properties,
|
| - CertVerifier* cert_verifier,
|
| - ChannelIDService* channel_id_service,
|
| - TransportSecurityState* transport_security_state,
|
| - QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory,
|
| - QuicRandom* random_generator,
|
| - QuicClock* clock,
|
| - size_t max_packet_length,
|
| - const std::string& user_agent_id,
|
| - const QuicVersionVector& supported_versions,
|
| - bool enable_port_selection,
|
| - bool always_require_handshake_confirmation,
|
| - bool disable_connection_pooling,
|
| - int load_server_info_timeout,
|
| - float load_server_info_timeout_srtt_multiplier,
|
| - bool enable_truncated_connection_ids,
|
| - bool enable_connection_racing,
|
| - const QuicTagVector& connection_options);
|
| - ~QuicStreamFactory() override;
|
| -
|
| - // Creates a new QuicHttpStream to |host_port_pair| which will be
|
| - // owned by |request|. |is_https| specifies if the protocol is https or not.
|
| - // If a matching session already exists, this method will return OK. If no
|
| - // matching session exists, this will return ERR_IO_PENDING and will invoke
|
| - // OnRequestComplete asynchronously.
|
| - int Create(const HostPortPair& host_port_pair,
|
| - bool is_https,
|
| - PrivacyMode privacy_mode,
|
| - base::StringPiece method,
|
| - const BoundNetLog& net_log,
|
| - QuicStreamRequest* request);
|
| -
|
| - // Called by a session when it becomes idle.
|
| - void OnIdleSession(QuicClientSession* session);
|
| -
|
| - // Called by a session when it is going away and no more streams should be
|
| - // created on it.
|
| - void OnSessionGoingAway(QuicClientSession* session);
|
| -
|
| - // Called by a session after it shuts down.
|
| - void OnSessionClosed(QuicClientSession* session);
|
| -
|
| - // Called by a session whose connection has timed out.
|
| - void OnSessionConnectTimeout(QuicClientSession* session);
|
| -
|
| - // Cancels a pending request.
|
| - void CancelRequest(QuicStreamRequest* request);
|
| -
|
| - // Closes all current sessions.
|
| - void CloseAllSessions(int error);
|
| -
|
| - base::Value* QuicStreamFactoryInfoToValue() const;
|
| -
|
| - // Delete all cached state objects in |crypto_config_|.
|
| - void ClearCachedStatesInCryptoConfig();
|
| -
|
| - // NetworkChangeNotifier::IPAddressObserver methods:
|
| -
|
| - // Until the servers support roaming, close all connections when the local
|
| - // IP address changes.
|
| - void OnIPAddressChanged() override;
|
| -
|
| - // CertDatabase::Observer methods:
|
| -
|
| - // We close all sessions when certificate database is changed.
|
| - void OnCertAdded(const X509Certificate* cert) override;
|
| - void OnCACertChanged(const X509Certificate* cert) override;
|
| -
|
| - bool require_confirmation() const {
|
| - return require_confirmation_;
|
| - }
|
| -
|
| - void set_require_confirmation(bool require_confirmation);
|
| -
|
| - QuicConnectionHelper* helper() { return helper_.get(); }
|
| -
|
| - bool enable_port_selection() const { return enable_port_selection_; }
|
| -
|
| - bool has_quic_server_info_factory() {
|
| - return quic_server_info_factory_ != NULL;
|
| - }
|
| -
|
| - void set_quic_server_info_factory(
|
| - QuicServerInfoFactory* quic_server_info_factory) {
|
| - DCHECK(!quic_server_info_factory_);
|
| - quic_server_info_factory_ = quic_server_info_factory;
|
| - }
|
| -
|
| - bool enable_connection_racing() const { return enable_connection_racing_; }
|
| - void set_enable_connection_racing(bool enable_connection_racing) {
|
| - enable_connection_racing_ = enable_connection_racing;
|
| - }
|
| -
|
| - private:
|
| - class Job;
|
| - friend class test::QuicStreamFactoryPeer;
|
| -
|
| - // The key used to find session by ip. Includes
|
| - // the ip address, port, and scheme.
|
| - struct NET_EXPORT_PRIVATE IpAliasKey {
|
| - IpAliasKey();
|
| - IpAliasKey(IPEndPoint ip_endpoint, bool is_https);
|
| - ~IpAliasKey();
|
| -
|
| - IPEndPoint ip_endpoint;
|
| - bool is_https;
|
| -
|
| - // Needed to be an element of std::set.
|
| - bool operator<(const IpAliasKey &other) const;
|
| - bool operator==(const IpAliasKey &other) const;
|
| - };
|
| -
|
| - typedef std::map<QuicServerId, QuicClientSession*> SessionMap;
|
| - typedef std::map<QuicClientSession*, QuicServerId> SessionIdMap;
|
| - typedef std::set<QuicServerId> AliasSet;
|
| - typedef std::map<QuicClientSession*, AliasSet> SessionAliasMap;
|
| - typedef std::set<QuicClientSession*> SessionSet;
|
| - typedef std::map<IpAliasKey, SessionSet> IPAliasMap;
|
| - typedef std::map<QuicServerId, QuicCryptoClientConfig*> CryptoConfigMap;
|
| - typedef std::set<Job*> JobSet;
|
| - typedef std::map<QuicServerId, JobSet> JobMap;
|
| - typedef std::map<QuicStreamRequest*, QuicServerId> RequestMap;
|
| - typedef std::set<QuicStreamRequest*> RequestSet;
|
| - typedef std::map<QuicServerId, RequestSet> ServerIDRequestsMap;
|
| -
|
| - // Creates a job which doesn't wait for server config to be loaded from the
|
| - // disk cache. This job is started via a PostTask.
|
| - void CreateAuxilaryJob(const QuicServerId server_id,
|
| - bool is_post,
|
| - const BoundNetLog& net_log);
|
| -
|
| - // Returns a newly created QuicHttpStream owned by the caller, if a
|
| - // matching session already exists. Returns NULL otherwise.
|
| - scoped_ptr<QuicHttpStream> CreateIfSessionExists(const QuicServerId& key,
|
| - const BoundNetLog& net_log);
|
| -
|
| - bool OnResolution(const QuicServerId& server_id,
|
| - const AddressList& address_list);
|
| - void OnJobComplete(Job* job, int rv);
|
| - bool HasActiveSession(const QuicServerId& server_id) const;
|
| - bool HasActiveJob(const QuicServerId& server_id) const;
|
| - int CreateSession(const QuicServerId& server_id,
|
| - scoped_ptr<QuicServerInfo> quic_server_info,
|
| - const AddressList& address_list,
|
| - const BoundNetLog& net_log,
|
| - QuicClientSession** session);
|
| - void ActivateSession(const QuicServerId& key,
|
| - QuicClientSession* session);
|
| -
|
| - // Returns |srtt| in micro seconds from ServerNetworkStats. Returns 0 if there
|
| - // is no |http_server_properties_| or if |http_server_properties_| doesn't
|
| - // have ServerNetworkStats for the given |server_id|.
|
| - int64 GetServerNetworkStatsSmoothedRttInMicroseconds(
|
| - const QuicServerId& server_id) const;
|
| -
|
| - // Helped methods.
|
| - bool WasAlternateProtocolRecentlyBroken(const QuicServerId& server_id) const;
|
| - bool CryptoConfigCacheIsEmpty(const QuicServerId& server_id);
|
| -
|
| - // Initializes the cached state associated with |server_id| in
|
| - // |crypto_config_| with the information in |server_info|.
|
| - void InitializeCachedStateInCryptoConfig(
|
| - const QuicServerId& server_id,
|
| - const scoped_ptr<QuicServerInfo>& server_info);
|
| -
|
| - void ProcessGoingAwaySession(QuicClientSession* session,
|
| - const QuicServerId& server_id,
|
| - bool was_session_active);
|
| -
|
| - bool require_confirmation_;
|
| - HostResolver* host_resolver_;
|
| - ClientSocketFactory* client_socket_factory_;
|
| - base::WeakPtr<HttpServerProperties> http_server_properties_;
|
| - TransportSecurityState* transport_security_state_;
|
| - QuicServerInfoFactory* quic_server_info_factory_;
|
| - QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory_;
|
| - QuicRandom* random_generator_;
|
| - scoped_ptr<QuicClock> clock_;
|
| - const size_t max_packet_length_;
|
| -
|
| - // The helper used for all connections.
|
| - scoped_ptr<QuicConnectionHelper> helper_;
|
| -
|
| - // Contains owning pointers to all sessions that currently exist.
|
| - SessionIdMap all_sessions_;
|
| - // Contains non-owning pointers to currently active session
|
| - // (not going away session, once they're implemented).
|
| - SessionMap active_sessions_;
|
| - // Map from session to set of aliases that this session is known by.
|
| - SessionAliasMap session_aliases_;
|
| - // Map from IP address to sessions which are connected to this address.
|
| - IPAliasMap ip_aliases_;
|
| -
|
| - // Origins which have gone away recently.
|
| - AliasSet gone_away_aliases_;
|
| -
|
| - const QuicConfig config_;
|
| - QuicCryptoClientConfig crypto_config_;
|
| -
|
| - JobMap active_jobs_;
|
| - ServerIDRequestsMap job_requests_map_;
|
| - RequestMap active_requests_;
|
| -
|
| - QuicVersionVector supported_versions_;
|
| -
|
| - // Determine if we should consistently select a client UDP port. If false,
|
| - // then we will just let the OS select a random client port for each new
|
| - // connection.
|
| - bool enable_port_selection_;
|
| -
|
| - // Set if we always require handshake confirmation. If true, this will
|
| - // introduce at least one RTT for the handshake before the client sends data.
|
| - bool always_require_handshake_confirmation_;
|
| -
|
| - // Set if we do not want connection pooling.
|
| - bool disable_connection_pooling_;
|
| -
|
| - // Specifies the timeout in milliseconds to wait for loading of QUIC server
|
| - // information. If we don't want to timeout, set
|
| - // |load_server_info_timeout_ms_| to 0.
|
| - int load_server_info_timeout_ms_;
|
| -
|
| - // Specifies the ratio between time to load QUIC server information from disk
|
| - // cache to 'smoothed RTT'. This ratio is used to calculate the timeout in
|
| - // milliseconds to wait for loading of QUIC server information. If we don't
|
| - // want to timeout, set |load_server_info_timeout_srtt_multiplier_| to 0.
|
| - float load_server_info_timeout_srtt_multiplier_;
|
| -
|
| - // Set this for setting config's BytesForConnectionIdToSend (TCID param) to 0.
|
| - bool enable_truncated_connection_ids_;
|
| -
|
| - // Set if we want to race connections - one connection that sends
|
| - // INCHOATE_HELLO and another connection that sends CHLO after loading server
|
| - // config from the disk cache.
|
| - bool enable_connection_racing_;
|
| -
|
| - // Each profile will (probably) have a unique port_seed_ value. This value is
|
| - // used to help seed a pseudo-random number generator (PortSuggester) so that
|
| - // we consistently (within this profile) suggest the same ephemeral port when
|
| - // we re-connect to any given server/port. The differences between profiles
|
| - // (probablistically) prevent two profiles from colliding in their ephemeral
|
| - // port requests.
|
| - uint64 port_seed_;
|
| -
|
| - // Local address of socket that was created in CreateSession.
|
| - IPEndPoint local_address_;
|
| - bool check_persisted_supports_quic_;
|
| - std::set<HostPortPair> quic_supported_servers_at_startup_;
|
| -
|
| - base::TaskRunner* task_runner_;
|
| -
|
| - base::WeakPtrFactory<QuicStreamFactory> weak_factory_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(QuicStreamFactory);
|
| -};
|
| -
|
| -} // namespace net
|
| -
|
| -#endif // NET_QUIC_QUIC_STREAM_FACTORY_H_
|
|
|