OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/quic/quic_framer.h" | 5 #include "net/quic/quic_framer.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 kPrivateFlagsSize; | 96 kPrivateFlagsSize; |
97 } | 97 } |
98 | 98 |
99 // Index into the message tag of the public reset packet. | 99 // Index into the message tag of the public reset packet. |
100 // Public resets always have full connection_ids. | 100 // Public resets always have full connection_ids. |
101 const size_t kPublicResetPacketMessageTagOffset = | 101 const size_t kPublicResetPacketMessageTagOffset = |
102 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 102 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
103 | 103 |
104 class TestEncrypter : public QuicEncrypter { | 104 class TestEncrypter : public QuicEncrypter { |
105 public: | 105 public: |
106 virtual ~TestEncrypter() {} | 106 ~TestEncrypter() override {} |
107 virtual bool SetKey(StringPiece key) override { | 107 bool SetKey(StringPiece key) override { return true; } |
108 return true; | 108 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } |
109 } | 109 bool Encrypt(StringPiece nonce, |
110 virtual bool SetNoncePrefix(StringPiece nonce_prefix) override { | 110 StringPiece associated_data, |
111 return true; | 111 StringPiece plaintext, |
112 } | 112 unsigned char* output) override { |
113 virtual bool Encrypt(StringPiece nonce, | |
114 StringPiece associated_data, | |
115 StringPiece plaintext, | |
116 unsigned char* output) override { | |
117 CHECK(false) << "Not implemented"; | 113 CHECK(false) << "Not implemented"; |
118 return false; | 114 return false; |
119 } | 115 } |
120 virtual QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number, | 116 QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number, |
121 StringPiece associated_data, | 117 StringPiece associated_data, |
122 StringPiece plaintext) override { | 118 StringPiece plaintext) override { |
123 sequence_number_ = sequence_number; | 119 sequence_number_ = sequence_number; |
124 associated_data_ = associated_data.as_string(); | 120 associated_data_ = associated_data.as_string(); |
125 plaintext_ = plaintext.as_string(); | 121 plaintext_ = plaintext.as_string(); |
126 return new QuicData(plaintext.data(), plaintext.length()); | 122 return new QuicData(plaintext.data(), plaintext.length()); |
127 } | 123 } |
128 virtual size_t GetKeySize() const override { | 124 size_t GetKeySize() const override { return 0; } |
129 return 0; | 125 size_t GetNoncePrefixSize() const override { return 0; } |
130 } | 126 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { |
131 virtual size_t GetNoncePrefixSize() const override { | |
132 return 0; | |
133 } | |
134 virtual size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { | |
135 return ciphertext_size; | 127 return ciphertext_size; |
136 } | 128 } |
137 virtual size_t GetCiphertextSize(size_t plaintext_size) const override { | 129 size_t GetCiphertextSize(size_t plaintext_size) const override { |
138 return plaintext_size; | 130 return plaintext_size; |
139 } | 131 } |
140 virtual StringPiece GetKey() const override { | 132 StringPiece GetKey() const override { return StringPiece(); } |
141 return StringPiece(); | 133 StringPiece GetNoncePrefix() const override { return StringPiece(); } |
142 } | |
143 virtual StringPiece GetNoncePrefix() const override { | |
144 return StringPiece(); | |
145 } | |
146 QuicPacketSequenceNumber sequence_number_; | 134 QuicPacketSequenceNumber sequence_number_; |
147 string associated_data_; | 135 string associated_data_; |
148 string plaintext_; | 136 string plaintext_; |
149 }; | 137 }; |
150 | 138 |
151 class TestDecrypter : public QuicDecrypter { | 139 class TestDecrypter : public QuicDecrypter { |
152 public: | 140 public: |
153 virtual ~TestDecrypter() {} | 141 ~TestDecrypter() override {} |
154 virtual bool SetKey(StringPiece key) override { | 142 bool SetKey(StringPiece key) override { return true; } |
155 return true; | 143 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } |
156 } | 144 bool Decrypt(StringPiece nonce, |
157 virtual bool SetNoncePrefix(StringPiece nonce_prefix) override { | 145 StringPiece associated_data, |
158 return true; | 146 StringPiece ciphertext, |
159 } | 147 unsigned char* output, |
160 virtual bool Decrypt(StringPiece nonce, | 148 size_t* output_length) override { |
161 StringPiece associated_data, | |
162 StringPiece ciphertext, | |
163 unsigned char* output, | |
164 size_t* output_length) override { | |
165 CHECK(false) << "Not implemented"; | 149 CHECK(false) << "Not implemented"; |
166 return false; | 150 return false; |
167 } | 151 } |
168 virtual QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, | 152 QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, |
169 StringPiece associated_data, | 153 StringPiece associated_data, |
170 StringPiece ciphertext) override { | 154 StringPiece ciphertext) override { |
171 sequence_number_ = sequence_number; | 155 sequence_number_ = sequence_number; |
172 associated_data_ = associated_data.as_string(); | 156 associated_data_ = associated_data.as_string(); |
173 ciphertext_ = ciphertext.as_string(); | 157 ciphertext_ = ciphertext.as_string(); |
174 return new QuicData(ciphertext.data(), ciphertext.length()); | 158 return new QuicData(ciphertext.data(), ciphertext.length()); |
175 } | 159 } |
176 virtual StringPiece GetKey() const override { | 160 StringPiece GetKey() const override { return StringPiece(); } |
177 return StringPiece(); | 161 StringPiece GetNoncePrefix() const override { return StringPiece(); } |
178 } | |
179 virtual StringPiece GetNoncePrefix() const override { | |
180 return StringPiece(); | |
181 } | |
182 QuicPacketSequenceNumber sequence_number_; | 162 QuicPacketSequenceNumber sequence_number_; |
183 string associated_data_; | 163 string associated_data_; |
184 string ciphertext_; | 164 string ciphertext_; |
185 }; | 165 }; |
186 | 166 |
187 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { | 167 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { |
188 public: | 168 public: |
189 TestQuicVisitor() | 169 TestQuicVisitor() |
190 : error_count_(0), | 170 : error_count_(0), |
191 version_mismatch_(0), | 171 version_mismatch_(0), |
192 packet_count_(0), | 172 packet_count_(0), |
193 frame_count_(0), | 173 frame_count_(0), |
194 fec_count_(0), | 174 fec_count_(0), |
195 complete_packets_(0), | 175 complete_packets_(0), |
196 revived_packets_(0), | 176 revived_packets_(0), |
197 accept_packet_(true), | 177 accept_packet_(true), |
198 accept_public_header_(true) { | 178 accept_public_header_(true) { |
199 } | 179 } |
200 | 180 |
201 virtual ~TestQuicVisitor() { | 181 ~TestQuicVisitor() override { |
202 STLDeleteElements(&stream_frames_); | 182 STLDeleteElements(&stream_frames_); |
203 STLDeleteElements(&ack_frames_); | 183 STLDeleteElements(&ack_frames_); |
204 STLDeleteElements(&congestion_feedback_frames_); | 184 STLDeleteElements(&congestion_feedback_frames_); |
205 STLDeleteElements(&stop_waiting_frames_); | 185 STLDeleteElements(&stop_waiting_frames_); |
206 STLDeleteElements(&ping_frames_); | 186 STLDeleteElements(&ping_frames_); |
207 STLDeleteElements(&fec_data_); | 187 STLDeleteElements(&fec_data_); |
208 } | 188 } |
209 | 189 |
210 virtual void OnError(QuicFramer* f) override { | 190 void OnError(QuicFramer* f) override { |
211 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) | 191 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) |
212 << " (" << f->error() << ")"; | 192 << " (" << f->error() << ")"; |
213 ++error_count_; | 193 ++error_count_; |
214 } | 194 } |
215 | 195 |
216 virtual void OnPacket() override {} | 196 void OnPacket() override {} |
217 | 197 |
218 virtual void OnPublicResetPacket( | 198 void OnPublicResetPacket(const QuicPublicResetPacket& packet) override { |
219 const QuicPublicResetPacket& packet) override { | |
220 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); | 199 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); |
221 } | 200 } |
222 | 201 |
223 virtual void OnVersionNegotiationPacket( | 202 void OnVersionNegotiationPacket( |
224 const QuicVersionNegotiationPacket& packet) override { | 203 const QuicVersionNegotiationPacket& packet) override { |
225 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 204 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
226 } | 205 } |
227 | 206 |
228 virtual void OnRevivedPacket() override { | 207 void OnRevivedPacket() override { ++revived_packets_; } |
229 ++revived_packets_; | |
230 } | |
231 | 208 |
232 virtual bool OnProtocolVersionMismatch(QuicVersion version) override { | 209 bool OnProtocolVersionMismatch(QuicVersion version) override { |
233 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; | 210 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; |
234 ++version_mismatch_; | 211 ++version_mismatch_; |
235 return true; | 212 return true; |
236 } | 213 } |
237 | 214 |
238 virtual bool OnUnauthenticatedPublicHeader( | 215 bool OnUnauthenticatedPublicHeader( |
239 const QuicPacketPublicHeader& header) override { | 216 const QuicPacketPublicHeader& header) override { |
240 public_header_.reset(new QuicPacketPublicHeader(header)); | 217 public_header_.reset(new QuicPacketPublicHeader(header)); |
241 return accept_public_header_; | 218 return accept_public_header_; |
242 } | 219 } |
243 | 220 |
244 virtual bool OnUnauthenticatedHeader( | 221 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { |
245 const QuicPacketHeader& header) override { | |
246 return true; | 222 return true; |
247 } | 223 } |
248 | 224 |
249 virtual void OnDecryptedPacket(EncryptionLevel level) override {} | 225 void OnDecryptedPacket(EncryptionLevel level) override {} |
250 | 226 |
251 virtual bool OnPacketHeader(const QuicPacketHeader& header) override { | 227 bool OnPacketHeader(const QuicPacketHeader& header) override { |
252 ++packet_count_; | 228 ++packet_count_; |
253 header_.reset(new QuicPacketHeader(header)); | 229 header_.reset(new QuicPacketHeader(header)); |
254 return accept_packet_; | 230 return accept_packet_; |
255 } | 231 } |
256 | 232 |
257 virtual bool OnStreamFrame(const QuicStreamFrame& frame) override { | 233 bool OnStreamFrame(const QuicStreamFrame& frame) override { |
258 ++frame_count_; | 234 ++frame_count_; |
259 stream_frames_.push_back(new QuicStreamFrame(frame)); | 235 stream_frames_.push_back(new QuicStreamFrame(frame)); |
260 return true; | 236 return true; |
261 } | 237 } |
262 | 238 |
263 virtual void OnFecProtectedPayload(StringPiece payload) override { | 239 void OnFecProtectedPayload(StringPiece payload) override { |
264 fec_protected_payload_ = payload.as_string(); | 240 fec_protected_payload_ = payload.as_string(); |
265 } | 241 } |
266 | 242 |
267 virtual bool OnAckFrame(const QuicAckFrame& frame) override { | 243 bool OnAckFrame(const QuicAckFrame& frame) override { |
268 ++frame_count_; | 244 ++frame_count_; |
269 ack_frames_.push_back(new QuicAckFrame(frame)); | 245 ack_frames_.push_back(new QuicAckFrame(frame)); |
270 return true; | 246 return true; |
271 } | 247 } |
272 | 248 |
273 virtual bool OnCongestionFeedbackFrame( | 249 bool OnCongestionFeedbackFrame( |
274 const QuicCongestionFeedbackFrame& frame) override { | 250 const QuicCongestionFeedbackFrame& frame) override { |
275 ++frame_count_; | 251 ++frame_count_; |
276 congestion_feedback_frames_.push_back( | 252 congestion_feedback_frames_.push_back( |
277 new QuicCongestionFeedbackFrame(frame)); | 253 new QuicCongestionFeedbackFrame(frame)); |
278 return true; | 254 return true; |
279 } | 255 } |
280 | 256 |
281 virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { | 257 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { |
282 ++frame_count_; | 258 ++frame_count_; |
283 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); | 259 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); |
284 return true; | 260 return true; |
285 } | 261 } |
286 | 262 |
287 virtual bool OnPingFrame(const QuicPingFrame& frame) override { | 263 bool OnPingFrame(const QuicPingFrame& frame) override { |
288 ++frame_count_; | 264 ++frame_count_; |
289 ping_frames_.push_back(new QuicPingFrame(frame)); | 265 ping_frames_.push_back(new QuicPingFrame(frame)); |
290 return true; | 266 return true; |
291 } | 267 } |
292 | 268 |
293 virtual void OnFecData(const QuicFecData& fec) override { | 269 void OnFecData(const QuicFecData& fec) override { |
294 ++fec_count_; | 270 ++fec_count_; |
295 fec_data_.push_back(new QuicFecData(fec)); | 271 fec_data_.push_back(new QuicFecData(fec)); |
296 } | 272 } |
297 | 273 |
298 virtual void OnPacketComplete() override { | 274 void OnPacketComplete() override { ++complete_packets_; } |
299 ++complete_packets_; | |
300 } | |
301 | 275 |
302 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { | 276 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { |
303 rst_stream_frame_ = frame; | 277 rst_stream_frame_ = frame; |
304 return true; | 278 return true; |
305 } | 279 } |
306 | 280 |
307 virtual bool OnConnectionCloseFrame( | 281 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { |
308 const QuicConnectionCloseFrame& frame) override { | |
309 connection_close_frame_ = frame; | 282 connection_close_frame_ = frame; |
310 return true; | 283 return true; |
311 } | 284 } |
312 | 285 |
313 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) override { | 286 bool OnGoAwayFrame(const QuicGoAwayFrame& frame) override { |
314 goaway_frame_ = frame; | 287 goaway_frame_ = frame; |
315 return true; | 288 return true; |
316 } | 289 } |
317 | 290 |
318 virtual bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) | 291 bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) override { |
319 override { | |
320 window_update_frame_ = frame; | 292 window_update_frame_ = frame; |
321 return true; | 293 return true; |
322 } | 294 } |
323 | 295 |
324 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) override { | 296 bool OnBlockedFrame(const QuicBlockedFrame& frame) override { |
325 blocked_frame_ = frame; | 297 blocked_frame_ = frame; |
326 return true; | 298 return true; |
327 } | 299 } |
328 | 300 |
329 // Counters from the visitor_ callbacks. | 301 // Counters from the visitor_ callbacks. |
330 int error_count_; | 302 int error_count_; |
331 int version_mismatch_; | 303 int version_mismatch_; |
332 int packet_count_; | 304 int packet_count_; |
333 int frame_count_; | 305 int frame_count_; |
334 int fec_count_; | 306 int fec_count_; |
(...skipping 4722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5057 EXPECT_CALL(visitor, OnPacketComplete()); | 5029 EXPECT_CALL(visitor, OnPacketComplete()); |
5058 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 5030 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
5059 | 5031 |
5060 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 5032 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
5061 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 5033 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
5062 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 5034 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
5063 } | 5035 } |
5064 | 5036 |
5065 } // namespace test | 5037 } // namespace test |
5066 } // namespace net | 5038 } // namespace net |
OLD | NEW |