1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "net/quic/quic_context.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "base/containers/contains.h" 8*6777b538SAndroid Build Coastguard Worker #include "net/quic/platform/impl/quic_chromium_clock.h" 9*6777b538SAndroid Build Coastguard Worker #include "net/quic/quic_chromium_connection_helper.h" 10*6777b538SAndroid Build Coastguard Worker #include "net/ssl/cert_compression.h" 11*6777b538SAndroid Build Coastguard Worker #include "net/ssl/ssl_key_logger.h" 12*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/crypto/crypto_protocol.h" 13*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_random.h" 14*6777b538SAndroid Build Coastguard Worker #include "net/third_party/quiche/src/quiche/quic/core/quic_constants.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker namespace net { 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker namespace { 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker // The maximum receive window sizes for QUIC sessions and streams. 21*6777b538SAndroid Build Coastguard Worker const int32_t kQuicSessionMaxRecvWindowSize = 15 * 1024 * 1024; // 15 MB 22*6777b538SAndroid Build Coastguard Worker const int32_t kQuicStreamMaxRecvWindowSize = 6 * 1024 * 1024; // 6 MB 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // Set the maximum number of undecryptable packets the connection will store. 25*6777b538SAndroid Build Coastguard Worker const int32_t kMaxUndecryptablePackets = 100; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker } // namespace 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker QuicParams::QuicParams() = default; 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker QuicParams::QuicParams(const QuicParams& other) = default; 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker QuicParams::~QuicParams() = default; 34*6777b538SAndroid Build Coastguard Worker QuicContext()35*6777b538SAndroid Build Coastguard WorkerQuicContext::QuicContext() 36*6777b538SAndroid Build Coastguard Worker : QuicContext(std::make_unique<QuicChromiumConnectionHelper>( 37*6777b538SAndroid Build Coastguard Worker quic::QuicChromiumClock::GetInstance(), 38*6777b538SAndroid Build Coastguard Worker quic::QuicRandom::GetInstance())) {} 39*6777b538SAndroid Build Coastguard Worker QuicContext(std::unique_ptr<quic::QuicConnectionHelperInterface> helper)40*6777b538SAndroid Build Coastguard WorkerQuicContext::QuicContext( 41*6777b538SAndroid Build Coastguard Worker std::unique_ptr<quic::QuicConnectionHelperInterface> helper) 42*6777b538SAndroid Build Coastguard Worker : helper_(std::move(helper)) {} 43*6777b538SAndroid Build Coastguard Worker 44*6777b538SAndroid Build Coastguard Worker QuicContext::~QuicContext() = default; 45*6777b538SAndroid Build Coastguard Worker InitializeQuicConfig(const QuicParams & params)46*6777b538SAndroid Build Coastguard Workerquic::QuicConfig InitializeQuicConfig(const QuicParams& params) { 47*6777b538SAndroid Build Coastguard Worker DCHECK_GT(params.idle_connection_timeout, base::TimeDelta()); 48*6777b538SAndroid Build Coastguard Worker quic::QuicConfig config; 49*6777b538SAndroid Build Coastguard Worker config.SetIdleNetworkTimeout( 50*6777b538SAndroid Build Coastguard Worker quic::QuicTime::Delta::FromMicroseconds( 51*6777b538SAndroid Build Coastguard Worker params.idle_connection_timeout.InMicroseconds())); 52*6777b538SAndroid Build Coastguard Worker config.set_max_time_before_crypto_handshake( 53*6777b538SAndroid Build Coastguard Worker quic::QuicTime::Delta::FromMicroseconds( 54*6777b538SAndroid Build Coastguard Worker params.max_time_before_crypto_handshake.InMicroseconds())); 55*6777b538SAndroid Build Coastguard Worker config.set_max_idle_time_before_crypto_handshake( 56*6777b538SAndroid Build Coastguard Worker quic::QuicTime::Delta::FromMicroseconds( 57*6777b538SAndroid Build Coastguard Worker params.max_idle_time_before_crypto_handshake.InMicroseconds())); 58*6777b538SAndroid Build Coastguard Worker quic::QuicTagVector copt_to_send = params.connection_options; 59*6777b538SAndroid Build Coastguard Worker config.SetConnectionOptionsToSend(copt_to_send); 60*6777b538SAndroid Build Coastguard Worker config.SetClientConnectionOptions(params.client_connection_options); 61*6777b538SAndroid Build Coastguard Worker config.set_max_undecryptable_packets(kMaxUndecryptablePackets); 62*6777b538SAndroid Build Coastguard Worker config.SetInitialSessionFlowControlWindowToSend( 63*6777b538SAndroid Build Coastguard Worker kQuicSessionMaxRecvWindowSize); 64*6777b538SAndroid Build Coastguard Worker config.SetInitialStreamFlowControlWindowToSend(kQuicStreamMaxRecvWindowSize); 65*6777b538SAndroid Build Coastguard Worker config.SetBytesForConnectionIdToSend(0); 66*6777b538SAndroid Build Coastguard Worker return config; 67*6777b538SAndroid Build Coastguard Worker } 68*6777b538SAndroid Build Coastguard Worker ConfigureQuicCryptoClientConfig(quic::QuicCryptoClientConfig & crypto_config)69*6777b538SAndroid Build Coastguard Workervoid ConfigureQuicCryptoClientConfig( 70*6777b538SAndroid Build Coastguard Worker quic::QuicCryptoClientConfig& crypto_config) { 71*6777b538SAndroid Build Coastguard Worker if (SSLKeyLoggerManager::IsActive()) { 72*6777b538SAndroid Build Coastguard Worker SSL_CTX_set_keylog_callback(crypto_config.ssl_ctx(), 73*6777b538SAndroid Build Coastguard Worker SSLKeyLoggerManager::KeyLogCallback); 74*6777b538SAndroid Build Coastguard Worker } 75*6777b538SAndroid Build Coastguard Worker ConfigureCertificateCompression(crypto_config.ssl_ctx()); 76*6777b538SAndroid Build Coastguard Worker } 77*6777b538SAndroid Build Coastguard Worker 78*6777b538SAndroid Build Coastguard Worker } // namespace net 79