xref: /aosp_15_r20/external/cronet/net/quic/quic_session_pool_peer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2015 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/quic/quic_session_pool_peer.h"
6 
7 #include <string>
8 #include <vector>
9 
10 #include "base/task/sequenced_task_runner.h"
11 #include "net/base/network_anonymization_key.h"
12 #include "net/base/privacy_mode.h"
13 #include "net/base/proxy_chain.h"
14 #include "net/base/session_usage.h"
15 #include "net/cert/x509_certificate.h"
16 #include "net/cert/x509_util.h"
17 #include "net/dns/public/secure_dns_policy.h"
18 #include "net/quic/platform/impl/quic_chromium_clock.h"
19 #include "net/quic/quic_chromium_client_session.h"
20 #include "net/quic/quic_http_stream.h"
21 #include "net/quic/quic_session_key.h"
22 #include "net/quic/quic_session_pool.h"
23 #include "net/socket/socket_tag.h"
24 #include "net/test/cert_test_util.h"
25 #include "net/test/test_data_directory.h"
26 #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_crypto_client_config.h"
27 #include "net/third_party/quiche/src/quiche/quic/core/quic_server_id.h"
28 #include "url/scheme_host_port.h"
29 
30 using std::string;
31 
32 namespace net::test {
33 
GetConfig(QuicSessionPool * factory)34 const quic::QuicConfig* QuicSessionPoolPeer::GetConfig(
35     QuicSessionPool* factory) {
36   return &factory->config_;
37 }
38 
39 std::unique_ptr<QuicCryptoClientConfigHandle>
GetCryptoConfig(QuicSessionPool * factory,const NetworkAnonymizationKey & network_anonymization_key)40 QuicSessionPoolPeer::GetCryptoConfig(
41     QuicSessionPool* factory,
42     const NetworkAnonymizationKey& network_anonymization_key) {
43   return factory->GetCryptoConfigForTesting(network_anonymization_key);
44 }
45 
HasActiveSession(QuicSessionPool * factory,const quic::QuicServerId & server_id,const NetworkAnonymizationKey & network_anonymization_key,const ProxyChain & proxy_chain,SessionUsage session_usage,bool require_dns_https_alpn)46 bool QuicSessionPoolPeer::HasActiveSession(
47     QuicSessionPool* factory,
48     const quic::QuicServerId& server_id,
49     const NetworkAnonymizationKey& network_anonymization_key,
50     const ProxyChain& proxy_chain,
51     SessionUsage session_usage,
52     bool require_dns_https_alpn) {
53   return factory->HasActiveSession(
54       QuicSessionKey(server_id, proxy_chain, session_usage, SocketTag(),
55                      network_anonymization_key, SecureDnsPolicy::kAllow,
56                      require_dns_https_alpn));
57 }
58 
HasActiveJob(QuicSessionPool * factory,const quic::QuicServerId & server_id,bool require_dns_https_alpn)59 bool QuicSessionPoolPeer::HasActiveJob(QuicSessionPool* factory,
60                                        const quic::QuicServerId& server_id,
61                                        bool require_dns_https_alpn) {
62   return factory->HasActiveJob(QuicSessionKey(
63       server_id, ProxyChain::Direct(), SessionUsage::kDestination, SocketTag(),
64       NetworkAnonymizationKey(), SecureDnsPolicy::kAllow,
65       require_dns_https_alpn));
66 }
67 
68 // static
GetPendingSession(QuicSessionPool * factory,const quic::QuicServerId & server_id,url::SchemeHostPort destination)69 QuicChromiumClientSession* QuicSessionPoolPeer::GetPendingSession(
70     QuicSessionPool* factory,
71     const quic::QuicServerId& server_id,
72     url::SchemeHostPort destination) {
73   QuicSessionKey session_key(server_id, ProxyChain::Direct(),
74                              SessionUsage::kDestination, SocketTag(),
75                              NetworkAnonymizationKey(), SecureDnsPolicy::kAllow,
76                              /*require_dns_https_alpn=*/false);
77   QuicSessionPool::QuicSessionAliasKey key(std::move(destination), session_key);
78   DCHECK(factory->HasActiveJob(session_key));
79   DCHECK_EQ(factory->all_sessions_.size(), 1u);
80   DCHECK(key == factory->all_sessions_.begin()->second);
81   return factory->all_sessions_.begin()->first;
82 }
83 
GetActiveSession(QuicSessionPool * factory,const quic::QuicServerId & server_id,const NetworkAnonymizationKey & network_anonymization_key,const ProxyChain & proxy_chain,SessionUsage session_usage,bool require_dns_https_alpn)84 QuicChromiumClientSession* QuicSessionPoolPeer::GetActiveSession(
85     QuicSessionPool* factory,
86     const quic::QuicServerId& server_id,
87     const NetworkAnonymizationKey& network_anonymization_key,
88     const ProxyChain& proxy_chain,
89     SessionUsage session_usage,
90     bool require_dns_https_alpn) {
91   QuicSessionKey session_key(server_id, proxy_chain, session_usage, SocketTag(),
92                              network_anonymization_key, SecureDnsPolicy::kAllow,
93                              require_dns_https_alpn);
94   DCHECK(factory->HasActiveSession(session_key));
95   return factory->active_sessions_[session_key];
96 }
97 
IsLiveSession(QuicSessionPool * factory,QuicChromiumClientSession * session)98 bool QuicSessionPoolPeer::IsLiveSession(QuicSessionPool* factory,
99                                         QuicChromiumClientSession* session) {
100   for (const auto& it : factory->all_sessions_) {
101     if (it.first == session) {
102       return true;
103     }
104   }
105   return false;
106 }
107 
SetTaskRunner(QuicSessionPool * factory,base::SequencedTaskRunner * task_runner)108 void QuicSessionPoolPeer::SetTaskRunner(
109     QuicSessionPool* factory,
110     base::SequencedTaskRunner* task_runner) {
111   factory->task_runner_ = task_runner;
112 }
113 
SetTickClock(QuicSessionPool * factory,const base::TickClock * tick_clock)114 void QuicSessionPoolPeer::SetTickClock(QuicSessionPool* factory,
115                                        const base::TickClock* tick_clock) {
116   factory->tick_clock_ = tick_clock;
117 }
118 
GetPingTimeout(QuicSessionPool * factory)119 quic::QuicTime::Delta QuicSessionPoolPeer::GetPingTimeout(
120     QuicSessionPool* factory) {
121   return factory->ping_timeout_;
122 }
123 
SetYieldAfterPackets(QuicSessionPool * factory,int yield_after_packets)124 void QuicSessionPoolPeer::SetYieldAfterPackets(QuicSessionPool* factory,
125                                                int yield_after_packets) {
126   factory->yield_after_packets_ = yield_after_packets;
127 }
128 
SetYieldAfterDuration(QuicSessionPool * factory,quic::QuicTime::Delta yield_after_duration)129 void QuicSessionPoolPeer::SetYieldAfterDuration(
130     QuicSessionPool* factory,
131     quic::QuicTime::Delta yield_after_duration) {
132   factory->yield_after_duration_ = yield_after_duration;
133 }
134 
CryptoConfigCacheIsEmpty(QuicSessionPool * factory,const quic::QuicServerId & quic_server_id,const NetworkAnonymizationKey & network_anonymization_key)135 bool QuicSessionPoolPeer::CryptoConfigCacheIsEmpty(
136     QuicSessionPool* factory,
137     const quic::QuicServerId& quic_server_id,
138     const NetworkAnonymizationKey& network_anonymization_key) {
139   return factory->CryptoConfigCacheIsEmptyForTesting(quic_server_id,
140                                                      network_anonymization_key);
141 }
142 
GetNumDegradingSessions(QuicSessionPool * factory)143 size_t QuicSessionPoolPeer::GetNumDegradingSessions(QuicSessionPool* factory) {
144   return factory->connectivity_monitor_.GetNumDegradingSessions();
145 }
146 
SetAlarmFactory(QuicSessionPool * factory,std::unique_ptr<quic::QuicAlarmFactory> alarm_factory)147 void QuicSessionPoolPeer::SetAlarmFactory(
148     QuicSessionPool* factory,
149     std::unique_ptr<quic::QuicAlarmFactory> alarm_factory) {
150   factory->alarm_factory_ = std::move(alarm_factory);
151 }
152 
153 }  // namespace net::test
154