xref: /aosp_15_r20/external/cronet/net/quic/quic_context.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker QuicContext::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 Worker QuicContext::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 Worker quic::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 Worker void 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