blob: 20a38346bf56d38533e420aebcf6b7dab261525f [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 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 "net/third_party/quiche/src/quic/test_tools/quic_packet_creator_peer.h"
6
renjietangdbe98342019-10-18 11:00:57 -07007#include "net/third_party/quiche/src/quic/core/frames/quic_frame.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -05008#include "net/third_party/quiche/src/quic/core/quic_packet_creator.h"
9#include "net/third_party/quiche/src/quic/core/quic_types.h"
10
11namespace quic {
12namespace test {
13
14// static
15bool QuicPacketCreatorPeer::SendVersionInPacket(QuicPacketCreator* creator) {
16 return creator->IncludeVersionInHeader();
17}
18
19// static
20void QuicPacketCreatorPeer::SetSendVersionInPacket(
21 QuicPacketCreator* creator,
22 bool send_version_in_packet) {
nharper107ba5f2019-07-02 21:33:39 -070023 ParsedQuicVersion version = creator->framer_->version();
24 if (!VersionHasIetfQuicFrames(version.transport_version) &&
25 version.handshake_protocol != PROTOCOL_TLS1_3) {
QUICHE teama6ef0a62019-03-07 20:34:33 -050026 creator->send_version_in_packet_ = send_version_in_packet;
27 return;
28 }
29 if (!send_version_in_packet) {
30 creator->packet_.encryption_level = ENCRYPTION_FORWARD_SECURE;
31 return;
32 }
33 DCHECK(creator->packet_.encryption_level < ENCRYPTION_FORWARD_SECURE);
34}
35
36// static
37void QuicPacketCreatorPeer::SetPacketNumberLength(
38 QuicPacketCreator* creator,
39 QuicPacketNumberLength packet_number_length) {
40 creator->packet_.packet_number_length = packet_number_length;
41}
42
43// static
44QuicPacketNumberLength QuicPacketCreatorPeer::GetPacketNumberLength(
45 QuicPacketCreator* creator) {
46 return creator->GetPacketNumberLength();
47}
48
49// static
50QuicVariableLengthIntegerLength
51QuicPacketCreatorPeer::GetRetryTokenLengthLength(QuicPacketCreator* creator) {
52 return creator->GetRetryTokenLengthLength();
53}
54
55// static
56QuicVariableLengthIntegerLength QuicPacketCreatorPeer::GetLengthLength(
57 QuicPacketCreator* creator) {
58 return creator->GetLengthLength();
59}
60
renjietangdbe98342019-10-18 11:00:57 -070061// static
62const QuicFrames& QuicPacketCreatorPeer::GetQueuedFrames(
63 QuicPacketCreator* creator) {
64 return creator->queued_frames_;
65}
66
QUICHE teama6ef0a62019-03-07 20:34:33 -050067void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
68 uint64_t s) {
69 DCHECK_NE(0u, s);
70 creator->packet_.packet_number = QuicPacketNumber(s);
71}
72
73// static
74void QuicPacketCreatorPeer::ClearPacketNumber(QuicPacketCreator* creator) {
75 creator->packet_.packet_number.Clear();
76}
77
78// static
79void QuicPacketCreatorPeer::FillPacketHeader(QuicPacketCreator* creator,
80 QuicPacketHeader* header) {
81 creator->FillPacketHeader(header);
82}
83
84// static
85void QuicPacketCreatorPeer::CreateStreamFrame(QuicPacketCreator* creator,
86 QuicStreamId id,
QUICHE teamf08778a2019-03-14 08:10:26 -070087 size_t data_length,
QUICHE teama6ef0a62019-03-07 20:34:33 -050088 QuicStreamOffset offset,
89 bool fin,
90 QuicFrame* frame) {
QUICHE teamf08778a2019-03-14 08:10:26 -070091 creator->CreateStreamFrame(id, data_length, offset, fin, frame);
QUICHE teama6ef0a62019-03-07 20:34:33 -050092}
93
94// static
QUICHE teamdc41bf12019-03-20 12:58:42 -070095bool QuicPacketCreatorPeer::CreateCryptoFrame(QuicPacketCreator* creator,
96 EncryptionLevel level,
97 size_t write_length,
98 QuicStreamOffset offset,
99 QuicFrame* frame) {
100 return creator->CreateCryptoFrame(level, write_length, offset, frame);
101}
102
103// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500104SerializedPacket QuicPacketCreatorPeer::SerializeAllFrames(
105 QuicPacketCreator* creator,
106 const QuicFrames& frames,
107 char* buffer,
108 size_t buffer_len) {
109 DCHECK(creator->queued_frames_.empty());
110 DCHECK(!frames.empty());
111 for (const QuicFrame& frame : frames) {
112 bool success = creator->AddFrame(frame, false, NOT_RETRANSMISSION);
113 DCHECK(success);
114 }
115 creator->SerializePacket(buffer, buffer_len);
116 SerializedPacket packet = creator->packet_;
117 // The caller takes ownership of the QuicEncryptedPacket.
118 creator->packet_.encrypted_buffer = nullptr;
119 DCHECK(packet.retransmittable_frames.empty());
120 return packet;
121}
122
123// static
124OwningSerializedPacketPointer
125QuicPacketCreatorPeer::SerializeConnectivityProbingPacket(
126 QuicPacketCreator* creator) {
127 return creator->SerializeConnectivityProbingPacket();
128}
129
130// static
131OwningSerializedPacketPointer
132QuicPacketCreatorPeer::SerializePathChallengeConnectivityProbingPacket(
133 QuicPacketCreator* creator,
134 QuicPathFrameBuffer* payload) {
135 return creator->SerializePathChallengeConnectivityProbingPacket(payload);
136}
137
138// static
139EncryptionLevel QuicPacketCreatorPeer::GetEncryptionLevel(
140 QuicPacketCreator* creator) {
141 return creator->packet_.encryption_level;
142}
143
144// static
145QuicFramer* QuicPacketCreatorPeer::framer(QuicPacketCreator* creator) {
146 return creator->framer_;
147}
148
QUICHE teama6ef0a62019-03-07 20:34:33 -0500149} // namespace test
150} // namespace quic