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(int fd)11 QuicDefaultPacketWriter::QuicDefaultPacketWriter(int 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 * options)16 WriteResult QuicDefaultPacketWriter::WritePacket(
17 const char* buffer, size_t buf_len, const QuicIpAddress& self_address,
18 const QuicSocketAddress& peer_address, PerPacketOptions* options) {
19 QUICHE_DCHECK(!write_blocked_);
20 QuicUdpPacketInfo packet_info;
21 packet_info.SetPeerAddress(peer_address);
22 packet_info.SetSelfIp(self_address);
23 if (options != nullptr) {
24 packet_info.SetEcnCodepoint(options->ecn_codepoint);
25 }
26 WriteResult result =
27 QuicUdpSocketApi().WritePacket(fd_, buffer, buf_len, packet_info);
28 if (IsWriteBlockedStatus(result.status)) {
29 write_blocked_ = true;
30 }
31 return result;
32 }
33
IsWriteBlocked() const34 bool QuicDefaultPacketWriter::IsWriteBlocked() const { return write_blocked_; }
35
SetWritable()36 void QuicDefaultPacketWriter::SetWritable() { write_blocked_ = false; }
37
MessageTooBigErrorCode() const38 absl::optional<int> QuicDefaultPacketWriter::MessageTooBigErrorCode() const {
39 return EMSGSIZE;
40 }
41
GetMaxPacketSize(const QuicSocketAddress &) const42 QuicByteCount QuicDefaultPacketWriter::GetMaxPacketSize(
43 const QuicSocketAddress& /*peer_address*/) const {
44 return kMaxOutgoingPacketSize;
45 }
46
SupportsReleaseTime() const47 bool QuicDefaultPacketWriter::SupportsReleaseTime() const { return false; }
48
IsBatchMode() const49 bool QuicDefaultPacketWriter::IsBatchMode() const { return false; }
50
GetNextWriteLocation(const QuicIpAddress &,const QuicSocketAddress &)51 QuicPacketBuffer QuicDefaultPacketWriter::GetNextWriteLocation(
52 const QuicIpAddress& /*self_address*/,
53 const QuicSocketAddress& /*peer_address*/) {
54 return {nullptr, nullptr};
55 }
56
Flush()57 WriteResult QuicDefaultPacketWriter::Flush() {
58 return WriteResult(WRITE_STATUS_OK, 0);
59 }
60
set_write_blocked(bool is_blocked)61 void QuicDefaultPacketWriter::set_write_blocked(bool is_blocked) {
62 write_blocked_ = is_blocked;
63 }
64
65 } // namespace quic
66