OLD | NEW |
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 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 } | 459 } |
460 | 460 |
461 // static | 461 // static |
462 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket( | 462 QuicEncryptedPacket* QuicFramer::BuildPublicResetPacket( |
463 const QuicPublicResetPacket& packet) { | 463 const QuicPublicResetPacket& packet) { |
464 DCHECK(packet.public_header.reset_flag); | 464 DCHECK(packet.public_header.reset_flag); |
465 | 465 |
466 CryptoHandshakeMessage reset; | 466 CryptoHandshakeMessage reset; |
467 reset.set_tag(kPRST); | 467 reset.set_tag(kPRST); |
468 reset.SetValue(kRNON, packet.nonce_proof); | 468 reset.SetValue(kRNON, packet.nonce_proof); |
469 reset.SetValue(kRSEQ, packet.rejected_packet_number); | 469 if (!FLAGS_quic_remove_packet_number_from_public_reset) { |
| 470 reset.SetValue(kRSEQ, packet.rejected_packet_number); |
| 471 } |
470 if (!packet.client_address.address().empty()) { | 472 if (!packet.client_address.address().empty()) { |
471 // packet.client_address is non-empty. | 473 // packet.client_address is non-empty. |
472 QuicSocketAddressCoder address_coder(packet.client_address); | 474 QuicSocketAddressCoder address_coder(packet.client_address); |
473 string serialized_address = address_coder.Encode(); | 475 string serialized_address = address_coder.Encode(); |
474 if (serialized_address.empty()) { | 476 if (serialized_address.empty()) { |
475 return nullptr; | 477 return nullptr; |
476 } | 478 } |
477 reset.SetStringPiece(kCADR, serialized_address); | 479 reset.SetStringPiece(kCADR, serialized_address); |
478 } | 480 } |
479 const QuicData& reset_serialized = reset.GetSerialized(); | 481 const QuicData& reset_serialized = reset.GetSerialized(); |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 } | 537 } |
536 | 538 |
537 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { | 539 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { |
538 QuicDataReader reader(packet.data(), packet.length()); | 540 QuicDataReader reader(packet.data(), packet.length()); |
539 | 541 |
540 visitor_->OnPacket(); | 542 visitor_->OnPacket(); |
541 | 543 |
542 // First parse the public header. | 544 // First parse the public header. |
543 QuicPacketPublicHeader public_header; | 545 QuicPacketPublicHeader public_header; |
544 if (!ProcessPublicHeader(&reader, &public_header)) { | 546 if (!ProcessPublicHeader(&reader, &public_header)) { |
545 DLOG(WARNING) << "Unable to process public header."; | 547 DVLOG(1) << "Unable to process public header."; |
546 DCHECK_NE("", detailed_error_); | 548 DCHECK_NE("", detailed_error_); |
547 return RaiseError(QUIC_INVALID_PACKET_HEADER); | 549 return RaiseError(QUIC_INVALID_PACKET_HEADER); |
548 } | 550 } |
549 | 551 |
550 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { | 552 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { |
551 // The visitor suppresses further processing of the packet. | 553 // The visitor suppresses further processing of the packet. |
552 return true; | 554 return true; |
553 } | 555 } |
554 | 556 |
555 if (perspective_ == Perspective::IS_SERVER && public_header.version_flag && | 557 if (perspective_ == Perspective::IS_SERVER && public_header.version_flag && |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
602 return true; | 604 return true; |
603 } | 605 } |
604 | 606 |
605 bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, | 607 bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, |
606 const QuicPacketPublicHeader& public_header, | 608 const QuicPacketPublicHeader& public_header, |
607 const QuicEncryptedPacket& packet, | 609 const QuicEncryptedPacket& packet, |
608 char* decrypted_buffer, | 610 char* decrypted_buffer, |
609 size_t buffer_length) { | 611 size_t buffer_length) { |
610 QuicPacketHeader header(public_header); | 612 QuicPacketHeader header(public_header); |
611 if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) { | 613 if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) { |
612 DLOG(WARNING) << "Unable to process packet header. Stopping parsing."; | 614 DVLOG(1) << "Unable to process packet header. Stopping parsing."; |
613 return false; | 615 return false; |
614 } | 616 } |
615 | 617 |
616 size_t decrypted_length = 0; | 618 size_t decrypted_length = 0; |
617 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, | 619 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, |
618 buffer_length, &decrypted_length)) { | 620 buffer_length, &decrypted_length)) { |
619 set_detailed_error("Unable to decrypt payload."); | 621 set_detailed_error("Unable to decrypt payload."); |
620 return RaiseError(QUIC_DECRYPTION_FAILURE); | 622 return RaiseError(QUIC_DECRYPTION_FAILURE); |
621 } | 623 } |
622 | 624 |
623 QuicDataReader reader(decrypted_buffer, decrypted_length); | 625 QuicDataReader reader(decrypted_buffer, decrypted_length); |
624 if (quic_version_ <= QUIC_VERSION_33) { | 626 if (quic_version_ <= QUIC_VERSION_33) { |
625 if (!ProcessAuthenticatedHeader(&reader, &header)) { | 627 if (!ProcessAuthenticatedHeader(&reader, &header)) { |
626 DLOG(WARNING) << "Unable to process packet header. Stopping parsing."; | 628 DVLOG(1) << "Unable to process packet header. Stopping parsing."; |
627 return false; | 629 return false; |
628 } | 630 } |
629 } | 631 } |
630 | 632 |
631 // Set the last packet number after we have decrypted the packet | 633 // Set the last packet number after we have decrypted the packet |
632 // so we are confident is not attacker controlled. | 634 // so we are confident is not attacker controlled. |
633 SetLastPacketNumber(header); | 635 SetLastPacketNumber(header); |
634 | 636 |
635 if (!visitor_->OnPacketHeader(header)) { | 637 if (!visitor_->OnPacketHeader(header)) { |
636 // The visitor suppresses further processing of the packet. | 638 // The visitor suppresses further processing of the packet. |
637 return true; | 639 return true; |
638 } | 640 } |
639 | 641 |
640 if (packet.length() > kMaxPacketSize) { | 642 if (packet.length() > kMaxPacketSize) { |
641 // If the packet has gotten this far, it should not be too large. | 643 // If the packet has gotten this far, it should not be too large. |
642 QUIC_BUG << "Packet too large:" << packet.length(); | 644 QUIC_BUG << "Packet too large:" << packet.length(); |
643 return RaiseError(QUIC_PACKET_TOO_LARGE); | 645 return RaiseError(QUIC_PACKET_TOO_LARGE); |
644 } | 646 } |
645 | 647 |
646 DCHECK(!header.fec_flag); | |
647 // Handle the payload. | 648 // Handle the payload. |
648 if (!ProcessFrameData(&reader, header)) { | 649 if (!ProcessFrameData(&reader, header)) { |
649 DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error. | 650 DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error. |
650 DLOG(WARNING) << "Unable to process frame data."; | 651 DLOG(WARNING) << "Unable to process frame data."; |
651 return false; | 652 return false; |
652 } | 653 } |
653 | 654 |
654 visitor_->OnPacketComplete(); | 655 visitor_->OnPacketComplete(); |
655 return true; | 656 return true; |
656 } | 657 } |
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 } | 1096 } |
1096 | 1097 |
1097 bool QuicFramer::ProcessAuthenticatedHeader(QuicDataReader* reader, | 1098 bool QuicFramer::ProcessAuthenticatedHeader(QuicDataReader* reader, |
1098 QuicPacketHeader* header) { | 1099 QuicPacketHeader* header) { |
1099 uint8_t private_flags; | 1100 uint8_t private_flags; |
1100 if (!reader->ReadBytes(&private_flags, 1)) { | 1101 if (!reader->ReadBytes(&private_flags, 1)) { |
1101 set_detailed_error("Unable to read private flags."); | 1102 set_detailed_error("Unable to read private flags."); |
1102 return RaiseError(QUIC_INVALID_PACKET_HEADER); | 1103 return RaiseError(QUIC_INVALID_PACKET_HEADER); |
1103 } | 1104 } |
1104 | 1105 |
1105 if (quic_version_ > QUIC_VERSION_31) { | 1106 if (private_flags > PACKET_PRIVATE_FLAGS_MAX) { |
1106 if (private_flags > PACKET_PRIVATE_FLAGS_MAX_VERSION_32) { | 1107 set_detailed_error("Illegal private flags value."); |
1107 set_detailed_error("Illegal private flags value."); | 1108 return RaiseError(QUIC_INVALID_PACKET_HEADER); |
1108 return RaiseError(QUIC_INVALID_PACKET_HEADER); | |
1109 } | |
1110 } else { | |
1111 if (private_flags > PACKET_PRIVATE_FLAGS_MAX) { | |
1112 set_detailed_error("Illegal private flags value."); | |
1113 return RaiseError(QUIC_INVALID_PACKET_HEADER); | |
1114 } | |
1115 } | 1109 } |
1116 | 1110 |
1117 header->entropy_flag = (private_flags & PACKET_PRIVATE_FLAGS_ENTROPY) != 0; | 1111 header->entropy_flag = (private_flags & PACKET_PRIVATE_FLAGS_ENTROPY) != 0; |
1118 header->fec_flag = (private_flags & PACKET_PRIVATE_FLAGS_FEC) != 0; | |
1119 | |
1120 if ((private_flags & PACKET_PRIVATE_FLAGS_FEC_GROUP) != 0) { | |
1121 uint8_t first_fec_protected_packet_offset; | |
1122 if (!reader->ReadBytes(&first_fec_protected_packet_offset, 1)) { | |
1123 set_detailed_error("Unable to read first fec protected packet offset."); | |
1124 return RaiseError(QUIC_INVALID_PACKET_HEADER); | |
1125 } | |
1126 if (first_fec_protected_packet_offset >= header->packet_number) { | |
1127 set_detailed_error( | |
1128 "First fec protected packet offset must be less " | |
1129 "than the packet number."); | |
1130 return RaiseError(QUIC_INVALID_PACKET_HEADER); | |
1131 } | |
1132 } | |
1133 | |
1134 header->entropy_hash = GetPacketEntropyHash(*header); | 1112 header->entropy_hash = GetPacketEntropyHash(*header); |
1135 return true; | 1113 return true; |
1136 } | 1114 } |
1137 | 1115 |
1138 bool QuicFramer::ProcessPathId(QuicDataReader* reader, QuicPathId* path_id) { | 1116 bool QuicFramer::ProcessPathId(QuicDataReader* reader, QuicPathId* path_id) { |
1139 if (!reader->ReadBytes(path_id, 1)) { | 1117 if (!reader->ReadBytes(path_id, 1)) { |
1140 return false; | 1118 return false; |
1141 } | 1119 } |
1142 | 1120 |
1143 return true; | 1121 return true; |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1458 return false; | 1436 return false; |
1459 } | 1437 } |
1460 ack_frame->packets.Add(last_packet_number - range_length, | 1438 ack_frame->packets.Add(last_packet_number - range_length, |
1461 last_packet_number + 1); | 1439 last_packet_number + 1); |
1462 // Subtract an extra 1 to ensure ranges are represented efficiently and | 1440 // Subtract an extra 1 to ensure ranges are represented efficiently and |
1463 // can't overlap by 1 packet number. This allows a missing_delta of 0 | 1441 // can't overlap by 1 packet number. This allows a missing_delta of 0 |
1464 // to represent an adjacent nack range. | 1442 // to represent an adjacent nack range. |
1465 last_packet_number -= (range_length + 1); | 1443 last_packet_number -= (range_length + 1); |
1466 } | 1444 } |
1467 | 1445 |
1468 if (quic_version_ > QUIC_VERSION_31) { | |
1469 return true; | |
1470 } | |
1471 | |
1472 // Parse the revived packets list. | |
1473 // TODO(ianswett): Change the ack frame so it only expresses one revived. | |
1474 uint8_t num_revived_packets; | |
1475 if (!reader->ReadBytes(&num_revived_packets, 1)) { | |
1476 set_detailed_error("Unable to read num revived packets."); | |
1477 return false; | |
1478 } | |
1479 | |
1480 for (size_t i = 0; i < num_revived_packets; ++i) { | |
1481 QuicPacketNumber revived_packet = 0; | |
1482 if (!reader->ReadBytes(&revived_packet, | |
1483 largest_observed_packet_number_length)) { | |
1484 set_detailed_error("Unable to read revived packet."); | |
1485 return false; | |
1486 } | |
1487 } | |
1488 | |
1489 return true; | 1446 return true; |
1490 } | 1447 } |
1491 | 1448 |
1492 bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader, | 1449 bool QuicFramer::ProcessNewAckFrame(QuicDataReader* reader, |
1493 uint8_t frame_type, | 1450 uint8_t frame_type, |
1494 QuicAckFrame* ack_frame) { | 1451 QuicAckFrame* ack_frame) { |
1495 // Determine the two lengths from the frame type: largest acked length, | 1452 // Determine the two lengths from the frame type: largest acked length, |
1496 // ack block length. | 1453 // ack block length. |
1497 const QuicPacketNumberLength ack_block_length = | 1454 const QuicPacketNumberLength ack_block_length = |
1498 ReadSequenceNumberLength(frame_type); | 1455 ReadSequenceNumberLength(frame_type); |
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1931 // Switch the alternative decrypter so that we use it first next time. | 1888 // Switch the alternative decrypter so that we use it first next time. |
1932 decrypter_.swap(alternative_decrypter_); | 1889 decrypter_.swap(alternative_decrypter_); |
1933 EncryptionLevel level = alternative_decrypter_level_; | 1890 EncryptionLevel level = alternative_decrypter_level_; |
1934 alternative_decrypter_level_ = decrypter_level_; | 1891 alternative_decrypter_level_ = decrypter_level_; |
1935 decrypter_level_ = level; | 1892 decrypter_level_ = level; |
1936 } | 1893 } |
1937 } | 1894 } |
1938 } | 1895 } |
1939 | 1896 |
1940 if (!success) { | 1897 if (!success) { |
1941 DLOG(WARNING) << "DecryptPacket failed for packet_number:" | 1898 DVLOG(1) << "DecryptPacket failed for packet_number:" |
1942 << header.packet_number; | 1899 << header.packet_number; |
1943 return false; | 1900 return false; |
1944 } | 1901 } |
1945 | 1902 |
1946 return true; | 1903 return true; |
1947 } | 1904 } |
1948 | 1905 |
1949 size_t QuicFramer::GetAckFrameTimeStampSize(const QuicAckFrame& ack) { | 1906 size_t QuicFramer::GetAckFrameTimeStampSize(const QuicAckFrame& ack) { |
1950 if (ack.received_packet_times.empty()) { | 1907 if (ack.received_packet_times.empty()) { |
1951 return 0; | 1908 return 0; |
1952 } | 1909 } |
1953 | 1910 |
1954 return 5 + 3 * (ack.received_packet_times.size() - 1); | 1911 return 5 + 3 * (ack.received_packet_times.size() - 1); |
1955 } | 1912 } |
1956 | 1913 |
1957 size_t QuicFramer::GetAckFrameSize( | 1914 size_t QuicFramer::GetAckFrameSize( |
1958 const QuicAckFrame& ack, | 1915 const QuicAckFrame& ack, |
1959 QuicPacketNumberLength packet_number_length) { | 1916 QuicPacketNumberLength packet_number_length) { |
1960 size_t ack_size = 0; | 1917 size_t ack_size = 0; |
1961 if (quic_version_ <= QUIC_VERSION_33) { | 1918 if (quic_version_ <= QUIC_VERSION_33) { |
1962 AckFrameInfo ack_info = GetAckFrameInfo(ack); | 1919 AckFrameInfo ack_info = GetAckFrameInfo(ack); |
1963 QuicPacketNumberLength largest_observed_length = | 1920 QuicPacketNumberLength largest_observed_length = |
1964 GetMinSequenceNumberLength(ack.largest_observed); | 1921 GetMinSequenceNumberLength(ack.largest_observed); |
1965 QuicPacketNumberLength missing_packet_number_length = | 1922 QuicPacketNumberLength missing_packet_number_length = |
1966 GetMinSequenceNumberLength(ack_info.max_delta); | 1923 GetMinSequenceNumberLength(ack_info.max_delta); |
1967 | 1924 |
1968 ack_size = GetMinAckFrameSize(quic_version_, largest_observed_length); | 1925 ack_size = GetMinAckFrameSize(quic_version_, largest_observed_length); |
1969 if (!ack_info.nack_ranges.empty()) { | 1926 if (!ack_info.nack_ranges.empty()) { |
1970 ack_size += kNumberOfNackRangesSize; | 1927 ack_size += kNumberOfNackRangesSize; |
1971 if (quic_version_ <= QUIC_VERSION_31) { | |
1972 ack_size += kNumberOfRevivedPacketsSize; | |
1973 } | |
1974 ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) * | 1928 ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) * |
1975 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); | 1929 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); |
1976 } | 1930 } |
1977 | 1931 |
1978 // In version 23, if the ack will be truncated due to too many nack ranges, | 1932 // In version 23, if the ack will be truncated due to too many nack ranges, |
1979 // then do not include the number of timestamps (1 byte). | 1933 // then do not include the number of timestamps (1 byte). |
1980 if (ack_info.nack_ranges.size() <= kMaxNackRanges) { | 1934 if (ack_info.nack_ranges.size() <= kMaxNackRanges) { |
1981 // 1 byte for the number of timestamps. | 1935 // 1 byte for the number of timestamps. |
1982 ack_size += 1; | 1936 ack_size += 1; |
1983 ack_size += GetAckFrameTimeStampSize(ack); | 1937 ack_size += GetAckFrameTimeStampSize(ack); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2170 AckFrameInfo ack_info = GetAckFrameInfo(frame); | 2124 AckFrameInfo ack_info = GetAckFrameInfo(frame); |
2171 QuicPacketNumber ack_largest_observed = frame.largest_observed; | 2125 QuicPacketNumber ack_largest_observed = frame.largest_observed; |
2172 QuicPacketNumberLength largest_observed_length = | 2126 QuicPacketNumberLength largest_observed_length = |
2173 GetMinSequenceNumberLength(ack_largest_observed); | 2127 GetMinSequenceNumberLength(ack_largest_observed); |
2174 QuicPacketNumberLength missing_packet_number_length = | 2128 QuicPacketNumberLength missing_packet_number_length = |
2175 GetMinSequenceNumberLength(ack_info.max_delta); | 2129 GetMinSequenceNumberLength(ack_info.max_delta); |
2176 // Determine whether we need to truncate ranges. | 2130 // Determine whether we need to truncate ranges. |
2177 size_t available_range_bytes = | 2131 size_t available_range_bytes = |
2178 writer->capacity() - writer->length() - kNumberOfNackRangesSize - | 2132 writer->capacity() - writer->length() - kNumberOfNackRangesSize - |
2179 GetMinAckFrameSize(quic_version_, largest_observed_length); | 2133 GetMinAckFrameSize(quic_version_, largest_observed_length); |
2180 if (quic_version_ <= QUIC_VERSION_31) { | |
2181 available_range_bytes -= kNumberOfRevivedPacketsSize; | |
2182 } | |
2183 size_t max_num_ranges = | 2134 size_t max_num_ranges = |
2184 available_range_bytes / | 2135 available_range_bytes / |
2185 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); | 2136 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); |
2186 max_num_ranges = min(kMaxNackRanges, max_num_ranges); | 2137 max_num_ranges = min(kMaxNackRanges, max_num_ranges); |
2187 bool truncated = ack_info.nack_ranges.size() > max_num_ranges; | 2138 bool truncated = ack_info.nack_ranges.size() > max_num_ranges; |
2188 DVLOG_IF(1, truncated) << "Truncating ack from " | 2139 DVLOG_IF(1, truncated) << "Truncating ack from " |
2189 << ack_info.nack_ranges.size() << " ranges to " | 2140 << ack_info.nack_ranges.size() << " ranges to " |
2190 << max_num_ranges; | 2141 << max_num_ranges; |
2191 // Write out the type byte by setting the low order bits and doing shifts | 2142 // Write out the type byte by setting the low order bits and doing shifts |
2192 // to make room for the next bit flags to be set. | 2143 // to make room for the next bit flags to be set. |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2292 ack_iter->second, writer)) { | 2243 ack_iter->second, writer)) { |
2293 QUIC_BUG << "AppendPacketSequenceNumber failed"; | 2244 QUIC_BUG << "AppendPacketSequenceNumber failed"; |
2294 return false; | 2245 return false; |
2295 } | 2246 } |
2296 // Subtract 1 so a missing_delta of 0 means an adjacent range. | 2247 // Subtract 1 so a missing_delta of 0 means an adjacent range. |
2297 last_sequence_written = ack_iter->first - 1; | 2248 last_sequence_written = ack_iter->first - 1; |
2298 ++num_ranges_written; | 2249 ++num_ranges_written; |
2299 } | 2250 } |
2300 DCHECK_EQ(num_missing_ranges, num_ranges_written); | 2251 DCHECK_EQ(num_missing_ranges, num_ranges_written); |
2301 | 2252 |
2302 if (quic_version_ > QUIC_VERSION_31) { | |
2303 return true; | |
2304 } | |
2305 | |
2306 // Append revived packets. | |
2307 // FEC is not supported. | |
2308 uint8_t num_revived_packets = 0; | |
2309 if (!writer->WriteBytes(&num_revived_packets, 1)) { | |
2310 QUIC_BUG << "num_revived_packets failed: " << num_revived_packets; | |
2311 return false; | |
2312 } | |
2313 | |
2314 return true; | 2253 return true; |
2315 } | 2254 } |
2316 | 2255 |
2317 bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, | 2256 bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, |
2318 QuicDataWriter* writer) { | 2257 QuicDataWriter* writer) { |
2319 const NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame); | 2258 const NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame); |
2320 QuicPacketNumber largest_acked = frame.largest_observed; | 2259 QuicPacketNumber largest_acked = frame.largest_observed; |
2321 QuicPacketNumberLength largest_acked_length = | 2260 QuicPacketNumberLength largest_acked_length = |
2322 GetMinSequenceNumberLength(largest_acked); | 2261 GetMinSequenceNumberLength(largest_acked); |
2323 QuicPacketNumberLength ack_block_length = | 2262 QuicPacketNumberLength ack_block_length = |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2636 | 2575 |
2637 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2576 bool QuicFramer::RaiseError(QuicErrorCode error) { |
2638 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) | 2577 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) |
2639 << " detail: " << detailed_error_; | 2578 << " detail: " << detailed_error_; |
2640 set_error(error); | 2579 set_error(error); |
2641 visitor_->OnError(this); | 2580 visitor_->OnError(this); |
2642 return false; | 2581 return false; |
2643 } | 2582 } |
2644 | 2583 |
2645 } // namespace net | 2584 } // namespace net |
OLD | NEW |