Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1778)

Side by Side Diff: net/quic/core/quic_crypto_server_stream.cc

Issue 2453113002: Fix object-lifetime issues in async GetProof callpaths (Closed)
Patch Set: Updated patchset dependency Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_crypto_server_stream.h ('k') | net/quic/core/quic_crypto_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/core/quic_crypto_server_stream.h" 5 #include "net/quic/core/quic_crypto_server_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "crypto/secure_hash.h" 10 #include "crypto/secure_hash.h"
11 #include "net/quic/core/crypto/crypto_protocol.h" 11 #include "net/quic/core/crypto/crypto_protocol.h"
12 #include "net/quic/core/crypto/crypto_utils.h" 12 #include "net/quic/core/crypto/crypto_utils.h"
13 #include "net/quic/core/crypto/quic_crypto_server_config.h" 13 #include "net/quic/core/crypto/quic_crypto_server_config.h"
14 #include "net/quic/core/crypto/quic_random.h" 14 #include "net/quic/core/crypto/quic_random.h"
15 #include "net/quic/core/proto/cached_network_parameters.pb.h" 15 #include "net/quic/core/proto/cached_network_parameters.pb.h"
16 #include "net/quic/core/quic_config.h" 16 #include "net/quic/core/quic_config.h"
17 #include "net/quic/core/quic_flags.h" 17 #include "net/quic/core/quic_flags.h"
18 #include "net/quic/core/quic_protocol.h" 18 #include "net/quic/core/quic_protocol.h"
19 #include "net/quic/core/quic_server_session_base.h" 19 #include "net/quic/core/quic_server_session_base.h"
20 20
21 using base::StringPiece; 21 using base::StringPiece;
22 using std::string; 22 using std::string;
23 23
24 namespace net { 24 namespace net {
25 25
26 class QuicCryptoServerStream::ProcessClientHelloCallback
27 : public ProcessClientHelloResultCallback {
28 public:
29 ProcessClientHelloCallback(
30 QuicCryptoServerStream* stream,
31 const scoped_refptr<ValidateClientHelloResultCallback::Result>& result)
32 : stream_(stream), result_(result) {}
33
34 void Run(
35 QuicErrorCode error,
36 const string& error_details,
37 std::unique_ptr<CryptoHandshakeMessage> message,
38 std::unique_ptr<DiversificationNonce> diversification_nonce) override {
39 if (stream_ == nullptr) {
40 return;
41 }
42
43 // Note: set the parent's callback to nullptr here because
44 // FinishProcessingHandshakeMessageAfterProcessClientHello can be invoked
45 // from either synchronous or asynchronous codepaths. When the synchronous
46 // codepaths are removed, this assignment should move to
47 // FinishProcessingHandshakeMessageAfterProcessClientHello.
48 stream_->process_client_hello_cb_ = nullptr;
49
50 stream_->FinishProcessingHandshakeMessageAfterProcessClientHello(
51 *result_, error, error_details, std::move(message),
52 std::move(diversification_nonce));
53 }
54
55 void Cancel() { stream_ = nullptr; }
56
57 private:
58 QuicCryptoServerStream* stream_;
59 scoped_refptr<ValidateClientHelloResultCallback::Result> result_;
60 };
61
26 QuicCryptoServerStreamBase::QuicCryptoServerStreamBase(QuicSession* session) 62 QuicCryptoServerStreamBase::QuicCryptoServerStreamBase(QuicSession* session)
27 : QuicCryptoStream(session) {} 63 : QuicCryptoStream(session) {}
28 64
29 // TODO(jokulik): Once stateless rejects support is inherent in the version 65 // TODO(jokulik): Once stateless rejects support is inherent in the version
30 // number, this function will likely go away entirely. 66 // number, this function will likely go away entirely.
31 // static 67 // static
32 bool QuicCryptoServerStreamBase::DoesPeerSupportStatelessRejects( 68 bool QuicCryptoServerStreamBase::DoesPeerSupportStatelessRejects(
33 const CryptoHandshakeMessage& message) { 69 const CryptoHandshakeMessage& message) {
34 const QuicTag* received_tags; 70 const QuicTag* received_tags;
35 size_t received_tags_length; 71 size_t received_tags_length;
(...skipping 12 matching lines...) Expand all
48 84
49 QuicCryptoServerStream::QuicCryptoServerStream( 85 QuicCryptoServerStream::QuicCryptoServerStream(
50 const QuicCryptoServerConfig* crypto_config, 86 const QuicCryptoServerConfig* crypto_config,
51 QuicCompressedCertsCache* compressed_certs_cache, 87 QuicCompressedCertsCache* compressed_certs_cache,
52 bool use_stateless_rejects_if_peer_supported, 88 bool use_stateless_rejects_if_peer_supported,
53 QuicSession* session, 89 QuicSession* session,
54 Helper* helper) 90 Helper* helper)
55 : QuicCryptoServerStreamBase(session), 91 : QuicCryptoServerStreamBase(session),
56 crypto_config_(crypto_config), 92 crypto_config_(crypto_config),
57 compressed_certs_cache_(compressed_certs_cache), 93 compressed_certs_cache_(compressed_certs_cache),
94 crypto_proof_(new QuicCryptoProof),
58 validate_client_hello_cb_(nullptr), 95 validate_client_hello_cb_(nullptr),
59 helper_(helper), 96 helper_(helper),
60 num_handshake_messages_(0), 97 num_handshake_messages_(0),
61 num_handshake_messages_with_server_nonces_(0), 98 num_handshake_messages_with_server_nonces_(0),
62 send_server_config_update_cb_(nullptr), 99 send_server_config_update_cb_(nullptr),
63 num_server_config_update_messages_sent_(0), 100 num_server_config_update_messages_sent_(0),
64 use_stateless_rejects_if_peer_supported_( 101 use_stateless_rejects_if_peer_supported_(
65 use_stateless_rejects_if_peer_supported), 102 use_stateless_rejects_if_peer_supported),
66 peer_supports_stateless_rejects_(false), 103 peer_supports_stateless_rejects_(false),
67 chlo_packet_size_(0) { 104 chlo_packet_size_(0),
105 process_client_hello_cb_(nullptr) {
68 DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective()); 106 DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective());
69 } 107 }
70 108
71 QuicCryptoServerStream::~QuicCryptoServerStream() { 109 QuicCryptoServerStream::~QuicCryptoServerStream() {
72 CancelOutstandingCallbacks(); 110 CancelOutstandingCallbacks();
73 } 111 }
74 112
75 void QuicCryptoServerStream::CancelOutstandingCallbacks() { 113 void QuicCryptoServerStream::CancelOutstandingCallbacks() {
76 // Detach from the validation callback. Calling this multiple times is safe. 114 // Detach from the validation callback. Calling this multiple times is safe.
77 if (validate_client_hello_cb_ != nullptr) { 115 if (validate_client_hello_cb_ != nullptr) {
78 validate_client_hello_cb_->Cancel(); 116 validate_client_hello_cb_->Cancel();
79 validate_client_hello_cb_ = nullptr; 117 validate_client_hello_cb_ = nullptr;
80 } 118 }
81 if (send_server_config_update_cb_ != nullptr) { 119 if (send_server_config_update_cb_ != nullptr) {
82 send_server_config_update_cb_->Cancel(); 120 send_server_config_update_cb_->Cancel();
83 send_server_config_update_cb_ = nullptr; 121 send_server_config_update_cb_ = nullptr;
84 } 122 }
123 if (process_client_hello_cb_ != nullptr) {
124 process_client_hello_cb_->Cancel();
125 process_client_hello_cb_ = nullptr;
126 }
85 } 127 }
86 128
87 void QuicCryptoServerStream::OnHandshakeMessage( 129 void QuicCryptoServerStream::OnHandshakeMessage(
88 const CryptoHandshakeMessage& message) { 130 const CryptoHandshakeMessage& message) {
89 QuicCryptoServerStreamBase::OnHandshakeMessage(message); 131 QuicCryptoServerStreamBase::OnHandshakeMessage(message);
90 ++num_handshake_messages_; 132 ++num_handshake_messages_;
91 chlo_packet_size_ = session()->connection()->GetCurrentPacket().length(); 133 chlo_packet_size_ = session()->connection()->GetCurrentPacket().length();
92 134
93 // Do not process handshake messages after the handshake is confirmed. 135 // Do not process handshake messages after the handshake is confirmed.
94 if (handshake_confirmed_) { 136 if (handshake_confirmed_) {
(...skipping 18 matching lines...) Expand all
113 return; 155 return;
114 } 156 }
115 157
116 CryptoUtils::HashHandshakeMessage(message, &chlo_hash_); 158 CryptoUtils::HashHandshakeMessage(message, &chlo_hash_);
117 159
118 std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this)); 160 std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this));
119 validate_client_hello_cb_ = cb.get(); 161 validate_client_hello_cb_ = cb.get();
120 crypto_config_->ValidateClientHello( 162 crypto_config_->ValidateClientHello(
121 message, session()->connection()->peer_address().address(), 163 message, session()->connection()->peer_address().address(),
122 session()->connection()->self_address().address(), version(), 164 session()->connection()->self_address().address(), version(),
123 session()->connection()->clock(), &crypto_proof_, std::move(cb)); 165 session()->connection()->clock(), crypto_proof_, std::move(cb));
124 } 166 }
125 167
126 class QuicCryptoServerStream::ProcessClientHelloCallback
127 : public ProcessClientHelloResultCallback {
128 public:
129 ProcessClientHelloCallback(
130 QuicCryptoServerStream* stream,
131 const scoped_refptr<ValidateClientHelloResultCallback::Result>& result)
132 : stream_(stream), result_(result) {}
133
134 void Run(
135 QuicErrorCode error,
136 const string& error_details,
137 std::unique_ptr<CryptoHandshakeMessage> message,
138 std::unique_ptr<DiversificationNonce> diversification_nonce) override {
139 stream_->FinishProcessingHandshakeMessageAfterProcessClientHello(
140 *result_, error, error_details, std::move(message),
141 std::move(diversification_nonce));
142 }
143
144 private:
145 QuicCryptoServerStream* stream_;
146 scoped_refptr<ValidateClientHelloResultCallback::Result> result_;
147 };
148
149 void QuicCryptoServerStream::FinishProcessingHandshakeMessage( 168 void QuicCryptoServerStream::FinishProcessingHandshakeMessage(
150 scoped_refptr<ValidateClientHelloResultCallback::Result> result, 169 scoped_refptr<ValidateClientHelloResultCallback::Result> result,
151 std::unique_ptr<ProofSource::Details> details) { 170 std::unique_ptr<ProofSource::Details> details) {
152 const CryptoHandshakeMessage& message = result->client_hello; 171 const CryptoHandshakeMessage& message = result->client_hello;
153 172
154 // Clear the callback that got us here. 173 // Clear the callback that got us here.
155 DCHECK(validate_client_hello_cb_ != nullptr); 174 DCHECK(validate_client_hello_cb_ != nullptr);
156 validate_client_hello_cb_ = nullptr; 175 validate_client_hello_cb_ = nullptr;
157 176
158 if (use_stateless_rejects_if_peer_supported_) { 177 if (use_stateless_rejects_if_peer_supported_) {
159 peer_supports_stateless_rejects_ = DoesPeerSupportStatelessRejects(message); 178 peer_supports_stateless_rejects_ = DoesPeerSupportStatelessRejects(message);
160 } 179 }
161 180
162 std::unique_ptr<ProcessClientHelloCallback> cb( 181 std::unique_ptr<ProcessClientHelloCallback> cb(
163 new ProcessClientHelloCallback(this, result)); 182 new ProcessClientHelloCallback(this, result));
183 process_client_hello_cb_ = cb.get();
164 ProcessClientHello(result, std::move(details), std::move(cb)); 184 ProcessClientHello(result, std::move(details), std::move(cb));
165 } 185 }
166 186
167 void QuicCryptoServerStream:: 187 void QuicCryptoServerStream::
168 FinishProcessingHandshakeMessageAfterProcessClientHello( 188 FinishProcessingHandshakeMessageAfterProcessClientHello(
169 const ValidateClientHelloResultCallback::Result& result, 189 const ValidateClientHelloResultCallback::Result& result,
170 QuicErrorCode error, 190 QuicErrorCode error,
171 const string& error_details, 191 const string& error_details,
172 std::unique_ptr<CryptoHandshakeMessage> reply, 192 std::unique_ptr<CryptoHandshakeMessage> reply,
173 std::unique_ptr<DiversificationNonce> diversification_nonce) { 193 std::unique_ptr<DiversificationNonce> diversification_nonce) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 239
220 config->ToHandshakeMessage(reply.get()); 240 config->ToHandshakeMessage(reply.get());
221 241
222 // Receiving a full CHLO implies the client is prepared to decrypt with 242 // Receiving a full CHLO implies the client is prepared to decrypt with
223 // the new server write key. We can start to encrypt with the new server 243 // the new server write key. We can start to encrypt with the new server
224 // write key. 244 // write key.
225 // 245 //
226 // NOTE: the SHLO will be encrypted with the new server write key. 246 // NOTE: the SHLO will be encrypted with the new server write key.
227 session()->connection()->SetEncrypter( 247 session()->connection()->SetEncrypter(
228 ENCRYPTION_INITIAL, 248 ENCRYPTION_INITIAL,
229 crypto_negotiated_params_.initial_crypters.encrypter.release()); 249 crypto_negotiated_params_->initial_crypters.encrypter.release());
230 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); 250 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL);
231 // Set the decrypter immediately so that we no longer accept unencrypted 251 // Set the decrypter immediately so that we no longer accept unencrypted
232 // packets. 252 // packets.
233 session()->connection()->SetDecrypter( 253 session()->connection()->SetDecrypter(
234 ENCRYPTION_INITIAL, 254 ENCRYPTION_INITIAL,
235 crypto_negotiated_params_.initial_crypters.decrypter.release()); 255 crypto_negotiated_params_->initial_crypters.decrypter.release());
236 if (version() > QUIC_VERSION_32) { 256 if (version() > QUIC_VERSION_32) {
237 session()->connection()->SetDiversificationNonce(*diversification_nonce); 257 session()->connection()->SetDiversificationNonce(*diversification_nonce);
238 } 258 }
239 259
240 SendHandshakeMessage(*reply); 260 SendHandshakeMessage(*reply);
241 261
242 session()->connection()->SetEncrypter( 262 session()->connection()->SetEncrypter(
243 ENCRYPTION_FORWARD_SECURE, 263 ENCRYPTION_FORWARD_SECURE,
244 crypto_negotiated_params_.forward_secure_crypters.encrypter.release()); 264 crypto_negotiated_params_->forward_secure_crypters.encrypter.release());
245 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); 265 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
246 266
247 session()->connection()->SetAlternativeDecrypter( 267 session()->connection()->SetAlternativeDecrypter(
248 ENCRYPTION_FORWARD_SECURE, 268 ENCRYPTION_FORWARD_SECURE,
249 crypto_negotiated_params_.forward_secure_crypters.decrypter.release(), 269 crypto_negotiated_params_->forward_secure_crypters.decrypter.release(),
250 false /* don't latch */); 270 false /* don't latch */);
251 271
252 encryption_established_ = true; 272 encryption_established_ = true;
253 handshake_confirmed_ = true; 273 handshake_confirmed_ = true;
254 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); 274 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED);
255 } 275 }
256 276
257 void QuicCryptoServerStream::SendServerConfigUpdate( 277 void QuicCryptoServerStream::SendServerConfigUpdate(
258 const CachedNetworkParameters* cached_network_params) { 278 const CachedNetworkParameters* cached_network_params) {
259 if (!handshake_confirmed_) { 279 if (!handshake_confirmed_) {
(...skipping 10 matching lines...) Expand all
270 std::unique_ptr<SendServerConfigUpdateCallback> cb( 290 std::unique_ptr<SendServerConfigUpdateCallback> cb(
271 new SendServerConfigUpdateCallback(this)); 291 new SendServerConfigUpdateCallback(this));
272 send_server_config_update_cb_ = cb.get(); 292 send_server_config_update_cb_ = cb.get();
273 crypto_config_->BuildServerConfigUpdateMessage( 293 crypto_config_->BuildServerConfigUpdateMessage(
274 session()->connection()->version(), chlo_hash_, 294 session()->connection()->version(), chlo_hash_,
275 previous_source_address_tokens_, 295 previous_source_address_tokens_,
276 session()->connection()->self_address().address(), 296 session()->connection()->self_address().address(),
277 session()->connection()->peer_address().address(), 297 session()->connection()->peer_address().address(),
278 session()->connection()->clock(), 298 session()->connection()->clock(),
279 session()->connection()->random_generator(), compressed_certs_cache_, 299 session()->connection()->random_generator(), compressed_certs_cache_,
280 crypto_negotiated_params_, cached_network_params, std::move(cb)); 300 *crypto_negotiated_params_, cached_network_params, std::move(cb));
281 return; 301 return;
282 } 302 }
283 303
284 CryptoHandshakeMessage server_config_update_message; 304 CryptoHandshakeMessage server_config_update_message;
285 if (!crypto_config_->BuildServerConfigUpdateMessage( 305 if (!crypto_config_->BuildServerConfigUpdateMessage(
286 session()->connection()->version(), chlo_hash_, 306 session()->connection()->version(), chlo_hash_,
287 previous_source_address_tokens_, 307 previous_source_address_tokens_,
288 session()->connection()->self_address().address(), 308 session()->connection()->self_address().address(),
289 session()->connection()->peer_address().address(), 309 session()->connection()->peer_address().address(),
290 session()->connection()->clock(), 310 session()->connection()->clock(),
291 session()->connection()->random_generator(), compressed_certs_cache_, 311 session()->connection()->random_generator(), compressed_certs_cache_,
292 crypto_negotiated_params_, cached_network_params, 312 *crypto_negotiated_params_, cached_network_params,
293 &server_config_update_message)) { 313 &server_config_update_message)) {
294 DVLOG(1) << "Server: Failed to build server config update (SCUP)!"; 314 DVLOG(1) << "Server: Failed to build server config update (SCUP)!";
295 return; 315 return;
296 } 316 }
297 317
298 DVLOG(1) << "Server: Sending server config update: " 318 DVLOG(1) << "Server: Sending server config update: "
299 << server_config_update_message.DebugString(); 319 << server_config_update_message.DebugString();
300 const QuicData& data = server_config_update_message.GetSerialized(); 320 const QuicData& data = server_config_update_message.GetSerialized();
301 WriteOrBufferData(StringPiece(data.data(), data.length()), false, nullptr); 321 WriteOrBufferData(StringPiece(data.data(), data.length()), false, nullptr);
302 322
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 396
377 void QuicCryptoServerStream::SetPreviousCachedNetworkParams( 397 void QuicCryptoServerStream::SetPreviousCachedNetworkParams(
378 CachedNetworkParameters cached_network_params) { 398 CachedNetworkParameters cached_network_params) {
379 previous_cached_network_params_.reset( 399 previous_cached_network_params_.reset(
380 new CachedNetworkParameters(cached_network_params)); 400 new CachedNetworkParameters(cached_network_params));
381 } 401 }
382 402
383 bool QuicCryptoServerStream::GetBase64SHA256ClientChannelID( 403 bool QuicCryptoServerStream::GetBase64SHA256ClientChannelID(
384 string* output) const { 404 string* output) const {
385 if (!encryption_established_ || 405 if (!encryption_established_ ||
386 crypto_negotiated_params_.channel_id.empty()) { 406 crypto_negotiated_params_->channel_id.empty()) {
387 return false; 407 return false;
388 } 408 }
389 409
390 const string& channel_id(crypto_negotiated_params_.channel_id); 410 const string& channel_id(crypto_negotiated_params_->channel_id);
391 std::unique_ptr<crypto::SecureHash> hash( 411 std::unique_ptr<crypto::SecureHash> hash(
392 crypto::SecureHash::Create(crypto::SecureHash::SHA256)); 412 crypto::SecureHash::Create(crypto::SecureHash::SHA256));
393 hash->Update(channel_id.data(), channel_id.size()); 413 hash->Update(channel_id.data(), channel_id.size());
394 uint8_t digest[32]; 414 uint8_t digest[32];
395 hash->Finish(digest, sizeof(digest)); 415 hash->Finish(digest, sizeof(digest));
396 416
397 base::Base64Encode( 417 base::Base64Encode(
398 string(reinterpret_cast<const char*>(digest), sizeof(digest)), output); 418 string(reinterpret_cast<const char*>(digest), sizeof(digest)), output);
399 // Remove padding. 419 // Remove padding.
400 size_t len = output->size(); 420 size_t len = output->size();
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 peer_supports_stateless_rejects_; 457 peer_supports_stateless_rejects_;
438 QuicConnection* connection = session()->connection(); 458 QuicConnection* connection = session()->connection();
439 const QuicConnectionId server_designated_connection_id = 459 const QuicConnectionId server_designated_connection_id =
440 GenerateConnectionIdForReject(use_stateless_rejects_in_crypto_config); 460 GenerateConnectionIdForReject(use_stateless_rejects_in_crypto_config);
441 crypto_config_->ProcessClientHello( 461 crypto_config_->ProcessClientHello(
442 result, /*reject_only=*/false, connection->connection_id(), 462 result, /*reject_only=*/false, connection->connection_id(),
443 connection->self_address().address(), connection->peer_address(), 463 connection->self_address().address(), connection->peer_address(),
444 version(), connection->supported_versions(), 464 version(), connection->supported_versions(),
445 use_stateless_rejects_in_crypto_config, server_designated_connection_id, 465 use_stateless_rejects_in_crypto_config, server_designated_connection_id,
446 connection->clock(), connection->random_generator(), 466 connection->clock(), connection->random_generator(),
447 compressed_certs_cache_, &crypto_negotiated_params_, &crypto_proof_, 467 compressed_certs_cache_, crypto_negotiated_params_, crypto_proof_,
448 QuicCryptoStream::CryptoMessageFramingOverhead(version()), 468 QuicCryptoStream::CryptoMessageFramingOverhead(version()),
449 chlo_packet_size_, std::move(done_cb)); 469 chlo_packet_size_, std::move(done_cb));
450 } 470 }
451 471
452 void QuicCryptoServerStream::OverrideQuicConfigDefaults(QuicConfig* config) {} 472 void QuicCryptoServerStream::OverrideQuicConfigDefaults(QuicConfig* config) {}
453 473
454 QuicCryptoServerStream::ValidateCallback::ValidateCallback( 474 QuicCryptoServerStream::ValidateCallback::ValidateCallback(
455 QuicCryptoServerStream* parent) 475 QuicCryptoServerStream* parent)
456 : parent_(parent) {} 476 : parent_(parent) {}
457 477
(...skipping 13 matching lines...) Expand all
471 QuicConnectionId QuicCryptoServerStream::GenerateConnectionIdForReject( 491 QuicConnectionId QuicCryptoServerStream::GenerateConnectionIdForReject(
472 bool use_stateless_rejects) { 492 bool use_stateless_rejects) {
473 if (!use_stateless_rejects) { 493 if (!use_stateless_rejects) {
474 return 0; 494 return 0;
475 } 495 }
476 return helper_->GenerateConnectionIdForReject( 496 return helper_->GenerateConnectionIdForReject(
477 session()->connection()->connection_id()); 497 session()->connection()->connection_id());
478 } 498 }
479 499
480 } // namespace net 500 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_crypto_server_stream.h ('k') | net/quic/core/quic_crypto_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698