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

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

Issue 2907743003: Change CryptoHandshakeMessage::GetTaglist to tag a QuicTagVector* (Closed)
Patch Set: fix QuicConfig Created 3 years, 6 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_client_stream.h" 5 #include "net/quic/core/quic_crypto_client_stream.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/metrics/sparse_histogram.h" 10 #include "base/metrics/sparse_histogram.h"
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 // perform a handshake, or we sent a full hello that the server 384 // perform a handshake, or we sent a full hello that the server
385 // rejected. Here we hope to have a REJ that contains the information 385 // rejected. Here we hope to have a REJ that contains the information
386 // that we need. 386 // that we need.
387 if ((in->tag() != kREJ) && (in->tag() != kSREJ)) { 387 if ((in->tag() != kREJ) && (in->tag() != kSREJ)) {
388 next_state_ = STATE_NONE; 388 next_state_ = STATE_NONE;
389 CloseConnectionWithDetails(QUIC_INVALID_CRYPTO_MESSAGE_TYPE, 389 CloseConnectionWithDetails(QUIC_INVALID_CRYPTO_MESSAGE_TYPE,
390 "Expected REJ"); 390 "Expected REJ");
391 return; 391 return;
392 } 392 }
393 393
394 const uint32_t* reject_reasons; 394 QuicTagVector reject_reasons;
395 size_t num_reject_reasons;
396 static_assert(sizeof(QuicTag) == sizeof(uint32_t), "header out of sync"); 395 static_assert(sizeof(QuicTag) == sizeof(uint32_t), "header out of sync");
397 if (in->GetTaglist(kRREJ, &reject_reasons, &num_reject_reasons) == 396 if (in->GetTaglist(kRREJ, &reject_reasons) == QUIC_NO_ERROR) {
398 QUIC_NO_ERROR) {
399 uint32_t packed_error = 0; 397 uint32_t packed_error = 0;
400 for (size_t i = 0; i < num_reject_reasons; ++i) { 398 for (size_t i = 0; i < reject_reasons.size(); ++i) {
401 // HANDSHAKE_OK is 0 and don't report that as error. 399 // HANDSHAKE_OK is 0 and don't report that as error.
402 if (reject_reasons[i] == HANDSHAKE_OK || reject_reasons[i] >= 32) { 400 if (reject_reasons[i] == HANDSHAKE_OK || reject_reasons[i] >= 32) {
403 continue; 401 continue;
404 } 402 }
405 HandshakeFailureReason reason = 403 HandshakeFailureReason reason =
406 static_cast<HandshakeFailureReason>(reject_reasons[i]); 404 static_cast<HandshakeFailureReason>(reject_reasons[i]);
407 packed_error |= 1 << (reason - 1); 405 packed_error |= 1 << (reason - 1);
408 } 406 }
409 DVLOG(1) << "Reasons for rejection: " << packed_error; 407 DVLOG(1) << "Reasons for rejection: " << packed_error;
410 if (num_client_hellos_ == kMaxClientHellos) { 408 if (num_client_hellos_ == kMaxClientHellos) {
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 bool QuicCryptoClientStream::RequiresChannelID( 654 bool QuicCryptoClientStream::RequiresChannelID(
657 QuicCryptoClientConfig::CachedState* cached) { 655 QuicCryptoClientConfig::CachedState* cached) {
658 if (server_id_.privacy_mode() == PRIVACY_MODE_ENABLED || 656 if (server_id_.privacy_mode() == PRIVACY_MODE_ENABLED ||
659 !crypto_config_->channel_id_source()) { 657 !crypto_config_->channel_id_source()) {
660 return false; 658 return false;
661 } 659 }
662 const CryptoHandshakeMessage* scfg = cached->GetServerConfig(); 660 const CryptoHandshakeMessage* scfg = cached->GetServerConfig();
663 if (!scfg) { // scfg may be null then we send an inchoate CHLO. 661 if (!scfg) { // scfg may be null then we send an inchoate CHLO.
664 return false; 662 return false;
665 } 663 }
666 const QuicTag* their_proof_demands; 664 QuicTagVector their_proof_demands;
667 size_t num_their_proof_demands; 665 if (scfg->GetTaglist(kPDMD, &their_proof_demands) != QUIC_NO_ERROR) {
668 if (scfg->GetTaglist(kPDMD, &their_proof_demands, &num_their_proof_demands) !=
669 QUIC_NO_ERROR) {
670 return false; 666 return false;
671 } 667 }
672 for (size_t i = 0; i < num_their_proof_demands; i++) { 668 for (const QuicTag tag : their_proof_demands) {
673 if (their_proof_demands[i] == kCHID) { 669 if (tag == kCHID) {
674 return true; 670 return true;
675 } 671 }
676 } 672 }
677 return false; 673 return false;
678 } 674 }
679 675
680 } // namespace net 676 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698