1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef QUICHE_QUIC_CORE_QUIC_DEFAULT_PACKET_WRITER_H_ 6 #define QUICHE_QUIC_CORE_QUIC_DEFAULT_PACKET_WRITER_H_ 7 8 #include <cstddef> 9 10 #include "quiche/quic/core/io/socket.h" 11 #include "quiche/quic/core/quic_packet_writer.h" 12 #include "quiche/quic/platform/api/quic_export.h" 13 #include "quiche/quic/platform/api/quic_socket_address.h" 14 15 namespace quic { 16 17 struct WriteResult; 18 19 // Default packet writer which wraps QuicSocketUtils WritePacket. 20 class QUICHE_EXPORT QuicDefaultPacketWriter : public QuicPacketWriter { 21 public: 22 explicit QuicDefaultPacketWriter(SocketFd fd); 23 QuicDefaultPacketWriter(const QuicDefaultPacketWriter&) = delete; 24 QuicDefaultPacketWriter& operator=(const QuicDefaultPacketWriter&) = delete; 25 ~QuicDefaultPacketWriter() override; 26 27 // QuicPacketWriter 28 WriteResult WritePacket(const char* buffer, size_t buf_len, 29 const QuicIpAddress& self_address, 30 const QuicSocketAddress& peer_address, 31 PerPacketOptions* options, 32 const QuicPacketWriterParams& params) override; 33 bool IsWriteBlocked() const override; 34 void SetWritable() override; 35 std::optional<int> MessageTooBigErrorCode() const override; 36 QuicByteCount GetMaxPacketSize( 37 const QuicSocketAddress& peer_address) const override; 38 bool SupportsReleaseTime() const override; 39 bool IsBatchMode() const override; SupportsEcn()40 bool SupportsEcn() const override { return true; } 41 QuicPacketBuffer GetNextWriteLocation( 42 const QuicIpAddress& self_address, 43 const QuicSocketAddress& peer_address) override; 44 WriteResult Flush() override; 45 set_fd(SocketFd fd)46 void set_fd(SocketFd fd) { fd_ = fd; } 47 48 protected: 49 void set_write_blocked(bool is_blocked); fd()50 SocketFd fd() { return fd_; } 51 52 private: 53 SocketFd fd_; 54 bool write_blocked_; 55 }; 56 57 } // namespace quic 58 59 #endif // QUICHE_QUIC_CORE_QUIC_DEFAULT_PACKET_WRITER_H_ 60