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