| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/quic_framer.h" | 5 #include "net/quic/quic_framer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 // Size in bytes of the stream frame fields for an arbitrary StreamID and | 59 // Size in bytes of the stream frame fields for an arbitrary StreamID and |
| 60 // offset and the last frame in a packet. | 60 // offset and the last frame in a packet. |
| 61 size_t GetMinStreamFrameSize() { | 61 size_t GetMinStreamFrameSize() { |
| 62 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; | 62 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; |
| 63 } | 63 } |
| 64 | 64 |
| 65 // Index into the packet number offset in the header. | 65 // Index into the packet number offset in the header. |
| 66 size_t GetPacketNumberOffset(QuicConnectionIdLength connection_id_length, | 66 size_t GetPacketNumberOffset(QuicConnectionIdLength connection_id_length, |
| 67 bool include_version) { | 67 bool include_version) { |
| 68 return kConnectionIdOffset + connection_id_length + | 68 return kConnectionIdOffset + connection_id_length + |
| 69 (include_version ? kQuicVersionSize : 0); | 69 (include_version ? kQuicVersionSize : 0); |
| 70 } | 70 } |
| 71 | 71 |
| 72 size_t GetPacketNumberOffset(bool include_version) { | 72 size_t GetPacketNumberOffset(bool include_version) { |
| 73 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version); | 73 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version); |
| 74 } | 74 } |
| 75 | 75 |
| 76 // Index into the private flags offset in the data packet header. | 76 // Index into the private flags offset in the data packet header. |
| 77 size_t GetPrivateFlagsOffset(QuicConnectionIdLength connection_id_length, | 77 size_t GetPrivateFlagsOffset(QuicConnectionIdLength connection_id_length, |
| 78 bool include_version) { | 78 bool include_version) { |
| 79 return GetPacketNumberOffset(connection_id_length, include_version) + | 79 return GetPacketNumberOffset(connection_id_length, include_version) + |
| 80 PACKET_6BYTE_PACKET_NUMBER; | 80 PACKET_6BYTE_PACKET_NUMBER; |
| 81 } | 81 } |
| 82 | 82 |
| 83 size_t GetPrivateFlagsOffset(bool include_version) { | 83 size_t GetPrivateFlagsOffset(bool include_version) { |
| 84 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version); | 84 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version); |
| 85 } | 85 } |
| 86 | 86 |
| 87 size_t GetPrivateFlagsOffset(bool include_version, | 87 size_t GetPrivateFlagsOffset(bool include_version, |
| 88 QuicPacketNumberLength packet_number_length) { | 88 QuicPacketNumberLength packet_number_length) { |
| 89 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + | 89 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + |
| 90 packet_number_length; | 90 packet_number_length; |
| 91 } | 91 } |
| 92 | 92 |
| 93 // Index into the fec group offset in the header. | 93 // Index into the fec group offset in the header. |
| 94 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length, | 94 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length, |
| 95 bool include_version) { | 95 bool include_version) { |
| 96 return GetPrivateFlagsOffset(connection_id_length, include_version) + | 96 return GetPrivateFlagsOffset(connection_id_length, include_version) + |
| 97 kPrivateFlagsSize; | 97 kPrivateFlagsSize; |
| 98 } | 98 } |
| 99 | 99 |
| 100 size_t GetFecGroupOffset(bool include_version) { | 100 size_t GetFecGroupOffset(bool include_version) { |
| 101 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + | 101 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version) + |
| 102 kPrivateFlagsSize; | 102 kPrivateFlagsSize; |
| 103 } | 103 } |
| 104 | 104 |
| 105 size_t GetFecGroupOffset(bool include_version, | 105 size_t GetFecGroupOffset(bool include_version, |
| 106 QuicPacketNumberLength packet_number_length) { | 106 QuicPacketNumberLength packet_number_length) { |
| 107 return GetPrivateFlagsOffset(include_version, packet_number_length) + | 107 return GetPrivateFlagsOffset(include_version, packet_number_length) + |
| 108 kPrivateFlagsSize; | 108 kPrivateFlagsSize; |
| 109 } | 109 } |
| 110 | 110 |
| 111 // Index into the message tag of the public reset packet. | 111 // Index into the message tag of the public reset packet. |
| 112 // Public resets always have full connection_ids. | 112 // Public resets always have full connection_ids. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 public: | 178 public: |
| 179 TestQuicVisitor() | 179 TestQuicVisitor() |
| 180 : error_count_(0), | 180 : error_count_(0), |
| 181 version_mismatch_(0), | 181 version_mismatch_(0), |
| 182 packet_count_(0), | 182 packet_count_(0), |
| 183 frame_count_(0), | 183 frame_count_(0), |
| 184 fec_count_(0), | 184 fec_count_(0), |
| 185 complete_packets_(0), | 185 complete_packets_(0), |
| 186 revived_packets_(0), | 186 revived_packets_(0), |
| 187 accept_packet_(true), | 187 accept_packet_(true), |
| 188 accept_public_header_(true) { | 188 accept_public_header_(true) {} |
| 189 } | |
| 190 | 189 |
| 191 ~TestQuicVisitor() override { | 190 ~TestQuicVisitor() override { |
| 192 STLDeleteElements(&stream_frames_); | 191 STLDeleteElements(&stream_frames_); |
| 193 STLDeleteElements(&ack_frames_); | 192 STLDeleteElements(&ack_frames_); |
| 194 STLDeleteElements(&stop_waiting_frames_); | 193 STLDeleteElements(&stop_waiting_frames_); |
| 195 STLDeleteElements(&ping_frames_); | 194 STLDeleteElements(&ping_frames_); |
| 196 STLDeleteElements(&stream_data_); | 195 STLDeleteElements(&stream_data_); |
| 197 } | 196 } |
| 198 | 197 |
| 199 void OnError(QuicFramer* f) override { | 198 void OnError(QuicFramer* f) override { |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 framer_.set_version(version_); | 345 framer_.set_version(version_); |
| 347 framer_.SetDecrypter(ENCRYPTION_NONE, decrypter_); | 346 framer_.SetDecrypter(ENCRYPTION_NONE, decrypter_); |
| 348 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); | 347 framer_.SetEncrypter(ENCRYPTION_NONE, encrypter_); |
| 349 framer_.set_visitor(&visitor_); | 348 framer_.set_visitor(&visitor_); |
| 350 framer_.set_received_entropy_calculator(&entropy_calculator_); | 349 framer_.set_received_entropy_calculator(&entropy_calculator_); |
| 351 } | 350 } |
| 352 | 351 |
| 353 // Helper function to get unsigned char representation of digit in the | 352 // Helper function to get unsigned char representation of digit in the |
| 354 // units place of the current QUIC version number. | 353 // units place of the current QUIC version number. |
| 355 unsigned char GetQuicVersionDigitOnes() { | 354 unsigned char GetQuicVersionDigitOnes() { |
| 356 return static_cast<unsigned char> ('0' + version_%10); | 355 return static_cast<unsigned char>('0' + version_ % 10); |
| 357 } | 356 } |
| 358 | 357 |
| 359 // Helper function to get unsigned char representation of digit in the | 358 // Helper function to get unsigned char representation of digit in the |
| 360 // tens place of the current QUIC version number. | 359 // tens place of the current QUIC version number. |
| 361 unsigned char GetQuicVersionDigitTens() { | 360 unsigned char GetQuicVersionDigitTens() { |
| 362 return static_cast<unsigned char> ('0' + (version_/10)%10); | 361 return static_cast<unsigned char>('0' + (version_ / 10) % 10); |
| 363 } | 362 } |
| 364 | 363 |
| 365 bool CheckEncryption(QuicPacketNumber packet_number, QuicPacket* packet) { | 364 bool CheckEncryption(QuicPacketNumber packet_number, QuicPacket* packet) { |
| 366 if (packet_number != encrypter_->packet_number_) { | 365 if (packet_number != encrypter_->packet_number_) { |
| 367 LOG(ERROR) << "Encrypted incorrect packet number. expected " | 366 LOG(ERROR) << "Encrypted incorrect packet number. expected " |
| 368 << packet_number << " actual: " << encrypter_->packet_number_; | 367 << packet_number << " actual: " << encrypter_->packet_number_; |
| 369 return false; | 368 return false; |
| 370 } | 369 } |
| 371 if (packet->AssociatedData() != encrypter_->associated_data_) { | 370 if (packet->AssociatedData() != encrypter_->associated_data_) { |
| 372 LOG(ERROR) << "Encrypted incorrect associated data. expected " | 371 LOG(ERROR) << "Encrypted incorrect associated data. expected " |
| 373 << packet->AssociatedData() << " actual: " | 372 << packet->AssociatedData() |
| 374 << encrypter_->associated_data_; | 373 << " actual: " << encrypter_->associated_data_; |
| 375 return false; | 374 return false; |
| 376 } | 375 } |
| 377 if (packet->Plaintext() != encrypter_->plaintext_) { | 376 if (packet->Plaintext() != encrypter_->plaintext_) { |
| 378 LOG(ERROR) << "Encrypted incorrect plaintext data. expected " | 377 LOG(ERROR) << "Encrypted incorrect plaintext data. expected " |
| 379 << packet->Plaintext() << " actual: " | 378 << packet->Plaintext() |
| 380 << encrypter_->plaintext_; | 379 << " actual: " << encrypter_->plaintext_; |
| 381 return false; | 380 return false; |
| 382 } | 381 } |
| 383 return true; | 382 return true; |
| 384 } | 383 } |
| 385 | 384 |
| 386 bool CheckDecryption(const QuicEncryptedPacket& encrypted, | 385 bool CheckDecryption(const QuicEncryptedPacket& encrypted, |
| 387 bool includes_version) { | 386 bool includes_version) { |
| 388 if (visitor_.header_->packet_number != decrypter_->packet_number_) { | 387 if (visitor_.header_->packet_number != decrypter_->packet_number_) { |
| 389 LOG(ERROR) << "Decrypted incorrect packet number. expected " | 388 LOG(ERROR) << "Decrypted incorrect packet number. expected " |
| 390 << visitor_.header_->packet_number | 389 << visitor_.header_->packet_number |
| 391 << " actual: " << decrypter_->packet_number_; | 390 << " actual: " << decrypter_->packet_number_; |
| 392 return false; | 391 return false; |
| 393 } | 392 } |
| 394 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( | 393 if (QuicFramer::GetAssociatedDataFromEncryptedPacket( |
| 395 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version, | 394 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version, |
| 396 PACKET_6BYTE_PACKET_NUMBER) != decrypter_->associated_data_) { | 395 PACKET_6BYTE_PACKET_NUMBER) != decrypter_->associated_data_) { |
| 397 LOG(ERROR) << "Decrypted incorrect associated data. expected " | 396 LOG(ERROR) << "Decrypted incorrect associated data. expected " |
| 398 << QuicFramer::GetAssociatedDataFromEncryptedPacket( | 397 << QuicFramer::GetAssociatedDataFromEncryptedPacket( |
| 399 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version, | 398 encrypted, PACKET_8BYTE_CONNECTION_ID, includes_version, |
| 400 PACKET_6BYTE_PACKET_NUMBER) | 399 PACKET_6BYTE_PACKET_NUMBER) |
| 401 << " actual: " << decrypter_->associated_data_; | 400 << " actual: " << decrypter_->associated_data_; |
| 402 return false; | 401 return false; |
| 403 } | 402 } |
| 404 StringPiece ciphertext(encrypted.AsStringPiece().substr( | 403 StringPiece ciphertext(encrypted.AsStringPiece().substr( |
| 405 GetStartOfEncryptedData(PACKET_8BYTE_CONNECTION_ID, includes_version, | 404 GetStartOfEncryptedData(PACKET_8BYTE_CONNECTION_ID, includes_version, |
| 406 PACKET_6BYTE_PACKET_NUMBER))); | 405 PACKET_6BYTE_PACKET_NUMBER))); |
| 407 if (ciphertext != decrypter_->ciphertext_) { | 406 if (ciphertext != decrypter_->ciphertext_) { |
| 408 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected " | 407 LOG(ERROR) << "Decrypted incorrect ciphertext data. expected " |
| 409 << ciphertext << " actual: " | 408 << ciphertext << " actual: " << decrypter_->ciphertext_; |
| 410 << decrypter_->ciphertext_; | |
| 411 return false; | 409 return false; |
| 412 } | 410 } |
| 413 return true; | 411 return true; |
| 414 } | 412 } |
| 415 | 413 |
| 416 char* AsChars(unsigned char* data) { | 414 char* AsChars(unsigned char* data) { return reinterpret_cast<char*>(data); } |
| 417 return reinterpret_cast<char*>(data); | |
| 418 } | |
| 419 | 415 |
| 420 void CheckProcessingFails(unsigned char* packet, | 416 void CheckProcessingFails(unsigned char* packet, |
| 421 size_t len, | 417 size_t len, |
| 422 string expected_error, | 418 string expected_error, |
| 423 QuicErrorCode error_code) { | 419 QuicErrorCode error_code) { |
| 424 QuicEncryptedPacket encrypted(AsChars(packet), len, false); | 420 QuicEncryptedPacket encrypted(AsChars(packet), len, false); |
| 425 EXPECT_FALSE(framer_.ProcessPacket(encrypted)) << "len: " << len; | 421 EXPECT_FALSE(framer_.ProcessPacket(encrypted)) << "len: " << len; |
| 426 EXPECT_EQ(expected_error, framer_.detailed_error()) << "len: " << len; | 422 EXPECT_EQ(expected_error, framer_.detailed_error()) << "len: " << len; |
| 427 EXPECT_EQ(error_code, framer_.error()) << "len: " << len; | 423 EXPECT_EQ(error_code, framer_.error()) << "len: " << len; |
| 428 } | 424 } |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 | 581 |
| 586 // Large numbers should not wrap either. | 582 // Large numbers should not wrap either. |
| 587 for (uint64 j = 0; j < 10; j++) { | 583 for (uint64 j = 0; j < 10; j++) { |
| 588 uint64 num = kEpoch - 1 - j; | 584 uint64 num = kEpoch - 1 - j; |
| 589 CheckCalculatePacketNumber(max_epoch + num, last); | 585 CheckCalculatePacketNumber(max_epoch + num, last); |
| 590 } | 586 } |
| 591 } | 587 } |
| 592 } | 588 } |
| 593 | 589 |
| 594 TEST_P(QuicFramerTest, EmptyPacket) { | 590 TEST_P(QuicFramerTest, EmptyPacket) { |
| 595 char packet[] = { 0x00 }; | 591 char packet[] = {0x00}; |
| 596 QuicEncryptedPacket encrypted(packet, 0, false); | 592 QuicEncryptedPacket encrypted(packet, 0, false); |
| 597 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); | 593 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
| 598 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 594 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
| 599 } | 595 } |
| 600 | 596 |
| 601 TEST_P(QuicFramerTest, LargePacket) { | 597 TEST_P(QuicFramerTest, LargePacket) { |
| 602 // clang-format off | 598 // clang-format off |
| 603 unsigned char packet[kMaxPacketSize + 1] = { | 599 unsigned char packet[kMaxPacketSize + 1] = { |
| 604 // public flags (8 byte connection_id) | 600 // public flags (8 byte connection_id) |
| 605 0x3C, | 601 0x3C, |
| (...skipping 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1064 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 1060 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 1065 // private flags | 1061 // private flags |
| 1066 0x00, | 1062 0x00, |
| 1067 | 1063 |
| 1068 // frame type (padding) | 1064 // frame type (padding) |
| 1069 0x00, | 1065 0x00, |
| 1070 0x00, 0x00, 0x00, 0x00 | 1066 0x00, 0x00, 0x00, 0x00 |
| 1071 }; | 1067 }; |
| 1072 // clang-format on | 1068 // clang-format on |
| 1073 | 1069 |
| 1074 CheckProcessingFails(packet, | 1070 CheckProcessingFails(packet, arraysize(packet), "Illegal public flags value.", |
| 1075 arraysize(packet), | |
| 1076 "Illegal public flags value.", | |
| 1077 QUIC_INVALID_PACKET_HEADER); | 1071 QUIC_INVALID_PACKET_HEADER); |
| 1078 | 1072 |
| 1079 // Now turn off validation. | 1073 // Now turn off validation. |
| 1080 framer_.set_validate_flags(false); | 1074 framer_.set_validate_flags(false); |
| 1081 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1075 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1082 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1076 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1083 }; | 1077 }; |
| 1084 | 1078 |
| 1085 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { | 1079 TEST_P(QuicFramerTest, InvalidPublicFlagWithMatchingVersions) { |
| 1086 // clang-format off | 1080 // clang-format off |
| 1087 unsigned char packet[] = { | 1081 unsigned char packet[] = { |
| 1088 // public flags (8 byte connection_id and version flag and an unknown flag) | 1082 // public flags (8 byte connection_id and version flag and an unknown flag) |
| 1089 0x4D, | 1083 0x4D, |
| 1090 // connection_id | 1084 // connection_id |
| 1091 0x10, 0x32, 0x54, 0x76, | 1085 0x10, 0x32, 0x54, 0x76, |
| 1092 0x98, 0xBA, 0xDC, 0xFE, | 1086 0x98, 0xBA, 0xDC, 0xFE, |
| 1093 // version tag | 1087 // version tag |
| 1094 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), | 1088 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
| 1095 // packet number | 1089 // packet number |
| 1096 0xBC, 0x9A, 0x78, 0x56, | 1090 0xBC, 0x9A, 0x78, 0x56, |
| 1097 0x34, 0x12, | 1091 0x34, 0x12, |
| 1098 // private flags | 1092 // private flags |
| 1099 0x00, | 1093 0x00, |
| 1100 | 1094 |
| 1101 // frame type (padding) | 1095 // frame type (padding) |
| 1102 0x00, | 1096 0x00, |
| 1103 0x00, 0x00, 0x00, 0x00 | 1097 0x00, 0x00, 0x00, 0x00 |
| 1104 }; | 1098 }; |
| 1105 // clang-format on | 1099 // clang-format on |
| 1106 CheckProcessingFails(packet, | 1100 CheckProcessingFails(packet, arraysize(packet), "Illegal public flags value.", |
| 1107 arraysize(packet), | |
| 1108 "Illegal public flags value.", | |
| 1109 QUIC_INVALID_PACKET_HEADER); | 1101 QUIC_INVALID_PACKET_HEADER); |
| 1110 }; | 1102 }; |
| 1111 | 1103 |
| 1112 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { | 1104 TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { |
| 1113 // clang-format off | 1105 // clang-format off |
| 1114 unsigned char packet[] = { | 1106 unsigned char packet[] = { |
| 1115 // public flags (8 byte connection_id, version flag and an unknown flag) | 1107 // public flags (8 byte connection_id, version flag and an unknown flag) |
| 1116 0x7D, | 1108 0x7D, |
| 1117 // connection_id | 1109 // connection_id |
| 1118 0x10, 0x32, 0x54, 0x76, | 1110 0x10, 0x32, 0x54, 0x76, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 0xBC, 0x9A, 0x78, 0x56, | 1142 0xBC, 0x9A, 0x78, 0x56, |
| 1151 0x34, 0x12, | 1143 0x34, 0x12, |
| 1152 // private flags | 1144 // private flags |
| 1153 0x10, | 1145 0x10, |
| 1154 | 1146 |
| 1155 // frame type (padding) | 1147 // frame type (padding) |
| 1156 0x00, | 1148 0x00, |
| 1157 0x00, 0x00, 0x00, 0x00 | 1149 0x00, 0x00, 0x00, 0x00 |
| 1158 }; | 1150 }; |
| 1159 // clang-format on | 1151 // clang-format on |
| 1160 CheckProcessingFails(packet, | 1152 CheckProcessingFails(packet, arraysize(packet), |
| 1161 arraysize(packet), | |
| 1162 "Illegal private flags value.", | 1153 "Illegal private flags value.", |
| 1163 QUIC_INVALID_PACKET_HEADER); | 1154 QUIC_INVALID_PACKET_HEADER); |
| 1164 }; | 1155 }; |
| 1165 | 1156 |
| 1166 TEST_P(QuicFramerTest, InvalidFECGroupOffset) { | 1157 TEST_P(QuicFramerTest, InvalidFECGroupOffset) { |
| 1167 // clang-format off | 1158 // clang-format off |
| 1168 unsigned char packet[] = { | 1159 unsigned char packet[] = { |
| 1169 // public flags (8 byte connection_id) | 1160 // public flags (8 byte connection_id) |
| 1170 0x3C, | 1161 0x3C, |
| 1171 // connection_id | 1162 // connection_id |
| (...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1570 QuicPacketHeader header; | 1561 QuicPacketHeader header; |
| 1571 header.public_header.connection_id = kConnectionId; | 1562 header.public_header.connection_id = kConnectionId; |
| 1572 header.public_header.reset_flag = false; | 1563 header.public_header.reset_flag = false; |
| 1573 header.public_header.version_flag = false; | 1564 header.public_header.version_flag = false; |
| 1574 header.fec_flag = true; | 1565 header.fec_flag = true; |
| 1575 header.entropy_flag = true; | 1566 header.entropy_flag = true; |
| 1576 header.packet_number = kPacketNumber; | 1567 header.packet_number = kPacketNumber; |
| 1577 header.fec_group = 0; | 1568 header.fec_group = 0; |
| 1578 | 1569 |
| 1579 // Do not encrypt the payload because the revived payload is post-encryption. | 1570 // Do not encrypt the payload because the revived payload is post-encryption. |
| 1580 EXPECT_TRUE(framer_.ProcessRevivedPacket(&header, | 1571 EXPECT_TRUE(framer_.ProcessRevivedPacket( |
| 1581 StringPiece(AsChars(payload), | 1572 &header, StringPiece(AsChars(payload), arraysize(payload)))); |
| 1582 arraysize(payload)))); | |
| 1583 | 1573 |
| 1584 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1574 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1585 ASSERT_EQ(1, visitor_.revived_packets_); | 1575 ASSERT_EQ(1, visitor_.revived_packets_); |
| 1586 ASSERT_TRUE(visitor_.header_.get()); | 1576 ASSERT_TRUE(visitor_.header_.get()); |
| 1587 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 1577 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 1588 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | 1578 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); |
| 1589 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | 1579 EXPECT_FALSE(visitor_.header_->public_header.version_flag); |
| 1590 EXPECT_TRUE(visitor_.header_->fec_flag); | 1580 EXPECT_TRUE(visitor_.header_->fec_flag); |
| 1591 EXPECT_TRUE(visitor_.header_->entropy_flag); | 1581 EXPECT_TRUE(visitor_.header_->entropy_flag); |
| 1592 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); | 1582 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1708 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1698 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1709 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1699 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1710 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1700 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1711 EXPECT_EQ(0xBA, frame.entropy_hash); | 1701 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1712 EXPECT_EQ(kLargestObserved, frame.largest_observed); | 1702 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 1713 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1703 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 1714 ASSERT_EQ(2u, frame.received_packet_times.size()); | 1704 ASSERT_EQ(2u, frame.received_packet_times.size()); |
| 1715 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 1705 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 1716 | 1706 |
| 1717 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1707 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1718 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1708 const size_t kLargestObservedOffset = |
| 1719 kQuicEntropyHashSize; | 1709 kReceivedEntropyOffset + kQuicEntropyHashSize; |
| 1720 const size_t kMissingDeltaTimeOffset = | 1710 const size_t kMissingDeltaTimeOffset = |
| 1721 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1711 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 1722 const size_t kNumTimestampsOffset = | 1712 const size_t kNumTimestampsOffset = |
| 1723 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 1713 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 1724 const size_t kTimestampDeltaLargestObserved1 = | 1714 const size_t kTimestampDeltaLargestObserved1 = |
| 1725 kNumTimestampsOffset + kQuicNumTimestampsSize; | 1715 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| 1726 const size_t kTimestampTimeDeltaLargestObserved1 = | 1716 const size_t kTimestampTimeDeltaLargestObserved1 = |
| 1727 kTimestampDeltaLargestObserved1 + 1; | 1717 kTimestampDeltaLargestObserved1 + 1; |
| 1728 const size_t kTimestampDeltaLargestObserved2 = | 1718 const size_t kTimestampDeltaLargestObserved2 = |
| 1729 kTimestampTimeDeltaLargestObserved1 + 4; | 1719 kTimestampTimeDeltaLargestObserved1 + 4; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1833 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1823 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1834 const size_t kLargestObservedOffset = | 1824 const size_t kLargestObservedOffset = |
| 1835 kReceivedEntropyOffset + kQuicEntropyHashSize; | 1825 kReceivedEntropyOffset + kQuicEntropyHashSize; |
| 1836 const size_t kMissingDeltaTimeOffset = | 1826 const size_t kMissingDeltaTimeOffset = |
| 1837 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1827 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 1838 const size_t kNumTimestampsOffset = | 1828 const size_t kNumTimestampsOffset = |
| 1839 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; | 1829 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 1840 const size_t kTimestampDeltaLargestObserved = | 1830 const size_t kTimestampDeltaLargestObserved = |
| 1841 kNumTimestampsOffset + kQuicNumTimestampsSize; | 1831 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| 1842 const size_t kTimestampTimeDeltaLargestObserved = | 1832 const size_t kTimestampTimeDeltaLargestObserved = |
| 1843 kTimestampDeltaLargestObserved + 1; | 1833 kTimestampDeltaLargestObserved + 1; |
| 1844 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; | 1834 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; |
| 1845 const size_t kMissingPacketsOffset = | 1835 const size_t kMissingPacketsOffset = |
| 1846 kNumMissingPacketOffset + kNumberOfNackRangesSize; | 1836 kNumMissingPacketOffset + kNumberOfNackRangesSize; |
| 1847 const size_t kMissingPacketsRange = | 1837 const size_t kMissingPacketsRange = |
| 1848 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | 1838 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; |
| 1849 const size_t kRevivedPacketsLength = | 1839 const size_t kRevivedPacketsLength = |
| 1850 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | 1840 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; |
| 1851 // Now test framing boundaries. | 1841 // Now test framing boundaries. |
| 1852 const size_t ack_frame_size = | 1842 const size_t ack_frame_size = |
| 1853 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | 1843 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1925 | 1915 |
| 1926 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 1916 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 1927 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 1917 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 1928 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 1918 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 1929 EXPECT_EQ(0xBA, frame.entropy_hash); | 1919 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 1930 EXPECT_EQ(kLargestObserved, frame.largest_observed); | 1920 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 1931 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 1921 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 1932 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 1922 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 1933 | 1923 |
| 1934 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 1924 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 1935 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 1925 const size_t kLargestObservedOffset = |
| 1936 kQuicEntropyHashSize; | 1926 kReceivedEntropyOffset + kQuicEntropyHashSize; |
| 1937 const size_t kMissingDeltaTimeOffset = | 1927 const size_t kMissingDeltaTimeOffset = |
| 1938 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 1928 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 1939 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 1929 const size_t kNumTimestampsOffset = |
| 1940 kQuicDeltaTimeLargestObservedSize; | 1930 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 1941 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 1931 const size_t kNumMissingPacketOffset = |
| 1942 kQuicNumTimestampsSize; | 1932 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| 1943 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | 1933 const size_t kMissingPacketsOffset = |
| 1944 kNumberOfNackRangesSize; | 1934 kNumMissingPacketOffset + kNumberOfNackRangesSize; |
| 1945 const size_t kMissingPacketsRange = | 1935 const size_t kMissingPacketsRange = |
| 1946 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | 1936 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; |
| 1947 const size_t kRevivedPacketsLength = | 1937 const size_t kRevivedPacketsLength = |
| 1948 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | 1938 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; |
| 1949 // Now test framing boundaries. | 1939 // Now test framing boundaries. |
| 1950 const size_t ack_frame_size = | 1940 const size_t ack_frame_size = |
| 1951 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | 1941 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; |
| 1952 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | 1942 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
| 1953 string expected_error; | 1943 string expected_error; |
| 1954 if (i < kLargestObservedOffset) { | 1944 if (i < kLargestObservedOffset) { |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2023 | 2013 |
| 2024 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | 2014 EXPECT_EQ(0u, visitor_.stream_frames_.size()); |
| 2025 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 2015 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
| 2026 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; | 2016 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; |
| 2027 EXPECT_EQ(0xBA, frame.entropy_hash); | 2017 EXPECT_EQ(0xBA, frame.entropy_hash); |
| 2028 EXPECT_EQ(kLargestObserved, frame.largest_observed); | 2018 EXPECT_EQ(kLargestObserved, frame.largest_observed); |
| 2029 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); | 2019 ASSERT_EQ(1u, frame.missing_packets.NumPacketsSlow()); |
| 2030 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); | 2020 EXPECT_EQ(kMissingPacket, frame.missing_packets.Min()); |
| 2031 | 2021 |
| 2032 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; | 2022 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; |
| 2033 const size_t kLargestObservedOffset = kReceivedEntropyOffset + | 2023 const size_t kLargestObservedOffset = |
| 2034 kQuicEntropyHashSize; | 2024 kReceivedEntropyOffset + kQuicEntropyHashSize; |
| 2035 const size_t kMissingDeltaTimeOffset = | 2025 const size_t kMissingDeltaTimeOffset = |
| 2036 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; | 2026 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; |
| 2037 const size_t kNumTimestampsOffset = kMissingDeltaTimeOffset + | 2027 const size_t kNumTimestampsOffset = |
| 2038 kQuicDeltaTimeLargestObservedSize; | 2028 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; |
| 2039 const size_t kNumMissingPacketOffset = kNumTimestampsOffset + | 2029 const size_t kNumMissingPacketOffset = |
| 2040 kQuicNumTimestampsSize; | 2030 kNumTimestampsOffset + kQuicNumTimestampsSize; |
| 2041 const size_t kMissingPacketsOffset = kNumMissingPacketOffset + | 2031 const size_t kMissingPacketsOffset = |
| 2042 kNumberOfNackRangesSize; | 2032 kNumMissingPacketOffset + kNumberOfNackRangesSize; |
| 2043 const size_t kMissingPacketsRange = | 2033 const size_t kMissingPacketsRange = |
| 2044 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; | 2034 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER; |
| 2045 const size_t kRevivedPacketsLength = | 2035 const size_t kRevivedPacketsLength = |
| 2046 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; | 2036 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER; |
| 2047 const size_t kRevivedPacketSequenceNumberLength = | 2037 const size_t kRevivedPacketSequenceNumberLength = |
| 2048 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; | 2038 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER; |
| 2049 // Now test framing boundaries. | 2039 // Now test framing boundaries. |
| 2050 const size_t ack_frame_size = | 2040 const size_t ack_frame_size = |
| 2051 kRevivedPacketSequenceNumberLength + PACKET_6BYTE_PACKET_NUMBER; | 2041 kRevivedPacketSequenceNumberLength + PACKET_6BYTE_PACKET_NUMBER; |
| 2052 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { | 2042 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2187 ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); | 2177 ASSERT_EQ(500u, frame->missing_packets.NumPacketsSlow()); |
| 2188 EXPECT_EQ(kMissingPacket - 499, frame->missing_packets.Min()); | 2178 EXPECT_EQ(kMissingPacket - 499, frame->missing_packets.Min()); |
| 2189 EXPECT_EQ(kMissingPacket, frame->missing_packets.Max()); | 2179 EXPECT_EQ(kMissingPacket, frame->missing_packets.Max()); |
| 2190 | 2180 |
| 2191 // Verify that the packet re-serializes identically. | 2181 // Verify that the packet re-serializes identically. |
| 2192 QuicFrames frames; | 2182 QuicFrames frames; |
| 2193 frames.push_back(QuicFrame(frame)); | 2183 frames.push_back(QuicFrame(frame)); |
| 2194 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); | 2184 scoped_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); |
| 2195 ASSERT_TRUE(data != nullptr); | 2185 ASSERT_TRUE(data != nullptr); |
| 2196 | 2186 |
| 2197 test::CompareCharArraysWithHexError("constructed packet", | 2187 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 2198 data->data(), data->length(), | 2188 data->length(), AsChars(packet), |
| 2199 AsChars(packet), arraysize(packet)); | 2189 arraysize(packet)); |
| 2200 } | 2190 } |
| 2201 | 2191 |
| 2202 TEST_P(QuicFramerTest, StopWaitingFrame) { | 2192 TEST_P(QuicFramerTest, StopWaitingFrame) { |
| 2203 // clang-format off | 2193 // clang-format off |
| 2204 unsigned char packet[] = { | 2194 unsigned char packet[] = { |
| 2205 // public flags (8 byte connection_id) | 2195 // public flags (8 byte connection_id) |
| 2206 0x3C, | 2196 0x3C, |
| 2207 // connection_id | 2197 // connection_id |
| 2208 0x10, 0x32, 0x54, 0x76, | 2198 0x10, 0x32, 0x54, 0x76, |
| 2209 0x98, 0xBA, 0xDC, 0xFE, | 2199 0x98, 0xBA, 0xDC, 0xFE, |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2416 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); | 2406 EXPECT_EQ(0x9, visitor_.goaway_frame_.error_code); |
| 2417 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); | 2407 EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase); |
| 2418 | 2408 |
| 2419 const size_t reason_size = arraysize("because I can") - 1; | 2409 const size_t reason_size = arraysize("because I can") - 1; |
| 2420 // Now test framing boundaries. | 2410 // Now test framing boundaries. |
| 2421 for (size_t i = kQuicFrameTypeSize; | 2411 for (size_t i = kQuicFrameTypeSize; |
| 2422 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { | 2412 i < QuicFramer::GetMinGoAwayFrameSize() + reason_size; ++i) { |
| 2423 string expected_error; | 2413 string expected_error; |
| 2424 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2414 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
| 2425 expected_error = "Unable to read go away error code."; | 2415 expected_error = "Unable to read go away error code."; |
| 2426 } else if (i < kQuicFrameTypeSize + kQuicErrorCodeSize + | 2416 } else if (i < |
| 2427 kQuicMaxStreamIdSize) { | 2417 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { |
| 2428 expected_error = "Unable to read last good stream id."; | 2418 expected_error = "Unable to read last good stream id."; |
| 2429 } else { | 2419 } else { |
| 2430 expected_error = "Unable to read goaway reason."; | 2420 expected_error = "Unable to read goaway reason."; |
| 2431 } | 2421 } |
| 2432 CheckProcessingFails( | 2422 CheckProcessingFails( |
| 2433 packet, | 2423 packet, |
| 2434 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2424 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2435 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 2425 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), |
| 2436 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2426 expected_error, QUIC_INVALID_GOAWAY_DATA); |
| 2437 } | 2427 } |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2596 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2586 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 2597 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); | 2587 ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 2598 ASSERT_TRUE(visitor_.public_reset_packet_.get()); | 2588 ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
| 2599 EXPECT_EQ(kConnectionId, | 2589 EXPECT_EQ(kConnectionId, |
| 2600 visitor_.public_reset_packet_->public_header.connection_id); | 2590 visitor_.public_reset_packet_->public_header.connection_id); |
| 2601 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2591 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
| 2602 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2592 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
| 2603 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); | 2593 EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
| 2604 EXPECT_EQ(kPacketNumber, | 2594 EXPECT_EQ(kPacketNumber, |
| 2605 visitor_.public_reset_packet_->rejected_packet_number); | 2595 visitor_.public_reset_packet_->rejected_packet_number); |
| 2606 EXPECT_TRUE( | 2596 EXPECT_EQ( |
| 2607 visitor_.public_reset_packet_->client_address.address().empty()); | 2597 ADDRESS_FAMILY_UNSPECIFIED, |
| 2598 visitor_.public_reset_packet_->client_address.GetFamily()); |
| 2608 | 2599 |
| 2609 // Now test framing boundaries. | 2600 // Now test framing boundaries. |
| 2610 for (size_t i = 0; i < arraysize(packet); ++i) { | 2601 for (size_t i = 0; i < arraysize(packet); ++i) { |
| 2611 string expected_error; | 2602 string expected_error; |
| 2612 DVLOG(1) << "iteration: " << i; | 2603 DVLOG(1) << "iteration: " << i; |
| 2613 if (i < kConnectionIdOffset) { | 2604 if (i < kConnectionIdOffset) { |
| 2614 expected_error = "Unable to read public flags."; | 2605 expected_error = "Unable to read public flags."; |
| 2615 CheckProcessingFails(packet, i, expected_error, | 2606 CheckProcessingFails(packet, i, expected_error, |
| 2616 QUIC_INVALID_PACKET_HEADER); | 2607 QUIC_INVALID_PACKET_HEADER); |
| 2617 } else if (i < kPublicResetPacketMessageTagOffset) { | 2608 } else if (i < kPublicResetPacketMessageTagOffset) { |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2845 // clang-format on | 2836 // clang-format on |
| 2846 | 2837 |
| 2847 uint64 header_size = | 2838 uint64 header_size = |
| 2848 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2839 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2849 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 2840 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 2850 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2841 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2851 | 2842 |
| 2852 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2843 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 2853 ASSERT_TRUE(data != nullptr); | 2844 ASSERT_TRUE(data != nullptr); |
| 2854 | 2845 |
| 2855 test::CompareCharArraysWithHexError("constructed packet", | 2846 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 2856 data->data(), data->length(), | 2847 data->length(), AsChars(packet), |
| 2857 AsChars(packet), | |
| 2858 arraysize(packet)); | 2848 arraysize(packet)); |
| 2859 } | 2849 } |
| 2860 | 2850 |
| 2861 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { | 2851 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
| 2862 QuicPacketHeader header; | 2852 QuicPacketHeader header; |
| 2863 header.public_header.connection_id = kConnectionId; | 2853 header.public_header.connection_id = kConnectionId; |
| 2864 header.public_header.reset_flag = false; | 2854 header.public_header.reset_flag = false; |
| 2865 header.public_header.version_flag = false; | 2855 header.public_header.version_flag = false; |
| 2866 header.fec_flag = false; | 2856 header.fec_flag = false; |
| 2867 header.entropy_flag = false; | 2857 header.entropy_flag = false; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2893 // clang-format on | 2883 // clang-format on |
| 2894 | 2884 |
| 2895 uint64 header_size = | 2885 uint64 header_size = |
| 2896 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2886 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2897 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 2887 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 2898 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2888 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2899 | 2889 |
| 2900 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2890 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 2901 ASSERT_TRUE(data != nullptr); | 2891 ASSERT_TRUE(data != nullptr); |
| 2902 | 2892 |
| 2903 test::CompareCharArraysWithHexError("constructed packet", | 2893 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 2904 data->data(), data->length(), | 2894 data->length(), AsChars(packet), |
| 2905 AsChars(packet), | |
| 2906 arraysize(packet)); | 2895 arraysize(packet)); |
| 2907 } | 2896 } |
| 2908 | 2897 |
| 2909 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { | 2898 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
| 2910 QuicPacketHeader header; | 2899 QuicPacketHeader header; |
| 2911 header.public_header.connection_id = kConnectionId; | 2900 header.public_header.connection_id = kConnectionId; |
| 2912 header.public_header.reset_flag = false; | 2901 header.public_header.reset_flag = false; |
| 2913 header.public_header.version_flag = false; | 2902 header.public_header.version_flag = false; |
| 2914 header.fec_flag = false; | 2903 header.fec_flag = false; |
| 2915 header.entropy_flag = false; | 2904 header.entropy_flag = false; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2941 // clang-format on | 2930 // clang-format on |
| 2942 | 2931 |
| 2943 uint64 header_size = | 2932 uint64 header_size = |
| 2944 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2933 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2945 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 2934 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 2946 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2935 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2947 | 2936 |
| 2948 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2937 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 2949 ASSERT_TRUE(data != nullptr); | 2938 ASSERT_TRUE(data != nullptr); |
| 2950 | 2939 |
| 2951 test::CompareCharArraysWithHexError("constructed packet", | 2940 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 2952 data->data(), data->length(), | 2941 data->length(), AsChars(packet), |
| 2953 AsChars(packet), | |
| 2954 arraysize(packet)); | 2942 arraysize(packet)); |
| 2955 } | 2943 } |
| 2956 | 2944 |
| 2957 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { | 2945 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
| 2958 QuicPacketHeader header; | 2946 QuicPacketHeader header; |
| 2959 header.public_header.connection_id = kConnectionId; | 2947 header.public_header.connection_id = kConnectionId; |
| 2960 header.public_header.reset_flag = false; | 2948 header.public_header.reset_flag = false; |
| 2961 header.public_header.version_flag = false; | 2949 header.public_header.version_flag = false; |
| 2962 header.fec_flag = false; | 2950 header.fec_flag = false; |
| 2963 header.entropy_flag = false; | 2951 header.entropy_flag = false; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2989 // clang-format on | 2977 // clang-format on |
| 2990 | 2978 |
| 2991 uint64 header_size = | 2979 uint64 header_size = |
| 2992 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2980 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2993 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 2981 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); |
| 2994 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2982 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 2995 | 2983 |
| 2996 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2984 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 2997 ASSERT_TRUE(data != nullptr); | 2985 ASSERT_TRUE(data != nullptr); |
| 2998 | 2986 |
| 2999 test::CompareCharArraysWithHexError("constructed packet", | 2987 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3000 data->data(), data->length(), | 2988 data->length(), AsChars(packet), |
| 3001 AsChars(packet), | |
| 3002 arraysize(packet)); | 2989 arraysize(packet)); |
| 3003 } | 2990 } |
| 3004 | 2991 |
| 3005 TEST_P(QuicFramerTest, BuildStreamFramePacket) { | 2992 TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
| 3006 QuicPacketHeader header; | 2993 QuicPacketHeader header; |
| 3007 header.public_header.connection_id = kConnectionId; | 2994 header.public_header.connection_id = kConnectionId; |
| 3008 header.public_header.reset_flag = false; | 2995 header.public_header.reset_flag = false; |
| 3009 header.public_header.version_flag = false; | 2996 header.public_header.version_flag = false; |
| 3010 header.fec_flag = false; | 2997 header.fec_flag = false; |
| 3011 header.entropy_flag = true; | 2998 header.entropy_flag = true; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3041 // data | 3028 // data |
| 3042 'h', 'e', 'l', 'l', | 3029 'h', 'e', 'l', 'l', |
| 3043 'o', ' ', 'w', 'o', | 3030 'o', ' ', 'w', 'o', |
| 3044 'r', 'l', 'd', '!', | 3031 'r', 'l', 'd', '!', |
| 3045 }; | 3032 }; |
| 3046 // clang-format on | 3033 // clang-format on |
| 3047 | 3034 |
| 3048 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3035 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3049 ASSERT_TRUE(data != nullptr); | 3036 ASSERT_TRUE(data != nullptr); |
| 3050 | 3037 |
| 3051 test::CompareCharArraysWithHexError("constructed packet", | 3038 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3052 data->data(), data->length(), | 3039 data->length(), AsChars(packet), |
| 3053 AsChars(packet), arraysize(packet)); | 3040 arraysize(packet)); |
| 3054 } | 3041 } |
| 3055 | 3042 |
| 3056 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | 3043 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { |
| 3057 QuicPacketHeader header; | 3044 QuicPacketHeader header; |
| 3058 header.public_header.connection_id = kConnectionId; | 3045 header.public_header.connection_id = kConnectionId; |
| 3059 header.public_header.reset_flag = false; | 3046 header.public_header.reset_flag = false; |
| 3060 header.public_header.version_flag = false; | 3047 header.public_header.version_flag = false; |
| 3061 header.fec_flag = false; | 3048 header.fec_flag = false; |
| 3062 header.entropy_flag = true; | 3049 header.entropy_flag = true; |
| 3063 header.packet_number = kPacketNumber; | 3050 header.packet_number = kPacketNumber; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3090 // data length (since packet is in an FEC group) | 3077 // data length (since packet is in an FEC group) |
| 3091 0x0C, 0x00, | 3078 0x0C, 0x00, |
| 3092 // data | 3079 // data |
| 3093 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', | 3080 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', |
| 3094 }; | 3081 }; |
| 3095 // clang-format on | 3082 // clang-format on |
| 3096 | 3083 |
| 3097 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3084 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3098 ASSERT_TRUE(data != nullptr); | 3085 ASSERT_TRUE(data != nullptr); |
| 3099 | 3086 |
| 3100 test::CompareCharArraysWithHexError("constructed packet", | 3087 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3101 data->data(), data->length(), | 3088 data->length(), AsChars(packet), |
| 3102 AsChars(packet), arraysize(packet)); | 3089 arraysize(packet)); |
| 3103 } | 3090 } |
| 3104 | 3091 |
| 3105 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3092 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
| 3106 QuicPacketHeader header; | 3093 QuicPacketHeader header; |
| 3107 header.public_header.connection_id = kConnectionId; | 3094 header.public_header.connection_id = kConnectionId; |
| 3108 header.public_header.reset_flag = false; | 3095 header.public_header.reset_flag = false; |
| 3109 header.public_header.version_flag = true; | 3096 header.public_header.version_flag = true; |
| 3110 header.fec_flag = false; | 3097 header.fec_flag = false; |
| 3111 header.entropy_flag = true; | 3098 header.entropy_flag = true; |
| 3112 header.packet_number = kPacketNumber; | 3099 header.packet_number = kPacketNumber; |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3175 'l', | 3162 'l', |
| 3176 'd', | 3163 'd', |
| 3177 '!', | 3164 '!', |
| 3178 }; | 3165 }; |
| 3179 // clang-format on | 3166 // clang-format on |
| 3180 | 3167 |
| 3181 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); | 3168 QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
| 3182 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3169 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3183 ASSERT_TRUE(data != nullptr); | 3170 ASSERT_TRUE(data != nullptr); |
| 3184 | 3171 |
| 3185 test::CompareCharArraysWithHexError("constructed packet", | 3172 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3186 data->data(), data->length(), | 3173 data->length(), AsChars(packet), |
| 3187 AsChars(packet), arraysize(packet)); | 3174 arraysize(packet)); |
| 3188 } | 3175 } |
| 3189 | 3176 |
| 3190 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { | 3177 TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
| 3191 // clang-format off | 3178 // clang-format off |
| 3192 unsigned char packet[] = { | 3179 unsigned char packet[] = { |
| 3193 // public flags (version, 8 byte connection_id) | 3180 // public flags (version, 8 byte connection_id) |
| 3194 0x0D, | 3181 0x0D, |
| 3195 // connection_id | 3182 // connection_id |
| 3196 0x10, | 3183 0x10, |
| 3197 0x32, | 3184 0x32, |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3265 // 0 more missing packets in range. | 3252 // 0 more missing packets in range. |
| 3266 0x00, | 3253 0x00, |
| 3267 // 0 revived packets. | 3254 // 0 revived packets. |
| 3268 0x00, | 3255 0x00, |
| 3269 }; | 3256 }; |
| 3270 // clang-format on | 3257 // clang-format on |
| 3271 | 3258 |
| 3272 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3259 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3273 ASSERT_TRUE(data != nullptr); | 3260 ASSERT_TRUE(data != nullptr); |
| 3274 | 3261 |
| 3275 test::CompareCharArraysWithHexError("constructed packet", | 3262 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3276 data->data(), data->length(), | 3263 data->length(), AsChars(packet), |
| 3277 AsChars(packet), arraysize(packet)); | 3264 arraysize(packet)); |
| 3278 } | 3265 } |
| 3279 | 3266 |
| 3280 // TODO(jri): Add test for tuncated packets in which the original ack frame had | 3267 // TODO(jri): Add test for tuncated packets in which the original ack frame had |
| 3281 // revived packets. (In both the large and small packet cases below). | 3268 // revived packets. (In both the large and small packet cases below). |
| 3282 | 3269 |
| 3283 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { | 3270 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { |
| 3284 QuicPacketHeader header; | 3271 QuicPacketHeader header; |
| 3285 header.public_header.connection_id = kConnectionId; | 3272 header.public_header.connection_id = kConnectionId; |
| 3286 header.public_header.reset_flag = false; | 3273 header.public_header.reset_flag = false; |
| 3287 header.public_header.version_flag = false; | 3274 header.public_header.version_flag = false; |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3379 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 3366 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
| 3380 | 3367 |
| 3381 // 0 revived packets. | 3368 // 0 revived packets. |
| 3382 0x00, | 3369 0x00, |
| 3383 }; | 3370 }; |
| 3384 // clang-format on | 3371 // clang-format on |
| 3385 | 3372 |
| 3386 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3373 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3387 ASSERT_TRUE(data != nullptr); | 3374 ASSERT_TRUE(data != nullptr); |
| 3388 | 3375 |
| 3389 test::CompareCharArraysWithHexError("constructed packet", | 3376 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3390 data->data(), data->length(), | 3377 data->length(), AsChars(packet), |
| 3391 AsChars(packet), arraysize(packet)); | 3378 arraysize(packet)); |
| 3392 } | 3379 } |
| 3393 | 3380 |
| 3394 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 3381 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
| 3395 QuicPacketHeader header; | 3382 QuicPacketHeader header; |
| 3396 header.public_header.connection_id = kConnectionId; | 3383 header.public_header.connection_id = kConnectionId; |
| 3397 header.public_header.reset_flag = false; | 3384 header.public_header.reset_flag = false; |
| 3398 header.public_header.version_flag = false; | 3385 header.public_header.version_flag = false; |
| 3399 header.fec_flag = false; | 3386 header.fec_flag = false; |
| 3400 header.entropy_flag = true; | 3387 header.entropy_flag = true; |
| 3401 header.packet_number = kPacketNumber; | 3388 header.packet_number = kPacketNumber; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3444 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 3431 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
| 3445 // 0 revived packets. | 3432 // 0 revived packets. |
| 3446 0x00, | 3433 0x00, |
| 3447 }; | 3434 }; |
| 3448 // clang-format on | 3435 // clang-format on |
| 3449 | 3436 |
| 3450 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); | 3437 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); |
| 3451 ASSERT_TRUE(data != nullptr); | 3438 ASSERT_TRUE(data != nullptr); |
| 3452 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. | 3439 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. |
| 3453 EXPECT_EQ(36u, data->length()); | 3440 EXPECT_EQ(36u, data->length()); |
| 3454 test::CompareCharArraysWithHexError("constructed packet", | 3441 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3455 data->data(), data->length(), | 3442 data->length(), AsChars(packet), |
| 3456 AsChars(packet), arraysize(packet)); | 3443 arraysize(packet)); |
| 3457 } | 3444 } |
| 3458 | 3445 |
| 3459 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 3446 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
| 3460 QuicPacketHeader header; | 3447 QuicPacketHeader header; |
| 3461 header.public_header.connection_id = kConnectionId; | 3448 header.public_header.connection_id = kConnectionId; |
| 3462 header.public_header.reset_flag = false; | 3449 header.public_header.reset_flag = false; |
| 3463 header.public_header.version_flag = false; | 3450 header.public_header.version_flag = false; |
| 3464 header.fec_flag = false; | 3451 header.fec_flag = false; |
| 3465 header.entropy_flag = true; | 3452 header.entropy_flag = true; |
| 3466 header.packet_number = kPacketNumber; | 3453 header.packet_number = kPacketNumber; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3491 0x14, | 3478 0x14, |
| 3492 // least packet number awaiting an ack, delta from packet number. | 3479 // least packet number awaiting an ack, delta from packet number. |
| 3493 0x1C, 0x00, 0x00, 0x00, | 3480 0x1C, 0x00, 0x00, 0x00, |
| 3494 0x00, 0x00, | 3481 0x00, 0x00, |
| 3495 }; | 3482 }; |
| 3496 // clang-format on | 3483 // clang-format on |
| 3497 | 3484 |
| 3498 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3485 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3499 ASSERT_TRUE(data != nullptr); | 3486 ASSERT_TRUE(data != nullptr); |
| 3500 | 3487 |
| 3501 test::CompareCharArraysWithHexError("constructed packet", | 3488 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3502 data->data(), data->length(), | 3489 data->length(), AsChars(packet), |
| 3503 AsChars(packet), arraysize(packet)); | 3490 arraysize(packet)); |
| 3504 } | 3491 } |
| 3505 | 3492 |
| 3506 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { | 3493 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
| 3507 QuicPacketHeader header; | 3494 QuicPacketHeader header; |
| 3508 header.public_header.connection_id = kConnectionId; | 3495 header.public_header.connection_id = kConnectionId; |
| 3509 header.public_header.reset_flag = false; | 3496 header.public_header.reset_flag = false; |
| 3510 header.public_header.version_flag = false; | 3497 header.public_header.version_flag = false; |
| 3511 header.fec_flag = false; | 3498 header.fec_flag = false; |
| 3512 header.entropy_flag = false; | 3499 header.entropy_flag = false; |
| 3513 header.packet_number = kPacketNumber; | 3500 header.packet_number = kPacketNumber; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3594 'b', 'e', 'c', 'a', | 3581 'b', 'e', 'c', 'a', |
| 3595 'u', 's', 'e', ' ', | 3582 'u', 's', 'e', ' ', |
| 3596 'I', ' ', 'c', 'a', | 3583 'I', ' ', 'c', 'a', |
| 3597 'n', | 3584 'n', |
| 3598 }; | 3585 }; |
| 3599 // clang-format on | 3586 // clang-format on |
| 3600 | 3587 |
| 3601 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3588 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3602 ASSERT_TRUE(data != nullptr); | 3589 ASSERT_TRUE(data != nullptr); |
| 3603 | 3590 |
| 3604 test::CompareCharArraysWithHexError("constructed packet", | 3591 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3605 data->data(), data->length(), | 3592 data->length(), AsChars(packet), |
| 3606 AsChars(packet), arraysize(packet)); | 3593 arraysize(packet)); |
| 3607 } | 3594 } |
| 3608 | 3595 |
| 3609 TEST_P(QuicFramerTest, BuildGoAwayPacket) { | 3596 TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
| 3610 QuicPacketHeader header; | 3597 QuicPacketHeader header; |
| 3611 header.public_header.connection_id = kConnectionId; | 3598 header.public_header.connection_id = kConnectionId; |
| 3612 header.public_header.reset_flag = false; | 3599 header.public_header.reset_flag = false; |
| 3613 header.public_header.version_flag = false; | 3600 header.public_header.version_flag = false; |
| 3614 header.fec_flag = false; | 3601 header.fec_flag = false; |
| 3615 header.entropy_flag = true; | 3602 header.entropy_flag = true; |
| 3616 header.packet_number = kPacketNumber; | 3603 header.packet_number = kPacketNumber; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3649 'b', 'e', 'c', 'a', | 3636 'b', 'e', 'c', 'a', |
| 3650 'u', 's', 'e', ' ', | 3637 'u', 's', 'e', ' ', |
| 3651 'I', ' ', 'c', 'a', | 3638 'I', ' ', 'c', 'a', |
| 3652 'n', | 3639 'n', |
| 3653 }; | 3640 }; |
| 3654 // clang-format on | 3641 // clang-format on |
| 3655 | 3642 |
| 3656 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3643 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3657 ASSERT_TRUE(data != nullptr); | 3644 ASSERT_TRUE(data != nullptr); |
| 3658 | 3645 |
| 3659 test::CompareCharArraysWithHexError("constructed packet", | 3646 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3660 data->data(), data->length(), | 3647 data->length(), AsChars(packet), |
| 3661 AsChars(packet), arraysize(packet)); | 3648 arraysize(packet)); |
| 3662 } | 3649 } |
| 3663 | 3650 |
| 3664 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { | 3651 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
| 3665 QuicPacketHeader header; | 3652 QuicPacketHeader header; |
| 3666 header.public_header.connection_id = kConnectionId; | 3653 header.public_header.connection_id = kConnectionId; |
| 3667 header.public_header.reset_flag = false; | 3654 header.public_header.reset_flag = false; |
| 3668 header.public_header.version_flag = false; | 3655 header.public_header.version_flag = false; |
| 3669 header.fec_flag = false; | 3656 header.fec_flag = false; |
| 3670 header.entropy_flag = true; | 3657 header.entropy_flag = true; |
| 3671 header.packet_number = kPacketNumber; | 3658 header.packet_number = kPacketNumber; |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3869 // rejected packet number | 3856 // rejected packet number |
| 3870 0xBC, 0x9A, 0x78, 0x56, | 3857 0xBC, 0x9A, 0x78, 0x56, |
| 3871 0x34, 0x12, 0x00, 0x00, | 3858 0x34, 0x12, 0x00, 0x00, |
| 3872 }; | 3859 }; |
| 3873 // clang-format on | 3860 // clang-format on |
| 3874 | 3861 |
| 3875 scoped_ptr<QuicEncryptedPacket> data( | 3862 scoped_ptr<QuicEncryptedPacket> data( |
| 3876 framer_.BuildPublicResetPacket(reset_packet)); | 3863 framer_.BuildPublicResetPacket(reset_packet)); |
| 3877 ASSERT_TRUE(data != nullptr); | 3864 ASSERT_TRUE(data != nullptr); |
| 3878 | 3865 |
| 3879 test::CompareCharArraysWithHexError("constructed packet", | 3866 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3880 data->data(), data->length(), | 3867 data->length(), AsChars(packet), |
| 3881 AsChars(packet), arraysize(packet)); | 3868 arraysize(packet)); |
| 3882 } | 3869 } |
| 3883 | 3870 |
| 3884 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { | 3871 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
| 3885 QuicPublicResetPacket reset_packet; | 3872 QuicPublicResetPacket reset_packet; |
| 3886 reset_packet.public_header.connection_id = kConnectionId; | 3873 reset_packet.public_header.connection_id = kConnectionId; |
| 3887 reset_packet.public_header.reset_flag = true; | 3874 reset_packet.public_header.reset_flag = true; |
| 3888 reset_packet.public_header.version_flag = false; | 3875 reset_packet.public_header.version_flag = false; |
| 3889 reset_packet.rejected_packet_number = kPacketNumber; | 3876 reset_packet.rejected_packet_number = kPacketNumber; |
| 3890 reset_packet.nonce_proof = kNonceProof; | 3877 reset_packet.nonce_proof = kNonceProof; |
| 3891 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); | 3878 reset_packet.client_address = IPEndPoint(Loopback4(), 0x1234); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3923 0x02, 0x00, | 3910 0x02, 0x00, |
| 3924 0x7F, 0x00, 0x00, 0x01, | 3911 0x7F, 0x00, 0x00, 0x01, |
| 3925 0x34, 0x12, | 3912 0x34, 0x12, |
| 3926 }; | 3913 }; |
| 3927 // clang-format on | 3914 // clang-format on |
| 3928 | 3915 |
| 3929 scoped_ptr<QuicEncryptedPacket> data( | 3916 scoped_ptr<QuicEncryptedPacket> data( |
| 3930 framer_.BuildPublicResetPacket(reset_packet)); | 3917 framer_.BuildPublicResetPacket(reset_packet)); |
| 3931 ASSERT_TRUE(data != nullptr); | 3918 ASSERT_TRUE(data != nullptr); |
| 3932 | 3919 |
| 3933 test::CompareCharArraysWithHexError("constructed packet", | 3920 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3934 data->data(), data->length(), | 3921 data->length(), AsChars(packet), |
| 3935 AsChars(packet), arraysize(packet)); | 3922 arraysize(packet)); |
| 3936 } | 3923 } |
| 3937 | 3924 |
| 3938 TEST_P(QuicFramerTest, BuildFecPacket) { | 3925 TEST_P(QuicFramerTest, BuildFecPacket) { |
| 3939 QuicPacketHeader header; | 3926 QuicPacketHeader header; |
| 3940 header.public_header.connection_id = kConnectionId; | 3927 header.public_header.connection_id = kConnectionId; |
| 3941 header.public_header.reset_flag = false; | 3928 header.public_header.reset_flag = false; |
| 3942 header.public_header.version_flag = false; | 3929 header.public_header.version_flag = false; |
| 3943 header.fec_flag = true; | 3930 header.fec_flag = true; |
| 3944 header.entropy_flag = true; | 3931 header.entropy_flag = true; |
| 3945 header.packet_number = kPacketNumber; | 3932 header.packet_number = kPacketNumber; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3967 'a', 'b', 'c', 'd', | 3954 'a', 'b', 'c', 'd', |
| 3968 'e', 'f', 'g', 'h', | 3955 'e', 'f', 'g', 'h', |
| 3969 'i', 'j', 'k', 'l', | 3956 'i', 'j', 'k', 'l', |
| 3970 'm', 'n', 'o', 'p', | 3957 'm', 'n', 'o', 'p', |
| 3971 }; | 3958 }; |
| 3972 // clang-format on | 3959 // clang-format on |
| 3973 | 3960 |
| 3974 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); | 3961 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); |
| 3975 ASSERT_TRUE(data != nullptr); | 3962 ASSERT_TRUE(data != nullptr); |
| 3976 | 3963 |
| 3977 test::CompareCharArraysWithHexError("constructed packet", | 3964 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3978 data->data(), data->length(), | 3965 data->length(), AsChars(packet), |
| 3979 AsChars(packet), arraysize(packet)); | 3966 arraysize(packet)); |
| 3980 } | 3967 } |
| 3981 | 3968 |
| 3982 TEST_P(QuicFramerTest, EncryptPacket) { | 3969 TEST_P(QuicFramerTest, EncryptPacket) { |
| 3983 QuicPacketNumber packet_number = kPacketNumber; | 3970 QuicPacketNumber packet_number = kPacketNumber; |
| 3984 // clang-format off | 3971 // clang-format off |
| 3985 unsigned char packet[] = { | 3972 unsigned char packet[] = { |
| 3986 // public flags (8 byte connection_id) | 3973 // public flags (8 byte connection_id) |
| 3987 0x3C, | 3974 0x3C, |
| 3988 // connection_id | 3975 // connection_id |
| 3989 0x10, 0x32, 0x54, 0x76, | 3976 0x10, 0x32, 0x54, 0x76, |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4386 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); | 4373 EXPECT_CALL(visitor, OnStreamFrame(_)).Times(0); |
| 4387 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 4374 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
| 4388 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); | 4375 EXPECT_CALL(visitor, OnPacketComplete()).Times(0); |
| 4389 | 4376 |
| 4390 EXPECT_FALSE(framer_.ProcessPacket(*packet)); | 4377 EXPECT_FALSE(framer_.ProcessPacket(*packet)); |
| 4391 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); | 4378 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error()); |
| 4392 } | 4379 } |
| 4393 | 4380 |
| 4394 } // namespace test | 4381 } // namespace test |
| 4395 } // namespace net | 4382 } // namespace net |
| OLD | NEW |