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
3843373
  bool IsWriteBlocked() const override { return envoy_udp_packet_writer_->isWriteBlocked(); }
22
137461
  void SetWritable() override { envoy_udp_packet_writer_->setWritable(); }
23
721799
  bool IsBatchMode() const override { return envoy_udp_packet_writer_->isBatchMode(); }
24
  // Currently this writer doesn't support pacing offload.
25
8815
  bool SupportsReleaseTime() const override { return false; }
26
  // Currently this writer doesn't support Explicit Congestion Notification.
27
  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