Index: net/quic/core/quic_framer_test.cc |
diff --git a/net/quic/core/quic_framer_test.cc b/net/quic/core/quic_framer_test.cc |
index 6115ab674c9625806cd919d17e4e21c2c2277e0e..6e83d54005a80c0ed00ebb11d4a0ae7525fee1ca 100644 |
--- a/net/quic/core/quic_framer_test.cc |
+++ b/net/quic/core/quic_framer_test.cc |
@@ -571,6 +571,17 @@ TEST_P(QuicFramerTest, LargePacket) { |
// private flags |
0x00, |
}; |
+ |
+ unsigned char packet_cid_be[kMaxPacketSize + 1] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ // private flags |
+ 0x00, |
+ }; |
// clang-format on |
const size_t header_size = GetPacketHeaderSize( |
@@ -579,7 +590,14 @@ TEST_P(QuicFramerTest, LargePacket) { |
memset(packet + header_size, 0, kMaxPacketSize - header_size); |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_QUIC_BUG(framer_.ProcessPacket(encrypted), "Packet too large:1"); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -599,9 +617,25 @@ TEST_P(QuicFramerTest, PacketHeader) { |
// packet number |
0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -625,7 +659,10 @@ TEST_P(QuicFramerTest, PacketHeader) { |
} else { |
expected_error = "Unable to read packet number."; |
} |
- CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, QUIC_INVALID_PACKET_HEADER); |
} |
} |
@@ -684,9 +721,27 @@ TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
// packet number |
0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version) |
+ 0x39, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -713,7 +768,10 @@ TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
} else { |
expected_error = "Unable to read packet number."; |
} |
- CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, QUIC_INVALID_PACKET_HEADER); |
} |
} |
@@ -729,9 +787,25 @@ TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { |
// packet number |
0xBC, 0x9A, 0x78, 0x56, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id and 4 byte packet number) |
+ 0x28, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -755,7 +829,10 @@ TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { |
} else { |
expected_error = "Unable to read packet number."; |
} |
- CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, QUIC_INVALID_PACKET_HEADER); |
} |
} |
@@ -771,9 +848,25 @@ TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { |
// packet number |
0xBC, 0x9A, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id and 2 byte packet number) |
+ 0x18, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -799,7 +892,10 @@ TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { |
} else { |
expected_error = "Unable to read packet number."; |
} |
- CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, QUIC_INVALID_PACKET_HEADER); |
} |
} |
@@ -815,9 +911,25 @@ TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { |
// packet number |
0xBC, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id and 1 byte packet number) |
+ 0x08, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -843,7 +955,10 @@ TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { |
} else { |
expected_error = "Unable to read packet number."; |
} |
- CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, QUIC_INVALID_PACKET_HEADER); |
} |
} |
@@ -925,9 +1040,35 @@ TEST_P(QuicFramerTest, PacketWithDiversificationNonce) { |
0x00, |
0x00, 0x00, 0x00, 0x00 |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags: includes nonce flag |
+ static_cast<unsigned char>( |
+ FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x3C : 0x7C), |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // nonce |
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, |
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, |
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, |
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (padding) |
+ 0x00, |
+ 0x00, 0x00, 0x00, 0x00 |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
ASSERT_TRUE(visitor_.public_header_->nonce != nullptr); |
@@ -955,8 +1096,32 @@ TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) { |
0x00, |
0x00, 0x00, 0x00, 0x00 |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id, version flag and an unknown flag) |
+ static_cast<unsigned char>( |
+ FLAGS_quic_reloadable_flag_quic_remove_multipath_bit ? 0x39 : 0x79), |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '0', '0', '0', |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (padding frame) |
+ 0x00, |
+ 0x00, 0x00, 0x00, 0x00 |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -993,9 +1158,43 @@ TEST_P(QuicFramerTest, PaddingFrame) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (padding frame) |
+ 0x00, |
+ // Ignored data (which in this case is a stream frame) |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
ASSERT_TRUE(visitor_.header_.get()); |
@@ -1006,7 +1205,8 @@ TEST_P(QuicFramerTest, PaddingFrame) { |
EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
// A packet with no frames is not acceptable. |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1039,9 +1239,40 @@ TEST_P(QuicFramerTest, StreamFrame) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1057,7 +1288,10 @@ TEST_P(QuicFramerTest, StreamFrame) { |
CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
// Now test framing boundaries. |
- CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); |
+ CheckStreamFrameBoundaries( |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
+ kQuicMaxStreamIdSize, !kIncludeVersion); |
} |
TEST_P(QuicFramerTest, MissingDiversificationNonce) { |
@@ -1092,9 +1326,40 @@ TEST_P(QuicFramerTest, MissingDiversificationNonce) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_FALSE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_DECRYPTION_FAILURE, framer_.error()); |
} |
@@ -1125,9 +1390,40 @@ TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFE, |
+ // stream id |
+ 0x04, 0x03, 0x02, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1145,7 +1441,10 @@ TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
// Now test framing boundaries. |
const size_t stream_id_size = 3; |
- CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
+ CheckStreamFrameBoundaries( |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
+ stream_id_size, !kIncludeVersion); |
} |
TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
@@ -1174,9 +1473,40 @@ TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFD, |
+ // stream id |
+ 0x04, 0x03, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1194,7 +1524,10 @@ TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
// Now test framing boundaries. |
const size_t stream_id_size = 2; |
- CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
+ CheckStreamFrameBoundaries( |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
+ stream_id_size, !kIncludeVersion); |
} |
TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
@@ -1223,9 +1556,40 @@ TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFC, |
+ // stream id |
+ 0x04, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1243,7 +1607,10 @@ TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
// Now test framing boundaries. |
const size_t stream_id_size = 1; |
- CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
+ CheckStreamFrameBoundaries( |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
+ stream_id_size, !kIncludeVersion); |
} |
TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
@@ -1274,27 +1641,63 @@ TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
- // clang-format on |
- |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
- EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
- EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
- ASSERT_TRUE(visitor_.header_.get()); |
- EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
- EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
- EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, |
- !kIncludeDiversificationNonce)); |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version, 8 byte connection_id) |
+ 0x39, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
- ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
- EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
- EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
- EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
+ // clang-format on |
+ |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
+ EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
+ |
+ EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
+ ASSERT_TRUE(visitor_.header_.get()); |
+ EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
+ EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
+ EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, |
+ !kIncludeDiversificationNonce)); |
+ |
+ ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
+ EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
+ EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); |
+ EXPECT_TRUE(visitor_.stream_frames_[0]->fin); |
EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); |
CheckStreamFrameData("hello world!", visitor_.stream_frames_[0].get()); |
// Now test framing boundaries. |
- CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); |
+ CheckStreamFrameBoundaries( |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
+ kQuicMaxStreamIdSize, kIncludeVersion); |
} |
TEST_P(QuicFramerTest, RejectPacket) { |
@@ -1325,9 +1728,40 @@ TEST_P(QuicFramerTest, RejectPacket) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1347,12 +1781,25 @@ TEST_P(QuicFramerTest, RejectPublicHeader) { |
// public flags (8 byte connection_id) |
0x38, |
// connection_id |
- 0x10, 0x32, 0x54, 0x76, |
- 0x98, 0xBA, 0xDC, 0xFE, |
+ 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
+ }; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
}; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1382,9 +1829,37 @@ TEST_P(QuicFramerTest, AckFrameOneAckBlock) { |
// num timestamps. |
0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x3C, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (ack frame) |
+ // (one ack block, 2 byte largest observed, 2 byte block length) |
+ 0x45, |
+ // largest acked |
+ 0x34, 0x12, |
+ // Zero delta time. |
+ 0x00, 0x00, |
+ // first ack block length. |
+ 0x34, 0x12, |
+ // num timestamps. |
+ 0x00, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1420,7 +1895,8 @@ TEST_P(QuicFramerTest, AckFrameOneAckBlock) { |
expected_error = "Unable to read num received packets."; |
} |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1476,9 +1952,63 @@ TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) { |
// Delta time. |
0x10, 0x32, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x3C, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (ack frame) |
+ // (more than one ack block, 2 byte largest observed, 2 byte block length) |
+ 0x65, |
+ // largest acked |
+ 0x34, 0x12, |
+ // Zero delta time. |
+ 0x00, 0x00, |
+ // num ack blocks ranges. |
+ 0x04, |
+ // first ack block length. |
+ 0x01, 0x00, |
+ // gap to next block. |
+ 0x01, |
+ // ack block length. |
+ 0xaf, 0x0e, |
+ // gap to next block. |
+ 0xff, |
+ // ack block length. |
+ 0x00, 0x00, |
+ // gap to next block. |
+ 0x91, |
+ // ack block length. |
+ 0xea, 0x01, |
+ // gap to next block. |
+ 0x05, |
+ // ack block length. |
+ 0x04, 0x00, |
+ // Number of timestamps. |
+ 0x02, |
+ // Delta from largest observed. |
+ 0x01, |
+ // Delta time. |
+ 0x10, 0x32, 0x54, 0x76, |
+ // Delta from largest observed. |
+ 0x02, |
+ // Delta time. |
+ 0x10, 0x32, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1565,7 +2095,8 @@ TEST_P(QuicFramerTest, AckFrameTwoTimeStampsMultipleAckBlocks) { |
} |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1590,9 +2121,31 @@ TEST_P(QuicFramerTest, NewStopWaitingFrame) { |
0x08, 0x00, 0x00, 0x00, |
0x00, 0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x3C, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xA8, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ // frame type (stop waiting frame) |
+ 0x06, |
+ // least packet number awaiting an ack, delta from packet number. |
+ 0x08, 0x00, 0x00, 0x00, |
+ 0x00, 0x00, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1610,7 +2163,8 @@ TEST_P(QuicFramerTest, NewStopWaitingFrame) { |
string expected_error; |
expected_error = "Unable to read least unacked delta."; |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1642,9 +2196,38 @@ TEST_P(QuicFramerTest, RstStreamFrameQuic) { |
// error code |
0x01, 0x00, 0x00, 0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (rst stream frame) |
+ 0x01, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ |
+ // sent byte offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ |
+ // error code |
+ 0x01, 0x00, 0x00, 0x00, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1670,7 +2253,8 @@ TEST_P(QuicFramerTest, RstStreamFrameQuic) { |
expected_error = "Unable to read rst stream error code."; |
} |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1703,9 +2287,39 @@ TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
'I', ' ', 'c', 'a', |
'n', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (connection close frame) |
+ 0x02, |
+ // error code |
+ 0x11, 0x00, 0x00, 0x00, |
+ |
+ // error details length |
+ 0x0d, 0x00, |
+ // error details |
+ 'b', 'e', 'c', 'a', |
+ 'u', 's', 'e', ' ', |
+ 'I', ' ', 'c', 'a', |
+ 'n', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1730,7 +2344,8 @@ TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
expected_error = "Unable to read connection close error details."; |
} |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1764,9 +2379,40 @@ TEST_P(QuicFramerTest, GoAwayFrame) { |
'I', ' ', 'c', 'a', |
'n', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (go away frame) |
+ 0x03, |
+ // error code |
+ 0x09, 0x00, 0x00, 0x00, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // error details length |
+ 0x0d, 0x00, |
+ // error details |
+ 'b', 'e', 'c', 'a', |
+ 'u', 's', 'e', ' ', |
+ 'I', ' ', 'c', 'a', |
+ 'n', |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1792,7 +2438,8 @@ TEST_P(QuicFramerTest, GoAwayFrame) { |
expected_error = "Unable to read goaway reason."; |
} |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1820,9 +2467,34 @@ TEST_P(QuicFramerTest, WindowUpdateFrame) { |
0x54, 0x76, 0x10, 0x32, |
0xDC, 0xFE, 0x98, 0xBA, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (window update frame) |
+ 0x04, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // byte offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1843,7 +2515,8 @@ TEST_P(QuicFramerTest, WindowUpdateFrame) { |
expected_error = "Unable to read window byte_offset."; |
} |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1868,9 +2541,31 @@ TEST_P(QuicFramerTest, BlockedFrame) { |
// stream id |
0x04, 0x03, 0x02, 0x01, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (blocked frame) |
+ 0x05, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1885,7 +2580,8 @@ TEST_P(QuicFramerTest, BlockedFrame) { |
++i) { |
string expected_error = "Unable to read stream_id."; |
CheckProcessingFails( |
- packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet, |
i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, |
!kIncludeVersion, !kIncludeDiversificationNonce, |
PACKET_6BYTE_PACKET_NUMBER), |
@@ -1908,9 +2604,29 @@ TEST_P(QuicFramerTest, PingFrame) { |
// frame type (ping frame) |
0x07, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (ping frame) |
+ 0x07, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
@@ -1950,37 +2666,90 @@ TEST_P(QuicFramerTest, PublicResetPacketV33) { |
0xBC, 0x9A, 0x78, 0x56, |
0x34, 0x12, 0x00, 0x00, |
}; |
- // clang-format on |
- |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
- EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
- ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
- ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
- EXPECT_EQ(kConnectionId, |
- visitor_.public_reset_packet_->public_header.connection_id); |
- EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
- EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
- EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
- EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); |
- EXPECT_EQ( |
- IpAddressFamily::IP_UNSPEC, |
- visitor_.public_reset_packet_->client_address.host().address_family()); |
- // Now test framing boundaries. |
- for (size_t i = 0; i < arraysize(packet); ++i) { |
- string expected_error; |
- QUIC_DLOG(INFO) << "iteration: " << i; |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte connection_id) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (2) + padding |
+ 0x02, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ }; |
+ // clang-format on |
+ |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
+ EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
+ ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
+ ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
+ EXPECT_EQ(kConnectionId, |
+ visitor_.public_reset_packet_->public_header.connection_id); |
+ EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
+ EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
+ EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof); |
+ EXPECT_EQ(0u, visitor_.public_reset_packet_->rejected_packet_number); |
+ EXPECT_EQ( |
+ IpAddressFamily::IP_UNSPEC, |
+ visitor_.public_reset_packet_->client_address.host().address_family()); |
+ |
+ // Now test framing boundaries. |
+ if (!FLAGS_quic_restart_flag_quic_big_endian_connection_id) { |
+ for (size_t i = 0; i < arraysize(packet); ++i) { |
+ string expected_error; |
+ QUIC_DLOG(INFO) << "iteration: " << i; |
+ if (i < kConnectionIdOffset) { |
+ expected_error = "Unable to read public flags."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PACKET_HEADER); |
+ } else if (i < kPublicResetPacketMessageTagOffset) { |
+ expected_error = "Unable to read ConnectionId."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PACKET_HEADER); |
+ } else { |
+ expected_error = "Unable to read reset message."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PUBLIC_RST_PACKET); |
+ } |
+ } |
+ return; |
+ } |
+ |
+ for (size_t i = 0; i < arraysize(packet_cid_be); ++i) { |
+ string expected_error; |
+ QUIC_DLOG(INFO) << "iteration: " << i; |
if (i < kConnectionIdOffset) { |
expected_error = "Unable to read public flags."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PACKET_HEADER); |
} else if (i < kPublicResetPacketMessageTagOffset) { |
expected_error = "Unable to read ConnectionId."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PACKET_HEADER); |
} else { |
expected_error = "Unable to read reset message."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PUBLIC_RST_PACKET); |
} |
} |
@@ -2015,9 +2784,41 @@ TEST_P(QuicFramerTest, PublicResetPacket) { |
0xBC, 0x9A, 0x78, 0x56, |
0x34, 0x12, 0x00, 0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte connection_id) |
+ 0x0E, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (2) + padding |
+ 0x02, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
@@ -2032,20 +2833,41 @@ TEST_P(QuicFramerTest, PublicResetPacket) { |
visitor_.public_reset_packet_->client_address.host().address_family()); |
// Now test framing boundaries. |
- for (size_t i = 0; i < arraysize(packet); ++i) { |
+ if (!FLAGS_quic_restart_flag_quic_big_endian_connection_id) { |
+ for (size_t i = 0; i < arraysize(packet); ++i) { |
+ string expected_error; |
+ QUIC_DLOG(INFO) << "iteration: " << i; |
+ if (i < kConnectionIdOffset) { |
+ expected_error = "Unable to read public flags."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PACKET_HEADER); |
+ } else if (i < kPublicResetPacketMessageTagOffset) { |
+ expected_error = "Unable to read ConnectionId."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PACKET_HEADER); |
+ } else { |
+ expected_error = "Unable to read reset message."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PUBLIC_RST_PACKET); |
+ } |
+ } |
+ return; |
+ } |
+ |
+ for (size_t i = 0; i < arraysize(packet_cid_be); ++i) { |
string expected_error; |
QUIC_DLOG(INFO) << "iteration: " << i; |
if (i < kConnectionIdOffset) { |
expected_error = "Unable to read public flags."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PACKET_HEADER); |
} else if (i < kPublicResetPacketMessageTagOffset) { |
expected_error = "Unable to read ConnectionId."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PACKET_HEADER); |
} else { |
expected_error = "Unable to read reset message."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PUBLIC_RST_PACKET); |
} |
} |
@@ -2080,11 +2902,43 @@ TEST_P(QuicFramerTest, PublicResetPacketWithTrailingJunk) { |
// trailing junk |
'j', 'u', 'n', 'k', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte connection_id) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (2) + padding |
+ 0x02, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ // trailing junk |
+ 'j', 'u', 'n', 'k', |
+ }; |
// clang-format on |
string expected_error = "Unable to read reset message."; |
- CheckProcessingFails(packet, arraysize(packet), expected_error, |
- QUIC_INVALID_PUBLIC_RST_PACKET); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ expected_error, QUIC_INVALID_PUBLIC_RST_PACKET); |
} |
TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { |
@@ -2122,9 +2976,49 @@ TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { |
0x04, 0x1F, 0xC6, 0x2C, |
0xBB, 0x01, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte connection_id) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (3) + padding |
+ 0x03, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // tag kCADR |
+ 'C', 'A', 'D', 'R', |
+ // end offset 24 |
+ 0x18, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ // client address: 4.31.198.44:443 |
+ 0x02, 0x00, |
+ 0x04, 0x1F, 0xC6, 0x2C, |
+ 0xBB, 0x01, |
+ }; |
// clang-format on |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
ASSERT_TRUE(visitor_.public_reset_packet_.get()); |
@@ -2139,20 +3033,41 @@ TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) { |
EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port()); |
// Now test framing boundaries. |
- for (size_t i = 0; i < arraysize(packet); ++i) { |
+ if (!FLAGS_quic_restart_flag_quic_big_endian_connection_id) { |
+ for (size_t i = 0; i < arraysize(packet); ++i) { |
+ string expected_error; |
+ QUIC_DLOG(INFO) << "iteration: " << i; |
+ if (i < kConnectionIdOffset) { |
+ expected_error = "Unable to read public flags."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PACKET_HEADER); |
+ } else if (i < kPublicResetPacketMessageTagOffset) { |
+ expected_error = "Unable to read ConnectionId."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PACKET_HEADER); |
+ } else { |
+ expected_error = "Unable to read reset message."; |
+ CheckProcessingFails(packet, i, expected_error, |
+ QUIC_INVALID_PUBLIC_RST_PACKET); |
+ } |
+ } |
+ return; |
+ } |
+ |
+ for (size_t i = 0; i < arraysize(packet_cid_be); ++i) { |
string expected_error; |
QUIC_DLOG(INFO) << "iteration: " << i; |
if (i < kConnectionIdOffset) { |
expected_error = "Unable to read public flags."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PACKET_HEADER); |
} else if (i < kPublicResetPacketMessageTagOffset) { |
expected_error = "Unable to read ConnectionId."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PACKET_HEADER); |
} else { |
expected_error = "Unable to read reset message."; |
- CheckProcessingFails(packet, i, expected_error, |
+ CheckProcessingFails(packet_cid_be, i, expected_error, |
QUIC_INVALID_PUBLIC_RST_PACKET); |
} |
} |
@@ -2170,11 +3085,28 @@ TEST_P(QuicFramerTest, VersionNegotiationPacket) { |
'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
'Q', '2', '.', '0', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version, 8 byte connection_id) |
+ 0x39, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
+ 'Q', '2', '.', '0', |
+ }; |
// clang-format on |
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
@@ -2192,7 +3124,10 @@ TEST_P(QuicFramerTest, VersionNegotiationPacket) { |
expected_error = "Unable to read supported version in negotiation."; |
error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
} |
- CheckProcessingFails(packet, i, expected_error, error_code); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, error_code); |
} |
} |
@@ -2208,11 +3143,28 @@ TEST_P(QuicFramerTest, OldVersionNegotiationPacket) { |
'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
'Q', '2', '.', '0', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version, 8 byte connection_id) |
+ 0x3D, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
+ 'Q', '2', '.', '0', |
+ }; |
// clang-format on |
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT); |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
ASSERT_EQ(QUIC_NO_ERROR, framer_.error()); |
ASSERT_TRUE(visitor_.version_negotiation_packet_.get()); |
@@ -2230,7 +3182,10 @@ TEST_P(QuicFramerTest, OldVersionNegotiationPacket) { |
expected_error = "Unable to read supported version in negotiation."; |
error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
} |
- CheckProcessingFails(packet, i, expected_error, error_code); |
+ CheckProcessingFails(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ i, expected_error, error_code); |
} |
} |
@@ -2258,19 +3213,41 @@ TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
0x00, |
0x00, 0x00, 0x00, 0x00 |
}; |
+ |
+ unsigned char packet_cid_be[kMaxPacketSize] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (padding frame) |
+ 0x00, |
+ 0x00, 0x00, 0x00, 0x00 |
+ }; |
// clang-format on |
uint64_t header_size = GetPacketHeaderSize( |
framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
!kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER); |
- memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
+ memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet) + |
+ header_size + 1, |
+ 0x00, kMaxPacketSize - header_size - 1); |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
@@ -2297,19 +3274,40 @@ TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { |
0x00, |
0x00, 0x00, 0x00, 0x00 |
}; |
+ |
+ unsigned char packet_cid_be[kMaxPacketSize] = { |
+ // public flags (8 byte connection_id and 4 byte packet number) |
+ 0x28, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ |
+ // frame type (padding frame) |
+ 0x00, |
+ 0x00, 0x00, 0x00, 0x00 |
+ }; |
// clang-format on |
uint64_t header_size = GetPacketHeaderSize( |
framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
!kIncludeDiversificationNonce, PACKET_4BYTE_PACKET_NUMBER); |
- memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
+ memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet) + |
+ header_size + 1, |
+ 0x00, kMaxPacketSize - header_size - 1); |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
@@ -2336,19 +3334,40 @@ TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { |
0x00, |
0x00, 0x00, 0x00, 0x00 |
}; |
+ |
+ unsigned char packet_cid_be[kMaxPacketSize] = { |
+ // public flags (8 byte connection_id and 2 byte packet number) |
+ 0x18, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, |
+ |
+ // frame type (padding frame) |
+ 0x00, |
+ 0x00, 0x00, 0x00, 0x00 |
+ }; |
// clang-format on |
uint64_t header_size = GetPacketHeaderSize( |
framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
!kIncludeDiversificationNonce, PACKET_2BYTE_PACKET_NUMBER); |
- memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
+ memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet) + |
+ header_size + 1, |
+ 0x00, kMaxPacketSize - header_size - 1); |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
@@ -2375,19 +3394,40 @@ TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { |
0x00, |
0x00, 0x00, 0x00, 0x00 |
}; |
+ |
+ unsigned char packet_cid_be[kMaxPacketSize] = { |
+ // public flags (8 byte connection_id and 1 byte packet number) |
+ 0x08, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, |
+ |
+ // frame type (padding frame) |
+ 0x00, |
+ 0x00, 0x00, 0x00, 0x00 |
+ }; |
// clang-format on |
uint64_t header_size = GetPacketHeaderSize( |
framer_.version(), PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
!kIncludeDiversificationNonce, PACKET_1BYTE_PACKET_NUMBER); |
- memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
+ memset((FLAGS_quic_restart_flag_quic_big_endian_connection_id ? packet_cid_be |
+ : packet) + |
+ header_size + 1, |
+ 0x00, kMaxPacketSize - header_size - 1); |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
@@ -2425,14 +3465,41 @@ TEST_P(QuicFramerTest, BuildStreamFramePacket) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin and no length) |
+ 0xDF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
@@ -2452,7 +3519,28 @@ TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
static_cast<unsigned char>( |
FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2 ? 0x39 : 0x3D), |
// connection_id |
- 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
+ 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
+ // version tag |
+ 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin and no length) |
+ 0xDF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, 0xDC, 0xFE, 0x98, 0xBA, |
+ // data |
+ 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', |
+ }; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version, 8 byte connection_id) |
+ static_cast<unsigned char>( |
+ FLAGS_quic_reloadable_flag_quic_remove_v33_hacks2 ? 0x39 : 0x3D), |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
// version tag |
'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
// packet number |
@@ -2473,9 +3561,14 @@ TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
@@ -2488,15 +3581,29 @@ TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) { |
// version tag |
'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version, 8 byte connection_id) |
+ 0x0D, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '0', GetQuicVersionDigitTens(), GetQuicVersionDigitOnes(), |
+ }; |
// clang-format on |
QuicConnectionId connection_id = kConnectionId; |
std::unique_ptr<QuicEncryptedPacket> data( |
framer_.BuildVersionNegotiationPacket(connection_id, |
SupportedVersions(GetParam()))); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlock) { |
@@ -2535,14 +3642,40 @@ TEST_P(QuicFramerTest, BuildAckFramePacketOneAckBlock) { |
// num timestamps. |
0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (ack frame) |
+ // (no ack blocks, 2 byte largest observed, 2 byte block length) |
+ 0x45, |
+ // largest acked |
+ 0x34, 0x12, |
+ // Zero delta time. |
+ 0x00, 0x00, |
+ // first ack block length. |
+ 0x34, 0x12, |
+ // num timestamps. |
+ 0x00, |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) { |
@@ -2602,14 +3735,58 @@ TEST_P(QuicFramerTest, BuildAckFramePacketMultipleAckBlocks) { |
// num timestamps. |
0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (ack frame) |
+ // (has ack blocks, 2 byte largest observed, 2 byte block length) |
+ 0x65, |
+ // largest acked |
+ 0x34, 0x12, |
+ // Zero delta time. |
+ 0x00, 0x00, |
+ // num ack blocks ranges. |
+ 0x04, |
+ // first ack block length. |
+ 0x01, 0x00, |
+ // gap to next block. |
+ 0x01, |
+ // ack block length. |
+ 0xaf, 0x0e, |
+ // gap to next block. |
+ 0xff, |
+ // ack block length. |
+ 0x00, 0x00, |
+ // gap to next block. |
+ 0x91, |
+ // ack block length. |
+ 0xea, 0x01, |
+ // gap to next block. |
+ 0x05, |
+ // ack block length. |
+ 0x04, 0x00, |
+ // num timestamps. |
+ 0x00, |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) { |
@@ -2725,12 +3902,111 @@ TEST_P(QuicFramerTest, BuildAckFramePacketMaxAckBlocks) { |
0x00, |
}; |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ // frame type (ack frame) |
+ // (has ack blocks, 2 byte largest observed, 2 byte block length) |
+ 0x65, |
+ // largest acked |
+ 0x34, 0x12, |
+ // Zero delta time. |
+ 0x00, 0x00, |
+ // num ack blocks ranges. |
+ 0xff, |
+ // first ack block length. |
+ 0xdd, 0x0f, |
+ // 255 = 4 * 63 + 3 |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, |
+ // num timestamps. |
+ 0x00, |
+ }; |
+ // clang-format on |
+ |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { |
@@ -2761,14 +4037,34 @@ TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { |
0x1C, 0x00, 0x00, 0x00, |
0x00, 0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
+ |
+ // frame type (stop waiting frame) |
+ 0x06, |
+ // least packet number awaiting an ack, delta from packet number. |
+ 0x1C, 0x00, 0x00, 0x00, |
+ 0x00, 0x00, |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
@@ -2804,6 +4100,26 @@ TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
// error code |
0x08, 0x07, 0x06, 0x05, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (rst stream frame) |
+ 0x01, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // sent byte offset |
+ 0x01, 0x02, 0x03, 0x04, |
+ 0x05, 0x06, 0x07, 0x08, |
+ // error code |
+ 0x08, 0x07, 0x06, 0x05, |
+ }; |
// clang-format on |
QuicFrames frames = {QuicFrame(&rst_frame)}; |
@@ -2811,9 +4127,14 @@ TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
@@ -2852,14 +4173,41 @@ TEST_P(QuicFramerTest, BuildCloseFramePacket) { |
'I', ' ', 'c', 'a', |
'n', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (connection close frame) |
+ 0x02, |
+ // error code |
+ 0x08, 0x07, 0x06, 0x05, |
+ // error details length |
+ 0x0d, 0x00, |
+ // error details |
+ 'b', 'e', 'c', 'a', |
+ 'u', 's', 'e', ' ', |
+ 'I', ' ', 'c', 'a', |
+ 'n', |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
@@ -2901,14 +4249,43 @@ TEST_P(QuicFramerTest, BuildGoAwayPacket) { |
'I', ' ', 'c', 'a', |
'n', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (go away frame) |
+ 0x03, |
+ // error code |
+ 0x08, 0x07, 0x06, 0x05, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // error details length |
+ 0x0d, 0x00, |
+ // error details |
+ 'b', 'e', 'c', 'a', |
+ 'u', 's', 'e', ' ', |
+ 'I', ' ', 'c', 'a', |
+ 'n', |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
@@ -2943,14 +4320,37 @@ TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { |
0x88, 0x77, 0x66, 0x55, |
0x44, 0x33, 0x22, 0x11, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (window update frame) |
+ 0x04, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // byte offset |
+ 0x88, 0x77, 0x66, 0x55, |
+ 0x44, 0x33, 0x22, 0x11, |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildBlockedPacket) { |
@@ -2981,14 +4381,34 @@ TEST_P(QuicFramerTest, BuildBlockedPacket) { |
// stream id |
0x04, 0x03, 0x02, 0x01, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (blocked frame) |
+ 0x05, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildPingPacket) { |
@@ -2998,15 +4418,28 @@ TEST_P(QuicFramerTest, BuildPingPacket) { |
header.public_header.version_flag = false; |
header.packet_number = kPacketNumber; |
- QuicFrames frames = {QuicFrame(QuicPingFrame())}; |
+ QuicFrames frames = {QuicFrame(QuicPingFrame())}; |
+ |
+ // clang-format off |
+ unsigned char packet[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0x10, 0x32, 0x54, 0x76, |
+ 0x98, 0xBA, 0xDC, 0xFE, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (ping frame) |
+ 0x07, |
+ }; |
- // clang-format off |
- unsigned char packet[] = { |
+ unsigned char packet_cid_be[] = { |
// public flags (8 byte connection_id) |
0x38, |
// connection_id |
- 0x10, 0x32, 0x54, 0x76, |
- 0x98, 0xBA, 0xDC, 0xFE, |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
// packet number |
0xBC, 0x9A, 0x78, 0x56, |
0x34, 0x12, |
@@ -3019,9 +4452,14 @@ TEST_P(QuicFramerTest, BuildPingPacket) { |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
// Test that the MTU discovery packet is serialized correctly as a PING packet. |
@@ -3048,14 +4486,32 @@ TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { |
// frame type (ping frame) |
0x07, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (ping frame) |
+ 0x07, |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
ASSERT_TRUE(data != nullptr); |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
TEST_P(QuicFramerTest, BuildPublicResetPacketOld) { |
@@ -3093,6 +4549,32 @@ TEST_P(QuicFramerTest, BuildPublicResetPacketOld) { |
0xBC, 0x9A, 0x78, 0x56, |
0x34, 0x12, 0x00, 0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte ConnectionId) |
+ 0x0E, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (2) + padding |
+ 0x02, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ }; |
+ |
unsigned char packet_no_rejected_packet_number[] = { |
// public flags (public reset, 8 byte ConnectionId) |
0x0E, |
@@ -3111,6 +4593,24 @@ TEST_P(QuicFramerTest, BuildPublicResetPacketOld) { |
0x89, 0x67, 0x45, 0x23, |
0x01, 0xEF, 0xCD, 0xAB, |
}; |
+ |
+ unsigned char packet_no_rejected_packet_number_cid_be[] = { |
+ // public flags (public reset, 8 byte ConnectionId) |
+ 0x0E, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (1) + padding |
+ 0x01, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ }; |
// clang-format on |
std::unique_ptr<QuicEncryptedPacket> data( |
@@ -3119,12 +4619,21 @@ TEST_P(QuicFramerTest, BuildPublicResetPacketOld) { |
if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { |
test::CompareCharArraysWithHexError( |
"constructed packet", data->data(), data->length(), |
- AsChars(packet_no_rejected_packet_number), |
- arraysize(packet_no_rejected_packet_number)); |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_no_rejected_packet_number_cid_be |
+ : packet_no_rejected_packet_number), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_no_rejected_packet_number_cid_be) |
+ : arraysize(packet_no_rejected_packet_number)); |
} else { |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
} |
@@ -3163,6 +4672,32 @@ TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
0xBC, 0x9A, 0x78, 0x56, |
0x34, 0x12, 0x00, 0x00, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte ConnectionId) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (2) + padding |
+ 0x02, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ }; |
+ |
unsigned char packet_no_rejected_packet_number[] = { |
// public flags (public reset, 8 byte ConnectionId) |
0x0A, |
@@ -3181,6 +4716,24 @@ TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
0x89, 0x67, 0x45, 0x23, |
0x01, 0xEF, 0xCD, 0xAB, |
}; |
+ |
+ unsigned char packet_no_rejected_packet_number_cid_be[] = { |
+ // public flags (public reset, 8 byte ConnectionId) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (1) + padding |
+ 0x01, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ }; |
// clang-format on |
std::unique_ptr<QuicEncryptedPacket> data( |
@@ -3190,12 +4743,21 @@ TEST_P(QuicFramerTest, BuildPublicResetPacket) { |
if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { |
test::CompareCharArraysWithHexError( |
"constructed packet", data->data(), data->length(), |
- AsChars(packet_no_rejected_packet_number), |
- arraysize(packet_no_rejected_packet_number)); |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_no_rejected_packet_number_cid_be |
+ : packet_no_rejected_packet_number), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_no_rejected_packet_number_cid_be) |
+ : arraysize(packet_no_rejected_packet_number)); |
} else { |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
} |
@@ -3244,6 +4806,40 @@ TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
0x7F, 0x00, 0x00, 0x01, |
0x34, 0x12, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (public reset, 8 byte ConnectionId) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (3) + padding |
+ 0x03, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kRSEQ |
+ 'R', 'S', 'E', 'Q', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // tag kCADR |
+ 'C', 'A', 'D', 'R', |
+ // end offset 24 |
+ 0x18, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // rejected packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, 0x00, 0x00, |
+ // client address |
+ 0x02, 0x00, |
+ 0x7F, 0x00, 0x00, 0x01, |
+ 0x34, 0x12, |
+ }; |
+ |
unsigned char packet_no_rejected_packet_number[] = { |
// public flags (public reset, 8 byte ConnectionId) |
0x0A, |
@@ -3269,7 +4865,33 @@ TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
0x02, 0x00, |
0x7F, 0x00, 0x00, 0x01, |
0x34, 0x12, |
- }; |
+ }; |
+ |
+ unsigned char packet_no_rejected_packet_number_cid_be[] = { |
+ // public flags (public reset, 8 byte ConnectionId) |
+ 0x0A, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // message tag (kPRST) |
+ 'P', 'R', 'S', 'T', |
+ // num_entries (2) + padding |
+ 0x02, 0x00, 0x00, 0x00, |
+ // tag kRNON |
+ 'R', 'N', 'O', 'N', |
+ // end offset 8 |
+ 0x08, 0x00, 0x00, 0x00, |
+ // tag kCADR |
+ 'C', 'A', 'D', 'R', |
+ // end offset 16 |
+ 0x10, 0x00, 0x00, 0x00, |
+ // nonce proof |
+ 0x89, 0x67, 0x45, 0x23, |
+ 0x01, 0xEF, 0xCD, 0xAB, |
+ // client address |
+ 0x02, 0x00, |
+ 0x7F, 0x00, 0x00, 0x01, |
+ 0x34, 0x12, |
+ }; |
// clang-format on |
std::unique_ptr<QuicEncryptedPacket> data( |
@@ -3279,12 +4901,23 @@ TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { |
if (FLAGS_quic_reloadable_flag_quic_remove_packet_number_from_public_reset) { |
test::CompareCharArraysWithHexError( |
"constructed packet", data->data(), data->length(), |
- AsChars(packet_no_rejected_packet_number), |
- arraysize(packet_no_rejected_packet_number)); |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_no_rejected_packet_number_cid_be |
+ : packet_no_rejected_packet_number), |
+ |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_no_rejected_packet_number_cid_be) |
+ : arraysize(packet_no_rejected_packet_number)); |
} else { |
- test::CompareCharArraysWithHexError("constructed packet", data->data(), |
- data->length(), AsChars(packet), |
- arraysize(packet)); |
+ test::CompareCharArraysWithHexError( |
+ "constructed packet", data->data(), data->length(), |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
} |
@@ -3307,12 +4940,33 @@ TEST_P(QuicFramerTest, EncryptPacket) { |
'i', 'j', 'k', 'l', |
'm', 'n', 'o', 'p', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // redundancy |
+ 'a', 'b', 'c', 'd', |
+ 'e', 'f', 'g', 'h', |
+ 'i', 'j', 'k', 'l', |
+ 'm', 'n', 'o', 'p', |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> raw(new QuicPacket( |
- AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID, |
- !kIncludeVersion, !kIncludeDiversificationNonce, |
- PACKET_6BYTE_PACKET_NUMBER)); |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false, PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
+ !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER)); |
char buffer[kMaxPacketSize]; |
size_t encrypted_length = framer_.EncryptPayload( |
ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); |
@@ -3342,12 +4996,35 @@ TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
'i', 'j', 'k', 'l', |
'm', 'n', 'o', 'p', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (version, 8 byte connection_id) |
+ 0x39, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // version tag |
+ 'Q', '.', '1', '0', |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // redundancy |
+ 'a', 'b', 'c', 'd', |
+ 'e', 'f', 'g', 'h', |
+ 'i', 'j', 'k', 'l', |
+ 'm', 'n', 'o', 'p', |
+ }; |
// clang-format on |
std::unique_ptr<QuicPacket> raw(new QuicPacket( |
- AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID, |
- kIncludeVersion, !kIncludeDiversificationNonce, |
- PACKET_6BYTE_PACKET_NUMBER)); |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false, PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
+ !kIncludeDiversificationNonce, PACKET_6BYTE_PACKET_NUMBER)); |
char buffer[kMaxPacketSize]; |
size_t encrypted_length = framer_.EncryptPayload( |
ENCRYPTION_NONE, packet_number, *raw, buffer, kMaxPacketSize); |
@@ -3498,6 +5175,44 @@ TEST_P(QuicFramerTest, StopPacketProcessing) { |
0xBE, 0x9A, 0x78, 0x56, |
0x34, 0x12, |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x38, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ |
+ // frame type (ack frame) |
+ 0x40, |
+ // least packet number awaiting an ack |
+ 0xA0, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ // largest observed packet number |
+ 0xBF, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ // num missing packets |
+ 0x01, |
+ // missing packet |
+ 0xBE, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ }; |
// clang-format on |
MockFramerVisitor visitor; |
@@ -3511,7 +5226,14 @@ TEST_P(QuicFramerTest, StopPacketProcessing) { |
EXPECT_CALL(visitor, OnUnauthenticatedHeader(_)).WillOnce(Return(true)); |
EXPECT_CALL(visitor, OnDecryptedPacket(_)); |
- QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
+ QuicEncryptedPacket encrypted( |
+ AsChars(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet), |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet), |
+ false); |
EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
} |
@@ -3654,9 +5376,40 @@ TEST_P(QuicFramerTest, FramerFuzzTest) { |
'o', ' ', 'w', 'o', |
'r', 'l', 'd', '!', |
}; |
+ |
+ unsigned char packet_cid_be[] = { |
+ // public flags (8 byte connection_id) |
+ 0x3C, |
+ // connection_id |
+ 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, |
+ // packet number |
+ 0xBC, 0x9A, 0x78, 0x56, |
+ 0x34, 0x12, |
+ // private flags |
+ 0x00, |
+ |
+ // frame type (stream frame with fin) |
+ 0xFF, |
+ // stream id |
+ 0x04, 0x03, 0x02, 0x01, |
+ // offset |
+ 0x54, 0x76, 0x10, 0x32, |
+ 0xDC, 0xFE, 0x98, 0xBA, |
+ // data length |
+ 0x0c, 0x00, |
+ // data |
+ 'h', 'e', 'l', 'l', |
+ 'o', ' ', 'w', 'o', |
+ 'r', 'l', 'd', '!', |
+ }; |
// clang-format on |
- QuicFramerFuzzFunc(packet, arraysize(packet)); |
+ QuicFramerFuzzFunc(FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? packet_cid_be |
+ : packet, |
+ FLAGS_quic_restart_flag_quic_big_endian_connection_id |
+ ? arraysize(packet_cid_be) |
+ : arraysize(packet)); |
} |
} // namespace test |