blob: 64a72a89410301fed7cd4dd2eaffd9683cfd4b92 [file] [log] [blame]
QUICHE teamc9b2cec2019-01-07 17:54:15 -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
7namespace quic {
8
QUICHE team2bfc7542019-02-26 14:36:06 -05009std::unique_ptr<PerPacketOptions> QuartcPerPacketOptions::Clone() const {
10 return QuicMakeUnique<QuartcPerPacketOptions>(*this);
11}
12
QUICHE teamc9b2cec2019-01-07 17:54:15 -050013QuartcPacketWriter::QuartcPacketWriter(QuartcPacketTransport* packet_transport,
14 QuicByteCount max_packet_size)
15 : packet_transport_(packet_transport), max_packet_size_(max_packet_size) {}
16
17WriteResult QuartcPacketWriter::WritePacket(
18 const char* buffer,
19 size_t buf_len,
20 const QuicIpAddress& self_address,
21 const QuicSocketAddress& peer_address,
22 PerPacketOptions* options) {
23 DCHECK(packet_transport_);
24
25 QuartcPacketTransport::PacketInfo info;
QUICHE team2bfc7542019-02-26 14:36:06 -050026 QuartcPerPacketOptions* quartc_options =
27 static_cast<QuartcPerPacketOptions*>(options);
28 if (quartc_options && quartc_options->connection) {
29 info.packet_number =
30 quartc_options->connection->packet_generator().packet_number();
QUICHE teamc9b2cec2019-01-07 17:54:15 -050031 }
QUICHE teamc9b2cec2019-01-07 17:54:15 -050032 int bytes_written = packet_transport_->Write(buffer, buf_len, info);
33 if (bytes_written <= 0) {
34 writable_ = false;
35 return WriteResult(WRITE_STATUS_BLOCKED, EWOULDBLOCK);
36 }
37 return WriteResult(WRITE_STATUS_OK, bytes_written);
38}
39
QUICHE teamc9b2cec2019-01-07 17:54:15 -050040bool QuartcPacketWriter::IsWriteBlocked() const {
41 return !writable_;
42}
43
44QuicByteCount QuartcPacketWriter::GetMaxPacketSize(
45 const QuicSocketAddress& peer_address) const {
46 return max_packet_size_;
47}
48
49void QuartcPacketWriter::SetWritable() {
50 writable_ = true;
51}
52
53bool QuartcPacketWriter::SupportsReleaseTime() const {
54 return false;
55}
56
57bool QuartcPacketWriter::IsBatchMode() const {
58 return false;
59}
60
61char* QuartcPacketWriter::GetNextWriteLocation(
62 const QuicIpAddress& self_address,
63 const QuicSocketAddress& peer_address) {
64 return nullptr;
65}
66
67WriteResult QuartcPacketWriter::Flush() {
68 return WriteResult(WRITE_STATUS_OK, 0);
69}
70
71void QuartcPacketWriter::SetPacketTransportDelegate(
72 QuartcPacketTransport::Delegate* delegate) {
73 packet_transport_->SetDelegate(delegate);
74}
75
76} // namespace quic