• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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