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