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

Side by Side Diff: net/quic/quic_framer.cc

Issue 181483006: PACKET_NBYTE_GUID -> PACKET_NBYTE_CONNECTION_ID (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: small comment fix Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_framer_test.cc » ('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/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include "base/containers/hash_tables.h" 7 #include "base/containers/hash_tables.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "net/quic/crypto/crypto_framer.h" 9 #include "net/quic/crypto/crypto_framer.h"
10 #include "net/quic/crypto/crypto_handshake_message.h" 10 #include "net/quic/crypto/crypto_handshake_message.h"
(...skipping 20 matching lines...) Expand all
31 // Mask to select the lowest 48 bits of a sequence number. 31 // Mask to select the lowest 48 bits of a sequence number.
32 const QuicPacketSequenceNumber k6ByteSequenceNumberMask = 32 const QuicPacketSequenceNumber k6ByteSequenceNumberMask =
33 GG_UINT64_C(0x0000FFFFFFFFFFFF); 33 GG_UINT64_C(0x0000FFFFFFFFFFFF);
34 const QuicPacketSequenceNumber k4ByteSequenceNumberMask = 34 const QuicPacketSequenceNumber k4ByteSequenceNumberMask =
35 GG_UINT64_C(0x00000000FFFFFFFF); 35 GG_UINT64_C(0x00000000FFFFFFFF);
36 const QuicPacketSequenceNumber k2ByteSequenceNumberMask = 36 const QuicPacketSequenceNumber k2ByteSequenceNumberMask =
37 GG_UINT64_C(0x000000000000FFFF); 37 GG_UINT64_C(0x000000000000FFFF);
38 const QuicPacketSequenceNumber k1ByteSequenceNumberMask = 38 const QuicPacketSequenceNumber k1ByteSequenceNumberMask =
39 GG_UINT64_C(0x00000000000000FF); 39 GG_UINT64_C(0x00000000000000FF);
40 40
41 const QuicGuid k1ByteGuidMask = GG_UINT64_C(0x00000000000000FF); 41 const QuicConnectionId k1ByteConnectionIdMask = GG_UINT64_C(0x00000000000000FF);
42 const QuicGuid k4ByteGuidMask = GG_UINT64_C(0x00000000FFFFFFFF); 42 const QuicConnectionId k4ByteConnectionIdMask = GG_UINT64_C(0x00000000FFFFFFFF);
43 43
44 // Number of bits the sequence number length bits are shifted from the right 44 // Number of bits the sequence number length bits are shifted from the right
45 // edge of the public header. 45 // edge of the public header.
46 const uint8 kPublicHeaderSequenceNumberShift = 4; 46 const uint8 kPublicHeaderSequenceNumberShift = 4;
47 47
48 // New Frame Types, QUIC v. >= 10: 48 // New Frame Types, QUIC v. >= 10:
49 // There are two interpretations for the Frame Type byte in the QUIC protocol, 49 // There are two interpretations for the Frame Type byte in the QUIC protocol,
50 // resulting in two Frame Types: Special Frame Types and Regular Frame Types. 50 // resulting in two Frame Types: Special Frame Types and Regular Frame Types.
51 // 51 //
52 // Regular Frame Types use the Frame Type byte simply. Currently defined 52 // Regular Frame Types use the Frame Type byte simply. Currently defined
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 } 156 }
157 157
158 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions, 158 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions,
159 QuicTime creation_time, 159 QuicTime creation_time,
160 bool is_server) 160 bool is_server)
161 : visitor_(NULL), 161 : visitor_(NULL),
162 fec_builder_(NULL), 162 fec_builder_(NULL),
163 entropy_calculator_(NULL), 163 entropy_calculator_(NULL),
164 error_(QUIC_NO_ERROR), 164 error_(QUIC_NO_ERROR),
165 last_sequence_number_(0), 165 last_sequence_number_(0),
166 last_serialized_guid_(0), 166 last_serialized_connection_id_(0),
167 supported_versions_(supported_versions), 167 supported_versions_(supported_versions),
168 alternative_decrypter_latch_(false), 168 alternative_decrypter_latch_(false),
169 is_server_(is_server), 169 is_server_(is_server),
170 creation_time_(creation_time) { 170 creation_time_(creation_time) {
171 DCHECK(!supported_versions.empty()); 171 DCHECK(!supported_versions.empty());
172 quic_version_ = supported_versions_[0]; 172 quic_version_ = supported_versions_[0];
173 decrypter_.reset(QuicDecrypter::Create(kNULL)); 173 decrypter_.reset(QuicDecrypter::Create(kNULL));
174 encrypter_[ENCRYPTION_NONE].reset( 174 encrypter_[ENCRYPTION_NONE].reset(
175 QuicEncrypter::Create(kNULL)); 175 QuicEncrypter::Create(kNULL));
176 } 176 }
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 if (offset == 0) { 263 if (offset == 0) {
264 return i; 264 return i;
265 } 265 }
266 } 266 }
267 LOG(DFATAL) << "Failed to determine StreamOffsetSize."; 267 LOG(DFATAL) << "Failed to determine StreamOffsetSize.";
268 return 8; 268 return 8;
269 } 269 }
270 270
271 // static 271 // static
272 size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) { 272 size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) {
273 return kPublicFlagsSize + PACKET_8BYTE_GUID + 273 return kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID +
274 number_versions * kQuicVersionSize; 274 number_versions * kQuicVersionSize;
275 } 275 }
276 276
277 bool QuicFramer::IsSupportedVersion(const QuicVersion version) const { 277 bool QuicFramer::IsSupportedVersion(const QuicVersion version) const {
278 for (size_t i = 0; i < supported_versions_.size(); ++i) { 278 for (size_t i = 0; i < supported_versions_.size(); ++i) {
279 if (version == supported_versions_[i]) { 279 if (version == supported_versions_[i]) {
280 return true; 280 return true;
281 } 281 }
282 } 282 }
283 return false; 283 return false;
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 return kNoPacket; 448 return kNoPacket;
449 } 449 }
450 } 450 }
451 451
452 // Save the length before writing, because take clears it. 452 // Save the length before writing, because take clears it.
453 const size_t len = writer.length(); 453 const size_t len = writer.length();
454 // Less than or equal because truncated acks end up with max_plaintex_size 454 // Less than or equal because truncated acks end up with max_plaintex_size
455 // length, even though they're typically slightly shorter. 455 // length, even though they're typically slightly shorter.
456 DCHECK_LE(len, packet_size); 456 DCHECK_LE(len, packet_size);
457 QuicPacket* packet = QuicPacket::NewDataPacket( 457 QuicPacket* packet = QuicPacket::NewDataPacket(
458 writer.take(), len, true, header.public_header.guid_length, 458 writer.take(), len, true, header.public_header.connection_id_length,
459 header.public_header.version_flag, 459 header.public_header.version_flag,
460 header.public_header.sequence_number_length); 460 header.public_header.sequence_number_length);
461 461
462 if (fec_builder_) { 462 if (fec_builder_) {
463 fec_builder_->OnBuiltFecProtectedPayload(header, 463 fec_builder_->OnBuiltFecProtectedPayload(header,
464 packet->FecProtectedData()); 464 packet->FecProtectedData());
465 } 465 }
466 466
467 return SerializedPacket(header.packet_sequence_number, 467 return SerializedPacket(header.packet_sequence_number,
468 header.public_header.sequence_number_length, packet, 468 header.public_header.sequence_number_length, packet,
(...skipping 17 matching lines...) Expand all
486 486
487 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) { 487 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) {
488 LOG(DFATAL) << "Failed to add FEC"; 488 LOG(DFATAL) << "Failed to add FEC";
489 return kNoPacket; 489 return kNoPacket;
490 } 490 }
491 491
492 return SerializedPacket( 492 return SerializedPacket(
493 header.packet_sequence_number, 493 header.packet_sequence_number,
494 header.public_header.sequence_number_length, 494 header.public_header.sequence_number_length,
495 QuicPacket::NewFecPacket(writer.take(), len, true, 495 QuicPacket::NewFecPacket(writer.take(), len, true,
496 header.public_header.guid_length, 496 header.public_header.connection_id_length,
497 header.public_header.version_flag, 497 header.public_header.version_flag,
498 header.public_header.sequence_number_length), 498 header.public_header.sequence_number_length),
499 GetPacketEntropyHash(header), NULL); 499 GetPacketEntropyHash(header), NULL);
500 } 500 }
501 501
502 // static 502 // static
503 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket( 503 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket(
504 const QuicPublicResetPacket& packet) { 504 const QuicPublicResetPacket& packet) {
505 DCHECK(packet.public_header.reset_flag); 505 DCHECK(packet.public_header.reset_flag);
506 506
507 CryptoHandshakeMessage reset; 507 CryptoHandshakeMessage reset;
508 reset.set_tag(kPRST); 508 reset.set_tag(kPRST);
509 reset.SetValue(kRNON, packet.nonce_proof); 509 reset.SetValue(kRNON, packet.nonce_proof);
510 reset.SetValue(kRSEQ, packet.rejected_sequence_number); 510 reset.SetValue(kRSEQ, packet.rejected_sequence_number);
511 if (!packet.client_address.address().empty()) { 511 if (!packet.client_address.address().empty()) {
512 // packet.client_address is non-empty. 512 // packet.client_address is non-empty.
513 QuicSocketAddressCoder address_coder(packet.client_address); 513 QuicSocketAddressCoder address_coder(packet.client_address);
514 string serialized_address = address_coder.Encode(); 514 string serialized_address = address_coder.Encode();
515 if (serialized_address.empty()) { 515 if (serialized_address.empty()) {
516 return NULL; 516 return NULL;
517 } 517 }
518 reset.SetStringPiece(kCADR, serialized_address); 518 reset.SetStringPiece(kCADR, serialized_address);
519 } 519 }
520 const QuicData& reset_serialized = reset.GetSerialized(); 520 const QuicData& reset_serialized = reset.GetSerialized();
521 521
522 size_t len = kPublicFlagsSize + PACKET_8BYTE_GUID + reset_serialized.length(); 522 size_t len =
523 kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + reset_serialized.length();
523 QuicDataWriter writer(len); 524 QuicDataWriter writer(len);
524 525
525 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_RST | 526 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_RST |
526 PACKET_PUBLIC_FLAGS_8BYTE_GUID); 527 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
527 if (!writer.WriteUInt8(flags)) { 528 if (!writer.WriteUInt8(flags)) {
528 return NULL; 529 return NULL;
529 } 530 }
530 531
531 if (!writer.WriteUInt64(packet.public_header.guid)) { 532 if (!writer.WriteUInt64(packet.public_header.connection_id)) {
532 return NULL; 533 return NULL;
533 } 534 }
534 535
535 if (!writer.WriteBytes(reset_serialized.data(), reset_serialized.length())) { 536 if (!writer.WriteBytes(reset_serialized.data(), reset_serialized.length())) {
536 return NULL; 537 return NULL;
537 } 538 }
538 539
539 return new QuicEncryptedPacket(writer.take(), len, true); 540 return new QuicEncryptedPacket(writer.take(), len, true);
540 } 541 }
541 542
542 QuicEncryptedPacket* QuicFramer::BuildVersionNegotiationPacket( 543 QuicEncryptedPacket* QuicFramer::BuildVersionNegotiationPacket(
543 const QuicPacketPublicHeader& header, 544 const QuicPacketPublicHeader& header,
544 const QuicVersionVector& supported_versions) { 545 const QuicVersionVector& supported_versions) {
545 DCHECK(header.version_flag); 546 DCHECK(header.version_flag);
546 size_t len = GetVersionNegotiationPacketSize(supported_versions.size()); 547 size_t len = GetVersionNegotiationPacketSize(supported_versions.size());
547 QuicDataWriter writer(len); 548 QuicDataWriter writer(len);
548 549
549 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_VERSION | 550 uint8 flags = static_cast<uint8>(PACKET_PUBLIC_FLAGS_VERSION |
550 PACKET_PUBLIC_FLAGS_8BYTE_GUID); 551 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID);
551 if (!writer.WriteUInt8(flags)) { 552 if (!writer.WriteUInt8(flags)) {
552 return NULL; 553 return NULL;
553 } 554 }
554 555
555 if (!writer.WriteUInt64(header.guid)) { 556 if (!writer.WriteUInt64(header.connection_id)) {
556 return NULL; 557 return NULL;
557 } 558 }
558 559
559 for (size_t i = 0; i < supported_versions.size(); ++i) { 560 for (size_t i = 0; i < supported_versions.size(); ++i) {
560 if (!writer.WriteUInt32(QuicVersionToQuicTag(supported_versions[i]))) { 561 if (!writer.WriteUInt32(QuicVersionToQuicTag(supported_versions[i]))) {
561 return NULL; 562 return NULL;
562 } 563 }
563 } 564 }
564 565
565 return new QuicEncryptedPacket(writer.take(), len, true); 566 return new QuicEncryptedPacket(writer.take(), len, true);
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 public_flags |= PACKET_PUBLIC_FLAGS_RST; 761 public_flags |= PACKET_PUBLIC_FLAGS_RST;
761 } 762 }
762 if (header.public_header.version_flag) { 763 if (header.public_header.version_flag) {
763 public_flags |= PACKET_PUBLIC_FLAGS_VERSION; 764 public_flags |= PACKET_PUBLIC_FLAGS_VERSION;
764 } 765 }
765 766
766 public_flags |= 767 public_flags |=
767 GetSequenceNumberFlags(header.public_header.sequence_number_length) 768 GetSequenceNumberFlags(header.public_header.sequence_number_length)
768 << kPublicHeaderSequenceNumberShift; 769 << kPublicHeaderSequenceNumberShift;
769 770
770 switch (header.public_header.guid_length) { 771 switch (header.public_header.connection_id_length) {
771 case PACKET_0BYTE_GUID: 772 case PACKET_0BYTE_CONNECTION_ID:
772 if (!writer->WriteUInt8(public_flags | PACKET_PUBLIC_FLAGS_0BYTE_GUID)) { 773 if (!writer->WriteUInt8(
774 public_flags | PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID)) {
773 return false; 775 return false;
774 } 776 }
775 break; 777 break;
776 case PACKET_1BYTE_GUID: 778 case PACKET_1BYTE_CONNECTION_ID:
777 if (!writer->WriteUInt8(public_flags | PACKET_PUBLIC_FLAGS_1BYTE_GUID)) { 779 if (!writer->WriteUInt8(
780 public_flags | PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID)) {
778 return false; 781 return false;
779 } 782 }
780 if (!writer->WriteUInt8(header.public_header.guid & k1ByteGuidMask)) { 783 if (!writer->WriteUInt8(
784 header.public_header.connection_id & k1ByteConnectionIdMask)) {
781 return false; 785 return false;
782 } 786 }
783 break; 787 break;
784 case PACKET_4BYTE_GUID: 788 case PACKET_4BYTE_CONNECTION_ID:
785 if (!writer->WriteUInt8(public_flags | PACKET_PUBLIC_FLAGS_4BYTE_GUID)) { 789 if (!writer->WriteUInt8(
790 public_flags | PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID)) {
786 return false; 791 return false;
787 } 792 }
788 if (!writer->WriteUInt32(header.public_header.guid & k4ByteGuidMask)) { 793 if (!writer->WriteUInt32(
794 header.public_header.connection_id & k4ByteConnectionIdMask)) {
789 return false; 795 return false;
790 } 796 }
791 break; 797 break;
792 case PACKET_8BYTE_GUID: 798 case PACKET_8BYTE_CONNECTION_ID:
793 if (!writer->WriteUInt8(public_flags | PACKET_PUBLIC_FLAGS_8BYTE_GUID)) { 799 if (!writer->WriteUInt8(
800 public_flags | PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID)) {
794 return false; 801 return false;
795 } 802 }
796 if (!writer->WriteUInt64(header.public_header.guid)) { 803 if (!writer->WriteUInt64(header.public_header.connection_id)) {
797 return false; 804 return false;
798 } 805 }
799 break; 806 break;
800 } 807 }
801 last_serialized_guid_ = header.public_header.guid; 808 last_serialized_connection_id_ = header.public_header.connection_id;
802 809
803 if (header.public_header.version_flag) { 810 if (header.public_header.version_flag) {
804 DCHECK(!is_server_); 811 DCHECK(!is_server_);
805 writer->WriteUInt32(QuicVersionToQuicTag(quic_version_)); 812 writer->WriteUInt32(QuicVersionToQuicTag(quic_version_));
806 } 813 }
807 814
808 if (!AppendPacketSequenceNumber(header.public_header.sequence_number_length, 815 if (!AppendPacketSequenceNumber(header.public_header.sequence_number_length,
809 header.packet_sequence_number, writer)) { 816 header.packet_sequence_number, writer)) {
810 return false; 817 return false;
811 } 818 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 if (!public_header->version_flag && public_flags > PACKET_PUBLIC_FLAGS_MAX) { 888 if (!public_header->version_flag && public_flags > PACKET_PUBLIC_FLAGS_MAX) {
882 set_detailed_error("Illegal public flags value."); 889 set_detailed_error("Illegal public flags value.");
883 return false; 890 return false;
884 } 891 }
885 892
886 if (public_header->reset_flag && public_header->version_flag) { 893 if (public_header->reset_flag && public_header->version_flag) {
887 set_detailed_error("Got version flag in reset packet"); 894 set_detailed_error("Got version flag in reset packet");
888 return false; 895 return false;
889 } 896 }
890 897
891 switch (public_flags & PACKET_PUBLIC_FLAGS_8BYTE_GUID) { 898 switch (public_flags & PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID) {
892 case PACKET_PUBLIC_FLAGS_8BYTE_GUID: 899 case PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID:
893 if (!reader_->ReadUInt64(&public_header->guid)) { 900 if (!reader_->ReadUInt64(&public_header->connection_id)) {
894 set_detailed_error("Unable to read GUID."); 901 set_detailed_error("Unable to read ConnectionId.");
895 return false; 902 return false;
896 } 903 }
897 public_header->guid_length = PACKET_8BYTE_GUID; 904 public_header->connection_id_length = PACKET_8BYTE_CONNECTION_ID;
898 break; 905 break;
899 case PACKET_PUBLIC_FLAGS_4BYTE_GUID: 906 case PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID:
900 // If the guid is truncated, expect to read the last serialized guid. 907 // If the connection_id is truncated, expect to read the last serialized
901 if (!reader_->ReadBytes(&public_header->guid, PACKET_4BYTE_GUID)) { 908 // connection_id.
902 set_detailed_error("Unable to read GUID."); 909 if (!reader_->ReadBytes(&public_header->connection_id,
910 PACKET_4BYTE_CONNECTION_ID)) {
911 set_detailed_error("Unable to read ConnectionId.");
903 return false; 912 return false;
904 } 913 }
905 if ((public_header->guid & k4ByteGuidMask) != 914 if ((public_header->connection_id & k4ByteConnectionIdMask) !=
906 (last_serialized_guid_ & k4ByteGuidMask)) { 915 (last_serialized_connection_id_ & k4ByteConnectionIdMask)) {
907 set_detailed_error( 916 set_detailed_error("Truncated 4 byte ConnectionId does not match "
908 "Truncated 4 byte GUID does not match previous guid."); 917 "previous connection_id.");
909 return false; 918 return false;
910 } 919 }
911 public_header->guid_length = PACKET_4BYTE_GUID; 920 public_header->connection_id_length = PACKET_4BYTE_CONNECTION_ID;
912 public_header->guid = last_serialized_guid_; 921 public_header->connection_id = last_serialized_connection_id_;
913 break; 922 break;
914 case PACKET_PUBLIC_FLAGS_1BYTE_GUID: 923 case PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID:
915 if (!reader_->ReadBytes(&public_header->guid, PACKET_1BYTE_GUID)) { 924 if (!reader_->ReadBytes(&public_header->connection_id,
916 set_detailed_error("Unable to read GUID."); 925 PACKET_1BYTE_CONNECTION_ID)) {
926 set_detailed_error("Unable to read ConnectionId.");
917 return false; 927 return false;
918 } 928 }
919 if ((public_header->guid & k1ByteGuidMask) != 929 if ((public_header->connection_id & k1ByteConnectionIdMask) !=
920 (last_serialized_guid_ & k1ByteGuidMask)) { 930 (last_serialized_connection_id_ & k1ByteConnectionIdMask)) {
921 set_detailed_error( 931 set_detailed_error("Truncated 1 byte ConnectionId does not match "
922 "Truncated 1 byte GUID does not match previous guid."); 932 "previous connection_id.");
923 return false; 933 return false;
924 } 934 }
925 public_header->guid_length = PACKET_1BYTE_GUID; 935 public_header->connection_id_length = PACKET_1BYTE_CONNECTION_ID;
926 public_header->guid = last_serialized_guid_; 936 public_header->connection_id = last_serialized_connection_id_;
927 break; 937 break;
928 case PACKET_PUBLIC_FLAGS_0BYTE_GUID: 938 case PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID:
929 public_header->guid_length = PACKET_0BYTE_GUID; 939 public_header->connection_id_length = PACKET_0BYTE_CONNECTION_ID;
930 public_header->guid = last_serialized_guid_; 940 public_header->connection_id = last_serialized_connection_id_;
931 break; 941 break;
932 } 942 }
933 943
934 public_header->sequence_number_length = 944 public_header->sequence_number_length =
935 ReadSequenceNumberLength( 945 ReadSequenceNumberLength(
936 public_flags >> kPublicHeaderSequenceNumberShift); 946 public_flags >> kPublicHeaderSequenceNumberShift);
937 947
938 // Read the version only if the packet is from the client. 948 // Read the version only if the packet is from the client.
939 // version flag from the server means version negotiation packet. 949 // version flag from the server means version negotiation packet.
940 if (public_header->version_flag && is_server_) { 950 if (public_header->version_flag && is_server_) {
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
1681 set_detailed_error("Unable to read stream_id."); 1691 set_detailed_error("Unable to read stream_id.");
1682 return false; 1692 return false;
1683 } 1693 }
1684 1694
1685 return true; 1695 return true;
1686 } 1696 }
1687 1697
1688 // static 1698 // static
1689 StringPiece QuicFramer::GetAssociatedDataFromEncryptedPacket( 1699 StringPiece QuicFramer::GetAssociatedDataFromEncryptedPacket(
1690 const QuicEncryptedPacket& encrypted, 1700 const QuicEncryptedPacket& encrypted,
1691 QuicGuidLength guid_length, 1701 QuicConnectionIdLength connection_id_length,
1692 bool includes_version, 1702 bool includes_version,
1693 QuicSequenceNumberLength sequence_number_length) { 1703 QuicSequenceNumberLength sequence_number_length) {
1694 return StringPiece(encrypted.data() + kStartOfHashData, 1704 return StringPiece(
1695 GetStartOfEncryptedData( 1705 encrypted.data() + kStartOfHashData, GetStartOfEncryptedData(
1696 guid_length, includes_version, sequence_number_length) 1706 connection_id_length, includes_version, sequence_number_length)
1697 - kStartOfHashData); 1707 - kStartOfHashData);
1698 } 1708 }
1699 1709
1700 void QuicFramer::SetDecrypter(QuicDecrypter* decrypter) { 1710 void QuicFramer::SetDecrypter(QuicDecrypter* decrypter) {
1701 DCHECK(alternative_decrypter_.get() == NULL); 1711 DCHECK(alternative_decrypter_.get() == NULL);
1702 decrypter_.reset(decrypter); 1712 decrypter_.reset(decrypter);
1703 } 1713 }
1704 1714
1705 void QuicFramer::SetAlternativeDecrypter(QuicDecrypter* decrypter, 1715 void QuicFramer::SetAlternativeDecrypter(QuicDecrypter* decrypter,
1706 bool latch_once_used) { 1716 bool latch_once_used) {
1707 alternative_decrypter_.reset(decrypter); 1717 alternative_decrypter_.reset(decrypter);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1784 const QuicEncryptedPacket& packet) { 1794 const QuicEncryptedPacket& packet) {
1785 StringPiece encrypted; 1795 StringPiece encrypted;
1786 if (!reader_->ReadStringPiece(&encrypted, reader_->BytesRemaining())) { 1796 if (!reader_->ReadStringPiece(&encrypted, reader_->BytesRemaining())) {
1787 return false; 1797 return false;
1788 } 1798 }
1789 DCHECK(decrypter_.get() != NULL); 1799 DCHECK(decrypter_.get() != NULL);
1790 decrypted_.reset(decrypter_->DecryptPacket( 1800 decrypted_.reset(decrypter_->DecryptPacket(
1791 header.packet_sequence_number, 1801 header.packet_sequence_number,
1792 GetAssociatedDataFromEncryptedPacket( 1802 GetAssociatedDataFromEncryptedPacket(
1793 packet, 1803 packet,
1794 header.public_header.guid_length, 1804 header.public_header.connection_id_length,
1795 header.public_header.version_flag, 1805 header.public_header.version_flag,
1796 header.public_header.sequence_number_length), 1806 header.public_header.sequence_number_length),
1797 encrypted)); 1807 encrypted));
1798 if (decrypted_.get() == NULL && alternative_decrypter_.get() != NULL) { 1808 if (decrypted_.get() == NULL && alternative_decrypter_.get() != NULL) {
1799 decrypted_.reset(alternative_decrypter_->DecryptPacket( 1809 decrypted_.reset(alternative_decrypter_->DecryptPacket(
1800 header.packet_sequence_number, 1810 header.packet_sequence_number,
1801 GetAssociatedDataFromEncryptedPacket( 1811 GetAssociatedDataFromEncryptedPacket(
1802 packet, 1812 packet,
1803 header.public_header.guid_length, 1813 header.public_header.connection_id_length,
1804 header.public_header.version_flag, 1814 header.public_header.version_flag,
1805 header.public_header.sequence_number_length), 1815 header.public_header.sequence_number_length),
1806 encrypted)); 1816 encrypted));
1807 if (decrypted_.get() != NULL) { 1817 if (decrypted_.get() != NULL) {
1808 if (alternative_decrypter_latch_) { 1818 if (alternative_decrypter_latch_) {
1809 // Switch to the alternative decrypter and latch so that we cannot 1819 // Switch to the alternative decrypter and latch so that we cannot
1810 // switch back. 1820 // switch back.
1811 decrypter_.reset(alternative_decrypter_.release()); 1821 decrypter_.reset(alternative_decrypter_.release());
1812 } else { 1822 } else {
1813 // Switch the alternative decrypter so that we use it first next time. 1823 // Switch the alternative decrypter so that we use it first next time.
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
2386 2396
2387 bool QuicFramer::RaiseError(QuicErrorCode error) { 2397 bool QuicFramer::RaiseError(QuicErrorCode error) {
2388 DVLOG(1) << "Error detail: " << detailed_error_; 2398 DVLOG(1) << "Error detail: " << detailed_error_;
2389 set_error(error); 2399 set_error(error);
2390 visitor_->OnError(this); 2400 visitor_->OnError(this);
2391 reader_.reset(NULL); 2401 reader_.reset(NULL);
2392 return false; 2402 return false;
2393 } 2403 }
2394 2404
2395 } // namespace net 2405 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698