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

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

Issue 2065493003: Add extra log when AppendAckFrameAndTypeByte failed. n/a logging only change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@124469720
Patch Set: Rebase. Created 4 years, 6 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
« no previous file with comments | « no previous file | no next file » | 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 <cstdint> 7 #include <cstdint>
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 case STREAM_FRAME: 375 case STREAM_FRAME:
376 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length, 376 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length,
377 &writer)) { 377 &writer)) {
378 QUIC_BUG << "AppendStreamFrame failed"; 378 QUIC_BUG << "AppendStreamFrame failed";
379 return 0; 379 return 0;
380 } 380 }
381 break; 381 break;
382 case ACK_FRAME: 382 case ACK_FRAME:
383 if (quic_version_ <= QUIC_VERSION_33) { 383 if (quic_version_ <= QUIC_VERSION_33) {
384 if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) { 384 if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) {
385 QUIC_BUG << "AppendAckFrameAndTypeByte failed"; 385 QUIC_BUG << "AppendAckFrameAndTypeByte failed"
386 << " header: " << header
387 << " ack_fame: " << *frame.ack_frame;
386 return 0; 388 return 0;
387 } 389 }
388 } else { 390 } else {
389 if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) { 391 if (!AppendNewAckFrameAndTypeByte(*frame.ack_frame, &writer)) {
390 QUIC_BUG << "AppendNewAckFrameAndTypeByte failed"; 392 QUIC_BUG << "AppendNewAckFrameAndTypeByte failed";
391 return 0; 393 return 0;
392 } 394 }
393 } 395 }
394 break; 396 break;
395 case STOP_WAITING_FRAME: 397 case STOP_WAITING_FRAME:
(...skipping 1785 matching lines...) Expand 10 before | Expand all | Expand 10 after
2181 type_byte <<= kQuicSequenceNumberLengthShift; 2183 type_byte <<= kQuicSequenceNumberLengthShift;
2182 type_byte |= GetSequenceNumberFlags(largest_observed_length); 2184 type_byte |= GetSequenceNumberFlags(largest_observed_length);
2183 2185
2184 // Missing packet number length. 2186 // Missing packet number length.
2185 type_byte <<= kQuicSequenceNumberLengthShift; 2187 type_byte <<= kQuicSequenceNumberLengthShift;
2186 type_byte |= GetSequenceNumberFlags(missing_packet_number_length); 2188 type_byte |= GetSequenceNumberFlags(missing_packet_number_length);
2187 2189
2188 type_byte |= kQuicFrameTypeAckMask; 2190 type_byte |= kQuicFrameTypeAckMask;
2189 2191
2190 if (!writer->WriteUInt8(type_byte)) { 2192 if (!writer->WriteUInt8(type_byte)) {
2193 QUIC_BUG << "type byte failed";
2191 return false; 2194 return false;
2192 } 2195 }
2193 2196
2194 QuicPacketEntropyHash ack_entropy_hash = frame.entropy_hash; 2197 QuicPacketEntropyHash ack_entropy_hash = frame.entropy_hash;
2195 NackRangeMap::reverse_iterator ack_iter = ack_info.nack_ranges.rbegin(); 2198 NackRangeMap::reverse_iterator ack_iter = ack_info.nack_ranges.rbegin();
2196 if (truncated) { 2199 if (truncated) {
2197 // Skip the nack ranges which the truncated ack won't include and set 2200 // Skip the nack ranges which the truncated ack won't include and set
2198 // a correct largest observed for the truncated ack. 2201 // a correct largest observed for the truncated ack.
2199 for (size_t i = 1; i < (ack_info.nack_ranges.size() - max_num_ranges); 2202 for (size_t i = 1; i < (ack_info.nack_ranges.size() - max_num_ranges);
2200 ++i) { 2203 ++i) {
2201 ++ack_iter; 2204 ++ack_iter;
2202 } 2205 }
2203 // If the last range is followed by acks, include them. 2206 // If the last range is followed by acks, include them.
2204 // If the last range is followed by another range, specify the end of the 2207 // If the last range is followed by another range, specify the end of the
2205 // range as the largest_observed. 2208 // range as the largest_observed.
2206 ack_largest_observed = ack_iter->first - 1; 2209 ack_largest_observed = ack_iter->first - 1;
2207 // Also update the entropy so it matches the largest observed. 2210 // Also update the entropy so it matches the largest observed.
2208 ack_entropy_hash = entropy_calculator_->EntropyHash(ack_largest_observed); 2211 ack_entropy_hash = entropy_calculator_->EntropyHash(ack_largest_observed);
2209 ++ack_iter; 2212 ++ack_iter;
2210 } 2213 }
2211 2214
2212 if (!writer->WriteUInt8(ack_entropy_hash)) { 2215 if (!writer->WriteUInt8(ack_entropy_hash)) {
2216 QUIC_BUG << "hash failed.";
2213 return false; 2217 return false;
2214 } 2218 }
2215 2219
2216 if (!AppendPacketSequenceNumber(largest_observed_length, ack_largest_observed, 2220 if (!AppendPacketSequenceNumber(largest_observed_length, ack_largest_observed,
2217 writer)) { 2221 writer)) {
2222 QUIC_BUG << "AppendPacketSequenceNumber failed. "
2223 << "largest_observed_length: " << largest_observed_length
2224 << " ack_largest_observed: " << ack_largest_observed;
2218 return false; 2225 return false;
2219 } 2226 }
2220 2227
2221 uint64_t ack_delay_time_us = kUFloat16MaxValue; 2228 uint64_t ack_delay_time_us = kUFloat16MaxValue;
2222 if (!frame.ack_delay_time.IsInfinite()) { 2229 if (!frame.ack_delay_time.IsInfinite()) {
2223 DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds()); 2230 DCHECK_LE(0u, frame.ack_delay_time.ToMicroseconds());
2224 ack_delay_time_us = frame.ack_delay_time.ToMicroseconds(); 2231 ack_delay_time_us = frame.ack_delay_time.ToMicroseconds();
2225 } 2232 }
2226 2233
2227 if (!writer->WriteUFloat16(ack_delay_time_us)) { 2234 if (!writer->WriteUFloat16(ack_delay_time_us)) {
2235 QUIC_BUG << "ack delay time failed.";
2228 return false; 2236 return false;
2229 } 2237 }
2230 2238
2231 // Timestamp goes at the end of the required fields. 2239 // Timestamp goes at the end of the required fields.
2232 if (!truncated) { 2240 if (!truncated) {
2233 if (!AppendTimestampToAckFrame(frame, writer)) { 2241 if (!AppendTimestampToAckFrame(frame, writer)) {
2242 QUIC_BUG << "AppendTimestampToAckFrame failed";
2234 return false; 2243 return false;
2235 } 2244 }
2236 } 2245 }
2237 2246
2238 if (ack_info.nack_ranges.empty()) { 2247 if (ack_info.nack_ranges.empty()) {
2239 return true; 2248 return true;
2240 } 2249 }
2241 2250
2242 const uint8_t num_missing_ranges = 2251 const uint8_t num_missing_ranges =
2243 static_cast<uint8_t>(min(ack_info.nack_ranges.size(), max_num_ranges)); 2252 static_cast<uint8_t>(min(ack_info.nack_ranges.size(), max_num_ranges));
2244 if (!writer->WriteBytes(&num_missing_ranges, 1)) { 2253 if (!writer->WriteBytes(&num_missing_ranges, 1)) {
2254 QUIC_BUG << "num_missing_ranges failed: "
2255 << static_cast<uint32_t>(num_missing_ranges);
2245 return false; 2256 return false;
2246 } 2257 }
2247 2258
2248 int num_ranges_written = 0; 2259 int num_ranges_written = 0;
2249 QuicPacketNumber last_sequence_written = ack_largest_observed; 2260 QuicPacketNumber last_sequence_written = ack_largest_observed;
2250 for (; ack_iter != ack_info.nack_ranges.rend(); ++ack_iter) { 2261 for (; ack_iter != ack_info.nack_ranges.rend(); ++ack_iter) {
2251 // Calculate the delta to the last number in the range. 2262 // Calculate the delta to the last number in the range.
2252 QuicPacketNumber missing_delta = 2263 QuicPacketNumber missing_delta =
2253 last_sequence_written - (ack_iter->first + ack_iter->second); 2264 last_sequence_written - (ack_iter->first + ack_iter->second);
2254 if (!AppendPacketSequenceNumber(missing_packet_number_length, missing_delta, 2265 if (!AppendPacketSequenceNumber(missing_packet_number_length, missing_delta,
2255 writer)) { 2266 writer)) {
2267 QUIC_BUG << "AppendPacketSequenceNumber failed: "
2268 << "missing_packet_number_length: "
2269 << missing_packet_number_length << " missing_delta "
2270 << missing_delta;
2256 return false; 2271 return false;
2257 } 2272 }
2258 if (!AppendPacketSequenceNumber(PACKET_1BYTE_PACKET_NUMBER, 2273 if (!AppendPacketSequenceNumber(PACKET_1BYTE_PACKET_NUMBER,
2259 ack_iter->second, writer)) { 2274 ack_iter->second, writer)) {
2275 QUIC_BUG << "AppendPacketSequenceNumber failed";
2260 return false; 2276 return false;
2261 } 2277 }
2262 // Subtract 1 so a missing_delta of 0 means an adjacent range. 2278 // Subtract 1 so a missing_delta of 0 means an adjacent range.
2263 last_sequence_written = ack_iter->first - 1; 2279 last_sequence_written = ack_iter->first - 1;
2264 ++num_ranges_written; 2280 ++num_ranges_written;
2265 } 2281 }
2266 DCHECK_EQ(num_missing_ranges, num_ranges_written); 2282 DCHECK_EQ(num_missing_ranges, num_ranges_written);
2267 2283
2268 if (quic_version_ > QUIC_VERSION_31) { 2284 if (quic_version_ > QUIC_VERSION_31) {
2269 return true; 2285 return true;
2270 } 2286 }
2271 2287
2272 // Append revived packets. 2288 // Append revived packets.
2273 // FEC is not supported. 2289 // FEC is not supported.
2274 uint8_t num_revived_packets = 0; 2290 uint8_t num_revived_packets = 0;
2275 if (!writer->WriteBytes(&num_revived_packets, 1)) { 2291 if (!writer->WriteBytes(&num_revived_packets, 1)) {
2292 QUIC_BUG << "num_revived_packets failed: " << num_revived_packets;
2276 return false; 2293 return false;
2277 } 2294 }
2278 2295
2279 return true; 2296 return true;
2280 } 2297 }
2281 2298
2282 bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame, 2299 bool QuicFramer::AppendNewAckFrameAndTypeByte(const QuicAckFrame& frame,
2283 QuicDataWriter* writer) { 2300 QuicDataWriter* writer) {
2284 NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame); 2301 NewAckFrameInfo new_ack_info = GetNewAckFrameInfo(frame);
2285 QuicPacketNumber largest_acked = frame.largest_observed; 2302 QuicPacketNumber largest_acked = frame.largest_observed;
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
2566 2583
2567 bool QuicFramer::RaiseError(QuicErrorCode error) { 2584 bool QuicFramer::RaiseError(QuicErrorCode error) {
2568 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) 2585 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error)
2569 << " detail: " << detailed_error_; 2586 << " detail: " << detailed_error_;
2570 set_error(error); 2587 set_error(error);
2571 visitor_->OnError(this); 2588 visitor_->OnError(this);
2572 return false; 2589 return false;
2573 } 2590 }
2574 2591
2575 } // namespace net 2592 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698