blob: 1cb8edfc4cc70241831307030180fd16e6ec2571 [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_framer_peer.h"
6
7#include "net/third_party/quiche/src/quic/core/quic_framer.h"
8#include "net/third_party/quiche/src/quic/core/quic_packets.h"
9#include "net/third_party/quiche/src/quic/platform/api/quic_map_util.h"
10
11namespace quic {
12namespace test {
13
14// static
15uint64_t QuicFramerPeer::CalculatePacketNumberFromWire(
16 QuicFramer* framer,
17 QuicPacketNumberLength packet_number_length,
18 QuicPacketNumber last_packet_number,
19 uint64_t packet_number) {
20 return framer->CalculatePacketNumberFromWire(
21 packet_number_length, last_packet_number, packet_number);
22}
23
24// static
dschinazi7b9278c2019-05-20 07:36:21 -070025void QuicFramerPeer::SetLastSerializedServerConnectionId(
QUICHE teama6ef0a62019-03-07 20:34:33 -050026 QuicFramer* framer,
dschinazi7b9278c2019-05-20 07:36:21 -070027 QuicConnectionId server_connection_id) {
28 framer->last_serialized_server_connection_id_ = server_connection_id;
QUICHE teama6ef0a62019-03-07 20:34:33 -050029}
30
31// static
dschinazi346b7ce2019-06-05 01:38:18 -070032void QuicFramerPeer::SetLastSerializedClientConnectionId(
33 QuicFramer* framer,
34 QuicConnectionId client_connection_id) {
35 framer->last_serialized_client_connection_id_ = client_connection_id;
36}
37
38// static
nharperc6b99512019-09-19 11:13:48 -070039void QuicFramerPeer::SetLastWrittenPacketNumberLength(
40 QuicFramer* framer,
41 size_t packet_number_length) {
42 framer->last_written_packet_number_length_ = packet_number_length;
43}
44
45// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050046void QuicFramerPeer::SetLargestPacketNumber(QuicFramer* framer,
47 QuicPacketNumber packet_number) {
48 framer->largest_packet_number_ = packet_number;
49}
50
51// static
52void QuicFramerPeer::SetPerspective(QuicFramer* framer,
53 Perspective perspective) {
54 framer->perspective_ = perspective;
55 framer->infer_packet_header_type_from_version_ =
56 perspective == Perspective::IS_CLIENT;
57}
58
59// static
60bool QuicFramerPeer::ProcessIetfStreamFrame(QuicFramer* framer,
61 QuicDataReader* reader,
62 uint8_t frame_type,
63 QuicStreamFrame* frame) {
64 return framer->ProcessIetfStreamFrame(reader, frame_type, frame);
65}
66
67// static
68bool QuicFramerPeer::AppendIetfStreamFrame(QuicFramer* framer,
69 const QuicStreamFrame& frame,
70 bool last_frame_in_packet,
71 QuicDataWriter* writer) {
72 return framer->AppendIetfStreamFrame(frame, last_frame_in_packet, writer);
73}
74
75// static
QUICHE teama6ef0a62019-03-07 20:34:33 -050076bool QuicFramerPeer::AppendCryptoFrame(QuicFramer* framer,
77 const QuicCryptoFrame& frame,
78 QuicDataWriter* writer) {
79 return framer->AppendCryptoFrame(frame, writer);
80}
81
82// static
83bool QuicFramerPeer::ProcessIetfAckFrame(QuicFramer* framer,
84 QuicDataReader* reader,
85 uint64_t frame_type,
86 QuicAckFrame* ack_frame) {
87 return framer->ProcessIetfAckFrame(reader, frame_type, ack_frame);
88}
89
90// static
91bool QuicFramerPeer::AppendIetfAckFrameAndTypeByte(QuicFramer* framer,
92 const QuicAckFrame& frame,
93 QuicDataWriter* writer) {
94 return framer->AppendIetfAckFrameAndTypeByte(frame, writer);
95}
96// static
97size_t QuicFramerPeer::GetIetfAckFrameSize(QuicFramer* framer,
98 const QuicAckFrame& frame) {
99 return framer->GetIetfAckFrameSize(frame);
100}
101
102// static
103bool QuicFramerPeer::AppendIetfConnectionCloseFrame(
104 QuicFramer* framer,
105 const QuicConnectionCloseFrame& frame,
106 QuicDataWriter* writer) {
107 return framer->AppendIetfConnectionCloseFrame(frame, writer);
108}
109
110// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500111bool QuicFramerPeer::ProcessIetfConnectionCloseFrame(
112 QuicFramer* framer,
113 QuicDataReader* reader,
fkastenholze9d71a82019-04-09 05:12:13 -0700114 QuicConnectionCloseType type,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500115 QuicConnectionCloseFrame* frame) {
fkastenholze9d71a82019-04-09 05:12:13 -0700116 return framer->ProcessIetfConnectionCloseFrame(reader, type, frame);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500117}
118
119// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500120bool QuicFramerPeer::ProcessPathChallengeFrame(QuicFramer* framer,
121 QuicDataReader* reader,
122 QuicPathChallengeFrame* frame) {
123 return framer->ProcessPathChallengeFrame(reader, frame);
124}
125
126// static
127bool QuicFramerPeer::ProcessPathResponseFrame(QuicFramer* framer,
128 QuicDataReader* reader,
129 QuicPathResponseFrame* frame) {
130 return framer->ProcessPathResponseFrame(reader, frame);
131}
132
133// static
134bool QuicFramerPeer::AppendPathChallengeFrame(
135 QuicFramer* framer,
136 const QuicPathChallengeFrame& frame,
137 QuicDataWriter* writer) {
138 return framer->AppendPathChallengeFrame(frame, writer);
139}
140
141// static
142bool QuicFramerPeer::AppendPathResponseFrame(QuicFramer* framer,
143 const QuicPathResponseFrame& frame,
144 QuicDataWriter* writer) {
145 return framer->AppendPathResponseFrame(frame, writer);
146}
147
148// static
149bool QuicFramerPeer::AppendIetfResetStreamFrame(QuicFramer* framer,
150 const QuicRstStreamFrame& frame,
151 QuicDataWriter* writer) {
152 return framer->AppendIetfResetStreamFrame(frame, writer);
153}
154
155// static
156bool QuicFramerPeer::ProcessIetfResetStreamFrame(QuicFramer* framer,
157 QuicDataReader* reader,
158 QuicRstStreamFrame* frame) {
159 return framer->ProcessIetfResetStreamFrame(reader, frame);
160}
161
162// static
163bool QuicFramerPeer::ProcessStopSendingFrame(
164 QuicFramer* framer,
165 QuicDataReader* reader,
166 QuicStopSendingFrame* stop_sending_frame) {
167 return framer->ProcessStopSendingFrame(reader, stop_sending_frame);
168}
169
170// static
171bool QuicFramerPeer::AppendStopSendingFrame(
172 QuicFramer* framer,
173 const QuicStopSendingFrame& stop_sending_frame,
174 QuicDataWriter* writer) {
175 return framer->AppendStopSendingFrame(stop_sending_frame, writer);
176}
177
178// static
179bool QuicFramerPeer::AppendMaxDataFrame(QuicFramer* framer,
180 const QuicWindowUpdateFrame& frame,
181 QuicDataWriter* writer) {
182 return framer->AppendMaxDataFrame(frame, writer);
183}
184
185// static
186bool QuicFramerPeer::AppendMaxStreamDataFrame(
187 QuicFramer* framer,
188 const QuicWindowUpdateFrame& frame,
189 QuicDataWriter* writer) {
190 return framer->AppendMaxStreamDataFrame(frame, writer);
191}
192
193// static
194bool QuicFramerPeer::ProcessMaxDataFrame(QuicFramer* framer,
195 QuicDataReader* reader,
196 QuicWindowUpdateFrame* frame) {
197 return framer->ProcessMaxDataFrame(reader, frame);
198}
199
200// static
201bool QuicFramerPeer::ProcessMaxStreamDataFrame(QuicFramer* framer,
202 QuicDataReader* reader,
203 QuicWindowUpdateFrame* frame) {
204 return framer->ProcessMaxStreamDataFrame(reader, frame);
205}
206
207// static
208bool QuicFramerPeer::AppendMaxStreamsFrame(QuicFramer* framer,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700209 const QuicMaxStreamsFrame& frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500210 QuicDataWriter* writer) {
211 return framer->AppendMaxStreamsFrame(frame, writer);
212}
213
214// static
215bool QuicFramerPeer::ProcessMaxStreamsFrame(QuicFramer* framer,
216 QuicDataReader* reader,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700217 QuicMaxStreamsFrame* frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500218 uint64_t frame_type) {
219 return framer->ProcessMaxStreamsFrame(reader, frame, frame_type);
220}
221
222// static
223bool QuicFramerPeer::AppendIetfBlockedFrame(QuicFramer* framer,
224 const QuicBlockedFrame& frame,
225 QuicDataWriter* writer) {
226 return framer->AppendIetfBlockedFrame(frame, writer);
227}
228
229// static
230bool QuicFramerPeer::ProcessIetfBlockedFrame(QuicFramer* framer,
231 QuicDataReader* reader,
232 QuicBlockedFrame* frame) {
233 return framer->ProcessIetfBlockedFrame(reader, frame);
234}
235
236// static
237bool QuicFramerPeer::AppendStreamBlockedFrame(QuicFramer* framer,
238 const QuicBlockedFrame& frame,
239 QuicDataWriter* writer) {
240 return framer->AppendStreamBlockedFrame(frame, writer);
241}
242
243// static
244bool QuicFramerPeer::ProcessStreamBlockedFrame(QuicFramer* framer,
245 QuicDataReader* reader,
246 QuicBlockedFrame* frame) {
247 return framer->ProcessStreamBlockedFrame(reader, frame);
248}
249
250// static
251bool QuicFramerPeer::AppendStreamsBlockedFrame(
252 QuicFramer* framer,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700253 const QuicStreamsBlockedFrame& frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500254 QuicDataWriter* writer) {
255 return framer->AppendStreamsBlockedFrame(frame, writer);
256}
257
258// static
259bool QuicFramerPeer::ProcessStreamsBlockedFrame(QuicFramer* framer,
260 QuicDataReader* reader,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700261 QuicStreamsBlockedFrame* frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500262 uint64_t frame_type) {
263 return framer->ProcessStreamsBlockedFrame(reader, frame, frame_type);
264}
265
266// static
267bool QuicFramerPeer::AppendNewConnectionIdFrame(
268 QuicFramer* framer,
269 const QuicNewConnectionIdFrame& frame,
270 QuicDataWriter* writer) {
271 return framer->AppendNewConnectionIdFrame(frame, writer);
272}
273
274// static
275bool QuicFramerPeer::ProcessNewConnectionIdFrame(
276 QuicFramer* framer,
277 QuicDataReader* reader,
278 QuicNewConnectionIdFrame* frame) {
279 return framer->ProcessNewConnectionIdFrame(reader, frame);
280}
281
282// static
283bool QuicFramerPeer::AppendRetireConnectionIdFrame(
284 QuicFramer* framer,
285 const QuicRetireConnectionIdFrame& frame,
286 QuicDataWriter* writer) {
287 return framer->AppendRetireConnectionIdFrame(frame, writer);
288}
289
290// static
291bool QuicFramerPeer::ProcessRetireConnectionIdFrame(
292 QuicFramer* framer,
293 QuicDataReader* reader,
294 QuicRetireConnectionIdFrame* frame) {
295 return framer->ProcessRetireConnectionIdFrame(reader, frame);
296}
297
298// static
299void QuicFramerPeer::SwapCrypters(QuicFramer* framer1, QuicFramer* framer2) {
QUICHE team6987b4a2019-03-15 16:23:04 -0700300 for (int i = ENCRYPTION_INITIAL; i < NUM_ENCRYPTION_LEVELS; i++) {
QUICHE teama6ef0a62019-03-07 20:34:33 -0500301 framer1->encrypter_[i].swap(framer2->encrypter_[i]);
QUICHE team76086e42019-03-25 15:12:29 -0700302 framer1->decrypter_[i].swap(framer2->decrypter_[i]);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500303 }
QUICHE teama6ef0a62019-03-07 20:34:33 -0500304
305 EncryptionLevel framer2_level = framer2->decrypter_level_;
306 framer2->decrypter_level_ = framer1->decrypter_level_;
307 framer1->decrypter_level_ = framer2_level;
308 framer2_level = framer2->alternative_decrypter_level_;
309 framer2->alternative_decrypter_level_ = framer1->alternative_decrypter_level_;
310 framer1->alternative_decrypter_level_ = framer2_level;
311
312 const bool framer2_latch = framer2->alternative_decrypter_latch_;
313 framer2->alternative_decrypter_latch_ = framer1->alternative_decrypter_latch_;
314 framer1->alternative_decrypter_latch_ = framer2_latch;
315}
316
317// static
318QuicEncrypter* QuicFramerPeer::GetEncrypter(QuicFramer* framer,
319 EncryptionLevel level) {
320 return framer->encrypter_[level].get();
321}
322
323// static
QUICHE teamfbfd3622019-03-26 10:59:32 -0700324QuicDecrypter* QuicFramerPeer::GetDecrypter(QuicFramer* framer,
325 EncryptionLevel level) {
326 return framer->decrypter_[level].get();
327}
328
329// static
QUICHE teama6ef0a62019-03-07 20:34:33 -0500330size_t QuicFramerPeer::ComputeFrameLength(
331 QuicFramer* framer,
332 const QuicFrame& frame,
333 bool last_frame_in_packet,
334 QuicPacketNumberLength packet_number_length) {
335 return framer->ComputeFrameLength(frame, last_frame_in_packet,
336 packet_number_length);
337}
338
339// static
340void QuicFramerPeer::SetFirstSendingPacketNumber(QuicFramer* framer,
341 uint64_t packet_number) {
342 *const_cast<QuicPacketNumber*>(&framer->first_sending_packet_number_) =
343 QuicPacketNumber(packet_number);
344}
345
346// static
dschinazi8ff74822019-05-28 16:37:20 -0700347void QuicFramerPeer::SetExpectedServerConnectionIDLength(
QUICHE teama6ef0a62019-03-07 20:34:33 -0500348 QuicFramer* framer,
dschinazi8ff74822019-05-28 16:37:20 -0700349 uint8_t expected_server_connection_id_length) {
350 *const_cast<uint8_t*>(&framer->expected_server_connection_id_length_) =
351 expected_server_connection_id_length;
QUICHE teama6ef0a62019-03-07 20:34:33 -0500352}
353
QUICHE team10b22a12019-03-21 15:31:42 -0700354// static
355QuicPacketNumber QuicFramerPeer::GetLargestDecryptedPacketNumber(
356 QuicFramer* framer,
357 PacketNumberSpace packet_number_space) {
358 return framer->largest_decrypted_packet_numbers_[packet_number_space];
359}
360
dschinazi334f0232019-05-29 16:08:53 -0700361// static
362bool QuicFramerPeer::ProcessAndValidateIetfConnectionIdLength(
363 QuicDataReader* reader,
364 ParsedQuicVersion version,
365 Perspective perspective,
366 bool should_update_expected_server_connection_id_length,
367 uint8_t* expected_server_connection_id_length,
368 uint8_t* destination_connection_id_length,
369 uint8_t* source_connection_id_length,
370 std::string* detailed_error) {
371 return QuicFramer::ProcessAndValidateIetfConnectionIdLength(
372 reader, version, perspective,
373 should_update_expected_server_connection_id_length,
374 expected_server_connection_id_length, destination_connection_id_length,
375 source_connection_id_length, detailed_error);
376}
377
QUICHE teama6ef0a62019-03-07 20:34:33 -0500378} // namespace test
379} // namespace quic