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

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

Issue 1041853002: Land Recent QUIC Changes until 03/25/2015. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@rch_patch_1036023002
Patch Set: Created 5 years, 9 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 | « net/quic/quic_packet_creator.h ('k') | net/quic/quic_protocol.h » ('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_packet_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "net/quic/crypto/quic_random.h" 9 #include "net/quic/crypto/quic_random.h"
10 #include "net/quic/quic_ack_notifier.h" 10 #include "net/quic/quic_ack_notifier.h"
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 // packet size calculation worked correctly. 392 // packet size calculation worked correctly.
393 if (!possibly_truncated_by_length) { 393 if (!possibly_truncated_by_length) {
394 DCHECK_EQ(packet_size_, packet->length()); 394 DCHECK_EQ(packet_size_, packet->length());
395 } 395 }
396 // Immediately encrypt the packet, to ensure we don't encrypt the same packet 396 // Immediately encrypt the packet, to ensure we don't encrypt the same packet
397 // sequence number multiple times. 397 // sequence number multiple times.
398 QuicEncryptedPacket* encrypted = 398 QuicEncryptedPacket* encrypted =
399 framer_->EncryptPacket(encryption_level_, sequence_number_, *packet); 399 framer_->EncryptPacket(encryption_level_, sequence_number_, *packet);
400 if (encrypted == nullptr) { 400 if (encrypted == nullptr) {
401 LOG(DFATAL) << "Failed to encrypt packet number " << sequence_number_; 401 LOG(DFATAL) << "Failed to encrypt packet number " << sequence_number_;
402 SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, 402 return NoPacket();
403 nullptr);
404 return kNoPacket;
405 } 403 }
406 404
407 packet_size_ = 0; 405 packet_size_ = 0;
408 queued_frames_.clear(); 406 queued_frames_.clear();
409 return SerializedPacket(header.packet_sequence_number, 407 return SerializedPacket(header.packet_sequence_number,
410 header.public_header.sequence_number_length, 408 header.public_header.sequence_number_length,
411 encrypted, QuicFramer::GetPacketEntropyHash(header), 409 encrypted, QuicFramer::GetPacketEntropyHash(header),
412 queued_retransmittable_frames_.release()); 410 queued_retransmittable_frames_.release());
413 } 411 }
414 412
415 SerializedPacket QuicPacketCreator::SerializeFec() { 413 SerializedPacket QuicPacketCreator::SerializeFec() {
416 if (fec_group_.get() == nullptr || fec_group_->NumReceivedPackets() <= 0) { 414 if (fec_group_.get() == nullptr || fec_group_->NumReceivedPackets() <= 0) {
417 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group."; 415 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group.";
418 // TODO(jri): Make this a public method of framer? 416 // TODO(jri): Make this a public method of framer?
419 SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, 417 return NoPacket();
420 nullptr);
421 return kNoPacket;
422 } 418 }
423 DCHECK_EQ(0u, queued_frames_.size()); 419 DCHECK_EQ(0u, queued_frames_.size());
424 QuicPacketHeader header; 420 QuicPacketHeader header;
425 FillPacketHeader(fec_group_number_, true, &header); 421 FillPacketHeader(fec_group_number_, true, &header);
426 QuicFecData fec_data; 422 QuicFecData fec_data;
427 fec_data.fec_group = fec_group_->min_protected_packet(); 423 fec_data.fec_group = fec_group_->min_protected_packet();
428 fec_data.redundancy = fec_group_->payload_parity(); 424 fec_data.redundancy = fec_group_->payload_parity();
429 scoped_ptr<QuicPacket> packet(framer_->BuildFecPacket(header, fec_data)); 425 scoped_ptr<QuicPacket> packet(framer_->BuildFecPacket(header, fec_data));
430 fec_group_.reset(nullptr); 426 fec_group_.reset(nullptr);
431 packet_size_ = 0; 427 packet_size_ = 0;
432 LOG_IF(DFATAL, packet == nullptr) 428 LOG_IF(DFATAL, packet == nullptr)
433 << "Failed to serialize fec packet for group:" << fec_data.fec_group; 429 << "Failed to serialize fec packet for group:" << fec_data.fec_group;
434 DCHECK_GE(max_packet_length_, packet->length()); 430 DCHECK_GE(max_packet_length_, packet->length());
435 // Immediately encrypt the packet, to ensure we don't encrypt the same packet 431 // Immediately encrypt the packet, to ensure we don't encrypt the same packet
436 // sequence number multiple times. 432 // sequence number multiple times.
437 QuicEncryptedPacket* encrypted = 433 QuicEncryptedPacket* encrypted =
438 framer_->EncryptPacket(encryption_level_, sequence_number_, *packet); 434 framer_->EncryptPacket(encryption_level_, sequence_number_, *packet);
439 if (encrypted == nullptr) { 435 if (encrypted == nullptr) {
440 LOG(DFATAL) << "Failed to encrypt packet number " << sequence_number_; 436 LOG(DFATAL) << "Failed to encrypt packet number " << sequence_number_;
441 SerializedPacket kNoPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, 437 return NoPacket();
442 nullptr);
443 return kNoPacket;
444 } 438 }
445 SerializedPacket serialized( 439 SerializedPacket serialized(
446 header.packet_sequence_number, 440 header.packet_sequence_number,
447 header.public_header.sequence_number_length, encrypted, 441 header.public_header.sequence_number_length, encrypted,
448 QuicFramer::GetPacketEntropyHash(header), nullptr); 442 QuicFramer::GetPacketEntropyHash(header), nullptr);
449 serialized.is_fec_packet = true; 443 serialized.is_fec_packet = true;
450 return serialized; 444 return serialized;
451 } 445 }
452 446
453 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket( 447 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket(
454 const QuicVersionVector& supported_versions) { 448 const QuicVersionVector& supported_versions) {
455 DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective()); 449 DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective());
456 QuicPacketPublicHeader header; 450 QuicPacketPublicHeader header;
457 header.connection_id = connection_id_; 451 header.connection_id = connection_id_;
458 header.reset_flag = false; 452 header.reset_flag = false;
459 header.version_flag = true; 453 header.version_flag = true;
460 header.versions = supported_versions; 454 header.versions = supported_versions;
461 QuicEncryptedPacket* encrypted = 455 QuicEncryptedPacket* encrypted =
462 framer_->BuildVersionNegotiationPacket(header, supported_versions); 456 framer_->BuildVersionNegotiationPacket(header, supported_versions);
463 DCHECK(encrypted); 457 DCHECK(encrypted);
464 DCHECK_GE(max_packet_length_, encrypted->length()); 458 DCHECK_GE(max_packet_length_, encrypted->length());
465 return encrypted; 459 return encrypted;
466 } 460 }
467 461
462 SerializedPacket QuicPacketCreator::NoPacket() {
463 return SerializedPacket(0, PACKET_1BYTE_SEQUENCE_NUMBER, nullptr, 0, nullptr);
464 }
465
468 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, 466 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group,
469 bool fec_flag, 467 bool fec_flag,
470 QuicPacketHeader* header) { 468 QuicPacketHeader* header) {
471 header->public_header.connection_id = connection_id_; 469 header->public_header.connection_id = connection_id_;
472 header->public_header.connection_id_length = connection_id_length_; 470 header->public_header.connection_id_length = connection_id_length_;
473 header->public_header.reset_flag = false; 471 header->public_header.reset_flag = false;
474 header->public_header.version_flag = send_version_in_packet_; 472 header->public_header.version_flag = send_version_in_packet_;
475 header->fec_flag = fec_flag; 473 header->fec_flag = fec_flag;
476 header->packet_sequence_number = ++sequence_number_; 474 header->packet_sequence_number = ++sequence_number_;
477 header->public_header.sequence_number_length = sequence_number_length_; 475 header->public_header.sequence_number_length = sequence_number_length_;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 if (!is_handshake) { 546 if (!is_handshake) {
549 return; 547 return;
550 } 548 }
551 549
552 QuicPaddingFrame padding; 550 QuicPaddingFrame padding;
553 bool success = AddFrame(QuicFrame(&padding), false); 551 bool success = AddFrame(QuicFrame(&padding), false);
554 DCHECK(success); 552 DCHECK(success);
555 } 553 }
556 554
557 } // namespace net 555 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.h ('k') | net/quic/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698