blob: f67cc774ea81c105d53d5597688b9f81f0aaf4c1 [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2017 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 "net/third_party/quiche/src/quic/quartc/quartc_packet_writer.h"
6
bnc463f2352019-10-10 04:49:34 -07007#include <utility>
8
QUICHE teama6ef0a62019-03-07 20:34:33 -05009namespace quic {
10
11std::unique_ptr<PerPacketOptions> QuartcPerPacketOptions::Clone() const {
vasilvv0fc587f2019-09-06 13:33:08 -070012 return std::make_unique<QuartcPerPacketOptions>(*this);
QUICHE teama6ef0a62019-03-07 20:34:33 -050013}
14
15QuartcPacketWriter::QuartcPacketWriter(QuartcPacketTransport* packet_transport,
16 QuicByteCount max_packet_size)
17 : packet_transport_(packet_transport), max_packet_size_(max_packet_size) {}
18
19WriteResult QuartcPacketWriter::WritePacket(
20 const char* buffer,
21 size_t buf_len,
dschinazi17d42422019-06-18 16:35:07 -070022 const QuicIpAddress& /*self_address*/,
23 const QuicSocketAddress& /*peer_address*/,
QUICHE teama6ef0a62019-03-07 20:34:33 -050024 PerPacketOptions* options) {
25 DCHECK(packet_transport_);
26
27 QuartcPacketTransport::PacketInfo info;
28 QuartcPerPacketOptions* quartc_options =
29 static_cast<QuartcPerPacketOptions*>(options);
30 if (quartc_options && quartc_options->connection) {
31 info.packet_number =
fayang4245c212019-11-05 13:33:46 -080032 quartc_options->connection->packet_creator().packet_number();
QUICHE teama6ef0a62019-03-07 20:34:33 -050033 }
34 int bytes_written = packet_transport_->Write(buffer, buf_len, info);
35 if (bytes_written <= 0) {
36 writable_ = false;
37 return WriteResult(WRITE_STATUS_BLOCKED, EWOULDBLOCK);
38 }
39 return WriteResult(WRITE_STATUS_OK, bytes_written);
40}
41
42bool QuartcPacketWriter::IsWriteBlocked() const {
43 return !writable_;
44}
45
46QuicByteCount QuartcPacketWriter::GetMaxPacketSize(
dschinazi17d42422019-06-18 16:35:07 -070047 const QuicSocketAddress& /*peer_address*/) const {
QUICHE teama6ef0a62019-03-07 20:34:33 -050048 return max_packet_size_;
49}
50
51void QuartcPacketWriter::SetWritable() {
52 writable_ = true;
53}
54
55bool QuartcPacketWriter::SupportsReleaseTime() const {
56 return false;
57}
58
59bool QuartcPacketWriter::IsBatchMode() const {
60 return false;
61}
62
63char* QuartcPacketWriter::GetNextWriteLocation(
dschinazi17d42422019-06-18 16:35:07 -070064 const QuicIpAddress& /*self_address*/,
65 const QuicSocketAddress& /*peer_address*/) {
QUICHE teama6ef0a62019-03-07 20:34:33 -050066 return nullptr;
67}
68
69WriteResult QuartcPacketWriter::Flush() {
70 return WriteResult(WRITE_STATUS_OK, 0);
71}
72
73void QuartcPacketWriter::SetPacketTransportDelegate(
74 QuartcPacketTransport::Delegate* delegate) {
75 packet_transport_->SetDelegate(delegate);
76}
77
78} // namespace quic