Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/network/udp_packet_writer_handler.h" 4 : 5 : #include "quiche/quic/core/quic_packet_writer.h" 6 : 7 : namespace Envoy { 8 : namespace Quic { 9 : 10 : class EnvoyQuicPacketWriter : public quic::QuicPacketWriter { 11 : public: 12 : EnvoyQuicPacketWriter(Network::UdpPacketWriterPtr envoy_udp_packet_writer); 13 : 14 : quic::WriteResult WritePacket(const char* buffer, size_t buf_len, 15 : const quic::QuicIpAddress& self_address, 16 : const quic::QuicSocketAddress& peer_address, 17 : quic::PerPacketOptions* options, 18 : const quic::QuicPacketWriterParams& params) override; 19 : 20 : // quic::QuicPacketWriter 21 0 : bool IsWriteBlocked() const override { return envoy_udp_packet_writer_->isWriteBlocked(); } 22 0 : void SetWritable() override { envoy_udp_packet_writer_->setWritable(); } 23 0 : bool IsBatchMode() const override { return envoy_udp_packet_writer_->isBatchMode(); } 24 : // Currently this writer doesn't support pacing offload. 25 0 : bool SupportsReleaseTime() const override { return false; } 26 : // Currently this writer doesn't support Explicit Congestion Notification. 27 0 : bool SupportsEcn() const override { return false; } 28 : 29 : absl::optional<int> MessageTooBigErrorCode() const override; 30 : quic::QuicByteCount GetMaxPacketSize(const quic::QuicSocketAddress& peer_address) const override; 31 : quic::QuicPacketBuffer GetNextWriteLocation(const quic::QuicIpAddress& self_address, 32 : const quic::QuicSocketAddress& peer_address) override; 33 : quic::WriteResult Flush() override; 34 : 35 : private: 36 : Network::UdpPacketWriterPtr envoy_udp_packet_writer_; 37 : }; 38 : 39 : } // namespace Quic 40 : } // namespace Envoy