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