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

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

Issue 2875333002: Landing Recent QUIC changes until Mon May 8 21:42:46 2017 +0000 (Closed)
Patch Set: Created 3 years, 7 months 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
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 "net/quic/core/crypto/crypto_protocol.h" 9 #include "net/quic/core/crypto/crypto_protocol.h"
10 #include "net/quic/core/crypto/crypto_utils.h" 10 #include "net/quic/core/crypto/crypto_utils.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 compressed_certs_cache_(compressed_certs_cache), 90 compressed_certs_cache_(compressed_certs_cache),
91 signed_config_(new QuicSignedServerConfig), 91 signed_config_(new QuicSignedServerConfig),
92 helper_(helper), 92 helper_(helper),
93 num_handshake_messages_(0), 93 num_handshake_messages_(0),
94 num_handshake_messages_with_server_nonces_(0), 94 num_handshake_messages_with_server_nonces_(0),
95 send_server_config_update_cb_(nullptr), 95 send_server_config_update_cb_(nullptr),
96 num_server_config_update_messages_sent_(0), 96 num_server_config_update_messages_sent_(0),
97 use_stateless_rejects_if_peer_supported_( 97 use_stateless_rejects_if_peer_supported_(
98 use_stateless_rejects_if_peer_supported), 98 use_stateless_rejects_if_peer_supported),
99 peer_supports_stateless_rejects_(false), 99 peer_supports_stateless_rejects_(false),
100 zero_rtt_attempted_(false),
100 chlo_packet_size_(0), 101 chlo_packet_size_(0),
101 validate_client_hello_cb_(nullptr), 102 validate_client_hello_cb_(nullptr),
102 process_client_hello_cb_(nullptr) { 103 process_client_hello_cb_(nullptr) {
103 DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective()); 104 DCHECK_EQ(Perspective::IS_SERVER, session->connection()->perspective());
104 } 105 }
105 106
106 QuicCryptoServerStream::~QuicCryptoServerStream() { 107 QuicCryptoServerStream::~QuicCryptoServerStream() {
107 CancelOutstandingCallbacks(); 108 CancelOutstandingCallbacks();
108 } 109 }
109 110
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 } 155 }
155 156
156 CryptoUtils::HashHandshakeMessage(message, &chlo_hash_, 157 CryptoUtils::HashHandshakeMessage(message, &chlo_hash_,
157 Perspective::IS_SERVER); 158 Perspective::IS_SERVER);
158 159
159 std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this)); 160 std::unique_ptr<ValidateCallback> cb(new ValidateCallback(this));
160 DCHECK(validate_client_hello_cb_ == nullptr); 161 DCHECK(validate_client_hello_cb_ == nullptr);
161 DCHECK(process_client_hello_cb_ == nullptr); 162 DCHECK(process_client_hello_cb_ == nullptr);
162 validate_client_hello_cb_ = cb.get(); 163 validate_client_hello_cb_ = cb.get();
163 crypto_config_->ValidateClientHello( 164 crypto_config_->ValidateClientHello(
164 message, session()->connection()->peer_address().host(), 165 message, GetClientAddress().host(),
165 session()->connection()->self_address(), version(), 166 session()->connection()->self_address(), version(),
166 session()->connection()->clock(), signed_config_, std::move(cb)); 167 session()->connection()->clock(), signed_config_, std::move(cb));
167 } 168 }
168 169
169 void QuicCryptoServerStream::FinishProcessingHandshakeMessage( 170 void QuicCryptoServerStream::FinishProcessingHandshakeMessage(
170 QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result> 171 QuicReferenceCountedPointer<ValidateClientHelloResultCallback::Result>
171 result, 172 result,
172 std::unique_ptr<ProofSource::Details> details) { 173 std::unique_ptr<ProofSource::Details> details) {
173 const CryptoHandshakeMessage& message = result->client_hello; 174 const CryptoHandshakeMessage& message = result->client_hello;
174 175
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 return; 294 return;
294 } 295 }
295 296
296 std::unique_ptr<SendServerConfigUpdateCallback> cb( 297 std::unique_ptr<SendServerConfigUpdateCallback> cb(
297 new SendServerConfigUpdateCallback(this)); 298 new SendServerConfigUpdateCallback(this));
298 send_server_config_update_cb_ = cb.get(); 299 send_server_config_update_cb_ = cb.get();
299 300
300 crypto_config_->BuildServerConfigUpdateMessage( 301 crypto_config_->BuildServerConfigUpdateMessage(
301 session()->connection()->version(), chlo_hash_, 302 session()->connection()->version(), chlo_hash_,
302 previous_source_address_tokens_, session()->connection()->self_address(), 303 previous_source_address_tokens_, session()->connection()->self_address(),
303 session()->connection()->peer_address().host(), 304 GetClientAddress().host(), session()->connection()->clock(),
304 session()->connection()->clock(),
305 session()->connection()->random_generator(), compressed_certs_cache_, 305 session()->connection()->random_generator(), compressed_certs_cache_,
306 *crypto_negotiated_params_, cached_network_params, 306 *crypto_negotiated_params_, cached_network_params,
307 (session()->config()->HasReceivedConnectionOptions() 307 (session()->config()->HasReceivedConnectionOptions()
308 ? session()->config()->ReceivedConnectionOptions() 308 ? session()->config()->ReceivedConnectionOptions()
309 : QuicTagVector()), 309 : QuicTagVector()),
310 std::move(cb)); 310 std::move(cb));
311 } 311 }
312 312
313 QuicCryptoServerStream::SendServerConfigUpdateCallback:: 313 QuicCryptoServerStream::SendServerConfigUpdateCallback::
314 SendServerConfigUpdateCallback(QuicCryptoServerStream* parent) 314 SendServerConfigUpdateCallback(QuicCryptoServerStream* parent)
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 367 }
368 368
369 bool QuicCryptoServerStream::UseStatelessRejectsIfPeerSupported() const { 369 bool QuicCryptoServerStream::UseStatelessRejectsIfPeerSupported() const {
370 return use_stateless_rejects_if_peer_supported_; 370 return use_stateless_rejects_if_peer_supported_;
371 } 371 }
372 372
373 bool QuicCryptoServerStream::PeerSupportsStatelessRejects() const { 373 bool QuicCryptoServerStream::PeerSupportsStatelessRejects() const {
374 return peer_supports_stateless_rejects_; 374 return peer_supports_stateless_rejects_;
375 } 375 }
376 376
377 bool QuicCryptoServerStream::ZeroRttAttempted() const {
378 return zero_rtt_attempted_;
379 }
380
377 void QuicCryptoServerStream::SetPeerSupportsStatelessRejects( 381 void QuicCryptoServerStream::SetPeerSupportsStatelessRejects(
378 bool peer_supports_stateless_rejects) { 382 bool peer_supports_stateless_rejects) {
379 peer_supports_stateless_rejects_ = peer_supports_stateless_rejects; 383 peer_supports_stateless_rejects_ = peer_supports_stateless_rejects;
380 } 384 }
381 385
382 void QuicCryptoServerStream::SetPreviousCachedNetworkParams( 386 void QuicCryptoServerStream::SetPreviousCachedNetworkParams(
383 CachedNetworkParameters cached_network_params) { 387 CachedNetworkParameters cached_network_params) {
384 previous_cached_network_params_.reset( 388 previous_cached_network_params_.reset(
385 new CachedNetworkParameters(cached_network_params)); 389 new CachedNetworkParameters(cached_network_params));
386 } 390 }
(...skipping 20 matching lines...) Expand all
407 std::unique_ptr<ProofSource::Details> proof_source_details, 411 std::unique_ptr<ProofSource::Details> proof_source_details,
408 std::unique_ptr<ProcessClientHelloResultCallback> done_cb) { 412 std::unique_ptr<ProcessClientHelloResultCallback> done_cb) {
409 const CryptoHandshakeMessage& message = result->client_hello; 413 const CryptoHandshakeMessage& message = result->client_hello;
410 string error_details; 414 string error_details;
411 if (!helper_->CanAcceptClientHello( 415 if (!helper_->CanAcceptClientHello(
412 message, session()->connection()->self_address(), &error_details)) { 416 message, session()->connection()->self_address(), &error_details)) {
413 done_cb->Run(QUIC_HANDSHAKE_FAILED, error_details, nullptr, nullptr, 417 done_cb->Run(QUIC_HANDSHAKE_FAILED, error_details, nullptr, nullptr,
414 nullptr); 418 nullptr);
415 return; 419 return;
416 } 420 }
417
418 if (!result->info.server_nonce.empty()) { 421 if (!result->info.server_nonce.empty()) {
419 ++num_handshake_messages_with_server_nonces_; 422 ++num_handshake_messages_with_server_nonces_;
420 } 423 }
424
425 if (num_handshake_messages_ == 1) {
426 // Client attempts zero RTT handshake by sending a non-inchoate CHLO.
427 QuicStringPiece public_value;
428 zero_rtt_attempted_ = message.GetStringPiece(kPUBS, &public_value);
429 }
430
421 // Store the bandwidth estimate from the client. 431 // Store the bandwidth estimate from the client.
422 if (result->cached_network_params.bandwidth_estimate_bytes_per_second() > 0) { 432 if (result->cached_network_params.bandwidth_estimate_bytes_per_second() > 0) {
423 previous_cached_network_params_.reset( 433 previous_cached_network_params_.reset(
424 new CachedNetworkParameters(result->cached_network_params)); 434 new CachedNetworkParameters(result->cached_network_params));
425 } 435 }
426 previous_source_address_tokens_ = result->info.source_address_tokens; 436 previous_source_address_tokens_ = result->info.source_address_tokens;
427 437
428 const bool use_stateless_rejects_in_crypto_config = 438 const bool use_stateless_rejects_in_crypto_config =
429 use_stateless_rejects_if_peer_supported_ && 439 use_stateless_rejects_if_peer_supported_ &&
430 peer_supports_stateless_rejects_; 440 peer_supports_stateless_rejects_;
431 QuicConnection* connection = session()->connection(); 441 QuicConnection* connection = session()->connection();
432 const QuicConnectionId server_designated_connection_id = 442 const QuicConnectionId server_designated_connection_id =
433 GenerateConnectionIdForReject(use_stateless_rejects_in_crypto_config); 443 GenerateConnectionIdForReject(use_stateless_rejects_in_crypto_config);
434 crypto_config_->ProcessClientHello( 444 crypto_config_->ProcessClientHello(
435 result, /*reject_only=*/false, connection->connection_id(), 445 result, /*reject_only=*/false, connection->connection_id(),
436 connection->self_address(), connection->peer_address(), version(), 446 connection->self_address(), GetClientAddress(), version(),
437 connection->supported_versions(), use_stateless_rejects_in_crypto_config, 447 connection->supported_versions(), use_stateless_rejects_in_crypto_config,
438 server_designated_connection_id, connection->clock(), 448 server_designated_connection_id, connection->clock(),
439 connection->random_generator(), compressed_certs_cache_, 449 connection->random_generator(), compressed_certs_cache_,
440 crypto_negotiated_params_, signed_config_, 450 crypto_negotiated_params_, signed_config_,
441 QuicCryptoStream::CryptoMessageFramingOverhead(version()), 451 QuicCryptoStream::CryptoMessageFramingOverhead(version()),
442 chlo_packet_size_, std::move(done_cb)); 452 chlo_packet_size_, std::move(done_cb));
443 } 453 }
444 454
445 void QuicCryptoServerStream::OverrideQuicConfigDefaults(QuicConfig* config) {} 455 void QuicCryptoServerStream::OverrideQuicConfigDefaults(QuicConfig* config) {}
446 456
(...skipping 16 matching lines...) Expand all
463 473
464 QuicConnectionId QuicCryptoServerStream::GenerateConnectionIdForReject( 474 QuicConnectionId QuicCryptoServerStream::GenerateConnectionIdForReject(
465 bool use_stateless_rejects) { 475 bool use_stateless_rejects) {
466 if (!use_stateless_rejects) { 476 if (!use_stateless_rejects) {
467 return 0; 477 return 0;
468 } 478 }
469 return helper_->GenerateConnectionIdForReject( 479 return helper_->GenerateConnectionIdForReject(
470 session()->connection()->connection_id()); 480 session()->connection()->connection_id());
471 } 481 }
472 482
483 const QuicSocketAddress QuicCryptoServerStream::GetClientAddress() {
484 return session()->connection()->peer_address();
485 }
486
473 } // namespace net 487 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_crypto_server_stream.h ('k') | net/quic/core/quic_crypto_server_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698