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

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

Issue 148073002: Add DFATALs to QuicFramer branches where packet creation fails. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | « no previous file | 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 "net/quic/crypto/quic_decrypter.h" 8 #include "net/quic/crypto/quic_decrypter.h"
9 #include "net/quic/crypto/quic_encrypter.h" 9 #include "net/quic/crypto/quic_encrypter.h"
10 #include "net/quic/quic_data_reader.h" 10 #include "net/quic/quic_data_reader.h"
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 } 304 }
305 305
306 SerializedPacket QuicFramer::BuildDataPacket( 306 SerializedPacket QuicFramer::BuildDataPacket(
307 const QuicPacketHeader& header, 307 const QuicPacketHeader& header,
308 const QuicFrames& frames, 308 const QuicFrames& frames,
309 size_t packet_size) { 309 size_t packet_size) {
310 QuicDataWriter writer(packet_size); 310 QuicDataWriter writer(packet_size);
311 const SerializedPacket kNoPacket( 311 const SerializedPacket kNoPacket(
312 0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL); 312 0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL);
313 if (!AppendPacketHeader(header, &writer)) { 313 if (!AppendPacketHeader(header, &writer)) {
314 LOG(DFATAL) << "AppendPacketHeader failed";
314 return kNoPacket; 315 return kNoPacket;
315 } 316 }
316 317
317 for (size_t i = 0; i < frames.size(); ++i) { 318 for (size_t i = 0; i < frames.size(); ++i) {
318 const QuicFrame& frame = frames[i]; 319 const QuicFrame& frame = frames[i];
319 320
320 const bool last_frame_in_packet = i == (frames.size() - 1); 321 const bool last_frame_in_packet = i == (frames.size() - 1);
321 if (!AppendTypeByte(frame, last_frame_in_packet, &writer)) { 322 if (!AppendTypeByte(frame, last_frame_in_packet, &writer)) {
323 LOG(DFATAL) << "AppendTypeByte failed";
322 return kNoPacket; 324 return kNoPacket;
323 } 325 }
324 326
325 switch (frame.type) { 327 switch (frame.type) {
326 case PADDING_FRAME: 328 case PADDING_FRAME:
327 writer.WritePadding(); 329 writer.WritePadding();
328 break; 330 break;
329 case STREAM_FRAME: 331 case STREAM_FRAME:
330 if (!AppendStreamFramePayload( 332 if (!AppendStreamFramePayload(
331 *frame.stream_frame, last_frame_in_packet, &writer)) { 333 *frame.stream_frame, last_frame_in_packet, &writer)) {
334 LOG(DFATAL) << "AppendStreamFramePayload failed";
332 return kNoPacket; 335 return kNoPacket;
333 } 336 }
334 break; 337 break;
335 case ACK_FRAME: 338 case ACK_FRAME:
336 if (!AppendAckFramePayloadAndTypeByte( 339 if (!AppendAckFramePayloadAndTypeByte(
337 header, *frame.ack_frame, &writer)) { 340 header, *frame.ack_frame, &writer)) {
341 LOG(DFATAL) << "AppendAckFramePayloadAndTypeByte failed";
338 return kNoPacket; 342 return kNoPacket;
339 } 343 }
340 break; 344 break;
341 case CONGESTION_FEEDBACK_FRAME: 345 case CONGESTION_FEEDBACK_FRAME:
342 if (!AppendQuicCongestionFeedbackFramePayload( 346 if (!AppendQuicCongestionFeedbackFramePayload(
343 *frame.congestion_feedback_frame, &writer)) { 347 *frame.congestion_feedback_frame, &writer)) {
348 LOG(DFATAL) << "AppendQuicCongestionFeedbackFramePayload failed";
344 return kNoPacket; 349 return kNoPacket;
345 } 350 }
346 break; 351 break;
347 case RST_STREAM_FRAME: 352 case RST_STREAM_FRAME:
348 if (!AppendRstStreamFramePayload(*frame.rst_stream_frame, &writer)) { 353 if (!AppendRstStreamFramePayload(*frame.rst_stream_frame, &writer)) {
354 LOG(DFATAL) << "AppendRstStreamFramePayload failed";
349 return kNoPacket; 355 return kNoPacket;
350 } 356 }
351 break; 357 break;
352 case CONNECTION_CLOSE_FRAME: 358 case CONNECTION_CLOSE_FRAME:
353 if (!AppendConnectionCloseFramePayload( 359 if (!AppendConnectionCloseFramePayload(
354 *frame.connection_close_frame, &writer)) { 360 *frame.connection_close_frame, &writer)) {
361 LOG(DFATAL) << "AppendConnectionCloseFramePayload failed";
355 return kNoPacket; 362 return kNoPacket;
356 } 363 }
357 break; 364 break;
358 case GOAWAY_FRAME: 365 case GOAWAY_FRAME:
359 if (!AppendGoAwayFramePayload(*frame.goaway_frame, &writer)) { 366 if (!AppendGoAwayFramePayload(*frame.goaway_frame, &writer)) {
367 LOG(DFATAL) << "AppendGoAwayFramePayload failed";
360 return kNoPacket; 368 return kNoPacket;
361 } 369 }
362 break; 370 break;
363 default: 371 default:
364 RaiseError(QUIC_INVALID_FRAME_DATA); 372 RaiseError(QUIC_INVALID_FRAME_DATA);
373 LOG(DFATAL) << "QUIC_INVALID_FRAME_DATA";
365 return kNoPacket; 374 return kNoPacket;
366 } 375 }
367 } 376 }
368 377
369 // Save the length before writing, because take clears it. 378 // Save the length before writing, because take clears it.
370 const size_t len = writer.length(); 379 const size_t len = writer.length();
371 // Less than or equal because truncated acks end up with max_plaintex_size 380 // Less than or equal because truncated acks end up with max_plaintex_size
372 // length, even though they're typically slightly shorter. 381 // length, even though they're typically slightly shorter.
373 DCHECK_LE(len, packet_size); 382 DCHECK_LE(len, packet_size);
374 QuicPacket* packet = QuicPacket::NewDataPacket( 383 QuicPacket* packet = QuicPacket::NewDataPacket(
(...skipping 15 matching lines...) Expand all
390 const QuicFecData& fec) { 399 const QuicFecData& fec) {
391 DCHECK_EQ(IN_FEC_GROUP, header.is_in_fec_group); 400 DCHECK_EQ(IN_FEC_GROUP, header.is_in_fec_group);
392 DCHECK_NE(0u, header.fec_group); 401 DCHECK_NE(0u, header.fec_group);
393 size_t len = GetPacketHeaderSize(header); 402 size_t len = GetPacketHeaderSize(header);
394 len += fec.redundancy.length(); 403 len += fec.redundancy.length();
395 404
396 QuicDataWriter writer(len); 405 QuicDataWriter writer(len);
397 const SerializedPacket kNoPacket( 406 const SerializedPacket kNoPacket(
398 0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL); 407 0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL);
399 if (!AppendPacketHeader(header, &writer)) { 408 if (!AppendPacketHeader(header, &writer)) {
409 LOG(DFATAL) << "AppendPacketHeader failed";
400 return kNoPacket; 410 return kNoPacket;
401 } 411 }
402 412
403 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) { 413 if (!writer.WriteBytes(fec.redundancy.data(), fec.redundancy.length())) {
414 LOG(DFATAL) << "Failed to add FEC";
404 return kNoPacket; 415 return kNoPacket;
405 } 416 }
406 417
407 return SerializedPacket( 418 return SerializedPacket(
408 header.packet_sequence_number, 419 header.packet_sequence_number,
409 header.public_header.sequence_number_length, 420 header.public_header.sequence_number_length,
410 QuicPacket::NewFecPacket(writer.take(), len, true, 421 QuicPacket::NewFecPacket(writer.take(), len, true,
411 header.public_header.guid_length, 422 header.public_header.guid_length,
412 header.public_header.version_flag, 423 header.public_header.version_flag,
413 header.public_header.sequence_number_length), 424 header.public_header.sequence_number_length),
(...skipping 1626 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 2051
2041 bool QuicFramer::RaiseError(QuicErrorCode error) { 2052 bool QuicFramer::RaiseError(QuicErrorCode error) {
2042 DVLOG(1) << "Error detail: " << detailed_error_; 2053 DVLOG(1) << "Error detail: " << detailed_error_;
2043 set_error(error); 2054 set_error(error);
2044 visitor_->OnError(this); 2055 visitor_->OnError(this);
2045 reader_.reset(NULL); 2056 reader_.reset(NULL);
2046 return false; 2057 return false;
2047 } 2058 }
2048 2059
2049 } // namespace net 2060 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/quic/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698