| Index: net/quic/quic_packet_creator.cc
|
| diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
|
| index 13d357c3048c27ba9155faf517f0ec05e1c658cd..bc012c2af199374cb46e65918dcc035614ae45e2 100644
|
| --- a/net/quic/quic_packet_creator.cc
|
| +++ b/net/quic/quic_packet_creator.cc
|
| @@ -45,7 +45,7 @@ QuicPacketCreator::QuicPacketCreator(QuicConnectionId connection_id,
|
| connection_id_(connection_id),
|
| packet_(kDefaultPathId,
|
| 0,
|
| - next_packet_number_length_,
|
| + PACKET_1BYTE_PACKET_NUMBER,
|
| nullptr,
|
| 0,
|
| 0,
|
| @@ -83,6 +83,7 @@ void QuicPacketCreator::SetMaxPacketLength(QuicByteCount length) {
|
| }
|
|
|
| void QuicPacketCreator::MaybeUpdatePacketNumberLength() {
|
| + DCHECK(!FLAGS_quic_simple_packet_number_length);
|
| if (!queued_frames_.empty()) {
|
| // Don't change creator state if there are frames queued.
|
| return;
|
| @@ -114,12 +115,25 @@ void QuicPacketCreator::SetDiversificationNonce(
|
| void QuicPacketCreator::UpdatePacketNumberLength(
|
| QuicPacketNumber least_packet_awaited_by_peer,
|
| QuicPacketCount max_packets_in_flight) {
|
| + if (FLAGS_quic_simple_packet_number_length &&
|
| + !queued_frames_.empty()) {
|
| + // Don't change creator state if there are frames queued.
|
| + QUIC_BUG << "Called UpdatePacketNumberLength with " << queued_frames_.size()
|
| + << " queued_frames.";
|
| + return;
|
| + }
|
| +
|
| DCHECK_LE(least_packet_awaited_by_peer, packet_.packet_number + 1);
|
| const QuicPacketNumber current_delta =
|
| packet_.packet_number + 1 - least_packet_awaited_by_peer;
|
| const uint64_t delta = max(current_delta, max_packets_in_flight);
|
| - next_packet_number_length_ =
|
| - QuicFramer::GetMinSequenceNumberLength(delta * 4);
|
| + if (FLAGS_quic_simple_packet_number_length) {
|
| + packet_.packet_number_length =
|
| + QuicFramer::GetMinSequenceNumberLength(delta * 4);
|
| + } else {
|
| + next_packet_number_length_ =
|
| + QuicFramer::GetMinSequenceNumberLength(delta * 4);
|
| + }
|
| }
|
|
|
| bool QuicPacketCreator::ConsumeData(QuicStreamId id,
|
| @@ -194,9 +208,10 @@ void QuicPacketCreator::CreateStreamFrame(QuicStreamId id,
|
| IncludeNonceInPublicHeader(),
|
| PACKET_6BYTE_PACKET_NUMBER, offset));
|
|
|
| - MaybeUpdatePacketNumberLength();
|
| -
|
| - LOG_IF(DFATAL, !HasRoomForStreamFrame(id, offset))
|
| + if (!FLAGS_quic_simple_packet_number_length) {
|
| + MaybeUpdatePacketNumberLength();
|
| + }
|
| + QUIC_BUG_IF(!HasRoomForStreamFrame(id, offset))
|
| << "No room for Stream frame, BytesFree: " << BytesFree()
|
| << " MinStreamFrameSize: "
|
| << QuicFramer::GetMinStreamFrameSize(id, offset, true);
|
| @@ -288,7 +303,9 @@ void QuicPacketCreator::ReserializeAllFrames(
|
|
|
| // Temporarily set the packet number length and change the encryption level.
|
| packet_.packet_number_length = retransmission.packet_number_length;
|
| - next_packet_number_length_ = retransmission.packet_number_length;
|
| + if (!FLAGS_quic_simple_packet_number_length) {
|
| + next_packet_number_length_ = retransmission.packet_number_length;
|
| + }
|
| packet_.num_padding_bytes = retransmission.num_padding_bytes;
|
| // Only preserve the original encryption level if it's a handshake packet or
|
| // if we haven't gone forward secure.
|
| @@ -300,7 +317,12 @@ void QuicPacketCreator::ReserializeAllFrames(
|
| // Serialize the packet and restore packet number length state.
|
| for (const QuicFrame& frame : retransmission.retransmittable_frames) {
|
| bool success = AddFrame(frame, false);
|
| - DCHECK(success);
|
| + LOG_IF(DFATAL, !success)
|
| + << " Failed to add frame of type:" << frame.type
|
| + << " num_frames:" << retransmission.retransmittable_frames.size()
|
| + << " retransmission.packet_number_length:"
|
| + << retransmission.packet_number_length
|
| + << " packet_.packet_number_length:" << packet_.packet_number_length;
|
| }
|
| SerializePacket(buffer, buffer_len);
|
| packet_.original_path_id = retransmission.path_id;
|
| @@ -308,8 +330,12 @@ void QuicPacketCreator::ReserializeAllFrames(
|
| packet_.transmission_type = retransmission.transmission_type;
|
| OnSerializedPacket();
|
| // Restore old values.
|
| - packet_.packet_number_length = saved_length;
|
| - next_packet_number_length_ = saved_next_length;
|
| + if (!FLAGS_quic_simple_packet_number_length) {
|
| + // OnSerializedPacket updates the packet_number_length, so it's incorrect to
|
| + // restore it here.
|
| + packet_.packet_number_length = saved_length;
|
| + next_packet_number_length_ = saved_next_length;
|
| + }
|
| packet_.encryption_level = default_encryption_level;
|
| }
|
|
|
| @@ -458,7 +484,9 @@ size_t QuicPacketCreator::PacketSize() {
|
| return packet_size_;
|
| }
|
| // Update packet number length on packet boundary.
|
| - packet_.packet_number_length = next_packet_number_length_;
|
| + if (!FLAGS_quic_simple_packet_number_length) {
|
| + packet_.packet_number_length = next_packet_number_length_;
|
| + }
|
| packet_size_ = GetPacketHeaderSize(
|
| framer_->version(), connection_id_length_, send_version_in_packet_,
|
| send_path_id_in_packet_, IncludeNonceInPublicHeader(),
|
| @@ -591,8 +619,9 @@ bool QuicPacketCreator::AddFrame(const QuicFrame& frame,
|
| ConnectionCloseSource::FROM_SELF);
|
| return false;
|
| }
|
| - MaybeUpdatePacketNumberLength();
|
| -
|
| + if (!FLAGS_quic_simple_packet_number_length) {
|
| + MaybeUpdatePacketNumberLength();
|
| + }
|
| size_t frame_len = framer_->GetSerializedFrameLength(
|
| frame, BytesFree(), queued_frames_.empty(), true,
|
| packet_.packet_number_length);
|
|
|