Move PacketCollector from `quic_dispatcher.cc` to `quic_buffered_packet_store.h`. This is needed for sending ack packets from QuicBufferedPacketStore. PiperOrigin-RevId: 643456856
diff --git a/quiche/quic/core/quic_buffered_packet_store.h b/quiche/quic/core/quic_buffered_packet_store.h index f3ca342..354c9cf 100644 --- a/quiche/quic/core/quic_buffered_packet_store.h +++ b/quiche/quic/core/quic_buffered_packet_store.h
@@ -17,13 +17,19 @@ #include "quiche/quic/core/quic_alarm_factory.h" #include "quiche/quic/core/quic_clock.h" #include "quiche/quic/core/quic_connection_id.h" +#include "quiche/quic/core/quic_error_codes.h" +#include "quiche/quic/core/quic_packet_creator.h" #include "quiche/quic/core/quic_packets.h" +#include "quiche/quic/core/quic_stream_frame_data_producer.h" +#include "quiche/quic/core/quic_stream_send_buffer.h" #include "quiche/quic/core/quic_time.h" #include "quiche/quic/core/quic_types.h" #include "quiche/quic/core/quic_versions.h" #include "quiche/quic/core/tls_chlo_extractor.h" #include "quiche/quic/platform/api/quic_export.h" #include "quiche/quic/platform/api/quic_socket_address.h" +#include "quiche/common/platform/api/quiche_export.h" +#include "quiche/common/quiche_buffer_allocator.h" #include "quiche/common/quiche_linked_hash_map.h" namespace quic { @@ -206,6 +212,80 @@ connections_with_chlo_; }; +// Collects packets serialized by a QuicPacketCreator. +class QUICHE_NO_EXPORT PacketCollector + : public QuicPacketCreator::DelegateInterface, + public QuicStreamFrameDataProducer { + public: + explicit PacketCollector(quiche::QuicheBufferAllocator* allocator) + : send_buffer_(allocator) {} + ~PacketCollector() override = default; + + // QuicPacketCreator::DelegateInterface methods: + void OnSerializedPacket(SerializedPacket serialized_packet) override { + // Make a copy of the serialized packet to send later. + packets_.emplace_back( + new QuicEncryptedPacket(CopyBuffer(serialized_packet), + serialized_packet.encrypted_length, true)); + } + + QuicPacketBuffer GetPacketBuffer() override { + // Let QuicPacketCreator to serialize packets on stack buffer. + return {nullptr, nullptr}; + } + + void OnUnrecoverableError(QuicErrorCode /*error*/, + const std::string& /*error_details*/) override {} + + bool ShouldGeneratePacket(HasRetransmittableData /*retransmittable*/, + IsHandshake /*handshake*/) override { + QUICHE_DCHECK(false); + return true; + } + + void MaybeBundleOpportunistically( + TransmissionType /*transmission_type*/) override { + QUICHE_DCHECK(false); + } + + QuicByteCount GetFlowControlSendWindowSize(QuicStreamId /*id*/) override { + QUICHE_DCHECK(false); + return std::numeric_limits<QuicByteCount>::max(); + } + + SerializedPacketFate GetSerializedPacketFate( + bool /*is_mtu_discovery*/, + EncryptionLevel /*encryption_level*/) override { + return SEND_TO_WRITER; + } + + // QuicStreamFrameDataProducer + WriteStreamDataResult WriteStreamData(QuicStreamId /*id*/, + QuicStreamOffset offset, + QuicByteCount data_length, + QuicDataWriter* writer) override { + if (send_buffer_.WriteStreamData(offset, data_length, writer)) { + return WRITE_SUCCESS; + } + return WRITE_FAILED; + } + bool WriteCryptoData(EncryptionLevel /*level*/, QuicStreamOffset offset, + QuicByteCount data_length, + QuicDataWriter* writer) override { + return send_buffer_.WriteStreamData(offset, data_length, writer); + } + + std::vector<std::unique_ptr<QuicEncryptedPacket>>* packets() { + return &packets_; + } + + private: + std::vector<std::unique_ptr<QuicEncryptedPacket>> packets_; + // This is only needed until the packets are encrypted. Once packets are + // encrypted, the stream data is no longer required. + QuicStreamSendBuffer send_buffer_; +}; + } // namespace quic #endif // QUICHE_QUIC_CORE_QUIC_BUFFERED_PACKET_STORE_H_
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc index 7daf1ed..732496a 100644 --- a/quiche/quic/core/quic_dispatcher.cc +++ b/quiche/quic/core/quic_dispatcher.cc
@@ -112,80 +112,6 @@ QuicDispatcher* dispatcher_; }; -// Collects packets serialized by a QuicPacketCreator in order -// to be handed off to the time wait list manager. -class PacketCollector : public QuicPacketCreator::DelegateInterface, - public QuicStreamFrameDataProducer { - public: - explicit PacketCollector(quiche::QuicheBufferAllocator* allocator) - : send_buffer_(allocator) {} - ~PacketCollector() override = default; - - // QuicPacketCreator::DelegateInterface methods: - void OnSerializedPacket(SerializedPacket serialized_packet) override { - // Make a copy of the serialized packet to send later. - packets_.emplace_back( - new QuicEncryptedPacket(CopyBuffer(serialized_packet), - serialized_packet.encrypted_length, true)); - } - - QuicPacketBuffer GetPacketBuffer() override { - // Let QuicPacketCreator to serialize packets on stack buffer. - return {nullptr, nullptr}; - } - - void OnUnrecoverableError(QuicErrorCode /*error*/, - const std::string& /*error_details*/) override {} - - bool ShouldGeneratePacket(HasRetransmittableData /*retransmittable*/, - IsHandshake /*handshake*/) override { - QUICHE_DCHECK(false); - return true; - } - - void MaybeBundleOpportunistically( - TransmissionType /*transmission_type*/) override { - QUICHE_DCHECK(false); - } - - QuicByteCount GetFlowControlSendWindowSize(QuicStreamId /*id*/) override { - QUICHE_DCHECK(false); - return std::numeric_limits<QuicByteCount>::max(); - } - - SerializedPacketFate GetSerializedPacketFate( - bool /*is_mtu_discovery*/, - EncryptionLevel /*encryption_level*/) override { - return SEND_TO_WRITER; - } - - // QuicStreamFrameDataProducer - WriteStreamDataResult WriteStreamData(QuicStreamId /*id*/, - QuicStreamOffset offset, - QuicByteCount data_length, - QuicDataWriter* writer) override { - if (send_buffer_.WriteStreamData(offset, data_length, writer)) { - return WRITE_SUCCESS; - } - return WRITE_FAILED; - } - bool WriteCryptoData(EncryptionLevel /*level*/, QuicStreamOffset offset, - QuicByteCount data_length, - QuicDataWriter* writer) override { - return send_buffer_.WriteStreamData(offset, data_length, writer); - } - - std::vector<std::unique_ptr<QuicEncryptedPacket>>* packets() { - return &packets_; - } - - private: - std::vector<std::unique_ptr<QuicEncryptedPacket>> packets_; - // This is only needed until the packets are encrypted. Once packets are - // encrypted, the stream data is no longer required. - QuicStreamSendBuffer send_buffer_; -}; - // Helper for statelessly closing connections by generating the // correct termination packets and adding the connection to the time wait // list manager.