| 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 |