| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "quic/core/quic_default_packet_writer.h" |
| |
| #include "quic/core/quic_udp_socket.h" |
| |
| namespace quic { |
| |
| QuicDefaultPacketWriter::QuicDefaultPacketWriter(int fd) |
| : fd_(fd), write_blocked_(false) {} |
| |
| QuicDefaultPacketWriter::~QuicDefaultPacketWriter() = default; |
| |
| WriteResult QuicDefaultPacketWriter::WritePacket( |
| const char* buffer, |
| size_t buf_len, |
| const QuicIpAddress& self_address, |
| const QuicSocketAddress& peer_address, |
| PerPacketOptions* options) { |
| QUICHE_DCHECK(!write_blocked_); |
| QUICHE_DCHECK(nullptr == options) |
| << "QuicDefaultPacketWriter does not accept any options."; |
| QuicUdpPacketInfo packet_info; |
| packet_info.SetPeerAddress(peer_address); |
| packet_info.SetSelfIp(self_address); |
| WriteResult result = |
| QuicUdpSocketApi().WritePacket(fd_, buffer, buf_len, packet_info); |
| if (IsWriteBlockedStatus(result.status)) { |
| write_blocked_ = true; |
| } |
| return result; |
| } |
| |
| bool QuicDefaultPacketWriter::IsWriteBlocked() const { |
| return write_blocked_; |
| } |
| |
| void QuicDefaultPacketWriter::SetWritable() { |
| write_blocked_ = false; |
| } |
| |
| QuicByteCount QuicDefaultPacketWriter::GetMaxPacketSize( |
| const QuicSocketAddress& /*peer_address*/) const { |
| return kMaxOutgoingPacketSize; |
| } |
| |
| bool QuicDefaultPacketWriter::SupportsReleaseTime() const { |
| return false; |
| } |
| |
| bool QuicDefaultPacketWriter::IsBatchMode() const { |
| return false; |
| } |
| |
| QuicPacketBuffer QuicDefaultPacketWriter::GetNextWriteLocation( |
| const QuicIpAddress& /*self_address*/, |
| const QuicSocketAddress& /*peer_address*/) { |
| return {nullptr, nullptr}; |
| } |
| |
| WriteResult QuicDefaultPacketWriter::Flush() { |
| return WriteResult(WRITE_STATUS_OK, 0); |
| } |
| |
| void QuicDefaultPacketWriter::set_write_blocked(bool is_blocked) { |
| write_blocked_ = is_blocked; |
| } |
| |
| } // namespace quic |