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

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

Issue 1542123002: Add path_id to SerializedPacket. No functional change. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@110310127
Patch Set: Created 4 years, 12 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_connection_test.cc ('k') | net/quic/quic_packet_creator_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_packet_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 // not in AddFrame, because when the first padded frame is added to the queue, 641 // not in AddFrame, because when the first padded frame is added to the queue,
642 // it might not be retransmittable, and hence the flag would end up being not 642 // it might not be retransmittable, and hence the flag would end up being not
643 // set. 643 // set.
644 if (queued_retransmittable_frames_.get() != nullptr) { 644 if (queued_retransmittable_frames_.get() != nullptr) {
645 queued_retransmittable_frames_->set_needs_padding(needs_padding_); 645 queued_retransmittable_frames_->set_needs_padding(needs_padding_);
646 } 646 }
647 647
648 packet_size_ = 0; 648 packet_size_ = 0;
649 queued_frames_.clear(); 649 queued_frames_.clear();
650 needs_padding_ = false; 650 needs_padding_ = false;
651 return SerializedPacket( 651 return SerializedPacket(current_path_, header.packet_number,
652 header.packet_number, header.public_header.packet_number_length, 652 header.public_header.packet_number_length,
653 encrypted_buffer, encrypted_length, /* owns_buffer*/ false, 653 encrypted_buffer, encrypted_length,
654 QuicFramer::GetPacketEntropyHash(header), 654 /* owns_buffer*/ false,
655 queued_retransmittable_frames_.release(), has_ack_, has_stop_waiting_, 655 QuicFramer::GetPacketEntropyHash(header),
656 encryption_level_); 656 queued_retransmittable_frames_.release(), has_ack_,
657 has_stop_waiting_, encryption_level_);
657 } 658 }
658 659
659 SerializedPacket QuicPacketCreator::SerializeFec(char* buffer, 660 SerializedPacket QuicPacketCreator::SerializeFec(char* buffer,
660 size_t buffer_len) { 661 size_t buffer_len) {
661 DCHECK_LT(0u, buffer_len); 662 DCHECK_LT(0u, buffer_len);
662 if (fec_group_.get() == nullptr || fec_group_->NumReceivedPackets() <= 0) { 663 if (fec_group_.get() == nullptr || fec_group_->NumReceivedPackets() <= 0) {
663 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group."; 664 LOG(DFATAL) << "SerializeFEC called but no group or zero packets in group.";
664 // TODO(jri): Make this a public method of framer? 665 // TODO(jri): Make this a public method of framer?
665 return NoPacket(); 666 return NoPacket();
666 } 667 }
667 DCHECK_EQ(0u, queued_frames_.size()); 668 DCHECK_EQ(0u, queued_frames_.size());
668 QuicPacketHeader header; 669 QuicPacketHeader header;
669 FillPacketHeader(fec_group_->FecGroupNumber(), true, &header); 670 FillPacketHeader(fec_group_->FecGroupNumber(), true, &header);
670 scoped_ptr<QuicPacket> packet( 671 scoped_ptr<QuicPacket> packet(
671 framer_->BuildFecPacket(header, fec_group_->PayloadParity())); 672 framer_->BuildFecPacket(header, fec_group_->PayloadParity()));
672 fec_group_.reset(nullptr); 673 fec_group_.reset(nullptr);
673 packet_size_ = 0; 674 packet_size_ = 0;
674 LOG_IF(DFATAL, packet == nullptr) 675 LOG_IF(DFATAL, packet == nullptr)
675 << "Failed to serialize fec packet for group:" 676 << "Failed to serialize fec packet for group:"
676 << fec_group_->FecGroupNumber(); 677 << fec_group_->FecGroupNumber();
677 DCHECK_GE(max_packet_length_, packet->length()); 678 DCHECK_GE(max_packet_length_, packet->length());
678 // Immediately encrypt the packet, to ensure we don't encrypt the same packet 679 // Immediately encrypt the packet, to ensure we don't encrypt the same packet
679 // packet number multiple times. 680 // packet number multiple times.
680 size_t encrypted_length = framer_->EncryptPayload( 681 size_t encrypted_length = framer_->EncryptPayload(
681 encryption_level_, packet_number_, *packet, buffer, buffer_len); 682 encryption_level_, packet_number_, *packet, buffer, buffer_len);
682 if (encrypted_length == 0) { 683 if (encrypted_length == 0) {
683 LOG(DFATAL) << "Failed to encrypt packet number " << packet_number_; 684 LOG(DFATAL) << "Failed to encrypt packet number " << packet_number_;
684 return NoPacket(); 685 return NoPacket();
685 } 686 }
686 SerializedPacket serialized(header.packet_number, 687 SerializedPacket serialized(current_path_, header.packet_number,
687 header.public_header.packet_number_length, buffer, 688 header.public_header.packet_number_length, buffer,
688 encrypted_length, /* owns_buffer */ false, 689 encrypted_length, /* owns_buffer */ false,
689 QuicFramer::GetPacketEntropyHash(header), nullptr, 690 QuicFramer::GetPacketEntropyHash(header), nullptr,
690 false, false, encryption_level_); 691 false, false, encryption_level_);
691 serialized.is_fec_packet = true; 692 serialized.is_fec_packet = true;
692 return serialized; 693 return serialized;
693 } 694 }
694 695
695 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket( 696 QuicEncryptedPacket* QuicPacketCreator::SerializeVersionNegotiationPacket(
696 const QuicVersionVector& supported_versions) { 697 const QuicVersionVector& supported_versions) {
697 DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective()); 698 DCHECK_EQ(Perspective::IS_SERVER, framer_->perspective());
698 QuicEncryptedPacket* encrypted = QuicFramer::BuildVersionNegotiationPacket( 699 QuicEncryptedPacket* encrypted = QuicFramer::BuildVersionNegotiationPacket(
699 connection_id_, supported_versions); 700 connection_id_, supported_versions);
700 DCHECK(encrypted); 701 DCHECK(encrypted);
701 DCHECK_GE(max_packet_length_, encrypted->length()); 702 DCHECK_GE(max_packet_length_, encrypted->length());
702 return encrypted; 703 return encrypted;
703 } 704 }
704 705
705 SerializedPacket QuicPacketCreator::NoPacket() { 706 SerializedPacket QuicPacketCreator::NoPacket() {
706 return SerializedPacket(0, PACKET_1BYTE_PACKET_NUMBER, nullptr, 0, nullptr, 707 return SerializedPacket(kInvalidPathId, 0, PACKET_1BYTE_PACKET_NUMBER,
707 false, false); 708 nullptr, 0, nullptr, false, false);
708 } 709 }
709 710
710 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, 711 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group,
711 bool fec_flag, 712 bool fec_flag,
712 QuicPacketHeader* header) { 713 QuicPacketHeader* header) {
713 header->public_header.connection_id = connection_id_; 714 header->public_header.connection_id = connection_id_;
714 header->public_header.connection_id_length = connection_id_length_; 715 header->public_header.connection_id_length = connection_id_length_;
715 header->public_header.reset_flag = false; 716 header->public_header.reset_flag = false;
716 header->public_header.version_flag = send_version_in_packet_; 717 header->public_header.version_flag = send_version_in_packet_;
717 header->fec_flag = fec_flag; 718 header->fec_flag = fec_flag;
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 hash_map<QuicPathId, QuicPacketNumber>::iterator it = 866 hash_map<QuicPathId, QuicPacketNumber>::iterator it =
866 multipath_packet_number_.find(path_id); 867 multipath_packet_number_.find(path_id);
867 // If path_id is not in the map, it's a new path. Set packet_number to 0. 868 // If path_id is not in the map, it's a new path. Set packet_number to 0.
868 packet_number_ = it == multipath_packet_number_.end() ? 0 : it->second; 869 packet_number_ = it == multipath_packet_number_.end() ? 0 : it->second;
869 current_path_ = path_id; 870 current_path_ = path_id;
870 // Switching path needs to update packet number length. 871 // Switching path needs to update packet number length.
871 UpdatePacketNumberLength(least_packet_awaited_by_peer, max_packets_in_flight); 872 UpdatePacketNumberLength(least_packet_awaited_by_peer, max_packets_in_flight);
872 } 873 }
873 874
874 } // namespace net 875 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection_test.cc ('k') | net/quic/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698