blob: 8496718fc2951e8d9e348f179ddae6e3b90002d1 [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#ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_FRAMER_PEER_H_
6#define QUICHE_QUIC_TEST_TOOLS_QUIC_FRAMER_PEER_H_
7
QUICHE teama6ef0a62019-03-07 20:34:33 -05008#include "net/third_party/quiche/src/quic/core/crypto/quic_encrypter.h"
9#include "net/third_party/quiche/src/quic/core/quic_framer.h"
10#include "net/third_party/quiche/src/quic/core/quic_packets.h"
11
12namespace quic {
13
14namespace test {
15
16class QuicFramerPeer {
17 public:
18 QuicFramerPeer() = delete;
19
20 static uint64_t CalculatePacketNumberFromWire(
21 QuicFramer* framer,
22 QuicPacketNumberLength packet_number_length,
23 QuicPacketNumber last_packet_number,
24 uint64_t packet_number);
dschinazi7b9278c2019-05-20 07:36:21 -070025 static void SetLastSerializedServerConnectionId(
26 QuicFramer* framer,
27 QuicConnectionId server_connection_id);
dschinazi346b7ce2019-06-05 01:38:18 -070028 static void SetLastSerializedClientConnectionId(
29 QuicFramer* framer,
30 QuicConnectionId client_connection_id);
QUICHE teama6ef0a62019-03-07 20:34:33 -050031 static void SetLargestPacketNumber(QuicFramer* framer,
32 QuicPacketNumber packet_number);
33 static void SetPerspective(QuicFramer* framer, Perspective perspective);
34
35 // SwapCrypters exchanges the state of the crypters of |framer1| with
36 // |framer2|.
37 static void SwapCrypters(QuicFramer* framer1, QuicFramer* framer2);
38
39 static QuicEncrypter* GetEncrypter(QuicFramer* framer, EncryptionLevel level);
QUICHE teamfbfd3622019-03-26 10:59:32 -070040 static QuicDecrypter* GetDecrypter(QuicFramer* framer, EncryptionLevel level);
QUICHE teama6ef0a62019-03-07 20:34:33 -050041
42 // IETF defined frame append/process methods.
43 static bool ProcessIetfStreamFrame(QuicFramer* framer,
44 QuicDataReader* reader,
45 uint8_t frame_type,
46 QuicStreamFrame* frame);
47 static bool AppendIetfStreamFrame(QuicFramer* framer,
48 const QuicStreamFrame& frame,
49 bool last_frame_in_packet,
50 QuicDataWriter* writer);
51 static bool ProcessCryptoFrame(QuicFramer* framer,
52 QuicDataReader* reader,
53 QuicCryptoFrame* frame);
54 static bool AppendCryptoFrame(QuicFramer* framer,
55 const QuicCryptoFrame& frame,
56 QuicDataWriter* writer);
57
58 static bool AppendIetfConnectionCloseFrame(
59 QuicFramer* framer,
60 const QuicConnectionCloseFrame& frame,
61 QuicDataWriter* writer);
QUICHE teama6ef0a62019-03-07 20:34:33 -050062 static bool ProcessIetfConnectionCloseFrame(QuicFramer* framer,
63 QuicDataReader* reader,
fkastenholze9d71a82019-04-09 05:12:13 -070064 QuicConnectionCloseType type,
QUICHE teama6ef0a62019-03-07 20:34:33 -050065 QuicConnectionCloseFrame* frame);
QUICHE teama6ef0a62019-03-07 20:34:33 -050066 static bool ProcessIetfAckFrame(QuicFramer* framer,
67 QuicDataReader* reader,
68 uint64_t frame_type,
69 QuicAckFrame* ack_frame);
70 static bool AppendIetfAckFrameAndTypeByte(QuicFramer* framer,
71 const QuicAckFrame& frame,
72 QuicDataWriter* writer);
73 static size_t GetIetfAckFrameSize(QuicFramer* framer,
74 const QuicAckFrame& frame);
75 static bool AppendIetfResetStreamFrame(QuicFramer* framer,
76 const QuicRstStreamFrame& frame,
77 QuicDataWriter* writer);
78 static bool ProcessIetfResetStreamFrame(QuicFramer* framer,
79 QuicDataReader* reader,
80 QuicRstStreamFrame* frame);
81
82 static bool ProcessPathChallengeFrame(QuicFramer* framer,
83 QuicDataReader* reader,
84 QuicPathChallengeFrame* frame);
85 static bool ProcessPathResponseFrame(QuicFramer* framer,
86 QuicDataReader* reader,
87 QuicPathResponseFrame* frame);
88
89 static bool AppendPathChallengeFrame(QuicFramer* framer,
90 const QuicPathChallengeFrame& frame,
91 QuicDataWriter* writer);
92 static bool AppendPathResponseFrame(QuicFramer* framer,
93 const QuicPathResponseFrame& frame,
94 QuicDataWriter* writer);
95
96 static bool ProcessStopSendingFrame(QuicFramer* framer,
97 QuicDataReader* reader,
98 QuicStopSendingFrame* stop_sending_frame);
99 static bool AppendStopSendingFrame(
100 QuicFramer* framer,
101 const QuicStopSendingFrame& stop_sending_frame,
102 QuicDataWriter* writer);
103
104 // Append/consume IETF-Format MAX_DATA and MAX_STREAM_DATA frames
105 static bool AppendMaxDataFrame(QuicFramer* framer,
106 const QuicWindowUpdateFrame& frame,
107 QuicDataWriter* writer);
108 static bool AppendMaxStreamDataFrame(QuicFramer* framer,
109 const QuicWindowUpdateFrame& frame,
110 QuicDataWriter* writer);
111 static bool ProcessMaxDataFrame(QuicFramer* framer,
112 QuicDataReader* reader,
113 QuicWindowUpdateFrame* frame);
114 static bool ProcessMaxStreamDataFrame(QuicFramer* framer,
115 QuicDataReader* reader,
116 QuicWindowUpdateFrame* frame);
117 static bool AppendMaxStreamsFrame(QuicFramer* framer,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700118 const QuicMaxStreamsFrame& frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500119 QuicDataWriter* writer);
120 static bool ProcessMaxStreamsFrame(QuicFramer* framer,
121 QuicDataReader* reader,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700122 QuicMaxStreamsFrame* frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500123 uint64_t frame_type);
124 static bool AppendIetfBlockedFrame(QuicFramer* framer,
125 const QuicBlockedFrame& frame,
126 QuicDataWriter* writer);
127 static bool ProcessIetfBlockedFrame(QuicFramer* framer,
128 QuicDataReader* reader,
129 QuicBlockedFrame* frame);
130
131 static bool AppendStreamBlockedFrame(QuicFramer* framer,
132 const QuicBlockedFrame& frame,
133 QuicDataWriter* writer);
134 static bool ProcessStreamBlockedFrame(QuicFramer* framer,
135 QuicDataReader* reader,
136 QuicBlockedFrame* frame);
137
138 static bool AppendStreamsBlockedFrame(QuicFramer* framer,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700139 const QuicStreamsBlockedFrame& frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500140 QuicDataWriter* writer);
141 static bool ProcessStreamsBlockedFrame(QuicFramer* framer,
142 QuicDataReader* reader,
fkastenholz3c4eabf2019-04-22 07:49:59 -0700143 QuicStreamsBlockedFrame* frame,
QUICHE teama6ef0a62019-03-07 20:34:33 -0500144 uint64_t frame_type);
145
146 static bool AppendNewConnectionIdFrame(QuicFramer* framer,
147 const QuicNewConnectionIdFrame& frame,
148 QuicDataWriter* writer);
149 static bool ProcessNewConnectionIdFrame(QuicFramer* framer,
150 QuicDataReader* reader,
151 QuicNewConnectionIdFrame* frame);
152 static bool AppendRetireConnectionIdFrame(
153 QuicFramer* framer,
154 const QuicRetireConnectionIdFrame& frame,
155 QuicDataWriter* writer);
156 static bool ProcessRetireConnectionIdFrame(
157 QuicFramer* framer,
158 QuicDataReader* reader,
159 QuicRetireConnectionIdFrame* frame);
160 static size_t ComputeFrameLength(QuicFramer* framer,
161 const QuicFrame& frame,
162 bool last_frame_in_packet,
163 QuicPacketNumberLength packet_number_length);
164 static void SetFirstSendingPacketNumber(QuicFramer* framer,
165 uint64_t packet_number);
dschinazi8ff74822019-05-28 16:37:20 -0700166 static void SetExpectedServerConnectionIDLength(
QUICHE teama6ef0a62019-03-07 20:34:33 -0500167 QuicFramer* framer,
dschinazi8ff74822019-05-28 16:37:20 -0700168 uint8_t expected_server_connection_id_length);
QUICHE team10b22a12019-03-21 15:31:42 -0700169 static QuicPacketNumber GetLargestDecryptedPacketNumber(
170 QuicFramer* framer,
171 PacketNumberSpace packet_number_space);
dschinazi334f0232019-05-29 16:08:53 -0700172
173 static bool ProcessAndValidateIetfConnectionIdLength(
174 QuicDataReader* reader,
175 ParsedQuicVersion version,
176 Perspective perspective,
177 bool should_update_expected_server_connection_id_length,
178 uint8_t* expected_server_connection_id_length,
179 uint8_t* destination_connection_id_length,
180 uint8_t* source_connection_id_length,
181 std::string* detailed_error);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500182};
183
184} // namespace test
185
186} // namespace quic
187
188#endif // QUICHE_QUIC_TEST_TOOLS_QUIC_FRAMER_PEER_H_