| 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/quic_framer.h" | 5 #include "net/quic/quic_framer.h" | 
| 6 | 6 | 
| 7 #include <stdint.h> | 7 #include <stdint.h> | 
| 8 | 8 | 
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" | 
| 10 #include "base/logging.h" | 10 #include "base/logging.h" | 
| (...skipping 1366 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1377     return false; | 1377     return false; | 
| 1378   } | 1378   } | 
| 1379 | 1379 | 
| 1380   for (size_t i = 0; i < num_revived_packets; ++i) { | 1380   for (size_t i = 0; i < num_revived_packets; ++i) { | 
| 1381     QuicPacketNumber revived_packet = 0; | 1381     QuicPacketNumber revived_packet = 0; | 
| 1382     if (!reader->ReadBytes(&revived_packet, | 1382     if (!reader->ReadBytes(&revived_packet, | 
| 1383                            largest_observed_packet_number_length)) { | 1383                            largest_observed_packet_number_length)) { | 
| 1384       set_detailed_error("Unable to read revived packet."); | 1384       set_detailed_error("Unable to read revived packet."); | 
| 1385       return false; | 1385       return false; | 
| 1386     } | 1386     } | 
| 1387     ack_frame->latest_revived_packet = revived_packet; |  | 
| 1388   } | 1387   } | 
| 1389 | 1388 | 
| 1390   return true; | 1389   return true; | 
| 1391 } | 1390 } | 
| 1392 | 1391 | 
| 1393 bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader, | 1392 bool QuicFramer::ProcessTimestampsInAckFrame(QuicDataReader* reader, | 
| 1394                                              QuicAckFrame* ack_frame) { | 1393                                              QuicAckFrame* ack_frame) { | 
| 1395   if (ack_frame->is_truncated) { | 1394   if (ack_frame->is_truncated) { | 
| 1396     return true; | 1395     return true; | 
| 1397   } | 1396   } | 
| (...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1750   QuicPacketNumberLength largest_observed_length = | 1749   QuicPacketNumberLength largest_observed_length = | 
| 1751       GetMinSequenceNumberLength(ack.largest_observed); | 1750       GetMinSequenceNumberLength(ack.largest_observed); | 
| 1752   QuicPacketNumberLength missing_packet_number_length = | 1751   QuicPacketNumberLength missing_packet_number_length = | 
| 1753       GetMinSequenceNumberLength(ack_info.max_delta); | 1752       GetMinSequenceNumberLength(ack_info.max_delta); | 
| 1754 | 1753 | 
| 1755   size_t ack_size = GetMinAckFrameSize(largest_observed_length); | 1754   size_t ack_size = GetMinAckFrameSize(largest_observed_length); | 
| 1756   if (!ack_info.nack_ranges.empty()) { | 1755   if (!ack_info.nack_ranges.empty()) { | 
| 1757     ack_size += kNumberOfNackRangesSize + kNumberOfRevivedPacketsSize; | 1756     ack_size += kNumberOfNackRangesSize + kNumberOfRevivedPacketsSize; | 
| 1758     ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) * | 1757     ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) * | 
| 1759                 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); | 1758                 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); | 
| 1760     if (ack.latest_revived_packet != 0) { |  | 
| 1761       ack_size += largest_observed_length; |  | 
| 1762     } |  | 
| 1763   } | 1759   } | 
| 1764 | 1760 | 
| 1765   // In version 23, if the ack will be truncated due to too many nack ranges, | 1761   // In version 23, if the ack will be truncated due to too many nack ranges, | 
| 1766   // then do not include the number of timestamps (1 byte). | 1762   // then do not include the number of timestamps (1 byte). | 
| 1767   if (ack_info.nack_ranges.size() <= kMaxNackRanges) { | 1763   if (ack_info.nack_ranges.size() <= kMaxNackRanges) { | 
| 1768     // 1 byte for the number of timestamps. | 1764     // 1 byte for the number of timestamps. | 
| 1769     ack_size += 1; | 1765     ack_size += 1; | 
| 1770     if (ack.received_packet_times.size() > 0) { | 1766     if (ack.received_packet_times.size() > 0) { | 
| 1771       // 1 byte for packet number, 4 bytes for timestamp for the first | 1767       // 1 byte for packet number, 4 bytes for timestamp for the first | 
| 1772       // packet. | 1768       // packet. | 
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2041                                     ack_iter->second, writer)) { | 2037                                     ack_iter->second, writer)) { | 
| 2042       return false; | 2038       return false; | 
| 2043     } | 2039     } | 
| 2044     // Subtract 1 so a missing_delta of 0 means an adjacent range. | 2040     // Subtract 1 so a missing_delta of 0 means an adjacent range. | 
| 2045     last_sequence_written = ack_iter->first - 1; | 2041     last_sequence_written = ack_iter->first - 1; | 
| 2046     ++num_ranges_written; | 2042     ++num_ranges_written; | 
| 2047   } | 2043   } | 
| 2048   DCHECK_EQ(num_missing_ranges, num_ranges_written); | 2044   DCHECK_EQ(num_missing_ranges, num_ranges_written); | 
| 2049 | 2045 | 
| 2050   // Append revived packets. | 2046   // Append revived packets. | 
| 2051   // If not all the revived packets fit, only mention the ones that do. | 2047   // FEC is not supported. | 
| 2052   uint8_t num_revived_packets = frame.latest_revived_packet == 0 ? 0 : 1; | 2048   uint8_t num_revived_packets = 0; | 
| 2053   if (((writer->capacity() - writer->length()) / largest_observed_length) == |  | 
| 2054       0) { |  | 
| 2055     num_revived_packets = 0; |  | 
| 2056   } |  | 
| 2057   if (!writer->WriteBytes(&num_revived_packets, 1)) { | 2049   if (!writer->WriteBytes(&num_revived_packets, 1)) { | 
| 2058     return false; | 2050     return false; | 
| 2059   } | 2051   } | 
| 2060 | 2052 | 
| 2061   if (num_revived_packets > 0) { |  | 
| 2062     QUIC_BUG_IF(!frame.missing_packets.Contains(frame.latest_revived_packet)); |  | 
| 2063     if (!AppendPacketSequenceNumber(largest_observed_length, |  | 
| 2064                                     frame.latest_revived_packet, writer)) { |  | 
| 2065       return false; |  | 
| 2066     } |  | 
| 2067   } |  | 
| 2068 |  | 
| 2069   return true; | 2053   return true; | 
| 2070 } | 2054 } | 
| 2071 | 2055 | 
| 2072 bool QuicFramer::AppendTimestampToAckFrame(const QuicAckFrame& frame, | 2056 bool QuicFramer::AppendTimestampToAckFrame(const QuicAckFrame& frame, | 
| 2073                                            QuicDataWriter* writer) { | 2057                                            QuicDataWriter* writer) { | 
| 2074   DCHECK_GE(numeric_limits<uint8_t>::max(), frame.received_packet_times.size()); | 2058   DCHECK_GE(numeric_limits<uint8_t>::max(), frame.received_packet_times.size()); | 
| 2075   // num_received_packets is only 1 byte. | 2059   // num_received_packets is only 1 byte. | 
| 2076   if (frame.received_packet_times.size() > numeric_limits<uint8_t>::max()) { | 2060   if (frame.received_packet_times.size() > numeric_limits<uint8_t>::max()) { | 
| 2077     return false; | 2061     return false; | 
| 2078   } | 2062   } | 
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2242 | 2226 | 
| 2243 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2227 bool QuicFramer::RaiseError(QuicErrorCode error) { | 
| 2244   DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) | 2228   DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) | 
| 2245            << " detail: " << detailed_error_; | 2229            << " detail: " << detailed_error_; | 
| 2246   set_error(error); | 2230   set_error(error); | 
| 2247   visitor_->OnError(this); | 2231   visitor_->OnError(this); | 
| 2248   return false; | 2232   return false; | 
| 2249 } | 2233 } | 
| 2250 | 2234 | 
| 2251 }  // namespace net | 2235 }  // namespace net | 
| OLD | NEW | 
|---|