// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_QUIC_QUIC_CONTEXT_H_ #define NET_QUIC_QUIC_CONTEXT_H_ #include <memory> #include "base/containers/contains.h" #include "base/feature_list.h" #include "base/time/time.h" #include "net/base/features.h" #include "net/base/host_port_pair.h" #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_crypto_client_config.h" #include "net/third_party/quiche/src/quiche/quic/core/quic_connection.h" namespace net { // Default QUIC supported versions used in absence of any external // configuration. inline NET_EXPORT_PRIVATE quic::ParsedQuicVersionVector DefaultSupportedQuicVersions() { … } // Return the QUIC version to be used for connections to proxies, for which // there is currently no other way to determine QUIC version. inline NET_EXPORT_PRIVATE quic::ParsedQuicVersion SupportedQuicVersionForProxying() { … } // Obsolete QUIC supported versions are versions that are supported by the // QUIC shared code but that Chrome refuses to use because modern clients // should only use versions at least as recent as the oldest default version. inline NET_EXPORT_PRIVATE quic::ParsedQuicVersionVector ObsoleteQuicVersions() { … } // All of the QUIC versions that Chrome can support. This is the subset of // QUIC versions that the QUIC shared code supports that are not on the list // of versions that Chrome considers obsolete. inline NET_EXPORT_PRIVATE quic::ParsedQuicVersionVector AllSupportedQuicVersions() { … } // When a connection is idle for 30 seconds it will be closed. constexpr base::TimeDelta kIdleConnectionTimeout = …; // Sessions can migrate if they have been idle for less than this period. constexpr base::TimeDelta kDefaultIdleSessionMigrationPeriod = …; // The default maximum time allowed to have no retransmittable packets on the // wire (after sending the first retransmittable packet) if // |migrate_session_early_v2_| is true. PING frames will be sent as needed to // enforce this. constexpr base::TimeDelta kDefaultRetransmittableOnWireTimeout = …; // The default maximum time QUIC session could be on non-default network before // migrate back to default network. constexpr base::TimeDelta kMaxTimeOnNonDefaultNetwork = …; // The default maximum number of migrations to non default network on write // error per network. const int64_t kMaxMigrationsToNonDefaultNetworkOnWriteError = …; // The default maximum number of migrations to non default network on path // degrading per network. const int64_t kMaxMigrationsToNonDefaultNetworkOnPathDegrading = …; // QUIC's socket receive buffer size. // We should adaptively set this buffer size, but for now, we'll use a size // that seems large enough to receive data at line rate for most connections, // and does not consume "too much" memory. const int32_t kQuicSocketReceiveBufferSize = …; // 1MB // Structure containing simple configuration options and experiments for QUIC. struct NET_EXPORT QuicParams { … }; // QuicContext contains QUIC-related variables that are shared across all of the // QUIC connections, both HTTP and non-HTTP ones. class NET_EXPORT_PRIVATE QuicContext { … }; // Initializes QuicConfig based on the specified parameters. quic::QuicConfig InitializeQuicConfig(const QuicParams& params); // Configures QuicCryptoClientConfig with Chromium-specific settings. void ConfigureQuicCryptoClientConfig( quic::QuicCryptoClientConfig& crypto_config); } // namespace net #endif // NET_QUIC_QUIC_CONTEXT_H_