1 // 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 "quiche/quic/test_tools/quic_packet_creator_peer.h"
6
7 #include "quiche/quic/core/frames/quic_frame.h"
8 #include "quiche/quic/core/quic_packet_creator.h"
9 #include "quiche/quic/core/quic_types.h"
10
11 namespace quic {
12 namespace test {
13
14 // static
SendVersionInPacket(QuicPacketCreator * creator)15 bool QuicPacketCreatorPeer::SendVersionInPacket(QuicPacketCreator* creator) {
16 return creator->IncludeVersionInHeader();
17 }
18
19 // static
SetSendVersionInPacket(QuicPacketCreator * creator,bool send_version_in_packet)20 void QuicPacketCreatorPeer::SetSendVersionInPacket(
21 QuicPacketCreator* creator, bool send_version_in_packet) {
22 ParsedQuicVersion version = creator->framer_->version();
23 if (!VersionHasIetfQuicFrames(version.transport_version) &&
24 version.handshake_protocol != PROTOCOL_TLS1_3) {
25 creator->send_version_in_packet_ = send_version_in_packet;
26 return;
27 }
28 if (!send_version_in_packet) {
29 creator->packet_.encryption_level = ENCRYPTION_FORWARD_SECURE;
30 return;
31 }
32 QUICHE_DCHECK(creator->packet_.encryption_level < ENCRYPTION_FORWARD_SECURE);
33 }
34
35 // static
SetPacketNumberLength(QuicPacketCreator * creator,QuicPacketNumberLength packet_number_length)36 void QuicPacketCreatorPeer::SetPacketNumberLength(
37 QuicPacketCreator* creator, QuicPacketNumberLength packet_number_length) {
38 creator->packet_.packet_number_length = packet_number_length;
39 }
40
41 // static
GetPacketNumberLength(QuicPacketCreator * creator)42 QuicPacketNumberLength QuicPacketCreatorPeer::GetPacketNumberLength(
43 QuicPacketCreator* creator) {
44 return creator->GetPacketNumberLength();
45 }
46
47 // static
48 quiche::QuicheVariableLengthIntegerLength
GetRetryTokenLengthLength(QuicPacketCreator * creator)49 QuicPacketCreatorPeer::GetRetryTokenLengthLength(QuicPacketCreator* creator) {
50 return creator->GetRetryTokenLengthLength();
51 }
52
53 // static
54 quiche::QuicheVariableLengthIntegerLength
GetLengthLength(QuicPacketCreator * creator)55 QuicPacketCreatorPeer::GetLengthLength(QuicPacketCreator* creator) {
56 return creator->GetLengthLength();
57 }
58
SetPacketNumber(QuicPacketCreator * creator,uint64_t s)59 void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
60 uint64_t s) {
61 QUICHE_DCHECK_NE(0u, s);
62 creator->packet_.packet_number = QuicPacketNumber(s);
63 }
64
SetPacketNumber(QuicPacketCreator * creator,QuicPacketNumber num)65 void QuicPacketCreatorPeer::SetPacketNumber(QuicPacketCreator* creator,
66 QuicPacketNumber num) {
67 creator->packet_.packet_number = num;
68 }
69
70 // static
ClearPacketNumber(QuicPacketCreator * creator)71 void QuicPacketCreatorPeer::ClearPacketNumber(QuicPacketCreator* creator) {
72 creator->packet_.packet_number.Clear();
73 }
74
75 // static
FillPacketHeader(QuicPacketCreator * creator,QuicPacketHeader * header)76 void QuicPacketCreatorPeer::FillPacketHeader(QuicPacketCreator* creator,
77 QuicPacketHeader* header) {
78 creator->FillPacketHeader(header);
79 }
80
81 // static
CreateStreamFrame(QuicPacketCreator * creator,QuicStreamId id,size_t data_length,QuicStreamOffset offset,bool fin,QuicFrame * frame)82 void QuicPacketCreatorPeer::CreateStreamFrame(QuicPacketCreator* creator,
83 QuicStreamId id,
84 size_t data_length,
85 QuicStreamOffset offset, bool fin,
86 QuicFrame* frame) {
87 creator->CreateStreamFrame(id, data_length, offset, fin, frame);
88 }
89
90 // static
CreateCryptoFrame(QuicPacketCreator * creator,EncryptionLevel level,size_t write_length,QuicStreamOffset offset,QuicFrame * frame)91 bool QuicPacketCreatorPeer::CreateCryptoFrame(QuicPacketCreator* creator,
92 EncryptionLevel level,
93 size_t write_length,
94 QuicStreamOffset offset,
95 QuicFrame* frame) {
96 return creator->CreateCryptoFrame(level, write_length, offset, frame);
97 }
98
99 // static
SerializeAllFrames(QuicPacketCreator * creator,const QuicFrames & frames,char * buffer,size_t buffer_len)100 SerializedPacket QuicPacketCreatorPeer::SerializeAllFrames(
101 QuicPacketCreator* creator, const QuicFrames& frames, char* buffer,
102 size_t buffer_len) {
103 QUICHE_DCHECK(creator->queued_frames_.empty());
104 QUICHE_DCHECK(!frames.empty());
105 for (const QuicFrame& frame : frames) {
106 bool success = creator->AddFrame(frame, NOT_RETRANSMISSION);
107 QUICHE_DCHECK(success);
108 }
109 const bool success =
110 creator->SerializePacket(QuicOwnedPacketBuffer(buffer, nullptr),
111 buffer_len, /*allow_padding=*/true);
112 QUICHE_DCHECK(success);
113 SerializedPacket packet = std::move(creator->packet_);
114 // The caller takes ownership of the QuicEncryptedPacket.
115 creator->packet_.encrypted_buffer = nullptr;
116 return packet;
117 }
118
119 // static
120 std::unique_ptr<SerializedPacket>
SerializeConnectivityProbingPacket(QuicPacketCreator * creator)121 QuicPacketCreatorPeer::SerializeConnectivityProbingPacket(
122 QuicPacketCreator* creator) {
123 return creator->SerializeConnectivityProbingPacket();
124 }
125
126 // static
127 std::unique_ptr<SerializedPacket>
SerializePathChallengeConnectivityProbingPacket(QuicPacketCreator * creator,const QuicPathFrameBuffer & payload)128 QuicPacketCreatorPeer::SerializePathChallengeConnectivityProbingPacket(
129 QuicPacketCreator* creator, const QuicPathFrameBuffer& payload) {
130 return creator->SerializePathChallengeConnectivityProbingPacket(payload);
131 }
132
133 // static
GetEncryptionLevel(QuicPacketCreator * creator)134 EncryptionLevel QuicPacketCreatorPeer::GetEncryptionLevel(
135 QuicPacketCreator* creator) {
136 return creator->packet_.encryption_level;
137 }
138
139 // static
framer(QuicPacketCreator * creator)140 QuicFramer* QuicPacketCreatorPeer::framer(QuicPacketCreator* creator) {
141 return creator->framer_;
142 }
143
144 // static
GetRetryToken(QuicPacketCreator * creator)145 std::string QuicPacketCreatorPeer::GetRetryToken(QuicPacketCreator* creator) {
146 return creator->retry_token_;
147 }
148
149 // static
QueuedFrames(QuicPacketCreator * creator)150 QuicFrames& QuicPacketCreatorPeer::QueuedFrames(QuicPacketCreator* creator) {
151 return creator->queued_frames_;
152 }
153
154 // static
SetRandom(QuicPacketCreator * creator,QuicRandom * random)155 void QuicPacketCreatorPeer::SetRandom(QuicPacketCreator* creator,
156 QuicRandom* random) {
157 creator->random_ = random;
158 }
159
160 } // namespace test
161 } // namespace quic
162