xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/quic_default_packet_writer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 #include "quiche/quic/core/quic_default_packet_writer.h"
6 
7 #include "quiche/quic/core/quic_udp_socket.h"
8 
9 namespace quic {
10 
QuicDefaultPacketWriter(SocketFd fd)11 QuicDefaultPacketWriter::QuicDefaultPacketWriter(SocketFd fd)
12     : fd_(fd), write_blocked_(false) {}
13 
14 QuicDefaultPacketWriter::~QuicDefaultPacketWriter() = default;
15 
WritePacket(const char * buffer,size_t buf_len,const QuicIpAddress & self_address,const QuicSocketAddress & peer_address,PerPacketOptions *,const QuicPacketWriterParams & params)16 WriteResult QuicDefaultPacketWriter::WritePacket(
17     const char* buffer, size_t buf_len, const QuicIpAddress& self_address,
18     const QuicSocketAddress& peer_address, PerPacketOptions* /*options*/,
19     const QuicPacketWriterParams& params) {
20   QUICHE_DCHECK(!write_blocked_);
21   QuicUdpPacketInfo packet_info;
22   packet_info.SetPeerAddress(peer_address);
23   packet_info.SetSelfIp(self_address);
24   packet_info.SetEcnCodepoint(params.ecn_codepoint);
25   WriteResult result =
26       QuicUdpSocketApi().WritePacket(fd_, buffer, buf_len, packet_info);
27   if (IsWriteBlockedStatus(result.status)) {
28     write_blocked_ = true;
29   }
30   return result;
31 }
32 
IsWriteBlocked() const33 bool QuicDefaultPacketWriter::IsWriteBlocked() const { return write_blocked_; }
34 
SetWritable()35 void QuicDefaultPacketWriter::SetWritable() { write_blocked_ = false; }
36 
MessageTooBigErrorCode() const37 std::optional<int> QuicDefaultPacketWriter::MessageTooBigErrorCode() const {
38   return kSocketErrorMsgSize;
39 }
40 
GetMaxPacketSize(const QuicSocketAddress &) const41 QuicByteCount QuicDefaultPacketWriter::GetMaxPacketSize(
42     const QuicSocketAddress& /*peer_address*/) const {
43   return kMaxOutgoingPacketSize;
44 }
45 
SupportsReleaseTime() const46 bool QuicDefaultPacketWriter::SupportsReleaseTime() const { return false; }
47 
IsBatchMode() const48 bool QuicDefaultPacketWriter::IsBatchMode() const { return false; }
49 
GetNextWriteLocation(const QuicIpAddress &,const QuicSocketAddress &)50 QuicPacketBuffer QuicDefaultPacketWriter::GetNextWriteLocation(
51     const QuicIpAddress& /*self_address*/,
52     const QuicSocketAddress& /*peer_address*/) {
53   return {nullptr, nullptr};
54 }
55 
Flush()56 WriteResult QuicDefaultPacketWriter::Flush() {
57   return WriteResult(WRITE_STATUS_OK, 0);
58 }
59 
set_write_blocked(bool is_blocked)60 void QuicDefaultPacketWriter::set_write_blocked(bool is_blocked) {
61   write_blocked_ = is_blocked;
62 }
63 
64 }  // namespace quic
65