| Index: net/quic/quic_packet_creator.cc
|
| diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
|
| index e5cda5366f6dba13303a76eb00e284a86a461fbb..75f7490ff703c0c4ceac804df1fa1fd0b696bc1a 100644
|
| --- a/net/quic/quic_packet_creator.cc
|
| +++ b/net/quic/quic_packet_creator.cc
|
| @@ -76,7 +76,6 @@ QuicPacketCreator::QuicPacketCreator(QuicConnectionId connection_id,
|
| random_bool_source_(new QuicRandomBoolSource(random_generator)),
|
| packet_number_(0),
|
| should_fec_protect_(false),
|
| - fec_group_number_(0),
|
| send_version_in_packet_(framer->perspective() == Perspective::IS_CLIENT),
|
| max_packet_length_(0),
|
| max_packets_per_fec_group_(kDefaultMaxPacketsPerFecGroup),
|
| @@ -130,6 +129,10 @@ void QuicPacketCreator::set_max_packets_per_fec_group(
|
| DCHECK_LT(0u, max_packets_per_fec_group_);
|
| }
|
|
|
| +QuicFecGroupNumber QuicPacketCreator::fec_group_number() {
|
| + return fec_group_ != nullptr ? fec_group_->FecGroupNumber() : 0;
|
| +}
|
| +
|
| bool QuicPacketCreator::ShouldSendFec(bool force_close) const {
|
| DCHECK(!HasPendingFrames());
|
| return fec_group_.get() != nullptr && fec_group_->NumReceivedPackets() > 0 &&
|
| @@ -175,7 +178,6 @@ void QuicPacketCreator::StopFecProtectingPackets() {
|
| }
|
| DCHECK(should_fec_protect_);
|
| should_fec_protect_ = false;
|
| - fec_group_number_ = 0;
|
| }
|
|
|
| bool QuicPacketCreator::IsFecProtected() const {
|
| @@ -205,8 +207,7 @@ InFecGroup QuicPacketCreator::MaybeUpdateLengthsAndStartFec() {
|
| }
|
| // Start a new FEC group since protection is on. Set the fec group number to
|
| // the packet number of the next packet.
|
| - fec_group_number_ = packet_number() + 1;
|
| - fec_group_.reset(new QuicFecGroup(fec_group_number_));
|
| + fec_group_.reset(new QuicFecGroup(packet_number_ + 1));
|
| return IN_FEC_GROUP;
|
| }
|
|
|
| @@ -479,9 +480,12 @@ SerializedPacket QuicPacketCreator::SerializePacket(
|
| DCHECK_LT(0u, encrypted_buffer_len);
|
| LOG_IF(DFATAL, queued_frames_.empty())
|
| << "Attempt to serialize empty packet";
|
| - DCHECK_GE(packet_number_ + 1, fec_group_number_);
|
| + if (fec_group_.get() != nullptr) {
|
| + DCHECK_GE(packet_number_ + 1, fec_group_->FecGroupNumber());
|
| + }
|
| QuicPacketHeader header;
|
| - FillPacketHeader(should_fec_protect_ ? fec_group_number_ : 0, false, &header);
|
| + // FillPacketHeader increments packet_number_.
|
| + FillPacketHeader(fec_group_number(), false, &header);
|
|
|
| MaybeAddPadding();
|
|
|
| @@ -567,13 +571,14 @@ SerializedPacket QuicPacketCreator::SerializeFec(char* buffer,
|
| }
|
| DCHECK_EQ(0u, queued_frames_.size());
|
| QuicPacketHeader header;
|
| - FillPacketHeader(fec_group_number_, true, &header);
|
| + FillPacketHeader(fec_group_->FecGroupNumber(), true, &header);
|
| scoped_ptr<QuicPacket> packet(
|
| framer_->BuildFecPacket(header, fec_group_->PayloadParity()));
|
| fec_group_.reset(nullptr);
|
| packet_size_ = 0;
|
| LOG_IF(DFATAL, packet == nullptr)
|
| - << "Failed to serialize fec packet for group:" << fec_group_number_;
|
| + << "Failed to serialize fec packet for group:"
|
| + << fec_group_->FecGroupNumber();
|
| DCHECK_GE(max_packet_length_, packet->length());
|
| // Immediately encrypt the packet, to ensure we don't encrypt the same packet
|
| // packet number multiple times.
|
|
|