Line data Source code
1 : #pragma once 2 : 3 : #include "envoy/buffer/buffer.h" 4 : #include "envoy/network/socket.h" 5 : #include "envoy/network/udp_packet_writer_handler.h" 6 : 7 : #include "source/common/network/io_socket_error_impl.h" 8 : 9 : namespace Envoy { 10 : namespace Network { 11 : 12 : class UdpDefaultWriter : public UdpPacketWriter { 13 : public: 14 : UdpDefaultWriter(Network::IoHandle& io_handle); 15 : 16 : ~UdpDefaultWriter() override; 17 : 18 : // Following writePacket utilizes Utility::writeToSocket() implementation 19 : Api::IoCallUint64Result writePacket(const Buffer::Instance& buffer, const Address::Ip* local_ip, 20 : const Address::Instance& peer_address) override; 21 : 22 0 : bool isWriteBlocked() const override { return write_blocked_; } 23 0 : void setWritable() override { write_blocked_ = false; } 24 0 : uint64_t getMaxPacketSize(const Address::Instance& /*peer_address*/) const override { 25 0 : return Network::UdpMaxOutgoingPacketSize; 26 0 : } 27 0 : bool isBatchMode() const override { return false; } 28 : Network::UdpPacketWriterBuffer 29 : getNextWriteLocation(const Address::Ip* /*local_ip*/, 30 0 : const Address::Instance& /*peer_address*/) override { 31 0 : return {nullptr, 0, nullptr}; 32 0 : } 33 0 : Api::IoCallUint64Result flush() override { 34 0 : return {/*rc=*/0, 35 0 : /*err=*/Api::IoError::none()}; 36 0 : } 37 : 38 : private: 39 : bool write_blocked_{false}; 40 : Network::IoHandle& io_handle_; 41 : }; 42 : 43 : class UdpDefaultWriterFactory : public Network::UdpPacketWriterFactory { 44 : public: 45 : Network::UdpPacketWriterPtr createUdpPacketWriter(Network::IoHandle& io_handle, 46 0 : Stats::Scope&) override { 47 0 : return std::make_unique<UdpDefaultWriter>(io_handle); 48 0 : } 49 : }; 50 : 51 : } // namespace Network 52 : } // namespace Envoy