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 |