• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/containers/contains.h"
11 #include "base/task/sequenced_task_runner.h"
12 #include "net/base/network_anonymization_key.h"
13 #include "net/base/privacy_mode.h"
14 #include "net/base/proxy_chain.h"
15 #include "net/base/session_usage.h"
16 #include "net/cert/x509_certificate.h"
17 #include "net/cert/x509_util.h"
18 #include "net/dns/public/secure_dns_policy.h"
19 #include "net/quic/platform/impl/quic_chromium_clock.h"
20 #include "net/quic/quic_chromium_client_session.h"
21 #include "net/quic/quic_http_stream.h"
22 #include "net/quic/quic_session_alias_key.h"
23 #include "net/quic/quic_session_key.h"
24 #include "net/quic/quic_session_pool.h"
25 #include "net/socket/socket_tag.h"
26 #include "net/test/cert_test_util.h"
27 #include "net/test/test_data_directory.h"
28 #include "net/third_party/quiche/src/quiche/quic/core/crypto/quic_crypto_client_config.h"
29 #include "net/third_party/quiche/src/quiche/quic/core/quic_server_id.h"
30 #include "url/scheme_host_port.h"
31 
32 using std::string;
33 
34 namespace net::test {
35 
GetConfig(QuicSessionPool * factory)36 const quic::QuicConfig* QuicSessionPoolPeer::GetConfig(
37     QuicSessionPool* factory) {
38   return &factory->config_;
39 }
40 
41 std::unique_ptr<QuicCryptoClientConfigHandle>
GetCryptoConfig(QuicSessionPool * factory,const NetworkAnonymizationKey & network_anonymization_key)42 QuicSessionPoolPeer::GetCryptoConfig(
43     QuicSessionPool* factory,
44     const NetworkAnonymizationKey& network_anonymization_key) {
45   return factory->GetCryptoConfigForTesting(network_anonymization_key);
46 }
47 
HasActiveSession(QuicSessionPool * factory,const quic::QuicServerId & server_id,PrivacyMode privacy_mode,const NetworkAnonymizationKey & network_anonymization_key,const ProxyChain & proxy_chain,SessionUsage session_usage,bool require_dns_https_alpn)48 bool QuicSessionPoolPeer::HasActiveSession(
49     QuicSessionPool* factory,
50     const quic::QuicServerId& server_id,
51     PrivacyMode privacy_mode,
52     const NetworkAnonymizationKey& network_anonymization_key,
53     const ProxyChain& proxy_chain,
54     SessionUsage session_usage,
55     bool require_dns_https_alpn) {
56   return factory->HasActiveSession(
57       QuicSessionKey(server_id, privacy_mode, proxy_chain, session_usage,
58                      SocketTag(), network_anonymization_key,
59                      SecureDnsPolicy::kAllow, require_dns_https_alpn));
60 }
61 
HasActiveJob(QuicSessionPool * factory,const quic::QuicServerId & server_id,PrivacyMode privacy_mode,bool require_dns_https_alpn)62 bool QuicSessionPoolPeer::HasActiveJob(QuicSessionPool* factory,
63                                        const quic::QuicServerId& server_id,
64                                        PrivacyMode privacy_mode,
65                                        bool require_dns_https_alpn) {
66   return factory->HasActiveJob(QuicSessionKey(
67       server_id, privacy_mode, ProxyChain::Direct(), SessionUsage::kDestination,
68       SocketTag(), NetworkAnonymizationKey(), SecureDnsPolicy::kAllow,
69       require_dns_https_alpn));
70 }
71 
72 // static
GetPendingSession(QuicSessionPool * factory,const quic::QuicServerId & server_id,PrivacyMode privacy_mode,url::SchemeHostPort destination)73 QuicChromiumClientSession* QuicSessionPoolPeer::GetPendingSession(
74     QuicSessionPool* factory,
75     const quic::QuicServerId& server_id,
76     PrivacyMode privacy_mode,
77     url::SchemeHostPort destination) {
78   QuicSessionKey session_key(server_id, privacy_mode, ProxyChain::Direct(),
79                              SessionUsage::kDestination, SocketTag(),
80                              NetworkAnonymizationKey(), SecureDnsPolicy::kAllow,
81                              /*require_dns_https_alpn=*/false);
82   QuicSessionAliasKey key(std::move(destination), session_key);
83   DCHECK(factory->HasActiveJob(session_key));
84   DCHECK_EQ(factory->all_sessions_.size(), 1u);
85   QuicChromiumClientSession* session = factory->all_sessions_.begin()->get();
86   DCHECK(key == session->session_alias_key());
87   return session;
88 }
89 
GetActiveSession(QuicSessionPool * factory,const quic::QuicServerId & server_id,PrivacyMode privacy_mode,const NetworkAnonymizationKey & network_anonymization_key,const ProxyChain & proxy_chain,SessionUsage session_usage,bool require_dns_https_alpn)90 QuicChromiumClientSession* QuicSessionPoolPeer::GetActiveSession(
91     QuicSessionPool* factory,
92     const quic::QuicServerId& server_id,
93     PrivacyMode privacy_mode,
94     const NetworkAnonymizationKey& network_anonymization_key,
95     const ProxyChain& proxy_chain,
96     SessionUsage session_usage,
97     bool require_dns_https_alpn) {
98   QuicSessionKey session_key(server_id, privacy_mode, proxy_chain,
99                              session_usage, SocketTag(),
100                              network_anonymization_key, SecureDnsPolicy::kAllow,
101                              require_dns_https_alpn);
102   DCHECK(factory->HasActiveSession(session_key));
103   return factory->active_sessions_[session_key];
104 }
105 
IsLiveSession(QuicSessionPool * factory,QuicChromiumClientSession * session)106 bool QuicSessionPoolPeer::IsLiveSession(QuicSessionPool* factory,
107                                         QuicChromiumClientSession* session) {
108   return base::Contains(factory->all_sessions_, session);
109 }
110 
SetTaskRunner(QuicSessionPool * factory,base::SequencedTaskRunner * task_runner)111 void QuicSessionPoolPeer::SetTaskRunner(
112     QuicSessionPool* factory,
113     base::SequencedTaskRunner* task_runner) {
114   factory->task_runner_ = task_runner;
115 }
116 
SetTickClock(QuicSessionPool * factory,const base::TickClock * tick_clock)117 void QuicSessionPoolPeer::SetTickClock(QuicSessionPool* factory,
118                                        const base::TickClock* tick_clock) {
119   factory->tick_clock_ = tick_clock;
120 }
121 
GetPingTimeout(QuicSessionPool * factory)122 quic::QuicTime::Delta QuicSessionPoolPeer::GetPingTimeout(
123     QuicSessionPool* factory) {
124   return factory->ping_timeout_;
125 }
126 
SetYieldAfterPackets(QuicSessionPool * factory,int yield_after_packets)127 void QuicSessionPoolPeer::SetYieldAfterPackets(QuicSessionPool* factory,
128                                                int yield_after_packets) {
129   factory->yield_after_packets_ = yield_after_packets;
130 }
131 
SetYieldAfterDuration(QuicSessionPool * factory,quic::QuicTime::Delta yield_after_duration)132 void QuicSessionPoolPeer::SetYieldAfterDuration(
133     QuicSessionPool* factory,
134     quic::QuicTime::Delta yield_after_duration) {
135   factory->yield_after_duration_ = yield_after_duration;
136 }
137 
CryptoConfigCacheIsEmpty(QuicSessionPool * factory,const quic::QuicServerId & quic_server_id,const NetworkAnonymizationKey & network_anonymization_key)138 bool QuicSessionPoolPeer::CryptoConfigCacheIsEmpty(
139     QuicSessionPool* factory,
140     const quic::QuicServerId& quic_server_id,
141     const NetworkAnonymizationKey& network_anonymization_key) {
142   return factory->CryptoConfigCacheIsEmptyForTesting(quic_server_id,
143                                                      network_anonymization_key);
144 }
145 
GetNumDegradingSessions(QuicSessionPool * factory)146 size_t QuicSessionPoolPeer::GetNumDegradingSessions(QuicSessionPool* factory) {
147   return factory->connectivity_monitor_.GetNumDegradingSessions();
148 }
149 
SetAlarmFactory(QuicSessionPool * factory,std::unique_ptr<quic::QuicAlarmFactory> alarm_factory)150 void QuicSessionPoolPeer::SetAlarmFactory(
151     QuicSessionPool* factory,
152     std::unique_ptr<quic::QuicAlarmFactory> alarm_factory) {
153   factory->alarm_factory_ = std::move(alarm_factory);
154 }
155 
156 }  // namespace net::test
157