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

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

Issue 2515613002: deprecate FLAGS_quic_disable_pre_34 (Closed)
Patch Set: 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_framer.h ('k') | net/quic/core/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/core/quic_framer.h" 5 #include "net/quic/core/quic_framer.h"
6 6
7 #include <cstdint> 7 #include <cstdint>
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 const uint8_t kQuicStreamDataLengthShift = 1; 84 const uint8_t kQuicStreamDataLengthShift = 1;
85 const uint8_t kQuicStreamDataLengthMask = 0x01; 85 const uint8_t kQuicStreamDataLengthMask = 0x01;
86 86
87 // Fin bit may be set or not. 87 // Fin bit may be set or not.
88 const uint8_t kQuicStreamFinShift = 1; 88 const uint8_t kQuicStreamFinShift = 1;
89 const uint8_t kQuicStreamFinMask = 0x01; 89 const uint8_t kQuicStreamFinMask = 0x01;
90 90
91 // packet number size shift used in AckFrames. 91 // packet number size shift used in AckFrames.
92 const uint8_t kQuicSequenceNumberLengthShift = 2; 92 const uint8_t kQuicSequenceNumberLengthShift = 2;
93 93
94 // Acks may be truncated.
95 const uint8_t kQuicAckTruncatedShift = 1;
96 const uint8_t kQuicAckTruncatedMask = 0x01;
97
98 // Acks may not have any nacks.
99 const uint8_t kQuicHasNacksMask = 0x01;
100 // Acks may have only one ack block. 94 // Acks may have only one ack block.
101 const uint8_t kQuicHasMultipleAckBlocksMask = 0x01; 95 const uint8_t kQuicHasMultipleAckBlocksMask = 0x01;
102 const uint8_t kQuicHasMultipleAckBlocksShift = 1; 96 const uint8_t kQuicHasMultipleAckBlocksShift = 1;
103 97
104 // Returns the absolute value of the difference between |a| and |b|. 98 // Returns the absolute value of the difference between |a| and |b|.
105 QuicPacketNumber Delta(QuicPacketNumber a, QuicPacketNumber b) { 99 QuicPacketNumber Delta(QuicPacketNumber a, QuicPacketNumber b) {
106 // Since these are unsigned numbers, we can't just return abs(a - b) 100 // Since these are unsigned numbers, we can't just return abs(a - b)
107 if (a < b) { 101 if (a < b) {
108 return b - a; 102 return b - a;
109 } 103 }
(...skipping 21 matching lines...) Expand all
131 return PACKET_6BYTE_PACKET_NUMBER; 125 return PACKET_6BYTE_PACKET_NUMBER;
132 } 126 }
133 } 127 }
134 128
135 } // namespace 129 } // namespace
136 130
137 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions, 131 QuicFramer::QuicFramer(const QuicVersionVector& supported_versions,
138 QuicTime creation_time, 132 QuicTime creation_time,
139 Perspective perspective) 133 Perspective perspective)
140 : visitor_(nullptr), 134 : visitor_(nullptr),
141 entropy_calculator_(nullptr),
142 error_(QUIC_NO_ERROR), 135 error_(QUIC_NO_ERROR),
143 last_packet_number_(0), 136 last_packet_number_(0),
144 largest_packet_number_(0), 137 largest_packet_number_(0),
145 last_path_id_(kInvalidPathId), 138 last_path_id_(kInvalidPathId),
146 last_serialized_connection_id_(0), 139 last_serialized_connection_id_(0),
147 supported_versions_(supported_versions), 140 supported_versions_(supported_versions),
148 decrypter_level_(ENCRYPTION_NONE), 141 decrypter_level_(ENCRYPTION_NONE),
149 alternative_decrypter_level_(ENCRYPTION_NONE), 142 alternative_decrypter_level_(ENCRYPTION_NONE),
150 alternative_decrypter_latch_(false), 143 alternative_decrypter_latch_(false),
151 perspective_(perspective), 144 perspective_(perspective),
(...skipping 16 matching lines...) Expand all
168 GetStreamOffsetSize(offset) + 161 GetStreamOffsetSize(offset) +
169 (last_frame_in_packet ? 0 : kQuicStreamPayloadLengthSize); 162 (last_frame_in_packet ? 0 : kQuicStreamPayloadLengthSize);
170 } 163 }
171 164
172 // static 165 // static
173 size_t QuicFramer::GetMinAckFrameSize( 166 size_t QuicFramer::GetMinAckFrameSize(
174 QuicVersion version, 167 QuicVersion version,
175 QuicPacketNumberLength largest_observed_length) { 168 QuicPacketNumberLength largest_observed_length) {
176 size_t min_size = kQuicFrameTypeSize + largest_observed_length + 169 size_t min_size = kQuicFrameTypeSize + largest_observed_length +
177 kQuicDeltaTimeLargestObservedSize; 170 kQuicDeltaTimeLargestObservedSize;
178 if (version <= QUIC_VERSION_33) {
179 return min_size + kQuicEntropyHashSize;
180 }
181 return min_size + kQuicNumTimestampsSize; 171 return min_size + kQuicNumTimestampsSize;
182 } 172 }
183 173
184 // static 174 // static
185 size_t QuicFramer::GetStopWaitingFrameSize( 175 size_t QuicFramer::GetStopWaitingFrameSize(
186 QuicVersion version, 176 QuicVersion version,
187 QuicPacketNumberLength packet_number_length) { 177 QuicPacketNumberLength packet_number_length) {
188 size_t min_size = kQuicFrameTypeSize + packet_number_length; 178 size_t min_size = kQuicFrameTypeSize + packet_number_length;
189 if (version <= QUIC_VERSION_33) {
190 return min_size + kQuicEntropyHashSize;
191 }
192 return min_size; 179 return min_size;
193 } 180 }
194 181
195 // static 182 // static
196 size_t QuicFramer::GetRstStreamFrameSize() { 183 size_t QuicFramer::GetRstStreamFrameSize() {
197 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize + 184 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize +
198 kQuicErrorCodeSize; 185 kQuicErrorCodeSize;
199 } 186 }
200 187
201 // static 188 // static
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 GetMinAckFrameSize(quic_version_, PACKET_6BYTE_PACKET_NUMBER); 304 GetMinAckFrameSize(quic_version_, PACKET_6BYTE_PACKET_NUMBER);
318 if (can_truncate) { 305 if (can_truncate) {
319 // Truncate the frame so the packet will not exceed kMaxPacketSize. 306 // Truncate the frame so the packet will not exceed kMaxPacketSize.
320 // Note that we may not use every byte of the writer in this case. 307 // Note that we may not use every byte of the writer in this case.
321 DVLOG(1) << "Truncating large frame, free bytes: " << free_bytes; 308 DVLOG(1) << "Truncating large frame, free bytes: " << free_bytes;
322 return free_bytes; 309 return free_bytes;
323 } 310 }
324 return 0; 311 return 0;
325 } 312 }
326 313
327 QuicFramer::AckFrameInfo::AckFrameInfo() : max_delta(0) {}
328
329 QuicFramer::AckFrameInfo::AckFrameInfo(const AckFrameInfo& other) = default;
330
331 QuicFramer::AckFrameInfo::~AckFrameInfo() {}
332
333 QuicFramer::AckBlock::AckBlock(uint8_t gap, QuicPacketNumber length)
334 : gap(gap), length(length) {}
335
336 QuicFramer::AckBlock::AckBlock(const AckBlock& other) = default;
337
338 QuicFramer::AckBlock::~AckBlock() {}
339
340 QuicFramer::NewAckFrameInfo::NewAckFrameInfo() 314 QuicFramer::NewAckFrameInfo::NewAckFrameInfo()
341 : max_block_length(0), first_block_length(0), num_ack_blocks(0) {} 315 : max_block_length(0), first_block_length(0), num_ack_blocks(0) {}
342 316
343 QuicFramer::NewAckFrameInfo::NewAckFrameInfo(const NewAckFrameInfo& other) = 317 QuicFramer::NewAckFrameInfo::NewAckFrameInfo(const NewAckFrameInfo& other) =
344 default; 318 default;
345 319
346 QuicFramer::NewAckFrameInfo::~NewAckFrameInfo() {} 320 QuicFramer::NewAckFrameInfo::~NewAckFrameInfo() {}
347 321
348 // static
349 QuicPacketEntropyHash QuicFramer::GetPacketEntropyHash(
350 const QuicPacketHeader& header) {
351 return header.entropy_flag << (header.packet_number % 8);
352 }
353
354 size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header, 322 size_t QuicFramer::BuildDataPacket(const QuicPacketHeader& header,
355 const QuicFrames& frames, 323 const QuicFrames& frames,
356 char* buffer, 324 char* buffer,
357 size_t packet_length) { 325 size_t packet_length) {
358 QuicDataWriter writer(packet_length, buffer); 326 QuicDataWriter writer(packet_length, buffer);
359 if (!AppendPacketHeader(header, &writer)) { 327 if (!AppendPacketHeader(header, &writer)) {
360 QUIC_BUG << "AppendPacketHeader failed"; 328 QUIC_BUG << "AppendPacketHeader failed";
361 return 0; 329 return 0;
362 } 330 }
363 331
(...skipping 11 matching lines...) Expand all
375 writer.WritePadding(); 343 writer.WritePadding();
376 break; 344 break;
377 case STREAM_FRAME: 345 case STREAM_FRAME:
378 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length, 346 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length,
379 &writer)) { 347 &writer)) {
380 QUIC_BUG << "AppendStreamFrame failed"; 348 QUIC_BUG << "AppendStreamFrame failed";
381 return 0; 349 return 0;
382 } 350 }
383 break; 351 break;
384 case ACK_FRAME: 352 case ACK_FRAME:
385 if (quic_version_ <= QUIC_VERSION_33) { 353 if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) {
386 if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) { 354 QUIC_BUG << "AppendNewAckFrameAndTypeByte failed";
387 QUIC_BUG << "AppendAckFrameAndTypeByte failed" 355 return 0;
388 << " header: " << header
389 << " ack_fame: " << *frame.ack_frame;
390 return 0;
391 }
392 } else {
393 if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) {
394 QUIC_BUG << "AppendNewAckFrameAndTypeByte failed";
395 return 0;
396 }
397 } 356 }
398 break; 357 break;
399 case STOP_WAITING_FRAME: 358 case STOP_WAITING_FRAME:
400 if (!AppendStopWaitingFrame(header, *frame.stop_waiting_frame, 359 if (!AppendStopWaitingFrame(header, *frame.stop_waiting_frame,
401 &writer)) { 360 &writer)) {
402 QUIC_BUG << "AppendStopWaitingFrame failed"; 361 QUIC_BUG << "AppendStopWaitingFrame failed";
403 return 0; 362 return 0;
404 } 363 }
405 break; 364 break;
406 case MTU_DISCOVERY_FRAME: 365 case MTU_DISCOVERY_FRAME:
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 } 573 }
615 574
616 size_t decrypted_length = 0; 575 size_t decrypted_length = 0;
617 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, 576 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer,
618 buffer_length, &decrypted_length)) { 577 buffer_length, &decrypted_length)) {
619 set_detailed_error("Unable to decrypt payload."); 578 set_detailed_error("Unable to decrypt payload.");
620 return RaiseError(QUIC_DECRYPTION_FAILURE); 579 return RaiseError(QUIC_DECRYPTION_FAILURE);
621 } 580 }
622 581
623 QuicDataReader reader(decrypted_buffer, decrypted_length); 582 QuicDataReader reader(decrypted_buffer, decrypted_length);
624 if (quic_version_ <= QUIC_VERSION_33) {
625 if (!ProcessAuthenticatedHeader(&reader, &header)) {
626 DVLOG(1) << "Unable to process packet header. Stopping parsing.";
627 return false;
628 }
629 }
630 583
631 // Set the last packet number after we have decrypted the packet 584 // Set the last packet number after we have decrypted the packet
632 // so we are confident is not attacker controlled. 585 // so we are confident is not attacker controlled.
633 SetLastPacketNumber(header); 586 SetLastPacketNumber(header);
634 587
635 if (!visitor_->OnPacketHeader(header)) { 588 if (!visitor_->OnPacketHeader(header)) {
636 // The visitor suppresses further processing of the packet. 589 // The visitor suppresses further processing of the packet.
637 return true; 590 return true;
638 } 591 }
639 592
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
713 } 666 }
714 667
715 switch (header.public_header.connection_id_length) { 668 switch (header.public_header.connection_id_length) {
716 case PACKET_0BYTE_CONNECTION_ID: 669 case PACKET_0BYTE_CONNECTION_ID:
717 if (!writer->WriteUInt8(public_flags | 670 if (!writer->WriteUInt8(public_flags |
718 PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID)) { 671 PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID)) {
719 return false; 672 return false;
720 } 673 }
721 break; 674 break;
722 case PACKET_8BYTE_CONNECTION_ID: 675 case PACKET_8BYTE_CONNECTION_ID:
723 if (quic_version_ > QUIC_VERSION_32) { 676 public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID;
724 public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID; 677 if (!FLAGS_quic_remove_v33_hacks2 &&
725 if (!FLAGS_quic_remove_v33_hacks2 && 678 perspective_ == Perspective::IS_CLIENT) {
726 perspective_ == Perspective::IS_CLIENT) {
727 public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD;
728 }
729
730 } else {
731 public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD; 679 public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD;
732 } 680 }
733 if (!writer->WriteUInt8(public_flags) || 681 if (!writer->WriteUInt8(public_flags) ||
734 !writer->WriteUInt64(header.public_header.connection_id)) { 682 !writer->WriteUInt64(header.public_header.connection_id)) {
735 return false; 683 return false;
736 } 684 }
737 break; 685 break;
738 } 686 }
739 last_serialized_connection_id_ = header.public_header.connection_id; 687 last_serialized_connection_id_ = header.public_header.connection_id;
740 688
(...skipping 13 matching lines...) Expand all
754 if (header.public_header.nonce != nullptr && 702 if (header.public_header.nonce != nullptr &&
755 !writer->WriteBytes(header.public_header.nonce, 703 !writer->WriteBytes(header.public_header.nonce,
756 kDiversificationNonceSize)) { 704 kDiversificationNonceSize)) {
757 return false; 705 return false;
758 } 706 }
759 707
760 if (!AppendPacketSequenceNumber(header.public_header.packet_number_length, 708 if (!AppendPacketSequenceNumber(header.public_header.packet_number_length,
761 header.packet_number, writer)) { 709 header.packet_number, writer)) {
762 return false; 710 return false;
763 } 711 }
764 if (quic_version_ > QUIC_VERSION_33) {
765 return true;
766 }
767
768 uint8_t private_flags = 0;
769 if (header.entropy_flag) {
770 private_flags |= PACKET_PRIVATE_FLAGS_ENTROPY;
771 }
772 if (!writer->WriteUInt8(private_flags)) {
773 return false;
774 }
775 712
776 return true; 713 return true;
777 } 714 }
778 715
779 const QuicTime::Delta QuicFramer::CalculateTimestampFromWire( 716 const QuicTime::Delta QuicFramer::CalculateTimestampFromWire(
780 uint32_t time_delta_us) { 717 uint32_t time_delta_us) {
781 // The new time_delta might have wrapped to the next epoch, or it 718 // The new time_delta might have wrapped to the next epoch, or it
782 // might have reverse wrapped to the previous epoch, or it might 719 // might have reverse wrapped to the previous epoch, or it might
783 // remain in the same epoch. Select the time closest to the previous 720 // remain in the same epoch. Select the time closest to the previous
784 // time. 721 // time.
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 last_version_tag_ = version_tag; 856 last_version_tag_ = version_tag;
920 QuicVersion version = QuicTagToQuicVersion(version_tag); 857 QuicVersion version = QuicTagToQuicVersion(version_tag);
921 if (version == quic_version_ && public_flags > PACKET_PUBLIC_FLAGS_MAX) { 858 if (version == quic_version_ && public_flags > PACKET_PUBLIC_FLAGS_MAX) {
922 set_detailed_error("Illegal public flags value."); 859 set_detailed_error("Illegal public flags value.");
923 return false; 860 return false;
924 } 861 }
925 public_header->versions.push_back(version); 862 public_header->versions.push_back(version);
926 } 863 }
927 864
928 // A nonce should only be present in packets from the server to the client, 865 // A nonce should only be present in packets from the server to the client,
929 // which are neither version negotiation nor public reset packets 866 // which are neither version negotiation nor public reset packets.
930 // and only for versions after QUIC_VERSION_32. Earlier versions will 867 if (public_flags & PACKET_PUBLIC_FLAGS_NONCE &&
931 // set this bit when indicating an 8-byte connection ID, which should
932 // not be interpreted as indicating a nonce is present.
933 if (quic_version_ > QUIC_VERSION_32 &&
934 public_flags & PACKET_PUBLIC_FLAGS_NONCE &&
935 !(public_flags & PACKET_PUBLIC_FLAGS_VERSION) && 868 !(public_flags & PACKET_PUBLIC_FLAGS_VERSION) &&
936 !(public_flags & PACKET_PUBLIC_FLAGS_RST) && 869 !(public_flags & PACKET_PUBLIC_FLAGS_RST) &&
937 // The nonce flag from a client is ignored and is assumed to be an older 870 // The nonce flag from a client is ignored and is assumed to be an older
938 // client indicating an eight-byte connection ID. 871 // client indicating an eight-byte connection ID.
939 perspective_ == Perspective::IS_CLIENT) { 872 perspective_ == Perspective::IS_CLIENT) {
940 if (!reader->ReadBytes(reinterpret_cast<uint8_t*>(last_nonce_.data()), 873 if (!reader->ReadBytes(reinterpret_cast<uint8_t*>(last_nonce_.data()),
941 last_nonce_.size())) { 874 last_nonce_.size())) {
942 set_detailed_error("Unable to read nonce."); 875 set_detailed_error("Unable to read nonce.");
943 return false; 876 return false;
944 } 877 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 return PACKET_FLAGS_4BYTE_PACKET; 909 return PACKET_FLAGS_4BYTE_PACKET;
977 case PACKET_6BYTE_PACKET_NUMBER: 910 case PACKET_6BYTE_PACKET_NUMBER:
978 return PACKET_FLAGS_6BYTE_PACKET; 911 return PACKET_FLAGS_6BYTE_PACKET;
979 default: 912 default:
980 QUIC_BUG << "Unreachable case statement."; 913 QUIC_BUG << "Unreachable case statement.";
981 return PACKET_FLAGS_6BYTE_PACKET; 914 return PACKET_FLAGS_6BYTE_PACKET;
982 } 915 }
983 } 916 }
984 917
985 // static 918 // static
986 QuicFramer::AckFrameInfo QuicFramer::GetAckFrameInfo(
987 const QuicAckFrame& frame) {
988 AckFrameInfo ack_info;
989 if (frame.packets.Empty()) {
990 return ack_info;
991 }
992 DCHECK_GE(frame.largest_observed, frame.packets.Max());
993 QuicPacketNumber last_largest_missing = 0;
994 for (const Interval<QuicPacketNumber>& interval : frame.packets) {
995 for (QuicPacketNumber interval_start = interval.min();
996 interval_start < interval.max();
997 interval_start += (1ull + std::numeric_limits<uint8_t>::max())) {
998 uint8_t cur_range_length =
999 interval.max() - interval_start > std::numeric_limits<uint8_t>::max()
1000 ? std::numeric_limits<uint8_t>::max()
1001 : (interval.max() - interval_start) - 1;
1002 ack_info.nack_ranges[interval_start] = cur_range_length;
1003 }
1004 ack_info.max_delta =
1005 max(ack_info.max_delta, last_largest_missing == 0
1006 ? QuicPacketNumber{0}
1007 : (interval.min() - last_largest_missing));
1008 last_largest_missing = interval.max() - 1;
1009 }
1010 // Include the range to the largest observed.
1011 ack_info.max_delta =
1012 max(ack_info.max_delta, frame.largest_observed - last_largest_missing);
1013 return ack_info;
1014 }
1015
1016 // static
1017 QuicFramer::NewAckFrameInfo QuicFramer::GetNewAckFrameInfo( 919 QuicFramer::NewAckFrameInfo QuicFramer::GetNewAckFrameInfo(
1018 const QuicAckFrame& frame) { 920 const QuicAckFrame& frame) {
1019 NewAckFrameInfo new_ack_info; 921 NewAckFrameInfo new_ack_info;
1020 if (frame.packets.Empty()) { 922 if (frame.packets.Empty()) {
1021 return new_ack_info; 923 return new_ack_info;
1022 } 924 }
1023 // The first block is the last interval. It isn't encoded with the gap-length 925 // The first block is the last interval. It isn't encoded with the gap-length
1024 // encoding, so skip it. 926 // encoding, so skip it.
1025 new_ack_info.first_block_length = frame.packets.LastIntervalLength(); 927 new_ack_info.first_block_length = frame.packets.LastIntervalLength();
1026 auto itr = frame.packets.rbegin(); 928 auto itr = frame.packets.rbegin();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1071 set_detailed_error("packet numbers cannot be 0."); 973 set_detailed_error("packet numbers cannot be 0.");
1072 return RaiseError(QUIC_INVALID_PACKET_HEADER); 974 return RaiseError(QUIC_INVALID_PACKET_HEADER);
1073 } 975 }
1074 976
1075 if (!visitor_->OnUnauthenticatedHeader(*header)) { 977 if (!visitor_->OnUnauthenticatedHeader(*header)) {
1076 return false; 978 return false;
1077 } 979 }
1078 return true; 980 return true;
1079 } 981 }
1080 982
1081 bool QuicFramer::ProcessAuthenticatedHeader(QuicDataReader* reader,
1082 QuicPacketHeader* header) {
1083 uint8_t private_flags;
1084 if (!reader->ReadBytes(&private_flags, 1)) {
1085 set_detailed_error("Unable to read private flags.");
1086 return RaiseError(QUIC_INVALID_PACKET_HEADER);
1087 }
1088
1089 if (private_flags > PACKET_PRIVATE_FLAGS_MAX) {
1090 set_detailed_error("Illegal private flags value.");
1091 return RaiseError(QUIC_INVALID_PACKET_HEADER);
1092 }
1093
1094 header->entropy_flag = (private_flags & PACKET_PRIVATE_FLAGS_ENTROPY) != 0;
1095 header->entropy_hash = GetPacketEntropyHash(*header);
1096 return true;
1097 }
1098
1099 bool QuicFramer::ProcessPathId(QuicDataReader* reader, QuicPathId* path_id) { 983 bool QuicFramer::ProcessPathId(QuicDataReader* reader, QuicPathId* path_id) {
1100 if (!reader->ReadBytes(path_id, 1)) { 984 if (!reader->ReadBytes(path_id, 1)) {
1101 return false; 985 return false;
1102 } 986 }
1103 987
1104 return true; 988 return true;
1105 } 989 }
1106 990
1107 bool QuicFramer::ProcessPacketSequenceNumber( 991 bool QuicFramer::ProcessPacketSequenceNumber(
1108 QuicDataReader* reader, 992 QuicDataReader* reader,
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 DVLOG(1) << "Visitor asked to stop further processing."; 1029 DVLOG(1) << "Visitor asked to stop further processing.";
1146 // Returning true since there was no parsing error. 1030 // Returning true since there was no parsing error.
1147 return true; 1031 return true;
1148 } 1032 }
1149 continue; 1033 continue;
1150 } 1034 }
1151 1035
1152 // Ack Frame 1036 // Ack Frame
1153 if (frame_type & kQuicFrameTypeAckMask) { 1037 if (frame_type & kQuicFrameTypeAckMask) {
1154 QuicAckFrame frame; 1038 QuicAckFrame frame;
1155 if (quic_version_ <= QUIC_VERSION_33) { 1039 if (!ProcessNewAckFrame(reader, frame_type, &frame)) {
1156 if (!ProcessAckFrame(reader, frame_type, &frame)) { 1040 return RaiseError(QUIC_INVALID_ACK_DATA);
1157 return RaiseError(QUIC_INVALID_ACK_DATA);
1158 }
1159 } else {
1160 if (!ProcessNewAckFrame(reader, frame_type, &frame)) {
1161 return RaiseError(QUIC_INVALID_ACK_DATA);
1162 }
1163 } 1041 }
1164 if (!visitor_->OnAckFrame(frame)) { 1042 if (!visitor_->OnAckFrame(frame)) {
1165 DVLOG(1) << "Visitor asked to stop further processing."; 1043 DVLOG(1) << "Visitor asked to stop further processing.";
1166 // Returning true since there was no parsing error. 1044 // Returning true since there was no parsing error.
1167 return true; 1045 return true;
1168 } 1046 }
1169 continue; 1047 continue;
1170 } 1048 }
1171 1049
1172 // This was a special frame type that did not match any 1050 // This was a special frame type that did not match any
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
1345 set_detailed_error("Unable to read frame data."); 1223 set_detailed_error("Unable to read frame data.");
1346 return false; 1224 return false;
1347 } 1225 }
1348 } 1226 }
1349 frame->data_buffer = data.data(); 1227 frame->data_buffer = data.data();
1350 frame->data_length = static_cast<uint16_t>(data.length()); 1228 frame->data_length = static_cast<uint16_t>(data.length());
1351 1229
1352 return true; 1230 return true;
1353 } 1231 }
1354 1232
1355 bool QuicFramer::ProcessAckFrame(QuicDataReader* reader,
1356 uint8_t frame_type,
1357 QuicAckFrame* ack_frame) {
1358 // Determine the three lengths from the frame type: largest observed length,
1359 // missing packet number length, and missing range length.
1360 const QuicPacketNumberLength missing_packet_number_length =
1361 ReadSequenceNumberLength(frame_type);
1362 frame_type >>= kQuicSequenceNumberLengthShift;
1363 const QuicPacketNumberLength largest_observed_packet_number_length =
1364 ReadSequenceNumberLength(frame_type);
1365 frame_type >>= kQuicSequenceNumberLengthShift;
1366 ack_frame->is_truncated = frame_type & kQuicAckTruncatedMask;
1367 frame_type >>= kQuicAckTruncatedShift;
1368 bool has_nacks = frame_type & kQuicHasNacksMask;
1369
1370 if (!reader->ReadBytes(&ack_frame->entropy_hash, 1)) {
1371 set_detailed_error("Unable to read entropy hash for received packets.");
1372 return false;
1373 }
1374
1375 if (!reader->ReadBytes(&ack_frame->largest_observed,
1376 largest_observed_packet_number_length)) {
1377 set_detailed_error("Unable to read largest observed.");
1378 return false;
1379 }
1380
1381 uint64_t ack_delay_time_us;
1382 if (!reader->ReadUFloat16(&ack_delay_time_us)) {
1383 set_detailed_error("Unable to read ack delay time.");
1384 return false;
1385 }
1386
1387 if (ack_delay_time_us == kUFloat16MaxValue) {
1388 ack_frame->ack_delay_time = QuicTime::Delta::Infinite();
1389 } else {
1390 ack_frame->ack_delay_time =
1391 QuicTime::Delta::FromMicroseconds(ack_delay_time_us);
1392 }
1393
1394 if (!ProcessTimestampsInAckFrame(reader, ack_frame)) {
1395 return false;
1396 }
1397
1398 if (!has_nacks) {
1399 return true;
1400 }
1401
1402 uint8_t num_missing_ranges;
1403 if (!reader->ReadBytes(&num_missing_ranges, 1)) {
1404 set_detailed_error("Unable to read num missing packet ranges.");
1405 return false;
1406 }
1407
1408 QuicPacketNumber last_packet_number = ack_frame->largest_observed;
1409 for (size_t i = 0; i < num_missing_ranges; ++i) {
1410 QuicPacketNumber missing_delta = 0;
1411 if (!reader->ReadBytes(&missing_delta, missing_packet_number_length)) {
1412 set_detailed_error("Unable to read missing packet number delta.");
1413 return false;
1414 }
1415 last_packet_number -= missing_delta;
1416 QuicPacketNumber range_length = 0;
1417 if (!reader->ReadBytes(&range_length, PACKET_1BYTE_PACKET_NUMBER)) {
1418 set_detailed_error("Unable to read missing packet number range.");
1419 return false;
1420 }
1421 ack_frame->packets.Add(last_packet_number - range_length,
1422 last_packet_number + 1);
1423 // Subtract an extra 1 to ensure ranges are represented efficiently and
1424 // can't overlap by 1 packet number. This allows a missing_delta of 0
1425 // to represent an adjacent nack range.
1426 last_packet_number -= (range_length + 1);
1427 }
1428
1429 return true;
1430 }
1431
1432 bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader, 1233 bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader,
1433 uint8_t frame_type, 1234 uint8_t frame_type,
1434 QuicAckFrame* ack_frame) { 1235 QuicAckFrame* ack_frame) {
1435 // Determine the two lengths from the frame type: largest acked length, 1236 // Determine the two lengths from the frame type: largest acked length,
1436 // ack block length. 1237 // ack block length.
1437 const QuicPacketNumberLength ack_block_length = 1238 const QuicPacketNumberLength ack_block_length =
1438 ReadSequenceNumberLength(frame_type); 1239 ReadSequenceNumberLength(frame_type);
1439 frame_type >>= kQuicSequenceNumberLengthShift; 1240 frame_type >>= kQuicSequenceNumberLengthShift;
1440 const QuicPacketNumberLength largest_acked_length = 1241 const QuicPacketNumberLength largest_acked_length =
1441 ReadSequenceNumberLength(frame_type); 1242 ReadSequenceNumberLength(frame_type);
1442 frame_type >>= kQuicSequenceNumberLengthShift; 1243 frame_type >>= kQuicSequenceNumberLengthShift;
1443 frame_type >>= kQuicHasMultipleAckBlocksShift; 1244 frame_type >>= kQuicHasMultipleAckBlocksShift;
1444 bool has_ack_blocks = frame_type & kQuicHasMultipleAckBlocksMask; 1245 bool has_ack_blocks = frame_type & kQuicHasMultipleAckBlocksMask;
1445 ack_frame->missing = false;
1446 1246
1447 if (!reader->ReadBytes(&ack_frame->largest_observed, largest_acked_length)) { 1247 if (!reader->ReadBytes(&ack_frame->largest_observed, largest_acked_length)) {
1448 set_detailed_error("Unable to read largest acked."); 1248 set_detailed_error("Unable to read largest acked.");
1449 return false; 1249 return false;
1450 } 1250 }
1451 1251
1452 uint64_t ack_delay_time_us; 1252 uint64_t ack_delay_time_us;
1453 if (!reader->ReadUFloat16(&ack_delay_time_us)) { 1253 if (!reader->ReadUFloat16(&ack_delay_time_us)) {
1454 set_detailed_error("Unable to read ack delay time."); 1254 set_detailed_error("Unable to read ack delay time.");
1455 return false; 1255 return false;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 1301
1502 if (!ProcessTimestampsInAckFrame(reader, ack_frame)) { 1302 if (!ProcessTimestampsInAckFrame(reader, ack_frame)) {
1503 return false; 1303 return false;
1504 } 1304 }
1505 1305
1506 return true; 1306 return true;
1507 } 1307 }
1508 1308
1509 bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader, 1309 bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader,
1510 QuicAckFrame* ack_frame) { 1310 QuicAckFrame* ack_frame) {
1511 if (ack_frame->is_truncated) {
1512 return true;
1513 }
1514 uint8_t num_received_packets; 1311 uint8_t num_received_packets;
1515 if (!reader->ReadBytes(&num_received_packets, 1)) { 1312 if (!reader->ReadBytes(&num_received_packets, 1)) {
1516 set_detailed_error("Unable to read num received packets."); 1313 set_detailed_error("Unable to read num received packets.");
1517 return false; 1314 return false;
1518 } 1315 }
1519 1316
1520 if (num_received_packets > 0) { 1317 if (num_received_packets > 0) {
1521 uint8_t delta_from_largest_observed; 1318 uint8_t delta_from_largest_observed;
1522 if (!reader->ReadBytes(&delta_from_largest_observed, 1319 if (!reader->ReadBytes(&delta_from_largest_observed,
1523 PACKET_1BYTE_PACKET_NUMBER)) { 1320 PACKET_1BYTE_PACKET_NUMBER)) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1562 ack_frame->received_packet_times.push_back( 1359 ack_frame->received_packet_times.push_back(
1563 std::make_pair(seq_num, creation_time_ + last_timestamp_)); 1360 std::make_pair(seq_num, creation_time_ + last_timestamp_));
1564 } 1361 }
1565 } 1362 }
1566 return true; 1363 return true;
1567 } 1364 }
1568 1365
1569 bool QuicFramer::ProcessStopWaitingFrame(QuicDataReader* reader, 1366 bool QuicFramer::ProcessStopWaitingFrame(QuicDataReader* reader,
1570 const QuicPacketHeader& header, 1367 const QuicPacketHeader& header,
1571 QuicStopWaitingFrame* stop_waiting) { 1368 QuicStopWaitingFrame* stop_waiting) {
1572 if (quic_version_ <= QUIC_VERSION_33) {
1573 if (!reader->ReadBytes(&stop_waiting->entropy_hash, 1)) {
1574 set_detailed_error("Unable to read entropy hash for sent packets.");
1575 return false;
1576 }
1577 }
1578
1579 QuicPacketNumber least_unacked_delta = 0; 1369 QuicPacketNumber least_unacked_delta = 0;
1580 if (!reader->ReadBytes(&least_unacked_delta, 1370 if (!reader->ReadBytes(&least_unacked_delta,
1581 header.public_header.packet_number_length)) { 1371 header.public_header.packet_number_length)) {
1582 set_detailed_error("Unable to read least unacked delta."); 1372 set_detailed_error("Unable to read least unacked delta.");
1583 return false; 1373 return false;
1584 } 1374 }
1585 DCHECK_GE(header.packet_number, least_unacked_delta); 1375 DCHECK_GE(header.packet_number, least_unacked_delta);
1586 stop_waiting->least_unacked = header.packet_number - least_unacked_delta; 1376 stop_waiting->least_unacked = header.packet_number - least_unacked_delta;
1587 1377
1588 return true; 1378 return true;
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1836 if (success) { 1626 if (success) {
1837 visitor_->OnDecryptedPacket(decrypter_level_); 1627 visitor_->OnDecryptedPacket(decrypter_level_);
1838 } else if (alternative_decrypter_.get() != nullptr) { 1628 } else if (alternative_decrypter_.get() != nullptr) {
1839 if (header.public_header.nonce != nullptr) { 1629 if (header.public_header.nonce != nullptr) {
1840 DCHECK_EQ(perspective_, Perspective::IS_CLIENT); 1630 DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
1841 alternative_decrypter_->SetDiversificationNonce( 1631 alternative_decrypter_->SetDiversificationNonce(
1842 *header.public_header.nonce); 1632 *header.public_header.nonce);
1843 } 1633 }
1844 bool try_alternative_decryption = true; 1634 bool try_alternative_decryption = true;
1845 if (alternative_decrypter_level_ == ENCRYPTION_INITIAL) { 1635 if (alternative_decrypter_level_ == ENCRYPTION_INITIAL) {
1846 if (perspective_ == Perspective::IS_CLIENT && 1636 if (perspective_ == Perspective::IS_CLIENT) {
1847 quic_version_ > QUIC_VERSION_32) {
1848 if (header.public_header.nonce == nullptr) { 1637 if (header.public_header.nonce == nullptr) {
1849 // Can not use INITIAL decryption without a diversification nonce. 1638 // Can not use INITIAL decryption without a diversification nonce.
1850 try_alternative_decryption = false; 1639 try_alternative_decryption = false;
1851 } 1640 }
1852 } else { 1641 } else {
1853 DCHECK(header.public_header.nonce == nullptr); 1642 DCHECK(header.public_header.nonce == nullptr);
1854 } 1643 }
1855 } 1644 }
1856 1645
1857 if (try_alternative_decryption) { 1646 if (try_alternative_decryption) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1891 return 0; 1680 return 0;
1892 } 1681 }
1893 1682
1894 return 5 + 3 * (ack.received_packet_times.size() - 1); 1683 return 5 + 3 * (ack.received_packet_times.size() - 1);
1895 } 1684 }
1896 1685
1897 size_t QuicFramer::GetAckFrameSize( 1686 size_t QuicFramer::GetAckFrameSize(
1898 const QuicAckFrame& ack, 1687 const QuicAckFrame& ack,
1899 QuicPacketNumberLength packet_number_length) { 1688 QuicPacketNumberLength packet_number_length) {
1900 size_t ack_size = 0; 1689 size_t ack_size = 0;
1901 if (quic_version_ <= QUIC_VERSION_33) {
1902 AckFrameInfo ack_info = GetAckFrameInfo(ack);
1903 QuicPacketNumberLength largest_observed_length =
1904 GetMinSequenceNumberLength(ack.largest_observed);
1905 QuicPacketNumberLength missing_packet_number_length =
1906 GetMinSequenceNumberLength(ack_info.max_delta);
1907
1908 ack_size = GetMinAckFrameSize(quic_version_, largest_observed_length);
1909 if (!ack_info.nack_ranges.empty()) {
1910 ack_size += kNumberOfNackRangesSize;
1911 ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) *
1912 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER);
1913 }
1914
1915 // In version 23, if the ack will be truncated due to too many nack ranges,
1916 // then do not include the number of timestamps (1 byte).
1917 if (ack_info.nack_ranges.size() <= kMaxNackRanges) {
1918 // 1 byte for the number of timestamps.
1919 ack_size += 1;
1920 ack_size += GetAckFrameTimeStampSize(ack);
1921 }
1922
1923 return ack_size;
1924 }
1925 1690
1926 NewAckFrameInfo ack_info = GetNewAckFrameInfo(ack); 1691 NewAckFrameInfo ack_info = GetNewAckFrameInfo(ack);
1927 QuicPacketNumberLength largest_acked_length = 1692 QuicPacketNumberLength largest_acked_length =
1928 GetMinSequenceNumberLength(ack.largest_observed); 1693 GetMinSequenceNumberLength(ack.largest_observed);
1929 QuicPacketNumberLength ack_block_length = 1694 QuicPacketNumberLength ack_block_length =
1930 GetMinSequenceNumberLength(ack_info.max_block_length); 1695 GetMinSequenceNumberLength(ack_info.max_block_length);
1931 1696
1932 ack_size = GetMinAckFrameSize(quic_version_, largest_acked_length); 1697 ack_size = GetMinAckFrameSize(quic_version_, largest_acked_length);
1933 // First ack block length. 1698 // First ack block length.
1934 ack_size += ack_block_length; 1699 ack_size += ack_block_length;
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
2094 return false; 1859 return false;
2095 } 1860 }
2096 return true; 1861 return true;
2097 } 1862 }
2098 1863
2099 void QuicFramer::set_version(const QuicVersion version) { 1864 void QuicFramer::set_version(const QuicVersion version) {
2100 DCHECK(IsSupportedVersion(version)) << QuicVersionToString(version); 1865 DCHECK(IsSupportedVersion(version)) << QuicVersionToString(version);
2101 quic_version_ = version; 1866 quic_version_ = version;
2102 } 1867 }
2103 1868
2104 bool QuicFramer::AppendAckFrameAndTypeByte(const QuicPacketHeader& header,
2105 const QuicAckFrame& frame,
2106 QuicDataWriter* writer) {
2107 AckFrameInfo ack_info = GetAckFrameInfo(frame);
2108 QuicPacketNumber ack_largest_observed = frame.largest_observed;
2109 QuicPacketNumberLength largest_observed_length =
2110 GetMinSequenceNumberLength(ack_largest_observed);
2111 QuicPacketNumberLength missing_packet_number_length =
2112 GetMinSequenceNumberLength(ack_info.max_delta);
2113 // Determine whether we need to truncate ranges.
2114 size_t available_range_bytes =
2115 writer->capacity() - writer->length() - kNumberOfNackRangesSize -
2116 GetMinAckFrameSize(quic_version_, largest_observed_length);
2117 size_t max_num_ranges =
2118 available_range_bytes /
2119 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER);
2120 max_num_ranges = min(kMaxNackRanges, max_num_ranges);
2121 bool truncated = ack_info.nack_ranges.size() > max_num_ranges;
2122 DVLOG_IF(1, truncated) << "Truncating ack from "
2123 << ack_info.nack_ranges.size() << " ranges to "
2124 << max_num_ranges;
2125 // Write out the type byte by setting the low order bits and doing shifts
2126 // to make room for the next bit flags to be set.
2127 // Whether there are any nacks.
2128 uint8_t type_byte = ack_info.nack_ranges.empty() ? 0 : kQuicHasNacksMask;
2129
2130 // truncating bit.
2131 type_byte <<= kQuicAckTruncatedShift;
2132 type_byte |= truncated ? kQuicAckTruncatedMask : 0;
2133
2134 // Largest observed packet number length.
2135 type_byte <<= kQuicSequenceNumberLengthShift;
2136 type_byte |= GetSequenceNumberFlags(largest_observed_length);
2137
2138 // Missing packet number length.
2139 type_byte <<= kQuicSequenceNumberLengthShift;
2140 type_byte |= GetSequenceNumberFlags(missing_packet_number_length);
2141
2142 type_byte |= kQuicFrameTypeAckMask;
2143
2144 if (!writer->WriteUInt8(type_byte)) {
2145 QUIC_BUG << "type byte failed";
2146 return false;
2147 }
2148
2149 QuicPacketEntropyHash ack_entropy_hash = frame.entropy_hash;
2150 NackRangeMap::reverse_iterator ack_iter = ack_info.nack_ranges.rbegin();
2151 if (truncated) {
2152 // Skip the nack ranges which the truncated ack won't include and set
2153 // a correct largest observed for the truncated ack.
2154 for (size_t i = 1; i < (ack_info.nack_ranges.size() - max_num_ranges);
2155 ++i) {
2156 ++ack_iter;
2157 }
2158 // If the last range is followed by acks, include them.
2159 // If the last range is followed by another range, specify the end of the
2160 // range as the largest_observed.
2161 ack_largest_observed = ack_iter->first - 1;
2162 // Also update the entropy so it matches the largest observed.
2163 ack_entropy_hash = entropy_calculator_->EntropyHash(ack_largest_observed);
2164 ++ack_iter;
2165 }
2166
2167 if (!writer->WriteUInt8(ack_entropy_hash)) {
2168 QUIC_BUG << "hash failed.";
2169 return false;
2170 }
2171
2172 if (!AppendPacketSequenceNumber(largest_observed_length, ack_largest_observed,
2173 writer)) {
2174 QUIC_BUG << "AppendPacketSequenceNumber failed. "
2175 << "largest_observed_length: " << largest_observed_length
2176 << " ack_largest_observed: " << ack_largest_observed;
2177 return false;
2178 }
2179
2180 uint64_t ack_delay_time_us = kUFloat16MaxValue;
2181 if (!frame.ack_delay_time.IsInfinite()) {
2182 DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds());
2183 ack_delay_time_us = frame.ack_delay_time.ToMicroseconds();
2184 }
2185
2186 if (!writer->WriteUFloat16(ack_delay_time_us)) {
2187 QUIC_BUG << "ack delay time failed.";
2188 return false;
2189 }
2190
2191 // Timestamp goes at the end of the required fields.
2192 if (!truncated) {
2193 if (!AppendTimestampToAckFrame(frame, writer)) {
2194 QUIC_BUG << "AppendTimestampToAckFrame failed";
2195 return false;
2196 }
2197 }
2198
2199 if (ack_info.nack_ranges.empty()) {
2200 return true;
2201 }
2202
2203 const uint8_t num_missing_ranges =
2204 static_cast<uint8_t>(min(ack_info.nack_ranges.size(), max_num_ranges));
2205 if (!writer->WriteBytes(&num_missing_ranges, 1)) {
2206 QUIC_BUG << "num_missing_ranges failed: "
2207 << static_cast<uint32_t>(num_missing_ranges);
2208 return false;
2209 }
2210
2211 int num_ranges_written = 0;
2212 QuicPacketNumber last_sequence_written = ack_largest_observed;
2213 for (; ack_iter != ack_info.nack_ranges.rend(); ++ack_iter) {
2214 // Calculate the delta to the last number in the range.
2215 QuicPacketNumber missing_delta =
2216 last_sequence_written - (ack_iter->first + ack_iter->second);
2217 if (!AppendPacketSequenceNumber(missing_packet_number_length, missing_delta,
2218 writer)) {
2219 QUIC_BUG << "AppendPacketSequenceNumber failed: "
2220 << "missing_packet_number_length: "
2221 << missing_packet_number_length << " missing_delta "
2222 << missing_delta;
2223 return false;
2224 }
2225 if (!AppendPacketSequenceNumber(PACKET_1BYTE_PACKET_NUMBER,
2226 ack_iter->second, writer)) {
2227 QUIC_BUG << "AppendPacketSequenceNumber failed";
2228 return false;
2229 }
2230 // Subtract 1 so a missing_delta of 0 means an adjacent range.
2231 last_sequence_written = ack_iter->first - 1;
2232 ++num_ranges_written;
2233 }
2234 DCHECK_EQ(num_missing_ranges, num_ranges_written);
2235
2236 return true;
2237 }
2238
2239 bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, 1869 bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame,
2240 QuicDataWriter* writer) { 1870 QuicDataWriter* writer) {
2241 const NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame); 1871 const NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame);
2242 QuicPacketNumber largest_acked = frame.largest_observed; 1872 QuicPacketNumber largest_acked = frame.largest_observed;
2243 QuicPacketNumberLength largest_acked_length = 1873 QuicPacketNumberLength largest_acked_length =
2244 GetMinSequenceNumberLength(largest_acked); 1874 GetMinSequenceNumberLength(largest_acked);
2245 QuicPacketNumberLength ack_block_length = 1875 QuicPacketNumberLength ack_block_length =
2246 GetMinSequenceNumberLength(new_ack_info.max_block_length); 1876 GetMinSequenceNumberLength(new_ack_info.max_block_length);
2247 // Calculate available bytes for timestamps and ack blocks. 1877 // Calculate available bytes for timestamps and ack blocks.
2248 int32_t available_timestamp_and_ack_block_bytes = 1878 int32_t available_timestamp_and_ack_block_bytes =
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
2450 } 2080 }
2451 2081
2452 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header, 2082 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header,
2453 const QuicStopWaitingFrame& frame, 2083 const QuicStopWaitingFrame& frame,
2454 QuicDataWriter* writer) { 2084 QuicDataWriter* writer) {
2455 DCHECK_GE(header.packet_number, frame.least_unacked); 2085 DCHECK_GE(header.packet_number, frame.least_unacked);
2456 const QuicPacketNumber least_unacked_delta = 2086 const QuicPacketNumber least_unacked_delta =
2457 header.packet_number - frame.least_unacked; 2087 header.packet_number - frame.least_unacked;
2458 const QuicPacketNumber length_shift = 2088 const QuicPacketNumber length_shift =
2459 header.public_header.packet_number_length * 8; 2089 header.public_header.packet_number_length * 8;
2460 if (quic_version_ <= QUIC_VERSION_33) {
2461 if (!writer->WriteUInt8(frame.entropy_hash)) {
2462 QUIC_BUG << " hash failed";
2463 return false;
2464 }
2465 }
2466 2090
2467 if (least_unacked_delta >> length_shift > 0) { 2091 if (least_unacked_delta >> length_shift > 0) {
2468 QUIC_BUG << "packet_number_length " 2092 QUIC_BUG << "packet_number_length "
2469 << header.public_header.packet_number_length 2093 << header.public_header.packet_number_length
2470 << " is too small for least_unacked_delta: " << least_unacked_delta 2094 << " is too small for least_unacked_delta: " << least_unacked_delta
2471 << " packet_number:" << header.packet_number 2095 << " packet_number:" << header.packet_number
2472 << " least_unacked:" << frame.least_unacked 2096 << " least_unacked:" << frame.least_unacked
2473 << " version:" << quic_version_; 2097 << " version:" << quic_version_;
2474 return false; 2098 return false;
2475 } 2099 }
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
2561 2185
2562 bool QuicFramer::RaiseError(QuicErrorCode error) { 2186 bool QuicFramer::RaiseError(QuicErrorCode error) {
2563 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) 2187 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error)
2564 << " detail: " << detailed_error_; 2188 << " detail: " << detailed_error_;
2565 set_error(error); 2189 set_error(error);
2566 visitor_->OnError(this); 2190 visitor_->OnError(this);
2567 return false; 2191 return false;
2568 } 2192 }
2569 2193
2570 } // namespace net 2194 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_framer.h ('k') | net/quic/core/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698