| Index: net/quic/quic_packet_creator.cc
|
| diff --git a/net/quic/quic_packet_creator.cc b/net/quic/quic_packet_creator.cc
|
| index 6fcc69a9dc3ace0a9bf0f3bbe342e416b46106ae..58aaa85223ec73ebba996344a4ad39579644b1ec 100644
|
| --- a/net/quic/quic_packet_creator.cc
|
| +++ b/net/quic/quic_packet_creator.cc
|
| @@ -453,7 +453,29 @@ void QuicPacketCreator::Flush() {
|
| ALIGNAS(64) char seralized_packet_buffer[kMaxPacketSize];
|
| SerializedPacket serialized_packet =
|
| SerializePacket(seralized_packet_buffer, kMaxPacketSize);
|
| - delegate_->OnSerializedPacket(&serialized_packet);
|
| + OnSerializedPacket(&serialized_packet);
|
| +}
|
| +
|
| +void QuicPacketCreator::OnSerializedPacket(SerializedPacket* packet) {
|
| + if (packet->packet == nullptr) {
|
| + LOG(DFATAL) << "Failed to SerializePacket. fec_policy:" << fec_send_policy()
|
| + << " should_fec_protect_:" << should_fec_protect_next_packet();
|
| + delegate_->CloseConnection(QUIC_FAILED_TO_SERIALIZE_PACKET, false);
|
| + return;
|
| + }
|
| + // There may be AckListeners interested in this packet.
|
| + packet->listeners.swap(ack_listeners_);
|
| + DCHECK(ack_listeners_.empty());
|
| + delegate_->OnSerializedPacket(packet);
|
| + has_ack_ = false;
|
| + has_stop_waiting_ = false;
|
| + MaybeSendFecPacketAndCloseGroup(/*force_send_fec=*/false,
|
| + /*is_fec_timeout=*/false);
|
| + // Maximum packet size may be only enacted while no packet is currently being
|
| + // constructed, so here we have a good opportunity to actually change it.
|
| + if (CanSetMaxPacketLength()) {
|
| + SetMaxPacketLength(max_packet_length_);
|
| + }
|
| }
|
|
|
| bool QuicPacketCreator::HasPendingFrames() const {
|
| @@ -509,6 +531,12 @@ bool QuicPacketCreator::AddPaddedSavedFrame(const QuicFrame& frame) {
|
| return false;
|
| }
|
|
|
| +void QuicPacketCreator::AddAckListener(QuicAckListenerInterface* listener,
|
| + QuicPacketLength length) {
|
| + DCHECK(!queued_frames_.empty());
|
| + ack_listeners_.push_back(AckListenerWrapper(listener, length));
|
| +}
|
| +
|
| SerializedPacket QuicPacketCreator::SerializePacket(
|
| char* encrypted_buffer,
|
| size_t encrypted_buffer_len) {
|
| @@ -580,10 +608,6 @@ SerializedPacket QuicPacketCreator::SerializePacket(
|
| queued_retransmittable_frames_->set_needs_padding(needs_padding_);
|
| }
|
|
|
| - const bool has_ack = has_ack_;
|
| - const bool has_stop_waiting = has_stop_waiting_;
|
| - has_ack_ = false;
|
| - has_stop_waiting_ = false;
|
| packet_size_ = 0;
|
| queued_frames_.clear();
|
| needs_padding_ = false;
|
| @@ -591,7 +615,7 @@ SerializedPacket QuicPacketCreator::SerializePacket(
|
| header.packet_number, header.public_header.packet_number_length,
|
| encrypted_buffer, encrypted_length, /* owns_buffer*/ false,
|
| QuicFramer::GetPacketEntropyHash(header),
|
| - queued_retransmittable_frames_.release(), has_ack, has_stop_waiting,
|
| + queued_retransmittable_frames_.release(), has_ack_, has_stop_waiting_,
|
| encryption_level_);
|
| }
|
|
|
| @@ -751,7 +775,7 @@ void QuicPacketCreator::MaybeSendFecPacketAndCloseGroup(bool force_send_fec,
|
| ALIGNAS(64) char seralized_fec_buffer[kMaxPacketSize];
|
| SerializedPacket serialized_fec =
|
| SerializeFec(seralized_fec_buffer, kMaxPacketSize);
|
| - delegate_->OnSerializedPacket(&serialized_fec);
|
| + OnSerializedPacket(&serialized_fec);
|
| }
|
| }
|
|
|
|
|