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 <stdint.h> | 7 #include <stdint.h> |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 } | 99 } |
100 | 100 |
101 size_t GetPrivateFlagsOffset(bool include_version, | 101 size_t GetPrivateFlagsOffset(bool include_version, |
102 bool include_path_id, | 102 bool include_path_id, |
103 QuicPacketNumberLength packet_number_length) { | 103 QuicPacketNumberLength packet_number_length) { |
104 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version, | 104 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version, |
105 include_path_id) + | 105 include_path_id) + |
106 packet_number_length; | 106 packet_number_length; |
107 } | 107 } |
108 | 108 |
109 // Index into the fec group offset in the header. | |
110 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length, | |
111 bool include_version, | |
112 bool include_path_id) { | |
113 return GetPrivateFlagsOffset(connection_id_length, include_version, | |
114 include_path_id) + | |
115 kPrivateFlagsSize; | |
116 } | |
117 | |
118 size_t GetFecGroupOffset(bool include_version, bool include_path_id) { | |
119 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version, | |
120 include_path_id) + | |
121 kPrivateFlagsSize; | |
122 } | |
123 | |
124 size_t GetFecGroupOffset(bool include_version, | |
125 bool include_path_id, | |
126 QuicPacketNumberLength packet_number_length) { | |
127 return GetPrivateFlagsOffset(include_version, include_path_id, | |
128 packet_number_length) + | |
129 kPrivateFlagsSize; | |
130 } | |
131 | |
132 // Index into the message tag of the public reset packet. | 109 // Index into the message tag of the public reset packet. |
133 // Public resets always have full connection_ids. | 110 // Public resets always have full connection_ids. |
134 const size_t kPublicResetPacketMessageTagOffset = | 111 const size_t kPublicResetPacketMessageTagOffset = |
135 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 112 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
136 | 113 |
137 class TestEncrypter : public QuicEncrypter { | 114 class TestEncrypter : public QuicEncrypter { |
138 public: | 115 public: |
139 ~TestEncrypter() override {} | 116 ~TestEncrypter() override {} |
140 bool SetKey(StringPiece key) override { return true; } | 117 bool SetKey(StringPiece key) override { return true; } |
141 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } | 118 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 string ciphertext_; | 178 string ciphertext_; |
202 }; | 179 }; |
203 | 180 |
204 class TestQuicVisitor : public QuicFramerVisitorInterface { | 181 class TestQuicVisitor : public QuicFramerVisitorInterface { |
205 public: | 182 public: |
206 TestQuicVisitor() | 183 TestQuicVisitor() |
207 : error_count_(0), | 184 : error_count_(0), |
208 version_mismatch_(0), | 185 version_mismatch_(0), |
209 packet_count_(0), | 186 packet_count_(0), |
210 frame_count_(0), | 187 frame_count_(0), |
211 fec_count_(0), | |
212 complete_packets_(0), | 188 complete_packets_(0), |
213 revived_packets_(0), | |
214 accept_packet_(true), | 189 accept_packet_(true), |
215 accept_public_header_(true) {} | 190 accept_public_header_(true) {} |
216 | 191 |
217 ~TestQuicVisitor() override { | 192 ~TestQuicVisitor() override { |
218 STLDeleteElements(&stream_frames_); | 193 STLDeleteElements(&stream_frames_); |
219 STLDeleteElements(&ack_frames_); | 194 STLDeleteElements(&ack_frames_); |
220 STLDeleteElements(&stop_waiting_frames_); | 195 STLDeleteElements(&stop_waiting_frames_); |
221 STLDeleteElements(&ping_frames_); | 196 STLDeleteElements(&ping_frames_); |
222 STLDeleteElements(&stream_data_); | 197 STLDeleteElements(&stream_data_); |
223 } | 198 } |
224 | 199 |
225 void OnError(QuicFramer* f) override { | 200 void OnError(QuicFramer* f) override { |
226 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) | 201 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) |
227 << " (" << f->error() << ")"; | 202 << " (" << f->error() << ")"; |
228 ++error_count_; | 203 ++error_count_; |
229 } | 204 } |
230 | 205 |
231 void OnPacket() override {} | 206 void OnPacket() override {} |
232 | 207 |
233 void OnPublicResetPacket(const QuicPublicResetPacket& packet) override { | 208 void OnPublicResetPacket(const QuicPublicResetPacket& packet) override { |
234 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); | 209 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); |
235 } | 210 } |
236 | 211 |
237 void OnVersionNegotiationPacket( | 212 void OnVersionNegotiationPacket( |
238 const QuicVersionNegotiationPacket& packet) override { | 213 const QuicVersionNegotiationPacket& packet) override { |
239 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 214 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
240 } | 215 } |
241 | 216 |
242 void OnRevivedPacket() override { ++revived_packets_; } | |
243 | |
244 bool OnProtocolVersionMismatch(QuicVersion version) override { | 217 bool OnProtocolVersionMismatch(QuicVersion version) override { |
245 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; | 218 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; |
246 ++version_mismatch_; | 219 ++version_mismatch_; |
247 return true; | 220 return true; |
248 } | 221 } |
249 | 222 |
250 bool OnUnauthenticatedPublicHeader( | 223 bool OnUnauthenticatedPublicHeader( |
251 const QuicPacketPublicHeader& header) override { | 224 const QuicPacketPublicHeader& header) override { |
252 public_header_.reset(new QuicPacketPublicHeader(header)); | 225 public_header_.reset(new QuicPacketPublicHeader(header)); |
253 return accept_public_header_; | 226 return accept_public_header_; |
254 } | 227 } |
255 | 228 |
256 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { | 229 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { |
257 return true; | 230 return true; |
258 } | 231 } |
259 | 232 |
260 void OnDecryptedPacket(EncryptionLevel level) override {} | 233 void OnDecryptedPacket(EncryptionLevel level) override {} |
261 | 234 |
262 bool OnPacketHeader(const QuicPacketHeader& header) override { | 235 bool OnPacketHeader(const QuicPacketHeader& header) override { |
| 236 if (header.fec_flag) { |
| 237 // Drop any FEC packet. |
| 238 return false; |
| 239 } |
263 ++packet_count_; | 240 ++packet_count_; |
264 header_.reset(new QuicPacketHeader(header)); | 241 header_.reset(new QuicPacketHeader(header)); |
265 return accept_packet_; | 242 return accept_packet_; |
266 } | 243 } |
267 | 244 |
268 bool OnStreamFrame(const QuicStreamFrame& frame) override { | 245 bool OnStreamFrame(const QuicStreamFrame& frame) override { |
269 ++frame_count_; | 246 ++frame_count_; |
270 // Save a copy of the data so it is valid after the packet is processed. | 247 // Save a copy of the data so it is valid after the packet is processed. |
271 string* string_data = new string(); | 248 string* string_data = new string(); |
272 StringPiece(frame.frame_buffer, frame.frame_length) | 249 StringPiece(frame.frame_buffer, frame.frame_length) |
273 .AppendToString(string_data); | 250 .AppendToString(string_data); |
274 stream_data_.push_back(string_data); | 251 stream_data_.push_back(string_data); |
275 stream_frames_.push_back(new QuicStreamFrame(frame.stream_id, frame.fin, | 252 stream_frames_.push_back(new QuicStreamFrame(frame.stream_id, frame.fin, |
276 frame.offset, *string_data)); | 253 frame.offset, *string_data)); |
277 return true; | 254 return true; |
278 } | 255 } |
279 | 256 |
280 void OnFecProtectedPayload(StringPiece payload) override { | |
281 fec_protected_payload_ = payload.as_string(); | |
282 } | |
283 | |
284 bool OnAckFrame(const QuicAckFrame& frame) override { | 257 bool OnAckFrame(const QuicAckFrame& frame) override { |
285 ++frame_count_; | 258 ++frame_count_; |
286 ack_frames_.push_back(new QuicAckFrame(frame)); | 259 ack_frames_.push_back(new QuicAckFrame(frame)); |
287 return true; | 260 return true; |
288 } | 261 } |
289 | 262 |
290 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { | 263 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { |
291 ++frame_count_; | 264 ++frame_count_; |
292 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); | 265 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); |
293 return true; | 266 return true; |
294 } | 267 } |
295 | 268 |
296 bool OnPingFrame(const QuicPingFrame& frame) override { | 269 bool OnPingFrame(const QuicPingFrame& frame) override { |
297 ++frame_count_; | 270 ++frame_count_; |
298 ping_frames_.push_back(new QuicPingFrame(frame)); | 271 ping_frames_.push_back(new QuicPingFrame(frame)); |
299 return true; | 272 return true; |
300 } | 273 } |
301 | 274 |
302 void OnFecData(StringPiece redundancy) override { | |
303 ++fec_count_; | |
304 fec_data_redundancy_.push_back(redundancy.as_string()); | |
305 } | |
306 | |
307 void OnPacketComplete() override { ++complete_packets_; } | 275 void OnPacketComplete() override { ++complete_packets_; } |
308 | 276 |
309 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { | 277 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { |
310 rst_stream_frame_ = frame; | 278 rst_stream_frame_ = frame; |
311 return true; | 279 return true; |
312 } | 280 } |
313 | 281 |
314 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { | 282 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { |
315 connection_close_frame_ = frame; | 283 connection_close_frame_ = frame; |
316 return true; | 284 return true; |
(...skipping 17 matching lines...) Expand all Loading... |
334 bool OnPathCloseFrame(const QuicPathCloseFrame& frame) override { | 302 bool OnPathCloseFrame(const QuicPathCloseFrame& frame) override { |
335 path_close_frame_ = frame; | 303 path_close_frame_ = frame; |
336 return true; | 304 return true; |
337 } | 305 } |
338 | 306 |
339 // Counters from the visitor_ callbacks. | 307 // Counters from the visitor_ callbacks. |
340 int error_count_; | 308 int error_count_; |
341 int version_mismatch_; | 309 int version_mismatch_; |
342 int packet_count_; | 310 int packet_count_; |
343 int frame_count_; | 311 int frame_count_; |
344 int fec_count_; | |
345 int complete_packets_; | 312 int complete_packets_; |
346 int revived_packets_; | |
347 bool accept_packet_; | 313 bool accept_packet_; |
348 bool accept_public_header_; | 314 bool accept_public_header_; |
349 | 315 |
350 scoped_ptr<QuicPacketHeader> header_; | 316 scoped_ptr<QuicPacketHeader> header_; |
351 scoped_ptr<QuicPacketPublicHeader> public_header_; | 317 scoped_ptr<QuicPacketPublicHeader> public_header_; |
352 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; | 318 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; |
353 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; | 319 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; |
354 vector<QuicStreamFrame*> stream_frames_; | 320 vector<QuicStreamFrame*> stream_frames_; |
355 vector<QuicAckFrame*> ack_frames_; | 321 vector<QuicAckFrame*> ack_frames_; |
356 vector<QuicStopWaitingFrame*> stop_waiting_frames_; | 322 vector<QuicStopWaitingFrame*> stop_waiting_frames_; |
357 vector<QuicPingFrame*> ping_frames_; | 323 vector<QuicPingFrame*> ping_frames_; |
358 string fec_protected_payload_; | |
359 QuicRstStreamFrame rst_stream_frame_; | 324 QuicRstStreamFrame rst_stream_frame_; |
360 QuicConnectionCloseFrame connection_close_frame_; | 325 QuicConnectionCloseFrame connection_close_frame_; |
361 QuicGoAwayFrame goaway_frame_; | 326 QuicGoAwayFrame goaway_frame_; |
362 QuicWindowUpdateFrame window_update_frame_; | 327 QuicWindowUpdateFrame window_update_frame_; |
363 QuicBlockedFrame blocked_frame_; | 328 QuicBlockedFrame blocked_frame_; |
364 QuicPathCloseFrame path_close_frame_; | 329 QuicPathCloseFrame path_close_frame_; |
365 vector<string*> stream_data_; | 330 vector<string*> stream_data_; |
366 vector<string> fec_data_redundancy_; | |
367 }; | 331 }; |
368 | 332 |
369 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { | 333 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { |
370 public: | 334 public: |
371 QuicFramerTest() | 335 QuicFramerTest() |
372 : encrypter_(new test::TestEncrypter()), | 336 : encrypter_(new test::TestEncrypter()), |
373 decrypter_(new test::TestDecrypter()), | 337 decrypter_(new test::TestDecrypter()), |
374 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), | 338 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), |
375 framer_(QuicSupportedVersions(), start_, Perspective::IS_SERVER) { | 339 framer_(QuicSupportedVersions(), start_, Perspective::IS_SERVER) { |
376 version_ = GetParam(); | 340 version_ = GetParam(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 expected_error = "Unable to read stream_id."; | 438 expected_error = "Unable to read stream_id."; |
475 } else if (i < kQuicFrameTypeSize + stream_id_size + | 439 } else if (i < kQuicFrameTypeSize + stream_id_size + |
476 kQuicMaxStreamOffsetSize) { | 440 kQuicMaxStreamOffsetSize) { |
477 expected_error = "Unable to read offset."; | 441 expected_error = "Unable to read offset."; |
478 } else { | 442 } else { |
479 expected_error = "Unable to read frame data."; | 443 expected_error = "Unable to read frame data."; |
480 } | 444 } |
481 CheckProcessingFails( | 445 CheckProcessingFails( |
482 packet, | 446 packet, |
483 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, include_version, | 447 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, include_version, |
484 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 448 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
485 NOT_IN_FEC_GROUP), | |
486 expected_error, QUIC_INVALID_STREAM_DATA); | 449 expected_error, QUIC_INVALID_STREAM_DATA); |
487 } | 450 } |
488 } | 451 } |
489 | 452 |
490 void CheckCalculatePacketNumber(QuicPacketNumber expected_packet_number, | 453 void CheckCalculatePacketNumber(QuicPacketNumber expected_packet_number, |
491 QuicPacketNumber last_packet_number) { | 454 QuicPacketNumber last_packet_number) { |
492 QuicPacketNumber wire_packet_number = expected_packet_number & kMask; | 455 QuicPacketNumber wire_packet_number = expected_packet_number & kMask; |
493 QuicFramerPeer::SetLastPacketNumber(&framer_, last_packet_number); | 456 QuicFramerPeer::SetLastPacketNumber(&framer_, last_packet_number); |
494 EXPECT_EQ( | 457 EXPECT_EQ( |
495 expected_packet_number, | 458 expected_packet_number, |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
641 // connection_id | 604 // connection_id |
642 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 605 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
643 // packet number | 606 // packet number |
644 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 607 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
645 // private flags | 608 // private flags |
646 0x00, | 609 0x00, |
647 }; | 610 }; |
648 | 611 |
649 memset(packet + GetPacketHeaderSize( | 612 memset(packet + GetPacketHeaderSize( |
650 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 613 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, |
651 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), 0, | 614 PACKET_6BYTE_PACKET_NUMBER), 0, |
652 kMaxPacketSize - GetPacketHeaderSize( | 615 kMaxPacketSize - GetPacketHeaderSize( |
653 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 616 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, |
654 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP) + 1); | 617 PACKET_6BYTE_PACKET_NUMBER) + 1); |
655 // clang-format on | 618 // clang-format on |
656 | 619 |
657 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 620 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
658 EXPECT_DFATAL(framer_.ProcessPacket(encrypted), "Packet too large:1"); | 621 EXPECT_DFATAL(framer_.ProcessPacket(encrypted), "Packet too large:1"); |
659 | 622 |
660 ASSERT_TRUE(visitor_.header_.get()); | 623 ASSERT_TRUE(visitor_.header_.get()); |
661 // Make sure we've parsed the packet header, so we can send an error. | 624 // Make sure we've parsed the packet header, so we can send an error. |
662 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 625 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
663 // Make sure the correct error is propagated. | 626 // Make sure the correct error is propagated. |
664 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 627 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
(...skipping 24 matching lines...) Expand all Loading... |
689 EXPECT_FALSE(visitor_.header_->fec_flag); | 652 EXPECT_FALSE(visitor_.header_->fec_flag); |
690 EXPECT_FALSE(visitor_.header_->entropy_flag); | 653 EXPECT_FALSE(visitor_.header_->entropy_flag); |
691 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 654 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
692 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 655 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
693 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 656 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
694 EXPECT_EQ(0u, visitor_.header_->fec_group); | 657 EXPECT_EQ(0u, visitor_.header_->fec_group); |
695 | 658 |
696 // Now test framing boundaries. | 659 // Now test framing boundaries. |
697 for (size_t i = 0; | 660 for (size_t i = 0; |
698 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 661 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
699 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 662 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
700 NOT_IN_FEC_GROUP); | |
701 ++i) { | 663 ++i) { |
702 string expected_error; | 664 string expected_error; |
703 if (i < kConnectionIdOffset) { | 665 if (i < kConnectionIdOffset) { |
704 expected_error = "Unable to read public flags."; | 666 expected_error = "Unable to read public flags."; |
705 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 667 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
706 expected_error = "Unable to read ConnectionId."; | 668 expected_error = "Unable to read ConnectionId."; |
707 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId)) { | 669 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId)) { |
708 expected_error = "Unable to read packet number."; | 670 expected_error = "Unable to read packet number."; |
709 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId)) { | 671 } else { |
710 expected_error = "Unable to read private flags."; | 672 expected_error = "Unable to read private flags."; |
711 } else { | |
712 expected_error = "Unable to read first fec protected packet offset."; | |
713 } | 673 } |
714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 674 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
715 } | 675 } |
716 } | 676 } |
717 | 677 |
718 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { | 678 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { |
719 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 679 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
720 | 680 |
721 // clang-format off | 681 // clang-format off |
722 unsigned char packet[] = { | 682 unsigned char packet[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
742 EXPECT_FALSE(visitor_.header_->fec_flag); | 702 EXPECT_FALSE(visitor_.header_->fec_flag); |
743 EXPECT_FALSE(visitor_.header_->entropy_flag); | 703 EXPECT_FALSE(visitor_.header_->entropy_flag); |
744 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 704 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
745 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 705 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
746 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 706 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
747 EXPECT_EQ(0u, visitor_.header_->fec_group); | 707 EXPECT_EQ(0u, visitor_.header_->fec_group); |
748 | 708 |
749 // Now test framing boundaries. | 709 // Now test framing boundaries. |
750 for (size_t i = 0; | 710 for (size_t i = 0; |
751 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, | 711 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, |
752 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 712 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
753 NOT_IN_FEC_GROUP); | |
754 ++i) { | 713 ++i) { |
755 string expected_error; | 714 string expected_error; |
756 if (i < kConnectionIdOffset) { | 715 if (i < kConnectionIdOffset) { |
757 expected_error = "Unable to read public flags."; | 716 expected_error = "Unable to read public flags."; |
758 } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, | 717 } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, |
759 !kIncludeVersion, !kIncludePathId)) { | 718 !kIncludeVersion, !kIncludePathId)) { |
760 expected_error = "Unable to read ConnectionId."; | 719 expected_error = "Unable to read ConnectionId."; |
761 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, | 720 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, |
762 !kIncludeVersion, !kIncludePathId)) { | 721 !kIncludeVersion, !kIncludePathId)) { |
763 expected_error = "Unable to read packet number."; | 722 expected_error = "Unable to read packet number."; |
764 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, | 723 } else { |
765 !kIncludeVersion, !kIncludePathId)) { | |
766 expected_error = "Unable to read private flags."; | 724 expected_error = "Unable to read private flags."; |
767 } else { | |
768 expected_error = "Unable to read first fec protected packet offset."; | |
769 } | 725 } |
770 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 726 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
771 } | 727 } |
772 } | 728 } |
773 | 729 |
774 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { | 730 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { |
775 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 731 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
776 | 732 |
777 // clang-format off | 733 // clang-format off |
778 unsigned char packet[] = { | 734 unsigned char packet[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
798 EXPECT_FALSE(visitor_.header_->fec_flag); | 754 EXPECT_FALSE(visitor_.header_->fec_flag); |
799 EXPECT_FALSE(visitor_.header_->entropy_flag); | 755 EXPECT_FALSE(visitor_.header_->entropy_flag); |
800 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 756 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
801 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 757 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
802 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 758 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
803 EXPECT_EQ(0u, visitor_.header_->fec_group); | 759 EXPECT_EQ(0u, visitor_.header_->fec_group); |
804 | 760 |
805 // Now test framing boundaries. | 761 // Now test framing boundaries. |
806 for (size_t i = 0; | 762 for (size_t i = 0; |
807 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, | 763 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, |
808 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 764 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
809 NOT_IN_FEC_GROUP); | |
810 ++i) { | 765 ++i) { |
811 string expected_error; | 766 string expected_error; |
812 if (i < kConnectionIdOffset) { | 767 if (i < kConnectionIdOffset) { |
813 expected_error = "Unable to read public flags."; | 768 expected_error = "Unable to read public flags."; |
814 } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, | 769 } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, |
815 !kIncludeVersion, !kIncludePathId)) { | 770 !kIncludeVersion, !kIncludePathId)) { |
816 expected_error = "Unable to read ConnectionId."; | 771 expected_error = "Unable to read ConnectionId."; |
817 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, | 772 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, |
818 !kIncludeVersion, !kIncludePathId)) { | 773 !kIncludeVersion, !kIncludePathId)) { |
819 expected_error = "Unable to read packet number."; | 774 expected_error = "Unable to read packet number."; |
820 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, | 775 } else { |
821 !kIncludeVersion, !kIncludePathId)) { | |
822 expected_error = "Unable to read private flags."; | 776 expected_error = "Unable to read private flags."; |
823 } else { | |
824 expected_error = "Unable to read first fec protected packet offset."; | |
825 } | 777 } |
826 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 778 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
827 } | 779 } |
828 } | 780 } |
829 | 781 |
830 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 782 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { |
831 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 783 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
832 | 784 |
833 // clang-format off | 785 // clang-format off |
834 unsigned char packet[] = { | 786 unsigned char packet[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
854 EXPECT_FALSE(visitor_.header_->fec_flag); | 806 EXPECT_FALSE(visitor_.header_->fec_flag); |
855 EXPECT_FALSE(visitor_.header_->entropy_flag); | 807 EXPECT_FALSE(visitor_.header_->entropy_flag); |
856 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 808 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
857 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 809 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
858 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 810 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
859 EXPECT_EQ(0u, visitor_.header_->fec_group); | 811 EXPECT_EQ(0u, visitor_.header_->fec_group); |
860 | 812 |
861 // Now test framing boundaries. | 813 // Now test framing boundaries. |
862 for (size_t i = 0; | 814 for (size_t i = 0; |
863 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, | 815 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, |
864 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 816 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
865 NOT_IN_FEC_GROUP); | |
866 ++i) { | 817 ++i) { |
867 string expected_error; | 818 string expected_error; |
868 if (i < kConnectionIdOffset) { | 819 if (i < kConnectionIdOffset) { |
869 expected_error = "Unable to read public flags."; | 820 expected_error = "Unable to read public flags."; |
870 } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, | 821 } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, |
871 !kIncludeVersion, !kIncludePathId)) { | 822 !kIncludeVersion, !kIncludePathId)) { |
872 expected_error = "Unable to read ConnectionId."; | 823 expected_error = "Unable to read ConnectionId."; |
873 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_CONNECTION_ID, | 824 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_CONNECTION_ID, |
874 !kIncludeVersion, !kIncludePathId)) { | 825 !kIncludeVersion, !kIncludePathId)) { |
875 expected_error = "Unable to read packet number."; | 826 expected_error = "Unable to read packet number."; |
876 } else if (i < GetFecGroupOffset(PACKET_0BYTE_CONNECTION_ID, | 827 } else { |
877 !kIncludeVersion, !kIncludePathId)) { | |
878 expected_error = "Unable to read private flags."; | 828 expected_error = "Unable to read private flags."; |
879 } else { | |
880 expected_error = "Unable to read first fec protected packet offset."; | |
881 } | 829 } |
882 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 830 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
883 } | 831 } |
884 } | 832 } |
885 | 833 |
886 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { | 834 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
887 // clang-format off | 835 // clang-format off |
888 unsigned char packet[] = { | 836 unsigned char packet[] = { |
889 // public flags (version) | 837 // public flags (version) |
890 0x3D, | 838 0x3D, |
(...skipping 20 matching lines...) Expand all Loading... |
911 EXPECT_FALSE(visitor_.header_->fec_flag); | 859 EXPECT_FALSE(visitor_.header_->fec_flag); |
912 EXPECT_FALSE(visitor_.header_->entropy_flag); | 860 EXPECT_FALSE(visitor_.header_->entropy_flag); |
913 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 861 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
914 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 862 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
915 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 863 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
916 EXPECT_EQ(0u, visitor_.header_->fec_group); | 864 EXPECT_EQ(0u, visitor_.header_->fec_group); |
917 | 865 |
918 // Now test framing boundaries. | 866 // Now test framing boundaries. |
919 for (size_t i = 0; | 867 for (size_t i = 0; |
920 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 868 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
921 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 869 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
922 NOT_IN_FEC_GROUP); | |
923 ++i) { | 870 ++i) { |
924 string expected_error; | 871 string expected_error; |
925 if (i < kConnectionIdOffset) { | 872 if (i < kConnectionIdOffset) { |
926 expected_error = "Unable to read public flags."; | 873 expected_error = "Unable to read public flags."; |
927 } else if (i < kVersionOffset) { | 874 } else if (i < kVersionOffset) { |
928 expected_error = "Unable to read ConnectionId."; | 875 expected_error = "Unable to read ConnectionId."; |
929 } else if (i < GetPacketNumberOffset(kIncludeVersion, !kIncludePathId)) { | 876 } else if (i < GetPacketNumberOffset(kIncludeVersion, !kIncludePathId)) { |
930 expected_error = "Unable to read protocol version."; | 877 expected_error = "Unable to read protocol version."; |
931 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, !kIncludePathId)) { | 878 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, !kIncludePathId)) { |
932 expected_error = "Unable to read packet number."; | 879 expected_error = "Unable to read packet number."; |
933 } else if (i < GetFecGroupOffset(kIncludeVersion, !kIncludePathId)) { | 880 } else { |
934 expected_error = "Unable to read private flags."; | 881 expected_error = "Unable to read private flags."; |
935 } else { | |
936 expected_error = "Unable to read first fec protected packet offset."; | |
937 } | 882 } |
938 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 883 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
939 } | 884 } |
940 } | 885 } |
941 | 886 |
942 TEST_P(QuicFramerTest, PacketHeaderWithMultipathFlag) { | 887 TEST_P(QuicFramerTest, PacketHeaderWithMultipathFlag) { |
943 // clang-format off | 888 // clang-format off |
944 unsigned char packet[] = { | 889 unsigned char packet[] = { |
945 // public flags (version) | 890 // public flags (version) |
946 0x7C, | 891 0x7C, |
(...skipping 21 matching lines...) Expand all Loading... |
968 EXPECT_FALSE(visitor_.header_->entropy_flag); | 913 EXPECT_FALSE(visitor_.header_->entropy_flag); |
969 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 914 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
970 EXPECT_EQ(kPathId, visitor_.header_->path_id); | 915 EXPECT_EQ(kPathId, visitor_.header_->path_id); |
971 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 916 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
972 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 917 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
973 EXPECT_EQ(0u, visitor_.header_->fec_group); | 918 EXPECT_EQ(0u, visitor_.header_->fec_group); |
974 | 919 |
975 // Now test framing boundaries. | 920 // Now test framing boundaries. |
976 for (size_t i = 0; | 921 for (size_t i = 0; |
977 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 922 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
978 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 923 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
979 NOT_IN_FEC_GROUP); | |
980 ++i) { | 924 ++i) { |
981 string expected_error; | 925 string expected_error; |
982 if (i < kConnectionIdOffset) { | 926 if (i < kConnectionIdOffset) { |
983 expected_error = "Unable to read public flags."; | 927 expected_error = "Unable to read public flags."; |
984 } else if (i < | 928 } else if (i < |
985 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion)) { | 929 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion)) { |
986 expected_error = "Unable to read ConnectionId."; | 930 expected_error = "Unable to read ConnectionId."; |
987 } else if (i < GetPacketNumberOffset(!kIncludeVersion, kIncludePathId)) { | 931 } else if (i < GetPacketNumberOffset(!kIncludeVersion, kIncludePathId)) { |
988 expected_error = "Unable to read path id."; | 932 expected_error = "Unable to read path id."; |
989 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, kIncludePathId)) { | 933 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, kIncludePathId)) { |
990 expected_error = "Unable to read packet number."; | 934 expected_error = "Unable to read packet number."; |
991 } else if (i < GetFecGroupOffset(!kIncludeVersion, kIncludePathId)) { | 935 } else { |
992 expected_error = "Unable to read private flags."; | 936 expected_error = "Unable to read private flags."; |
993 } else { | |
994 expected_error = "Unable to read first fec protected packet offset."; | |
995 } | 937 } |
996 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 938 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
997 } | 939 } |
998 } | 940 } |
999 | 941 |
1000 TEST_P(QuicFramerTest, PacketHeaderWithBothVersionFlagAndMultipathFlag) { | 942 TEST_P(QuicFramerTest, PacketHeaderWithBothVersionFlagAndMultipathFlag) { |
1001 // clang-format off | 943 // clang-format off |
1002 unsigned char packet[] = { | 944 unsigned char packet[] = { |
1003 // public flags (version) | 945 // public flags (version) |
1004 0x7D, | 946 0x7D, |
(...skipping 24 matching lines...) Expand all Loading... |
1029 EXPECT_FALSE(visitor_.header_->entropy_flag); | 971 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1030 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 972 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1031 EXPECT_EQ(kPathId, visitor_.header_->path_id); | 973 EXPECT_EQ(kPathId, visitor_.header_->path_id); |
1032 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 974 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1033 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 975 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1034 EXPECT_EQ(0u, visitor_.header_->fec_group); | 976 EXPECT_EQ(0u, visitor_.header_->fec_group); |
1035 | 977 |
1036 // Now test framing boundaries. | 978 // Now test framing boundaries. |
1037 for (size_t i = 0; | 979 for (size_t i = 0; |
1038 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 980 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1039 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 981 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
1040 NOT_IN_FEC_GROUP); | |
1041 ++i) { | 982 ++i) { |
1042 string expected_error; | 983 string expected_error; |
1043 if (i < kConnectionIdOffset) { | 984 if (i < kConnectionIdOffset) { |
1044 expected_error = "Unable to read public flags."; | 985 expected_error = "Unable to read public flags."; |
1045 } else if (i < kVersionOffset) { | 986 } else if (i < kVersionOffset) { |
1046 expected_error = "Unable to read ConnectionId."; | 987 expected_error = "Unable to read ConnectionId."; |
1047 } else if (i < | 988 } else if (i < |
1048 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion)) { | 989 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion)) { |
1049 expected_error = "Unable to read protocol version."; | 990 expected_error = "Unable to read protocol version."; |
1050 } else if (i < GetPacketNumberOffset(kIncludeVersion, kIncludePathId)) { | 991 } else if (i < GetPacketNumberOffset(kIncludeVersion, kIncludePathId)) { |
1051 expected_error = "Unable to read path id."; | 992 expected_error = "Unable to read path id."; |
1052 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, kIncludePathId)) { | 993 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, kIncludePathId)) { |
1053 expected_error = "Unable to read packet number."; | 994 expected_error = "Unable to read packet number."; |
1054 } else if (i < GetFecGroupOffset(kIncludeVersion, kIncludePathId)) { | 995 } else { |
1055 expected_error = "Unable to read private flags."; | 996 expected_error = "Unable to read private flags."; |
1056 } else { | |
1057 expected_error = "Unable to read first fec protected packet offset."; | |
1058 } | 997 } |
1059 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 998 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
1060 } | 999 } |
1061 } | 1000 } |
1062 | 1001 |
1063 TEST_P(QuicFramerTest, PacketHeaderWithPathChange) { | 1002 TEST_P(QuicFramerTest, PacketHeaderWithPathChange) { |
1064 // Packet 1 from path 0x42. | 1003 // Packet 1 from path 0x42. |
1065 // clang-format off | 1004 // clang-format off |
1066 unsigned char packet1[] = { | 1005 unsigned char packet1[] = { |
1067 // public flags (version) | 1006 // public flags (version) |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1194 EXPECT_FALSE(visitor_.header_->fec_flag); | 1133 EXPECT_FALSE(visitor_.header_->fec_flag); |
1195 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1134 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1196 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1135 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1197 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1136 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1198 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1137 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1199 EXPECT_EQ(0u, visitor_.header_->fec_group); | 1138 EXPECT_EQ(0u, visitor_.header_->fec_group); |
1200 | 1139 |
1201 // Now test framing boundaries. | 1140 // Now test framing boundaries. |
1202 for (size_t i = 0; | 1141 for (size_t i = 0; |
1203 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1142 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1204 !kIncludePathId, PACKET_4BYTE_PACKET_NUMBER, | 1143 !kIncludePathId, PACKET_4BYTE_PACKET_NUMBER); |
1205 NOT_IN_FEC_GROUP); | |
1206 ++i) { | 1144 ++i) { |
1207 string expected_error; | 1145 string expected_error; |
1208 if (i < kConnectionIdOffset) { | 1146 if (i < kConnectionIdOffset) { |
1209 expected_error = "Unable to read public flags."; | 1147 expected_error = "Unable to read public flags."; |
1210 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 1148 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
1211 expected_error = "Unable to read ConnectionId."; | 1149 expected_error = "Unable to read ConnectionId."; |
1212 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, | 1150 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, |
1213 PACKET_4BYTE_PACKET_NUMBER)) { | 1151 PACKET_4BYTE_PACKET_NUMBER)) { |
1214 expected_error = "Unable to read packet number."; | 1152 expected_error = "Unable to read packet number."; |
1215 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId, | 1153 } else { |
1216 PACKET_4BYTE_PACKET_NUMBER)) { | |
1217 expected_error = "Unable to read private flags."; | 1154 expected_error = "Unable to read private flags."; |
1218 } else { | |
1219 expected_error = "Unable to read first fec protected packet offset."; | |
1220 } | 1155 } |
1221 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1156 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
1222 } | 1157 } |
1223 } | 1158 } |
1224 | 1159 |
1225 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { | 1160 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { |
1226 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 1161 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
1227 | 1162 |
1228 // clang-format off | 1163 // clang-format off |
1229 unsigned char packet[] = { | 1164 unsigned char packet[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
1249 EXPECT_FALSE(visitor_.header_->fec_flag); | 1184 EXPECT_FALSE(visitor_.header_->fec_flag); |
1250 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1185 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1251 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1186 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1252 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1187 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1253 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1188 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1254 EXPECT_EQ(0u, visitor_.header_->fec_group); | 1189 EXPECT_EQ(0u, visitor_.header_->fec_group); |
1255 | 1190 |
1256 // Now test framing boundaries. | 1191 // Now test framing boundaries. |
1257 for (size_t i = 0; | 1192 for (size_t i = 0; |
1258 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1193 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1259 !kIncludePathId, PACKET_2BYTE_PACKET_NUMBER, | 1194 !kIncludePathId, PACKET_2BYTE_PACKET_NUMBER); |
1260 NOT_IN_FEC_GROUP); | |
1261 ++i) { | 1195 ++i) { |
1262 string expected_error; | 1196 string expected_error; |
1263 if (i < kConnectionIdOffset) { | 1197 if (i < kConnectionIdOffset) { |
1264 expected_error = "Unable to read public flags."; | 1198 expected_error = "Unable to read public flags."; |
1265 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 1199 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
1266 expected_error = "Unable to read ConnectionId."; | 1200 expected_error = "Unable to read ConnectionId."; |
1267 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, | 1201 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, |
1268 PACKET_2BYTE_PACKET_NUMBER)) { | 1202 PACKET_2BYTE_PACKET_NUMBER)) { |
1269 expected_error = "Unable to read packet number."; | 1203 expected_error = "Unable to read packet number."; |
1270 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId, | 1204 } else { |
1271 PACKET_2BYTE_PACKET_NUMBER)) { | |
1272 expected_error = "Unable to read private flags."; | 1205 expected_error = "Unable to read private flags."; |
1273 } else { | |
1274 expected_error = "Unable to read first fec protected packet offset."; | |
1275 } | 1206 } |
1276 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1207 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
1277 } | 1208 } |
1278 } | 1209 } |
1279 | 1210 |
1280 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { | 1211 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { |
1281 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 1212 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
1282 | 1213 |
1283 // clang-format off | 1214 // clang-format off |
1284 unsigned char packet[] = { | 1215 unsigned char packet[] = { |
(...skipping 19 matching lines...) Expand all Loading... |
1304 EXPECT_FALSE(visitor_.header_->fec_flag); | 1235 EXPECT_FALSE(visitor_.header_->fec_flag); |
1305 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1236 EXPECT_FALSE(visitor_.header_->entropy_flag); |
1306 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1237 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
1307 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1238 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
1308 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1239 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1309 EXPECT_EQ(0u, visitor_.header_->fec_group); | 1240 EXPECT_EQ(0u, visitor_.header_->fec_group); |
1310 | 1241 |
1311 // Now test framing boundaries. | 1242 // Now test framing boundaries. |
1312 for (size_t i = 0; | 1243 for (size_t i = 0; |
1313 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1244 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1314 !kIncludePathId, PACKET_1BYTE_PACKET_NUMBER, | 1245 !kIncludePathId, PACKET_1BYTE_PACKET_NUMBER); |
1315 NOT_IN_FEC_GROUP); | |
1316 ++i) { | 1246 ++i) { |
1317 string expected_error; | 1247 string expected_error; |
1318 if (i < kConnectionIdOffset) { | 1248 if (i < kConnectionIdOffset) { |
1319 expected_error = "Unable to read public flags."; | 1249 expected_error = "Unable to read public flags."; |
1320 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 1250 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
1321 expected_error = "Unable to read ConnectionId."; | 1251 expected_error = "Unable to read ConnectionId."; |
1322 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, | 1252 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, |
1323 PACKET_1BYTE_PACKET_NUMBER)) { | 1253 PACKET_1BYTE_PACKET_NUMBER)) { |
1324 expected_error = "Unable to read packet number."; | 1254 expected_error = "Unable to read packet number."; |
1325 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId, | 1255 } else { |
1326 PACKET_1BYTE_PACKET_NUMBER)) { | |
1327 expected_error = "Unable to read private flags."; | 1256 expected_error = "Unable to read private flags."; |
1328 } else { | |
1329 expected_error = "Unable to read first fec protected packet offset."; | |
1330 } | 1257 } |
1331 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1258 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
1332 } | 1259 } |
1333 } | 1260 } |
1334 | 1261 |
1335 TEST_P(QuicFramerTest, InvalidPublicFlag) { | 1262 TEST_P(QuicFramerTest, InvalidPublicFlag) { |
1336 // clang-format off | 1263 // clang-format off |
1337 unsigned char packet[] = { | 1264 unsigned char packet[] = { |
1338 // public flags: all flags set but the public reset flag and version flag. | 1265 // public flags: all flags set but the public reset flag and version flag. |
1339 0xFC, | 1266 0xFC, |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1497 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1424 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1498 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1425 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1499 ASSERT_TRUE(visitor_.header_.get()); | 1426 ASSERT_TRUE(visitor_.header_.get()); |
1500 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); | 1427 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); |
1501 | 1428 |
1502 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1429 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
1503 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1430 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1504 // A packet with no frames is not acceptable. | 1431 // A packet with no frames is not acceptable. |
1505 CheckProcessingFails( | 1432 CheckProcessingFails( |
1506 packet, GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1433 packet, GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
1507 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 1434 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
1508 NOT_IN_FEC_GROUP), | |
1509 "Packet has no frames.", QUIC_MISSING_PAYLOAD); | 1435 "Packet has no frames.", QUIC_MISSING_PAYLOAD); |
1510 } | 1436 } |
1511 | 1437 |
1512 TEST_P(QuicFramerTest, StreamFrame) { | 1438 TEST_P(QuicFramerTest, StreamFrame) { |
1513 // clang-format off | 1439 // clang-format off |
1514 unsigned char packet[] = { | 1440 unsigned char packet[] = { |
1515 // public flags (8 byte connection_id) | 1441 // public flags (8 byte connection_id) |
1516 0x3C, | 1442 0x3C, |
1517 // connection_id | 1443 // connection_id |
1518 0x10, 0x32, 0x54, 0x76, | 1444 0x10, 0x32, 0x54, 0x76, |
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1816 // clang-format on | 1742 // clang-format on |
1817 | 1743 |
1818 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1744 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1819 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1745 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1820 | 1746 |
1821 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1747 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1822 ASSERT_TRUE(visitor_.public_header_.get()); | 1748 ASSERT_TRUE(visitor_.public_header_.get()); |
1823 ASSERT_FALSE(visitor_.header_.get()); | 1749 ASSERT_FALSE(visitor_.header_.get()); |
1824 } | 1750 } |
1825 | 1751 |
1826 TEST_P(QuicFramerTest, RevivedStreamFrame) { | |
1827 // clang-format off | |
1828 unsigned char payload[] = { | |
1829 // frame type (stream frame with fin) | |
1830 0xFF, | |
1831 // stream id | |
1832 0x04, 0x03, 0x02, 0x01, | |
1833 // offset | |
1834 0x54, 0x76, 0x10, 0x32, | |
1835 0xDC, 0xFE, 0x98, 0xBA, | |
1836 // data length | |
1837 0x0c, 0x00, | |
1838 // data | |
1839 'h', 'e', 'l', 'l', | |
1840 'o', ' ', 'w', 'o', | |
1841 'r', 'l', 'd', '!', | |
1842 }; | |
1843 // clang-format on | |
1844 | |
1845 QuicPacketHeader header; | |
1846 header.public_header.connection_id = kConnectionId; | |
1847 header.public_header.reset_flag = false; | |
1848 header.public_header.version_flag = false; | |
1849 header.fec_flag = true; | |
1850 header.entropy_flag = true; | |
1851 header.packet_number = kPacketNumber; | |
1852 header.fec_group = 0; | |
1853 | |
1854 // Do not encrypt the payload because the revived payload is post-encryption. | |
1855 EXPECT_TRUE(framer_.ProcessRevivedPacket( | |
1856 &header, StringPiece(AsChars(payload), arraysize(payload)))); | |
1857 | |
1858 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
1859 ASSERT_EQ(1, visitor_.revived_packets_); | |
1860 ASSERT_TRUE(visitor_.header_.get()); | |
1861 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | |
1862 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | |
1863 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | |
1864 EXPECT_TRUE(visitor_.header_->fec_flag); | |
1865 EXPECT_TRUE(visitor_.header_->entropy_flag); | |
1866 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); | |
1867 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | |
1868 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | |
1869 EXPECT_EQ(0u, visitor_.header_->fec_group); | |
1870 | |
1871 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | |
1872 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | |
1873 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | |
1874 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | |
1875 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | |
1876 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | |
1877 } | |
1878 | |
1879 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | |
1880 // clang-format off | |
1881 unsigned char packet[] = { | |
1882 // public flags (8 byte connection_id) | |
1883 0x3C, | |
1884 // connection_id | |
1885 0x10, 0x32, 0x54, 0x76, | |
1886 0x98, 0xBA, 0xDC, 0xFE, | |
1887 // packet number | |
1888 0xBC, 0x9A, 0x78, 0x56, | |
1889 0x34, 0x12, | |
1890 // private flags (fec group) | |
1891 0x02, | |
1892 // first fec protected packet offset | |
1893 0x02, | |
1894 | |
1895 // frame type (stream frame with fin) | |
1896 0xFF, | |
1897 // stream id | |
1898 0x04, 0x03, 0x02, 0x01, | |
1899 // offset | |
1900 0x54, 0x76, 0x10, 0x32, | |
1901 0xDC, 0xFE, 0x98, 0xBA, | |
1902 // data length | |
1903 0x0c, 0x00, | |
1904 // data | |
1905 'h', 'e', 'l', 'l', | |
1906 'o', ' ', 'w', 'o', | |
1907 'r', 'l', 'd', '!', | |
1908 }; | |
1909 // clang-format on | |
1910 | |
1911 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
1912 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
1913 | |
1914 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
1915 ASSERT_TRUE(visitor_.header_.get()); | |
1916 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); | |
1917 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | |
1918 EXPECT_EQ(kPacketNumber - 2, visitor_.header_->fec_group); | |
1919 const size_t fec_offset = | |
1920 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | |
1921 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); | |
1922 EXPECT_EQ( | |
1923 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | |
1924 visitor_.fec_protected_payload_); | |
1925 | |
1926 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | |
1927 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | |
1928 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | |
1929 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | |
1930 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | |
1931 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | |
1932 } | |
1933 | |
1934 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 1752 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { |
1935 // clang-format off | 1753 // clang-format off |
1936 unsigned char packet[] = { | 1754 unsigned char packet[] = { |
1937 // public flags (8 byte connection_id) | 1755 // public flags (8 byte connection_id) |
1938 0x3C, | 1756 0x3C, |
1939 // connection_id | 1757 // connection_id |
1940 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1758 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
1941 // packet number | 1759 // packet number |
1942 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 1760 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
1943 // private flags (entropy) | 1761 // private flags (entropy) |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2039 } else if (i < kMissingPacketsRange) { | 1857 } else if (i < kMissingPacketsRange) { |
2040 expected_error = "Unable to read missing packet number delta."; | 1858 expected_error = "Unable to read missing packet number delta."; |
2041 } else if (i < kRevivedPacketsLength) { | 1859 } else if (i < kRevivedPacketsLength) { |
2042 expected_error = "Unable to read missing packet number range."; | 1860 expected_error = "Unable to read missing packet number range."; |
2043 } else { | 1861 } else { |
2044 expected_error = "Unable to read num revived packets."; | 1862 expected_error = "Unable to read num revived packets."; |
2045 } | 1863 } |
2046 CheckProcessingFails( | 1864 CheckProcessingFails( |
2047 packet, | 1865 packet, |
2048 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1866 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2049 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 1867 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2050 NOT_IN_FEC_GROUP), | |
2051 expected_error, QUIC_INVALID_ACK_DATA); | 1868 expected_error, QUIC_INVALID_ACK_DATA); |
2052 } | 1869 } |
2053 } | 1870 } |
2054 | 1871 |
2055 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { | 1872 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { |
2056 // clang-format off | 1873 // clang-format off |
2057 unsigned char packet[] = { | 1874 unsigned char packet[] = { |
2058 // public flags (8 byte connection_id) | 1875 // public flags (8 byte connection_id) |
2059 0x3C, | 1876 0x3C, |
2060 // connection_id | 1877 // connection_id |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2146 } else if (i < kMissingPacketsRange) { | 1963 } else if (i < kMissingPacketsRange) { |
2147 expected_error = "Unable to read missing packet number delta."; | 1964 expected_error = "Unable to read missing packet number delta."; |
2148 } else if (i < kRevivedPacketsLength) { | 1965 } else if (i < kRevivedPacketsLength) { |
2149 expected_error = "Unable to read missing packet number range."; | 1966 expected_error = "Unable to read missing packet number range."; |
2150 } else { | 1967 } else { |
2151 expected_error = "Unable to read num revived packets."; | 1968 expected_error = "Unable to read num revived packets."; |
2152 } | 1969 } |
2153 CheckProcessingFails( | 1970 CheckProcessingFails( |
2154 packet, | 1971 packet, |
2155 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1972 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2156 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 1973 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2157 NOT_IN_FEC_GROUP), | |
2158 expected_error, QUIC_INVALID_ACK_DATA); | 1974 expected_error, QUIC_INVALID_ACK_DATA); |
2159 } | 1975 } |
2160 } | 1976 } |
2161 | 1977 |
2162 TEST_P(QuicFramerTest, AckFrame) { | 1978 TEST_P(QuicFramerTest, AckFrame) { |
2163 // clang-format off | 1979 // clang-format off |
2164 unsigned char packet[] = { | 1980 unsigned char packet[] = { |
2165 // public flags (8 byte connection_id) | 1981 // public flags (8 byte connection_id) |
2166 0x3C, | 1982 0x3C, |
2167 // connection_id | 1983 // connection_id |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2241 } else if (i < kMissingPacketsRange) { | 2057 } else if (i < kMissingPacketsRange) { |
2242 expected_error = "Unable to read missing packet number delta."; | 2058 expected_error = "Unable to read missing packet number delta."; |
2243 } else if (i < kRevivedPacketsLength) { | 2059 } else if (i < kRevivedPacketsLength) { |
2244 expected_error = "Unable to read missing packet number range."; | 2060 expected_error = "Unable to read missing packet number range."; |
2245 } else { | 2061 } else { |
2246 expected_error = "Unable to read num revived packets."; | 2062 expected_error = "Unable to read num revived packets."; |
2247 } | 2063 } |
2248 CheckProcessingFails( | 2064 CheckProcessingFails( |
2249 packet, | 2065 packet, |
2250 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2066 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2251 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2067 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2252 NOT_IN_FEC_GROUP), | |
2253 expected_error, QUIC_INVALID_ACK_DATA); | 2068 expected_error, QUIC_INVALID_ACK_DATA); |
2254 } | 2069 } |
2255 } | 2070 } |
2256 | 2071 |
2257 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { | 2072 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { |
2258 // clang-format off | 2073 // clang-format off |
2259 unsigned char packet[] = { | 2074 unsigned char packet[] = { |
2260 // public flags (8 byte connection_id) | 2075 // public flags (8 byte connection_id) |
2261 0x3C, | 2076 0x3C, |
2262 // connection_id | 2077 // connection_id |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2346 } else if (i < kRevivedPacketsLength) { | 2161 } else if (i < kRevivedPacketsLength) { |
2347 expected_error = "Unable to read missing packet number range."; | 2162 expected_error = "Unable to read missing packet number range."; |
2348 } else if (i < kRevivedPacketSequenceNumberLength) { | 2163 } else if (i < kRevivedPacketSequenceNumberLength) { |
2349 expected_error = "Unable to read num revived packets."; | 2164 expected_error = "Unable to read num revived packets."; |
2350 } else { | 2165 } else { |
2351 expected_error = "Unable to read revived packet."; | 2166 expected_error = "Unable to read revived packet."; |
2352 } | 2167 } |
2353 CheckProcessingFails( | 2168 CheckProcessingFails( |
2354 packet, | 2169 packet, |
2355 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2170 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2356 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2171 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2357 NOT_IN_FEC_GROUP), | |
2358 expected_error, QUIC_INVALID_ACK_DATA); | 2172 expected_error, QUIC_INVALID_ACK_DATA); |
2359 } | 2173 } |
2360 } | 2174 } |
2361 | 2175 |
2362 TEST_P(QuicFramerTest, AckFrameNoNacks) { | 2176 TEST_P(QuicFramerTest, AckFrameNoNacks) { |
2363 // clang-format off | 2177 // clang-format off |
2364 unsigned char packet[] = { | 2178 unsigned char packet[] = { |
2365 // public flags (8 byte connection_id) | 2179 // public flags (8 byte connection_id) |
2366 0x3C, | 2180 0x3C, |
2367 // connection_id | 2181 // connection_id |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2522 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2336 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { |
2523 string expected_error; | 2337 string expected_error; |
2524 if (i < kLeastUnackedOffset) { | 2338 if (i < kLeastUnackedOffset) { |
2525 expected_error = "Unable to read entropy hash for sent packets."; | 2339 expected_error = "Unable to read entropy hash for sent packets."; |
2526 } else { | 2340 } else { |
2527 expected_error = "Unable to read least unacked delta."; | 2341 expected_error = "Unable to read least unacked delta."; |
2528 } | 2342 } |
2529 CheckProcessingFails( | 2343 CheckProcessingFails( |
2530 packet, | 2344 packet, |
2531 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2345 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2532 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2346 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2533 NOT_IN_FEC_GROUP), | |
2534 expected_error, QUIC_INVALID_STOP_WAITING_DATA); | 2347 expected_error, QUIC_INVALID_STOP_WAITING_DATA); |
2535 } | 2348 } |
2536 } | 2349 } |
2537 | 2350 |
2538 TEST_P(QuicFramerTest, RstStreamFrameQuic) { | 2351 TEST_P(QuicFramerTest, RstStreamFrameQuic) { |
2539 // clang-format off | 2352 // clang-format off |
2540 unsigned char packet[] = { | 2353 unsigned char packet[] = { |
2541 // public flags (8 byte connection_id) | 2354 // public flags (8 byte connection_id) |
2542 0x3C, | 2355 0x3C, |
2543 // connection_id | 2356 // connection_id |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2583 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2396 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
2584 kQuicMaxStreamOffsetSize) { | 2397 kQuicMaxStreamOffsetSize) { |
2585 expected_error = "Unable to read rst stream sent byte offset."; | 2398 expected_error = "Unable to read rst stream sent byte offset."; |
2586 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2399 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
2587 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { | 2400 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { |
2588 expected_error = "Unable to read rst stream error code."; | 2401 expected_error = "Unable to read rst stream error code."; |
2589 } | 2402 } |
2590 CheckProcessingFails( | 2403 CheckProcessingFails( |
2591 packet, | 2404 packet, |
2592 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2405 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2593 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2406 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2594 NOT_IN_FEC_GROUP), | |
2595 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 2407 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
2596 } | 2408 } |
2597 } | 2409 } |
2598 | 2410 |
2599 TEST_P(QuicFramerTest, ConnectionCloseFrame) { | 2411 TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
2600 // clang-format off | 2412 // clang-format off |
2601 unsigned char packet[] = { | 2413 unsigned char packet[] = { |
2602 // public flags (8 byte connection_id) | 2414 // public flags (8 byte connection_id) |
2603 0x3C, | 2415 0x3C, |
2604 // connection_id | 2416 // connection_id |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2644 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { | 2456 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { |
2645 string expected_error; | 2457 string expected_error; |
2646 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2458 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
2647 expected_error = "Unable to read connection close error code."; | 2459 expected_error = "Unable to read connection close error code."; |
2648 } else { | 2460 } else { |
2649 expected_error = "Unable to read connection close error details."; | 2461 expected_error = "Unable to read connection close error details."; |
2650 } | 2462 } |
2651 CheckProcessingFails( | 2463 CheckProcessingFails( |
2652 packet, | 2464 packet, |
2653 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2465 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2654 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2466 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2655 NOT_IN_FEC_GROUP), | |
2656 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 2467 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
2657 } | 2468 } |
2658 } | 2469 } |
2659 | 2470 |
2660 TEST_P(QuicFramerTest, GoAwayFrame) { | 2471 TEST_P(QuicFramerTest, GoAwayFrame) { |
2661 // clang-format off | 2472 // clang-format off |
2662 unsigned char packet[] = { | 2473 unsigned char packet[] = { |
2663 // public flags (8 byte connection_id) | 2474 // public flags (8 byte connection_id) |
2664 0x3C, | 2475 0x3C, |
2665 // connection_id | 2476 // connection_id |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2707 expected_error = "Unable to read go away error code."; | 2518 expected_error = "Unable to read go away error code."; |
2708 } else if (i < | 2519 } else if (i < |
2709 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { | 2520 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { |
2710 expected_error = "Unable to read last good stream id."; | 2521 expected_error = "Unable to read last good stream id."; |
2711 } else { | 2522 } else { |
2712 expected_error = "Unable to read goaway reason."; | 2523 expected_error = "Unable to read goaway reason."; |
2713 } | 2524 } |
2714 CheckProcessingFails( | 2525 CheckProcessingFails( |
2715 packet, | 2526 packet, |
2716 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2527 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2717 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2528 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2718 NOT_IN_FEC_GROUP), | |
2719 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2529 expected_error, QUIC_INVALID_GOAWAY_DATA); |
2720 } | 2530 } |
2721 } | 2531 } |
2722 | 2532 |
2723 TEST_P(QuicFramerTest, WindowUpdateFrame) { | 2533 TEST_P(QuicFramerTest, WindowUpdateFrame) { |
2724 // clang-format off | 2534 // clang-format off |
2725 unsigned char packet[] = { | 2535 unsigned char packet[] = { |
2726 // public flags (8 byte connection_id) | 2536 // public flags (8 byte connection_id) |
2727 0x3C, | 2537 0x3C, |
2728 // connection_id | 2538 // connection_id |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2760 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 2570 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { |
2761 string expected_error; | 2571 string expected_error; |
2762 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2572 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
2763 expected_error = "Unable to read stream_id."; | 2573 expected_error = "Unable to read stream_id."; |
2764 } else { | 2574 } else { |
2765 expected_error = "Unable to read window byte_offset."; | 2575 expected_error = "Unable to read window byte_offset."; |
2766 } | 2576 } |
2767 CheckProcessingFails( | 2577 CheckProcessingFails( |
2768 packet, | 2578 packet, |
2769 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2579 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2770 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2580 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2771 NOT_IN_FEC_GROUP), | |
2772 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); | 2581 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); |
2773 } | 2582 } |
2774 } | 2583 } |
2775 | 2584 |
2776 TEST_P(QuicFramerTest, BlockedFrame) { | 2585 TEST_P(QuicFramerTest, BlockedFrame) { |
2777 // clang-format off | 2586 // clang-format off |
2778 unsigned char packet[] = { | 2587 unsigned char packet[] = { |
2779 // public flags (8 byte connection_id) | 2588 // public flags (8 byte connection_id) |
2780 0x3C, | 2589 0x3C, |
2781 // connection_id | 2590 // connection_id |
(...skipping 22 matching lines...) Expand all Loading... |
2804 | 2613 |
2805 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); | 2614 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); |
2806 | 2615 |
2807 // Now test framing boundaries. | 2616 // Now test framing boundaries. |
2808 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 2617 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); |
2809 ++i) { | 2618 ++i) { |
2810 string expected_error = "Unable to read stream_id."; | 2619 string expected_error = "Unable to read stream_id."; |
2811 CheckProcessingFails( | 2620 CheckProcessingFails( |
2812 packet, | 2621 packet, |
2813 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2622 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2814 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2623 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2815 NOT_IN_FEC_GROUP), | |
2816 expected_error, QUIC_INVALID_BLOCKED_DATA); | 2624 expected_error, QUIC_INVALID_BLOCKED_DATA); |
2817 } | 2625 } |
2818 } | 2626 } |
2819 | 2627 |
2820 TEST_P(QuicFramerTest, PingFrame) { | 2628 TEST_P(QuicFramerTest, PingFrame) { |
2821 // clang-format off | 2629 // clang-format off |
2822 unsigned char packet[] = { | 2630 unsigned char packet[] = { |
2823 // public flags (8 byte connection_id) | 2631 // public flags (8 byte connection_id) |
2824 0x3C, | 2632 0x3C, |
2825 // connection_id | 2633 // connection_id |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2880 // Now test framing boundaries. | 2688 // Now test framing boundaries. |
2881 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetPathCloseFrameSize(); | 2689 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetPathCloseFrameSize(); |
2882 ++i) { | 2690 ++i) { |
2883 string expected_error; | 2691 string expected_error; |
2884 if (i < kQuicFrameTypeSize + kQuicPathIdSize) { | 2692 if (i < kQuicFrameTypeSize + kQuicPathIdSize) { |
2885 expected_error = "Unable to read path_id."; | 2693 expected_error = "Unable to read path_id."; |
2886 } | 2694 } |
2887 CheckProcessingFails( | 2695 CheckProcessingFails( |
2888 packet, | 2696 packet, |
2889 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2697 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
2890 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2698 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
2891 NOT_IN_FEC_GROUP), | |
2892 expected_error, QUIC_INVALID_PATH_CLOSE_DATA); | 2699 expected_error, QUIC_INVALID_PATH_CLOSE_DATA); |
2893 } | 2700 } |
2894 } | 2701 } |
2895 | 2702 |
2896 TEST_P(QuicFramerTest, PublicResetPacket) { | 2703 TEST_P(QuicFramerTest, PublicResetPacket) { |
2897 // clang-format off | 2704 // clang-format off |
2898 unsigned char packet[] = { | 2705 unsigned char packet[] = { |
2899 // public flags (public reset, 8 byte connection_id) | 2706 // public flags (public reset, 8 byte connection_id) |
2900 0x0E, | 2707 0x0E, |
2901 // connection_id | 2708 // connection_id |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3095 } else if (i < kVersionOffset) { | 2902 } else if (i < kVersionOffset) { |
3096 expected_error = "Unable to read ConnectionId."; | 2903 expected_error = "Unable to read ConnectionId."; |
3097 } else { | 2904 } else { |
3098 expected_error = "Unable to read supported version in negotiation."; | 2905 expected_error = "Unable to read supported version in negotiation."; |
3099 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 2906 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
3100 } | 2907 } |
3101 CheckProcessingFails(packet, i, expected_error, error_code); | 2908 CheckProcessingFails(packet, i, expected_error, error_code); |
3102 } | 2909 } |
3103 } | 2910 } |
3104 | 2911 |
3105 TEST_P(QuicFramerTest, FecPacket) { | 2912 TEST_P(QuicFramerTest, DropFecPacket) { |
3106 // clang-format off | 2913 // clang-format off |
3107 unsigned char packet[] = { | 2914 unsigned char packet[] = { |
3108 // public flags (8 byte connection_id) | 2915 // public flags (8 byte connection_id) |
3109 0x3C, | 2916 0x3C, |
3110 // connection_id | 2917 // connection_id |
3111 0x10, 0x32, 0x54, 0x76, | 2918 0x10, 0x32, 0x54, 0x76, |
3112 0x98, 0xBA, 0xDC, 0xFE, | 2919 0x98, 0xBA, 0xDC, 0xFE, |
3113 // packet number | 2920 // packet number |
3114 0xBC, 0x9A, 0x78, 0x56, | 2921 0xBC, 0x9A, 0x78, 0x56, |
3115 0x34, 0x12, | 2922 0x34, 0x12, |
3116 // private flags (fec group & FEC) | 2923 // private flags (fec group & FEC) |
3117 0x06, | 2924 0x06, |
3118 // first fec protected packet offset | 2925 // first fec protected packet offset |
3119 0x01, | 2926 0x01, |
3120 | 2927 |
3121 // redundancy | 2928 // redundancy |
3122 'a', 'b', 'c', 'd', | 2929 'a', 'b', 'c', 'd', |
3123 'e', 'f', 'g', 'h', | 2930 'e', 'f', 'g', 'h', |
3124 'i', 'j', 'k', 'l', | 2931 'i', 'j', 'k', 'l', |
3125 'm', 'n', 'o', 'p', | 2932 'm', 'n', 'o', 'p', |
3126 }; | 2933 }; |
3127 // clang-format on | 2934 // clang-format on |
3128 | 2935 |
3129 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2936 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3130 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2937 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3131 | 2938 |
3132 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2939 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3133 ASSERT_TRUE(visitor_.header_.get()); | 2940 EXPECT_FALSE(visitor_.header_.get()); |
3134 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); | |
3135 | |
3136 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
3137 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | |
3138 ASSERT_EQ(1, visitor_.fec_count_); | |
3139 EXPECT_EQ("abcdefghijklmnop", visitor_.fec_data_redundancy_[0]); | |
3140 } | 2941 } |
3141 | 2942 |
3142 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 2943 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
3143 QuicPacketHeader header; | 2944 QuicPacketHeader header; |
3144 header.public_header.connection_id = kConnectionId; | 2945 header.public_header.connection_id = kConnectionId; |
3145 header.public_header.reset_flag = false; | 2946 header.public_header.reset_flag = false; |
3146 header.public_header.version_flag = false; | 2947 header.public_header.version_flag = false; |
3147 header.fec_flag = false; | 2948 header.fec_flag = false; |
3148 header.entropy_flag = false; | 2949 header.entropy_flag = false; |
3149 header.packet_number = kPacketNumber; | 2950 header.packet_number = kPacketNumber; |
(...skipping 16 matching lines...) Expand all Loading... |
3166 0x34, 0x12, | 2967 0x34, 0x12, |
3167 // private flags | 2968 // private flags |
3168 0x00, | 2969 0x00, |
3169 | 2970 |
3170 // frame type (padding frame) | 2971 // frame type (padding frame) |
3171 0x00, | 2972 0x00, |
3172 0x00, 0x00, 0x00, 0x00 | 2973 0x00, 0x00, 0x00, 0x00 |
3173 }; | 2974 }; |
3174 // clang-format on | 2975 // clang-format on |
3175 | 2976 |
3176 uint64_t header_size = GetPacketHeaderSize( | 2977 uint64_t header_size = |
3177 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 2978 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3178 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 2979 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
3179 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2980 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3180 | 2981 |
3181 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2982 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3182 ASSERT_TRUE(data != nullptr); | 2983 ASSERT_TRUE(data != nullptr); |
3183 | 2984 |
3184 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2985 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3185 data->length(), AsChars(packet), | 2986 data->length(), AsChars(packet), |
3186 arraysize(packet)); | 2987 arraysize(packet)); |
3187 } | 2988 } |
3188 | 2989 |
(...skipping 24 matching lines...) Expand all Loading... |
3213 0xBC, 0x9A, 0x78, 0x56, | 3014 0xBC, 0x9A, 0x78, 0x56, |
3214 // private flags | 3015 // private flags |
3215 0x00, | 3016 0x00, |
3216 | 3017 |
3217 // frame type (padding frame) | 3018 // frame type (padding frame) |
3218 0x00, | 3019 0x00, |
3219 0x00, 0x00, 0x00, 0x00 | 3020 0x00, 0x00, 0x00, 0x00 |
3220 }; | 3021 }; |
3221 // clang-format on | 3022 // clang-format on |
3222 | 3023 |
3223 uint64_t header_size = GetPacketHeaderSize( | 3024 uint64_t header_size = |
3224 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 3025 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3225 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 3026 !kIncludePathId, PACKET_4BYTE_PACKET_NUMBER); |
3226 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3027 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3227 | 3028 |
3228 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3029 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3229 ASSERT_TRUE(data != nullptr); | 3030 ASSERT_TRUE(data != nullptr); |
3230 | 3031 |
3231 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3032 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3232 data->length(), AsChars(packet), | 3033 data->length(), AsChars(packet), |
3233 arraysize(packet)); | 3034 arraysize(packet)); |
3234 } | 3035 } |
3235 | 3036 |
(...skipping 24 matching lines...) Expand all Loading... |
3260 0xBC, 0x9A, | 3061 0xBC, 0x9A, |
3261 // private flags | 3062 // private flags |
3262 0x00, | 3063 0x00, |
3263 | 3064 |
3264 // frame type (padding frame) | 3065 // frame type (padding frame) |
3265 0x00, | 3066 0x00, |
3266 0x00, 0x00, 0x00, 0x00 | 3067 0x00, 0x00, 0x00, 0x00 |
3267 }; | 3068 }; |
3268 // clang-format on | 3069 // clang-format on |
3269 | 3070 |
3270 uint64_t header_size = GetPacketHeaderSize( | 3071 uint64_t header_size = |
3271 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 3072 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3272 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 3073 !kIncludePathId, PACKET_2BYTE_PACKET_NUMBER); |
3273 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3074 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3274 | 3075 |
3275 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3076 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3276 ASSERT_TRUE(data != nullptr); | 3077 ASSERT_TRUE(data != nullptr); |
3277 | 3078 |
3278 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3079 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3279 data->length(), AsChars(packet), | 3080 data->length(), AsChars(packet), |
3280 arraysize(packet)); | 3081 arraysize(packet)); |
3281 } | 3082 } |
3282 | 3083 |
(...skipping 24 matching lines...) Expand all Loading... |
3307 0xBC, | 3108 0xBC, |
3308 // private flags | 3109 // private flags |
3309 0x00, | 3110 0x00, |
3310 | 3111 |
3311 // frame type (padding frame) | 3112 // frame type (padding frame) |
3312 0x00, | 3113 0x00, |
3313 0x00, 0x00, 0x00, 0x00 | 3114 0x00, 0x00, 0x00, 0x00 |
3314 }; | 3115 }; |
3315 // clang-format on | 3116 // clang-format on |
3316 | 3117 |
3317 uint64_t header_size = GetPacketHeaderSize( | 3118 uint64_t header_size = |
3318 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 3119 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
3319 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 3120 !kIncludePathId, PACKET_1BYTE_PACKET_NUMBER); |
3320 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3121 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
3321 | 3122 |
3322 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3123 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3323 ASSERT_TRUE(data != nullptr); | 3124 ASSERT_TRUE(data != nullptr); |
3324 | 3125 |
3325 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3126 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3326 data->length(), AsChars(packet), | 3127 data->length(), AsChars(packet), |
3327 arraysize(packet)); | 3128 arraysize(packet)); |
3328 } | 3129 } |
3329 | 3130 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3371 // clang-format on | 3172 // clang-format on |
3372 | 3173 |
3373 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3174 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3374 ASSERT_TRUE(data != nullptr); | 3175 ASSERT_TRUE(data != nullptr); |
3375 | 3176 |
3376 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3177 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
3377 data->length(), AsChars(packet), | 3178 data->length(), AsChars(packet), |
3378 arraysize(packet)); | 3179 arraysize(packet)); |
3379 } | 3180 } |
3380 | 3181 |
3381 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | |
3382 QuicPacketHeader header; | |
3383 header.public_header.connection_id = kConnectionId; | |
3384 header.public_header.reset_flag = false; | |
3385 header.public_header.version_flag = false; | |
3386 header.fec_flag = false; | |
3387 header.entropy_flag = true; | |
3388 header.packet_number = kPacketNumber; | |
3389 header.is_in_fec_group = IN_FEC_GROUP; | |
3390 header.fec_group = kPacketNumber; | |
3391 | |
3392 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | |
3393 StringPiece("hello world!")); | |
3394 | |
3395 QuicFrames frames; | |
3396 frames.push_back(QuicFrame(&stream_frame)); | |
3397 // clang-format off | |
3398 unsigned char packet[] = { | |
3399 // public flags (8 byte connection_id) | |
3400 0x3C, | |
3401 // connection_id | |
3402 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
3403 // packet number | |
3404 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
3405 // private flags (entropy, is_in_fec_group) | |
3406 0x03, | |
3407 // FEC group | |
3408 0x00, | |
3409 // frame type (stream frame with fin and data length field) | |
3410 0xFF, | |
3411 // stream id | |
3412 0x04, 0x03, 0x02, 0x01, | |
3413 // offset | |
3414 0x54, 0x76, 0x10, 0x32, 0xDC, 0xFE, 0x98, 0xBA, | |
3415 // data length (since packet is in an FEC group) | |
3416 0x0C, 0x00, | |
3417 // data | |
3418 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', | |
3419 }; | |
3420 // clang-format on | |
3421 | |
3422 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | |
3423 ASSERT_TRUE(data != nullptr); | |
3424 | |
3425 test::CompareCharArraysWithHexError("constructed packet", data->data(), | |
3426 data->length(), AsChars(packet), | |
3427 arraysize(packet)); | |
3428 } | |
3429 | |
3430 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3182 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
3431 QuicPacketHeader header; | 3183 QuicPacketHeader header; |
3432 header.public_header.connection_id = kConnectionId; | 3184 header.public_header.connection_id = kConnectionId; |
3433 header.public_header.reset_flag = false; | 3185 header.public_header.reset_flag = false; |
3434 header.public_header.version_flag = true; | 3186 header.public_header.version_flag = true; |
3435 header.fec_flag = false; | 3187 header.fec_flag = false; |
3436 header.entropy_flag = true; | 3188 header.entropy_flag = true; |
3437 header.packet_number = kPacketNumber; | 3189 header.packet_number = kPacketNumber; |
3438 header.fec_group = 0; | 3190 header.fec_group = 0; |
3439 | 3191 |
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4365 | 4117 |
4366 scoped_ptr<QuicEncryptedPacket> data( | 4118 scoped_ptr<QuicEncryptedPacket> data( |
4367 framer_.BuildPublicResetPacket(reset_packet)); | 4119 framer_.BuildPublicResetPacket(reset_packet)); |
4368 ASSERT_TRUE(data != nullptr); | 4120 ASSERT_TRUE(data != nullptr); |
4369 | 4121 |
4370 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4122 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
4371 data->length(), AsChars(packet), | 4123 data->length(), AsChars(packet), |
4372 arraysize(packet)); | 4124 arraysize(packet)); |
4373 } | 4125 } |
4374 | 4126 |
4375 TEST_P(QuicFramerTest, BuildFecPacket) { | |
4376 QuicPacketHeader header; | |
4377 header.public_header.connection_id = kConnectionId; | |
4378 header.public_header.reset_flag = false; | |
4379 header.public_header.version_flag = false; | |
4380 header.fec_flag = true; | |
4381 header.entropy_flag = true; | |
4382 header.packet_number = kPacketNumber; | |
4383 header.is_in_fec_group = IN_FEC_GROUP; | |
4384 header.fec_group = kPacketNumber - 1; | |
4385 | |
4386 string redundancy = "abcdefghijklmnop"; | |
4387 | |
4388 // clang-format off | |
4389 unsigned char packet[] = { | |
4390 // public flags (8 byte connection_id) | |
4391 0x3C, | |
4392 // connection_id | |
4393 0x10, 0x32, 0x54, 0x76, | |
4394 0x98, 0xBA, 0xDC, 0xFE, | |
4395 // packet number | |
4396 0xBC, 0x9A, 0x78, 0x56, | |
4397 0x34, 0x12, | |
4398 // private flags (entropy & fec group & fec packet) | |
4399 0x07, | |
4400 // first fec protected packet offset | |
4401 0x01, | |
4402 | |
4403 // redundancy | |
4404 'a', 'b', 'c', 'd', | |
4405 'e', 'f', 'g', 'h', | |
4406 'i', 'j', 'k', 'l', | |
4407 'm', 'n', 'o', 'p', | |
4408 }; | |
4409 // clang-format on | |
4410 | |
4411 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); | |
4412 ASSERT_TRUE(data != nullptr); | |
4413 | |
4414 test::CompareCharArraysWithHexError("constructed packet", data->data(), | |
4415 data->length(), AsChars(packet), | |
4416 arraysize(packet)); | |
4417 } | |
4418 | |
4419 TEST_P(QuicFramerTest, EncryptPacket) { | 4127 TEST_P(QuicFramerTest, EncryptPacket) { |
4420 QuicPacketNumber packet_number = kPacketNumber; | 4128 QuicPacketNumber packet_number = kPacketNumber; |
4421 // clang-format off | 4129 // clang-format off |
4422 unsigned char packet[] = { | 4130 unsigned char packet[] = { |
4423 // public flags (8 byte connection_id) | 4131 // public flags (8 byte connection_id) |
4424 0x3C, | 4132 0x3C, |
4425 // connection_id | 4133 // connection_id |
4426 0x10, 0x32, 0x54, 0x76, | 4134 0x10, 0x32, 0x54, 0x76, |
4427 0x98, 0xBA, 0xDC, 0xFE, | 4135 0x98, 0xBA, 0xDC, 0xFE, |
4428 // packet number | 4136 // packet number |
4429 0xBC, 0x9A, 0x78, 0x56, | 4137 0xBC, 0x9A, 0x78, 0x56, |
4430 0x34, 0x12, | 4138 0x34, 0x12, |
4431 // private flags (fec group & fec packet) | 4139 // private flags |
4432 0x06, | 4140 0x00, |
4433 // first fec protected packet offset | |
4434 0x01, | |
4435 | 4141 |
4436 // redundancy | 4142 // redundancy |
4437 'a', 'b', 'c', 'd', | 4143 'a', 'b', 'c', 'd', |
4438 'e', 'f', 'g', 'h', | 4144 'e', 'f', 'g', 'h', |
4439 'i', 'j', 'k', 'l', | 4145 'i', 'j', 'k', 'l', |
4440 'm', 'n', 'o', 'p', | 4146 'm', 'n', 'o', 'p', |
4441 }; | 4147 }; |
4442 // clang-format on | 4148 // clang-format on |
4443 | 4149 |
4444 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4150 scoped_ptr<QuicPacket> raw(new QuicPacket( |
(...skipping 15 matching lines...) Expand all Loading... |
4460 // public flags (version, 8 byte connection_id) | 4166 // public flags (version, 8 byte connection_id) |
4461 0x3D, | 4167 0x3D, |
4462 // connection_id | 4168 // connection_id |
4463 0x10, 0x32, 0x54, 0x76, | 4169 0x10, 0x32, 0x54, 0x76, |
4464 0x98, 0xBA, 0xDC, 0xFE, | 4170 0x98, 0xBA, 0xDC, 0xFE, |
4465 // version tag | 4171 // version tag |
4466 'Q', '.', '1', '0', | 4172 'Q', '.', '1', '0', |
4467 // packet number | 4173 // packet number |
4468 0xBC, 0x9A, 0x78, 0x56, | 4174 0xBC, 0x9A, 0x78, 0x56, |
4469 0x34, 0x12, | 4175 0x34, 0x12, |
4470 // private flags (fec group & fec flags) | 4176 // private flags |
4471 0x06, | 4177 0x00, |
4472 // first fec protected packet offset | |
4473 0x01, | |
4474 | 4178 |
4475 // redundancy | 4179 // redundancy |
4476 'a', 'b', 'c', 'd', | 4180 'a', 'b', 'c', 'd', |
4477 'e', 'f', 'g', 'h', | 4181 'e', 'f', 'g', 'h', |
4478 'i', 'j', 'k', 'l', | 4182 'i', 'j', 'k', 'l', |
4479 'm', 'n', 'o', 'p', | 4183 'm', 'n', 'o', 'p', |
4480 }; | 4184 }; |
4481 // clang-format on | 4185 // clang-format on |
4482 | 4186 |
4483 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4187 scoped_ptr<QuicPacket> raw(new QuicPacket( |
(...skipping 15 matching lines...) Expand all Loading... |
4499 // public flags (version, 8 byte connection_id) | 4203 // public flags (version, 8 byte connection_id) |
4500 0x7C, | 4204 0x7C, |
4501 // connection_id | 4205 // connection_id |
4502 0x10, 0x32, 0x54, 0x76, | 4206 0x10, 0x32, 0x54, 0x76, |
4503 0x98, 0xBA, 0xDC, 0xFE, | 4207 0x98, 0xBA, 0xDC, 0xFE, |
4504 // path_id | 4208 // path_id |
4505 0x42, | 4209 0x42, |
4506 // packet number | 4210 // packet number |
4507 0xBC, 0x9A, 0x78, 0x56, | 4211 0xBC, 0x9A, 0x78, 0x56, |
4508 0x34, 0x12, | 4212 0x34, 0x12, |
4509 // private flags (fec group & fec flags) | 4213 // private flags |
4510 0x06, | 4214 0x00, |
4511 // first fec protected packet offset | |
4512 0x01, | |
4513 | 4215 |
4514 // redundancy | 4216 // redundancy |
4515 'a', 'b', 'c', 'd', | 4217 'a', 'b', 'c', 'd', |
4516 'e', 'f', 'g', 'h', | 4218 'e', 'f', 'g', 'h', |
4517 'i', 'j', 'k', 'l', | 4219 'i', 'j', 'k', 'l', |
4518 'm', 'n', 'o', 'p', | 4220 'm', 'n', 'o', 'p', |
4519 }; | 4221 }; |
4520 // clang-format on | 4222 // clang-format on |
4521 | 4223 |
4522 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4224 scoped_ptr<QuicPacket> raw(new QuicPacket( |
(...skipping 16 matching lines...) Expand all Loading... |
4539 // connection_id | 4241 // connection_id |
4540 0x10, 0x32, 0x54, 0x76, | 4242 0x10, 0x32, 0x54, 0x76, |
4541 0x98, 0xBA, 0xDC, 0xFE, | 4243 0x98, 0xBA, 0xDC, 0xFE, |
4542 // version tag | 4244 // version tag |
4543 'Q', '.', '1', '0', | 4245 'Q', '.', '1', '0', |
4544 // path_id | 4246 // path_id |
4545 0x42, | 4247 0x42, |
4546 // packet number | 4248 // packet number |
4547 0xBC, 0x9A, 0x78, 0x56, | 4249 0xBC, 0x9A, 0x78, 0x56, |
4548 0x34, 0x12, | 4250 0x34, 0x12, |
4549 // private flags (fec group & fec flags) | 4251 // private flags |
4550 0x06, | 4252 0x00, |
4551 // first fec protected packet offset | |
4552 0x01, | |
4553 | 4253 |
4554 // redundancy | 4254 // redundancy |
4555 'a', 'b', 'c', 'd', | 4255 'a', 'b', 'c', 'd', |
4556 'e', 'f', 'g', 'h', | 4256 'e', 'f', 'g', 'h', |
4557 'i', 'j', 'k', 'l', | 4257 'i', 'j', 'k', 'l', |
4558 'm', 'n', 'o', 'p', | 4258 'm', 'n', 'o', 'p', |
4559 }; | 4259 }; |
4560 // clang-format on | 4260 // clang-format on |
4561 | 4261 |
4562 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4262 scoped_ptr<QuicPacket> raw(new QuicPacket( |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4724 | 4424 |
4725 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
4726 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4426 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
4727 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4427 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
4728 ASSERT_TRUE(visitor_.header_.get()); | 4428 ASSERT_TRUE(visitor_.header_.get()); |
4729 EXPECT_TRUE(visitor_.header_->entropy_flag); | 4429 EXPECT_TRUE(visitor_.header_->entropy_flag); |
4730 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 4430 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
4731 EXPECT_FALSE(visitor_.header_->fec_flag); | 4431 EXPECT_FALSE(visitor_.header_->fec_flag); |
4732 }; | 4432 }; |
4733 | 4433 |
4734 TEST_P(QuicFramerTest, FecEntropyTest) { | |
4735 // clang-format off | |
4736 unsigned char packet[] = { | |
4737 // public flags (8 byte connection_id) | |
4738 0x3C, | |
4739 // connection_id | |
4740 0x10, 0x32, 0x54, 0x76, | |
4741 0x98, 0xBA, 0xDC, 0xFE, | |
4742 // packet number | |
4743 0xBC, 0x9A, 0x78, 0x56, | |
4744 0x34, 0x12, | |
4745 // private flags (Entropy & fec group & FEC) | |
4746 0x07, | |
4747 // first fec protected packet offset | |
4748 0xFF, | |
4749 | |
4750 // frame type (stream frame with fin and no length) | |
4751 0xDF, | |
4752 // stream id | |
4753 0x04, 0x03, 0x02, 0x01, | |
4754 // offset | |
4755 0x54, 0x76, 0x10, 0x32, | |
4756 0xDC, 0xFE, 0x98, 0xBA, | |
4757 // data | |
4758 'h', 'e', 'l', 'l', | |
4759 'o', ' ', 'w', 'o', | |
4760 'r', 'l', 'd', '!', | |
4761 }; | |
4762 // clang-format on | |
4763 | |
4764 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
4765 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
4766 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
4767 ASSERT_TRUE(visitor_.header_.get()); | |
4768 EXPECT_TRUE(visitor_.header_->fec_flag); | |
4769 EXPECT_TRUE(visitor_.header_->entropy_flag); | |
4770 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | |
4771 }; | |
4772 | |
4773 TEST_P(QuicFramerTest, StopPacketProcessing) { | 4434 TEST_P(QuicFramerTest, StopPacketProcessing) { |
4774 // clang-format off | 4435 // clang-format off |
4775 unsigned char packet[] = { | 4436 unsigned char packet[] = { |
4776 // public flags (8 byte connection_id) | 4437 // public flags (8 byte connection_id) |
4777 0x3C, | 4438 0x3C, |
4778 // connection_id | 4439 // connection_id |
4779 0x10, 0x32, 0x54, 0x76, | 4440 0x10, 0x32, 0x54, 0x76, |
4780 0x98, 0xBA, 0xDC, 0xFE, | 4441 0x98, 0xBA, 0xDC, 0xFE, |
4781 // packet number | 4442 // packet number |
4782 0xBC, 0x9A, 0x78, 0x56, | 4443 0xBC, 0x9A, 0x78, 0x56, |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4965 'o', ' ', 'w', 'o', | 4626 'o', ' ', 'w', 'o', |
4966 'r', 'l', 'd', '!', | 4627 'r', 'l', 'd', '!', |
4967 }; | 4628 }; |
4968 // clang-format on | 4629 // clang-format on |
4969 | 4630 |
4970 QuicFramerFuzzFunc(packet, arraysize(packet)); | 4631 QuicFramerFuzzFunc(packet, arraysize(packet)); |
4971 } | 4632 } |
4972 | 4633 |
4973 } // namespace test | 4634 } // namespace test |
4974 } // namespace net | 4635 } // namespace net |
OLD | NEW |