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 <algorithm> | 5 #include <algorithm> |
6 #include <map> | 6 #include <map> |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/hash_tables.h" | 10 #include "base/hash_tables.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 (include_version ? kQuicVersionSize : 0); | 50 (include_version ? kQuicVersionSize : 0); |
51 } | 51 } |
52 | 52 |
53 size_t GetSequenceNumberOffset(bool include_version) { | 53 size_t GetSequenceNumberOffset(bool include_version) { |
54 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version); | 54 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version); |
55 } | 55 } |
56 | 56 |
57 // Index into the private flags offset in the data packet header. | 57 // Index into the private flags offset in the data packet header. |
58 size_t GetPrivateFlagsOffset(QuicGuidLength guid_length, bool include_version) { | 58 size_t GetPrivateFlagsOffset(QuicGuidLength guid_length, bool include_version) { |
59 return GetSequenceNumberOffset(guid_length, include_version) + | 59 return GetSequenceNumberOffset(guid_length, include_version) + |
60 kSequenceNumberSize; | 60 PACKET_6BYTE_SEQUENCE_NUMBER; |
61 } | 61 } |
62 | 62 |
63 size_t GetPrivateFlagsOffset(bool include_version) { | 63 size_t GetPrivateFlagsOffset(bool include_version) { |
64 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version); | 64 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version); |
65 } | 65 } |
66 | 66 |
| 67 size_t GetPrivateFlagsOffset(bool include_version, |
| 68 QuicSequenceNumberLength sequence_number_length) { |
| 69 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version) + |
| 70 sequence_number_length; |
| 71 } |
| 72 |
67 // Index into the fec group offset in the header. | 73 // Index into the fec group offset in the header. |
68 size_t GetFecGroupOffset(QuicGuidLength guid_length, bool include_version) { | 74 size_t GetFecGroupOffset(QuicGuidLength guid_length, bool include_version) { |
69 return GetPrivateFlagsOffset(guid_length, include_version) + | 75 return GetPrivateFlagsOffset(guid_length, include_version) + |
70 kPrivateFlagsSize; | 76 kPrivateFlagsSize; |
71 } | 77 } |
72 | 78 |
73 size_t GetFecGroupOffset(bool include_version) { | 79 size_t GetFecGroupOffset(bool include_version) { |
74 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version) + | 80 return GetPrivateFlagsOffset(PACKET_8BYTE_GUID, include_version) + |
75 kPrivateFlagsSize; | 81 kPrivateFlagsSize; |
76 } | 82 } |
77 | 83 |
| 84 size_t GetFecGroupOffset(bool include_version, |
| 85 QuicSequenceNumberLength sequence_number_length) { |
| 86 return GetPrivateFlagsOffset(include_version, sequence_number_length) + |
| 87 kPrivateFlagsSize; |
| 88 } |
| 89 |
78 // Index into the nonce proof of the public reset packet. | 90 // Index into the nonce proof of the public reset packet. |
79 // Public resets always have full guids. | 91 // Public resets always have full guids. |
80 const size_t kPublicResetPacketNonceProofOffset = | 92 const size_t kPublicResetPacketNonceProofOffset = |
81 kGuidOffset + PACKET_8BYTE_GUID; | 93 kGuidOffset + PACKET_8BYTE_GUID; |
82 | 94 |
83 // Index into the rejected sequence number of the public reset packet. | 95 // Index into the rejected sequence number of the public reset packet. |
84 const size_t kPublicResetPacketRejectedSequenceNumberOffset = | 96 const size_t kPublicResetPacketRejectedSequenceNumberOffset = |
85 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize; | 97 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize; |
86 | 98 |
87 class TestEncrypter : public QuicEncrypter { | 99 class TestEncrypter : public QuicEncrypter { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 } | 176 } |
165 QuicPacketSequenceNumber sequence_number_; | 177 QuicPacketSequenceNumber sequence_number_; |
166 string associated_data_; | 178 string associated_data_; |
167 string ciphertext_; | 179 string ciphertext_; |
168 }; | 180 }; |
169 | 181 |
170 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { | 182 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { |
171 public: | 183 public: |
172 TestQuicVisitor() | 184 TestQuicVisitor() |
173 : error_count_(0), | 185 : error_count_(0), |
| 186 version_mismatch_(0), |
174 packet_count_(0), | 187 packet_count_(0), |
175 frame_count_(0), | 188 frame_count_(0), |
176 fec_count_(0), | 189 fec_count_(0), |
177 complete_packets_(0), | 190 complete_packets_(0), |
178 revived_packets_(0), | 191 revived_packets_(0), |
179 accept_packet_(true) { | 192 accept_packet_(true) { |
180 } | 193 } |
181 | 194 |
182 virtual ~TestQuicVisitor() { | 195 virtual ~TestQuicVisitor() { |
183 STLDeleteElements(&stream_frames_); | 196 STLDeleteElements(&stream_frames_); |
(...skipping 18 matching lines...) Expand all Loading... |
202 virtual void OnVersionNegotiationPacket( | 215 virtual void OnVersionNegotiationPacket( |
203 const QuicVersionNegotiationPacket& packet) OVERRIDE { | 216 const QuicVersionNegotiationPacket& packet) OVERRIDE { |
204 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
205 } | 218 } |
206 | 219 |
207 virtual void OnRevivedPacket() OVERRIDE { | 220 virtual void OnRevivedPacket() OVERRIDE { |
208 revived_packets_++; | 221 revived_packets_++; |
209 } | 222 } |
210 | 223 |
211 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE { | 224 virtual bool OnProtocolVersionMismatch(QuicTag version) OVERRIDE { |
212 DCHECK(false); | 225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; |
| 226 version_mismatch_++; |
213 return true; | 227 return true; |
214 } | 228 } |
215 | 229 |
216 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { | 230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { |
217 packet_count_++; | 231 packet_count_++; |
218 header_.reset(new QuicPacketHeader(header)); | 232 header_.reset(new QuicPacketHeader(header)); |
219 return accept_packet_; | 233 return accept_packet_; |
220 } | 234 } |
221 | 235 |
222 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { | 236 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
263 return true; | 277 return true; |
264 } | 278 } |
265 | 279 |
266 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE { | 280 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE { |
267 goaway_frame_ = frame; | 281 goaway_frame_ = frame; |
268 return true; | 282 return true; |
269 } | 283 } |
270 | 284 |
271 // Counters from the visitor_ callbacks. | 285 // Counters from the visitor_ callbacks. |
272 int error_count_; | 286 int error_count_; |
| 287 int version_mismatch_; |
273 int packet_count_; | 288 int packet_count_; |
274 int frame_count_; | 289 int frame_count_; |
275 int fec_count_; | 290 int fec_count_; |
276 int complete_packets_; | 291 int complete_packets_; |
277 int revived_packets_; | 292 int revived_packets_; |
278 bool accept_packet_; | 293 bool accept_packet_; |
279 | 294 |
280 scoped_ptr<QuicPacketHeader> header_; | 295 scoped_ptr<QuicPacketHeader> header_; |
281 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; | 296 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; |
282 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; | 297 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
329 bool CheckDecryption(const QuicEncryptedPacket& encrypted, | 344 bool CheckDecryption(const QuicEncryptedPacket& encrypted, |
330 bool includes_version) { | 345 bool includes_version) { |
331 if (visitor_.header_->packet_sequence_number != | 346 if (visitor_.header_->packet_sequence_number != |
332 decrypter_->sequence_number_) { | 347 decrypter_->sequence_number_) { |
333 LOG(ERROR) << "Decrypted incorrect packet sequence number. expected " | 348 LOG(ERROR) << "Decrypted incorrect packet sequence number. expected " |
334 << visitor_.header_->packet_sequence_number << " actual: " | 349 << visitor_.header_->packet_sequence_number << " actual: " |
335 << decrypter_->sequence_number_; | 350 << decrypter_->sequence_number_; |
336 return false; | 351 return false; |
337 } | 352 } |
338 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( | 353 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( |
339 encrypted, PACKET_8BYTE_GUID, includes_version) != | 354 encrypted, PACKET_8BYTE_GUID, |
340 decrypter_->associated_data_) { | 355 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) != |
| 356 decrypter_->associated_data_) { |
341 LOG(ERROR) << "Decrypted incorrect associated data. expected " | 357 LOG(ERROR) << "Decrypted incorrect associated data. expected " |
342 << QuicFramer::GetAssociatedDataFromEncryptedPacket( | 358 << QuicFramer::GetAssociatedDataFromEncryptedPacket( |
343 encrypted, PACKET_8BYTE_GUID, includes_version) | 359 encrypted, PACKET_8BYTE_GUID, |
| 360 includes_version, PACKET_6BYTE_SEQUENCE_NUMBER) |
344 << " actual: " << decrypter_->associated_data_; | 361 << " actual: " << decrypter_->associated_data_; |
345 return false; | 362 return false; |
346 } | 363 } |
347 StringPiece ciphertext(encrypted.AsStringPiece().substr( | 364 StringPiece ciphertext(encrypted.AsStringPiece().substr( |
348 GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version))); | 365 GetStartOfEncryptedData(PACKET_8BYTE_GUID, includes_version, |
| 366 PACKET_6BYTE_SEQUENCE_NUMBER))); |
349 if (ciphertext != decrypter_->ciphertext_) { | 367 if (ciphertext != decrypter_->ciphertext_) { |
350 LOG(ERROR) << "Decrypted incorrect chipertext data. expected " | 368 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected " |
351 << ciphertext << " actual: " | 369 << ciphertext << " actual: " |
352 << decrypter_->ciphertext_; | 370 << decrypter_->ciphertext_; |
353 return false; | 371 return false; |
354 } | 372 } |
355 return true; | 373 return true; |
356 } | 374 } |
357 | 375 |
358 char* AsChars(unsigned char* data) { | 376 char* AsChars(unsigned char* data) { |
359 return reinterpret_cast<char*>(data); | 377 return reinterpret_cast<char*>(data); |
360 } | 378 } |
(...skipping 16 matching lines...) Expand all Loading... |
377 } | 395 } |
378 | 396 |
379 void CheckCalculatePacketSequenceNumber( | 397 void CheckCalculatePacketSequenceNumber( |
380 QuicPacketSequenceNumber expected_sequence_number, | 398 QuicPacketSequenceNumber expected_sequence_number, |
381 QuicPacketSequenceNumber last_sequence_number) { | 399 QuicPacketSequenceNumber last_sequence_number) { |
382 QuicPacketSequenceNumber wire_sequence_number = | 400 QuicPacketSequenceNumber wire_sequence_number = |
383 expected_sequence_number & kMask; | 401 expected_sequence_number & kMask; |
384 QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number); | 402 QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number); |
385 EXPECT_EQ(expected_sequence_number, | 403 EXPECT_EQ(expected_sequence_number, |
386 QuicFramerPeer::CalculatePacketSequenceNumberFromWire( | 404 QuicFramerPeer::CalculatePacketSequenceNumberFromWire( |
387 &framer_, wire_sequence_number)) | 405 &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number)) |
388 << "last_sequence_number: " << last_sequence_number | 406 << "last_sequence_number: " << last_sequence_number |
389 << "wire_sequence_number: " << wire_sequence_number; | 407 << " wire_sequence_number: " << wire_sequence_number; |
390 } | 408 } |
391 | 409 |
392 test::TestEncrypter* encrypter_; | 410 test::TestEncrypter* encrypter_; |
393 test::TestDecrypter* decrypter_; | 411 test::TestDecrypter* decrypter_; |
394 QuicTime start_; | 412 QuicTime start_; |
395 QuicFramer framer_; | 413 QuicFramer framer_; |
396 test::TestQuicVisitor visitor_; | 414 test::TestQuicVisitor visitor_; |
397 test::TestEntropyCalculator entropy_calculator_; | 415 test::TestEntropyCalculator entropy_calculator_; |
398 }; | 416 }; |
399 | 417 |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
474 } | 492 } |
475 } | 493 } |
476 } | 494 } |
477 | 495 |
478 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { | 496 TEST_F(QuicFramerTest, CalculatePacketSequenceNumberFromWireNearNextMax) { |
479 const uint64 max_number = numeric_limits<uint64>::max(); | 497 const uint64 max_number = numeric_limits<uint64>::max(); |
480 const uint64 max_epoch = max_number & ~kMask; | 498 const uint64 max_epoch = max_number & ~kMask; |
481 | 499 |
482 // Cases where the last number was close to the end of the range | 500 // Cases where the last number was close to the end of the range |
483 for (uint64 i = 0; i < 10; i++) { | 501 for (uint64 i = 0; i < 10; i++) { |
484 QuicPacketSequenceNumber last = max_number - i; | 502 // Subtract 1, because the expected next sequence number is 1 more than the |
| 503 // last sequence number. |
| 504 QuicPacketSequenceNumber last = max_number - i - 1; |
485 | 505 |
486 // Small numbers should not wrap (because they have nowhere to go. | 506 // Small numbers should not wrap, because they have nowhere to go. |
487 for (uint64 j = 0; j < 10; j++) { | 507 for (uint64 j = 0; j < 10; j++) { |
488 CheckCalculatePacketSequenceNumber(max_epoch + j, last); | 508 CheckCalculatePacketSequenceNumber(max_epoch + j, last); |
489 } | 509 } |
490 | 510 |
491 // Large numbers should not wrap either. | 511 // Large numbers should not wrap either. |
492 for (uint64 j = 0; j < 10; j++) { | 512 for (uint64 j = 0; j < 10; j++) { |
493 uint64 num = kEpoch - 1 - j; | 513 uint64 num = kEpoch - 1 - j; |
494 CheckCalculatePacketSequenceNumber(max_epoch + num, last); | 514 CheckCalculatePacketSequenceNumber(max_epoch + num, last); |
495 } | 515 } |
496 } | 516 } |
497 } | 517 } |
498 | 518 |
499 TEST_F(QuicFramerTest, EmptyPacket) { | 519 TEST_F(QuicFramerTest, EmptyPacket) { |
500 char packet[] = { 0x00 }; | 520 char packet[] = { 0x00 }; |
501 QuicEncryptedPacket encrypted(packet, 0, false); | 521 QuicEncryptedPacket encrypted(packet, 0, false); |
502 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 522 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
503 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 523 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
504 } | 524 } |
505 | 525 |
506 TEST_F(QuicFramerTest, LargePacket) { | 526 TEST_F(QuicFramerTest, LargePacket) { |
507 unsigned char packet[kMaxPacketSize + 1] = { | 527 unsigned char packet[kMaxPacketSize + 1] = { |
508 // public flags (8 byte guid) | 528 // public flags (8 byte guid) |
509 0x0C, | 529 0x3C, |
510 // guid | 530 // guid |
511 0x10, 0x32, 0x54, 0x76, | 531 0x10, 0x32, 0x54, 0x76, |
512 0x98, 0xBA, 0xDC, 0xFE, | 532 0x98, 0xBA, 0xDC, 0xFE, |
513 // packet sequence number | 533 // packet sequence number |
514 0xBC, 0x9A, 0x78, 0x56, | 534 0xBC, 0x9A, 0x78, 0x56, |
515 0x34, 0x12, | 535 0x34, 0x12, |
516 // private flags | 536 // private flags |
517 0x00, | 537 0x00, |
518 }; | 538 }; |
519 | 539 |
520 memset(packet + GetPacketHeaderSize( | 540 memset(packet + GetPacketHeaderSize( |
521 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), 0, | 541 PACKET_8BYTE_GUID, !kIncludeVersion, |
| 542 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 0, |
522 kMaxPacketSize - GetPacketHeaderSize( | 543 kMaxPacketSize - GetPacketHeaderSize( |
523 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP) + 1); | 544 PACKET_8BYTE_GUID, !kIncludeVersion, |
| 545 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP) + 1); |
524 | 546 |
525 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 547 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
526 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 548 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
527 | 549 |
528 ASSERT_TRUE(visitor_.header_.get()); | 550 ASSERT_TRUE(visitor_.header_.get()); |
529 // Make sure we've parsed the packet header, so we can send an error. | 551 // Make sure we've parsed the packet header, so we can send an error. |
530 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 552 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
531 visitor_.header_->public_header.guid); | 553 visitor_.header_->public_header.guid); |
532 // Make sure the correct error is propagated. | 554 // Make sure the correct error is propagated. |
533 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 555 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
534 } | 556 } |
535 | 557 |
536 TEST_F(QuicFramerTest, PacketHeader) { | 558 TEST_F(QuicFramerTest, PacketHeader) { |
537 unsigned char packet[] = { | 559 unsigned char packet[] = { |
538 // public flags (8 byte guid) | 560 // public flags (8 byte guid) |
539 0x0C, | 561 0x3C, |
540 // guid | 562 // guid |
541 0x10, 0x32, 0x54, 0x76, | 563 0x10, 0x32, 0x54, 0x76, |
542 0x98, 0xBA, 0xDC, 0xFE, | 564 0x98, 0xBA, 0xDC, 0xFE, |
543 // packet sequence number | 565 // packet sequence number |
544 0xBC, 0x9A, 0x78, 0x56, | 566 0xBC, 0x9A, 0x78, 0x56, |
545 0x34, 0x12, | 567 0x34, 0x12, |
546 // private flags | 568 // private flags |
547 0x00, | 569 0x00, |
548 }; | 570 }; |
549 | 571 |
550 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 572 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
551 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 573 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
552 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 574 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
553 ASSERT_TRUE(visitor_.header_.get()); | 575 ASSERT_TRUE(visitor_.header_.get()); |
554 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 576 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
555 visitor_.header_->public_header.guid); | 577 visitor_.header_->public_header.guid); |
556 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 578 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
557 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 579 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
558 EXPECT_FALSE(visitor_.header_->fec_flag); | 580 EXPECT_FALSE(visitor_.header_->fec_flag); |
559 EXPECT_FALSE(visitor_.header_->entropy_flag); | 581 EXPECT_FALSE(visitor_.header_->entropy_flag); |
560 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 582 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
561 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 583 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
562 visitor_.header_->packet_sequence_number); | 584 visitor_.header_->packet_sequence_number); |
563 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 585 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
564 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 586 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
565 | 587 |
566 // Now test framing boundaries | 588 // Now test framing boundaries |
567 for (size_t i = 0; | 589 for (size_t i = 0; |
568 i < GetPacketHeaderSize( | 590 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
569 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { | 591 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 592 ++i) { |
570 string expected_error; | 593 string expected_error; |
571 if (i < kGuidOffset) { | 594 if (i < kGuidOffset) { |
572 expected_error = "Unable to read public flags."; | 595 expected_error = "Unable to read public flags."; |
573 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { | 596 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
574 expected_error = "Unable to read GUID."; | 597 expected_error = "Unable to read GUID."; |
575 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { | 598 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion)) { |
576 expected_error = "Unable to read sequence number."; | 599 expected_error = "Unable to read sequence number."; |
577 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { | 600 } else if (i < GetFecGroupOffset(!kIncludeVersion)) { |
578 expected_error = "Unable to read private flags."; | 601 expected_error = "Unable to read private flags."; |
579 } else { | 602 } else { |
580 expected_error = "Unable to read first fec protected packet offset."; | 603 expected_error = "Unable to read first fec protected packet offset."; |
581 } | 604 } |
582 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 605 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
583 } | 606 } |
584 } | 607 } |
585 | 608 |
586 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) { | 609 TEST_F(QuicFramerTest, PacketHeaderWith4ByteGuid) { |
587 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 610 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
588 GG_UINT64_C(0xFEDCBA9876543210)); | 611 GG_UINT64_C(0xFEDCBA9876543210)); |
589 | 612 |
590 unsigned char packet[] = { | 613 unsigned char packet[] = { |
591 // public flags (4 byte guid) | 614 // public flags (4 byte guid) |
592 0x08, | 615 0x38, |
593 // guid | 616 // guid |
594 0x10, 0x32, 0x54, 0x76, | 617 0x10, 0x32, 0x54, 0x76, |
595 // packet sequence number | 618 // packet sequence number |
596 0xBC, 0x9A, 0x78, 0x56, | 619 0xBC, 0x9A, 0x78, 0x56, |
597 0x34, 0x12, | 620 0x34, 0x12, |
598 // private flags | 621 // private flags |
599 0x00, | 622 0x00, |
600 }; | 623 }; |
601 | 624 |
602 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 625 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
603 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 626 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
604 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 627 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
605 ASSERT_TRUE(visitor_.header_.get()); | 628 ASSERT_TRUE(visitor_.header_.get()); |
606 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 629 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
607 visitor_.header_->public_header.guid); | 630 visitor_.header_->public_header.guid); |
608 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 631 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
609 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 632 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
610 EXPECT_FALSE(visitor_.header_->fec_flag); | 633 EXPECT_FALSE(visitor_.header_->fec_flag); |
611 EXPECT_FALSE(visitor_.header_->entropy_flag); | 634 EXPECT_FALSE(visitor_.header_->entropy_flag); |
612 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 635 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
613 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 636 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
614 visitor_.header_->packet_sequence_number); | 637 visitor_.header_->packet_sequence_number); |
615 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 638 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
616 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 639 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
617 | 640 |
618 // Now test framing boundaries | 641 // Now test framing boundaries |
619 for (size_t i = 0; | 642 for (size_t i = 0; |
620 i < GetPacketHeaderSize( | 643 i < GetPacketHeaderSize(PACKET_4BYTE_GUID, !kIncludeVersion, |
621 PACKET_4BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { | 644 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 645 ++i) { |
622 string expected_error; | 646 string expected_error; |
623 if (i < kGuidOffset) { | 647 if (i < kGuidOffset) { |
624 expected_error = "Unable to read public flags."; | 648 expected_error = "Unable to read public flags."; |
625 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_GUID, | 649 } else if (i < GetSequenceNumberOffset(PACKET_4BYTE_GUID, |
626 !kIncludeVersion)) { | 650 !kIncludeVersion)) { |
627 expected_error = "Unable to read GUID."; | 651 expected_error = "Unable to read GUID."; |
628 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_GUID, | 652 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_GUID, |
629 !kIncludeVersion)) { | 653 !kIncludeVersion)) { |
630 expected_error = "Unable to read sequence number."; | 654 expected_error = "Unable to read sequence number."; |
631 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { | 655 } else if (i < GetFecGroupOffset(PACKET_4BYTE_GUID, !kIncludeVersion)) { |
632 expected_error = "Unable to read private flags."; | 656 expected_error = "Unable to read private flags."; |
633 } else { | 657 } else { |
634 expected_error = "Unable to read first fec protected packet offset."; | 658 expected_error = "Unable to read first fec protected packet offset."; |
635 } | 659 } |
636 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 660 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
637 } | 661 } |
638 } | 662 } |
639 | 663 |
640 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) { | 664 TEST_F(QuicFramerTest, PacketHeader1ByteGuid) { |
641 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 665 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
642 GG_UINT64_C(0xFEDCBA9876543210)); | 666 GG_UINT64_C(0xFEDCBA9876543210)); |
643 | 667 |
644 unsigned char packet[] = { | 668 unsigned char packet[] = { |
645 // public flags (1 byte guid) | 669 // public flags (1 byte guid) |
646 0x04, | 670 0x34, |
647 // guid | 671 // guid |
648 0x10, | 672 0x10, |
649 // packet sequence number | 673 // packet sequence number |
650 0xBC, 0x9A, 0x78, 0x56, | 674 0xBC, 0x9A, 0x78, 0x56, |
651 0x34, 0x12, | 675 0x34, 0x12, |
652 // private flags | 676 // private flags |
653 0x00, | 677 0x00, |
654 }; | 678 }; |
655 | 679 |
656 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 680 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
657 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 681 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
658 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 682 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
659 ASSERT_TRUE(visitor_.header_.get()); | 683 ASSERT_TRUE(visitor_.header_.get()); |
660 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 684 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
661 visitor_.header_->public_header.guid); | 685 visitor_.header_->public_header.guid); |
662 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 686 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
663 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 687 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
664 EXPECT_FALSE(visitor_.header_->fec_flag); | 688 EXPECT_FALSE(visitor_.header_->fec_flag); |
665 EXPECT_FALSE(visitor_.header_->entropy_flag); | 689 EXPECT_FALSE(visitor_.header_->entropy_flag); |
666 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 690 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
667 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 691 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
668 visitor_.header_->packet_sequence_number); | 692 visitor_.header_->packet_sequence_number); |
669 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 693 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
670 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 694 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
671 | 695 |
672 // Now test framing boundaries | 696 // Now test framing boundaries |
673 for (size_t i = 0; | 697 for (size_t i = 0; |
674 i < GetPacketHeaderSize( | 698 i < GetPacketHeaderSize(PACKET_1BYTE_GUID, !kIncludeVersion, |
675 PACKET_1BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { | 699 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 700 ++i) { |
676 string expected_error; | 701 string expected_error; |
677 if (i < kGuidOffset) { | 702 if (i < kGuidOffset) { |
678 expected_error = "Unable to read public flags."; | 703 expected_error = "Unable to read public flags."; |
679 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_GUID, | 704 } else if (i < GetSequenceNumberOffset(PACKET_1BYTE_GUID, |
680 !kIncludeVersion)) { | 705 !kIncludeVersion)) { |
681 expected_error = "Unable to read GUID."; | 706 expected_error = "Unable to read GUID."; |
682 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { | 707 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { |
683 expected_error = "Unable to read sequence number."; | 708 expected_error = "Unable to read sequence number."; |
684 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { | 709 } else if (i < GetFecGroupOffset(PACKET_1BYTE_GUID, !kIncludeVersion)) { |
685 expected_error = "Unable to read private flags."; | 710 expected_error = "Unable to read private flags."; |
686 } else { | 711 } else { |
687 expected_error = "Unable to read first fec protected packet offset."; | 712 expected_error = "Unable to read first fec protected packet offset."; |
688 } | 713 } |
689 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
690 } | 715 } |
691 } | 716 } |
692 | 717 |
693 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) { | 718 TEST_F(QuicFramerTest, PacketHeaderWith0ByteGuid) { |
694 QuicFramerPeer::SetLastSerializedGuid(&framer_, | 719 QuicFramerPeer::SetLastSerializedGuid(&framer_, |
695 GG_UINT64_C(0xFEDCBA9876543210)); | 720 GG_UINT64_C(0xFEDCBA9876543210)); |
696 | 721 |
697 unsigned char packet[] = { | 722 unsigned char packet[] = { |
698 // public flags (0 byte guid) | 723 // public flags (0 byte guid) |
699 0x00, | 724 0x30, |
700 // guid | 725 // guid |
701 // packet sequence number | 726 // packet sequence number |
702 0xBC, 0x9A, 0x78, 0x56, | 727 0xBC, 0x9A, 0x78, 0x56, |
703 0x34, 0x12, | 728 0x34, 0x12, |
704 // private flags | 729 // private flags |
705 0x00, | 730 0x00, |
706 }; | 731 }; |
707 | 732 |
708 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 733 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
709 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 734 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
710 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 735 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
711 ASSERT_TRUE(visitor_.header_.get()); | 736 ASSERT_TRUE(visitor_.header_.get()); |
712 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 737 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
713 visitor_.header_->public_header.guid); | 738 visitor_.header_->public_header.guid); |
714 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 739 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
715 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 740 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
716 EXPECT_FALSE(visitor_.header_->fec_flag); | 741 EXPECT_FALSE(visitor_.header_->fec_flag); |
717 EXPECT_FALSE(visitor_.header_->entropy_flag); | 742 EXPECT_FALSE(visitor_.header_->entropy_flag); |
718 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 743 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
719 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 744 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
720 visitor_.header_->packet_sequence_number); | 745 visitor_.header_->packet_sequence_number); |
721 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 746 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
722 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 747 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
723 | 748 |
724 // Now test framing boundaries | 749 // Now test framing boundaries |
725 for (size_t i = 0; | 750 for (size_t i = 0; |
726 i < GetPacketHeaderSize( | 751 i < GetPacketHeaderSize(PACKET_0BYTE_GUID, !kIncludeVersion, |
727 PACKET_0BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { | 752 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 753 ++i) { |
728 string expected_error; | 754 string expected_error; |
729 if (i < kGuidOffset) { | 755 if (i < kGuidOffset) { |
730 expected_error = "Unable to read public flags."; | 756 expected_error = "Unable to read public flags."; |
731 } else if (i < GetSequenceNumberOffset(PACKET_0BYTE_GUID, | 757 } else if (i < GetSequenceNumberOffset(PACKET_0BYTE_GUID, |
732 !kIncludeVersion)) { | 758 !kIncludeVersion)) { |
733 expected_error = "Unable to read GUID."; | 759 expected_error = "Unable to read GUID."; |
734 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { | 760 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { |
735 expected_error = "Unable to read sequence number."; | 761 expected_error = "Unable to read sequence number."; |
736 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { | 762 } else if (i < GetFecGroupOffset(PACKET_0BYTE_GUID, !kIncludeVersion)) { |
737 expected_error = "Unable to read private flags."; | 763 expected_error = "Unable to read private flags."; |
738 } else { | 764 } else { |
739 expected_error = "Unable to read first fec protected packet offset."; | 765 expected_error = "Unable to read first fec protected packet offset."; |
740 } | 766 } |
741 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 767 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
742 } | 768 } |
743 } | 769 } |
744 | 770 |
745 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) { | 771 TEST_F(QuicFramerTest, PacketHeaderWithVersionFlag) { |
746 unsigned char packet[] = { | 772 unsigned char packet[] = { |
747 // public flags (version) | 773 // public flags (version) |
748 0x0D, | 774 0x3D, |
749 // guid | 775 // guid |
750 0x10, 0x32, 0x54, 0x76, | 776 0x10, 0x32, 0x54, 0x76, |
751 0x98, 0xBA, 0xDC, 0xFE, | 777 0x98, 0xBA, 0xDC, 0xFE, |
752 // version tag | 778 // version tag |
753 'Q', '0', '0', '5', | 779 'Q', '0', '0', '6', |
754 // packet sequence number | 780 // packet sequence number |
755 0xBC, 0x9A, 0x78, 0x56, | 781 0xBC, 0x9A, 0x78, 0x56, |
756 0x34, 0x12, | 782 0x34, 0x12, |
757 // private flags | 783 // private flags |
758 0x00, | 784 0x00, |
759 }; | 785 }; |
760 | 786 |
761 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 787 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
762 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 788 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
763 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 789 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
764 ASSERT_TRUE(visitor_.header_.get()); | 790 ASSERT_TRUE(visitor_.header_.get()); |
765 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), | 791 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
766 visitor_.header_->public_header.guid); | 792 visitor_.header_->public_header.guid); |
767 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 793 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
768 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 794 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
769 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]); | 795 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]); |
770 EXPECT_FALSE(visitor_.header_->fec_flag); | 796 EXPECT_FALSE(visitor_.header_->fec_flag); |
771 EXPECT_FALSE(visitor_.header_->entropy_flag); | 797 EXPECT_FALSE(visitor_.header_->entropy_flag); |
772 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 798 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
773 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 799 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
774 visitor_.header_->packet_sequence_number); | 800 visitor_.header_->packet_sequence_number); |
775 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 801 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
776 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 802 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
777 | 803 |
778 // Now test framing boundaries | 804 // Now test framing boundaries |
779 for (size_t i = 0; | 805 for (size_t i = 0; |
780 i < GetPacketHeaderSize( | 806 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, |
781 PACKET_8BYTE_GUID, kIncludeVersion, NOT_IN_FEC_GROUP); ++i) { | 807 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 808 ++i) { |
782 string expected_error; | 809 string expected_error; |
783 if (i < kGuidOffset) { | 810 if (i < kGuidOffset) { |
784 expected_error = "Unable to read public flags."; | 811 expected_error = "Unable to read public flags."; |
785 } else if (i < kVersionOffset) { | 812 } else if (i < kVersionOffset) { |
786 expected_error = "Unable to read GUID."; | 813 expected_error = "Unable to read GUID."; |
787 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { | 814 } else if (i < GetSequenceNumberOffset(kIncludeVersion)) { |
788 expected_error = "Unable to read protocol version."; | 815 expected_error = "Unable to read protocol version."; |
789 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { | 816 } else if (i < GetPrivateFlagsOffset(kIncludeVersion)) { |
790 expected_error = "Unable to read sequence number."; | 817 expected_error = "Unable to read sequence number."; |
791 } else if (i < GetFecGroupOffset(kIncludeVersion)) { | 818 } else if (i < GetFecGroupOffset(kIncludeVersion)) { |
792 expected_error = "Unable to read private flags."; | 819 expected_error = "Unable to read private flags."; |
793 } else { | 820 } else { |
794 expected_error = "Unable to read first fec protected packet offset."; | 821 expected_error = "Unable to read first fec protected packet offset."; |
795 } | 822 } |
796 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 823 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
797 } | 824 } |
798 } | 825 } |
799 | 826 |
| 827 TEST_F(QuicFramerTest, PacketHeaderWith4ByteSequenceNumber) { |
| 828 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
| 829 GG_UINT64_C(0x123456789ABA)); |
| 830 |
| 831 unsigned char packet[] = { |
| 832 // public flags (8 byte guid and 4 byte sequence number) |
| 833 0x2C, |
| 834 // guid |
| 835 0x10, 0x32, 0x54, 0x76, |
| 836 0x98, 0xBA, 0xDC, 0xFE, |
| 837 // packet sequence number |
| 838 0xBC, 0x9A, 0x78, 0x56, |
| 839 // private flags |
| 840 0x00, |
| 841 }; |
| 842 |
| 843 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 844 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 845 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
| 846 ASSERT_TRUE(visitor_.header_.get()); |
| 847 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
| 848 visitor_.header_->public_header.guid); |
| 849 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 850 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 851 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 852 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 853 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 854 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
| 855 visitor_.header_->packet_sequence_number); |
| 856 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 857 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 858 |
| 859 // Now test framing boundaries |
| 860 for (size_t i = 0; |
| 861 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 862 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 863 ++i) { |
| 864 string expected_error; |
| 865 if (i < kGuidOffset) { |
| 866 expected_error = "Unable to read public flags."; |
| 867 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
| 868 expected_error = "Unable to read GUID."; |
| 869 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 870 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
| 871 expected_error = "Unable to read sequence number."; |
| 872 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 873 PACKET_4BYTE_SEQUENCE_NUMBER)) { |
| 874 expected_error = "Unable to read private flags."; |
| 875 } else { |
| 876 expected_error = "Unable to read first fec protected packet offset."; |
| 877 } |
| 878 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 879 } |
| 880 } |
| 881 |
| 882 TEST_F(QuicFramerTest, PacketHeaderWith2ByteSequenceNumber) { |
| 883 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
| 884 GG_UINT64_C(0x123456789ABA)); |
| 885 |
| 886 unsigned char packet[] = { |
| 887 // public flags (8 byte guid and 2 byte sequence number) |
| 888 0x1C, |
| 889 // guid |
| 890 0x10, 0x32, 0x54, 0x76, |
| 891 0x98, 0xBA, 0xDC, 0xFE, |
| 892 // packet sequence number |
| 893 0xBC, 0x9A, |
| 894 // private flags |
| 895 0x00, |
| 896 }; |
| 897 |
| 898 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 899 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 900 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
| 901 ASSERT_TRUE(visitor_.header_.get()); |
| 902 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
| 903 visitor_.header_->public_header.guid); |
| 904 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 905 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 906 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 907 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 908 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 909 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
| 910 visitor_.header_->packet_sequence_number); |
| 911 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 912 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 913 |
| 914 // Now test framing boundaries |
| 915 for (size_t i = 0; |
| 916 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 917 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 918 ++i) { |
| 919 string expected_error; |
| 920 if (i < kGuidOffset) { |
| 921 expected_error = "Unable to read public flags."; |
| 922 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
| 923 expected_error = "Unable to read GUID."; |
| 924 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 925 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
| 926 expected_error = "Unable to read sequence number."; |
| 927 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 928 PACKET_2BYTE_SEQUENCE_NUMBER)) { |
| 929 expected_error = "Unable to read private flags."; |
| 930 } else { |
| 931 expected_error = "Unable to read first fec protected packet offset."; |
| 932 } |
| 933 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 934 } |
| 935 } |
| 936 |
| 937 TEST_F(QuicFramerTest, PacketHeaderWith1ByteSequenceNumber) { |
| 938 QuicFramerPeer::SetLastSequenceNumber(&framer_, |
| 939 GG_UINT64_C(0x123456789ABA)); |
| 940 |
| 941 unsigned char packet[] = { |
| 942 // public flags (8 byte guid and 1 byte sequence number) |
| 943 0x0C, |
| 944 // guid |
| 945 0x10, 0x32, 0x54, 0x76, |
| 946 0x98, 0xBA, 0xDC, 0xFE, |
| 947 // packet sequence number |
| 948 0xBC, |
| 949 // private flags |
| 950 0x00, |
| 951 }; |
| 952 |
| 953 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 954 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 955 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
| 956 ASSERT_TRUE(visitor_.header_.get()); |
| 957 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), |
| 958 visitor_.header_->public_header.guid); |
| 959 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 960 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 961 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 962 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 963 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 964 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
| 965 visitor_.header_->packet_sequence_number); |
| 966 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 967 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
| 968 |
| 969 // Now test framing boundaries |
| 970 for (size_t i = 0; |
| 971 i < GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 972 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 973 ++i) { |
| 974 string expected_error; |
| 975 if (i < kGuidOffset) { |
| 976 expected_error = "Unable to read public flags."; |
| 977 } else if (i < GetSequenceNumberOffset(!kIncludeVersion)) { |
| 978 expected_error = "Unable to read GUID."; |
| 979 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, |
| 980 PACKET_1BYTE_SEQUENCE_NUMBER)) { |
| 981 expected_error = "Unable to read sequence number."; |
| 982 } else if (i < GetFecGroupOffset(!kIncludeVersion, |
| 983 PACKET_1BYTE_SEQUENCE_NUMBER)) { |
| 984 expected_error = "Unable to read private flags."; |
| 985 } else { |
| 986 expected_error = "Unable to read first fec protected packet offset."; |
| 987 } |
| 988 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 989 } |
| 990 } |
800 | 991 |
801 TEST_F(QuicFramerTest, InvalidPublicFlag) { | 992 TEST_F(QuicFramerTest, InvalidPublicFlag) { |
802 unsigned char packet[] = { | 993 unsigned char packet[] = { |
803 // public flags (8 byte guid) | 994 // public flags |
804 0x10, | 995 0x40, |
805 // guid | 996 // guid |
806 0x10, 0x32, 0x54, 0x76, | 997 0x10, 0x32, 0x54, 0x76, |
807 0x98, 0xBA, 0xDC, 0xFE, | 998 0x98, 0xBA, 0xDC, 0xFE, |
808 // packet sequence number | 999 // packet sequence number |
809 0xBC, 0x9A, 0x78, 0x56, | 1000 0xBC, 0x9A, 0x78, 0x56, |
810 0x34, 0x12, | 1001 0x34, 0x12, |
| 1002 // private flags |
| 1003 0x00, |
| 1004 |
| 1005 // frame count |
| 1006 0x01, |
| 1007 // frame type (stream frame) |
| 1008 0x01, |
| 1009 // stream id |
| 1010 0x04, 0x03, 0x02, 0x01, |
| 1011 // fin |
| 1012 0x01, |
| 1013 // offset |
| 1014 0x54, 0x76, 0x10, 0x32, |
| 1015 0xDC, 0xFE, 0x98, 0xBA, |
| 1016 // data length |
| 1017 0x0c, 0x00, |
| 1018 // data |
| 1019 'h', 'e', 'l', 'l', |
| 1020 'o', ' ', 'w', 'o', |
| 1021 'r', 'l', 'd', '!', |
| 1022 }; |
| 1023 CheckProcessingFails(packet, |
| 1024 arraysize(packet), |
| 1025 "Illegal public flags value.", |
| 1026 QUIC_INVALID_PACKET_HEADER); |
| 1027 }; |
| 1028 |
| 1029 TEST_F(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { |
| 1030 unsigned char packet[] = { |
| 1031 // public flags (8 byte guid and version flag and an unknown flag) |
| 1032 0x4D, |
| 1033 // guid |
| 1034 0x10, 0x32, 0x54, 0x76, |
| 1035 0x98, 0xBA, 0xDC, 0xFE, |
| 1036 // version tag |
| 1037 'Q', '0', '0', '6', |
| 1038 // packet sequence number |
| 1039 0xBC, 0x9A, 0x78, 0x56, |
| 1040 0x34, 0x12, |
811 // private flags | 1041 // private flags |
812 0x00, | 1042 0x00, |
813 | 1043 |
814 // frame count | 1044 // frame count |
815 0x01, | 1045 0x01, |
816 // frame type (stream frame) | 1046 // frame type (stream frame) |
817 0x01, | 1047 0x01, |
818 // stream id | 1048 // stream id |
819 0x04, 0x03, 0x02, 0x01, | 1049 0x04, 0x03, 0x02, 0x01, |
820 // fin | 1050 // fin |
821 0x01, | 1051 0x01, |
822 // offset | 1052 // offset |
823 0x54, 0x76, 0x10, 0x32, | 1053 0x54, 0x76, 0x10, 0x32, |
824 0xDC, 0xFE, 0x98, 0xBA, | 1054 0xDC, 0xFE, 0x98, 0xBA, |
825 // data length | 1055 // data length |
826 0x0c, 0x00, | 1056 0x0c, 0x00, |
827 // data | 1057 // data |
828 'h', 'e', 'l', 'l', | 1058 'h', 'e', 'l', 'l', |
829 'o', ' ', 'w', 'o', | 1059 'o', ' ', 'w', 'o', |
830 'r', 'l', 'd', '!', | 1060 'r', 'l', 'd', '!', |
831 }; | 1061 }; |
832 CheckProcessingFails(packet, | 1062 CheckProcessingFails(packet, |
833 arraysize(packet), | 1063 arraysize(packet), |
834 "Illegal public flags value.", | 1064 "Illegal public flags value.", |
835 QUIC_INVALID_PACKET_HEADER); | 1065 QUIC_INVALID_PACKET_HEADER); |
836 }; | 1066 }; |
837 | 1067 |
| 1068 TEST_F(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { |
| 1069 unsigned char packet[] = { |
| 1070 // public flags (8 byte guid, version flag and an unknown flag) |
| 1071 0x7D, |
| 1072 // guid |
| 1073 0x10, 0x32, 0x54, 0x76, |
| 1074 0x98, 0xBA, 0xDC, 0xFE, |
| 1075 // version tag |
| 1076 'Q', '0', '0', '0', |
| 1077 // packet sequence number |
| 1078 0xBC, 0x9A, 0x78, 0x56, |
| 1079 0x34, 0x12, |
| 1080 // private flags |
| 1081 0x00, |
| 1082 |
| 1083 // frame type (padding frame) |
| 1084 0x00, |
| 1085 }; |
| 1086 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1087 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1088 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1089 ASSERT_TRUE(visitor_.header_.get()); |
| 1090 EXPECT_EQ(0, visitor_.frame_count_); |
| 1091 EXPECT_EQ(1, visitor_.version_mismatch_); |
| 1092 }; |
| 1093 |
838 TEST_F(QuicFramerTest, InvalidPrivateFlag) { | 1094 TEST_F(QuicFramerTest, InvalidPrivateFlag) { |
839 unsigned char packet[] = { | 1095 unsigned char packet[] = { |
840 // public flags (8 byte guid) | 1096 // public flags (8 byte guid) |
841 0x0C, | 1097 0x3C, |
842 // guid | 1098 // guid |
843 0x10, 0x32, 0x54, 0x76, | 1099 0x10, 0x32, 0x54, 0x76, |
844 0x98, 0xBA, 0xDC, 0xFE, | 1100 0x98, 0xBA, 0xDC, 0xFE, |
845 // packet sequence number | 1101 // packet sequence number |
846 0xBC, 0x9A, 0x78, 0x56, | 1102 0xBC, 0x9A, 0x78, 0x56, |
847 0x34, 0x12, | 1103 0x34, 0x12, |
848 // private flags | 1104 // private flags |
849 0x10, | 1105 0x10, |
850 | 1106 |
851 // frame count | 1107 // frame count |
(...skipping 16 matching lines...) Expand all Loading... |
868 }; | 1124 }; |
869 CheckProcessingFails(packet, | 1125 CheckProcessingFails(packet, |
870 arraysize(packet), | 1126 arraysize(packet), |
871 "Illegal private flags value.", | 1127 "Illegal private flags value.", |
872 QUIC_INVALID_PACKET_HEADER); | 1128 QUIC_INVALID_PACKET_HEADER); |
873 }; | 1129 }; |
874 | 1130 |
875 TEST_F(QuicFramerTest, PaddingFrame) { | 1131 TEST_F(QuicFramerTest, PaddingFrame) { |
876 unsigned char packet[] = { | 1132 unsigned char packet[] = { |
877 // public flags (8 byte guid) | 1133 // public flags (8 byte guid) |
878 0x0C, | 1134 0x3C, |
879 // guid | 1135 // guid |
880 0x10, 0x32, 0x54, 0x76, | 1136 0x10, 0x32, 0x54, 0x76, |
881 0x98, 0xBA, 0xDC, 0xFE, | 1137 0x98, 0xBA, 0xDC, 0xFE, |
882 // packet sequence number | 1138 // packet sequence number |
883 0xBC, 0x9A, 0x78, 0x56, | 1139 0xBC, 0x9A, 0x78, 0x56, |
884 0x34, 0x12, | 1140 0x34, 0x12, |
885 // private flags | 1141 // private flags |
886 0x00, | 1142 0x00, |
887 | 1143 |
888 // frame type (padding frame) | 1144 // frame type (padding frame) |
(...skipping 14 matching lines...) Expand all Loading... |
903 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1159 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
904 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1160 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
905 ASSERT_TRUE(visitor_.header_.get()); | 1161 ASSERT_TRUE(visitor_.header_.get()); |
906 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1162 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
907 | 1163 |
908 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1164 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
909 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1165 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
910 // A packet with no frames is not acceptable. | 1166 // A packet with no frames is not acceptable. |
911 CheckProcessingFails( | 1167 CheckProcessingFails( |
912 packet, | 1168 packet, |
913 GetPacketHeaderSize( | 1169 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
914 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1170 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
915 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); | 1171 "Unable to read frame type.", QUIC_INVALID_FRAME_DATA); |
916 } | 1172 } |
917 | 1173 |
918 TEST_F(QuicFramerTest, StreamFrame) { | 1174 TEST_F(QuicFramerTest, StreamFrame) { |
919 unsigned char packet[] = { | 1175 unsigned char packet[] = { |
920 // public flags (8 byte guid) | 1176 // public flags (8 byte guid) |
921 0x0C, | 1177 0x3C, |
922 // guid | 1178 // guid |
923 0x10, 0x32, 0x54, 0x76, | 1179 0x10, 0x32, 0x54, 0x76, |
924 0x98, 0xBA, 0xDC, 0xFE, | 1180 0x98, 0xBA, 0xDC, 0xFE, |
925 // packet sequence number | 1181 // packet sequence number |
926 0xBC, 0x9A, 0x78, 0x56, | 1182 0xBC, 0x9A, 0x78, 0x56, |
927 0x34, 0x12, | 1183 0x34, 0x12, |
928 // private flags | 1184 // private flags |
929 0x00, | 1185 0x00, |
930 | 1186 |
931 // frame type (stream frame) | 1187 // frame type (stream frame) |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
972 kQuicStreamFinSize) { | 1228 kQuicStreamFinSize) { |
973 expected_error = "Unable to read fin."; | 1229 expected_error = "Unable to read fin."; |
974 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + | 1230 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + |
975 kQuicStreamFinSize + kQuicStreamOffsetSize) { | 1231 kQuicStreamFinSize + kQuicStreamOffsetSize) { |
976 expected_error = "Unable to read offset."; | 1232 expected_error = "Unable to read offset."; |
977 } else { | 1233 } else { |
978 expected_error = "Unable to read frame data."; | 1234 expected_error = "Unable to read frame data."; |
979 } | 1235 } |
980 CheckProcessingFails( | 1236 CheckProcessingFails( |
981 packet, | 1237 packet, |
982 i + GetPacketHeaderSize( | 1238 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
983 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1239 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
984 expected_error, QUIC_INVALID_FRAME_DATA); | 1240 expected_error, QUIC_INVALID_FRAME_DATA); |
985 } | 1241 } |
986 } | 1242 } |
987 | 1243 |
988 TEST_F(QuicFramerTest, StreamFrameWithVersion) { | 1244 TEST_F(QuicFramerTest, StreamFrameWithVersion) { |
989 unsigned char packet[] = { | 1245 unsigned char packet[] = { |
990 // public flags (version, 8 byte guid) | 1246 // public flags (version, 8 byte guid) |
991 0x0D, | 1247 0x3D, |
992 // guid | 1248 // guid |
993 0x10, 0x32, 0x54, 0x76, | 1249 0x10, 0x32, 0x54, 0x76, |
994 0x98, 0xBA, 0xDC, 0xFE, | 1250 0x98, 0xBA, 0xDC, 0xFE, |
995 // version tag | 1251 // version tag |
996 'Q', '0', '0', '5', | 1252 'Q', '0', '0', '6', |
997 // packet sequence number | 1253 // packet sequence number |
998 0xBC, 0x9A, 0x78, 0x56, | 1254 0xBC, 0x9A, 0x78, 0x56, |
999 0x34, 0x12, | 1255 0x34, 0x12, |
1000 // private flags | 1256 // private flags |
1001 0x00, | 1257 0x00, |
1002 | 1258 |
1003 // frame type (stream frame) | 1259 // frame type (stream frame) |
1004 0x01, | 1260 0x01, |
1005 // stream id | 1261 // stream id |
1006 0x04, 0x03, 0x02, 0x01, | 1262 0x04, 0x03, 0x02, 0x01, |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1045 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + | 1301 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + |
1046 kQuicStreamFinSize) { | 1302 kQuicStreamFinSize) { |
1047 expected_error = "Unable to read fin."; | 1303 expected_error = "Unable to read fin."; |
1048 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + | 1304 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + |
1049 kQuicStreamFinSize + kQuicStreamOffsetSize) { | 1305 kQuicStreamFinSize + kQuicStreamOffsetSize) { |
1050 expected_error = "Unable to read offset."; | 1306 expected_error = "Unable to read offset."; |
1051 } else { | 1307 } else { |
1052 expected_error = "Unable to read frame data."; | 1308 expected_error = "Unable to read frame data."; |
1053 } | 1309 } |
1054 CheckProcessingFails( | 1310 CheckProcessingFails( |
1055 packet, i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, | 1311 packet, |
1056 NOT_IN_FEC_GROUP), | 1312 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, kIncludeVersion, |
| 1313 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1057 expected_error, QUIC_INVALID_FRAME_DATA); | 1314 expected_error, QUIC_INVALID_FRAME_DATA); |
1058 } | 1315 } |
1059 } | 1316 } |
1060 | 1317 |
1061 TEST_F(QuicFramerTest, RejectPacket) { | 1318 TEST_F(QuicFramerTest, RejectPacket) { |
1062 visitor_.accept_packet_ = false; | 1319 visitor_.accept_packet_ = false; |
1063 | 1320 |
1064 unsigned char packet[] = { | 1321 unsigned char packet[] = { |
1065 // public flags (8 byte guid) | 1322 // public flags (8 byte guid) |
1066 0x0C, | 1323 0x3C, |
1067 // guid | 1324 // guid |
1068 0x10, 0x32, 0x54, 0x76, | 1325 0x10, 0x32, 0x54, 0x76, |
1069 0x98, 0xBA, 0xDC, 0xFE, | 1326 0x98, 0xBA, 0xDC, 0xFE, |
1070 // packet sequence number | 1327 // packet sequence number |
1071 0xBC, 0x9A, 0x78, 0x56, | 1328 0xBC, 0x9A, 0x78, 0x56, |
1072 0x34, 0x12, | 1329 0x34, 0x12, |
1073 // private flags | 1330 // private flags |
1074 0x00, | 1331 0x00, |
1075 | 1332 |
1076 // frame type (stream frame) | 1333 // frame type (stream frame) |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1155 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1412 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
1156 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1413 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1157 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1414 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1158 visitor_.stream_frames_[0]->offset); | 1415 visitor_.stream_frames_[0]->offset); |
1159 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1416 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
1160 } | 1417 } |
1161 | 1418 |
1162 TEST_F(QuicFramerTest, StreamFrameInFecGroup) { | 1419 TEST_F(QuicFramerTest, StreamFrameInFecGroup) { |
1163 unsigned char packet[] = { | 1420 unsigned char packet[] = { |
1164 // public flags (8 byte guid) | 1421 // public flags (8 byte guid) |
1165 0x0C, | 1422 0x3C, |
1166 // guid | 1423 // guid |
1167 0x10, 0x32, 0x54, 0x76, | 1424 0x10, 0x32, 0x54, 0x76, |
1168 0x98, 0xBA, 0xDC, 0xFE, | 1425 0x98, 0xBA, 0xDC, 0xFE, |
1169 // packet sequence number | 1426 // packet sequence number |
1170 0xBC, 0x9A, 0x78, 0x56, | 1427 0xBC, 0x9A, 0x78, 0x56, |
1171 0x12, 0x34, | 1428 0x12, 0x34, |
1172 // private flags (fec group) | 1429 // private flags (fec group) |
1173 0x02, | 1430 0x02, |
1174 // first fec protected packet offset | 1431 // first fec protected packet offset |
1175 0x02, | 1432 0x02, |
(...skipping 17 matching lines...) Expand all Loading... |
1193 | 1450 |
1194 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1451 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1195 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1452 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1196 | 1453 |
1197 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1454 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1198 ASSERT_TRUE(visitor_.header_.get()); | 1455 ASSERT_TRUE(visitor_.header_.get()); |
1199 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1456 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1200 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1457 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1201 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), | 1458 EXPECT_EQ(GG_UINT64_C(0x341256789ABA), |
1202 visitor_.header_->fec_group); | 1459 visitor_.header_->fec_group); |
| 1460 const size_t fec_offset = GetStartOfFecProtectedData( |
| 1461 PACKET_8BYTE_GUID, !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER); |
1203 EXPECT_EQ( | 1462 EXPECT_EQ( |
1204 string(AsChars(packet) + GetStartOfFecProtectedData(PACKET_8BYTE_GUID, | 1463 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), |
1205 !kIncludeVersion), | |
1206 arraysize(packet) - GetStartOfFecProtectedData(PACKET_8BYTE_GUID, | |
1207 !kIncludeVersion)), | |
1208 visitor_.fec_protected_payload_); | 1464 visitor_.fec_protected_payload_); |
1209 | 1465 |
1210 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1466 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1211 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1467 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1212 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1468 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); |
1213 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1469 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
1214 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1470 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), |
1215 visitor_.stream_frames_[0]->offset); | 1471 visitor_.stream_frames_[0]->offset); |
1216 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); | 1472 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); |
1217 } | 1473 } |
1218 | 1474 |
1219 TEST_F(QuicFramerTest, AckFrame) { | 1475 TEST_F(QuicFramerTest, AckFrame) { |
1220 unsigned char packet[] = { | 1476 unsigned char packet[] = { |
1221 // public flags (8 byte guid) | 1477 // public flags (8 byte guid) |
1222 0x0C, | 1478 0x3C, |
1223 // guid | 1479 // guid |
1224 0x10, 0x32, 0x54, 0x76, | 1480 0x10, 0x32, 0x54, 0x76, |
1225 0x98, 0xBA, 0xDC, 0xFE, | 1481 0x98, 0xBA, 0xDC, 0xFE, |
1226 // packet sequence number | 1482 // packet sequence number |
1227 0xBC, 0x9A, 0x78, 0x56, | 1483 0xBC, 0x9A, 0x78, 0x56, |
1228 0x34, 0x12, | 1484 0x34, 0x12, |
1229 // private flags | 1485 // private flags |
1230 0x00, | 1486 0x00, |
1231 | 1487 |
1232 // frame type (ack frame) | 1488 // frame type (ack frame) |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); | 1521 EXPECT_EQ(GG_UINT64_C(0x0123456789ABF), frame.received_info.largest_observed); |
1266 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); | 1522 ASSERT_EQ(1u, frame.received_info.missing_packets.size()); |
1267 SequenceNumberSet::const_iterator missing_iter = | 1523 SequenceNumberSet::const_iterator missing_iter = |
1268 frame.received_info.missing_packets.begin(); | 1524 frame.received_info.missing_packets.begin(); |
1269 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); | 1525 EXPECT_EQ(GG_UINT64_C(0x0123456789ABE), *missing_iter); |
1270 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); | 1526 EXPECT_EQ(GG_UINT64_C(0x0123456789AA0), frame.sent_info.least_unacked); |
1271 | 1527 |
1272 const size_t kSentEntropyOffset = kQuicFrameTypeSize; | 1528 const size_t kSentEntropyOffset = kQuicFrameTypeSize; |
1273 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; | 1529 const size_t kLeastUnackedOffset = kSentEntropyOffset + kQuicEntropyHashSize; |
1274 const size_t kReceivedEntropyOffset = kLeastUnackedOffset + | 1530 const size_t kReceivedEntropyOffset = kLeastUnackedOffset + |
1275 kSequenceNumberSize; | 1531 PACKET_6BYTE_SEQUENCE_NUMBER; |
1276 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1532 const size_t kLargestObservedOffset = kReceivedEntropyOffset + |
1277 kQuicEntropyHashSize; | 1533 kQuicEntropyHashSize; |
1278 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + | 1534 const size_t kMissingDeltaTimeOffset = kLargestObservedOffset + |
1279 kSequenceNumberSize; | 1535 PACKET_6BYTE_SEQUENCE_NUMBER; |
1280 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + | 1536 const size_t kNumMissingPacketOffset = kMissingDeltaTimeOffset + |
1281 kQuicDeltaTimeLargestObservedSize; | 1537 kQuicDeltaTimeLargestObservedSize; |
1282 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | 1538 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + |
1283 kNumberOfMissingPacketsSize; | 1539 kNumberOfMissingPacketsSize; |
1284 // Now test framing boundaries | 1540 // Now test framing boundaries |
1285 const size_t missing_packets_size = 1 * kSequenceNumberSize; | 1541 const size_t missing_packets_size = 1 * PACKET_6BYTE_SEQUENCE_NUMBER; |
1286 for (size_t i = 0; | 1542 for (size_t i = 0; |
1287 i < QuicFramer::GetMinAckFrameSize() + missing_packets_size; ++i) { | 1543 i < QuicFramer::GetMinAckFrameSize() + missing_packets_size; ++i) { |
1288 string expected_error; | 1544 string expected_error; |
1289 if (i < kSentEntropyOffset) { | 1545 if (i < kSentEntropyOffset) { |
1290 expected_error = "Unable to read frame type."; | 1546 expected_error = "Unable to read frame type."; |
1291 } else if (i < kLeastUnackedOffset) { | 1547 } else if (i < kLeastUnackedOffset) { |
1292 expected_error = "Unable to read entropy hash for sent packets."; | 1548 expected_error = "Unable to read entropy hash for sent packets."; |
1293 } else if (i < kReceivedEntropyOffset) { | 1549 } else if (i < kReceivedEntropyOffset) { |
1294 expected_error = "Unable to read least unacked."; | 1550 expected_error = "Unable to read least unacked."; |
1295 } else if (i < kLargestObservedOffset) { | 1551 } else if (i < kLargestObservedOffset) { |
1296 expected_error = "Unable to read entropy hash for received packets."; | 1552 expected_error = "Unable to read entropy hash for received packets."; |
1297 } else if (i < kMissingDeltaTimeOffset) { | 1553 } else if (i < kMissingDeltaTimeOffset) { |
1298 expected_error = "Unable to read largest observed."; | 1554 expected_error = "Unable to read largest observed."; |
1299 } else if (i < kNumMissingPacketOffset) { | 1555 } else if (i < kNumMissingPacketOffset) { |
1300 expected_error = "Unable to read delta time largest observed."; | 1556 expected_error = "Unable to read delta time largest observed."; |
1301 } else if (i < kMissingPacketsOffset) { | 1557 } else if (i < kMissingPacketsOffset) { |
1302 expected_error = "Unable to read num missing packets."; | 1558 expected_error = "Unable to read num missing packets."; |
1303 } else { | 1559 } else { |
1304 expected_error = "Unable to read sequence number in missing packets."; | 1560 expected_error = "Unable to read sequence number in missing packets."; |
1305 } | 1561 } |
1306 CheckProcessingFails( | 1562 CheckProcessingFails( |
1307 packet, | 1563 packet, |
1308 i + GetPacketHeaderSize( | 1564 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1309 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1565 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1310 expected_error, QUIC_INVALID_FRAME_DATA); | 1566 expected_error, QUIC_INVALID_FRAME_DATA); |
1311 } | 1567 } |
1312 } | 1568 } |
1313 | 1569 |
1314 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) { | 1570 TEST_F(QuicFramerTest, CongestionFeedbackFrameTCP) { |
1315 unsigned char packet[] = { | 1571 unsigned char packet[] = { |
1316 // public flags (8 byte guid) | 1572 // public flags (8 byte guid) |
1317 0x0C, | 1573 0x3C, |
1318 // guid | 1574 // guid |
1319 0x10, 0x32, 0x54, 0x76, | 1575 0x10, 0x32, 0x54, 0x76, |
1320 0x98, 0xBA, 0xDC, 0xFE, | 1576 0x98, 0xBA, 0xDC, 0xFE, |
1321 // packet sequence number | 1577 // packet sequence number |
1322 0xBC, 0x9A, 0x78, 0x56, | 1578 0xBC, 0x9A, 0x78, 0x56, |
1323 0x34, 0x12, | 1579 0x34, 0x12, |
1324 // private flags | 1580 // private flags |
1325 0x00, | 1581 0x00, |
1326 | 1582 |
1327 // frame type (congestion feedback frame) | 1583 // frame type (congestion feedback frame) |
(...skipping 29 matching lines...) Expand all Loading... |
1357 expected_error = "Unable to read frame type."; | 1613 expected_error = "Unable to read frame type."; |
1358 } else if (i < 2) { | 1614 } else if (i < 2) { |
1359 expected_error = "Unable to read congestion feedback type."; | 1615 expected_error = "Unable to read congestion feedback type."; |
1360 } else if (i < 4) { | 1616 } else if (i < 4) { |
1361 expected_error = "Unable to read accumulated number of lost packets."; | 1617 expected_error = "Unable to read accumulated number of lost packets."; |
1362 } else if (i < 6) { | 1618 } else if (i < 6) { |
1363 expected_error = "Unable to read receive window."; | 1619 expected_error = "Unable to read receive window."; |
1364 } | 1620 } |
1365 CheckProcessingFails( | 1621 CheckProcessingFails( |
1366 packet, | 1622 packet, |
1367 i + GetPacketHeaderSize( | 1623 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1368 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1624 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1369 expected_error, QUIC_INVALID_FRAME_DATA); | 1625 expected_error, QUIC_INVALID_FRAME_DATA); |
1370 } | 1626 } |
1371 } | 1627 } |
1372 | 1628 |
1373 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) { | 1629 TEST_F(QuicFramerTest, CongestionFeedbackFrameInterArrival) { |
1374 unsigned char packet[] = { | 1630 unsigned char packet[] = { |
1375 // public flags (8 byte guid) | 1631 // public flags (8 byte guid) |
1376 0x0C, | 1632 0x3C, |
1377 // guid | 1633 // guid |
1378 0x10, 0x32, 0x54, 0x76, | 1634 0x10, 0x32, 0x54, 0x76, |
1379 0x98, 0xBA, 0xDC, 0xFE, | 1635 0x98, 0xBA, 0xDC, 0xFE, |
1380 // packet sequence number | 1636 // packet sequence number |
1381 0xBC, 0x9A, 0x78, 0x56, | 1637 0xBC, 0x9A, 0x78, 0x56, |
1382 0x34, 0x12, | 1638 0x34, 0x12, |
1383 // private flags | 1639 // private flags |
1384 0x00, | 1640 0x00, |
1385 | 1641 |
1386 // frame type (congestion feedback frame) | 1642 // frame type (congestion feedback frame) |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1455 expected_error = "Unable to read sequence delta in received packets."; | 1711 expected_error = "Unable to read sequence delta in received packets."; |
1456 } else if (i < 25) { | 1712 } else if (i < 25) { |
1457 expected_error = "Unable to read time delta in received packets."; | 1713 expected_error = "Unable to read time delta in received packets."; |
1458 } else if (i < 27) { | 1714 } else if (i < 27) { |
1459 expected_error = "Unable to read sequence delta in received packets."; | 1715 expected_error = "Unable to read sequence delta in received packets."; |
1460 } else if (i < 31) { | 1716 } else if (i < 31) { |
1461 expected_error = "Unable to read time delta in received packets."; | 1717 expected_error = "Unable to read time delta in received packets."; |
1462 } | 1718 } |
1463 CheckProcessingFails( | 1719 CheckProcessingFails( |
1464 packet, | 1720 packet, |
1465 i + GetPacketHeaderSize( | 1721 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1466 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1722 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1467 expected_error, QUIC_INVALID_FRAME_DATA); | 1723 expected_error, QUIC_INVALID_FRAME_DATA); |
1468 } | 1724 } |
1469 } | 1725 } |
1470 | 1726 |
1471 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) { | 1727 TEST_F(QuicFramerTest, CongestionFeedbackFrameFixRate) { |
1472 unsigned char packet[] = { | 1728 unsigned char packet[] = { |
1473 // public flags (8 byte guid) | 1729 // public flags (8 byte guid) |
1474 0x0C, | 1730 0x3C, |
1475 // guid | 1731 // guid |
1476 0x10, 0x32, 0x54, 0x76, | 1732 0x10, 0x32, 0x54, 0x76, |
1477 0x98, 0xBA, 0xDC, 0xFE, | 1733 0x98, 0xBA, 0xDC, 0xFE, |
1478 // packet sequence number | 1734 // packet sequence number |
1479 0xBC, 0x9A, 0x78, 0x56, | 1735 0xBC, 0x9A, 0x78, 0x56, |
1480 0x34, 0x12, | 1736 0x34, 0x12, |
1481 // private flags | 1737 // private flags |
1482 0x00, | 1738 0x00, |
1483 | 1739 |
1484 // frame type (congestion feedback frame) | 1740 // frame type (congestion feedback frame) |
(...skipping 24 matching lines...) Expand all Loading... |
1509 string expected_error; | 1765 string expected_error; |
1510 if (i < 1) { | 1766 if (i < 1) { |
1511 expected_error = "Unable to read frame type."; | 1767 expected_error = "Unable to read frame type."; |
1512 } else if (i < 2) { | 1768 } else if (i < 2) { |
1513 expected_error = "Unable to read congestion feedback type."; | 1769 expected_error = "Unable to read congestion feedback type."; |
1514 } else if (i < 6) { | 1770 } else if (i < 6) { |
1515 expected_error = "Unable to read bitrate."; | 1771 expected_error = "Unable to read bitrate."; |
1516 } | 1772 } |
1517 CheckProcessingFails( | 1773 CheckProcessingFails( |
1518 packet, | 1774 packet, |
1519 i + GetPacketHeaderSize( | 1775 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1520 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1776 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1521 expected_error, QUIC_INVALID_FRAME_DATA); | 1777 expected_error, QUIC_INVALID_FRAME_DATA); |
1522 } | 1778 } |
1523 } | 1779 } |
1524 | 1780 |
1525 | 1781 |
1526 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { | 1782 TEST_F(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { |
1527 unsigned char packet[] = { | 1783 unsigned char packet[] = { |
1528 // public flags (8 byte guid) | 1784 // public flags (8 byte guid) |
1529 0x0C, | 1785 0x3C, |
1530 // guid | 1786 // guid |
1531 0x10, 0x32, 0x54, 0x76, | 1787 0x10, 0x32, 0x54, 0x76, |
1532 0x98, 0xBA, 0xDC, 0xFE, | 1788 0x98, 0xBA, 0xDC, 0xFE, |
1533 // packet sequence number | 1789 // packet sequence number |
1534 0xBC, 0x9A, 0x78, 0x56, | 1790 0xBC, 0x9A, 0x78, 0x56, |
1535 0x34, 0x12, | 1791 0x34, 0x12, |
1536 // private flags | 1792 // private flags |
1537 0x00, | 1793 0x00, |
1538 | 1794 |
1539 // frame type (congestion feedback frame) | 1795 // frame type (congestion feedback frame) |
1540 0x03, | 1796 0x03, |
1541 // congestion feedback type (invalid) | 1797 // congestion feedback type (invalid) |
1542 0x03, | 1798 0x03, |
1543 }; | 1799 }; |
1544 | 1800 |
1545 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1801 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1546 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 1802 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
1547 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1803 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1548 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); | 1804 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); |
1549 } | 1805 } |
1550 | 1806 |
1551 TEST_F(QuicFramerTest, RstStreamFrame) { | 1807 TEST_F(QuicFramerTest, RstStreamFrame) { |
1552 unsigned char packet[] = { | 1808 unsigned char packet[] = { |
1553 // public flags (8 byte guid) | 1809 // public flags (8 byte guid) |
1554 0x0C, | 1810 0x3C, |
1555 // guid | 1811 // guid |
1556 0x10, 0x32, 0x54, 0x76, | 1812 0x10, 0x32, 0x54, 0x76, |
1557 0x98, 0xBA, 0xDC, 0xFE, | 1813 0x98, 0xBA, 0xDC, 0xFE, |
1558 // packet sequence number | 1814 // packet sequence number |
1559 0xBC, 0x9A, 0x78, 0x56, | 1815 0xBC, 0x9A, 0x78, 0x56, |
1560 0x34, 0x12, | 1816 0x34, 0x12, |
1561 // private flags | 1817 // private flags |
1562 0x00, | 1818 0x00, |
1563 | 1819 |
1564 // frame type (rst stream frame) | 1820 // frame type (rst stream frame) |
(...skipping 29 matching lines...) Expand all Loading... |
1594 if (i < kQuicFrameTypeSize + kQuicStreamIdSize) { | 1850 if (i < kQuicFrameTypeSize + kQuicStreamIdSize) { |
1595 expected_error = "Unable to read stream_id."; | 1851 expected_error = "Unable to read stream_id."; |
1596 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + | 1852 } else if (i < kQuicFrameTypeSize + kQuicStreamIdSize + |
1597 kQuicErrorCodeSize) { | 1853 kQuicErrorCodeSize) { |
1598 expected_error = "Unable to read rst stream error code."; | 1854 expected_error = "Unable to read rst stream error code."; |
1599 } else { | 1855 } else { |
1600 expected_error = "Unable to read rst stream error details."; | 1856 expected_error = "Unable to read rst stream error details."; |
1601 } | 1857 } |
1602 CheckProcessingFails( | 1858 CheckProcessingFails( |
1603 packet, | 1859 packet, |
1604 i + GetPacketHeaderSize( | 1860 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1605 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1861 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1606 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 1862 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
1607 } | 1863 } |
1608 } | 1864 } |
1609 | 1865 |
1610 TEST_F(QuicFramerTest, ConnectionCloseFrame) { | 1866 TEST_F(QuicFramerTest, ConnectionCloseFrame) { |
1611 unsigned char packet[] = { | 1867 unsigned char packet[] = { |
1612 // public flags (8 byte guid) | 1868 // public flags (8 byte guid) |
1613 0x0C, | 1869 0x3C, |
1614 // guid | 1870 // guid |
1615 0x10, 0x32, 0x54, 0x76, | 1871 0x10, 0x32, 0x54, 0x76, |
1616 0x98, 0xBA, 0xDC, 0xFE, | 1872 0x98, 0xBA, 0xDC, 0xFE, |
1617 // packet sequence number | 1873 // packet sequence number |
1618 0xBC, 0x9A, 0x78, 0x56, | 1874 0xBC, 0x9A, 0x78, 0x56, |
1619 0x34, 0x12, | 1875 0x34, 0x12, |
1620 // private flags | 1876 // private flags |
1621 0x00, | 1877 0x00, |
1622 | 1878 |
1623 // frame type (connection close frame) | 1879 // frame type (connection close frame) |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 i < QuicFramer::GetMinConnectionCloseFrameSize() - | 1937 i < QuicFramer::GetMinConnectionCloseFrameSize() - |
1682 QuicFramer::GetMinAckFrameSize(); ++i) { | 1938 QuicFramer::GetMinAckFrameSize(); ++i) { |
1683 string expected_error; | 1939 string expected_error; |
1684 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 1940 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
1685 expected_error = "Unable to read connection close error code."; | 1941 expected_error = "Unable to read connection close error code."; |
1686 } else { | 1942 } else { |
1687 expected_error = "Unable to read connection close error details."; | 1943 expected_error = "Unable to read connection close error details."; |
1688 } | 1944 } |
1689 CheckProcessingFails( | 1945 CheckProcessingFails( |
1690 packet, | 1946 packet, |
1691 i + GetPacketHeaderSize( | 1947 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1692 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 1948 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1693 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 1949 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
1694 } | 1950 } |
1695 } | 1951 } |
1696 | 1952 |
1697 TEST_F(QuicFramerTest, GoAwayFrame) { | 1953 TEST_F(QuicFramerTest, GoAwayFrame) { |
1698 unsigned char packet[] = { | 1954 unsigned char packet[] = { |
1699 // public flags (8 byte guid) | 1955 // public flags (8 byte guid) |
1700 0x0C, | 1956 0x3C, |
1701 // guid | 1957 // guid |
1702 0x10, 0x32, 0x54, 0x76, | 1958 0x10, 0x32, 0x54, 0x76, |
1703 0x98, 0xBA, 0xDC, 0xFE, | 1959 0x98, 0xBA, 0xDC, 0xFE, |
1704 // packet sequence number | 1960 // packet sequence number |
1705 0xBC, 0x9A, 0x78, 0x56, | 1961 0xBC, 0x9A, 0x78, 0x56, |
1706 0x34, 0x12, | 1962 0x34, 0x12, |
1707 // private flags | 1963 // private flags |
1708 0x00, | 1964 0x00, |
1709 | 1965 |
1710 // frame type (go away frame) | 1966 // frame type (go away frame) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1742 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 1998 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
1743 expected_error = "Unable to read go away error code."; | 1999 expected_error = "Unable to read go away error code."; |
1744 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + | 2000 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + |
1745 kQuicStreamIdSize) { | 2001 kQuicStreamIdSize) { |
1746 expected_error = "Unable to read last good stream id."; | 2002 expected_error = "Unable to read last good stream id."; |
1747 } else { | 2003 } else { |
1748 expected_error = "Unable to read goaway reason."; | 2004 expected_error = "Unable to read goaway reason."; |
1749 } | 2005 } |
1750 CheckProcessingFails( | 2006 CheckProcessingFails( |
1751 packet, | 2007 packet, |
1752 i + GetPacketHeaderSize( | 2008 i + GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
1753 PACKET_8BYTE_GUID, !kIncludeVersion, NOT_IN_FEC_GROUP), | 2009 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), |
1754 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2010 expected_error, QUIC_INVALID_GOAWAY_DATA); |
1755 } | 2011 } |
1756 } | 2012 } |
1757 | 2013 |
1758 TEST_F(QuicFramerTest, PublicResetPacket) { | 2014 TEST_F(QuicFramerTest, PublicResetPacket) { |
1759 unsigned char packet[] = { | 2015 unsigned char packet[] = { |
1760 // public flags (public reset, 8 byte guid) | 2016 // public flags (public reset, 8 byte guid) |
1761 0x0E, | 2017 0x3E, |
1762 // guid | 2018 // guid |
1763 0x10, 0x32, 0x54, 0x76, | 2019 0x10, 0x32, 0x54, 0x76, |
1764 0x98, 0xBA, 0xDC, 0xFE, | 2020 0x98, 0xBA, 0xDC, 0xFE, |
1765 // nonce proof | 2021 // nonce proof |
1766 0x89, 0x67, 0x45, 0x23, | 2022 0x89, 0x67, 0x45, 0x23, |
1767 0x01, 0xEF, 0xCD, 0xAB, | 2023 0x01, 0xEF, 0xCD, 0xAB, |
1768 // rejected sequence number | 2024 // rejected sequence number |
1769 0xBC, 0x9A, 0x78, 0x56, | 2025 0xBC, 0x9A, 0x78, 0x56, |
1770 0x34, 0x12, | 2026 0x34, 0x12, |
1771 }; | 2027 }; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1803 expected_error = "Unable to read rejected sequence number."; | 2059 expected_error = "Unable to read rejected sequence number."; |
1804 CheckProcessingFails(packet, i, expected_error, | 2060 CheckProcessingFails(packet, i, expected_error, |
1805 QUIC_INVALID_PUBLIC_RST_PACKET); | 2061 QUIC_INVALID_PUBLIC_RST_PACKET); |
1806 } | 2062 } |
1807 } | 2063 } |
1808 } | 2064 } |
1809 | 2065 |
1810 TEST_F(QuicFramerTest, VersionNegotiationPacket) { | 2066 TEST_F(QuicFramerTest, VersionNegotiationPacket) { |
1811 unsigned char packet[] = { | 2067 unsigned char packet[] = { |
1812 // public flags (version, 8 byte guid) | 2068 // public flags (version, 8 byte guid) |
1813 0x0D, | 2069 0x3D, |
1814 // guid | 2070 // guid |
1815 0x10, 0x32, 0x54, 0x76, | 2071 0x10, 0x32, 0x54, 0x76, |
1816 0x98, 0xBA, 0xDC, 0xFE, | 2072 0x98, 0xBA, 0xDC, 0xFE, |
1817 // version tag | 2073 // version tag |
1818 'Q', '0', '0', '5', | 2074 'Q', '0', '0', '6', |
1819 'Q', '2', '.', '0', | 2075 'Q', '2', '.', '0', |
1820 }; | 2076 }; |
1821 | 2077 |
1822 QuicFramerPeer::SetIsServer(&framer_, false); | 2078 QuicFramerPeer::SetIsServer(&framer_, false); |
1823 | 2079 |
1824 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2080 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1825 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2081 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1826 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2082 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
1827 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); | 2083 ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
1828 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); | 2084 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size()); |
(...skipping 11 matching lines...) Expand all Loading... |
1840 expected_error = "Unable to read supported version in negotiation."; | 2096 expected_error = "Unable to read supported version in negotiation."; |
1841 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 2097 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
1842 } | 2098 } |
1843 CheckProcessingFails(packet, i, expected_error, error_code); | 2099 CheckProcessingFails(packet, i, expected_error, error_code); |
1844 } | 2100 } |
1845 } | 2101 } |
1846 | 2102 |
1847 TEST_F(QuicFramerTest, FecPacket) { | 2103 TEST_F(QuicFramerTest, FecPacket) { |
1848 unsigned char packet[] = { | 2104 unsigned char packet[] = { |
1849 // public flags (8 byte guid) | 2105 // public flags (8 byte guid) |
1850 0x0C, | 2106 0x3C, |
1851 // guid | 2107 // guid |
1852 0x10, 0x32, 0x54, 0x76, | 2108 0x10, 0x32, 0x54, 0x76, |
1853 0x98, 0xBA, 0xDC, 0xFE, | 2109 0x98, 0xBA, 0xDC, 0xFE, |
1854 // packet sequence number | 2110 // packet sequence number |
1855 0xBC, 0x9A, 0x78, 0x56, | 2111 0xBC, 0x9A, 0x78, 0x56, |
1856 0x34, 0x12, | 2112 0x34, 0x12, |
1857 // private flags (fec group & FEC) | 2113 // private flags (fec group & FEC) |
1858 0x06, | 2114 0x06, |
1859 // first fec protected packet offset | 2115 // first fec protected packet offset |
1860 0x01, | 2116 0x01, |
(...skipping 30 matching lines...) Expand all Loading... |
1891 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2147 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
1892 header.fec_group = 0; | 2148 header.fec_group = 0; |
1893 | 2149 |
1894 QuicPaddingFrame padding_frame; | 2150 QuicPaddingFrame padding_frame; |
1895 | 2151 |
1896 QuicFrames frames; | 2152 QuicFrames frames; |
1897 frames.push_back(QuicFrame(&padding_frame)); | 2153 frames.push_back(QuicFrame(&padding_frame)); |
1898 | 2154 |
1899 unsigned char packet[kMaxPacketSize] = { | 2155 unsigned char packet[kMaxPacketSize] = { |
1900 // public flags (8 byte guid) | 2156 // public flags (8 byte guid) |
1901 0x0C, | 2157 0x3C, |
1902 // guid | 2158 // guid |
1903 0x10, 0x32, 0x54, 0x76, | 2159 0x10, 0x32, 0x54, 0x76, |
1904 0x98, 0xBA, 0xDC, 0xFE, | 2160 0x98, 0xBA, 0xDC, 0xFE, |
1905 // packet sequence number | 2161 // packet sequence number |
1906 0xBC, 0x9A, 0x78, 0x56, | 2162 0xBC, 0x9A, 0x78, 0x56, |
1907 0x34, 0x12, | 2163 0x34, 0x12, |
1908 // private flags | 2164 // private flags |
1909 0x00, | 2165 0x00, |
1910 | 2166 |
1911 // frame type (padding frame) | 2167 // frame type (padding frame) |
1912 0x00, | 2168 0x00, |
1913 }; | 2169 }; |
1914 | 2170 |
1915 uint64 header_size = GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, | 2171 uint64 header_size = |
1916 NOT_IN_FEC_GROUP); | 2172 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 2173 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
1917 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2174 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
1918 | 2175 |
1919 scoped_ptr<QuicPacket> data( | 2176 scoped_ptr<QuicPacket> data( |
| 2177 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2178 ASSERT_TRUE(data != NULL); |
| 2179 |
| 2180 test::CompareCharArraysWithHexError("constructed packet", |
| 2181 data->data(), data->length(), |
| 2182 AsChars(packet), arraysize(packet)); |
| 2183 } |
| 2184 |
| 2185 TEST_F(QuicFramerTest, Construct4ByteSequenceNumberPaddingFramePacket) { |
| 2186 QuicPacketHeader header; |
| 2187 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2188 header.public_header.reset_flag = false; |
| 2189 header.public_header.version_flag = false; |
| 2190 header.fec_flag = false; |
| 2191 header.entropy_flag = false; |
| 2192 header.public_header.sequence_number_length = PACKET_4BYTE_SEQUENCE_NUMBER; |
| 2193 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2194 header.fec_group = 0; |
| 2195 |
| 2196 QuicPaddingFrame padding_frame; |
| 2197 |
| 2198 QuicFrames frames; |
| 2199 frames.push_back(QuicFrame(&padding_frame)); |
| 2200 |
| 2201 unsigned char packet[kMaxPacketSize] = { |
| 2202 // public flags (8 byte guid and 4 byte sequence number) |
| 2203 0x2C, |
| 2204 // guid |
| 2205 0x10, 0x32, 0x54, 0x76, |
| 2206 0x98, 0xBA, 0xDC, 0xFE, |
| 2207 // packet sequence number |
| 2208 0xBC, 0x9A, 0x78, 0x56, |
| 2209 // private flags |
| 2210 0x00, |
| 2211 |
| 2212 // frame type (padding frame) |
| 2213 0x00, |
| 2214 }; |
| 2215 |
| 2216 uint64 header_size = |
| 2217 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 2218 PACKET_4BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 2219 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2220 |
| 2221 scoped_ptr<QuicPacket> data( |
| 2222 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2223 ASSERT_TRUE(data != NULL); |
| 2224 |
| 2225 test::CompareCharArraysWithHexError("constructed packet", |
| 2226 data->data(), data->length(), |
| 2227 AsChars(packet), arraysize(packet)); |
| 2228 } |
| 2229 |
| 2230 TEST_F(QuicFramerTest, Construct2ByteSequenceNumberPaddingFramePacket) { |
| 2231 QuicPacketHeader header; |
| 2232 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2233 header.public_header.reset_flag = false; |
| 2234 header.public_header.version_flag = false; |
| 2235 header.fec_flag = false; |
| 2236 header.entropy_flag = false; |
| 2237 header.public_header.sequence_number_length = PACKET_2BYTE_SEQUENCE_NUMBER; |
| 2238 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2239 header.fec_group = 0; |
| 2240 |
| 2241 QuicPaddingFrame padding_frame; |
| 2242 |
| 2243 QuicFrames frames; |
| 2244 frames.push_back(QuicFrame(&padding_frame)); |
| 2245 |
| 2246 unsigned char packet[kMaxPacketSize] = { |
| 2247 // public flags (8 byte guid and 2 byte sequence number) |
| 2248 0x1C, |
| 2249 // guid |
| 2250 0x10, 0x32, 0x54, 0x76, |
| 2251 0x98, 0xBA, 0xDC, 0xFE, |
| 2252 // packet sequence number |
| 2253 0xBC, 0x9A, |
| 2254 // private flags |
| 2255 0x00, |
| 2256 |
| 2257 // frame type (padding frame) |
| 2258 0x00, |
| 2259 }; |
| 2260 |
| 2261 uint64 header_size = |
| 2262 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 2263 PACKET_2BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 2264 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2265 |
| 2266 scoped_ptr<QuicPacket> data( |
| 2267 framer_.ConstructFrameDataPacket(header, frames).packet); |
| 2268 ASSERT_TRUE(data != NULL); |
| 2269 |
| 2270 test::CompareCharArraysWithHexError("constructed packet", |
| 2271 data->data(), data->length(), |
| 2272 AsChars(packet), arraysize(packet)); |
| 2273 } |
| 2274 |
| 2275 TEST_F(QuicFramerTest, Construct1ByteSequenceNumberPaddingFramePacket) { |
| 2276 QuicPacketHeader header; |
| 2277 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
| 2278 header.public_header.reset_flag = false; |
| 2279 header.public_header.version_flag = false; |
| 2280 header.fec_flag = false; |
| 2281 header.entropy_flag = false; |
| 2282 header.public_header.sequence_number_length = PACKET_1BYTE_SEQUENCE_NUMBER; |
| 2283 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
| 2284 header.fec_group = 0; |
| 2285 |
| 2286 QuicPaddingFrame padding_frame; |
| 2287 |
| 2288 QuicFrames frames; |
| 2289 frames.push_back(QuicFrame(&padding_frame)); |
| 2290 |
| 2291 unsigned char packet[kMaxPacketSize] = { |
| 2292 // public flags (8 byte guid and 1 byte sequence number) |
| 2293 0x0C, |
| 2294 // guid |
| 2295 0x10, 0x32, 0x54, 0x76, |
| 2296 0x98, 0xBA, 0xDC, 0xFE, |
| 2297 // packet sequence number |
| 2298 0xBC, |
| 2299 // private flags |
| 2300 0x00, |
| 2301 |
| 2302 // frame type (padding frame) |
| 2303 0x00, |
| 2304 }; |
| 2305 |
| 2306 uint64 header_size = |
| 2307 GetPacketHeaderSize(PACKET_8BYTE_GUID, !kIncludeVersion, |
| 2308 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP); |
| 2309 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2310 |
| 2311 scoped_ptr<QuicPacket> data( |
1920 framer_.ConstructFrameDataPacket(header, frames).packet); | 2312 framer_.ConstructFrameDataPacket(header, frames).packet); |
1921 ASSERT_TRUE(data != NULL); | 2313 ASSERT_TRUE(data != NULL); |
1922 | 2314 |
1923 test::CompareCharArraysWithHexError("constructed packet", | 2315 test::CompareCharArraysWithHexError("constructed packet", |
1924 data->data(), data->length(), | 2316 data->data(), data->length(), |
1925 AsChars(packet), arraysize(packet)); | 2317 AsChars(packet), arraysize(packet)); |
1926 } | 2318 } |
1927 | 2319 |
1928 TEST_F(QuicFramerTest, ConstructStreamFramePacket) { | 2320 TEST_F(QuicFramerTest, ConstructStreamFramePacket) { |
1929 QuicPacketHeader header; | 2321 QuicPacketHeader header; |
1930 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2322 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
1931 header.public_header.reset_flag = false; | 2323 header.public_header.reset_flag = false; |
1932 header.public_header.version_flag = false; | 2324 header.public_header.version_flag = false; |
1933 header.fec_flag = false; | 2325 header.fec_flag = false; |
1934 header.entropy_flag = true; | 2326 header.entropy_flag = true; |
1935 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); | 2327 header.packet_sequence_number = GG_UINT64_C(0x77123456789ABC); |
1936 header.fec_group = 0; | 2328 header.fec_group = 0; |
1937 | 2329 |
1938 QuicStreamFrame stream_frame; | 2330 QuicStreamFrame stream_frame; |
1939 stream_frame.stream_id = 0x01020304; | 2331 stream_frame.stream_id = 0x01020304; |
1940 stream_frame.fin = true; | 2332 stream_frame.fin = true; |
1941 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 2333 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); |
1942 stream_frame.data = "hello world!"; | 2334 stream_frame.data = "hello world!"; |
1943 | 2335 |
1944 QuicFrames frames; | 2336 QuicFrames frames; |
1945 frames.push_back(QuicFrame(&stream_frame)); | 2337 frames.push_back(QuicFrame(&stream_frame)); |
1946 | 2338 |
1947 unsigned char packet[] = { | 2339 unsigned char packet[] = { |
1948 // public flags (8 byte guid) | 2340 // public flags (8 byte guid) |
1949 0x0C, | 2341 0x3C, |
1950 // guid | 2342 // guid |
1951 0x10, 0x32, 0x54, 0x76, | 2343 0x10, 0x32, 0x54, 0x76, |
1952 0x98, 0xBA, 0xDC, 0xFE, | 2344 0x98, 0xBA, 0xDC, 0xFE, |
1953 // packet sequence number | 2345 // packet sequence number |
1954 0xBC, 0x9A, 0x78, 0x56, | 2346 0xBC, 0x9A, 0x78, 0x56, |
1955 0x34, 0x12, | 2347 0x34, 0x12, |
1956 // private flags (entropy) | 2348 // private flags (entropy) |
1957 0x01, | 2349 0x01, |
1958 | 2350 |
1959 // frame type (stream frame) | 2351 // frame type (stream frame) |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1996 stream_frame.stream_id = 0x01020304; | 2388 stream_frame.stream_id = 0x01020304; |
1997 stream_frame.fin = true; | 2389 stream_frame.fin = true; |
1998 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); | 2390 stream_frame.offset = GG_UINT64_C(0xBA98FEDC32107654); |
1999 stream_frame.data = "hello world!"; | 2391 stream_frame.data = "hello world!"; |
2000 | 2392 |
2001 QuicFrames frames; | 2393 QuicFrames frames; |
2002 frames.push_back(QuicFrame(&stream_frame)); | 2394 frames.push_back(QuicFrame(&stream_frame)); |
2003 | 2395 |
2004 unsigned char packet[] = { | 2396 unsigned char packet[] = { |
2005 // public flags (version, 8 byte guid) | 2397 // public flags (version, 8 byte guid) |
2006 0x0D, | 2398 0x3D, |
2007 // guid | 2399 // guid |
2008 0x10, 0x32, 0x54, 0x76, | 2400 0x10, 0x32, 0x54, 0x76, |
2009 0x98, 0xBA, 0xDC, 0xFE, | 2401 0x98, 0xBA, 0xDC, 0xFE, |
2010 // version tag | 2402 // version tag |
2011 'Q', '0', '0', '5', | 2403 'Q', '0', '0', '6', |
2012 // packet sequence number | 2404 // packet sequence number |
2013 0xBC, 0x9A, 0x78, 0x56, | 2405 0xBC, 0x9A, 0x78, 0x56, |
2014 0x34, 0x12, | 2406 0x34, 0x12, |
2015 // private flags (entropy) | 2407 // private flags (entropy) |
2016 0x01, | 2408 0x01, |
2017 | 2409 |
2018 // frame type (stream frame) | 2410 // frame type (stream frame) |
2019 0x01, | 2411 0x01, |
2020 // stream id | 2412 // stream id |
2021 0x04, 0x03, 0x02, 0x01, | 2413 0x04, 0x03, 0x02, 0x01, |
(...skipping 21 matching lines...) Expand all Loading... |
2043 } | 2435 } |
2044 | 2436 |
2045 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) { | 2437 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) { |
2046 QuicPacketPublicHeader header; | 2438 QuicPacketPublicHeader header; |
2047 header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2439 header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2048 header.reset_flag = false; | 2440 header.reset_flag = false; |
2049 header.version_flag = true; | 2441 header.version_flag = true; |
2050 | 2442 |
2051 unsigned char packet[] = { | 2443 unsigned char packet[] = { |
2052 // public flags (version, 8 byte guid) | 2444 // public flags (version, 8 byte guid) |
2053 0x0D, | 2445 0x3D, |
2054 // guid | 2446 // guid |
2055 0x10, 0x32, 0x54, 0x76, | 2447 0x10, 0x32, 0x54, 0x76, |
2056 0x98, 0xBA, 0xDC, 0xFE, | 2448 0x98, 0xBA, 0xDC, 0xFE, |
2057 // version tag | 2449 // version tag |
2058 'Q', '0', '0', '5', | 2450 'Q', '0', '0', '6', |
2059 'Q', '2', '.', '0', | 2451 'Q', '2', '.', '0', |
2060 }; | 2452 }; |
2061 | 2453 |
2062 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0'); | 2454 const int kQuicVersion2 = MakeQuicTag('Q', '2', '.', '0'); |
2063 QuicTagVector versions; | 2455 QuicTagVector versions; |
2064 versions.push_back(kQuicVersion1); | 2456 versions.push_back(kQuicVersion1); |
2065 versions.push_back(kQuicVersion2); | 2457 versions.push_back(kQuicVersion2); |
2066 scoped_ptr<QuicEncryptedPacket> data( | 2458 scoped_ptr<QuicEncryptedPacket> data( |
2067 framer_.ConstructVersionNegotiationPacket(header, versions)); | 2459 framer_.ConstructVersionNegotiationPacket(header, versions)); |
2068 | 2460 |
(...skipping 19 matching lines...) Expand all Loading... |
2088 ack_frame.received_info.missing_packets.insert( | 2480 ack_frame.received_info.missing_packets.insert( |
2089 GG_UINT64_C(0x770123456789ABE)); | 2481 GG_UINT64_C(0x770123456789ABE)); |
2090 ack_frame.sent_info.entropy_hash = 0x14; | 2482 ack_frame.sent_info.entropy_hash = 0x14; |
2091 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); | 2483 ack_frame.sent_info.least_unacked = GG_UINT64_C(0x770123456789AA0); |
2092 | 2484 |
2093 QuicFrames frames; | 2485 QuicFrames frames; |
2094 frames.push_back(QuicFrame(&ack_frame)); | 2486 frames.push_back(QuicFrame(&ack_frame)); |
2095 | 2487 |
2096 unsigned char packet[] = { | 2488 unsigned char packet[] = { |
2097 // public flags (8 byte guid) | 2489 // public flags (8 byte guid) |
2098 0x0C, | 2490 0x3C, |
2099 // guid | 2491 // guid |
2100 0x10, 0x32, 0x54, 0x76, | 2492 0x10, 0x32, 0x54, 0x76, |
2101 0x98, 0xBA, 0xDC, 0xFE, | 2493 0x98, 0xBA, 0xDC, 0xFE, |
2102 // packet sequence number | 2494 // packet sequence number |
2103 0xBC, 0x9A, 0x78, 0x56, | 2495 0xBC, 0x9A, 0x78, 0x56, |
2104 0x34, 0x12, | 2496 0x34, 0x12, |
2105 // private flags (entropy) | 2497 // private flags (entropy) |
2106 0x01, | 2498 0x01, |
2107 | 2499 |
2108 // frame type (ack frame) | 2500 // frame type (ack frame) |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2148 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2540 QuicCongestionFeedbackFrame congestion_feedback_frame; |
2149 congestion_feedback_frame.type = kTCP; | 2541 congestion_feedback_frame.type = kTCP; |
2150 congestion_feedback_frame.tcp.accumulated_number_of_lost_packets = 0x0201; | 2542 congestion_feedback_frame.tcp.accumulated_number_of_lost_packets = 0x0201; |
2151 congestion_feedback_frame.tcp.receive_window = 0x4030; | 2543 congestion_feedback_frame.tcp.receive_window = 0x4030; |
2152 | 2544 |
2153 QuicFrames frames; | 2545 QuicFrames frames; |
2154 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 2546 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
2155 | 2547 |
2156 unsigned char packet[] = { | 2548 unsigned char packet[] = { |
2157 // public flags (8 byte guid) | 2549 // public flags (8 byte guid) |
2158 0x0C, | 2550 0x3C, |
2159 // guid | 2551 // guid |
2160 0x10, 0x32, 0x54, 0x76, | 2552 0x10, 0x32, 0x54, 0x76, |
2161 0x98, 0xBA, 0xDC, 0xFE, | 2553 0x98, 0xBA, 0xDC, 0xFE, |
2162 // packet sequence number | 2554 // packet sequence number |
2163 0xBC, 0x9A, 0x78, 0x56, | 2555 0xBC, 0x9A, 0x78, 0x56, |
2164 0x34, 0x12, | 2556 0x34, 0x12, |
2165 // private flags | 2557 // private flags |
2166 0x00, | 2558 0x00, |
2167 | 2559 |
2168 // frame type (congestion feedback frame) | 2560 // frame type (congestion feedback frame) |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2207 GG_UINT64_C(0x07E1D2C3B4A59688))))); | 2599 GG_UINT64_C(0x07E1D2C3B4A59688))))); |
2208 frame.inter_arrival.received_packet_times.insert( | 2600 frame.inter_arrival.received_packet_times.insert( |
2209 make_pair(GG_UINT64_C(0x0123456789ABD), | 2601 make_pair(GG_UINT64_C(0x0123456789ABD), |
2210 start_.Add(QuicTime::Delta::FromMicroseconds( | 2602 start_.Add(QuicTime::Delta::FromMicroseconds( |
2211 GG_UINT64_C(0x07E1D2C3B4A59689))))); | 2603 GG_UINT64_C(0x07E1D2C3B4A59689))))); |
2212 QuicFrames frames; | 2604 QuicFrames frames; |
2213 frames.push_back(QuicFrame(&frame)); | 2605 frames.push_back(QuicFrame(&frame)); |
2214 | 2606 |
2215 unsigned char packet[] = { | 2607 unsigned char packet[] = { |
2216 // public flags (8 byte guid) | 2608 // public flags (8 byte guid) |
2217 0x0C, | 2609 0x3C, |
2218 // guid | 2610 // guid |
2219 0x10, 0x32, 0x54, 0x76, | 2611 0x10, 0x32, 0x54, 0x76, |
2220 0x98, 0xBA, 0xDC, 0xFE, | 2612 0x98, 0xBA, 0xDC, 0xFE, |
2221 // packet sequence number | 2613 // packet sequence number |
2222 0xBC, 0x9A, 0x78, 0x56, | 2614 0xBC, 0x9A, 0x78, 0x56, |
2223 0x34, 0x12, | 2615 0x34, 0x12, |
2224 // private flags | 2616 // private flags |
2225 0x00, | 2617 0x00, |
2226 | 2618 |
2227 // frame type (congestion feedback frame) | 2619 // frame type (congestion feedback frame) |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2270 QuicCongestionFeedbackFrame congestion_feedback_frame; | 2662 QuicCongestionFeedbackFrame congestion_feedback_frame; |
2271 congestion_feedback_frame.type = kFixRate; | 2663 congestion_feedback_frame.type = kFixRate; |
2272 congestion_feedback_frame.fix_rate.bitrate | 2664 congestion_feedback_frame.fix_rate.bitrate |
2273 = QuicBandwidth::FromBytesPerSecond(0x04030201); | 2665 = QuicBandwidth::FromBytesPerSecond(0x04030201); |
2274 | 2666 |
2275 QuicFrames frames; | 2667 QuicFrames frames; |
2276 frames.push_back(QuicFrame(&congestion_feedback_frame)); | 2668 frames.push_back(QuicFrame(&congestion_feedback_frame)); |
2277 | 2669 |
2278 unsigned char packet[] = { | 2670 unsigned char packet[] = { |
2279 // public flags (8 byte guid) | 2671 // public flags (8 byte guid) |
2280 0x0C, | 2672 0x3C, |
2281 // guid | 2673 // guid |
2282 0x10, 0x32, 0x54, 0x76, | 2674 0x10, 0x32, 0x54, 0x76, |
2283 0x98, 0xBA, 0xDC, 0xFE, | 2675 0x98, 0xBA, 0xDC, 0xFE, |
2284 // packet sequence number | 2676 // packet sequence number |
2285 0xBC, 0x9A, 0x78, 0x56, | 2677 0xBC, 0x9A, 0x78, 0x56, |
2286 0x34, 0x12, | 2678 0x34, 0x12, |
2287 // private flags | 2679 // private flags |
2288 0x00, | 2680 0x00, |
2289 | 2681 |
2290 // frame type (congestion feedback frame) | 2682 // frame type (congestion feedback frame) |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2336 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 2728 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
2337 header.fec_group = 0; | 2729 header.fec_group = 0; |
2338 | 2730 |
2339 QuicRstStreamFrame rst_frame; | 2731 QuicRstStreamFrame rst_frame; |
2340 rst_frame.stream_id = 0x01020304; | 2732 rst_frame.stream_id = 0x01020304; |
2341 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); | 2733 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); |
2342 rst_frame.error_details = "because I can"; | 2734 rst_frame.error_details = "because I can"; |
2343 | 2735 |
2344 unsigned char packet[] = { | 2736 unsigned char packet[] = { |
2345 // public flags (8 byte guid) | 2737 // public flags (8 byte guid) |
2346 0x0C, | 2738 0x3C, |
2347 // guid | 2739 // guid |
2348 0x10, 0x32, 0x54, 0x76, | 2740 0x10, 0x32, 0x54, 0x76, |
2349 0x98, 0xBA, 0xDC, 0xFE, | 2741 0x98, 0xBA, 0xDC, 0xFE, |
2350 // packet sequence number | 2742 // packet sequence number |
2351 0xBC, 0x9A, 0x78, 0x56, | 2743 0xBC, 0x9A, 0x78, 0x56, |
2352 0x34, 0x12, | 2744 0x34, 0x12, |
2353 // private flags | 2745 // private flags |
2354 0x00, | 2746 0x00, |
2355 | 2747 |
2356 // frame type (rst stream frame) | 2748 // frame type (rst stream frame) |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2399 ack_frame->received_info.largest_observed = GG_UINT64_C(0x0123456789ABF); | 2791 ack_frame->received_info.largest_observed = GG_UINT64_C(0x0123456789ABF); |
2400 ack_frame->received_info.missing_packets.insert(GG_UINT64_C(0x0123456789ABE)); | 2792 ack_frame->received_info.missing_packets.insert(GG_UINT64_C(0x0123456789ABE)); |
2401 ack_frame->sent_info.entropy_hash = 0xE0; | 2793 ack_frame->sent_info.entropy_hash = 0xE0; |
2402 ack_frame->sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); | 2794 ack_frame->sent_info.least_unacked = GG_UINT64_C(0x0123456789AA0); |
2403 | 2795 |
2404 QuicFrames frames; | 2796 QuicFrames frames; |
2405 frames.push_back(QuicFrame(&close_frame)); | 2797 frames.push_back(QuicFrame(&close_frame)); |
2406 | 2798 |
2407 unsigned char packet[] = { | 2799 unsigned char packet[] = { |
2408 // public flags (8 byte guid) | 2800 // public flags (8 byte guid) |
2409 0x0C, | 2801 0x3C, |
2410 // guid | 2802 // guid |
2411 0x10, 0x32, 0x54, 0x76, | 2803 0x10, 0x32, 0x54, 0x76, |
2412 0x98, 0xBA, 0xDC, 0xFE, | 2804 0x98, 0xBA, 0xDC, 0xFE, |
2413 // packet sequence number | 2805 // packet sequence number |
2414 0xBC, 0x9A, 0x78, 0x56, | 2806 0xBC, 0x9A, 0x78, 0x56, |
2415 0x34, 0x12, | 2807 0x34, 0x12, |
2416 // private flags (entropy) | 2808 // private flags (entropy) |
2417 0x01, | 2809 0x01, |
2418 | 2810 |
2419 // frame type (connection close frame) | 2811 // frame type (connection close frame) |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2470 QuicGoAwayFrame goaway_frame; | 2862 QuicGoAwayFrame goaway_frame; |
2471 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); | 2863 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); |
2472 goaway_frame.last_good_stream_id = 0x01020304; | 2864 goaway_frame.last_good_stream_id = 0x01020304; |
2473 goaway_frame.reason_phrase = "because I can"; | 2865 goaway_frame.reason_phrase = "because I can"; |
2474 | 2866 |
2475 QuicFrames frames; | 2867 QuicFrames frames; |
2476 frames.push_back(QuicFrame(&goaway_frame)); | 2868 frames.push_back(QuicFrame(&goaway_frame)); |
2477 | 2869 |
2478 unsigned char packet[] = { | 2870 unsigned char packet[] = { |
2479 // public flags (8 byte guid) | 2871 // public flags (8 byte guid) |
2480 0x0C, | 2872 0x3C, |
2481 // guid | 2873 // guid |
2482 0x10, 0x32, 0x54, 0x76, | 2874 0x10, 0x32, 0x54, 0x76, |
2483 0x98, 0xBA, 0xDC, 0xFE, | 2875 0x98, 0xBA, 0xDC, 0xFE, |
2484 // packet sequence number | 2876 // packet sequence number |
2485 0xBC, 0x9A, 0x78, 0x56, | 2877 0xBC, 0x9A, 0x78, 0x56, |
2486 0x34, 0x12, | 2878 0x34, 0x12, |
2487 // private flags(entropy) | 2879 // private flags(entropy) |
2488 0x01, | 2880 0x01, |
2489 | 2881 |
2490 // frame type (go away frame) | 2882 // frame type (go away frame) |
(...skipping 23 matching lines...) Expand all Loading... |
2514 TEST_F(QuicFramerTest, ConstructPublicResetPacket) { | 2906 TEST_F(QuicFramerTest, ConstructPublicResetPacket) { |
2515 QuicPublicResetPacket reset_packet; | 2907 QuicPublicResetPacket reset_packet; |
2516 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 2908 reset_packet.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
2517 reset_packet.public_header.reset_flag = true; | 2909 reset_packet.public_header.reset_flag = true; |
2518 reset_packet.public_header.version_flag = false; | 2910 reset_packet.public_header.version_flag = false; |
2519 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); | 2911 reset_packet.rejected_sequence_number = GG_UINT64_C(0x123456789ABC); |
2520 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); | 2912 reset_packet.nonce_proof = GG_UINT64_C(0xABCDEF0123456789); |
2521 | 2913 |
2522 unsigned char packet[] = { | 2914 unsigned char packet[] = { |
2523 // public flags (public reset, 8 byte GUID) | 2915 // public flags (public reset, 8 byte GUID) |
2524 0x0E, | 2916 0x3E, |
2525 // guid | 2917 // guid |
2526 0x10, 0x32, 0x54, 0x76, | 2918 0x10, 0x32, 0x54, 0x76, |
2527 0x98, 0xBA, 0xDC, 0xFE, | 2919 0x98, 0xBA, 0xDC, 0xFE, |
2528 // nonce proof | 2920 // nonce proof |
2529 0x89, 0x67, 0x45, 0x23, | 2921 0x89, 0x67, 0x45, 0x23, |
2530 0x01, 0xEF, 0xCD, 0xAB, | 2922 0x01, 0xEF, 0xCD, 0xAB, |
2531 // rejected sequence number | 2923 // rejected sequence number |
2532 0xBC, 0x9A, 0x78, 0x56, | 2924 0xBC, 0x9A, 0x78, 0x56, |
2533 0x34, 0x12, | 2925 0x34, 0x12, |
2534 }; | 2926 }; |
(...skipping 17 matching lines...) Expand all Loading... |
2552 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); | 2944 header.packet_sequence_number = (GG_UINT64_C(0x123456789ABC)); |
2553 header.is_in_fec_group = IN_FEC_GROUP; | 2945 header.is_in_fec_group = IN_FEC_GROUP; |
2554 header.fec_group = GG_UINT64_C(0x123456789ABB);; | 2946 header.fec_group = GG_UINT64_C(0x123456789ABB);; |
2555 | 2947 |
2556 QuicFecData fec_data; | 2948 QuicFecData fec_data; |
2557 fec_data.fec_group = 1; | 2949 fec_data.fec_group = 1; |
2558 fec_data.redundancy = "abcdefghijklmnop"; | 2950 fec_data.redundancy = "abcdefghijklmnop"; |
2559 | 2951 |
2560 unsigned char packet[] = { | 2952 unsigned char packet[] = { |
2561 // public flags (8 byte guid) | 2953 // public flags (8 byte guid) |
2562 0x0C, | 2954 0x3C, |
2563 // guid | 2955 // guid |
2564 0x10, 0x32, 0x54, 0x76, | 2956 0x10, 0x32, 0x54, 0x76, |
2565 0x98, 0xBA, 0xDC, 0xFE, | 2957 0x98, 0xBA, 0xDC, 0xFE, |
2566 // packet sequence number | 2958 // packet sequence number |
2567 0xBC, 0x9A, 0x78, 0x56, | 2959 0xBC, 0x9A, 0x78, 0x56, |
2568 0x34, 0x12, | 2960 0x34, 0x12, |
2569 // private flags (entropy & fec group & fec packet) | 2961 // private flags (entropy & fec group & fec packet) |
2570 0x07, | 2962 0x07, |
2571 // first fec protected packet offset | 2963 // first fec protected packet offset |
2572 0x01, | 2964 0x01, |
(...skipping 11 matching lines...) Expand all Loading... |
2584 | 2976 |
2585 test::CompareCharArraysWithHexError("constructed packet", | 2977 test::CompareCharArraysWithHexError("constructed packet", |
2586 data->data(), data->length(), | 2978 data->data(), data->length(), |
2587 AsChars(packet), arraysize(packet)); | 2979 AsChars(packet), arraysize(packet)); |
2588 } | 2980 } |
2589 | 2981 |
2590 TEST_F(QuicFramerTest, EncryptPacket) { | 2982 TEST_F(QuicFramerTest, EncryptPacket) { |
2591 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 2983 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
2592 unsigned char packet[] = { | 2984 unsigned char packet[] = { |
2593 // public flags (8 byte guid) | 2985 // public flags (8 byte guid) |
2594 0x0C, | 2986 0x3C, |
2595 // guid | 2987 // guid |
2596 0x10, 0x32, 0x54, 0x76, | 2988 0x10, 0x32, 0x54, 0x76, |
2597 0x98, 0xBA, 0xDC, 0xFE, | 2989 0x98, 0xBA, 0xDC, 0xFE, |
2598 // packet sequence number | 2990 // packet sequence number |
2599 0xBC, 0x9A, 0x78, 0x56, | 2991 0xBC, 0x9A, 0x78, 0x56, |
2600 0x34, 0x12, | 2992 0x34, 0x12, |
2601 // private flags (fec group & fec packet) | 2993 // private flags (fec group & fec packet) |
2602 0x06, | 2994 0x06, |
2603 // first fec protected packet offset | 2995 // first fec protected packet offset |
2604 0x01, | 2996 0x01, |
2605 | 2997 |
2606 // redundancy | 2998 // redundancy |
2607 'a', 'b', 'c', 'd', | 2999 'a', 'b', 'c', 'd', |
2608 'e', 'f', 'g', 'h', | 3000 'e', 'f', 'g', 'h', |
2609 'i', 'j', 'k', 'l', | 3001 'i', 'j', 'k', 'l', |
2610 'm', 'n', 'o', 'p', | 3002 'm', 'n', 'o', 'p', |
2611 }; | 3003 }; |
2612 | 3004 |
2613 scoped_ptr<QuicPacket> raw( | 3005 scoped_ptr<QuicPacket> raw( |
2614 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3006 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
2615 PACKET_8BYTE_GUID, !kIncludeVersion)); | 3007 PACKET_8BYTE_GUID, !kIncludeVersion, |
| 3008 PACKET_6BYTE_SEQUENCE_NUMBER)); |
2616 scoped_ptr<QuicEncryptedPacket> encrypted( | 3009 scoped_ptr<QuicEncryptedPacket> encrypted( |
2617 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3010 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
2618 | 3011 |
2619 ASSERT_TRUE(encrypted.get() != NULL); | 3012 ASSERT_TRUE(encrypted.get() != NULL); |
2620 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3013 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
2621 } | 3014 } |
2622 | 3015 |
2623 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { | 3016 TEST_F(QuicFramerTest, EncryptPacketWithVersionFlag) { |
2624 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 3017 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
2625 unsigned char packet[] = { | 3018 unsigned char packet[] = { |
2626 // public flags (version, 8 byte guid) | 3019 // public flags (version, 8 byte guid) |
2627 0x0D, | 3020 0x3D, |
2628 // guid | 3021 // guid |
2629 0x10, 0x32, 0x54, 0x76, | 3022 0x10, 0x32, 0x54, 0x76, |
2630 0x98, 0xBA, 0xDC, 0xFE, | 3023 0x98, 0xBA, 0xDC, 0xFE, |
2631 // version tag | 3024 // version tag |
2632 'Q', '.', '1', '0', | 3025 'Q', '.', '1', '0', |
2633 // packet sequence number | 3026 // packet sequence number |
2634 0xBC, 0x9A, 0x78, 0x56, | 3027 0xBC, 0x9A, 0x78, 0x56, |
2635 0x34, 0x12, | 3028 0x34, 0x12, |
2636 // private flags (fec group & fec flags) | 3029 // private flags (fec group & fec flags) |
2637 0x06, | 3030 0x06, |
2638 // first fec protected packet offset | 3031 // first fec protected packet offset |
2639 0x01, | 3032 0x01, |
2640 | 3033 |
2641 // redundancy | 3034 // redundancy |
2642 'a', 'b', 'c', 'd', | 3035 'a', 'b', 'c', 'd', |
2643 'e', 'f', 'g', 'h', | 3036 'e', 'f', 'g', 'h', |
2644 'i', 'j', 'k', 'l', | 3037 'i', 'j', 'k', 'l', |
2645 'm', 'n', 'o', 'p', | 3038 'm', 'n', 'o', 'p', |
2646 }; | 3039 }; |
2647 | 3040 |
2648 scoped_ptr<QuicPacket> raw( | 3041 scoped_ptr<QuicPacket> raw( |
2649 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3042 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
2650 PACKET_8BYTE_GUID, kIncludeVersion)); | 3043 PACKET_8BYTE_GUID, kIncludeVersion, |
| 3044 PACKET_6BYTE_SEQUENCE_NUMBER)); |
2651 scoped_ptr<QuicEncryptedPacket> encrypted( | 3045 scoped_ptr<QuicEncryptedPacket> encrypted( |
2652 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3046 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
2653 | 3047 |
2654 ASSERT_TRUE(encrypted.get() != NULL); | 3048 ASSERT_TRUE(encrypted.get() != NULL); |
2655 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3049 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
2656 } | 3050 } |
2657 | 3051 |
2658 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ | 3052 // TODO(rch): re-enable after https://codereview.chromium.org/11820005/ |
2659 // lands. Currently this is causing valgrind problems, but it should be | 3053 // lands. Currently this is causing valgrind problems, but it should be |
2660 // fixed in the followup CL. | 3054 // fixed in the followup CL. |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2809 original_raw_length = raw_close_packet->length(); | 3203 original_raw_length = raw_close_packet->length(); |
2810 raw_close_packet.reset( | 3204 raw_close_packet.reset( |
2811 framer_.ConstructFrameDataPacket(header, frames).packet); | 3205 framer_.ConstructFrameDataPacket(header, frames).packet); |
2812 ASSERT_TRUE(raw_ack_packet != NULL); | 3206 ASSERT_TRUE(raw_ack_packet != NULL); |
2813 EXPECT_EQ(original_raw_length, raw_close_packet->length()); | 3207 EXPECT_EQ(original_raw_length, raw_close_packet->length()); |
2814 } | 3208 } |
2815 | 3209 |
2816 TEST_F(QuicFramerTest, EntropyFlagTest) { | 3210 TEST_F(QuicFramerTest, EntropyFlagTest) { |
2817 unsigned char packet[] = { | 3211 unsigned char packet[] = { |
2818 // public flags (8 byte guid) | 3212 // public flags (8 byte guid) |
2819 0x0C, | 3213 0x3C, |
2820 // guid | 3214 // guid |
2821 0x10, 0x32, 0x54, 0x76, | 3215 0x10, 0x32, 0x54, 0x76, |
2822 0x98, 0xBA, 0xDC, 0xFE, | 3216 0x98, 0xBA, 0xDC, 0xFE, |
2823 // packet sequence number | 3217 // packet sequence number |
2824 0xBC, 0x9A, 0x78, 0x56, | 3218 0xBC, 0x9A, 0x78, 0x56, |
2825 0x34, 0x12, | 3219 0x34, 0x12, |
2826 // private flags (Entropy) | 3220 // private flags (Entropy) |
2827 0x01, | 3221 0x01, |
2828 | 3222 |
2829 // frame type (stream frame) | 3223 // frame type (stream frame) |
(...skipping 18 matching lines...) Expand all Loading... |
2848 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2849 ASSERT_TRUE(visitor_.header_.get()); | 3243 ASSERT_TRUE(visitor_.header_.get()); |
2850 EXPECT_TRUE(visitor_.header_->entropy_flag); | 3244 EXPECT_TRUE(visitor_.header_->entropy_flag); |
2851 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 3245 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
2852 EXPECT_FALSE(visitor_.header_->fec_flag); | 3246 EXPECT_FALSE(visitor_.header_->fec_flag); |
2853 }; | 3247 }; |
2854 | 3248 |
2855 TEST_F(QuicFramerTest, FecEntropyTest) { | 3249 TEST_F(QuicFramerTest, FecEntropyTest) { |
2856 unsigned char packet[] = { | 3250 unsigned char packet[] = { |
2857 // public flags (8 byte guid) | 3251 // public flags (8 byte guid) |
2858 0x0C, | 3252 0x3C, |
2859 // guid | 3253 // guid |
2860 0x10, 0x32, 0x54, 0x76, | 3254 0x10, 0x32, 0x54, 0x76, |
2861 0x98, 0xBA, 0xDC, 0xFE, | 3255 0x98, 0xBA, 0xDC, 0xFE, |
2862 // packet sequence number | 3256 // packet sequence number |
2863 0xBC, 0x9A, 0x78, 0x56, | 3257 0xBC, 0x9A, 0x78, 0x56, |
2864 0x34, 0x12, | 3258 0x34, 0x12, |
2865 // private flags (Entropy & fec group & FEC) | 3259 // private flags (Entropy & fec group & FEC) |
2866 0x07, | 3260 0x07, |
2867 // first fec protected packet offset | 3261 // first fec protected packet offset |
2868 0xFF, | 3262 0xFF, |
(...skipping 20 matching lines...) Expand all Loading... |
2889 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3283 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2890 ASSERT_TRUE(visitor_.header_.get()); | 3284 ASSERT_TRUE(visitor_.header_.get()); |
2891 EXPECT_TRUE(visitor_.header_->fec_flag); | 3285 EXPECT_TRUE(visitor_.header_->fec_flag); |
2892 EXPECT_TRUE(visitor_.header_->entropy_flag); | 3286 EXPECT_TRUE(visitor_.header_->entropy_flag); |
2893 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 3287 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
2894 }; | 3288 }; |
2895 | 3289 |
2896 TEST_F(QuicFramerTest, StopPacketProcessing) { | 3290 TEST_F(QuicFramerTest, StopPacketProcessing) { |
2897 unsigned char packet[] = { | 3291 unsigned char packet[] = { |
2898 // public flags (8 byte guid) | 3292 // public flags (8 byte guid) |
2899 0x0C, | 3293 0x3C, |
2900 // guid | 3294 // guid |
2901 0x10, 0x32, 0x54, 0x76, | 3295 0x10, 0x32, 0x54, 0x76, |
2902 0x98, 0xBA, 0xDC, 0xFE, | 3296 0x98, 0xBA, 0xDC, 0xFE, |
2903 // packet sequence number | 3297 // packet sequence number |
2904 0xBC, 0x9A, 0x78, 0x56, | 3298 0xBC, 0x9A, 0x78, 0x56, |
2905 0x34, 0x12, | 3299 0x34, 0x12, |
2906 // Entropy | 3300 // Entropy |
2907 0x01, | 3301 0x01, |
2908 | 3302 |
2909 // frame type (stream frame) | 3303 // frame type (stream frame) |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2950 EXPECT_CALL(visitor, OnPacketComplete()); | 3344 EXPECT_CALL(visitor, OnPacketComplete()); |
2951 | 3345 |
2952 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3346 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
2953 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3347 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
2954 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3348 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
2955 } | 3349 } |
2956 | 3350 |
2957 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) { | 3351 TEST_F(QuicFramerTest, ConnectionCloseWithInvalidAck) { |
2958 unsigned char packet[] = { | 3352 unsigned char packet[] = { |
2959 // public flags (8 byte guid) | 3353 // public flags (8 byte guid) |
2960 0x0C, | 3354 0x3C, |
2961 // guid | 3355 // guid |
2962 0x10, 0x32, 0x54, 0x76, | 3356 0x10, 0x32, 0x54, 0x76, |
2963 0x98, 0xBA, 0xDC, 0xFE, | 3357 0x98, 0xBA, 0xDC, 0xFE, |
2964 // packet sequence number | 3358 // packet sequence number |
2965 0xBC, 0x9A, 0x78, 0x56, | 3359 0xBC, 0x9A, 0x78, 0x56, |
2966 0x34, 0x12, | 3360 0x34, 0x12, |
2967 // private flags | 3361 // private flags |
2968 0x00, | 3362 0x00, |
2969 | 3363 |
2970 // frame type (connection close frame) | 3364 // frame type (connection close frame) |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3007 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); | 3401 EXPECT_CALL(visitor, OnConnectionCloseFrame(_)).Times(0); |
3008 EXPECT_CALL(visitor, OnPacketComplete()); | 3402 EXPECT_CALL(visitor, OnPacketComplete()); |
3009 | 3403 |
3010 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3011 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3012 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3406 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3013 } | 3407 } |
3014 | 3408 |
3015 } // namespace test | 3409 } // namespace test |
3016 } // namespace net | 3410 } // namespace net |
OLD | NEW |