OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/crypto/quic_crypto_client_config.h" | 5 #include "net/quic/core/crypto/quic_crypto_client_config.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 it->second->Clear(); | 411 it->second->Clear(); |
412 } | 412 } |
413 } | 413 } |
414 | 414 |
415 void QuicCryptoClientConfig::FillInchoateClientHello( | 415 void QuicCryptoClientConfig::FillInchoateClientHello( |
416 const QuicServerId& server_id, | 416 const QuicServerId& server_id, |
417 const QuicVersion preferred_version, | 417 const QuicVersion preferred_version, |
418 const CachedState* cached, | 418 const CachedState* cached, |
419 QuicRandom* rand, | 419 QuicRandom* rand, |
420 bool demand_x509_proof, | 420 bool demand_x509_proof, |
421 scoped_refptr<QuicCryptoNegotiatedParameters> out_params, | 421 QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params, |
422 CryptoHandshakeMessage* out) const { | 422 CryptoHandshakeMessage* out) const { |
423 out->set_tag(kCHLO); | 423 out->set_tag(kCHLO); |
424 // TODO(rch): Remove this when we remove: | 424 // TODO(rch): Remove this when we remove: |
425 // FLAGS_quic_use_chlo_packet_size | 425 // FLAGS_quic_use_chlo_packet_size |
426 out->set_minimum_size(kClientHelloMinimumSize); | 426 out->set_minimum_size(kClientHelloMinimumSize); |
427 | 427 |
428 // Server name indication. We only send SNI if it's a valid domain name, as | 428 // Server name indication. We only send SNI if it's a valid domain name, as |
429 // per the spec. | 429 // per the spec. |
430 if (CryptoUtils::IsValidSNI(server_id.host())) { | 430 if (CryptoUtils::IsValidSNI(server_id.host())) { |
431 out->SetStringPiece(kSNI, server_id.host()); | 431 out->SetStringPiece(kSNI, server_id.host()); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 } | 484 } |
485 | 485 |
486 QuicErrorCode QuicCryptoClientConfig::FillClientHello( | 486 QuicErrorCode QuicCryptoClientConfig::FillClientHello( |
487 const QuicServerId& server_id, | 487 const QuicServerId& server_id, |
488 QuicConnectionId connection_id, | 488 QuicConnectionId connection_id, |
489 const QuicVersion preferred_version, | 489 const QuicVersion preferred_version, |
490 const CachedState* cached, | 490 const CachedState* cached, |
491 QuicWallTime now, | 491 QuicWallTime now, |
492 QuicRandom* rand, | 492 QuicRandom* rand, |
493 const ChannelIDKey* channel_id_key, | 493 const ChannelIDKey* channel_id_key, |
494 scoped_refptr<QuicCryptoNegotiatedParameters> out_params, | 494 QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params, |
495 CryptoHandshakeMessage* out, | 495 CryptoHandshakeMessage* out, |
496 string* error_details) const { | 496 string* error_details) const { |
497 DCHECK(error_details != nullptr); | 497 DCHECK(error_details != nullptr); |
498 | 498 |
499 FillInchoateClientHello(server_id, preferred_version, cached, rand, | 499 FillInchoateClientHello(server_id, preferred_version, cached, rand, |
500 /* demand_x509_proof= */ true, out_params, out); | 500 /* demand_x509_proof= */ true, out_params, out); |
501 | 501 |
502 const CryptoHandshakeMessage* scfg = cached->GetServerConfig(); | 502 const CryptoHandshakeMessage* scfg = cached->GetServerConfig(); |
503 if (!scfg) { | 503 if (!scfg) { |
504 // This should never happen as our caller should have checked | 504 // This should never happen as our caller should have checked |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
778 | 778 |
779 return QUIC_NO_ERROR; | 779 return QUIC_NO_ERROR; |
780 } | 780 } |
781 | 781 |
782 QuicErrorCode QuicCryptoClientConfig::ProcessRejection( | 782 QuicErrorCode QuicCryptoClientConfig::ProcessRejection( |
783 const CryptoHandshakeMessage& rej, | 783 const CryptoHandshakeMessage& rej, |
784 QuicWallTime now, | 784 QuicWallTime now, |
785 const QuicVersion version, | 785 const QuicVersion version, |
786 StringPiece chlo_hash, | 786 StringPiece chlo_hash, |
787 CachedState* cached, | 787 CachedState* cached, |
788 scoped_refptr<QuicCryptoNegotiatedParameters> out_params, | 788 QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params, |
789 string* error_details) { | 789 string* error_details) { |
790 DCHECK(error_details != nullptr); | 790 DCHECK(error_details != nullptr); |
791 | 791 |
792 if ((rej.tag() != kREJ) && (rej.tag() != kSREJ)) { | 792 if ((rej.tag() != kREJ) && (rej.tag() != kSREJ)) { |
793 *error_details = "Message is not REJ or SREJ"; | 793 *error_details = "Message is not REJ or SREJ"; |
794 return QUIC_CRYPTO_INTERNAL_ERROR; | 794 return QUIC_CRYPTO_INTERNAL_ERROR; |
795 } | 795 } |
796 | 796 |
797 QuicErrorCode error = | 797 QuicErrorCode error = |
798 CacheNewServerConfig(rej, now, version, chlo_hash, | 798 CacheNewServerConfig(rej, now, version, chlo_hash, |
(...skipping 22 matching lines...) Expand all Loading... |
821 | 821 |
822 return QUIC_NO_ERROR; | 822 return QUIC_NO_ERROR; |
823 } | 823 } |
824 | 824 |
825 QuicErrorCode QuicCryptoClientConfig::ProcessServerHello( | 825 QuicErrorCode QuicCryptoClientConfig::ProcessServerHello( |
826 const CryptoHandshakeMessage& server_hello, | 826 const CryptoHandshakeMessage& server_hello, |
827 QuicConnectionId connection_id, | 827 QuicConnectionId connection_id, |
828 QuicVersion version, | 828 QuicVersion version, |
829 const QuicVersionVector& negotiated_versions, | 829 const QuicVersionVector& negotiated_versions, |
830 CachedState* cached, | 830 CachedState* cached, |
831 scoped_refptr<QuicCryptoNegotiatedParameters> out_params, | 831 QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params, |
832 string* error_details) { | 832 string* error_details) { |
833 DCHECK(error_details != nullptr); | 833 DCHECK(error_details != nullptr); |
834 | 834 |
835 QuicErrorCode valid = CryptoUtils::ValidateServerHello( | 835 QuicErrorCode valid = CryptoUtils::ValidateServerHello( |
836 server_hello, negotiated_versions, error_details); | 836 server_hello, negotiated_versions, error_details); |
837 if (valid != QUIC_NO_ERROR) { | 837 if (valid != QUIC_NO_ERROR) { |
838 return valid; | 838 return valid; |
839 } | 839 } |
840 | 840 |
841 // Learn about updated source address tokens. | 841 // Learn about updated source address tokens. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 | 884 |
885 return QUIC_NO_ERROR; | 885 return QUIC_NO_ERROR; |
886 } | 886 } |
887 | 887 |
888 QuicErrorCode QuicCryptoClientConfig::ProcessServerConfigUpdate( | 888 QuicErrorCode QuicCryptoClientConfig::ProcessServerConfigUpdate( |
889 const CryptoHandshakeMessage& server_config_update, | 889 const CryptoHandshakeMessage& server_config_update, |
890 QuicWallTime now, | 890 QuicWallTime now, |
891 const QuicVersion version, | 891 const QuicVersion version, |
892 StringPiece chlo_hash, | 892 StringPiece chlo_hash, |
893 CachedState* cached, | 893 CachedState* cached, |
894 scoped_refptr<QuicCryptoNegotiatedParameters> out_params, | 894 QuicReferenceCountedPointer<QuicCryptoNegotiatedParameters> out_params, |
895 string* error_details) { | 895 string* error_details) { |
896 DCHECK(error_details != nullptr); | 896 DCHECK(error_details != nullptr); |
897 | 897 |
898 if (server_config_update.tag() != kSCUP) { | 898 if (server_config_update.tag() != kSCUP) { |
899 *error_details = "ServerConfigUpdate must have kSCUP tag."; | 899 *error_details = "ServerConfigUpdate must have kSCUP tag."; |
900 return QUIC_INVALID_CRYPTO_MESSAGE_TYPE; | 900 return QUIC_INVALID_CRYPTO_MESSAGE_TYPE; |
901 } | 901 } |
902 return CacheNewServerConfig(server_config_update, now, version, chlo_hash, | 902 return CacheNewServerConfig(server_config_update, now, version, chlo_hash, |
903 out_params->cached_certs, cached, error_details); | 903 out_params->cached_certs, cached, error_details); |
904 } | 904 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 } | 976 } |
977 | 977 |
978 // Update canonical version to point at the "most recent" entry. | 978 // Update canonical version to point at the "most recent" entry. |
979 canonical_server_map_[suffix_server_id] = server_id; | 979 canonical_server_map_[suffix_server_id] = server_id; |
980 | 980 |
981 server_state->InitializeFrom(*canonical_state); | 981 server_state->InitializeFrom(*canonical_state); |
982 return true; | 982 return true; |
983 } | 983 } |
984 | 984 |
985 } // namespace net | 985 } // namespace net |
OLD | NEW |