Remove QUIC_VERSION_43.
PiperOrigin-RevId: 533153414
diff --git a/quiche/quic/core/chlo_extractor.cc b/quiche/quic/core/chlo_extractor.cc
index e55df8a..a663432 100644
--- a/quiche/quic/core/chlo_extractor.cc
+++ b/quiche/quic/core/chlo_extractor.cc
@@ -33,7 +33,6 @@
void OnError(QuicFramer* /*framer*/) override {}
bool OnProtocolVersionMismatch(ParsedQuicVersion version) override;
void OnPacket() override {}
- void OnPublicResetPacket(const QuicPublicResetPacket& /*packet*/) override {}
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& /*packet*/) override {}
void OnRetryPacket(QuicConnectionId /*original_connection_id*/,
diff --git a/quiche/quic/core/crypto/crypto_utils.cc b/quiche/quic/core/crypto/crypto_utils.cc
index 01fb681..9ce176e 100644
--- a/quiche/quic/core/crypto/crypto_utils.cc
+++ b/quiche/quic/core/crypto/crypto_utils.cc
@@ -94,7 +94,7 @@
const std::string getLabelForVersion(const ParsedQuicVersion& version,
const absl::string_view& predicate) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync with HKDF labels");
if (version == ParsedQuicVersion::V2Draft08()) {
return absl::StrCat("quicv2 ", predicate);
@@ -172,7 +172,7 @@
const uint8_t* InitialSaltForVersion(const ParsedQuicVersion& version,
size_t* out_len) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync with initial encryption salts");
if (version == ParsedQuicVersion::V2Draft08()) {
*out_len = ABSL_ARRAYSIZE(kV2Draft08InitialSalt);
@@ -230,7 +230,7 @@
bool RetryIntegrityKeysForVersion(const ParsedQuicVersion& version,
absl::string_view* key,
absl::string_view* nonce) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync with retry integrity keys");
if (!version.UsesTls()) {
QUIC_BUG(quic_bug_10699_2)
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index fd71300..44e3abe 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -679,8 +679,7 @@
}
bool SupportsIetfQuicWithTls(ParsedQuicVersion version) {
- return version.HasIetfInvariantHeader() &&
- version.handshake_protocol == PROTOCOL_TLS1_3;
+ return version.handshake_protocol == PROTOCOL_TLS1_3;
}
static void ExpectFlowControlsSynced(QuicSession* client,
@@ -2747,58 +2746,6 @@
server_thread_->Resume();
}
-TEST_P(EndToEndTest, 0ByteConnectionId) {
- if (version_.HasIetfInvariantHeader()) {
- // SetBytesForConnectionIdToSend only applies to Google QUIC encoding.
- ASSERT_TRUE(Initialize());
- return;
- }
- client_config_.SetBytesForConnectionIdToSend(0);
- ASSERT_TRUE(Initialize());
-
- SendSynchronousFooRequestAndCheckResponse();
- QuicConnection* client_connection = GetClientConnection();
- ASSERT_TRUE(client_connection);
- QuicPacketHeader* header =
- QuicConnectionPeer::GetLastHeader(client_connection);
- EXPECT_EQ(CONNECTION_ID_ABSENT, header->source_connection_id_included);
-}
-
-TEST_P(EndToEndTest, 8ByteConnectionId) {
- if (version_.HasIetfInvariantHeader()) {
- // SetBytesForConnectionIdToSend only applies to Google QUIC encoding.
- ASSERT_TRUE(Initialize());
- return;
- }
- client_config_.SetBytesForConnectionIdToSend(8);
- ASSERT_TRUE(Initialize());
-
- SendSynchronousFooRequestAndCheckResponse();
- QuicConnection* client_connection = GetClientConnection();
- ASSERT_TRUE(client_connection);
- QuicPacketHeader* header =
- QuicConnectionPeer::GetLastHeader(client_connection);
- EXPECT_EQ(CONNECTION_ID_PRESENT, header->destination_connection_id_included);
-}
-
-TEST_P(EndToEndTest, 15ByteConnectionId) {
- if (version_.HasIetfInvariantHeader()) {
- // SetBytesForConnectionIdToSend only applies to Google QUIC encoding.
- ASSERT_TRUE(Initialize());
- return;
- }
- client_config_.SetBytesForConnectionIdToSend(15);
- ASSERT_TRUE(Initialize());
-
- // Our server is permissive and allows for out of bounds values.
- SendSynchronousFooRequestAndCheckResponse();
- QuicConnection* client_connection = GetClientConnection();
- ASSERT_TRUE(client_connection);
- QuicPacketHeader* header =
- QuicConnectionPeer::GetLastHeader(client_connection);
- EXPECT_EQ(CONNECTION_ID_PRESENT, header->destination_connection_id_included);
-}
-
TEST_P(EndToEndTest, ResetConnection) {
ASSERT_TRUE(Initialize());
@@ -4039,17 +3986,11 @@
QuicConnection* client_connection = GetClientConnection();
ASSERT_TRUE(client_connection);
QuicConnectionId connection_id = client_connection->connection_id();
- QuicPublicResetPacket header;
- header.connection_id = connection_id;
QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
Perspective::IS_SERVER, kQuicDefaultConnectionIdLength);
- std::unique_ptr<QuicEncryptedPacket> packet;
- if (version_.HasIetfInvariantHeader()) {
- packet = framer.BuildIetfStatelessResetPacket(
- connection_id, /*received_packet_length=*/100, stateless_reset_token);
- } else {
- packet = framer.BuildPublicResetPacket(header);
- }
+ std::unique_ptr<QuicEncryptedPacket> packet =
+ framer.BuildIetfStatelessResetPacket(
+ connection_id, /*received_packet_length=*/100, stateless_reset_token);
// We must pause the server's thread in order to call WritePacket without
// race conditions.
server_thread_->Pause();
@@ -4082,24 +4023,16 @@
ASSERT_TRUE(client_connection);
QuicConnectionId incorrect_connection_id = TestConnectionId(
TestConnectionIdToUInt64(client_connection->connection_id()) + 1);
- QuicPublicResetPacket header;
- header.connection_id = incorrect_connection_id;
QuicFramer framer(server_supported_versions_, QuicTime::Zero(),
Perspective::IS_SERVER, kQuicDefaultConnectionIdLength);
- std::unique_ptr<QuicEncryptedPacket> packet;
NiceMock<MockQuicConnectionDebugVisitor> visitor;
client_connection->set_debug_visitor(&visitor);
- if (version_.HasIetfInvariantHeader()) {
- packet = framer.BuildIetfStatelessResetPacket(
- incorrect_connection_id, /*received_packet_length=*/100,
- stateless_reset_token);
- EXPECT_CALL(visitor, OnIncorrectConnectionId(incorrect_connection_id))
- .Times(0);
- } else {
- packet = framer.BuildPublicResetPacket(header);
- EXPECT_CALL(visitor, OnIncorrectConnectionId(incorrect_connection_id))
- .Times(1);
- }
+ std::unique_ptr<QuicEncryptedPacket> packet =
+ framer.BuildIetfStatelessResetPacket(incorrect_connection_id,
+ /*received_packet_length=*/100,
+ stateless_reset_token);
+ EXPECT_CALL(visitor, OnIncorrectConnectionId(incorrect_connection_id))
+ .Times(0);
// We must pause the server's thread in order to call WritePacket without
// race conditions.
server_thread_->Pause();
@@ -4108,16 +4041,11 @@
server_address_.host(), client_address, nullptr);
server_thread_->Resume();
- if (version_.HasIetfInvariantHeader()) {
- // The request should fail. IETF stateless reset does not include connection
- // ID.
- EXPECT_EQ("", client_->SendSynchronousRequest("/foo"));
- EXPECT_TRUE(client_->response_headers()->empty());
- EXPECT_THAT(client_->connection_error(), IsError(QUIC_PUBLIC_RESET));
- } else {
- // The connection should be unaffected.
- SendSynchronousFooRequestAndCheckResponse();
- }
+ // The request should fail. IETF stateless reset does not include connection
+ // ID.
+ EXPECT_EQ("", client_->SendSynchronousRequest("/foo"));
+ EXPECT_TRUE(client_->response_headers()->empty());
+ EXPECT_THAT(client_->connection_error(), IsError(QUIC_PUBLIC_RESET));
client_connection->set_debug_visitor(nullptr);
}
@@ -4179,8 +4107,7 @@
TestConnectionIdToUInt64(client_connection->connection_id()) + 1);
std::unique_ptr<QuicEncryptedPacket> packet(
QuicFramer::BuildVersionNegotiationPacket(
- incorrect_connection_id, EmptyQuicConnectionId(),
- version_.HasIetfInvariantHeader(),
+ incorrect_connection_id, EmptyQuicConnectionId(), /*ietf_quic=*/true,
version_.HasLengthPrefixedConnectionIds(),
server_supported_versions_));
NiceMock<MockQuicConnectionDebugVisitor> visitor;
@@ -4255,9 +4182,8 @@
// Send a version negotiation packet.
std::unique_ptr<QuicEncryptedPacket> packet(
QuicFramer::BuildVersionNegotiationPacket(
- destination_connection_id, source_connection_id,
- parsed_version.HasIetfInvariantHeader(), has_length_prefix,
- supported_versions_));
+ destination_connection_id, source_connection_id, /*ietf_quic=*/true,
+ has_length_prefix, supported_versions_));
server_writer_->WritePacket(
packet->data(), packet->length(), peer_address.host(),
client_->client()->network_helper()->GetLatestClientAddress(), nullptr);
@@ -4834,49 +4760,6 @@
VerifyCleanConnection(true);
}
-// Regression test for b/111515567
-TEST_P(EndToEndTest, AgreeOnStopWaiting) {
- ASSERT_TRUE(Initialize());
- EXPECT_TRUE(client_->client()->WaitForOneRttKeysAvailable());
-
- QuicConnection* client_connection = GetClientConnection();
- ASSERT_TRUE(client_connection);
- server_thread_->Pause();
- QuicConnection* server_connection = GetServerConnection();
- if (server_connection != nullptr) {
- // Verify client and server connections agree on the value of
- // no_stop_waiting_frames.
- EXPECT_EQ(QuicConnectionPeer::GetNoStopWaitingFrames(client_connection),
- QuicConnectionPeer::GetNoStopWaitingFrames(server_connection));
- } else {
- ADD_FAILURE() << "Missing server connection";
- }
- server_thread_->Resume();
-}
-
-// Regression test for b/111515567
-TEST_P(EndToEndTest, AgreeOnStopWaitingWithNoStopWaitingOption) {
- QuicTagVector options;
- options.push_back(kNSTP);
- client_config_.SetConnectionOptionsToSend(options);
- ASSERT_TRUE(Initialize());
- EXPECT_TRUE(client_->client()->WaitForOneRttKeysAvailable());
-
- QuicConnection* client_connection = GetClientConnection();
- ASSERT_TRUE(client_connection);
- server_thread_->Pause();
- QuicConnection* server_connection = GetServerConnection();
- if (server_connection != nullptr) {
- // Verify client and server connections agree on the value of
- // no_stop_waiting_frames.
- EXPECT_EQ(QuicConnectionPeer::GetNoStopWaitingFrames(client_connection),
- QuicConnectionPeer::GetNoStopWaitingFrames(server_connection));
- } else {
- ADD_FAILURE() << "Missing server connection";
- }
- server_thread_->Resume();
-}
-
TEST_P(EndToEndTest, ReleaseHeadersStreamBufferWhenIdle) {
// Tests that when client side has no active request and no waiting
// PUSH_PROMISE, its headers stream's sequencer buffer should be released.
@@ -5243,10 +5126,6 @@
}
TEST_P(EndToEndTest, SendMessages) {
- if (!version_.SupportsMessageFrames()) {
- Initialize();
- return;
- }
ASSERT_TRUE(Initialize());
EXPECT_TRUE(client_->client()->WaitForOneRttKeysAvailable());
QuicSession* client_session = GetClientSession();
@@ -6001,11 +5880,6 @@
};
TEST_P(EndToEndTest, ConnectionCloseBeforeHandshakeComplete) {
- if (!version_.HasIetfInvariantHeader()) {
- // Only runs for IETF QUIC header.
- Initialize();
- return;
- }
// This test ensures ZERO_RTT_PROTECTED connection close could close a client
// which has switched to forward secure.
connect_to_server_on_initialize_ = false;
@@ -6076,12 +5950,8 @@
TEST_P(EndToEndTest, ForwardSecureConnectionClose) {
// This test ensures ZERO_RTT_PROTECTED connection close is sent to a client
// which has ZERO_RTT_PROTECTED encryption level.
- connect_to_server_on_initialize_ = !version_.HasIetfInvariantHeader();
+ connect_to_server_on_initialize_ = false;
ASSERT_TRUE(Initialize());
- if (!version_.HasIetfInvariantHeader()) {
- // Only runs for IETF QUIC header.
- return;
- }
server_thread_->Pause();
QuicDispatcher* dispatcher =
QuicServerPeer::GetDispatcher(server_thread_->server());
diff --git a/quiche/quic/core/http/quic_spdy_client_session_test.cc b/quiche/quic/core/http/quic_spdy_client_session_test.cc
index 2696f19..11df4a3 100644
--- a/quiche/quic/core/http/quic_spdy_client_session_test.cc
+++ b/quiche/quic/core/http/quic_spdy_client_session_test.cc
@@ -569,16 +569,11 @@
// Verify that a decryptable packet with bad frames does close the connection.
QuicConnectionId destination_connection_id =
session_->connection()->connection_id();
- QuicConnectionId source_connection_id = EmptyQuicConnectionId();
+ QuicConnectionId source_connection_id = destination_connection_id;
QuicFramerPeer::SetLastSerializedServerConnectionId(
QuicConnectionPeer::GetFramer(connection_), destination_connection_id);
- bool version_flag = false;
- QuicConnectionIdIncluded scid_included = CONNECTION_ID_ABSENT;
- if (version.HasIetfInvariantHeader()) {
- version_flag = true;
- source_connection_id = destination_connection_id;
- scid_included = CONNECTION_ID_PRESENT;
- }
+ bool version_flag = true;
+ QuicConnectionIdIncluded scid_included = CONNECTION_ID_PRESENT;
std::unique_ptr<QuicEncryptedPacket> packet(ConstructMisFramedEncryptedPacket(
destination_connection_id, source_connection_id, version_flag, false, 100,
"data", CONNECTION_ID_ABSENT, scid_included, PACKET_4BYTE_PACKET_NUMBER,
diff --git a/quiche/quic/core/quic_connection.cc b/quiche/quic/core/quic_connection.cc
index adb6e87..3e575f2 100644
--- a/quiche/quic/core/quic_connection.cc
+++ b/quiche/quic/core/quic_connection.cc
@@ -292,7 +292,6 @@
ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET),
num_rtos_for_blackhole_detection_(0),
uber_received_packet_manager_(&stats_),
- stop_waiting_count_(0),
pending_retransmission_alarm_(false),
defer_send_in_response_to_packets_(false),
arena_(),
@@ -328,7 +327,6 @@
peer_max_packet_size_(kDefaultMaxPacketSizeTransportParam),
largest_received_packet_size_(0),
write_error_occurred_(false),
- no_stop_waiting_frames_(version().HasIetfInvariantHeader()),
consecutive_num_packets_with_no_retransmittable_frames_(0),
max_consecutive_num_packets_with_no_retransmittable_frames_(
kMaxConsecutiveNonRetransmittablePackets),
@@ -627,9 +625,6 @@
config.HasClientSentConnectionOption(k8PTO, perspective_)) {
num_rtos_for_blackhole_detection_ = 5;
}
- if (config.HasClientSentConnectionOption(kNSTP, perspective_)) {
- no_stop_waiting_frames_ = true;
- }
if (config.HasReceivedStatelessResetToken()) {
default_path_.stateless_reset_token = config.ReceivedStatelessResetToken();
}
@@ -829,26 +824,6 @@
last_received_packet_info_.decrypted = false;
}
-void QuicConnection::OnPublicResetPacket(const QuicPublicResetPacket& packet) {
- // Check that any public reset packet with a different connection ID that was
- // routed to this QuicConnection has been redirected before control reaches
- // here. (Check for a bug regression.)
- QUICHE_DCHECK_EQ(default_path_.server_connection_id, packet.connection_id);
- QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
- QUICHE_DCHECK(!version().HasIetfInvariantHeader());
- if (debug_visitor_ != nullptr) {
- debug_visitor_->OnPublicResetPacket(packet);
- }
- std::string error_details = "Received public reset.";
- if (perspective_ == Perspective::IS_CLIENT && !packet.endpoint_id.empty()) {
- absl::StrAppend(&error_details, " From ", packet.endpoint_id, ".");
- }
- QUIC_DLOG(INFO) << ENDPOINT << error_details;
- QUIC_CODE_COUNT(quic_tear_down_local_connection_on_public_reset);
- TearDownLocalConnectionState(QUIC_PUBLIC_RESET, NO_IETF_QUIC_ERROR,
- error_details, ConnectionCloseSource::FROM_PEER);
-}
-
bool QuicConnection::OnProtocolVersionMismatch(
ParsedQuicVersion received_version) {
QUIC_DLOG(INFO) << ENDPOINT << "Received packet with mismatched version "
@@ -1578,21 +1553,12 @@
}
SetLargestReceivedPacketWithAck(
last_received_packet_info_.header.packet_number);
- // If the incoming ack's packets set expresses missing packets: peer is still
- // waiting for a packet lower than a packet that we are no longer planning to
- // send.
- // If the incoming ack's packets set expresses received packets: peer is still
- // acking packets which we never care about.
- // Send an ack to raise the high water mark.
- const bool send_stop_waiting =
- no_stop_waiting_frames_ ? false : GetLeastUnacked() > start;
- PostProcessAfterAckFrame(send_stop_waiting,
- ack_result == PACKETS_NEWLY_ACKED);
+ PostProcessAfterAckFrame(ack_result == PACKETS_NEWLY_ACKED);
processing_ack_frame_ = false;
return connected_;
}
-bool QuicConnection::OnStopWaitingFrame(const QuicStopWaitingFrame& frame) {
+bool QuicConnection::OnStopWaitingFrame(const QuicStopWaitingFrame& /*frame*/) {
QUIC_BUG_IF(quic_bug_12714_8, !connected_)
<< "Processing STOP_WAITING frame when connection is closed. Received "
"packet info: "
@@ -1603,33 +1569,6 @@
if (!UpdatePacketContent(STOP_WAITING_FRAME)) {
return false;
}
-
- if (no_stop_waiting_frames_) {
- return true;
- }
- if (largest_seen_packet_with_stop_waiting_.IsInitialized() &&
- last_received_packet_info_.header.packet_number <=
- largest_seen_packet_with_stop_waiting_) {
- QUIC_DLOG(INFO) << ENDPOINT
- << "Received an old stop waiting frame: ignoring";
- return true;
- }
-
- const char* error = ValidateStopWaitingFrame(frame);
- if (error != nullptr) {
- CloseConnection(QUIC_INVALID_STOP_WAITING_DATA, error,
- ConnectionCloseBehavior::SEND_CONNECTION_CLOSE_PACKET);
- return false;
- }
-
- if (debug_visitor_ != nullptr) {
- debug_visitor_->OnStopWaitingFrame(frame);
- }
-
- largest_seen_packet_with_stop_waiting_ =
- last_received_packet_info_.header.packet_number;
- uber_received_packet_manager_.DontWaitForPacketsBefore(
- last_received_packet_info_.decrypted_level, frame.least_unacked);
return connected_;
}
@@ -1669,31 +1608,6 @@
return true;
}
-const char* QuicConnection::ValidateStopWaitingFrame(
- const QuicStopWaitingFrame& stop_waiting) {
- const QuicPacketNumber peer_least_packet_awaiting_ack =
- uber_received_packet_manager_.peer_least_packet_awaiting_ack();
- if (peer_least_packet_awaiting_ack.IsInitialized() &&
- stop_waiting.least_unacked < peer_least_packet_awaiting_ack) {
- QUIC_DLOG(ERROR) << ENDPOINT << "Peer's sent low least_unacked: "
- << stop_waiting.least_unacked << " vs "
- << peer_least_packet_awaiting_ack;
- // We never process old ack frames, so this number should only increase.
- return "Least unacked too small.";
- }
-
- if (stop_waiting.least_unacked >
- last_received_packet_info_.header.packet_number) {
- QUIC_DLOG(ERROR) << ENDPOINT
- << "Peer sent least_unacked:" << stop_waiting.least_unacked
- << " greater than the enclosing packet number:"
- << last_received_packet_info_.header.packet_number;
- return "Least unacked too large.";
- }
-
- return nullptr;
-}
-
bool QuicConnection::OnRstStreamFrame(const QuicRstStreamFrame& frame) {
QUIC_BUG_IF(quic_bug_12714_11, !connected_)
<< "Processing RST_STREAM frame when connection is closed. Received "
@@ -2334,7 +2248,6 @@
const QuicIetfStatelessResetPacket& /*packet*/) {
// TODO(fayang): Add OnAuthenticatedIetfStatelessResetPacket to
// debug_visitor_.
- QUICHE_DCHECK(version().HasIetfInvariantHeader());
QUICHE_DCHECK_EQ(perspective_, Perspective::IS_CLIENT);
if (!IsDefaultPath(last_received_packet_info_.destination_address,
@@ -2433,11 +2346,6 @@
clock_->ApproximateNow());
}
-void QuicConnection::PopulateStopWaitingFrame(
- QuicStopWaitingFrame* stop_waiting) {
- stop_waiting->least_unacked = GetLeastUnacked();
-}
-
QuicPacketNumber QuicConnection::GetLeastUnacked() const {
return sent_packet_manager_.GetLeastUnacked();
}
@@ -3083,13 +2991,6 @@
if (!version_negotiated_) {
if (perspective_ == Perspective::IS_CLIENT) {
QUICHE_DCHECK(!header.version_flag || header.form != GOOGLE_QUIC_PACKET);
- if (!version().HasIetfInvariantHeader()) {
- // If the client gets a packet without the version flag from the server
- // it should stop sending version since the version negotiation is done.
- // IETF QUIC stops sending version once encryption level switches to
- // forward secure.
- packet_creator_.StopSendingVersion();
- }
version_negotiated_ = true;
OnSuccessfulVersionNegotiation();
}
@@ -3244,7 +3145,7 @@
uber_received_packet_manager_
.GetAckTimeout(QuicUtils::GetPacketNumberSpace(encryption_level_))
.IsInitialized();
- if (!has_pending_ack && stop_waiting_count_ <= 1) {
+ if (!has_pending_ack) {
// No need to send an ACK.
return frames;
}
@@ -3255,14 +3156,8 @@
QUIC_BUG_IF(quic_bug_12714_23, updated_ack_frame.ack_frame->packets.Empty())
<< ENDPOINT << "Attempted to opportunistically bundle an empty "
<< encryption_level_ << " ACK, " << (has_pending_ack ? "" : "!")
- << "has_pending_ack, stop_waiting_count_ " << stop_waiting_count_;
+ << "has_pending_ack";
frames.push_back(updated_ack_frame);
-
- if (!no_stop_waiting_frames_) {
- QuicStopWaitingFrame stop_waiting;
- PopulateStopWaitingFrame(&stop_waiting);
- frames.push_back(QuicFrame(stop_waiting));
- }
return frames;
}
@@ -3938,11 +3833,7 @@
return;
}
// We can't send an error as the socket is presumably borked.
- if (version().HasIetfInvariantHeader()) {
- QUIC_CODE_COUNT(quic_tear_down_local_connection_on_write_error_ietf);
- } else {
- QUIC_CODE_COUNT(quic_tear_down_local_connection_on_write_error_non_ietf);
- }
+ QUIC_CODE_COUNT(quic_tear_down_local_connection_on_write_error_ietf);
CloseConnection(QUIC_PACKET_WRITE_ERROR, error_details,
ConnectionCloseBehavior::SILENT_CLOSE);
}
@@ -3963,13 +3854,7 @@
// loop here.
// TODO(ianswett): This is actually an internal error, not an
// encryption failure.
- if (version().HasIetfInvariantHeader()) {
- QUIC_CODE_COUNT(
- quic_tear_down_local_connection_on_serialized_packet_ietf);
- } else {
- QUIC_CODE_COUNT(
- quic_tear_down_local_connection_on_serialized_packet_non_ietf);
- }
+ QUIC_CODE_COUNT(quic_tear_down_local_connection_on_serialized_packet_ietf);
CloseConnection(QUIC_ENCRYPTION_FAILURE,
"Serialized packet does not have an encrypted buffer.",
ConnectionCloseBehavior::SILENT_CLOSE);
@@ -3997,13 +3882,7 @@
const std::string& error_details) {
// The packet creator or generator encountered an unrecoverable error: tear
// down local connection state immediately.
- if (version().HasIetfInvariantHeader()) {
- QUIC_CODE_COUNT(
- quic_tear_down_local_connection_on_unrecoverable_error_ietf);
- } else {
- QUIC_CODE_COUNT(
- quic_tear_down_local_connection_on_unrecoverable_error_non_ietf);
- }
+ QUIC_CODE_COUNT(quic_tear_down_local_connection_on_unrecoverable_error_ietf);
CloseConnection(error, error_details, ConnectionCloseBehavior::SILENT_CLOSE);
}
@@ -4152,11 +4031,6 @@
QUIC_DVLOG(1) << ENDPOINT << "Sending an ACK proactively";
QuicFrames frames;
frames.push_back(GetUpdatedAckFrame());
- if (!no_stop_waiting_frames_) {
- QuicStopWaitingFrame stop_waiting;
- PopulateStopWaitingFrame(&stop_waiting);
- frames.push_back(QuicFrame(stop_waiting));
- }
if (!packet_creator_.FlushAckFrame(frames)) {
return;
}
@@ -5750,9 +5624,8 @@
current_effective_peer_migration_type_ = NO_CHANGE;
}
-void QuicConnection::PostProcessAfterAckFrame(bool send_stop_waiting,
- bool acked_new_packet) {
- if (no_stop_waiting_frames_ && !packet_creator_.has_ack()) {
+void QuicConnection::PostProcessAfterAckFrame(bool acked_new_packet) {
+ if (!packet_creator_.has_ack()) {
uber_received_packet_manager_.DontWaitForPacketsBefore(
last_received_packet_info_.decrypted_level,
SupportsMultiplePacketNumberSpaces()
@@ -5773,12 +5646,6 @@
// detection if there is no packets in flight.
blackhole_detector_.StopDetection(/*permanent=*/false);
}
-
- if (send_stop_waiting) {
- ++stop_waiting_count_;
- } else {
- stop_waiting_count_ = 0;
- }
}
void QuicConnection::SetSessionNotifier(
@@ -5812,18 +5679,12 @@
void QuicConnection::ResetAckStates() {
ack_alarm_->Cancel();
- stop_waiting_count_ = 0;
uber_received_packet_manager_.ResetAckStates(encryption_level_);
}
MessageStatus QuicConnection::SendMessage(
QuicMessageId message_id, absl::Span<quiche::QuicheMemSlice> message,
bool flush) {
- if (!VersionSupportsMessageFrames(transport_version())) {
- QUIC_BUG(quic_bug_10511_38)
- << "MESSAGE frame is not supported for version " << transport_version();
- return MESSAGE_STATUS_UNSUPPORTED;
- }
if (MemSliceSpanTotalSize(message) > GetCurrentLargestMessagePayload()) {
return MESSAGE_STATUS_TOO_LARGE;
}
@@ -5864,11 +5725,7 @@
}
if (framer_.HasEncrypterOfEncryptionLevel(ENCRYPTION_ZERO_RTT)) {
if (encryption_level_ != ENCRYPTION_ZERO_RTT) {
- if (version().HasIetfInvariantHeader()) {
- QUIC_CODE_COUNT(quic_wrong_encryption_level_connection_close_ietf);
- } else {
- QUIC_CODE_COUNT(quic_wrong_encryption_level_connection_close);
- }
+ QUIC_CODE_COUNT(quic_wrong_encryption_level_connection_close_ietf);
}
return ENCRYPTION_ZERO_RTT;
}
diff --git a/quiche/quic/core/quic_connection.h b/quiche/quic/core/quic_connection.h
index f739644..8274be2 100644
--- a/quiche/quic/core/quic_connection.h
+++ b/quiche/quic/core/quic_connection.h
@@ -331,9 +331,6 @@
// Called when a CRYPTO frame containing handshake data is received.
virtual void OnCryptoFrame(const QuicCryptoFrame& /*frame*/) {}
- // Called when a StopWaitingFrame has been parsed.
- virtual void OnStopWaitingFrame(const QuicStopWaitingFrame& /*frame*/) {}
-
// Called when a QuicPaddingFrame has been parsed.
virtual void OnPaddingFrame(const QuicPaddingFrame& /*frame*/) {}
@@ -377,9 +374,6 @@
// Called when a HandshakeDoneFrame has been parsed.
virtual void OnHandshakeDoneFrame(const QuicHandshakeDoneFrame& /*frame*/) {}
- // Called when a public reset packet has been received.
- virtual void OnPublicResetPacket(const QuicPublicResetPacket& /*packet*/) {}
-
// Called when a version negotiation packet has been received.
virtual void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& /*packet*/) {}
@@ -669,7 +663,6 @@
void OnError(QuicFramer* framer) override;
bool OnProtocolVersionMismatch(ParsedQuicVersion received_version) override;
void OnPacket() override;
- void OnPublicResetPacket(const QuicPublicResetPacket& packet) override;
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& packet) override;
void OnRetryPacket(QuicConnectionId original_connection_id,
@@ -1648,11 +1641,11 @@
// Notifies the visitor of the close and marks the connection as disconnected.
// Does not send a connection close frame to the peer. It should only be
- // called by CloseConnection or OnConnectionCloseFrame, OnPublicResetPacket,
- // and OnAuthenticatedIetfStatelessResetPacket.
- // |ietf_error| may optionally be be used to directly specify the wire
- // error code. Otherwise if |ietf_error| is NO_IETF_QUIC_ERROR, the
- // QuicErrorCodeToTransportErrorCode mapping of |error| will be used.
+ // called by CloseConnection or OnConnectionCloseFrame, and
+ // OnAuthenticatedIetfStatelessResetPacket. |ietf_error| may optionally be be
+ // used to directly specify the wire error code. Otherwise if |ietf_error| is
+ // NO_IETF_QUIC_ERROR, the QuicErrorCodeToTransportErrorCode mapping of
+ // |error| will be used.
void TearDownLocalConnectionState(QuicErrorCode error,
QuicIetfTransportErrorCodes ietf_error,
const std::string& details,
@@ -1721,11 +1714,6 @@
// Flush packets buffered in the writer, if any.
void FlushPackets();
- // Make sure a stop waiting we got from our peer is sane.
- // Returns nullptr if the frame is valid or an error string if it was invalid.
- const char* ValidateStopWaitingFrame(
- const QuicStopWaitingFrame& stop_waiting);
-
// Clears any accumulated frames from the last received packet.
void ClearLastFrames();
@@ -1799,9 +1787,8 @@
ABSL_MUST_USE_RESULT bool UpdatePacketContent(QuicFrameType type);
// Called when last received ack frame has been processed.
- // |send_stop_waiting| indicates whether a stop waiting needs to be sent.
// |acked_new_packet| is true if a previously-unacked packet was acked.
- void PostProcessAfterAckFrame(bool send_stop_waiting, bool acked_new_packet);
+ void PostProcessAfterAckFrame(bool acked_new_packet);
// Updates the release time into the future.
void UpdateReleaseTimeIntoFuture();
@@ -1819,8 +1806,6 @@
// Returns true if the ACK frame should be bundled with ACK-eliciting frame.
bool ShouldBundleRetransmittableFrameWithAck() const;
- void PopulateStopWaitingFrame(QuicStopWaitingFrame* stop_waiting);
-
// Enables multiple packet number spaces support based on handshake protocol
// and flags.
void MaybeEnableMultiplePacketNumberSpacesSupport();
@@ -2142,11 +2127,6 @@
UberReceivedPacketManager uber_received_packet_manager_;
- // Indicates how many consecutive times an ack has arrived which indicates
- // the peer needs to stop waiting for some packets.
- // TODO(fayang): remove this when deprecating Q043.
- int stop_waiting_count_;
-
// Indicates the retransmission alarm needs to be set.
bool pending_retransmission_alarm_;
@@ -2240,9 +2220,6 @@
// avoid infinite write errors.
bool write_error_occurred_;
- // Indicates not to send or process stop waiting frames.
- bool no_stop_waiting_frames_;
-
// Consecutive number of sent packets which have no retransmittable frames.
size_t consecutive_num_packets_with_no_retransmittable_frames_;
diff --git a/quiche/quic/core/quic_connection_test.cc b/quiche/quic/core/quic_connection_test.cc
index 88a9fd4..5db68ba 100644
--- a/quiche/quic/core/quic_connection_test.cc
+++ b/quiche/quic/core/quic_connection_test.cc
@@ -562,23 +562,18 @@
// Run tests with combinations of {ParsedQuicVersion, AckResponse}.
struct TestParams {
- TestParams(ParsedQuicVersion version, AckResponse ack_response,
- bool no_stop_waiting)
- : version(version),
- ack_response(ack_response),
- no_stop_waiting(no_stop_waiting) {}
+ TestParams(ParsedQuicVersion version, AckResponse ack_response)
+ : version(version), ack_response(ack_response) {}
ParsedQuicVersion version;
AckResponse ack_response;
- bool no_stop_waiting;
};
// Used by ::testing::PrintToStringParamName().
std::string PrintToString(const TestParams& p) {
return absl::StrCat(
ParsedQuicVersionToString(p.version), "_",
- (p.ack_response == AckResponse::kDefer ? "defer" : "immediate"), "_",
- (p.no_stop_waiting ? "No" : ""), "StopWaiting");
+ (p.ack_response == AckResponse::kDefer ? "defer" : "immediate"));
}
// Constructs various test permutations.
@@ -589,12 +584,7 @@
for (size_t i = 0; i < all_supported_versions.size(); ++i) {
for (AckResponse ack_response :
{AckResponse::kDefer, AckResponse::kImmediate}) {
- params.push_back(
- TestParams(all_supported_versions[i], ack_response, true));
- if (!all_supported_versions[i].HasIetfInvariantHeader()) {
- params.push_back(
- TestParams(all_supported_versions[i], ack_response, false));
- }
+ params.push_back(TestParams(all_supported_versions[i], ack_response));
}
}
return params;
@@ -665,12 +655,6 @@
QuicConnectionPeer::GetFramer(&connection_), connection_id_);
QuicFramerPeer::SetLastWrittenPacketNumberLength(
QuicConnectionPeer::GetFramer(&connection_), packet_number_length_);
- if (version().HasIetfInvariantHeader()) {
- EXPECT_TRUE(QuicConnectionPeer::GetNoStopWaitingFrames(&connection_));
- } else {
- QuicConnectionPeer::SetNoStopWaitingFrames(&connection_,
- GetParam().no_stop_waiting);
- }
QuicStreamId stream_id;
if (QuicVersionUsesCryptoFrames(version().transport_version)) {
stream_id = QuicUtils::GetFirstBidirectionalStreamId(
@@ -740,18 +724,6 @@
ParsedQuicVersion version() { return GetParam().version; }
- QuicStopWaitingFrame* stop_waiting() {
- QuicConnectionPeer::PopulateStopWaitingFrame(&connection_, &stop_waiting_);
- return &stop_waiting_;
- }
-
- QuicPacketNumber least_unacked() {
- if (writer_->stop_waiting_frames().empty()) {
- return QuicPacketNumber();
- }
- return writer_->stop_waiting_frames()[0].least_unacked;
- }
-
void SetClientConnectionId(const QuicConnectionId& client_connection_id) {
connection_.set_client_connection_id(client_connection_id);
writer_->framer()->framer()->SetExpectedClientConnectionIdLength(
@@ -1152,8 +1124,7 @@
QuicPacketHeader ConstructPacketHeader(uint64_t number,
EncryptionLevel level) {
QuicPacketHeader header;
- if (peer_framer_.version().HasIetfInvariantHeader() &&
- level < ENCRYPTION_FORWARD_SECURE) {
+ if (level < ENCRYPTION_FORWARD_SECURE) {
// Set long header type accordingly.
header.version_flag = true;
header.form = IETF_QUIC_LONG_HEADER_PACKET;
@@ -1177,8 +1148,7 @@
header.destination_connection_id = connection_id_;
header.destination_connection_id_included = connection_id_included_;
}
- if (peer_framer_.version().HasIetfInvariantHeader() &&
- peer_framer_.perspective() == Perspective::IS_SERVER) {
+ if (peer_framer_.perspective() == Perspective::IS_SERVER) {
if (!connection_.client_connection_id().IsEmpty()) {
header.destination_connection_id = connection_.client_connection_id();
header.destination_connection_id_included = CONNECTION_ID_PRESENT;
@@ -1194,12 +1164,6 @@
}
}
}
- if (!peer_framer_.version().HasIetfInvariantHeader() &&
- peer_framer_.perspective() == Perspective::IS_SERVER &&
- GetParam().version.handshake_protocol == PROTOCOL_QUIC_CRYPTO &&
- level == ENCRYPTION_ZERO_RTT) {
- header.nonce = &kTestDiversificationNonce;
- }
header.packet_number_length = packet_number_length_;
header.packet_number = QuicPacketNumber(number);
return header;
@@ -1244,14 +1208,9 @@
if (peer_framer_.perspective() == Perspective::IS_SERVER) {
header.source_connection_id = connection_id_;
header.destination_connection_id_included = CONNECTION_ID_ABSENT;
- if (!peer_framer_.version().HasIetfInvariantHeader()) {
- header.source_connection_id_included = CONNECTION_ID_PRESENT;
- }
} else {
header.destination_connection_id = connection_id_;
- if (peer_framer_.version().HasIetfInvariantHeader()) {
- header.destination_connection_id_included = CONNECTION_ID_ABSENT;
- }
+ header.destination_connection_id_included = CONNECTION_ID_ABSENT;
}
header.packet_number = QuicPacketNumber(number);
@@ -1375,7 +1334,7 @@
bool IsDefaultTestConfiguration() {
TestParams p = GetParam();
return p.ack_response == AckResponse::kImmediate &&
- p.version == AllSupportedVersions()[0] && p.no_stop_waiting;
+ p.version == AllSupportedVersions()[0];
}
void TestConnectionCloseQuicErrorCode(QuicErrorCode expected_code) {
@@ -3488,12 +3447,7 @@
QuicPacketNumber retransmission;
// Packet 1 is short header for IETF QUIC because the encryption level
// switched to ENCRYPTION_FORWARD_SECURE in SendStreamDataToPeer.
- EXPECT_CALL(*send_algorithm_,
- OnPacketSent(_, _, _,
- GetParam().version.HasIetfInvariantHeader()
- ? packet_size
- : packet_size - kQuicVersionSize,
- _))
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, packet_size, _))
.WillOnce(SaveArg<2>(&retransmission));
ProcessAckPacket(&frame);
@@ -3522,18 +3476,10 @@
OnPacketSent(_, _, _, _, HAS_RETRANSMITTABLE_DATA));
connection_.SendStreamDataWithString(3, "foofoofoo", 9, NO_FIN);
// Ack bundled.
- if (GetParam().no_stop_waiting) {
- // Do not ACK acks.
- EXPECT_EQ(1u, writer_->frame_count());
- } else {
- EXPECT_EQ(3u, writer_->frame_count());
- }
+ // Do not ACK acks.
+ EXPECT_EQ(1u, writer_->frame_count());
EXPECT_EQ(1u, writer_->stream_frames().size());
- if (GetParam().no_stop_waiting) {
- EXPECT_TRUE(writer_->ack_frames().empty());
- } else {
- EXPECT_FALSE(writer_->ack_frames().empty());
- }
+ EXPECT_TRUE(writer_->ack_frames().empty());
// But an ack with no missing packets will not send an ack.
AckPacket(original, &frame2);
@@ -3680,46 +3626,6 @@
EXPECT_EQ(1u, writer_->window_update_frames().size());
}
-TEST_P(QuicConnectionTest, LeastUnackedLower) {
- if (GetParam().version.HasIetfInvariantHeader()) {
- return;
- }
- EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
-
- SendStreamDataToPeer(1, "foo", 0, NO_FIN, nullptr);
- SendStreamDataToPeer(1, "bar", 3, NO_FIN, nullptr);
- SendStreamDataToPeer(1, "eep", 6, NO_FIN, nullptr);
-
- // Start out saying the least unacked is 2.
- QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 5);
- ProcessStopWaitingPacket(InitStopWaitingFrame(2));
-
- // Change it to 1, but lower the packet number to fake out-of-order packets.
- // This should be fine.
- QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 1);
- // The scheduler will not process out of order acks, but all packet processing
- // causes the connection to try to write.
- if (!GetParam().no_stop_waiting) {
- EXPECT_CALL(visitor_, OnCanWrite());
- }
- ProcessStopWaitingPacket(InitStopWaitingFrame(1));
-
- // Now claim it's one, but set the ordering so it was sent "after" the first
- // one. This should cause a connection error.
- QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 7);
- if (!GetParam().no_stop_waiting) {
- EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _))
- .Times(AtLeast(1));
- EXPECT_CALL(visitor_,
- OnConnectionClosed(_, ConnectionCloseSource::FROM_SELF))
- .Times(AtLeast(1));
- }
- ProcessStopWaitingPacket(InitStopWaitingFrame(1));
- if (!GetParam().no_stop_waiting) {
- TestConnectionCloseQuicErrorCode(QUIC_INVALID_STOP_WAITING_DATA);
- }
-}
-
TEST_P(QuicConnectionTest, TooManySentPackets) {
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
@@ -3785,30 +3691,11 @@
EXPECT_EQ(QuicPacketNumber(1u), last_packet);
SendAckPacketToPeer(); // Packet 2
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(1u), least_unacked());
- }
-
SendAckPacketToPeer(); // Packet 3
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(1u), least_unacked());
- }
SendStreamDataToPeer(1, "bar", 3, NO_FIN, &last_packet); // Packet 4
EXPECT_EQ(QuicPacketNumber(4u), last_packet);
SendAckPacketToPeer(); // Packet 5
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(1u), least_unacked());
- }
EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _, _, _));
@@ -3817,15 +3704,6 @@
ProcessAckPacket(&frame);
SendAckPacketToPeer(); // Packet 6
- // As soon as we've acked one, we skip ack packets 2 and 3 and note lack of
- // ack for 4.
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(4u), least_unacked());
- }
-
EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _, _, _));
// Peer acks up to packet 4, the last packet.
@@ -3835,33 +3713,13 @@
// Verify that we did not send an ack.
EXPECT_EQ(QuicPacketNumber(6u), writer_->header().packet_number);
- // So the last ack has not changed.
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(4u), least_unacked());
- }
-
// If we force an ack, we shouldn't change our retransmit state.
SendAckPacketToPeer(); // Packet 7
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(7u), least_unacked());
- }
// But if we send more data it should.
SendStreamDataToPeer(1, "eep", 6, NO_FIN, &last_packet); // Packet 8
EXPECT_EQ(QuicPacketNumber(8u), last_packet);
SendAckPacketToPeer(); // Packet 9
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(7u), least_unacked());
- }
EXPECT_EQ(QuicPacketNumber(1), stats.first_decrypted_packet);
}
@@ -3992,13 +3850,8 @@
// Parse the last packet and ensure it's an ack and two stream frames from
// two different streams.
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(2u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(2u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(2u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_TRUE(writer_->ack_frames().empty());
@@ -4107,13 +3960,8 @@
// Parse the last packet and ensure it's an ack and two stream frames from
// two different streams.
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(3u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(4u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(3u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(writer_->ack_frames().empty());
ASSERT_EQ(2u, writer_->stream_frames().size());
EXPECT_EQ(GetNthClientInitiatedStreamId(1, connection_.transport_version()),
@@ -4555,12 +4403,7 @@
EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _, _, _));
// Packet 1 is short header for IETF QUIC because the encryption level
// switched to ENCRYPTION_FORWARD_SECURE in SendStreamDataToPeer.
- EXPECT_CALL(*send_algorithm_,
- OnPacketSent(_, _, _,
- GetParam().version.HasIetfInvariantHeader()
- ? packet_size
- : packet_size - kQuicVersionSize,
- _));
+ EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, packet_size, _));
ProcessAckPacket(&frame);
}
@@ -4826,29 +4669,14 @@
QuicAckFrame frame = InitAckFrame(1);
ProcessAckPacket(&frame);
- // Verify that our internal state has least-unacked as 2, because we're still
- // waiting for a potential ack for 2.
-
- EXPECT_EQ(QuicPacketNumber(2u), stop_waiting()->least_unacked);
-
EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _, _, _));
frame = InitAckFrame(2);
ProcessAckPacket(&frame);
- EXPECT_EQ(QuicPacketNumber(3u), stop_waiting()->least_unacked);
// When we send an ack, we make sure our least-unacked makes sense. In this
// case since we're not waiting on an ack for 2 and all packets are acked, we
// set it to 3.
SendAckPacketToPeer(); // Packet 3
- // Least_unacked remains at 3 until another ack is received.
- EXPECT_EQ(QuicPacketNumber(3u), stop_waiting()->least_unacked);
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- // Check that the outgoing ack had its packet number as least_unacked.
- EXPECT_EQ(QuicPacketNumber(3u), least_unacked());
- }
// Ack the ack, which updates the rtt and raises the least unacked.
EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _, _, _, _));
@@ -4856,14 +4684,7 @@
ProcessAckPacket(&frame);
SendStreamDataToPeer(1, "bar", 3, NO_FIN, nullptr); // Packet 4
- EXPECT_EQ(QuicPacketNumber(4u), stop_waiting()->least_unacked);
SendAckPacketToPeer(); // Packet 5
- if (GetParam().no_stop_waiting) {
- // Expect no stop waiting frame is sent.
- EXPECT_FALSE(least_unacked().IsInitialized());
- } else {
- EXPECT_EQ(QuicPacketNumber(4u), least_unacked());
- }
// Send two data packets at the end, and ensure if the last one is acked,
// the least unacked is raised above the ack packets.
@@ -4874,8 +4695,6 @@
frame = InitAckFrame({{QuicPacketNumber(1), QuicPacketNumber(5)},
{QuicPacketNumber(7), QuicPacketNumber(8)}});
ProcessAckPacket(&frame);
-
- EXPECT_EQ(QuicPacketNumber(6u), stop_waiting()->least_unacked);
}
TEST_P(QuicConnectionTest, SendHandshakeMessages) {
@@ -6319,11 +6138,6 @@
TEST_P(QuicConnectionTest, LoopThroughSendingPacketsWithTruncation) {
set_perspective(Perspective::IS_SERVER);
- if (!GetParam().version.HasIetfInvariantHeader()) {
- // For IETF QUIC, encryption level will be switched to FORWARD_SECURE in
- // SendStreamDataWithString.
- QuicPacketCreatorPeer::SetSendVersionInPacket(creator_, false);
- }
// Set up a larger payload than will fit in one packet.
const std::string payload(connection_.max_packet_length(), 'a');
EXPECT_CALL(*send_algorithm_, SetFromConfig(_, _)).Times(AnyNumber());
@@ -6345,16 +6159,9 @@
EXPECT_EQ(payload.size(),
connection_.SendStreamDataWithString(3, payload, 1350, NO_FIN)
.bytes_consumed);
- if (connection_.version().HasIetfInvariantHeader()) {
- // Short header packets sent from server omit connection ID already, and
- // stream offset size increases from 0 to 2.
- EXPECT_EQ(non_truncated_packet_size, writer_->last_packet_size() - 2);
- } else {
- // Just like above, we save 8 bytes on payload, and 8 on truncation. -2
- // because stream offset size is 2 instead of 0.
- EXPECT_EQ(non_truncated_packet_size,
- writer_->last_packet_size() + 8 * 2 - 2);
- }
+ // Short header packets sent from server omit connection ID already, and
+ // stream offset size increases from 0 to 2.
+ EXPECT_EQ(non_truncated_packet_size, writer_->last_packet_size() - 2);
}
TEST_P(QuicConnectionTest, SendDelayedAck) {
@@ -6382,13 +6189,8 @@
connection_.GetAckAlarm()->Fire();
// Check that ack is sent and that delayed ack alarm is reset.
size_t padding_frame_count = writer_->padding_frames().size();
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(padding_frame_count + 2u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(writer_->ack_frames().empty());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6440,13 +6242,8 @@
}
// Check that ack is sent and that delayed ack alarm is reset.
size_t padding_frame_count = writer_->padding_frames().size();
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(padding_frame_count + 2u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(writer_->ack_frames().empty());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6557,13 +6354,8 @@
}
// Check that ack is sent and that delayed ack alarm is reset.
size_t padding_frame_count = writer_->padding_frames().size();
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(padding_frame_count + 2u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(writer_->ack_frames().empty());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6600,13 +6392,8 @@
ProcessPacket(2);
// Check that ack is sent and that delayed ack alarm is reset.
size_t padding_frame_count = writer_->padding_frames().size();
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(padding_frame_count + 2u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(writer_->ack_frames().empty());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6615,7 +6402,7 @@
EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(0);
ProcessPacket(2);
- size_t frames_per_ack = GetParam().no_stop_waiting ? 1 : 2;
+ size_t frames_per_ack = 1;
EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1);
ProcessPacket(3);
@@ -6658,13 +6445,8 @@
0, NO_FIN);
// Check that ack is bundled with outgoing data and that delayed ack
// alarm is reset.
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(2u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(3u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(2u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(writer_->ack_frames().empty());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6679,13 +6461,8 @@
ProcessCryptoPacketAtLevel(1, ENCRYPTION_INITIAL);
connection_.SendCryptoDataWithString("foo", 0);
// Check that ack is bundled with outgoing crypto data.
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(3u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(4u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(3u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6728,13 +6505,8 @@
}
ProcessCryptoPacketAtLevel(2, ENCRYPTION_INITIAL);
// Check that ack is sent and that delayed ack alarm is reset.
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(3u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(4u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(3u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
if (!QuicVersionUsesCryptoFrames(connection_.transport_version())) {
EXPECT_EQ(1u, writer_->stream_frames().size());
} else {
@@ -6772,13 +6544,8 @@
ProcessCryptoPacketAtLevel(2, ENCRYPTION_INITIAL);
}
// Check that ack is sent and that delayed ack alarm is reset.
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(3u, writer_->frame_count());
- EXPECT_TRUE(writer_->stop_waiting_frames().empty());
- } else {
- EXPECT_EQ(4u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
+ EXPECT_EQ(3u, writer_->frame_count());
+ EXPECT_TRUE(writer_->stop_waiting_frames().empty());
if (!QuicVersionUsesCryptoFrames(connection_.transport_version())) {
EXPECT_EQ(1u, writer_->stream_frames().size());
} else {
@@ -6835,20 +6602,9 @@
// Check that ack is bundled with outgoing data and the delayed ack
// alarm is reset.
- if (GetParam().no_stop_waiting) {
- // Do not ACK acks.
- EXPECT_EQ(1u, writer_->frame_count());
- } else {
- EXPECT_EQ(3u, writer_->frame_count());
- EXPECT_FALSE(writer_->stop_waiting_frames().empty());
- }
- if (GetParam().no_stop_waiting) {
- EXPECT_TRUE(writer_->ack_frames().empty());
- } else {
- EXPECT_FALSE(writer_->ack_frames().empty());
- EXPECT_EQ(QuicPacketNumber(3u),
- LargestAcked(writer_->ack_frames().front()));
- }
+ // Do not ACK acks.
+ EXPECT_EQ(1u, writer_->frame_count());
+ EXPECT_TRUE(writer_->ack_frames().empty());
EXPECT_EQ(1u, writer_->stream_frames().size());
EXPECT_FALSE(connection_.HasPendingAcks());
}
@@ -6976,29 +6732,7 @@
connection_.peer_address());
}
-TEST_P(QuicConnectionTest, PublicReset) {
- if (GetParam().version.HasIetfInvariantHeader()) {
- return;
- }
- QuicPublicResetPacket header;
- // Public reset packet in only built by server.
- header.connection_id = connection_id_;
- std::unique_ptr<QuicEncryptedPacket> packet(
- framer_.BuildPublicResetPacket(header));
- std::unique_ptr<QuicReceivedPacket> received(
- ConstructReceivedPacket(*packet, QuicTime::Zero()));
- EXPECT_CALL(visitor_, OnConnectionClosed(_, ConnectionCloseSource::FROM_PEER))
- .WillOnce(Invoke(this, &QuicConnectionTest::SaveConnectionCloseFrame));
- connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, *received);
- EXPECT_EQ(1, connection_close_frame_count_);
- EXPECT_THAT(saved_connection_close_frame_.quic_error_code,
- IsError(QUIC_PUBLIC_RESET));
-}
-
TEST_P(QuicConnectionTest, IetfStatelessReset) {
- if (!GetParam().version.HasIetfInvariantHeader()) {
- return;
- }
QuicConfig config;
QuicConfigPeer::SetReceivedStatelessResetToken(&config,
kTestStatelessResetToken);
@@ -7062,17 +6796,6 @@
connection_.ProcessUdpPacket(kSelfAddress, kPeerAddress, encrypted);
}
-TEST_P(QuicConnectionTest, MissingPacketsBeforeLeastUnacked) {
- if (GetParam().version.HasIetfInvariantHeader()) {
- return;
- }
- // Set the packet number of the ack packet to be least unacked (4).
- QuicPacketCreatorPeer::SetPacketNumber(&peer_creator_, 3);
- EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_));
- ProcessStopWaitingPacket(InitStopWaitingFrame(4));
- EXPECT_FALSE(connection_.ack_frame().packets.Empty());
-}
-
TEST_P(QuicConnectionTest, ClientHandlesVersionNegotiation) {
// All supported versions except the one the connection supports.
ParsedQuicVersionVector versions;
@@ -7085,8 +6808,7 @@
// Send a version negotiation packet.
std::unique_ptr<QuicEncryptedPacket> encrypted(
QuicFramer::BuildVersionNegotiationPacket(
- connection_id_, EmptyQuicConnectionId(),
- connection_.version().HasIetfInvariantHeader(),
+ connection_id_, EmptyQuicConnectionId(), /*ietf_quic=*/true,
connection_.version().HasLengthPrefixedConnectionIds(), versions));
std::unique_ptr<QuicReceivedPacket> received(
ConstructReceivedPacket(*encrypted, QuicTime::Zero()));
@@ -7120,8 +6842,7 @@
// Send a version negotiation packet.
std::unique_ptr<QuicEncryptedPacket> encrypted(
QuicFramer::BuildVersionNegotiationPacket(
- connection_id_, EmptyQuicConnectionId(),
- connection_.version().HasIetfInvariantHeader(),
+ connection_id_, EmptyQuicConnectionId(), /*ietf_quic=*/true,
connection_.version().HasLengthPrefixedConnectionIds(), versions));
std::unique_ptr<QuicReceivedPacket> received(
ConstructReceivedPacket(*encrypted, QuicTime::Zero()));
@@ -7143,8 +6864,7 @@
.WillOnce(Invoke(this, &QuicConnectionTest::SaveConnectionCloseFrame));
std::unique_ptr<QuicEncryptedPacket> encrypted(
QuicFramer::BuildVersionNegotiationPacket(
- connection_id_, EmptyQuicConnectionId(),
- connection_.version().HasIetfInvariantHeader(),
+ connection_id_, EmptyQuicConnectionId(), /*ietf_quic=*/true,
connection_.version().HasLengthPrefixedConnectionIds(),
AllSupportedVersions()));
std::unique_ptr<QuicReceivedPacket> received(
@@ -7161,14 +6881,9 @@
if (peer_framer_.perspective() == Perspective::IS_SERVER) {
header.source_connection_id = connection_id_;
header.destination_connection_id_included = CONNECTION_ID_ABSENT;
- if (!peer_framer_.version().HasIetfInvariantHeader()) {
- header.source_connection_id_included = CONNECTION_ID_PRESENT;
- }
} else {
header.destination_connection_id = connection_id_;
- if (peer_framer_.version().HasIetfInvariantHeader()) {
- header.destination_connection_id_included = CONNECTION_ID_ABSENT;
- }
+ header.destination_connection_id_included = CONNECTION_ID_ABSENT;
}
header.packet_number = QuicPacketNumber(1);
header.version_flag = false;
@@ -7274,9 +6989,7 @@
TEST_P(QuicConnectionTest, OnPacketHeaderDebugVisitor) {
QuicPacketHeader header;
header.packet_number = QuicPacketNumber(1);
- if (GetParam().version.HasIetfInvariantHeader()) {
- header.form = IETF_QUIC_LONG_HEADER_PACKET;
- }
+ header.form = IETF_QUIC_LONG_HEADER_PACKET;
MockQuicConnectionDebugVisitor debug_visitor;
connection_.set_debug_visitor(&debug_visitor);
@@ -8384,11 +8097,7 @@
// Simulate the alarm firing and check that a PING is sent.
connection_.GetPingAlarm()->Fire();
size_t padding_frame_count = writer_->padding_frames().size();
- if (GetParam().no_stop_waiting) {
- EXPECT_EQ(padding_frame_count + 2u, writer_->frame_count());
- } else {
- EXPECT_EQ(padding_frame_count + 3u, writer_->frame_count());
- }
+ EXPECT_EQ(padding_frame_count + 2u, writer_->frame_count());
ASSERT_EQ(1u, writer_->ping_frames().size());
}
@@ -8454,12 +8163,8 @@
writer_->Reset();
connection_.GetPingAlarm()->Fire();
size_t padding_frame_count = writer_->padding_frames().size();
- if (GetParam().no_stop_waiting) {
- // Do not ACK acks.
- EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
- } else {
- EXPECT_EQ(padding_frame_count + 3u, writer_->frame_count());
- }
+ // Do not ACK acks.
+ EXPECT_EQ(padding_frame_count + 1u, writer_->frame_count());
ASSERT_EQ(1u, writer_->ping_frames().size());
}
@@ -8773,9 +8478,6 @@
}
TEST_P(QuicConnectionTest, SendMessage) {
- if (!VersionSupportsMessageFrames(connection_.transport_version())) {
- return;
- }
if (connection_.version().UsesTls()) {
QuicConfig config;
QuicConfigPeer::SetReceivedMaxDatagramFrameSize(
@@ -8812,9 +8514,6 @@
}
TEST_P(QuicConnectionTest, GetCurrentLargestMessagePayload) {
- if (!connection_.version().SupportsMessageFrames()) {
- return;
- }
QuicPacketLength expected_largest_payload = 1215;
if (connection_.version().SendsVariableLengthPacketNumberInLongHeader()) {
expected_largest_payload += 3;
@@ -8843,9 +8542,6 @@
}
TEST_P(QuicConnectionTest, GetGuaranteedLargestMessagePayload) {
- if (!connection_.version().SupportsMessageFrames()) {
- return;
- }
QuicPacketLength expected_largest_payload = 1215;
if (connection_.version().HasLongHeaderLengths()) {
expected_largest_payload -= 2;
@@ -8871,8 +8567,7 @@
}
TEST_P(QuicConnectionTest, LimitedLargestMessagePayload) {
- if (!connection_.version().SupportsMessageFrames() ||
- !connection_.version().UsesTls()) {
+ if (!connection_.version().UsesTls()) {
return;
}
constexpr QuicPacketLength kFrameSizeLimit = 1000;
@@ -9171,41 +8866,6 @@
QuicConnectionPeer::GetCurrentPacketContent(&connection_));
}
-// Regression test for b/120791670
-TEST_P(QuicConnectionTest, StopProcessingGQuicPacketInIetfQuicConnection) {
- // This test mimics a problematic scenario where a QUIC connection using a
- // modern version received a Q043 packet and processed it incorrectly.
- // We can remove this test once Q043 is deprecated.
- if (!version().HasIetfInvariantHeader()) {
- return;
- }
- set_perspective(Perspective::IS_SERVER);
- if (QuicVersionUsesCryptoFrames(connection_.transport_version())) {
- EXPECT_CALL(visitor_, OnCryptoFrame(_)).Times(1);
- } else {
- EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(1);
- }
- ProcessFramePacketWithAddresses(MakeCryptoFrame(), kSelfAddress, kPeerAddress,
- ENCRYPTION_INITIAL);
-
- // Let connection process a Google QUIC packet.
- peer_framer_.set_version_for_tests(ParsedQuicVersion::Q043());
- std::unique_ptr<QuicPacket> packet(
- ConstructDataPacket(2, !kHasStopWaiting, ENCRYPTION_INITIAL));
- char buffer[kMaxOutgoingPacketSize];
- size_t encrypted_length =
- peer_framer_.EncryptPayload(ENCRYPTION_INITIAL, QuicPacketNumber(2),
- *packet, buffer, kMaxOutgoingPacketSize);
- // Make sure no stream frame is processed.
- EXPECT_CALL(visitor_, OnStreamFrame(_)).Times(0);
- connection_.ProcessUdpPacket(
- kSelfAddress, kPeerAddress,
- QuicReceivedPacket(buffer, encrypted_length, clock_.Now(), false));
-
- EXPECT_EQ(2u, connection_.GetStats().packets_received);
- EXPECT_EQ(1u, connection_.GetStats().packets_processed);
-}
-
TEST_P(QuicConnectionTest, AcceptPacketNumberZero) {
if (!VersionHasIetfQuicFrames(version().transport_version)) {
return;
@@ -10812,9 +10472,6 @@
// Regression test for b/151220135.
TEST_P(QuicConnectionTest, SendPingWhenSkipPacketNumberForPto) {
- if (!VersionSupportsMessageFrames(connection_.transport_version())) {
- return;
- }
QuicConfig config;
QuicTagVector connection_options;
connection_options.push_back(kPTOS);
diff --git a/quiche/quic/core/quic_crypto_stream.cc b/quiche/quic/core/quic_crypto_stream.cc
index 31c2180..925baa6 100644
--- a/quiche/quic/core/quic_crypto_stream.cc
+++ b/quiche/quic/core/quic_crypto_stream.cc
@@ -59,9 +59,7 @@
}
return QuicPacketCreator::StreamFramePacketOverhead(
version, connection_id.length(), 0, /*include_version=*/true,
- /*include_diversification_nonce=*/true,
- VersionHasIetfInvariantHeader(version) ? PACKET_4BYTE_PACKET_NUMBER
- : PACKET_1BYTE_PACKET_NUMBER,
+ /*include_diversification_nonce=*/true, PACKET_4BYTE_PACKET_NUMBER,
retry_token_length_length, length_length,
/*offset=*/0);
}
diff --git a/quiche/quic/core/quic_crypto_stream_test.cc b/quiche/quic/core/quic_crypto_stream_test.cc
index cd6d3cf..76f840b 100644
--- a/quiche/quic/core/quic_crypto_stream_test.cc
+++ b/quiche/quic/core/quic_crypto_stream_test.cc
@@ -639,10 +639,7 @@
for (const ParsedQuicVersion& version :
AllSupportedVersionsWithQuicCrypto()) {
SCOPED_TRACE(version);
- QuicByteCount expected_overhead = 48;
- if (version.HasIetfInvariantHeader()) {
- expected_overhead += 4;
- }
+ QuicByteCount expected_overhead = 52;
if (version.HasLongHeaderLengths()) {
expected_overhead += 3;
}
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc
index 9b1b470..d92ffff 100644
--- a/quiche/quic/core/quic_dispatcher.cc
+++ b/quiche/quic/core/quic_dispatcher.cc
@@ -703,19 +703,6 @@
return result;
}
- // We only apply this check for versions that do not use the IETF
- // invariant header because those versions are already checked in
- // QuicDispatcher::MaybeDispatchPacket.
- if (packet_info.version_flag &&
- !packet_info.version.HasIetfInvariantHeader() &&
- crypto_config()->validate_chlo_size() &&
- packet_info.packet.length() < kMinClientInitialPacketLength) {
- QUIC_DVLOG(1) << "Dropping CHLO packet which is too short, length: "
- << packet_info.packet.length();
- QUIC_CODE_COUNT(quic_drop_small_chlo_packets);
- return result;
- }
-
ParsedClientHello& parsed_chlo = result.parsed_chlo.emplace();
parsed_chlo.sni = alpn_extractor.ConsumeSni();
parsed_chlo.uaid = alpn_extractor.ConsumeUaid();
@@ -769,11 +756,7 @@
if (!connection->IsHandshakeComplete()) {
// TODO(fayang): Do not serialize connection close packet if the
// connection is closed by the client.
- if (!connection->version().HasIetfInvariantHeader()) {
- QUIC_CODE_COUNT(gquic_add_to_time_wait_list_with_handshake_failed);
- } else {
- QUIC_CODE_COUNT(quic_v44_add_to_time_wait_list_with_handshake_failed);
- }
+ QUIC_CODE_COUNT(quic_v44_add_to_time_wait_list_with_handshake_failed);
// This serializes a connection close termination packet and adds the
// connection to the time wait list.
StatelessConnectionTerminator terminator(
@@ -783,8 +766,7 @@
terminator.CloseConnection(
QUIC_HANDSHAKE_FAILED,
"Connection is closed by server before handshake confirmed",
- connection->version().HasIetfInvariantHeader(),
- connection->GetActiveServerConnectionIds());
+ /*ietf_quic=*/true, connection->GetActiveServerConnectionIds());
return;
}
QUIC_CODE_COUNT(quic_v44_add_to_time_wait_list_with_stateless_reset);
@@ -792,8 +774,7 @@
time_wait_list_manager_->AddConnectionIdToTimeWait(
action,
TimeWaitConnectionInfo(
- connection->version().HasIetfInvariantHeader(),
- connection->termination_packets(),
+ /*ietf_quic=*/true, connection->termination_packets(),
connection->GetActiveServerConnectionIds(),
connection->sent_packet_manager().GetRttStats()->smoothed_rtt()));
}
diff --git a/quiche/quic/core/quic_dispatcher_test.cc b/quiche/quic/core/quic_dispatcher_test.cc
index 12a62bb..ff2516a 100644
--- a/quiche/quic/core/quic_dispatcher_test.cc
+++ b/quiche/quic/core/quic_dispatcher_test.cc
@@ -953,14 +953,7 @@
uint8_t short_packet[22] = {0x70, 0xa7, 0x02, 0x6b};
uint8_t valid_size_packet[23] = {0x70, 0xa7, 0x02, 0x6c};
- size_t short_packet_len;
- if (version_.HasIetfInvariantHeader()) {
- short_packet_len = 21;
- } else {
- short_packet_len = 22;
- short_packet[0] = 0x0a;
- valid_size_packet[0] = 0x0a;
- }
+ size_t short_packet_len = 21;
QuicReceivedPacket packet(reinterpret_cast<char*>(short_packet),
short_packet_len, QuicTime::Zero());
QuicReceivedPacket packet2(reinterpret_cast<char*>(valid_size_packet),
@@ -971,21 +964,13 @@
EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _))
.Times(0);
// Verify small packet is silently dropped.
- if (version_.HasIetfInvariantHeader()) {
- EXPECT_CALL(connection_id_generator_, ConnectionIdLength(0xa7))
- .WillOnce(Return(kQuicDefaultConnectionIdLength));
- } else {
- EXPECT_CALL(connection_id_generator_, ConnectionIdLength(_)).Times(0);
- }
+ EXPECT_CALL(connection_id_generator_, ConnectionIdLength(0xa7))
+ .WillOnce(Return(kQuicDefaultConnectionIdLength));
EXPECT_CALL(*time_wait_list_manager_, SendPublicReset(_, _, _, _, _, _))
.Times(0);
dispatcher_->ProcessPacket(server_address_, client_address, packet);
- if (version_.HasIetfInvariantHeader()) {
- EXPECT_CALL(connection_id_generator_, ConnectionIdLength(0xa7))
- .WillOnce(Return(kQuicDefaultConnectionIdLength));
- } else {
- EXPECT_CALL(connection_id_generator_, ConnectionIdLength(_)).Times(0);
- }
+ EXPECT_CALL(connection_id_generator_, ConnectionIdLength(0xa7))
+ .WillOnce(Return(kQuicDefaultConnectionIdLength));
EXPECT_CALL(*time_wait_list_manager_, SendPublicReset(_, _, _, _, _, _))
.Times(1);
dispatcher_->ProcessPacket(server_address_, client_address, packet2);
@@ -1521,7 +1506,7 @@
dispatcher_->ProcessPacket(server_address_, client_address, received_packet);
}
-static_assert(quic::SupportedVersions().size() == 6u,
+static_assert(quic::SupportedVersions().size() == 5u,
"Please add new RejectDeprecatedVersion tests above this assert "
"when deprecating versions");
diff --git a/quiche/quic/core/quic_flags_list.h b/quiche/quic/core/quic_flags_list.h
index 7f6ba62..39bb408 100644
--- a/quiche/quic/core/quic_flags_list.h
+++ b/quiche/quic/core/quic_flags_list.h
@@ -29,8 +29,6 @@
QUIC_FLAG(quic_reloadable_flag_quic_no_path_degrading_before_handshake_confirmed, true)
// If true, default-enable 5RTO blachole detection.
QUIC_FLAG(quic_reloadable_flag_quic_default_enable_5rto_blackhole_detection2, true)
-// If true, disable QUIC version Q043.
-QUIC_FLAG(quic_reloadable_flag_quic_disable_version_q043, true)
// If true, disable QUIC version Q046.
QUIC_FLAG(quic_reloadable_flag_quic_disable_version_q046, true)
// If true, disable QUIC version Q050.
diff --git a/quiche/quic/core/quic_framer.cc b/quiche/quic/core/quic_framer.cc
index f06f205..b2b1278 100644
--- a/quiche/quic/core/quic_framer.cc
+++ b/quiche/quic/core/quic_framer.cc
@@ -63,10 +63,6 @@
#define ENDPOINT \
(perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
-// Number of bits the packet number length bits are shifted from the right
-// edge of the header.
-const uint8_t kPublicHeaderSequenceNumberShift = 4;
-
// There are two interpretations for the Frame Type byte in the QUIC protocol,
// resulting in two Frame Types: Special Frame Types and Regular Frame Types.
//
@@ -89,7 +85,6 @@
// Masks to determine if the frame type is a special use
// and for specific special frame types.
-const uint8_t kQuicFrameTypeBrokenMask = 0xE0; // 0b 11100000
const uint8_t kQuicFrameTypeSpecialMask = 0xC0; // 0b 11000000
const uint8_t kQuicFrameTypeStreamMask = 0x80;
const uint8_t kQuicFrameTypeAckMask = 0x40;
@@ -160,22 +155,6 @@
return (Delta(target, a) < Delta(target, b)) ? a : b;
}
-QuicPacketNumberLength ReadSequenceNumberLength(uint8_t flags) {
- switch (flags & PACKET_FLAGS_8BYTE_PACKET) {
- case PACKET_FLAGS_8BYTE_PACKET:
- return PACKET_6BYTE_PACKET_NUMBER;
- case PACKET_FLAGS_4BYTE_PACKET:
- return PACKET_4BYTE_PACKET_NUMBER;
- case PACKET_FLAGS_2BYTE_PACKET:
- return PACKET_2BYTE_PACKET_NUMBER;
- case PACKET_FLAGS_1BYTE_PACKET:
- return PACKET_1BYTE_PACKET_NUMBER;
- default:
- QUIC_BUG(quic_bug_10850_1) << "Unreachable case statement.";
- return PACKET_6BYTE_PACKET_NUMBER;
- }
-}
-
QuicPacketNumberLength ReadAckPacketNumberLength(uint8_t flags) {
switch (flags & PACKET_FLAGS_8BYTE_PACKET) {
case PACKET_FLAGS_8BYTE_PACKET:
@@ -471,11 +450,8 @@
}
// static
-size_t QuicFramer::GetMessageFrameSize(QuicTransportVersion version,
- bool last_frame_in_packet,
+size_t QuicFramer::GetMessageFrameSize(bool last_frame_in_packet,
QuicByteCount length) {
- QUIC_BUG_IF(quic_bug_12975_1, !VersionSupportsMessageFrames(version))
- << "Try to serialize MESSAGE frame in " << version;
return kQuicFrameTypeSize +
(last_frame_in_packet ? 0 : QuicDataWriter::GetVarInt62Len(length)) +
length;
@@ -890,13 +866,13 @@
const QuicFrames& frames, char* buffer,
size_t packet_length,
EncryptionLevel level) {
- QUIC_BUG_IF(quic_bug_12975_2,
- header.version_flag && version().HasIetfInvariantHeader() &&
- header.long_packet_type == RETRY && !frames.empty())
+ QUIC_BUG_IF(quic_bug_12975_2, header.version_flag &&
+ header.long_packet_type == RETRY &&
+ !frames.empty())
<< "IETF RETRY packets cannot contain frames " << header;
QuicDataWriter writer(packet_length, buffer);
size_t length_field_offset = 0;
- if (!AppendPacketHeader(header, &writer, &length_field_offset)) {
+ if (!AppendIetfPacketHeader(header, &writer, &length_field_offset)) {
QUIC_BUG(quic_bug_10850_16) << "AppendPacketHeader failed";
return 0;
}
@@ -944,13 +920,6 @@
return 0;
}
break;
- case STOP_WAITING_FRAME:
- if (!AppendStopWaitingFrame(header, frame.stop_waiting_frame,
- &writer)) {
- QUIC_BUG(quic_bug_10850_21) << "AppendStopWaitingFrame failed";
- return 0;
- }
- break;
case MTU_DISCOVERY_FRAME:
// MTU discovery frames are serialized as ping frames.
ABSL_FALLTHROUGH_INTENDED;
@@ -1481,16 +1450,12 @@
bool QuicFramer::ProcessPacketInternal(const QuicEncryptedPacket& packet) {
QuicDataReader reader(packet.data(), packet.length());
-
- const bool packet_has_ietf_packet_header = version_.HasIetfInvariantHeader();
- if (packet_has_ietf_packet_header) {
- QUIC_DVLOG(1) << ENDPOINT << "Processing IETF QUIC packet.";
- }
+ QUIC_DVLOG(1) << ENDPOINT << "Processing IETF QUIC packet.";
visitor_->OnPacket();
QuicPacketHeader header;
- if (!ProcessPublicHeader(&reader, packet_has_ietf_packet_header, &header)) {
+ if (!ProcessIetfPacketHeader(&reader, &header)) {
QUICHE_DCHECK_NE("", detailed_error_);
QUIC_DVLOG(1) << ENDPOINT << "Unable to process public header. Error: "
<< detailed_error_;
@@ -1504,7 +1469,7 @@
return true;
}
- if (IsVersionNegotiation(header, packet_has_ietf_packet_header)) {
+ if (IsVersionNegotiation(header)) {
if (perspective_ == Perspective::IS_CLIENT) {
QUIC_DVLOG(1) << "Client received version negotiation packet";
return ProcessVersionNegotiationPacket(&reader, header);
@@ -1535,28 +1500,16 @@
bool rv;
if (header.long_packet_type == RETRY) {
rv = ProcessRetryPacket(&reader, header);
- } else if (header.reset_flag) {
- rv = ProcessPublicResetPacket(&reader, header);
} else if (packet.length() <= kMaxIncomingPacketSize) {
// The optimized decryption algorithm implementations run faster when
// operating on aligned memory.
ABSL_CACHELINE_ALIGNED char buffer[kMaxIncomingPacketSize];
- if (packet_has_ietf_packet_header) {
- rv = ProcessIetfDataPacket(&reader, &header, packet, buffer,
- ABSL_ARRAYSIZE(buffer));
- } else {
- rv = ProcessDataPacket(&reader, &header, packet, buffer,
- ABSL_ARRAYSIZE(buffer));
- }
+ rv = ProcessIetfDataPacket(&reader, &header, packet, buffer,
+ ABSL_ARRAYSIZE(buffer));
} else {
std::unique_ptr<char[]> large_buffer(new char[packet.length()]);
- if (packet_has_ietf_packet_header) {
- rv = ProcessIetfDataPacket(&reader, &header, packet, large_buffer.get(),
- packet.length());
- } else {
- rv = ProcessDataPacket(&reader, &header, packet, large_buffer.get(),
- packet.length());
- }
+ rv = ProcessIetfDataPacket(&reader, &header, packet, large_buffer.get(),
+ packet.length());
QUIC_BUG_IF(quic_bug_10850_53, rv)
<< "QUIC should never successfully process packets larger"
<< "than kMaxIncomingPacketSize. packet size:" << packet.length();
@@ -1969,130 +1922,6 @@
return true;
}
-bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader,
- QuicPacketHeader* header,
- const QuicEncryptedPacket& packet,
- char* decrypted_buffer,
- size_t buffer_length) {
- if (!ProcessUnauthenticatedHeader(encrypted_reader, header)) {
- QUICHE_DCHECK_NE("", detailed_error_);
- QUIC_DVLOG(1)
- << ENDPOINT
- << "Unable to process packet header. Stopping parsing. Error: "
- << detailed_error_;
- RecordDroppedPacketReason(DroppedPacketReason::INVALID_PACKET_NUMBER);
- return false;
- }
-
- absl::string_view encrypted = encrypted_reader->ReadRemainingPayload();
- absl::string_view associated_data = GetAssociatedDataFromEncryptedPacket(
- version_.transport_version, packet,
- GetIncludedDestinationConnectionIdLength(*header),
- GetIncludedSourceConnectionIdLength(*header), header->version_flag,
- header->nonce != nullptr, header->packet_number_length,
- header->retry_token_length_length, header->retry_token.length(),
- header->length_length);
-
- size_t decrypted_length = 0;
- EncryptionLevel decrypted_level;
- if (!DecryptPayload(packet.length(), encrypted, associated_data, *header,
- decrypted_buffer, buffer_length, &decrypted_length,
- &decrypted_level)) {
- const EncryptionLevel decryption_level = decrypter_level_;
- // This version uses trial decryption so we always report to our visitor
- // that we are not certain we have the correct decryption key.
- const bool has_decryption_key = false;
- visitor_->OnUndecryptablePacket(
- QuicEncryptedPacket(encrypted_reader->FullPayload()), decryption_level,
- has_decryption_key);
- RecordDroppedPacketReason(DroppedPacketReason::DECRYPTION_FAILURE);
- set_detailed_error(absl::StrCat("Unable to decrypt ",
- EncryptionLevelToString(decryption_level),
- " payload."));
- return RaiseError(QUIC_DECRYPTION_FAILURE);
- }
-
- QuicDataReader reader(decrypted_buffer, decrypted_length);
-
- // Update the largest packet number after we have decrypted the packet
- // so we are confident is not attacker controlled.
- if (supports_multiple_packet_number_spaces_) {
- largest_decrypted_packet_numbers_[QuicUtils::GetPacketNumberSpace(
- decrypted_level)]
- .UpdateMax(header->packet_number);
- } else {
- largest_packet_number_.UpdateMax(header->packet_number);
- }
-
- if (!visitor_->OnPacketHeader(*header)) {
- // The visitor suppresses further processing of the packet.
- return true;
- }
-
- if (packet.length() > kMaxIncomingPacketSize) {
- set_detailed_error("Packet too large.");
- return RaiseError(QUIC_PACKET_TOO_LARGE);
- }
-
- // Handle the payload.
- if (!ProcessFrameData(&reader, *header)) {
- QUICHE_DCHECK_NE(QUIC_NO_ERROR,
- error_); // ProcessFrameData sets the error.
- QUICHE_DCHECK_NE("", detailed_error_);
- QUIC_DLOG(WARNING) << ENDPOINT << "Unable to process frame data. Error: "
- << detailed_error_;
- return false;
- }
-
- visitor_->OnPacketComplete();
- return true;
-}
-
-bool QuicFramer::ProcessPublicResetPacket(QuicDataReader* reader,
- const QuicPacketHeader& header) {
- QuicPublicResetPacket packet(
- GetServerConnectionIdAsRecipient(header, perspective_));
-
- std::unique_ptr<CryptoHandshakeMessage> reset(
- CryptoFramer::ParseMessage(reader->ReadRemainingPayload()));
- if (!reset) {
- set_detailed_error("Unable to read reset message.");
- RecordDroppedPacketReason(DroppedPacketReason::INVALID_PUBLIC_RESET_PACKET);
- return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET);
- }
- if (reset->tag() != kPRST) {
- set_detailed_error("Incorrect message tag.");
- RecordDroppedPacketReason(DroppedPacketReason::INVALID_PUBLIC_RESET_PACKET);
- return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET);
- }
-
- if (reset->GetUint64(kRNON, &packet.nonce_proof) != QUIC_NO_ERROR) {
- set_detailed_error("Unable to read nonce proof.");
- RecordDroppedPacketReason(DroppedPacketReason::INVALID_PUBLIC_RESET_PACKET);
- return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET);
- }
- // TODO(satyamshekhar): validate nonce to protect against DoS.
-
- absl::string_view address;
- if (reset->GetStringPiece(kCADR, &address)) {
- QuicSocketAddressCoder address_coder;
- if (address_coder.Decode(address.data(), address.length())) {
- packet.client_address =
- QuicSocketAddress(address_coder.ip(), address_coder.port());
- }
- }
-
- absl::string_view endpoint_id;
- if (perspective_ == Perspective::IS_CLIENT &&
- reset->GetStringPiece(kEPID, &endpoint_id)) {
- packet.endpoint_id = std::string(endpoint_id);
- packet.endpoint_id += '\0';
- }
-
- visitor_->OnPublicResetPacket(packet);
- return true;
-}
-
bool QuicFramer::IsIetfStatelessResetPacket(
const QuicPacketHeader& header) const {
QUIC_BUG_IF(quic_bug_12975_3, header.has_possible_stateless_reset_token &&
@@ -2144,89 +1973,6 @@
return ENCRYPTION_ZERO_RTT;
}
-bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header,
- QuicDataWriter* writer,
- size_t* length_field_offset) {
- if (version().HasIetfInvariantHeader()) {
- return AppendIetfPacketHeader(header, writer, length_field_offset);
- }
- QUIC_DVLOG(1) << ENDPOINT << "Appending header: " << header;
- uint8_t public_flags = 0;
- if (header.reset_flag) {
- public_flags |= PACKET_PUBLIC_FLAGS_RST;
- }
- if (header.version_flag) {
- public_flags |= PACKET_PUBLIC_FLAGS_VERSION;
- }
-
- public_flags |= GetPacketNumberFlags(header.packet_number_length)
- << kPublicHeaderSequenceNumberShift;
-
- if (header.nonce != nullptr) {
- QUICHE_DCHECK_EQ(Perspective::IS_SERVER, perspective_);
- public_flags |= PACKET_PUBLIC_FLAGS_NONCE;
- }
-
- QuicConnectionId server_connection_id =
- GetServerConnectionIdAsSender(header, perspective_);
- QuicConnectionIdIncluded server_connection_id_included =
- GetServerConnectionIdIncludedAsSender(header, perspective_);
- QUICHE_DCHECK_EQ(CONNECTION_ID_ABSENT,
- GetClientConnectionIdIncludedAsSender(header, perspective_))
- << ENDPOINT << ParsedQuicVersionToString(version_)
- << " invalid header: " << header;
-
- switch (server_connection_id_included) {
- case CONNECTION_ID_ABSENT:
- if (!writer->WriteUInt8(public_flags |
- PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID)) {
- return false;
- }
- break;
- case CONNECTION_ID_PRESENT:
- QUIC_BUG_IF(quic_bug_12975_5,
- !QuicUtils::IsConnectionIdValidForVersion(
- server_connection_id, transport_version()))
- << "AppendPacketHeader: attempted to use connection ID "
- << server_connection_id << " which is invalid with version "
- << version();
-
- public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID;
- if (perspective_ == Perspective::IS_CLIENT) {
- public_flags |= PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD;
- }
- if (!writer->WriteUInt8(public_flags) ||
- !writer->WriteConnectionId(server_connection_id)) {
- return false;
- }
- break;
- }
- last_serialized_server_connection_id_ = server_connection_id;
-
- if (header.version_flag) {
- QUICHE_DCHECK_EQ(Perspective::IS_CLIENT, perspective_);
- QuicVersionLabel version_label = CreateQuicVersionLabel(version_);
- if (!writer->WriteUInt32(version_label)) {
- return false;
- }
-
- QUIC_DVLOG(1) << ENDPOINT << "label = '"
- << QuicVersionLabelToString(version_label) << "'";
- }
-
- if (header.nonce != nullptr &&
- !writer->WriteBytes(header.nonce, kDiversificationNonceSize)) {
- return false;
- }
-
- if (!AppendPacketNumber(header.packet_number_length, header.packet_number,
- writer)) {
- return false;
- }
-
- return true;
-}
-
bool QuicFramer::AppendIetfHeaderTypeByte(const QuicPacketHeader& header,
QuicDataWriter* writer) {
uint8_t type = 0;
@@ -2388,97 +2134,6 @@
next_epoch + packet_number));
}
-bool QuicFramer::ProcessPublicHeader(QuicDataReader* reader,
- bool packet_has_ietf_packet_header,
- QuicPacketHeader* header) {
- if (packet_has_ietf_packet_header) {
- return ProcessIetfPacketHeader(reader, header);
- }
- uint8_t public_flags;
- if (!reader->ReadBytes(&public_flags, 1)) {
- set_detailed_error("Unable to read public flags.");
- return false;
- }
-
- header->reset_flag = (public_flags & PACKET_PUBLIC_FLAGS_RST) != 0;
- header->version_flag = (public_flags & PACKET_PUBLIC_FLAGS_VERSION) != 0;
-
- if (validate_flags_ && !header->version_flag &&
- public_flags > PACKET_PUBLIC_FLAGS_MAX) {
- set_detailed_error("Illegal public flags value.");
- return false;
- }
-
- if (header->reset_flag && header->version_flag) {
- set_detailed_error("Got version flag in reset packet");
- return false;
- }
-
- QuicConnectionId* header_connection_id = &header->destination_connection_id;
- QuicConnectionIdIncluded* header_connection_id_included =
- &header->destination_connection_id_included;
- if (perspective_ == Perspective::IS_CLIENT) {
- header_connection_id = &header->source_connection_id;
- header_connection_id_included = &header->source_connection_id_included;
- }
- switch (public_flags & PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID) {
- case PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID:
- if (!reader->ReadConnectionId(header_connection_id,
- kQuicDefaultConnectionIdLength)) {
- set_detailed_error("Unable to read ConnectionId.");
- return false;
- }
- *header_connection_id_included = CONNECTION_ID_PRESENT;
- break;
- case PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID:
- *header_connection_id_included = CONNECTION_ID_ABSENT;
- *header_connection_id = last_serialized_server_connection_id_;
- break;
- }
-
- header->packet_number_length = ReadSequenceNumberLength(
- public_flags >> kPublicHeaderSequenceNumberShift);
-
- // Read the version only if the packet is from the client.
- // version flag from the server means version negotiation packet.
- if (header->version_flag && perspective_ == Perspective::IS_SERVER) {
- QuicVersionLabel version_label;
- if (!ProcessVersionLabel(reader, &version_label)) {
- set_detailed_error("Unable to read protocol version.");
- return false;
- }
- // If the version from the new packet is the same as the version of this
- // framer, then the public flags should be set to something we understand.
- // If not, this raises an error.
- ParsedQuicVersion version = ParseQuicVersionLabel(version_label);
- if (version == version_ && public_flags > PACKET_PUBLIC_FLAGS_MAX) {
- set_detailed_error("Illegal public flags value.");
- return false;
- }
- header->version = version;
- }
-
- // A nonce should only be present in packets from the server to the client,
- // which are neither version negotiation nor public reset packets.
- if (public_flags & PACKET_PUBLIC_FLAGS_NONCE &&
- !(public_flags & PACKET_PUBLIC_FLAGS_VERSION) &&
- !(public_flags & PACKET_PUBLIC_FLAGS_RST) &&
- // The nonce flag from a client is ignored and is assumed to be an older
- // client indicating an eight-byte connection ID.
- perspective_ == Perspective::IS_CLIENT) {
- if (!reader->ReadBytes(reinterpret_cast<uint8_t*>(last_nonce_.data()),
- last_nonce_.size())) {
- set_detailed_error("Unable to read nonce.");
- return false;
- }
- header->nonce = &last_nonce_;
- } else {
- header->nonce = nullptr;
- }
-
- return true;
-}
-
// static
QuicPacketNumberLength QuicFramer::GetMinPacketNumberLength(
QuicPacketNumber packet_number) {
@@ -2547,57 +2202,6 @@
return new_ack_info;
}
-bool QuicFramer::ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
- QuicPacketHeader* header) {
- QuicPacketNumber base_packet_number;
- if (supports_multiple_packet_number_spaces_) {
- PacketNumberSpace pn_space = GetPacketNumberSpace(*header);
- if (pn_space == NUM_PACKET_NUMBER_SPACES) {
- set_detailed_error("Unable to determine packet number space.");
- return RaiseError(QUIC_INVALID_PACKET_HEADER);
- }
- base_packet_number = largest_decrypted_packet_numbers_[pn_space];
- } else {
- base_packet_number = largest_packet_number_;
- }
- uint64_t full_packet_number;
- if (!ProcessAndCalculatePacketNumber(
- encrypted_reader, header->packet_number_length, base_packet_number,
- &full_packet_number)) {
- set_detailed_error("Unable to read packet number.");
- return RaiseError(QUIC_INVALID_PACKET_HEADER);
- }
-
- if (!IsValidFullPacketNumber(full_packet_number, version())) {
- set_detailed_error("packet numbers cannot be 0.");
- return RaiseError(QUIC_INVALID_PACKET_HEADER);
- }
- header->packet_number = QuicPacketNumber(full_packet_number);
-
- if (!visitor_->OnUnauthenticatedHeader(*header)) {
- set_detailed_error(
- "Visitor asked to stop processing of unauthenticated header.");
- return false;
- }
- // The function we are in is called because the framer believes that it is
- // processing a packet that uses the non-IETF (i.e. Google QUIC) packet header
- // type. Usually, the framer makes that decision based on the framer's
- // version, but when the framer is used with Perspective::IS_SERVER, then
- // before version negotiation is complete (specifically, before
- // InferPacketHeaderTypeFromVersion is called), this decision is made based on
- // the type byte of the packet.
- //
- // If the framer's version KnowsWhichDecrypterToUse, then that version expects
- // to use the IETF packet header type. If that's the case and we're in this
- // function, then the packet received is invalid: the framer was expecting an
- // IETF packet header and didn't get one.
- if (version().KnowsWhichDecrypterToUse()) {
- set_detailed_error("Invalid public header type for expected version.");
- return RaiseError(QUIC_INVALID_PACKET_HEADER);
- }
- return true;
-}
-
bool QuicFramer::ProcessIetfHeaderTypeByte(QuicDataReader* reader,
QuicPacketHeader* header) {
uint8_t type;
@@ -2783,13 +2387,12 @@
bool has_length_prefix;
std::string detailed_error;
QuicErrorCode parse_result = QuicFramer::ParsePublicHeader(
- reader, expected_destination_connection_id_length,
- version_.HasIetfInvariantHeader(), &header->type_byte, &header->form,
- &header->version_flag, &has_length_prefix, &version_label,
- &header->version, &header->destination_connection_id,
- &header->source_connection_id, &header->long_packet_type,
- &header->retry_token_length_length, &header->retry_token,
- &detailed_error);
+ reader, expected_destination_connection_id_length, /*ietf_format=*/true,
+ &header->type_byte, &header->form, &header->version_flag,
+ &has_length_prefix, &version_label, &header->version,
+ &header->destination_connection_id, &header->source_connection_id,
+ &header->long_packet_type, &header->retry_token_length_length,
+ &header->retry_token, &detailed_error);
if (parse_result != QUIC_NO_ERROR) {
set_detailed_error(detailed_error);
return false;
@@ -2920,10 +2523,7 @@
set_detailed_error("Unable to read frame type.");
return RaiseError(QUIC_INVALID_FRAME_DATA);
}
- const uint8_t special_mask = version_.HasIetfInvariantHeader()
- ? kQuicFrameTypeSpecialMask
- : kQuicFrameTypeBrokenMask;
- if (frame_type & special_mask) {
+ if (frame_type & kQuicFrameTypeSpecialMask) {
// Stream Frame
if (frame_type & kQuicFrameTypeStreamMask) {
QuicStreamFrame frame;
@@ -5182,8 +4782,7 @@
// MTU discovery frames are serialized as ping frames.
return kQuicFrameTypeSize;
case MESSAGE_FRAME:
- return GetMessageFrameSize(version_.transport_version,
- last_frame_in_packet,
+ return GetMessageFrameSize(last_frame_in_packet,
frame.message_frame->message_length);
case PADDING_FRAME:
QUICHE_DCHECK(false);
@@ -5991,39 +5590,6 @@
return FrameAckTimestampRanges(frame, timestamp_ranges, writer) > 0;
}
-bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header,
- const QuicStopWaitingFrame& frame,
- QuicDataWriter* writer) {
- QUICHE_DCHECK(!version_.HasIetfInvariantHeader());
- QUICHE_DCHECK(frame.least_unacked.IsInitialized());
- QUICHE_DCHECK_GE(header.packet_number, frame.least_unacked);
- const uint64_t least_unacked_delta =
- header.packet_number - frame.least_unacked;
- const uint64_t length_shift = header.packet_number_length * 8;
-
- if (least_unacked_delta >> length_shift > 0) {
- QUIC_BUG(quic_bug_10850_86)
- << "packet_number_length " << header.packet_number_length
- << " is too small for least_unacked_delta: " << least_unacked_delta
- << " packet_number:" << header.packet_number
- << " least_unacked:" << frame.least_unacked
- << " version:" << version_.transport_version;
- return false;
- }
- if (least_unacked_delta == 0) {
- return writer->WriteBytesToUInt64(header.packet_number_length,
- least_unacked_delta);
- }
- if (!AppendPacketNumber(header.packet_number_length,
- QuicPacketNumber(least_unacked_delta), writer)) {
- QUIC_BUG(quic_bug_10850_87)
- << " seq failed: " << header.packet_number_length;
- return false;
- }
-
- return true;
-}
-
bool QuicFramer::AppendIetfAckFrameAndTypeByte(const QuicAckFrame& frame,
QuicDataWriter* writer) {
uint8_t type = IETF_ACK;
@@ -6279,16 +5845,9 @@
return false;
}
-bool QuicFramer::IsVersionNegotiation(
- const QuicPacketHeader& header, bool packet_has_ietf_packet_header) const {
- if (!packet_has_ietf_packet_header &&
- perspective_ == Perspective::IS_CLIENT) {
- return header.version_flag;
- }
- if (header.form == IETF_QUIC_SHORT_HEADER_PACKET) {
- return false;
- }
- return header.long_packet_type == VERSION_NEGOTIATION;
+bool QuicFramer::IsVersionNegotiation(const QuicPacketHeader& header) const {
+ return header.form == IETF_QUIC_LONG_HEADER_PACKET &&
+ header.long_packet_type == VERSION_NEGOTIATION;
}
bool QuicFramer::AppendIetfConnectionCloseFrame(
diff --git a/quiche/quic/core/quic_framer.h b/quiche/quic/core/quic_framer.h
index b93667e..aaf7733 100644
--- a/quiche/quic/core/quic_framer.h
+++ b/quiche/quic/core/quic_framer.h
@@ -85,10 +85,6 @@
// has been validated or processed.
virtual void OnPacket() = 0;
- // Called when a public reset packet has been parsed but has not yet
- // been validated.
- virtual void OnPublicResetPacket(const QuicPublicResetPacket& packet) = 0;
-
// Called only when |perspective_| is IS_CLIENT and a version negotiation
// packet has been parsed.
virtual void OnVersionNegotiationPacket(
@@ -350,8 +346,7 @@
// data length provided, but not counting the size of the data payload.
static size_t GetMinCryptoFrameSize(QuicStreamOffset offset,
QuicPacketLength data_length);
- static size_t GetMessageFrameSize(QuicTransportVersion version,
- bool last_frame_in_packet,
+ static size_t GetMessageFrameSize(bool last_frame_in_packet,
QuicByteCount length);
// Size in bytes of all ack frame fields without the missing packets or ack
// blocks.
@@ -527,8 +522,6 @@
// If header.version_flag is set, the version in the
// packet will be set -- but it will be set from version_ not
// header.versions.
- bool AppendPacketHeader(const QuicPacketHeader& header,
- QuicDataWriter* writer, size_t* length_field_offset);
bool AppendIetfHeaderTypeByte(const QuicPacketHeader& header,
QuicDataWriter* writer);
bool AppendIetfPacketHeader(const QuicPacketHeader& header,
@@ -795,18 +788,11 @@
uint64_t* full_packet_number,
std::vector<char>* associated_data);
- bool ProcessDataPacket(QuicDataReader* reader, QuicPacketHeader* header,
- const QuicEncryptedPacket& packet,
- char* decrypted_buffer, size_t buffer_length);
-
bool ProcessIetfDataPacket(QuicDataReader* encrypted_reader,
QuicPacketHeader* header,
const QuicEncryptedPacket& packet,
char* decrypted_buffer, size_t buffer_length);
- bool ProcessPublicResetPacket(QuicDataReader* reader,
- const QuicPacketHeader& header);
-
bool ProcessVersionNegotiationPacket(QuicDataReader* reader,
const QuicPacketHeader& header);
@@ -820,15 +806,6 @@
bool MaybeProcessIetfLength(QuicDataReader* encrypted_reader,
QuicPacketHeader* header);
- bool ProcessPublicHeader(QuicDataReader* reader,
- bool packet_has_ietf_packet_header,
- QuicPacketHeader* header);
-
- // Processes the unauthenticated portion of the header into |header| from
- // the current QuicDataReader. Returns true on success, false on failure.
- bool ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader,
- QuicPacketHeader* header);
-
// Processes the version label in the packet header.
static bool ProcessVersionLabel(QuicDataReader* reader,
QuicVersionLabel* version_label);
@@ -1063,8 +1040,7 @@
bool RaiseError(QuicErrorCode error);
// Returns true if |header| indicates a version negotiation packet.
- bool IsVersionNegotiation(const QuicPacketHeader& header,
- bool packet_has_ietf_packet_header) const;
+ bool IsVersionNegotiation(const QuicPacketHeader& header) const;
// Calculates and returns type byte of stream frame.
uint8_t GetStreamFrameTypeByte(const QuicStreamFrame& frame,
diff --git a/quiche/quic/core/quic_framer_test.cc b/quiche/quic/core/quic_framer_test.cc
index 56f0fbc..48d4001 100644
--- a/quiche/quic/core/quic_framer_test.cc
+++ b/quiche/quic/core/quic_framer_test.cc
@@ -244,11 +244,6 @@
void OnPacket() override {}
- void OnPublicResetPacket(const QuicPublicResetPacket& packet) override {
- public_reset_packet_ = std::make_unique<QuicPublicResetPacket>((packet));
- EXPECT_EQ(0u, framer_->current_received_frame_type());
- }
-
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& packet) override {
version_negotiation_packet_ =
@@ -639,7 +634,6 @@
bool accept_public_header_;
std::unique_ptr<QuicPacketHeader> header_;
- std::unique_ptr<QuicPublicResetPacket> public_reset_packet_;
std::unique_ptr<QuicIetfStatelessResetPacket> stateless_reset_packet_;
std::unique_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
std::unique_ptr<QuicConnectionId> retry_original_connection_id_;
@@ -1062,16 +1056,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[kMaxIncomingPacketSize + 1] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x78, 0x56, 0x34, 0x12,
- // private flags
- 0x00,
- };
- unsigned char packet46[kMaxIncomingPacketSize + 1] = {
// type (short header 4 byte packet number)
0x43,
// connection_id
@@ -1080,12 +1064,6 @@
0x78, 0x56, 0x34, 0x12,
};
// clang-format on
- unsigned char* p = packet;
- size_t p_size = ABSL_ARRAYSIZE(packet);
- if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
- }
const size_t header_size = GetPacketHeaderSize(
framer_.transport_version(), kPacket8ByteConnectionId,
@@ -1093,9 +1071,9 @@
PACKET_4BYTE_PACKET_NUMBER, quiche::VARIABLE_LENGTH_INTEGER_LENGTH_0, 0,
quiche::VARIABLE_LENGTH_INTEGER_LENGTH_0);
- memset(p + header_size, 0, kMaxIncomingPacketSize - header_size);
+ memset(packet + header_size, 0, kMaxIncomingPacketSize - header_size);
- QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
+ QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
EXPECT_FALSE(framer_.ProcessPacket(encrypted));
ASSERT_TRUE(visitor_.header_.get());
@@ -1107,68 +1085,9 @@
EXPECT_EQ("Packet too large.", framer_.detailed_error());
}
-TEST_P(QuicFramerTest, PacketHeader) {
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
- // clang-format off
- PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"Unable to read public flags.",
- {0x28}},
- // connection_id
- {"Unable to read ConnectionId.",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"Unable to read packet number.",
- {0x12, 0x34, 0x56, 0x78}},
- };
- // clang-format on
-
- PacketFragments& fragments = packet;
-
- std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
-
- EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
- EXPECT_THAT(framer_.error(), IsError(QUIC_MISSING_PAYLOAD));
- ASSERT_TRUE(visitor_.header_.get());
- EXPECT_EQ(FramerTestConnectionId(),
- visitor_.header_->destination_connection_id);
- EXPECT_FALSE(visitor_.header_->reset_flag);
- EXPECT_FALSE(visitor_.header_->version_flag);
- EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
-
- CheckFramingBoundaries(fragments, QUIC_INVALID_PACKET_HEADER);
-
- PacketHeaderFormat format;
- QuicLongHeaderType long_packet_type = INVALID_PACKET_TYPE;
- bool version_flag;
- QuicConnectionId destination_connection_id, source_connection_id;
- QuicVersionLabel version_label;
- std::string detailed_error;
- bool use_length_prefix;
- absl::optional<absl::string_view> retry_token;
- ParsedQuicVersion parsed_version = UnsupportedQuicVersion();
- const QuicErrorCode error_code = QuicFramer::ParsePublicHeaderDispatcher(
- *encrypted, kQuicDefaultConnectionIdLength, &format, &long_packet_type,
- &version_flag, &use_length_prefix, &version_label, &parsed_version,
- &destination_connection_id, &source_connection_id, &retry_token,
- &detailed_error);
- EXPECT_FALSE(retry_token.has_value());
- EXPECT_FALSE(use_length_prefix);
- EXPECT_THAT(error_code, IsQuicNoError());
- EXPECT_EQ(GOOGLE_QUIC_PACKET, format);
- EXPECT_FALSE(version_flag);
- EXPECT_EQ(kQuicDefaultConnectionIdLength, destination_connection_id.length());
- EXPECT_EQ(FramerTestConnectionId(), destination_connection_id);
- EXPECT_EQ(EmptyQuicConnectionId(), source_connection_id);
-}
-
TEST_P(QuicFramerTest, LongPacketHeader) {
// clang-format off
- PacketFragments packet46 = {
+ PacketFragments packet = {
// type (long header with packet type ZERO_RTT)
{"Unable to read first byte.",
{0xD3}},
@@ -1187,14 +1106,13 @@
};
// clang-format on
- if (!framer_.version().HasIetfInvariantHeader() ||
- QuicVersionHasLongHeaderLengths(framer_.transport_version())) {
+ if (QuicVersionHasLongHeaderLengths(framer_.transport_version())) {
return;
}
SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(packet46));
+ AssemblePacketFromFragments(packet));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsError(QUIC_MISSING_PAYLOAD));
@@ -1205,7 +1123,7 @@
EXPECT_TRUE(visitor_.header_->version_flag);
EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
- CheckFramingBoundaries(packet46, QUIC_INVALID_PACKET_HEADER);
+ CheckFramingBoundaries(packet, QUIC_INVALID_PACKET_HEADER);
PacketHeaderFormat format;
QuicLongHeaderType long_packet_type = INVALID_PACKET_TYPE;
@@ -1233,10 +1151,6 @@
}
TEST_P(QuicFramerTest, LongPacketHeaderWithBothConnectionIds) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- // This test requires an IETF long header.
- return;
- }
SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
// clang-format off
unsigned char packet[] = {
@@ -1337,19 +1251,6 @@
TEST_P(QuicFramerTest, ParsePublicHeader) {
// clang-format off
unsigned char packet[] = {
- // public flags (version included, 8-byte connection ID,
- // 4-byte packet number)
- 0x29,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // version
- QUIC_VERSION_BYTES,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
- // padding frame
- 0x00,
- };
- unsigned char packet46[] = {
// public flags (long header with packet type HANDSHAKE and
// 4-byte packet number)
0xE3,
@@ -1392,9 +1293,6 @@
ReviseFirstByteByVersion(packet49);
p = packet49;
p_length = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_length = ABSL_ARRAYSIZE(packet46);
}
uint8_t first_byte = 0x33;
@@ -1412,12 +1310,11 @@
QuicDataReader reader(AsChars(p), p_length);
const QuicErrorCode parse_error = QuicFramer::ParsePublicHeader(
- &reader, kQuicDefaultConnectionIdLength,
- /*ietf_format=*/
- framer_.version().HasIetfInvariantHeader(), &first_byte, &format,
- &version_present, &has_length_prefix, &version_label, &parsed_version,
- &destination_connection_id, &source_connection_id, &long_packet_type,
- &retry_token_length_length, &retry_token, &detailed_error);
+ &reader, kQuicDefaultConnectionIdLength, /*ietf_format=*/true,
+ &first_byte, &format, &version_present, &has_length_prefix,
+ &version_label, &parsed_version, &destination_connection_id,
+ &source_connection_id, &long_packet_type, &retry_token_length_length,
+ &retry_token, &detailed_error);
EXPECT_THAT(parse_error, IsQuicNoError());
EXPECT_EQ("", detailed_error);
EXPECT_EQ(p[0], first_byte);
@@ -1431,12 +1328,8 @@
EXPECT_EQ(quiche::VARIABLE_LENGTH_INTEGER_LENGTH_0,
retry_token_length_length);
EXPECT_EQ(absl::string_view(), retry_token);
- if (framer_.version().HasIetfInvariantHeader()) {
- EXPECT_EQ(IETF_QUIC_LONG_HEADER_PACKET, format);
- EXPECT_EQ(HANDSHAKE, long_packet_type);
- } else {
- EXPECT_EQ(GOOGLE_QUIC_PACKET, format);
- }
+ EXPECT_EQ(IETF_QUIC_LONG_HEADER_PACKET, format);
+ EXPECT_EQ(HANDSHAKE, long_packet_type);
}
TEST_P(QuicFramerTest, ParsePublicHeaderProxBadSourceConnectionIdLength) {
@@ -1571,16 +1464,6 @@
// clang-format off
PacketFragments packet = {
- // public flags (0 byte connection_id)
- {"Unable to read public flags.",
- {0x20}},
- // connection_id
- // packet number
- {"Unable to read packet number.",
- {0x12, 0x34, 0x56, 0x78}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"Unable to read first byte.",
{0x43}},
@@ -1602,9 +1485,7 @@
// clang-format on
PacketFragments& fragments =
- framer_.version().HasHeaderProtection()
- ? packet_hp
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ framer_.version().HasHeaderProtection() ? packet_hp : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
@@ -1621,21 +1502,6 @@
SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
// clang-format off
PacketFragments packet = {
- // public flags (0 byte connection_id)
- {"Unable to read public flags.",
- {0x29}},
- // connection_id
- {"Unable to read ConnectionId.",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // version tag
- {"Unable to read protocol version.",
- {QUIC_VERSION_BYTES}},
- // packet number
- {"Unable to read packet number.",
- {0x12, 0x34, 0x56, 0x78}},
- };
-
- PacketFragments packet46 = {
// type (long header with packet type ZERO_RTT_PROTECTED and 4 bytes
// packet number)
{"Unable to read first byte.",
@@ -1682,9 +1548,7 @@
ReviseFirstByteByVersion(packet49);
PacketFragments& fragments =
- framer_.version().HasLongHeaderLengths()
- ? packet49
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ framer_.version().HasLongHeaderLengths() ? packet49 : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
@@ -1706,18 +1570,6 @@
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id and 4 byte packet number)
- {"Unable to read public flags.",
- {0x28}},
- // connection_id
- {"Unable to read ConnectionId.",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"Unable to read packet number.",
- {0x12, 0x34, 0x56, 0x78}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"Unable to read first byte.",
{0x43}},
@@ -1743,9 +1595,7 @@
// clang-format on
PacketFragments& fragments =
- framer_.version().HasHeaderProtection()
- ? packet_hp
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ framer_.version().HasHeaderProtection() ? packet_hp : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
@@ -1766,18 +1616,6 @@
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id and 2 byte packet number)
- {"Unable to read public flags.",
- {0x18}},
- // connection_id
- {"Unable to read ConnectionId.",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"Unable to read packet number.",
- {0x56, 0x78}},
- };
-
- PacketFragments packet46 = {
// type (short header, 2 byte packet number)
{"Unable to read first byte.",
{0x41}},
@@ -1805,9 +1643,7 @@
// clang-format on
PacketFragments& fragments =
- framer_.version().HasHeaderProtection()
- ? packet_hp
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ framer_.version().HasHeaderProtection() ? packet_hp : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
if (framer_.version().HasHeaderProtection()) {
@@ -1834,18 +1670,6 @@
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id and 1 byte packet number)
- {"Unable to read public flags.",
- {0x08}},
- // connection_id
- {"Unable to read ConnectionId.",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"Unable to read packet number.",
- {0x78}},
- };
-
- PacketFragments packet46 = {
// type (8 byte connection_id and 1 byte packet number)
{"Unable to read first byte.",
{0x40}},
@@ -1874,9 +1698,7 @@
// clang-format on
PacketFragments& fragments =
- framer_.version().HasHeaderProtection()
- ? packet_hp
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ framer_.version().HasHeaderProtection() ? packet_hp : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
if (framer_.version().HasHeaderProtection()) {
@@ -1968,24 +1790,6 @@
SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
// clang-format off
unsigned char packet[] = {
- // public flags: includes nonce flag
- 0x2C,
- // 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
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (padding)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[] = {
// type: Long header with packet type ZERO_RTT_PROTECTED and 1 byte packet
// number.
0xD0,
@@ -2045,9 +1849,6 @@
if (framer_.version().HasLongHeaderLengths()) {
p = packet49;
p_size = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -2064,21 +1865,6 @@
TEST_P(QuicFramerTest, LargePublicFlagWithMismatchedVersions) {
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id, version flag and an unknown flag)
- 0x29,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // version tag
- 'Q', '0', '0', '0',
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (padding frame)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[] = {
// type (long header, ZERO_RTT_PROTECTED, 4-byte packet number)
0xD3,
// version tag
@@ -2120,9 +1906,6 @@
if (framer_.version().HasLongHeaderLengths()) {
p = packet49;
p_size = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
EXPECT_TRUE(framer_.ProcessPacket(encrypted));
@@ -2136,33 +1919,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // paddings
- 0x00, 0x00,
- // frame type (stream frame with fin)
- 0xFF,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // offset
- 0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54,
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!',
- // paddings
- 0x00, 0x00,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -2223,9 +1979,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -2251,36 +2004,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (stream frame with fin)
- {"",
- {0xFF}},
- // stream id
- {"Unable to read stream_id.",
- {0x01, 0x02, 0x03, 0x04}},
- // offset
- {"Unable to read offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- {"Unable to read frame data.",
- {
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!'}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -2342,9 +2065,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2442,17 +2164,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
- // padding frame
- 0x00,
- };
-
- unsigned char packet46[] = {
// type (long header, ZERO_RTT_PROTECTED, 4-byte packet number)
0xD3,
// version tag
@@ -2492,9 +2203,6 @@
if (framer_.version().HasLongHeaderLengths()) {
p = packet49;
p_length = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_length = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_length, false);
EXPECT_FALSE(framer_.ProcessPacket(encrypted));
@@ -2502,108 +2210,17 @@
EXPECT_THAT(framer_.error(), IsError(QUIC_DECRYPTION_FAILURE));
EXPECT_EQ("Unable to decrypt ENCRYPTION_ZERO_RTT header protection.",
framer_.detailed_error());
- } else if (framer_.version().HasIetfInvariantHeader()) {
+ } else {
// Cannot read diversification nonce.
EXPECT_THAT(framer_.error(), IsError(QUIC_INVALID_PACKET_HEADER));
EXPECT_EQ("Unable to read nonce.", framer_.detailed_error());
- } else {
- EXPECT_THAT(framer_.error(), IsError(QUIC_DECRYPTION_FAILURE));
}
}
-TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) {
- if (framer_.version().HasIetfInvariantHeader()) {
- // This test is nonsensical for IETF Quic.
- return;
- }
- // clang-format off
- PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (stream frame with fin)
- {"",
- {0xFE}},
- // stream id
- {"Unable to read stream_id.",
- {0x02, 0x03, 0x04}},
- // offset
- {"Unable to read offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- {"Unable to read frame data.",
- {
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!'}},
- };
- // clang-format on
-
- PacketFragments& fragments = packet;
- std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
- EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
-
- EXPECT_THAT(framer_.error(), IsQuicNoError());
- ASSERT_TRUE(visitor_.header_.get());
- EXPECT_TRUE(CheckDecryption(
- *encrypted, !kIncludeVersion, !kIncludeDiversificationNonce,
- kPacket8ByteConnectionId, kPacket0ByteConnectionId));
-
- ASSERT_EQ(1u, visitor_.stream_frames_.size());
- EXPECT_EQ(0u, visitor_.ack_frames_.size());
- // Stream ID should be the last 3 bytes of kStreamId.
- EXPECT_EQ(0x00FFFFFF & 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());
-
- CheckFramingBoundaries(fragments, QUIC_INVALID_STREAM_DATA);
-}
-
TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) {
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (stream frame with fin)
- {"",
- {0xFD}},
- // stream id
- {"Unable to read stream_id.",
- {0x03, 0x04}},
- // offset
- {"Unable to read offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- {"Unable to read frame data.",
- {
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!'}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -2665,9 +2282,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2693,36 +2309,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (stream frame with fin)
- {"",
- {0xFC}},
- // stream id
- {"Unable to read stream_id.",
- {0x04}},
- // offset
- {"Unable to read offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- {"Unable to read frame data.",
- {
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!'}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -2784,9 +2370,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -2809,48 +2394,9 @@
}
TEST_P(QuicFramerTest, StreamFrameWithVersion) {
- // If IETF frames are in use then we must also have the IETF
- // header invariants.
- if (VersionHasIetfQuicFrames(framer_.transport_version())) {
- QUICHE_DCHECK(framer_.version().HasIetfInvariantHeader());
- }
-
SetDecrypterLevel(ENCRYPTION_ZERO_RTT);
// clang-format off
PacketFragments packet = {
- // public flags (version, 8 byte connection_id)
- {"",
- {0x29}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // version tag
- {"",
- {QUIC_VERSION_BYTES}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (stream frame with fin)
- {"",
- {0xFE}},
- // stream id
- {"Unable to read stream_id.",
- {0x02, 0x03, 0x04}},
- // offset
- {"Unable to read offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- {"Unable to read frame data.",
- {
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!'}},
- };
-
- PacketFragments packet46 = {
// public flags (long header with packet type ZERO_RTT_PROTECTED and
// 4-byte packet number)
{"",
@@ -2986,10 +2532,7 @@
PacketFragments& fragments =
VersionHasIetfQuicFrames(framer_.transport_version())
? packet_ietf
- : (framer_.version().HasLongHeaderLengths()
- ? packet49
- : (framer_.version().HasIetfInvariantHeader() ? packet46
- : packet));
+ : (framer_.version().HasLongHeaderLengths() ? packet49 : packet);
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -3020,29 +2563,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (stream frame with fin)
- 0xFF,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // offset
- 0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54,
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -3066,15 +2586,7 @@
};
// clang-format on
- unsigned char* p = packet;
- if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- }
- QuicEncryptedPacket encrypted(AsChars(p),
- framer_.version().HasIetfInvariantHeader()
- ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet),
- false);
+ QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
EXPECT_TRUE(framer_.ProcessPacket(encrypted));
EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -3092,13 +2604,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- };
-
- unsigned char packet46[] = {
// type (short header, 1 byte packet number)
0x40,
// connection_id
@@ -3108,12 +2613,7 @@
};
// clang-format on
- QuicEncryptedPacket encrypted(
- framer_.version().HasIetfInvariantHeader() ? AsChars(packet46)
- : AsChars(packet),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet),
- false);
+ QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
EXPECT_TRUE(framer_.ProcessPacket(encrypted));
EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -3125,34 +2625,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x2C}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (ack frame)
- // (one ack block, 2 byte largest observed, 2 byte block length)
- {"",
- {0x45}},
- // largest acked
- {"Unable to read largest acked.",
- {0x12, 0x34}},
- // Zero delta time.
- {"Unable to read ack delay time.",
- {0x00, 0x00}},
- // first ack block length.
- {"Unable to read first ack block length.",
- {0x12, 0x34}},
- // num timestamps.
- {"Unable to read num received packets.",
- {0x00}}
- };
-
- PacketFragments packet46 = {
// type (short packet, 4 byte packet number)
{"",
{0x43}},
@@ -3217,9 +2689,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -3246,34 +2717,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x2C}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (ack frame)
- // (one ack block, 2 byte largest observed, 2 byte block length)
- {"",
- {0x45}},
- // largest acked
- {"Unable to read largest acked.",
- {0x12, 0x34}},
- // Zero delta time.
- {"Unable to read ack delay time.",
- {0x00, 0x00}},
- // first ack block length.
- {"Unable to read first ack block length.",
- {0x88, 0x88}},
- // num timestamps.
- {"Underflow with first ack block length 34952 largest acked is 4660.",
- {0x00}}
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -3330,9 +2773,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
@@ -3633,44 +3075,6 @@
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- { 0x2C }},
- // connection_id
- {"",
- { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }},
- // packet number
- {"",
- { 0x12, 0x34, 0x56, 0x78 }},
-
- // frame type (ack frame)
- // (more than one ack block, 2 byte largest observed, 2 byte block length)
- {"",
- { 0x65 }},
- // largest acked
- {"Unable to read largest acked.",
- { 0x12, 0x34 }},
- // Zero delta time.
- {"Unable to read ack delay time.",
- { 0x00, 0x00 }},
- // num ack blocks ranges.
- {"Unable to read num of ack blocks.",
- { 0x01 }},
- // first ack block length.
- {"Unable to read first ack block length.",
- { 0x00, 0x00 }},
- // gap to next block.
- { "First block length is zero.",
- { 0x01 }},
- // ack block length.
- { "First block length is zero.",
- { 0x0e, 0xaf }},
- // Number of timestamps.
- { "First block length is zero.",
- { 0x00 }},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{ 0x43 }},
@@ -3709,11 +3113,8 @@
};
// clang-format on
- PacketFragments& fragments =
- framer_.version().HasIetfInvariantHeader() ? packet46 : packet;
-
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
+ AssemblePacketFromFragments(packet));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsError(QUIC_INVALID_ACK_DATA));
@@ -3726,41 +3127,13 @@
EXPECT_EQ(0u, visitor_.stream_frames_.size());
ASSERT_EQ(1u, visitor_.ack_frames_.size());
- CheckFramingBoundaries(fragments, QUIC_INVALID_ACK_DATA);
+ CheckFramingBoundaries(packet, QUIC_INVALID_ACK_DATA);
}
TEST_P(QuicFramerTest, AckFrameOneAckBlockMaxLength) {
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x2C}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (ack frame)
- // (one ack block, 4 byte largest observed, 2 byte block length)
- {"",
- {0x49}},
- // largest acked
- {"Unable to read largest acked.",
- {0x12, 0x34, 0x56, 0x78}},
- // Zero delta time.
- {"Unable to read ack delay time.",
- {0x00, 0x00}},
- // first ack block length.
- {"Unable to read first ack block length.",
- {0x12, 0x34}},
- // num timestamps.
- {"Unable to read num received packets.",
- {0x00}}
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -3817,9 +3190,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -3845,74 +3217,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- { 0x2C }},
- // connection_id
- {"",
- { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }},
- // packet number
- {"",
- { 0x12, 0x34, 0x56, 0x78 }},
-
- // frame type (ack frame)
- // (more than one ack block, 2 byte largest observed, 2 byte block length)
- {"",
- { 0x65 }},
- // largest acked
- {"Unable to read largest acked.",
- { 0x12, 0x34 }},
- // Zero delta time.
- {"Unable to read ack delay time.",
- { 0x00, 0x00 }},
- // num ack blocks ranges.
- {"Unable to read num of ack blocks.",
- { 0x04 }},
- // first ack block length.
- {"Unable to read first ack block length.",
- { 0x00, 0x01 }},
- // gap to next block.
- { "Unable to read gap to next ack block.",
- { 0x01 }},
- // ack block length.
- { "Unable to ack block length.",
- { 0x0e, 0xaf }},
- // gap to next block.
- { "Unable to read gap to next ack block.",
- { 0xff }},
- // ack block length.
- { "Unable to ack block length.",
- { 0x00, 0x00 }},
- // gap to next block.
- { "Unable to read gap to next ack block.",
- { 0x91 }},
- // ack block length.
- { "Unable to ack block length.",
- { 0x01, 0xea }},
- // gap to next block.
- { "Unable to read gap to next ack block.",
- { 0x05 }},
- // ack block length.
- { "Unable to ack block length.",
- { 0x00, 0x04 }},
- // Number of timestamps.
- { "Unable to read num received packets.",
- { 0x02 }},
- // Delta from largest observed.
- { "Unable to read sequence delta in received packets.",
- { 0x01 }},
- // Delta time.
- { "Unable to read time delta in received packets.",
- { 0x76, 0x54, 0x32, 0x10 }},
- // Delta from largest observed.
- { "Unable to read sequence delta in received packets.",
- { 0x02 }},
- // Delta time.
- { "Unable to read incremental time delta in received packets.",
- { 0x32, 0x10 }},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{ 0x43 }},
@@ -4050,9 +3354,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
@@ -4403,31 +3706,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- // (no ack blocks, 1 byte largest observed, 1 byte block length)
- 0x40,
- // largest acked
- 0x01,
- // Zero delta time.
- 0x00, 0x00,
- // first ack block length.
- 0x01,
- // num timestamps.
- 0x01,
- // Delta from largest observed.
- 0x01,
- // Delta time.
- 0x10, 0x32, 0x54, 0x76,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -4456,9 +3734,7 @@
// ACK Timestamp is not a feature of IETF QUIC.
return;
}
- QuicEncryptedPacket encrypted(
- AsChars(framer_.version().HasIetfInvariantHeader() ? packet46 : packet),
- ABSL_ARRAYSIZE(packet), false);
+ QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
EXPECT_FALSE(framer_.ProcessPacket(encrypted));
EXPECT_TRUE(absl::StartsWith(framer_.detailed_error(),
"delta_from_largest_observed too high"));
@@ -4468,35 +3744,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- // (no ack blocks, 1 byte largest observed, 1 byte block length)
- 0x40,
- // largest acked
- 0x03,
- // Zero delta time.
- 0x00, 0x00,
- // first ack block length.
- 0x03,
- // num timestamps.
- 0x02,
- // Delta from largest observed.
- 0x01,
- // Delta time.
- 0x10, 0x32, 0x54, 0x76,
- // Delta from largest observed.
- 0x03,
- // Delta time.
- 0x10, 0x32,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -4529,9 +3776,7 @@
// ACK Timestamp is not a feature of IETF QUIC.
return;
}
- QuicEncryptedPacket encrypted(
- AsChars(framer_.version().HasIetfInvariantHeader() ? packet46 : packet),
- ABSL_ARRAYSIZE(packet), false);
+ QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
EXPECT_FALSE(framer_.ProcessPacket(encrypted));
EXPECT_TRUE(absl::StartsWith(framer_.detailed_error(),
"delta_from_largest_observed too high"));
@@ -4545,24 +3790,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x2C}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (stop waiting frame)
- {"",
- {0x06}},
- // least packet number awaiting an ack, delta from packet number.
- {"Unable to read least unacked delta.",
- {0x00, 0x00, 0x00, 0x08}}
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -4581,11 +3808,8 @@
};
// clang-format on
- PacketFragments& fragments =
- framer_.version().HasIetfInvariantHeader() ? packet46 : packet;
-
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
+ AssemblePacketFromFragments(packet));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -4599,32 +3823,17 @@
const QuicStopWaitingFrame& frame = *visitor_.stop_waiting_frames_[0];
EXPECT_EQ(kLeastUnacked, frame.least_unacked);
- CheckFramingBoundaries(fragments, QUIC_INVALID_STOP_WAITING_DATA);
+ CheckFramingBoundaries(packet, QUIC_INVALID_STOP_WAITING_DATA);
}
TEST_P(QuicFramerTest, InvalidNewStopWaitingFrame) {
// The Stop Waiting frame is not in IETF QUIC
- if (VersionHasIetfQuicFrames(version_.transport_version) &&
- framer_.version().HasIetfInvariantHeader()) {
+ if (VersionHasIetfQuicFrames(version_.transport_version)) {
return;
}
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
- // frame type (stop waiting frame)
- 0x06,
- // least packet number awaiting an ack, delta from packet number.
- 0x13, 0x34, 0x56, 0x78,
- 0x9A, 0xA8,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -4638,11 +3847,7 @@
};
// clang-format on
- QuicEncryptedPacket encrypted(
- AsChars(framer_.version().HasIetfInvariantHeader() ? packet46 : packet),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet),
- false);
+ QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
EXPECT_FALSE(framer_.ProcessPacket(encrypted));
EXPECT_THAT(framer_.error(), IsError(QUIC_INVALID_STOP_WAITING_DATA));
EXPECT_EQ("Invalid unacked delta.", framer_.detailed_error());
@@ -4652,31 +3857,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (rst stream frame)
- {"",
- {0x01}},
- // stream id
- {"Unable to read stream_id.",
- {0x01, 0x02, 0x03, 0x04}},
- // sent byte offset
- {"Unable to read rst stream sent byte offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- // error code QUIC_STREAM_CANCELLED
- {"Unable to read rst stream error code.",
- {0x00, 0x00, 0x00, 0x06}}
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -4728,9 +3908,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -4751,34 +3930,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (connection close frame)
- {"",
- {0x02}},
- // error code
- {"Unable to read connection close error code.",
- {0x00, 0x00, 0x00, 0x11}},
- {"Unable to read connection close error details.",
- {
- // error details length
- 0x0, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n'}
- }
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -4839,9 +3990,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -4876,34 +4026,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (connection close frame)
- {"",
- {0x02}},
- // error code larger than QUIC_LAST_ERROR
- {"Unable to read connection close error code.",
- {0x00, 0x00, 0xC0, 0xDE}},
- {"Unable to read connection close error details.",
- {
- // error details length
- 0x0, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n'}
- }
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -4964,9 +4086,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -5004,35 +4125,6 @@
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (connection close frame)
- {"",
- {0x02}},
- // error code
- {"Unable to read connection close error code.",
- {0x00, 0x00, 0x00, 0x11}},
- {"Unable to read connection close error details.",
- {
- // error details length
- 0x0, 0x13,
- // error details
- '1', '7', '7', '6',
- '7', ':', 'b', 'e',
- 'c', 'a', 'u', 's',
- 'e', ' ', 'I', ' ',
- 'c', 'a', 'n'}
- }
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -5094,9 +4186,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -5260,38 +4351,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (go away frame)
- {"",
- {0x03}},
- // error code
- {"Unable to read go away error code.",
- {0x00, 0x00, 0x00, 0x09}},
- // stream id
- {"Unable to read last good stream id.",
- {0x01, 0x02, 0x03, 0x04}},
- // stream id
- {"Unable to read goaway reason.",
- {
- // error details length
- 0x0, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n'}
- }
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -5324,10 +4383,8 @@
};
// clang-format on
- PacketFragments& fragments =
- framer_.version().HasIetfInvariantHeader() ? packet46 : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
+ AssemblePacketFromFragments(packet));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -5340,7 +4397,7 @@
EXPECT_EQ(0x9u, visitor_.goaway_frame_.error_code);
EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase);
- CheckFramingBoundaries(fragments, QUIC_INVALID_GOAWAY_DATA);
+ CheckFramingBoundaries(packet, QUIC_INVALID_GOAWAY_DATA);
}
TEST_P(QuicFramerTest, GoAwayFrameWithUnknownErrorCode) {
@@ -5351,38 +4408,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (go away frame)
- {"",
- {0x03}},
- // error code larger than QUIC_LAST_ERROR
- {"Unable to read go away error code.",
- {0x00, 0x00, 0xC0, 0xDE}},
- // stream id
- {"Unable to read last good stream id.",
- {0x01, 0x02, 0x03, 0x04}},
- // stream id
- {"Unable to read goaway reason.",
- {
- // error details length
- 0x0, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n'}
- }
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -5415,10 +4440,8 @@
};
// clang-format on
- PacketFragments& fragments =
- framer_.version().HasIetfInvariantHeader() ? packet46 : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
+ AssemblePacketFromFragments(packet));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -5431,7 +4454,7 @@
EXPECT_EQ(0xC0DE, visitor_.goaway_frame_.error_code);
EXPECT_EQ("because I can", visitor_.goaway_frame_.reason_phrase);
- CheckFramingBoundaries(fragments, QUIC_INVALID_GOAWAY_DATA);
+ CheckFramingBoundaries(packet, QUIC_INVALID_GOAWAY_DATA);
}
TEST_P(QuicFramerTest, WindowUpdateFrame) {
@@ -5443,28 +4466,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (window update frame)
- {"",
- {0x04}},
- // stream id
- {"Unable to read stream_id.",
- {0x01, 0x02, 0x03, 0x04}},
- // byte offset
- {"Unable to read window byte_offset.",
- {0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -5488,10 +4489,8 @@
// clang-format on
- PacketFragments& fragments =
- framer_.version().HasIetfInvariantHeader() ? packet46 : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(fragments));
+ AssemblePacketFromFragments(packet));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsQuicNoError());
@@ -5503,7 +4502,7 @@
EXPECT_EQ(kStreamId, visitor_.window_update_frame_.stream_id);
EXPECT_EQ(kStreamOffset, visitor_.window_update_frame_.max_data);
- CheckFramingBoundaries(fragments, QUIC_INVALID_WINDOW_UPDATE_DATA);
+ CheckFramingBoundaries(packet, QUIC_INVALID_WINDOW_UPDATE_DATA);
}
TEST_P(QuicFramerTest, MaxDataFrame) {
@@ -5600,24 +4599,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
PacketFragments packet = {
- // public flags (8 byte connection_id)
- {"",
- {0x28}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // packet number
- {"",
- {0x12, 0x34, 0x56, 0x78}},
- // frame type (blocked frame)
- {"",
- {0x05}},
- // stream id
- {"Unable to read stream_id.",
- {0x01, 0x02, 0x03, 0x04}},
- };
-
- PacketFragments packet46 = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -5658,9 +4639,8 @@
// clang-format on
PacketFragments& fragments =
- VersionHasIetfQuicFrames(framer_.transport_version())
- ? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46 : packet);
+ VersionHasIetfQuicFrames(framer_.transport_version()) ? packet_ietf
+ : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -5689,18 +4669,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ping frame)
- 0x07,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -5728,13 +4696,10 @@
QuicEncryptedPacket encrypted(
AsChars(VersionHasIetfQuicFrames(framer_.transport_version())
? packet_ietf
- : (framer_.version().HasIetfInvariantHeader() ? packet46
- : packet)),
+ : packet),
VersionHasIetfQuicFrames(framer_.transport_version())
? ABSL_ARRAYSIZE(packet_ietf)
- : (framer_.version().HasIetfInvariantHeader()
- ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet)),
+ : ABSL_ARRAYSIZE(packet),
false);
EXPECT_TRUE(framer_.ProcessPacket(encrypted));
@@ -5827,12 +4792,9 @@
}
TEST_P(QuicFramerTest, MessageFrame) {
- if (!VersionSupportsMessageFrames(framer_.transport_version())) {
- return;
- }
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
- PacketFragments packet46 = {
+ PacketFragments packet = {
// type (short header, 4 byte packet number)
{"",
{0x43}},
@@ -5890,7 +4852,7 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
encrypted = AssemblePacketFromFragments(packet_ietf);
} else {
- encrypted = AssemblePacketFromFragments(packet46);
+ encrypted = AssemblePacketFromFragments(packet);
}
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -5907,216 +4869,10 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
CheckFramingBoundaries(packet_ietf, QUIC_INVALID_MESSAGE_DATA);
} else {
- CheckFramingBoundaries(packet46, QUIC_INVALID_MESSAGE_DATA);
+ CheckFramingBoundaries(packet, QUIC_INVALID_MESSAGE_DATA);
}
}
-TEST_P(QuicFramerTest, PublicResetPacketV33) {
- // clang-format off
- PacketFragments packet = {
- // public flags (public reset, 8 byte connection_id)
- {"",
- {0x0A}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- {"Unable to read reset message.",
- {
- // 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
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
- std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(packet));
- EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
- ASSERT_THAT(framer_.error(), IsQuicNoError());
- ASSERT_TRUE(visitor_.public_reset_packet_.get());
- EXPECT_EQ(FramerTestConnectionId(),
- visitor_.public_reset_packet_->connection_id);
- EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
- EXPECT_EQ(
- IpAddressFamily::IP_UNSPEC,
- visitor_.public_reset_packet_->client_address.host().address_family());
-
- CheckFramingBoundaries(packet, QUIC_INVALID_PUBLIC_RST_PACKET);
-}
-
-TEST_P(QuicFramerTest, PublicResetPacket) {
- QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
-
- // clang-format off
- PacketFragments packet = {
- // public flags (public reset, 8 byte connection_id)
- {"",
- {0x0E}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- {"Unable to read reset message.",
- {
- // 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
-
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
- std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(packet));
- EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
- ASSERT_THAT(framer_.error(), IsQuicNoError());
- ASSERT_TRUE(visitor_.public_reset_packet_.get());
- EXPECT_EQ(FramerTestConnectionId(),
- visitor_.public_reset_packet_->connection_id);
- EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
- EXPECT_EQ(
- IpAddressFamily::IP_UNSPEC,
- visitor_.public_reset_packet_->client_address.host().address_family());
-
- CheckFramingBoundaries(packet, QUIC_INVALID_PUBLIC_RST_PACKET);
-}
-
-TEST_P(QuicFramerTest, PublicResetPacketWithTrailingJunk) {
- // clang-format off
- unsigned char packet[] = {
- // 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
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
- QuicEncryptedPacket encrypted(AsChars(packet), ABSL_ARRAYSIZE(packet), false);
- EXPECT_FALSE(framer_.ProcessPacket(encrypted));
- ASSERT_THAT(framer_.error(), IsError(QUIC_INVALID_PUBLIC_RST_PACKET));
- EXPECT_EQ("Unable to read reset message.", framer_.detailed_error());
-}
-
-TEST_P(QuicFramerTest, PublicResetPacketWithClientAddress) {
- // clang-format off
- PacketFragments packet = {
- // public flags (public reset, 8 byte connection_id)
- {"",
- {0x0A}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- {"Unable to read reset message.",
- {
- // message tag (kPRST)
- 'P', 'R', 'S', 'T',
- // num_entries (2) + 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
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
- std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(packet));
- EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
- ASSERT_THAT(framer_.error(), IsQuicNoError());
- ASSERT_TRUE(visitor_.public_reset_packet_.get());
- EXPECT_EQ(FramerTestConnectionId(),
- visitor_.public_reset_packet_->connection_id);
- EXPECT_EQ(kNonceProof, visitor_.public_reset_packet_->nonce_proof);
- EXPECT_EQ("4.31.198.44",
- visitor_.public_reset_packet_->client_address.host().ToString());
- EXPECT_EQ(443, visitor_.public_reset_packet_->client_address.port());
-
- CheckFramingBoundaries(packet, QUIC_INVALID_PUBLIC_RST_PACKET);
-}
-
TEST_P(QuicFramerTest, IetfStatelessResetPacket) {
// clang-format off
unsigned char packet[] = {
@@ -6132,9 +4888,6 @@
0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
};
// clang-format on
- if (!framer_.version().HasIetfInvariantHeader()) {
- return;
- }
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
QuicFramerPeer::SetLastSerializedServerConnectionId(&framer_,
TestConnectionId(0x33));
@@ -6175,9 +4928,6 @@
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
// clang-format on
- if (!framer_.version().HasIetfInvariantHeader()) {
- return;
- }
QuicFramerPeer::SetLastSerializedServerConnectionId(&framer_,
TestConnectionId(0x33));
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
@@ -6204,19 +4954,6 @@
TEST_P(QuicFramerTest, VersionNegotiationPacketClient) {
// clang-format off
PacketFragments packet = {
- // public flags (version, 8 byte connection_id)
- {"",
- {0x29}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // version tag
- {"Unable to read supported version in negotiation.",
- {QUIC_VERSION_BYTES,
- 'Q', '2', '.', '0'}},
- };
-
- PacketFragments packet46 = {
// type (long header)
{"",
{0x8F}},
@@ -6258,9 +4995,7 @@
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
PacketFragments& fragments =
- framer_.version().HasLongHeaderLengths() ? packet49
- : framer_.version().HasIetfInvariantHeader() ? packet46
- : packet;
+ framer_.version().HasLongHeaderLengths() ? packet49 : packet;
std::unique_ptr<QuicEncryptedPacket> encrypted(
AssemblePacketFromFragments(fragments));
EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
@@ -6279,10 +5014,6 @@
}
TEST_P(QuicFramerTest, VersionNegotiationPacketServer) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_SERVER);
// clang-format off
unsigned char packet[] = {
@@ -6330,45 +5061,6 @@
EXPECT_FALSE(visitor_.version_negotiation_packet_.get());
}
-TEST_P(QuicFramerTest, OldVersionNegotiationPacket) {
- // clang-format off
- PacketFragments packet = {
- // public flags (version, 8 byte connection_id)
- {"",
- {0x2D}},
- // connection_id
- {"",
- {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}},
- // version tag
- {"Unable to read supported version in negotiation.",
- {QUIC_VERSION_BYTES,
- 'Q', '2', '.', '0'}},
- };
- // clang-format on
-
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
- QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
-
- std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(packet));
- EXPECT_TRUE(framer_.ProcessPacket(*encrypted));
- ASSERT_THAT(framer_.error(), IsQuicNoError());
- ASSERT_TRUE(visitor_.version_negotiation_packet_.get());
- EXPECT_EQ(1u, visitor_.version_negotiation_packet_->versions.size());
- EXPECT_EQ(GetParam(), visitor_.version_negotiation_packet_->versions[0]);
-
- // Remove the last version from the packet so that every truncated
- // version of the packet is invalid, otherwise checking boundaries
- // is annoyingly complicated.
- for (size_t i = 0; i < 4; ++i) {
- packet.back().fragment.pop_back();
- }
- CheckFramingBoundaries(packet, QUIC_INVALID_VERSION_NEGOTIATION_PACKET);
-}
-
TEST_P(QuicFramerTest, ParseIetfRetryPacket) {
if (!framer_.version().SupportsRetry()) {
return;
@@ -6511,19 +5203,6 @@
// clang-format off
unsigned char packet[kMaxOutgoingPacketSize] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (padding frame)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[kMaxOutgoingPacketSize] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -6553,8 +5232,6 @@
unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
uint64_t header_size = GetPacketHeaderSize(
@@ -6569,8 +5246,7 @@
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet));
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, BuildStreamFramePacketWithNewPaddingFrame) {
@@ -6588,33 +5264,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // paddings
- 0x00, 0x00,
- // frame type (stream frame with fin)
- 0xFF,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // offset
- 0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54,
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!',
- // paddings
- 0x00, 0x00,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -6677,9 +5326,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -6700,19 +5346,6 @@
// clang-format off
unsigned char packet[kMaxOutgoingPacketSize] = {
- // public flags (8 byte connection_id and 4 byte packet number)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (padding frame)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[kMaxOutgoingPacketSize] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -6742,8 +5375,6 @@
unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
uint64_t header_size = GetPacketHeaderSize(
@@ -6758,8 +5389,7 @@
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet));
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
@@ -6775,19 +5405,6 @@
// clang-format off
unsigned char packet[kMaxOutgoingPacketSize] = {
- // public flags (8 byte connection_id and 2 byte packet number)
- 0x1C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x56, 0x78,
-
- // frame type (padding frame)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[kMaxOutgoingPacketSize] = {
// type (short header, 2 byte packet number)
0x41,
// connection_id
@@ -6817,8 +5434,6 @@
unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
uint64_t header_size = GetPacketHeaderSize(
@@ -6833,8 +5448,7 @@
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet));
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
@@ -6850,19 +5464,6 @@
// clang-format off
unsigned char packet[kMaxOutgoingPacketSize] = {
- // public flags (8 byte connection_id and 1 byte packet number)
- 0x0C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x78,
-
- // frame type (padding frame)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[kMaxOutgoingPacketSize] = {
// type (short header, 1 byte packet number)
0x40,
// connection_id
@@ -6892,8 +5493,6 @@
unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
uint64_t header_size = GetPacketHeaderSize(
@@ -6908,8 +5507,7 @@
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet));
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, BuildStreamFramePacket) {
@@ -6930,27 +5528,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (stream frame with fin and no length)
- 0xDF,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // offset
- 0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -7001,9 +5578,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p), p_size);
@@ -7014,9 +5588,7 @@
header.destination_connection_id = FramerTestConnectionId();
header.reset_flag = false;
header.version_flag = true;
- if (framer_.version().HasIetfInvariantHeader()) {
- header.long_packet_type = ZERO_RTT_PROTECTED;
- }
+ header.long_packet_type = ZERO_RTT_PROTECTED;
header.packet_number = kPacketNumber;
if (QuicVersionHasLongHeaderLengths(framer_.transport_version())) {
header.length_length = quiche::VARIABLE_LENGTH_INTEGER_LENGTH_2;
@@ -7028,26 +5600,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (version, 8 byte connection_id)
- 0x2D,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // version tag
- QUIC_VERSION_BYTES,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (stream frame with fin and no length)
- 0xDF,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // offset
- 0x3A, 0x98, 0xFE, 0xDC, 0x32, 0x10, 0x76, 0x54,
- // data
- 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!',
- };
-
- unsigned char packet46[] = {
// type (long header with packet type ZERO_RTT_PROTECTED)
0xD3,
// version tag
@@ -7135,9 +5687,6 @@
} else if (framer_.version().HasLongHeaderLengths()) {
p = packet49;
p_size = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p), p_size);
@@ -7307,7 +5856,7 @@
CheckFramingBoundaries(fragments, QUIC_INVALID_FRAME_DATA);
}
-TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
+TEST_P(QuicFramerTest, BuildOldVersionNegotiationPacket) {
SetQuicFlag(quic_disable_version_negotiation_grease_randomness, true);
// clang-format off
unsigned char packet[] = {
@@ -7319,7 +5868,21 @@
0xDA, 0x5A, 0x3A, 0x3A,
QUIC_VERSION_BYTES,
};
- unsigned char packet46[] = {
+ QuicConnectionId connection_id = FramerTestConnectionId();
+ std::unique_ptr<QuicEncryptedPacket> data(
+ QuicFramer::BuildVersionNegotiationPacket(
+ connection_id, EmptyQuicConnectionId(), /*ietf_quic=*/false,
+ /*use_length_prefix=*/false,
+ SupportedVersions(GetParam())));
+ quiche::test::CompareCharArraysWithHexError(
+ "constructed packet", data->data(), data->length(), AsChars(packet),
+ ABSL_ARRAYSIZE(packet));
+}
+
+TEST_P(QuicFramerTest, BuildVersionNegotiationPacket) {
+ SetQuicFlag(quic_disable_version_negotiation_grease_randomness, true);
+ // clang-format off
+ unsigned char packet[] = {
// type (long header)
0xC0,
// version tag
@@ -7353,16 +5916,12 @@
if (framer_.version().HasLongHeaderLengths()) {
p = packet49;
p_size = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicConnectionId connection_id = FramerTestConnectionId();
std::unique_ptr<QuicEncryptedPacket> data(
QuicFramer::BuildVersionNegotiationPacket(
- connection_id, EmptyQuicConnectionId(),
- framer_.version().HasIetfInvariantHeader(),
+ connection_id, EmptyQuicConnectionId(), /*ietf_quic=*/true,
framer_.version().HasLengthPrefixedConnectionIds(),
SupportedVersions(GetParam())));
quiche::test::CompareCharArraysWithHexError(
@@ -7421,27 +5980,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- // (no ack blocks, 2 byte largest observed, 2 byte block length)
- 0x45,
- // largest acked
- 0x12, 0x34,
- // Zero delta time.
- 0x00, 0x00,
- // first ack block length.
- 0x12, 0x34,
- // num timestamps.
- 0x00,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -7487,9 +6025,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -8213,27 +6748,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- // (no ack blocks, 4 byte largest observed, 4 byte block length)
- 0x4A,
- // largest acked
- 0x12, 0x34, 0x56, 0x78,
- // Zero delta time.
- 0x00, 0x00,
- // first ack block length.
- 0x12, 0x34, 0x56, 0x78,
- // num timestamps.
- 0x00,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -8280,9 +6794,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -8311,45 +6822,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- // (has ack blocks, 2 byte largest observed, 2 byte block length)
- 0x65,
- // largest acked
- 0x12, 0x34,
- // Zero delta time.
- 0x00, 0x00,
- // num ack blocks ranges.
- 0x04,
- // first ack block length.
- 0x00, 0x01,
- // gap to next block.
- 0x01,
- // ack block length.
- 0x0e, 0xaf,
- // gap to next block.
- 0xff,
- // ack block length.
- 0x00, 0x00,
- // gap to next block.
- 0x91,
- // ack block length.
- 0x01, 0xea,
- // gap to next block.
- 0x05,
- // ack block length.
- 0x00, 0x04,
- // num timestamps.
- 0x00,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -8428,9 +6900,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -8462,99 +6931,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
- // frame type (ack frame)
- // (has ack blocks, 2 byte largest observed, 2 byte block length)
- 0x65,
- // largest acked
- 0x12, 0x34,
- // Zero delta time.
- 0x00, 0x00,
- // num ack blocks ranges.
- 0xff,
- // first ack block length.
- 0x0f, 0xdd,
- // 255 = 4 * 63 + 3
- 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, 0x01,
- // num timestamps.
- 0x00,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -8737,9 +7113,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -8749,47 +7122,6 @@
"constructed packet", data->data(), data->length(), AsChars(p), p_size);
}
-TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) {
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
- QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
- QuicPacketHeader header;
- header.destination_connection_id = FramerTestConnectionId();
- header.reset_flag = false;
- header.version_flag = false;
- header.packet_number = kPacketNumber;
-
- QuicStopWaitingFrame stop_waiting_frame;
- stop_waiting_frame.least_unacked = kLeastUnacked;
-
- QuicFrames frames = {QuicFrame(stop_waiting_frame)};
-
- // clang-format off
- unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (stop waiting frame)
- 0x06,
- // least packet number awaiting an ack, delta from packet number.
- 0x00, 0x00, 0x00, 0x08,
- };
-
- // clang-format on
-
- std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
- ASSERT_TRUE(data != nullptr);
-
- quiche::test::CompareCharArraysWithHexError(
- "constructed packet", data->data(), data->length(), AsChars(packet),
- ABSL_ARRAYSIZE(packet));
-}
-
TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
QuicPacketHeader header;
@@ -8809,25 +7141,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (rst stream frame)
- 0x01,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // sent byte offset
- 0x08, 0x07, 0x06, 0x05,
- 0x04, 0x03, 0x02, 0x01,
- // error code
- 0x05, 0x06, 0x07, 0x08,
- };
-
- unsigned char packet46[] = {
// type (short packet, 4 byte packet number)
0x43,
// connection_id
@@ -8875,9 +7188,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -8900,27 +7210,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (connection close frame)
- 0x02,
- // error code
- 0x00, 0x00, 0x00, 0x01,
- // error details length
- 0x00, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -8970,9 +7259,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -9004,27 +7290,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (connection close frame)
- 0x02,
- // error code
- 0x05, 0x06, 0x07, 0x08,
- // error details length
- 0x00, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -9076,9 +7341,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -9103,55 +7365,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (connection close frame)
- 0x02,
- // error code
- 0x00, 0x00, 0x00, 0x01,
- // error details length
- 0x01, 0x00,
- // error details (truncated to 256 bytes)
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -9257,9 +7470,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -9422,29 +7632,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (go away frame)
- 0x03,
- // error code
- 0x05, 0x06, 0x07, 0x08,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // error details length
- 0x00, 0x0d,
- // error details
- 'b', 'e', 'c', 'a',
- 'u', 's', 'e', ' ',
- 'I', ' ', 'c', 'a',
- 'n',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -9468,19 +7655,12 @@
};
// clang-format on
-
- unsigned char* p = packet;
- size_t p_size = ABSL_ARRAYSIZE(packet);
- if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
- }
-
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
ASSERT_TRUE(data != nullptr);
quiche::test::CompareCharArraysWithHexError(
- "constructed packet", data->data(), data->length(), AsChars(p), p_size);
+ "constructed packet", data->data(), data->length(), AsChars(packet),
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, BuildTruncatedGoAwayPacket) {
@@ -9504,57 +7684,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (go away frame)
- 0x03,
- // error code
- 0x05, 0x06, 0x07, 0x08,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // error details length
- 0x01, 0x00,
- // error details (truncated to 256 bytes)
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -9606,18 +7735,12 @@
};
// clang-format on
- unsigned char* p = packet;
- size_t p_size = ABSL_ARRAYSIZE(packet);
- if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
- }
-
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
ASSERT_TRUE(data != nullptr);
quiche::test::CompareCharArraysWithHexError(
- "constructed packet", data->data(), data->length(), AsChars(p), p_size);
+ "constructed packet", data->data(), data->length(), AsChars(packet),
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
@@ -9636,23 +7759,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (window update frame)
- 0x04,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // byte offset
- 0x11, 0x22, 0x33, 0x44,
- 0x55, 0x66, 0x77, 0x88,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -9695,9 +7801,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
quiche::test::CompareCharArraysWithHexError(
@@ -9817,20 +7920,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (blocked frame)
- 0x05,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- };
-
- unsigned char packet46[] = {
// type (short packet, 4 byte packet number)
0x43,
// connection_id
@@ -9867,9 +7956,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
quiche::test::CompareCharArraysWithHexError(
@@ -9888,18 +7974,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ping frame)
- 0x07,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -9927,8 +8001,6 @@
unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
@@ -9936,8 +8008,7 @@
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet));
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, BuildHandshakeDonePacket) {
@@ -10022,9 +8093,6 @@
}
TEST_P(QuicFramerTest, BuildMessagePacket) {
- if (!VersionSupportsMessageFrames(framer_.transport_version())) {
- return;
- }
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
QuicPacketHeader header;
header.destination_connection_id = FramerTestConnectionId();
@@ -10037,7 +8105,7 @@
QuicFrames frames = {QuicFrame(&frame), QuicFrame(&frame2)};
// clang-format off
- unsigned char packet46[] = {
+ unsigned char packet[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -10078,7 +8146,7 @@
};
// clang-format on
- unsigned char* p = packet46;
+ unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
}
@@ -10088,7 +8156,7 @@
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- ABSL_ARRAYSIZE(packet46));
+ ABSL_ARRAYSIZE(packet));
}
// Test that the MTU discovery packet is serialized correctly as a PING packet.
@@ -10104,18 +8172,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ping frame)
- 0x07,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -10146,14 +8202,11 @@
unsigned char* p = packet;
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
quiche::test::CompareCharArraysWithHexError(
"constructed packet", data->data(), data->length(), AsChars(p),
- framer_.version().HasIetfInvariantHeader() ? ABSL_ARRAYSIZE(packet46)
- : ABSL_ARRAYSIZE(packet));
+ ABSL_ARRAYSIZE(packet));
}
TEST_P(QuicFramerTest, BuildPublicResetPacket) {
@@ -10181,10 +8234,6 @@
};
// clang-format on
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
std::unique_ptr<QuicEncryptedPacket> data(
framer_.BuildPublicResetPacket(reset_packet));
ASSERT_TRUE(data != nullptr);
@@ -10229,10 +8278,6 @@
};
// clang-format on
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
std::unique_ptr<QuicEncryptedPacket> data(
framer_.BuildPublicResetPacket(reset_packet));
ASSERT_TRUE(data != nullptr);
@@ -10301,10 +8346,6 @@
};
// clang-format on
- if (framer_.version().HasIetfInvariantHeader()) {
- return;
- }
-
std::unique_ptr<QuicEncryptedPacket> data(
framer_.BuildPublicResetPacket(reset_packet));
ASSERT_TRUE(data != nullptr);
@@ -10414,21 +8455,6 @@
QuicPacketNumber packet_number = kPacketNumber;
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // redundancy
- 'a', 'b', 'c', 'd',
- 'e', 'f', 'g', 'h',
- 'i', 'j', 'k', 'l',
- 'm', 'n', 'o', 'p',
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -10465,8 +8491,6 @@
if (framer_.version().HasHeaderProtection()) {
p = packet50;
p_size = ABSL_ARRAYSIZE(packet50);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
std::unique_ptr<QuicPacket> raw(new QuicPacket(
@@ -10508,23 +8532,6 @@
QuicPacketNumber packet_number = kPacketNumber;
// clang-format off
unsigned char packet[] = {
- // public flags (version, 8 byte connection_id)
- 0x29,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // version tag
- 'Q', '.', '1', '0',
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // redundancy
- 'a', 'b', 'c', 'd',
- 'e', 'f', 'g', 'h',
- 'i', 'j', 'k', 'l',
- 'm', 'n', 'o', 'p',
- };
-
- unsigned char packet46[] = {
// type (long header with packet type ZERO_RTT_PROTECTED)
0xD3,
// version tag
@@ -10572,9 +8579,6 @@
if (framer_.version().HasHeaderProtection()) {
p = packet50;
p_size = ABSL_ARRAYSIZE(packet50);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<QuicPacket> raw(new QuicPacket(
@@ -10774,43 +8778,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (stream frame with fin)
- 0xFF,
- // stream id
- 0x01, 0x02, 0x03, 0x04,
- // offset
- 0x3A, 0x98, 0xFE, 0xDC,
- 0x32, 0x10, 0x76, 0x54,
- // data length
- 0x00, 0x0c,
- // data
- 'h', 'e', 'l', 'l',
- 'o', ' ', 'w', 'o',
- 'r', 'l', 'd', '!',
-
- // frame type (ack frame)
- 0x40,
- // least packet number awaiting an ack
- 0x12, 0x34, 0x56, 0x78,
- 0x9A, 0xA0,
- // largest observed packet number
- 0x12, 0x34, 0x56, 0x78,
- 0x9A, 0xBF,
- // num missing packets
- 0x01,
- // missing packet
- 0x12, 0x34, 0x56, 0x78,
- 0x9A, 0xBE,
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -10901,9 +8868,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
EXPECT_TRUE(framer_.ProcessPacket(encrypted));
@@ -13390,26 +11354,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- 0x45,
- // largest observed
- 0x00, 0x00,
- // Zero delta time.
- 0x00, 0x00,
- // first ack block length.
- 0x00, 0x00,
- // num timestamps.
- 0x00
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -13455,8 +11399,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -13468,26 +11410,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- 0x45,
- // largest observed
- 0x00, 0x02,
- // Zero delta time.
- 0x00, 0x00,
- // first ack block length.
- 0x00, 0x03,
- // num timestamps.
- 0x00
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -13533,9 +11455,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -13548,36 +11467,6 @@
SetDecrypterLevel(ENCRYPTION_FORWARD_SECURE);
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ack frame)
- 0x60,
- // largest observed
- 0x0A,
- // Zero delta time.
- 0x00, 0x00,
- // Num of ack blocks
- 0x02,
- // first ack block length.
- 0x02,
- // gap to next block
- 0x01,
- // ack block length
- 0x01,
- // gap to next block
- 0x01,
- // ack block length
- 0x06,
- // num timestamps.
- 0x00
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -13641,9 +11530,6 @@
if (VersionHasIetfQuicFrames(framer_.transport_version())) {
p = packet_ietf;
p_size = ABSL_ARRAYSIZE(packet_ietf);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_size = ABSL_ARRAYSIZE(packet46);
}
QuicEncryptedPacket encrypted(AsChars(p), p_size, false);
@@ -14117,20 +12003,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (version included, 8-byte connection ID,
- // 4-byte packet number)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x00,
- // padding frames
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- unsigned char packet46[] = {
// public flags (long header with packet type HANDSHAKE and
// 4-byte packet number)
0xE3,
@@ -14179,9 +12051,6 @@
ReviseFirstByteByVersion(packet49);
p = packet49;
p_length = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_length = ABSL_ARRAYSIZE(packet46);
}
// First attempt decryption without the handshake crypter.
EXPECT_FALSE(
@@ -14220,20 +12089,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (version included, 8-byte connection ID,
- // 4-byte packet number)
- 0x28,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x00,
- // padding frames
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- };
- unsigned char packet46[] = {
// public flags (long header with packet type HANDSHAKE and
// 4-byte packet number)
0xE3,
@@ -14282,9 +12137,6 @@
ReviseFirstByteByVersion(packet49);
p = packet49;
p_length = ABSL_ARRAYSIZE(packet49);
- } else if (framer_.version().HasIetfInvariantHeader()) {
- p = packet46;
- p_length = ABSL_ARRAYSIZE(packet46);
}
EXPECT_FALSE(
@@ -14813,9 +12665,6 @@
}
TEST_P(QuicFramerTest, ClientReceivesWrongVersion) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- return;
- }
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
// clang-format off
@@ -14905,9 +12754,6 @@
}
TEST_P(QuicFramerTest, MultiplePacketNumberSpaces) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- return;
- }
framer_.EnableMultiplePacketNumberSpacesSupport();
// clang-format off
@@ -15019,7 +12865,7 @@
}
// clang-format off
- PacketFragments packet46 = {
+ PacketFragments packet = {
// public flags (IETF Retry packet, 0-length original destination CID)
{"Unable to read first byte.",
{0xf0}},
@@ -15033,16 +12879,15 @@
// clang-format on
std::unique_ptr<QuicEncryptedPacket> encrypted(
- AssemblePacketFromFragments(packet46));
+ AssemblePacketFromFragments(packet));
EXPECT_FALSE(framer_.ProcessPacket(*encrypted));
EXPECT_THAT(framer_.error(), IsError(QUIC_INVALID_PACKET_HEADER));
- CheckFramingBoundaries(packet46, QUIC_INVALID_PACKET_HEADER);
+ CheckFramingBoundaries(packet, QUIC_INVALID_PACKET_HEADER);
}
TEST_P(QuicFramerTest, RetryPacketRejectedWithMultiplePacketNumberSpaces) {
- if (!framer_.version().HasIetfInvariantHeader() ||
- framer_.version().SupportsRetry()) {
+ if (framer_.version().SupportsRetry()) {
return;
}
framer_.EnableMultiplePacketNumberSpacesSupport();
@@ -15367,10 +13212,6 @@
}
TEST_P(QuicFramerTest, ClientConnectionIdFromLongHeaderToClient) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- // This test requires an IETF long header.
- return;
- }
SetDecrypterLevel(ENCRYPTION_HANDSHAKE);
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_CLIENT);
// clang-format off
@@ -15436,10 +13277,6 @@
}
TEST_P(QuicFramerTest, ClientConnectionIdFromLongHeaderToServer) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- // This test requires an IETF long header.
- return;
- }
SetDecrypterLevel(ENCRYPTION_HANDSHAKE);
QuicFramerPeer::SetPerspective(&framer_, Perspective::IS_SERVER);
// clang-format off
@@ -15509,10 +13346,6 @@
}
TEST_P(QuicFramerTest, ProcessAndValidateIetfConnectionIdLengthClient) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- // This test requires an IETF long header.
- return;
- }
char connection_id_lengths = 0x05;
QuicDataReader reader(&connection_id_lengths, 1);
@@ -15547,10 +13380,6 @@
}
TEST_P(QuicFramerTest, ProcessAndValidateIetfConnectionIdLengthServer) {
- if (!framer_.version().HasIetfInvariantHeader()) {
- // This test requires an IETF long header.
- return;
- }
char connection_id_lengths = 0x50;
QuicDataReader reader(&connection_id_lengths, 1);
@@ -16349,12 +14178,7 @@
0x00, 0x00, 0x00, 0x00
};
MockConnectionIdGenerator generator;
- if (version_.HasIetfInvariantHeader()) {
EXPECT_CALL(generator, ConnectionIdLength(0x28)).WillOnce(Return(9));
- } else {
- packet[0] = 0x0a;
- EXPECT_CALL(generator, ConnectionIdLength(_)).Times(0);
- }
unsigned char* p = packet;
size_t p_size = ABSL_ARRAYSIZE(packet);
@@ -16384,13 +14208,8 @@
&use_length_prefix, &version_label, &parsed_version,
&destination_connection_id, &source_connection_id, &retry_token,
&detailed_error, generator));
- if (version_.HasIetfInvariantHeader()) {
- EXPECT_EQ(format, IETF_QUIC_SHORT_HEADER_PACKET);
- EXPECT_EQ(destination_connection_id.length(), 9);
- } else {
- EXPECT_EQ(format, GOOGLE_QUIC_PACKET);
- EXPECT_EQ(destination_connection_id.length(), 8);
- }
+ EXPECT_EQ(format, IETF_QUIC_SHORT_HEADER_PACKET);
+ EXPECT_EQ(destination_connection_id.length(), 9);
EXPECT_EQ(long_packet_type, INVALID_PACKET_TYPE);
EXPECT_FALSE(version_flag);
EXPECT_FALSE(use_length_prefix);
diff --git a/quiche/quic/core/quic_packet_creator.cc b/quiche/quic/core/quic_packet_creator.cc
index c04a418..63c07b6 100644
--- a/quiche/quic/core/quic_packet_creator.cc
+++ b/quiche/quic/core/quic_packet_creator.cc
@@ -115,7 +115,6 @@
debug_delegate_(nullptr),
framer_(framer),
random_(random),
- send_version_in_packet_(framer->perspective() == Perspective::IS_CLIENT),
have_diversification_nonce_(false),
max_packet_length_(0),
server_connection_id_included_(CONNECTION_ID_PRESENT),
@@ -215,19 +214,6 @@
max_plaintext_size_ = framer_->GetMaxPlaintextSize(length);
}
-// Stops serializing version of the protocol in packets sent after this call.
-// A packet that is already open might send kQuicVersionSize bytes less than the
-// maximum packet size if we stop sending version before it is serialized.
-void QuicPacketCreator::StopSendingVersion() {
- QUICHE_DCHECK(send_version_in_packet_) << ENDPOINT;
- QUICHE_DCHECK(!version().HasIetfInvariantHeader()) << ENDPOINT;
- send_version_in_packet_ = false;
- if (packet_size_ > 0) {
- QUICHE_DCHECK_LT(kQuicVersionSize, packet_size_) << ENDPOINT;
- packet_size_ -= kQuicVersionSize;
- }
-}
-
void QuicPacketCreator::SetDiversificationNonce(
const DiversificationNonce& nonce) {
QUICHE_DCHECK(!have_diversification_nonce_) << ENDPOINT;
@@ -366,8 +352,8 @@
}
bool QuicPacketCreator::HasRoomForMessageFrame(QuicByteCount length) {
- const size_t message_frame_size = QuicFramer::GetMessageFrameSize(
- framer_->transport_version(), /*last_frame_in_packet=*/true, length);
+ const size_t message_frame_size =
+ QuicFramer::GetMessageFrameSize(/*last_frame_in_packet=*/true, length);
if (static_cast<QuicByteCount>(message_frame_size) >
max_datagram_frame_size_) {
return false;
@@ -609,7 +595,7 @@
QuicDataWriter writer(kMaxOutgoingPacketSize, encrypted_buffer);
size_t length_field_offset = 0;
- if (!framer_->AppendPacketHeader(header, &writer, &length_field_offset)) {
+ if (!framer_->AppendIetfPacketHeader(header, &writer, &length_field_offset)) {
QUIC_BUG(quic_bug_10752_9) << ENDPOINT << "AppendPacketHeader failed";
return;
}
@@ -1968,10 +1954,7 @@
}
bool QuicPacketCreator::IncludeVersionInHeader() const {
- if (version().HasIetfInvariantHeader()) {
- return packet_.encryption_level < ENCRYPTION_FORWARD_SECURE;
- }
- return send_version_in_packet_;
+ return packet_.encryption_level < ENCRYPTION_FORWARD_SECURE;
}
void QuicPacketCreator::AddPendingPadding(QuicByteCount size) {
@@ -2016,9 +1999,6 @@
}
QuicPacketLength QuicPacketCreator::GetCurrentLargestMessagePayload() const {
- if (!VersionSupportsMessageFrames(framer_->transport_version())) {
- return 0;
- }
const size_t packet_header_size = GetPacketHeaderSize(
framer_->transport_version(), GetDestinationConnectionIdLength(),
GetSourceConnectionIdLength(), IncludeVersionInHeader(),
@@ -2040,9 +2020,6 @@
}
QuicPacketLength QuicPacketCreator::GetGuaranteedLargestMessagePayload() const {
- if (!VersionSupportsMessageFrames(framer_->transport_version())) {
- return 0;
- }
// QUIC Crypto server packets may include a diversification nonce.
const bool may_include_nonce =
framer_->version().handshake_protocol == PROTOCOL_QUIC_CRYPTO &&
@@ -2097,8 +2074,7 @@
}
bool QuicPacketCreator::HasIetfLongHeader() const {
- return version().HasIetfInvariantHeader() &&
- packet_.encryption_level < ENCRYPTION_FORWARD_SECURE;
+ return packet_.encryption_level < ENCRYPTION_FORWARD_SECURE;
}
// static
diff --git a/quiche/quic/core/quic_packet_creator.h b/quiche/quic/core/quic_packet_creator.h
index 785efb1..8396b1c 100644
--- a/quiche/quic/core/quic_packet_creator.h
+++ b/quiche/quic/core/quic_packet_creator.h
@@ -119,9 +119,6 @@
~QuicPacketCreator();
- // Makes the framer not serialize the protocol version in sent packets.
- void StopSendingVersion();
-
// SetDiversificationNonce sets the nonce that will be sent in each public
// header of packets encrypted at the initial encryption level. Should only
// be called by servers.
@@ -622,10 +619,6 @@
QuicFramer* framer_;
QuicRandom* random_;
- // Controls whether version should be included while serializing the packet.
- // send_version_in_packet_ should never be read directly, use
- // IncludeVersionInHeader() instead.
- bool send_version_in_packet_;
// If true, then |diversification_nonce_| will be included in the header of
// all packets created at the initial encryption level.
bool have_diversification_nonce_;
diff --git a/quiche/quic/core/quic_packet_creator_test.cc b/quiche/quic/core/quic_packet_creator_test.cc
index b2fec7b..6ff1bc1 100644
--- a/quiche/quic/core/quic_packet_creator_test.cc
+++ b/quiche/quic/core/quic_packet_creator_test.cc
@@ -113,13 +113,7 @@
frame);
}
- void StopSendingVersion() {
- if (version_.HasIetfInvariantHeader()) {
- set_encryption_level(ENCRYPTION_FORWARD_SECURE);
- return;
- }
- QuicPacketCreator::StopSendingVersion();
- }
+ void StopSendingVersion() { set_encryption_level(ENCRYPTION_FORWARD_SECURE); }
SimpleDataProducer* producer_;
ParsedQuicVersion version_;
@@ -639,21 +633,6 @@
// clang-format off
unsigned char packet[] = {
- // public flags (8 byte connection_id)
- 0x2C,
- // connection_id
- 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10,
- // packet number
- 0x12, 0x34, 0x56, 0x78,
-
- // frame type (ping frame)
- 0x07,
- // frame type (padding frame)
- 0x00,
- 0x00, 0x00, 0x00, 0x00
- };
-
- unsigned char packet46[] = {
// type (short header, 4 byte packet number)
0x43,
// connection_id
@@ -689,9 +668,6 @@
if (creator_.version().HasIetfQuicFrames()) {
p = packet99;
packet_size = ABSL_ARRAYSIZE(packet99);
- } else if (creator_.version().HasIetfInvariantHeader()) {
- p = packet46;
- packet_size = ABSL_ARRAYSIZE(packet46);
}
std::unique_ptr<char[]> buffer(new char[kMaxOutgoingPacketSize]);
@@ -1162,8 +1138,7 @@
}
TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) {
- if (creator_.version().HasIetfInvariantHeader() &&
- !GetParam().version.SendsVariableLengthPacketNumberInLongHeader()) {
+ if (!GetParam().version.SendsVariableLengthPacketNumberInLongHeader()) {
EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
@@ -1200,8 +1175,7 @@
TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthCwnd) {
QuicPacketCreatorPeer::SetPacketNumber(&creator_, 1);
- if (creator_.version().HasIetfInvariantHeader() &&
- !GetParam().version.SendsVariableLengthPacketNumberInLongHeader()) {
+ if (!GetParam().version.SendsVariableLengthPacketNumberInLongHeader()) {
EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
@@ -1234,8 +1208,7 @@
TEST_P(QuicPacketCreatorTest, SkipNPacketNumbers) {
QuicPacketCreatorPeer::SetPacketNumber(&creator_, 1);
- if (creator_.version().HasIetfInvariantHeader() &&
- !GetParam().version.SendsVariableLengthPacketNumberInLongHeader()) {
+ if (!GetParam().version.SendsVariableLengthPacketNumberInLongHeader()) {
EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER,
QuicPacketCreatorPeer::GetPacketNumberLength(&creator_));
creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE);
@@ -1741,9 +1714,6 @@
}
TEST_P(QuicPacketCreatorTest, AddMessageFrame) {
- if (!VersionSupportsMessageFrames(client_framer_.transport_version())) {
- return;
- }
if (client_framer_.version().UsesTls()) {
creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
}
@@ -1794,9 +1764,6 @@
}
TEST_P(QuicPacketCreatorTest, MessageFrameConsumption) {
- if (!VersionSupportsMessageFrames(client_framer_.transport_version())) {
- return;
- }
if (client_framer_.version().UsesTls()) {
creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
}
@@ -1839,9 +1806,6 @@
TEST_P(QuicPacketCreatorTest, GetGuaranteedLargestMessagePayload) {
ParsedQuicVersion version = GetParam().version;
- if (!version.SupportsMessageFrames()) {
- return;
- }
if (version.UsesTls()) {
creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
}
@@ -1890,9 +1854,6 @@
TEST_P(QuicPacketCreatorTest, GetCurrentLargestMessagePayload) {
ParsedQuicVersion version = GetParam().version;
- if (!version.SupportsMessageFrames()) {
- return;
- }
if (version.UsesTls()) {
creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
}
@@ -2358,19 +2319,17 @@
EXPECT_EQ(previous_max_packet_length, creator_.max_packet_length());
// Same for message frame.
- if (VersionSupportsMessageFrames(client_framer_.transport_version())) {
- creator_.SetSoftMaxPacketLength(overhead);
- if (client_framer_.version().UsesTls()) {
- creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
- }
- // Verify GetCurrentLargestMessagePayload is based on the actual
- // max_packet_length.
- EXPECT_LT(1u, creator_.GetCurrentLargestMessagePayload());
- EXPECT_EQ(overhead, creator_.max_packet_length());
- ASSERT_TRUE(creator_.HasRoomForMessageFrame(
- creator_.GetCurrentLargestMessagePayload()));
- EXPECT_EQ(previous_max_packet_length, creator_.max_packet_length());
+ creator_.SetSoftMaxPacketLength(overhead);
+ if (client_framer_.version().UsesTls()) {
+ creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
}
+ // Verify GetCurrentLargestMessagePayload is based on the actual
+ // max_packet_length.
+ EXPECT_LT(1u, creator_.GetCurrentLargestMessagePayload());
+ EXPECT_EQ(overhead, creator_.max_packet_length());
+ ASSERT_TRUE(creator_.HasRoomForMessageFrame(
+ creator_.GetCurrentLargestMessagePayload()));
+ EXPECT_EQ(previous_max_packet_length, creator_.max_packet_length());
// Verify creator can consume crypto data because max_packet_length_ gets
// restored.
@@ -3438,11 +3397,7 @@
for (size_t i = 1; i < 10; i++) {
creator_.SetServerConnectionIdLength(i);
- if (framer_.version().HasIetfInvariantHeader()) {
- EXPECT_EQ(0, creator_.GetDestinationConnectionIdLength());
- } else {
- EXPECT_EQ(8, creator_.GetDestinationConnectionIdLength());
- }
+ EXPECT_EQ(0, creator_.GetDestinationConnectionIdLength());
}
}
@@ -3729,27 +3684,6 @@
CheckPacketHasSingleStreamFrame(4);
}
-TEST_F(QuicPacketCreatorMultiplePacketsTest, DontCrashOnInvalidStopWaiting) {
- if (VersionSupportsMessageFrames(framer_.transport_version())) {
- return;
- }
- // Test added to ensure the creator does not crash when an invalid frame is
- // added. Because this is an indication of internal programming errors,
- // DFATALs are expected.
- // A 1 byte packet number length can't encode a gap of 1000.
- QuicPacketCreatorPeer::SetPacketNumber(&creator_, 1000);
-
- delegate_.SetCanNotWrite();
- delegate_.SetCanWriteAnything();
-
- // This will not serialize any packets, because of the invalid frame.
- EXPECT_CALL(delegate_,
- OnUnrecoverableError(QUIC_FAILED_TO_SERIALIZE_PACKET, _));
- EXPECT_QUIC_BUG(creator_.Flush(),
- "packet_number_length 1 is too small "
- "for least_unacked_delta: 1001");
-}
-
// Regression test for b/31486443.
TEST_F(QuicPacketCreatorMultiplePacketsTest,
ConnectionCloseFrameLargerThanPacketSize) {
@@ -3926,9 +3860,6 @@
}
TEST_F(QuicPacketCreatorMultiplePacketsTest, AddMessageFrame) {
- if (!VersionSupportsMessageFrames(framer_.transport_version())) {
- return;
- }
if (framer_.version().UsesTls()) {
creator_.SetMaxDatagramFrameSize(kMaxAcceptedDatagramFrameSize);
}
diff --git a/quiche/quic/core/quic_packets.cc b/quiche/quic/core/quic_packets.cc
index 39e7eaf..2262877 100644
--- a/quiche/quic/core/quic_packets.cc
+++ b/quiche/quic/core/quic_packets.cc
@@ -106,38 +106,29 @@
quiche::QuicheVariableLengthIntegerLength retry_token_length_length,
QuicByteCount retry_token_length,
quiche::QuicheVariableLengthIntegerLength length_length) {
- if (VersionHasIetfInvariantHeader(version)) {
- if (include_version) {
- // Long header.
- size_t size = kPacketHeaderTypeSize + kConnectionIdLengthSize +
- destination_connection_id_length +
- source_connection_id_length + packet_number_length +
- kQuicVersionSize;
- if (include_diversification_nonce) {
- size += kDiversificationNonceSize;
- }
- if (VersionHasLengthPrefixedConnectionIds(version)) {
- size += kConnectionIdLengthSize;
- }
- QUICHE_DCHECK(
- QuicVersionHasLongHeaderLengths(version) ||
- retry_token_length_length + retry_token_length + length_length == 0);
- if (QuicVersionHasLongHeaderLengths(version)) {
- size += retry_token_length_length + retry_token_length + length_length;
- }
- return size;
+ if (include_version) {
+ // Long header.
+ size_t size = kPacketHeaderTypeSize + kConnectionIdLengthSize +
+ destination_connection_id_length +
+ source_connection_id_length + packet_number_length +
+ kQuicVersionSize;
+ if (include_diversification_nonce) {
+ size += kDiversificationNonceSize;
}
- // Short header.
- return kPacketHeaderTypeSize + destination_connection_id_length +
- packet_number_length;
+ if (VersionHasLengthPrefixedConnectionIds(version)) {
+ size += kConnectionIdLengthSize;
+ }
+ QUICHE_DCHECK(
+ QuicVersionHasLongHeaderLengths(version) ||
+ retry_token_length_length + retry_token_length + length_length == 0);
+ if (QuicVersionHasLongHeaderLengths(version)) {
+ size += retry_token_length_length + retry_token_length + length_length;
+ }
+ return size;
}
- // Google QUIC versions <= 43 can only carry one connection ID.
- QUICHE_DCHECK(destination_connection_id_length == 0 ||
- source_connection_id_length == 0);
- return kPublicFlagsSize + destination_connection_id_length +
- source_connection_id_length +
- (include_version ? kQuicVersionSize : 0) + packet_number_length +
- (include_diversification_nonce ? kDiversificationNonceSize : 0);
+ // Short header.
+ return kPacketHeaderTypeSize + destination_connection_id_length +
+ packet_number_length;
}
size_t GetStartOfEncryptedData(QuicTransportVersion version,
diff --git a/quiche/quic/core/quic_received_packet_manager.h b/quiche/quic/core/quic_received_packet_manager.h
index ab298d4..0f80865 100644
--- a/quiche/quic/core/quic_received_packet_manager.h
+++ b/quiche/quic/core/quic_received_packet_manager.h
@@ -80,10 +80,6 @@
// packets of the largest observed.
virtual bool HasNewMissingPackets() const;
- QuicPacketNumber peer_least_packet_awaiting_ack() const {
- return peer_least_packet_awaiting_ack_;
- }
-
virtual bool ack_frame_updated() const;
QuicPacketNumber GetLargestObserved() const;
diff --git a/quiche/quic/core/quic_time_wait_list_manager_test.cc b/quiche/quic/core/quic_time_wait_list_manager_test.cc
index 9567519..eef0b99 100644
--- a/quiche/quic/core/quic_time_wait_list_manager_test.cc
+++ b/quiche/quic/core/quic_time_wait_list_manager_test.cc
@@ -49,14 +49,6 @@
: connection_id_(connection_id) {}
~FramerVisitorCapturingPublicReset() override = default;
- void OnPublicResetPacket(const QuicPublicResetPacket& public_reset) override {
- public_reset_packet_ = public_reset;
- }
-
- const QuicPublicResetPacket public_reset_packet() {
- return public_reset_packet_;
- }
-
bool IsValidStatelessResetToken(
const StatelessResetToken& token) const override {
return token == QuicUtils::GenerateStatelessResetToken(connection_id_);
@@ -72,7 +64,6 @@
}
private:
- QuicPublicResetPacket public_reset_packet_;
QuicIetfStatelessResetPacket stateless_reset_packet_;
QuicConnectionId connection_id_;
};
@@ -144,7 +135,7 @@
void AddConnectionId(QuicConnectionId connection_id,
QuicTimeWaitListManager::TimeWaitAction action) {
- AddConnectionId(connection_id, QuicVersionMax(), action, nullptr);
+ AddConnectionId(connection_id, action, nullptr);
}
void AddStatelessConnectionId(QuicConnectionId connection_id) {
@@ -157,12 +148,12 @@
}
void AddConnectionId(
- QuicConnectionId connection_id, ParsedQuicVersion version,
+ QuicConnectionId connection_id,
QuicTimeWaitListManager::TimeWaitAction action,
std::vector<std::unique_ptr<QuicEncryptedPacket>>* packets) {
time_wait_list_manager_.AddConnectionIdToTimeWait(
- action, TimeWaitConnectionInfo(version.HasIetfInvariantHeader(),
- packets, {connection_id}));
+ action,
+ TimeWaitConnectionInfo(/*ietf_quic=*/true, packets, {connection_id}));
}
bool IsConnectionIdInTimeWait(QuicConnectionId connection_id) {
@@ -204,11 +195,6 @@
QuicEncryptedPacket encrypted(std::get<0>(packet_buffer),
std::get<1>(packet_buffer));
framer.ProcessPacket(encrypted);
- QuicPublicResetPacket packet = visitor.public_reset_packet();
- bool public_reset_is_valid =
- expected_connection_id == packet.connection_id &&
- TestPeerIPAddress() == packet.client_address.host() &&
- kTestPort == packet.client_address.port();
QuicIetfStatelessResetPacket stateless_reset =
visitor.stateless_reset_packet();
@@ -216,10 +202,8 @@
StatelessResetToken expected_stateless_reset_token =
QuicUtils::GenerateStatelessResetToken(expected_connection_id);
- bool stateless_reset_is_valid =
- stateless_reset.stateless_reset_token == expected_stateless_reset_token;
-
- return public_reset_is_valid || stateless_reset_is_valid;
+ return stateless_reset.stateless_reset_token ==
+ expected_stateless_reset_token;
}
Matcher<const std::tuple<const char*, int>> PublicResetPacketEq(
@@ -319,7 +303,7 @@
termination_packets.push_back(
std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
new char[kConnectionCloseLength], kConnectionCloseLength, true)));
- AddConnectionId(connection_id_, QuicVersionMax(),
+ AddConnectionId(connection_id_,
QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS,
&termination_packets);
EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
@@ -339,7 +323,7 @@
termination_packets.push_back(
std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
new char[kConnectionCloseLength], kConnectionCloseLength, true)));
- AddConnectionId(connection_id_, QuicVersionMax(),
+ AddConnectionId(connection_id_,
QuicTimeWaitListManager::SEND_CONNECTION_CLOSE_PACKETS,
&termination_packets);
EXPECT_CALL(writer_, WritePacket(_, kConnectionCloseLength,
@@ -536,7 +520,7 @@
termination_packets.push_back(
std::unique_ptr<QuicEncryptedPacket>(new QuicEncryptedPacket(
new char[kConnectionCloseLength], kConnectionCloseLength, true)));
- AddConnectionId(connection_id_, QuicVersionMax(),
+ AddConnectionId(connection_id_,
QuicTimeWaitListManager::SEND_TERMINATION_PACKETS,
&termination_packets);
EXPECT_TRUE(IsConnectionIdInTimeWait(connection_id_));
diff --git a/quiche/quic/core/quic_utils_test.cc b/quiche/quic/core/quic_utils_test.cc
index 543c8ea..a391cc2 100644
--- a/quiche/quic/core/quic_utils_test.cc
+++ b/quiche/quic/core/quic_utils_test.cc
@@ -204,17 +204,17 @@
}
TEST_F(QuicUtilsTest, VariableLengthConnectionId) {
- EXPECT_FALSE(VersionAllowsVariableLengthConnectionIds(QUIC_VERSION_43));
+ EXPECT_FALSE(VersionAllowsVariableLengthConnectionIds(QUIC_VERSION_46));
EXPECT_TRUE(QuicUtils::IsConnectionIdValidForVersion(
- QuicUtils::CreateZeroConnectionId(QUIC_VERSION_43), QUIC_VERSION_43));
+ QuicUtils::CreateZeroConnectionId(QUIC_VERSION_46), QUIC_VERSION_46));
EXPECT_TRUE(QuicUtils::IsConnectionIdValidForVersion(
QuicUtils::CreateZeroConnectionId(QUIC_VERSION_50), QUIC_VERSION_50));
- EXPECT_NE(QuicUtils::CreateZeroConnectionId(QUIC_VERSION_43),
+ EXPECT_NE(QuicUtils::CreateZeroConnectionId(QUIC_VERSION_46),
EmptyQuicConnectionId());
EXPECT_EQ(QuicUtils::CreateZeroConnectionId(QUIC_VERSION_50),
EmptyQuicConnectionId());
EXPECT_FALSE(QuicUtils::IsConnectionIdValidForVersion(EmptyQuicConnectionId(),
- QUIC_VERSION_43));
+ QUIC_VERSION_46));
}
TEST_F(QuicUtilsTest, StatelessResetToken) {
diff --git a/quiche/quic/core/quic_version_manager.cc b/quiche/quic/core/quic_version_manager.cc
index ec2b9ef..91404ed 100644
--- a/quiche/quic/core/quic_version_manager.cc
+++ b/quiche/quic/core/quic_version_manager.cc
@@ -36,7 +36,7 @@
}
void QuicVersionManager::MaybeRefilterSupportedVersions() {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
if (enable_version_2_draft_08_ !=
GetQuicReloadableFlag(quic_enable_version_2_draft_08) ||
@@ -47,9 +47,7 @@
disable_version_q050_ !=
GetQuicReloadableFlag(quic_disable_version_q050) ||
disable_version_q046_ !=
- GetQuicReloadableFlag(quic_disable_version_q046) ||
- disable_version_q043_ !=
- GetQuicReloadableFlag(quic_disable_version_q043)) {
+ GetQuicReloadableFlag(quic_disable_version_q046)) {
enable_version_2_draft_08_ =
GetQuicReloadableFlag(quic_enable_version_2_draft_08);
disable_version_rfcv1_ = GetQuicReloadableFlag(quic_disable_version_rfcv1);
@@ -57,7 +55,6 @@
GetQuicReloadableFlag(quic_disable_version_draft_29);
disable_version_q050_ = GetQuicReloadableFlag(quic_disable_version_q050);
disable_version_q046_ = GetQuicReloadableFlag(quic_disable_version_q046);
- disable_version_q043_ = GetQuicReloadableFlag(quic_disable_version_q043);
RefilterSupportedVersions();
}
diff --git a/quiche/quic/core/quic_version_manager.h b/quiche/quic/core/quic_version_manager.h
index c664fc4..5beee79 100644
--- a/quiche/quic/core/quic_version_manager.h
+++ b/quiche/quic/core/quic_version_manager.h
@@ -65,8 +65,6 @@
bool disable_version_q050_ = true;
// quic_disable_version_q046 flag
bool disable_version_q046_ = true;
- // quic_disable_version_q043 flag
- bool disable_version_q043_ = true;
// The list of versions that may be supported.
const ParsedQuicVersionVector allowed_supported_versions_;
diff --git a/quiche/quic/core/quic_version_manager_test.cc b/quiche/quic/core/quic_version_manager_test.cc
index 3c3a00e..d9ae2b6 100644
--- a/quiche/quic/core/quic_version_manager_test.cc
+++ b/quiche/quic/core/quic_version_manager_test.cc
@@ -18,7 +18,7 @@
class QuicVersionManagerTest : public QuicTest {};
TEST_F(QuicVersionManagerTest, QuicVersionManager) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
for (const ParsedQuicVersion& version : AllSupportedVersions()) {
QuicEnableVersion(version);
@@ -31,15 +31,13 @@
ParsedQuicVersionVector expected_parsed_versions;
expected_parsed_versions.push_back(ParsedQuicVersion::Q050());
expected_parsed_versions.push_back(ParsedQuicVersion::Q046());
- expected_parsed_versions.push_back(ParsedQuicVersion::Q043());
EXPECT_EQ(expected_parsed_versions, manager.GetSupportedVersions());
EXPECT_EQ(FilterSupportedVersions(AllSupportedVersions()),
manager.GetSupportedVersions());
EXPECT_TRUE(manager.GetSupportedVersionsWithOnlyHttp3().empty());
- EXPECT_THAT(manager.GetSupportedAlpns(),
- ElementsAre("h3-Q050", "h3-Q046", "h3-Q043"));
+ EXPECT_THAT(manager.GetSupportedAlpns(), ElementsAre("h3-Q050", "h3-Q046"));
QuicEnableVersion(ParsedQuicVersion::Draft29());
expected_parsed_versions.insert(expected_parsed_versions.begin(),
@@ -51,7 +49,7 @@
EXPECT_EQ(CurrentSupportedHttp3Versions(),
manager.GetSupportedVersionsWithOnlyHttp3());
EXPECT_THAT(manager.GetSupportedAlpns(),
- ElementsAre("h3-29", "h3-Q050", "h3-Q046", "h3-Q043"));
+ ElementsAre("h3-29", "h3-Q050", "h3-Q046"));
QuicEnableVersion(ParsedQuicVersion::RFCv1());
expected_parsed_versions.insert(expected_parsed_versions.begin(),
@@ -63,7 +61,7 @@
EXPECT_EQ(CurrentSupportedHttp3Versions(),
manager.GetSupportedVersionsWithOnlyHttp3());
EXPECT_THAT(manager.GetSupportedAlpns(),
- ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046", "h3-Q043"));
+ ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046"));
QuicEnableVersion(ParsedQuicVersion::V2Draft08());
expected_parsed_versions.insert(expected_parsed_versions.begin(),
@@ -75,7 +73,7 @@
EXPECT_EQ(CurrentSupportedHttp3Versions(),
manager.GetSupportedVersionsWithOnlyHttp3());
EXPECT_THAT(manager.GetSupportedAlpns(),
- ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046", "h3-Q043"));
+ ElementsAre("h3", "h3-29", "h3-Q050", "h3-Q046"));
}
} // namespace
diff --git a/quiche/quic/core/quic_versions.cc b/quiche/quic/core/quic_versions.cc
index 1f03b70..fd3f6af 100644
--- a/quiche/quic/core/quic_versions.cc
+++ b/quiche/quic/core/quic_versions.cc
@@ -36,7 +36,7 @@
}
void SetVersionFlag(const ParsedQuicVersion& version, bool should_enable) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
const bool enable = should_enable;
const bool disable = !should_enable;
@@ -50,8 +50,6 @@
SetQuicReloadableFlag(quic_disable_version_q050, disable);
} else if (version == ParsedQuicVersion::Q046()) {
SetQuicReloadableFlag(quic_disable_version_q046, disable);
- } else if (version == ParsedQuicVersion::Q043()) {
- SetQuicReloadableFlag(quic_disable_version_q043, disable);
} else {
QUIC_BUG(quic_bug_10589_1)
<< "Cannot " << (enable ? "en" : "dis") << "able version " << version;
@@ -133,16 +131,6 @@
return VersionSupportsGoogleAltSvcFormat(transport_version);
}
-bool ParsedQuicVersion::HasIetfInvariantHeader() const {
- QUICHE_DCHECK(IsKnown());
- return VersionHasIetfInvariantHeader(transport_version);
-}
-
-bool ParsedQuicVersion::SupportsMessageFrames() const {
- QUICHE_DCHECK(IsKnown());
- return VersionSupportsMessageFrames(transport_version);
-}
-
bool ParsedQuicVersion::UsesHttp3() const {
QUICHE_DCHECK(IsKnown());
return VersionUsesHttp3(transport_version);
@@ -223,7 +211,7 @@
}
QuicVersionLabel CreateQuicVersionLabel(ParsedQuicVersion parsed_version) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
if (parsed_version == ParsedQuicVersion::V2Draft08()) {
return MakeVersionLabel(0x6b, 0x33, 0x43, 0xcf);
@@ -235,8 +223,6 @@
return MakeVersionLabel('Q', '0', '5', '0');
} else if (parsed_version == ParsedQuicVersion::Q046()) {
return MakeVersionLabel('Q', '0', '4', '6');
- } else if (parsed_version == ParsedQuicVersion::Q043()) {
- return MakeVersionLabel('Q', '0', '4', '3');
} else if (parsed_version == ParsedQuicVersion::ReservedForNegotiation()) {
return CreateRandomVersionLabelForNegotiation();
}
@@ -424,7 +410,7 @@
ParsedQuicVersionVector FilterSupportedVersions(
ParsedQuicVersionVector versions) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
ParsedQuicVersionVector filtered_versions;
filtered_versions.reserve(versions.size());
@@ -449,10 +435,6 @@
if (!GetQuicReloadableFlag(quic_disable_version_q046)) {
filtered_versions.push_back(version);
}
- } else if (version == ParsedQuicVersion::Q043()) {
- if (!GetQuicReloadableFlag(quic_disable_version_q043)) {
- filtered_versions.push_back(version);
- }
} else {
QUIC_BUG(quic_bug_10589_7)
<< "QUIC version " << version << " has no flag protection";
@@ -514,7 +496,6 @@
std::string QuicVersionToString(QuicTransportVersion transport_version) {
switch (transport_version) {
- RETURN_STRING_LITERAL(QUIC_VERSION_43);
RETURN_STRING_LITERAL(QUIC_VERSION_46);
RETURN_STRING_LITERAL(QUIC_VERSION_50);
RETURN_STRING_LITERAL(QUIC_VERSION_IETF_DRAFT_29);
@@ -538,7 +519,7 @@
}
std::string ParsedQuicVersionToString(ParsedQuicVersion version) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
if (version == UnsupportedQuicVersion()) {
return "0";
@@ -604,8 +585,8 @@
// and Google QUIC 49 and later use the new length prefixed encoding.
// Similarly, only IETF drafts 11 to 21 used this encoding.
- // Check Q044, Q045, Q046, Q047 and Q048.
- for (uint8_t c = '4'; c <= '8'; ++c) {
+ // Check Q043, Q044, Q045, Q046, Q047 and Q048.
+ for (uint8_t c = '3'; c <= '8'; ++c) {
if (version_label == MakeVersionLabel('Q', '0', '4', c)) {
return true;
}
diff --git a/quiche/quic/core/quic_versions.h b/quiche/quic/core/quic_versions.h
index a8cfab3..8129d9a 100644
--- a/quiche/quic/core/quic_versions.h
+++ b/quiche/quic/core/quic_versions.h
@@ -106,8 +106,7 @@
// or v41 are present in subsequent versions.
// Version 42 allowed receiving overlapping stream data.
- QUIC_VERSION_43 = 43, // PRIORITY frames are sent by client and accepted by
- // server.
+ // Version 43 PRIORITY frames are sent by client and accepted by server.
// Version 44 used IETF header format from draft-ietf-quic-invariants-05.
// Version 45 added MESSAGE frame.
@@ -166,8 +165,8 @@
}
// Returns whether this combination of handshake protocol and transport
-// version is allowed. For example, {PROTOCOL_TLS1_3, QUIC_VERSION_43} is NOT
-// allowed as TLS requires crypto frames which v43 does not support. Note that
+// version is allowed. For example, {PROTOCOL_TLS1_3, QUIC_VERSION_46} is NOT
+// allowed as TLS requires crypto frames which v46 does not support. Note that
// UnsupportedQuicVersion is a valid version.
QUIC_EXPORT_PRIVATE constexpr bool ParsedQuicVersionIsValid(
HandshakeProtocol handshake_protocol,
@@ -179,7 +178,6 @@
QUIC_VERSION_IETF_DRAFT_29,
QUIC_VERSION_50,
QUIC_VERSION_46,
- QUIC_VERSION_43,
QUIC_VERSION_RESERVED_FOR_NEGOTIATION,
QUIC_VERSION_UNSUPPORTED,
};
@@ -270,10 +268,6 @@
return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_46);
}
- static constexpr ParsedQuicVersion Q043() {
- return ParsedQuicVersion(PROTOCOL_QUIC_CRYPTO, QUIC_VERSION_43);
- }
-
static constexpr ParsedQuicVersion Unsupported() {
return ParsedQuicVersion(PROTOCOL_UNSUPPORTED, QUIC_VERSION_UNSUPPORTED);
}
@@ -333,12 +327,6 @@
// advertisement format.
bool SupportsGoogleAltSvcFormat() const;
- // Returns true if |transport_version| uses IETF invariant headers.
- bool HasIetfInvariantHeader() const;
-
- // Returns true if |transport_version| supports MESSAGE frames.
- bool SupportsMessageFrames() const;
-
// If true, HTTP/3 instead of gQUIC will be used at the HTTP layer.
// Notable changes are:
// * Headers stream no longer exists.
@@ -410,11 +398,11 @@
return {PROTOCOL_TLS1_3, PROTOCOL_QUIC_CRYPTO};
}
-constexpr std::array<ParsedQuicVersion, 6> SupportedVersions() {
+constexpr std::array<ParsedQuicVersion, 5> SupportedVersions() {
return {
ParsedQuicVersion::V2Draft08(), ParsedQuicVersion::RFCv1(),
ParsedQuicVersion::Draft29(), ParsedQuicVersion::Q050(),
- ParsedQuicVersion::Q046(), ParsedQuicVersion::Q043(),
+ ParsedQuicVersion::Q046(),
};
}
@@ -563,19 +551,6 @@
std::numeric_limits<size_t>::max());
}
-// Returns true if |transport_version| uses IETF invariant headers.
-QUIC_EXPORT_PRIVATE constexpr bool VersionHasIetfInvariantHeader(
- QuicTransportVersion transport_version) {
- return transport_version > QUIC_VERSION_43;
-}
-
-// Returns true if |transport_version| supports MESSAGE frames.
-QUIC_EXPORT_PRIVATE constexpr bool VersionSupportsMessageFrames(
- QuicTransportVersion transport_version) {
- // MESSAGE frames were added in version 45.
- return transport_version > QUIC_VERSION_43;
-}
-
// If true, HTTP/3 instead of gQUIC will be used at the HTTP layer.
// Notable changes are:
// * Headers stream no longer exists.
diff --git a/quiche/quic/core/quic_versions_test.cc b/quiche/quic/core/quic_versions_test.cc
index 745b58a..49335e3 100644
--- a/quiche/quic/core/quic_versions_test.cc
+++ b/quiche/quic/core/quic_versions_test.cc
@@ -38,7 +38,7 @@
EXPECT_TRUE(ParsedQuicVersionIsValid(reserved.handshake_protocol,
reserved.transport_version));
// Check that invalid combinations are not valid.
- EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_TLS1_3, QUIC_VERSION_43));
+ EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_TLS1_3, QUIC_VERSION_46));
EXPECT_FALSE(ParsedQuicVersionIsValid(PROTOCOL_QUIC_CRYPTO,
QUIC_VERSION_IETF_DRAFT_29));
// Check that deprecated versions are not valid.
@@ -51,31 +51,29 @@
}
TEST(QuicVersionsTest, Features) {
- ParsedQuicVersion parsed_version_q043 = ParsedQuicVersion::Q043();
+ ParsedQuicVersion parsed_version_q046 = ParsedQuicVersion::Q046();
ParsedQuicVersion parsed_version_draft_29 = ParsedQuicVersion::Draft29();
- EXPECT_TRUE(parsed_version_q043.IsKnown());
- EXPECT_FALSE(parsed_version_q043.KnowsWhichDecrypterToUse());
- EXPECT_FALSE(parsed_version_q043.UsesInitialObfuscators());
- EXPECT_FALSE(parsed_version_q043.AllowsLowFlowControlLimits());
- EXPECT_FALSE(parsed_version_q043.HasHeaderProtection());
- EXPECT_FALSE(parsed_version_q043.SupportsRetry());
+ EXPECT_TRUE(parsed_version_q046.IsKnown());
+ EXPECT_FALSE(parsed_version_q046.KnowsWhichDecrypterToUse());
+ EXPECT_FALSE(parsed_version_q046.UsesInitialObfuscators());
+ EXPECT_FALSE(parsed_version_q046.AllowsLowFlowControlLimits());
+ EXPECT_FALSE(parsed_version_q046.HasHeaderProtection());
+ EXPECT_FALSE(parsed_version_q046.SupportsRetry());
EXPECT_FALSE(
- parsed_version_q043.SendsVariableLengthPacketNumberInLongHeader());
- EXPECT_FALSE(parsed_version_q043.AllowsVariableLengthConnectionIds());
- EXPECT_FALSE(parsed_version_q043.SupportsClientConnectionIds());
- EXPECT_FALSE(parsed_version_q043.HasLengthPrefixedConnectionIds());
- EXPECT_FALSE(parsed_version_q043.SupportsAntiAmplificationLimit());
- EXPECT_FALSE(parsed_version_q043.CanSendCoalescedPackets());
- EXPECT_TRUE(parsed_version_q043.SupportsGoogleAltSvcFormat());
- EXPECT_FALSE(parsed_version_q043.HasIetfInvariantHeader());
- EXPECT_FALSE(parsed_version_q043.SupportsMessageFrames());
- EXPECT_FALSE(parsed_version_q043.UsesHttp3());
- EXPECT_FALSE(parsed_version_q043.HasLongHeaderLengths());
- EXPECT_FALSE(parsed_version_q043.UsesCryptoFrames());
- EXPECT_FALSE(parsed_version_q043.HasIetfQuicFrames());
- EXPECT_FALSE(parsed_version_q043.UsesTls());
- EXPECT_TRUE(parsed_version_q043.UsesQuicCrypto());
+ parsed_version_q046.SendsVariableLengthPacketNumberInLongHeader());
+ EXPECT_FALSE(parsed_version_q046.AllowsVariableLengthConnectionIds());
+ EXPECT_FALSE(parsed_version_q046.SupportsClientConnectionIds());
+ EXPECT_FALSE(parsed_version_q046.HasLengthPrefixedConnectionIds());
+ EXPECT_FALSE(parsed_version_q046.SupportsAntiAmplificationLimit());
+ EXPECT_FALSE(parsed_version_q046.CanSendCoalescedPackets());
+ EXPECT_TRUE(parsed_version_q046.SupportsGoogleAltSvcFormat());
+ EXPECT_FALSE(parsed_version_q046.UsesHttp3());
+ EXPECT_FALSE(parsed_version_q046.HasLongHeaderLengths());
+ EXPECT_FALSE(parsed_version_q046.UsesCryptoFrames());
+ EXPECT_FALSE(parsed_version_q046.HasIetfQuicFrames());
+ EXPECT_FALSE(parsed_version_q046.UsesTls());
+ EXPECT_TRUE(parsed_version_q046.UsesQuicCrypto());
EXPECT_TRUE(parsed_version_draft_29.IsKnown());
EXPECT_TRUE(parsed_version_draft_29.KnowsWhichDecrypterToUse());
@@ -91,8 +89,6 @@
EXPECT_TRUE(parsed_version_draft_29.SupportsAntiAmplificationLimit());
EXPECT_TRUE(parsed_version_draft_29.CanSendCoalescedPackets());
EXPECT_FALSE(parsed_version_draft_29.SupportsGoogleAltSvcFormat());
- EXPECT_TRUE(parsed_version_draft_29.HasIetfInvariantHeader());
- EXPECT_TRUE(parsed_version_draft_29.SupportsMessageFrames());
EXPECT_TRUE(parsed_version_draft_29.UsesHttp3());
EXPECT_TRUE(parsed_version_draft_29.HasLongHeaderLengths());
EXPECT_TRUE(parsed_version_draft_29.UsesCryptoFrames());
@@ -102,10 +98,8 @@
}
TEST(QuicVersionsTest, ParseQuicVersionLabel) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- EXPECT_EQ(ParsedQuicVersion::Q043(),
- ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '3')));
EXPECT_EQ(ParsedQuicVersion::Q046(),
ParseQuicVersionLabel(MakeVersionLabel('Q', '0', '4', '6')));
EXPECT_EQ(ParsedQuicVersion::Q050(),
@@ -131,9 +125,8 @@
}
TEST(QuicVersionsTest, ParseQuicVersionString) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- EXPECT_EQ(ParsedQuicVersion::Q043(), ParseQuicVersionString("Q043"));
EXPECT_EQ(ParsedQuicVersion::Q046(),
ParseQuicVersionString("QUIC_VERSION_46"));
EXPECT_EQ(ParsedQuicVersion::Q046(), ParseQuicVersionString("46"));
@@ -224,9 +217,8 @@
// CreateQuicVersionLabel() uses MakeVersionLabel() internally,
// in case it has a bug.
TEST(QuicVersionsTest, CreateQuicVersionLabel) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- EXPECT_EQ(0x51303433u, CreateQuicVersionLabel(ParsedQuicVersion::Q043()));
EXPECT_EQ(0x51303436u, CreateQuicVersionLabel(ParsedQuicVersion::Q046()));
EXPECT_EQ(0x51303530u, CreateQuicVersionLabel(ParsedQuicVersion::Q050()));
EXPECT_EQ(0xff00001du, CreateQuicVersionLabel(ParsedQuicVersion::Draft29()));
@@ -247,10 +239,8 @@
}
TEST(QuicVersionsTest, QuicVersionLabelToString) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- EXPECT_EQ("Q043", QuicVersionLabelToString(
- CreateQuicVersionLabel(ParsedQuicVersion::Q043())));
EXPECT_EQ("Q046", QuicVersionLabelToString(
CreateQuicVersionLabel(ParsedQuicVersion::Q046())));
EXPECT_EQ("Q050", QuicVersionLabelToString(
@@ -285,10 +275,9 @@
}
TEST(QuicVersionsTest, ParseQuicVersionLabelString) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
// Explicitly test known QUIC version label strings.
- EXPECT_EQ(ParsedQuicVersion::Q043(), ParseQuicVersionLabelString("Q043"));
EXPECT_EQ(ParsedQuicVersion::Q046(), ParseQuicVersionLabelString("Q046"));
EXPECT_EQ(ParsedQuicVersion::Q050(), ParseQuicVersionLabelString("Q050"));
EXPECT_EQ(ParsedQuicVersion::Draft29(),
@@ -318,21 +307,21 @@
EXPECT_EQ("QUIC_VERSION_UNSUPPORTED",
QuicVersionToString(QUIC_VERSION_UNSUPPORTED));
- QuicTransportVersion single_version[] = {QUIC_VERSION_43};
+ QuicTransportVersion single_version[] = {QUIC_VERSION_46};
QuicTransportVersionVector versions_vector;
for (size_t i = 0; i < ABSL_ARRAYSIZE(single_version); ++i) {
versions_vector.push_back(single_version[i]);
}
- EXPECT_EQ("QUIC_VERSION_43",
+ EXPECT_EQ("QUIC_VERSION_46",
QuicTransportVersionVectorToString(versions_vector));
QuicTransportVersion multiple_versions[] = {QUIC_VERSION_UNSUPPORTED,
- QUIC_VERSION_43};
+ QUIC_VERSION_46};
versions_vector.clear();
for (size_t i = 0; i < ABSL_ARRAYSIZE(multiple_versions); ++i) {
versions_vector.push_back(multiple_versions[i]);
}
- EXPECT_EQ("QUIC_VERSION_UNSUPPORTED,QUIC_VERSION_43",
+ EXPECT_EQ("QUIC_VERSION_UNSUPPORTED,QUIC_VERSION_46",
QuicTransportVersionVectorToString(versions_vector));
// Make sure that all supported versions are present in QuicVersionToString.
@@ -343,12 +332,11 @@
std::ostringstream os;
os << versions_vector;
- EXPECT_EQ("QUIC_VERSION_UNSUPPORTED,QUIC_VERSION_43", os.str());
+ EXPECT_EQ("QUIC_VERSION_UNSUPPORTED,QUIC_VERSION_46", os.str());
}
TEST(QuicVersionsTest, ParsedQuicVersionToString) {
EXPECT_EQ("0", ParsedQuicVersionToString(ParsedQuicVersion::Unsupported()));
- EXPECT_EQ("Q043", ParsedQuicVersionToString(ParsedQuicVersion::Q043()));
EXPECT_EQ("Q046", ParsedQuicVersionToString(ParsedQuicVersion::Q046()));
EXPECT_EQ("Q050", ParsedQuicVersionToString(ParsedQuicVersion::Q050()));
EXPECT_EQ("draft29", ParsedQuicVersionToString(ParsedQuicVersion::Draft29()));
@@ -356,13 +344,13 @@
EXPECT_EQ("V2Draft08",
ParsedQuicVersionToString(ParsedQuicVersion::V2Draft08()));
- ParsedQuicVersionVector versions_vector = {ParsedQuicVersion::Q043()};
- EXPECT_EQ("Q043", ParsedQuicVersionVectorToString(versions_vector));
+ ParsedQuicVersionVector versions_vector = {ParsedQuicVersion::Q046()};
+ EXPECT_EQ("Q046", ParsedQuicVersionVectorToString(versions_vector));
versions_vector = {ParsedQuicVersion::Unsupported(),
- ParsedQuicVersion::Q043()};
- EXPECT_EQ("0,Q043", ParsedQuicVersionVectorToString(versions_vector));
- EXPECT_EQ("0:Q043", ParsedQuicVersionVectorToString(versions_vector, ":",
+ ParsedQuicVersion::Q046()};
+ EXPECT_EQ("0,Q046", ParsedQuicVersionVectorToString(versions_vector));
+ EXPECT_EQ("0:Q046", ParsedQuicVersionVectorToString(versions_vector, ":",
versions_vector.size()));
EXPECT_EQ("0|...", ParsedQuicVersionVectorToString(versions_vector, "|", 0));
@@ -374,7 +362,7 @@
std::ostringstream os;
os << versions_vector;
- EXPECT_EQ("0,Q043", os.str());
+ EXPECT_EQ("0,Q046", os.str());
}
TEST(QuicVersionsTest, FilterSupportedVersionsAllVersions) {
@@ -421,9 +409,8 @@
// yet a typo was made in doing the #defines and it was caught
// only in some test far removed from here... Better safe than sorry.
TEST(QuicVersionsTest, CheckTransportVersionNumbersForTypos) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- EXPECT_EQ(QUIC_VERSION_43, 43);
EXPECT_EQ(QUIC_VERSION_46, 46);
EXPECT_EQ(QUIC_VERSION_50, 50);
EXPECT_EQ(QUIC_VERSION_IETF_DRAFT_29, 73);
@@ -432,9 +419,8 @@
}
TEST(QuicVersionsTest, AlpnForVersion) {
- static_assert(SupportedVersions().size() == 6u,
+ static_assert(SupportedVersions().size() == 5u,
"Supported versions out of sync");
- EXPECT_EQ("h3-Q043", AlpnForVersion(ParsedQuicVersion::Q043()));
EXPECT_EQ("h3-Q046", AlpnForVersion(ParsedQuicVersion::Q046()));
EXPECT_EQ("h3-Q050", AlpnForVersion(ParsedQuicVersion::Q050()));
EXPECT_EQ("h3-29", AlpnForVersion(ParsedQuicVersion::Draft29()));
diff --git a/quiche/quic/core/tls_chlo_extractor.h b/quiche/quic/core/tls_chlo_extractor.h
index d8c6b55..f24023b 100644
--- a/quiche/quic/core/tls_chlo_extractor.h
+++ b/quiche/quic/core/tls_chlo_extractor.h
@@ -77,7 +77,6 @@
void OnError(QuicFramer* /*framer*/) override {}
bool OnProtocolVersionMismatch(ParsedQuicVersion version) override;
void OnPacket() override {}
- void OnPublicResetPacket(const QuicPublicResetPacket& /*packet*/) override {}
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& /*packet*/) override {}
void OnRetryPacket(QuicConnectionId /*original_connection_id*/,
diff --git a/quiche/quic/core/uber_received_packet_manager.cc b/quiche/quic/core/uber_received_packet_manager.cc
index 4efe788..ccfbc28 100644
--- a/quiche/quic/core/uber_received_packet_manager.cc
+++ b/quiche/quic/core/uber_received_packet_manager.cc
@@ -185,12 +185,6 @@
return received_packet_managers_[packet_number_space].IsAckFrameEmpty();
}
-QuicPacketNumber UberReceivedPacketManager::peer_least_packet_awaiting_ack()
- const {
- QUICHE_DCHECK(!supports_multiple_packet_number_spaces_);
- return received_packet_managers_[0].peer_least_packet_awaiting_ack();
-}
-
size_t UberReceivedPacketManager::min_received_before_ack_decimation() const {
return received_packet_managers_[0].min_received_before_ack_decimation();
}
diff --git a/quiche/quic/core/uber_received_packet_manager.h b/quiche/quic/core/uber_received_packet_manager.h
index 0e436c0..d4d35bc 100644
--- a/quiche/quic/core/uber_received_packet_manager.h
+++ b/quiche/quic/core/uber_received_packet_manager.h
@@ -74,8 +74,6 @@
// Return true if ack frame of |packet_number_space| is empty.
bool IsAckFrameEmpty(PacketNumberSpace packet_number_space) const;
- QuicPacketNumber peer_least_packet_awaiting_ack() const;
-
size_t min_received_before_ack_decimation() const;
void set_min_received_before_ack_decimation(size_t new_value);
diff --git a/quiche/quic/qbone/qbone_client_test.cc b/quiche/quic/qbone/qbone_client_test.cc
index e893ddb..6429491 100644
--- a/quiche/quic/qbone/qbone_client_test.cc
+++ b/quiche/quic/qbone/qbone_client_test.cc
@@ -39,16 +39,7 @@
ParsedQuicVersionVector GetTestParams() {
ParsedQuicVersionVector test_versions;
SetQuicReloadableFlag(quic_disable_version_q046, false);
- // TODO(b/113130636): Make QBONE work with TLS.
- for (const auto& version : CurrentSupportedVersionsWithQuicCrypto()) {
- // QBONE requires MESSAGE frames
- if (!version.SupportsMessageFrames()) {
- continue;
- }
- test_versions.push_back(version);
- }
-
- return test_versions;
+ return CurrentSupportedVersionsWithQuicCrypto();
}
std::string TestPacketIn(const std::string& body) {
diff --git a/quiche/quic/qbone/qbone_session_test.cc b/quiche/quic/qbone/qbone_session_test.cc
index 3e2e8d1..1a9d023 100644
--- a/quiche/quic/qbone/qbone_session_test.cc
+++ b/quiche/quic/qbone/qbone_session_test.cc
@@ -49,18 +49,7 @@
ParsedQuicVersionVector GetTestParams() {
SetQuicReloadableFlag(quic_disable_version_q046, false);
- ParsedQuicVersionVector test_versions;
-
- // TODO(b/113130636): Make QBONE work with TLS.
- for (const auto& version : CurrentSupportedVersionsWithQuicCrypto()) {
- // QBONE requires MESSAGE frames
- if (!version.SupportsMessageFrames()) {
- continue;
- }
- test_versions.push_back(version);
- }
-
- return test_versions;
+ return CurrentSupportedVersionsWithQuicCrypto();
}
// Used by QuicCryptoServerConfig to provide server credentials, passes
diff --git a/quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc b/quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc
index 937708d..0ee8c23 100644
--- a/quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc
+++ b/quiche/quic/test_tools/fuzzing/quic_framer_process_data_packet_fuzzer.cc
@@ -47,11 +47,7 @@
using quic::test::NoOpFramerVisitor;
using quic::test::QuicFramerPeer;
-PacketHeaderFormat ConsumePacketHeaderFormat(FuzzedDataProvider* provider,
- ParsedQuicVersion version) {
- if (!version.HasIetfInvariantHeader()) {
- return quic::GOOGLE_QUIC_PACKET;
- }
+PacketHeaderFormat ConsumePacketHeaderFormat(FuzzedDataProvider* provider) {
return provider->ConsumeBool() ? quic::IETF_QUIC_LONG_HEADER_PACKET
: quic::IETF_QUIC_SHORT_HEADER_PACKET;
}
@@ -59,7 +55,6 @@
ParsedQuicVersion ConsumeParsedQuicVersion(FuzzedDataProvider* provider) {
// TODO(wub): Add support for v49+.
const QuicTransportVersion transport_versions[] = {
- quic::QUIC_VERSION_43,
quic::QUIC_VERSION_46,
};
@@ -84,7 +79,7 @@
header.version = ConsumeParsedQuicVersion(provider);
- header.form = ConsumePacketHeaderFormat(provider, header.version);
+ header.form = ConsumePacketHeaderFormat(provider);
const std::string cid_bytes =
provider->ConsumeBytesAsString(kQuicDefaultConnectionIdLength);
@@ -235,8 +230,8 @@
// Serialize the null-encrypted packet into |packet_buffer|.
QuicDataWriter writer(packet_buffer.size(), packet_buffer.data());
size_t length_field_offset = 0;
- QUICHE_CHECK(sender_framer.AppendPacketHeader(header, &writer,
- &length_field_offset));
+ QUICHE_CHECK(sender_framer.AppendIetfPacketHeader(header, &writer,
+ &length_field_offset));
QUICHE_CHECK(
writer.WriteBytes(payload_buffer.data(), payload_buffer.size()));
diff --git a/quiche/quic/test_tools/quic_connection_peer.cc b/quiche/quic/test_tools/quic_connection_peer.cc
index fbecdd3..8ac35d5 100644
--- a/quiche/quic/test_tools/quic_connection_peer.cc
+++ b/quiche/quic/test_tools/quic_connection_peer.cc
@@ -30,12 +30,6 @@
}
// static
-void QuicConnectionPeer::PopulateStopWaitingFrame(
- QuicConnection* connection, QuicStopWaitingFrame* stop_waiting) {
- connection->PopulateStopWaitingFrame(stop_waiting);
-}
-
-// static
QuicPacketCreator* QuicConnectionPeer::GetPacketCreator(
QuicConnection* connection) {
return &connection->packet_creator_;
@@ -276,17 +270,6 @@
}
// static
-bool QuicConnectionPeer::GetNoStopWaitingFrames(QuicConnection* connection) {
- return connection->no_stop_waiting_frames_;
-}
-
-// static
-void QuicConnectionPeer::SetNoStopWaitingFrames(QuicConnection* connection,
- bool no_stop_waiting_frames) {
- connection->no_stop_waiting_frames_ = no_stop_waiting_frames;
-}
-
-// static
void QuicConnectionPeer::SetMaxTrackedPackets(
QuicConnection* connection, QuicPacketCount max_tracked_packets) {
connection->max_tracked_packets_ = max_tracked_packets;
diff --git a/quiche/quic/test_tools/quic_connection_peer.h b/quiche/quic/test_tools/quic_connection_peer.h
index cf8a5a6..3c8e068 100644
--- a/quiche/quic/test_tools/quic_connection_peer.h
+++ b/quiche/quic/test_tools/quic_connection_peer.h
@@ -42,9 +42,6 @@
static void SetLossAlgorithm(QuicConnection* connection,
LossDetectionInterface* loss_algorithm);
- static void PopulateStopWaitingFrame(QuicConnection* connection,
- QuicStopWaitingFrame* stop_waiting);
-
static QuicPacketCreator* GetPacketCreator(QuicConnection* connection);
static QuicSentPacketManager* GetSentPacketManager(
@@ -122,9 +119,6 @@
float ack_decimation_delay);
static bool HasRetransmittableFrames(QuicConnection* connection,
uint64_t packet_number);
- static bool GetNoStopWaitingFrames(QuicConnection* connection);
- static void SetNoStopWaitingFrames(QuicConnection* connection,
- bool no_stop_waiting_frames);
static void SetMaxTrackedPackets(QuicConnection* connection,
QuicPacketCount max_tracked_packets);
static void SetNegotiatedVersion(QuicConnection* connection);
diff --git a/quiche/quic/test_tools/quic_packet_creator_peer.cc b/quiche/quic/test_tools/quic_packet_creator_peer.cc
index 2ab9fb0..f7f75ba 100644
--- a/quiche/quic/test_tools/quic_packet_creator_peer.cc
+++ b/quiche/quic/test_tools/quic_packet_creator_peer.cc
@@ -19,12 +19,6 @@
// static
void QuicPacketCreatorPeer::SetSendVersionInPacket(
QuicPacketCreator* creator, bool send_version_in_packet) {
- ParsedQuicVersion version = creator->framer_->version();
- if (!VersionHasIetfQuicFrames(version.transport_version) &&
- version.handshake_protocol != PROTOCOL_TLS1_3) {
- creator->send_version_in_packet_ = send_version_in_packet;
- return;
- }
if (!send_version_in_packet) {
creator->packet_.encryption_level = ENCRYPTION_FORWARD_SECURE;
return;
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h
index 25cc2d4..7b5667a 100644
--- a/quiche/quic/test_tools/quic_test_utils.h
+++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -277,8 +277,6 @@
MOCK_METHOD(bool, OnProtocolVersionMismatch, (ParsedQuicVersion version),
(override));
MOCK_METHOD(void, OnPacket, (), (override));
- MOCK_METHOD(void, OnPublicResetPacket, (const QuicPublicResetPacket& header),
- (override));
MOCK_METHOD(void, OnVersionNegotiationPacket,
(const QuicVersionNegotiationPacket& packet), (override));
MOCK_METHOD(void, OnRetryPacket,
@@ -371,7 +369,6 @@
void OnError(QuicFramer* /*framer*/) override {}
void OnPacket() override {}
- void OnPublicResetPacket(const QuicPublicResetPacket& /*packet*/) override {}
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& /*packet*/) override {}
void OnRetryPacket(QuicConnectionId /*original_connection_id*/,
@@ -1348,9 +1345,6 @@
MOCK_METHOD(void, OnCryptoFrame, (const QuicCryptoFrame&), (override));
- MOCK_METHOD(void, OnStopWaitingFrame, (const QuicStopWaitingFrame&),
- (override));
-
MOCK_METHOD(void, OnRstStreamFrame, (const QuicRstStreamFrame&), (override));
MOCK_METHOD(void, OnConnectionCloseFrame, (const QuicConnectionCloseFrame&),
@@ -1377,9 +1371,6 @@
MOCK_METHOD(void, OnPathResponseFrame, (const QuicPathResponseFrame&),
(override));
- MOCK_METHOD(void, OnPublicResetPacket, (const QuicPublicResetPacket&),
- (override));
-
MOCK_METHOD(void, OnVersionNegotiationPacket,
(const QuicVersionNegotiationPacket&), (override));
diff --git a/quiche/quic/test_tools/simple_quic_framer.cc b/quiche/quic/test_tools/simple_quic_framer.cc
index 33a56ef..b13fec4 100644
--- a/quiche/quic/test_tools/simple_quic_framer.cc
+++ b/quiche/quic/test_tools/simple_quic_framer.cc
@@ -31,9 +31,6 @@
}
void OnPacket() override {}
- void OnPublicResetPacket(const QuicPublicResetPacket& packet) override {
- public_reset_packet_ = std::make_unique<QuicPublicResetPacket>((packet));
- }
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& packet) override {
version_negotiation_packet_ =
@@ -292,7 +289,6 @@
bool has_header_;
QuicPacketHeader header_;
std::unique_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
- std::unique_ptr<QuicPublicResetPacket> public_reset_packet_;
std::unique_ptr<QuicIetfStatelessResetPacket> stateless_reset_packet_;
std::vector<QuicAckFrame> ack_frames_;
std::vector<QuicStopWaitingFrame> stop_waiting_frames_;
diff --git a/quiche/quic/tools/quic_packet_printer_bin.cc b/quiche/quic/tools/quic_packet_printer_bin.cc
index 92a3c4c..ca1b433 100644
--- a/quiche/quic/tools/quic_packet_printer_bin.cc
+++ b/quiche/quic/tools/quic_packet_printer_bin.cc
@@ -57,9 +57,6 @@
return true;
}
void OnPacket() override { std::cerr << "OnPacket\n"; }
- void OnPublicResetPacket(const QuicPublicResetPacket& /*packet*/) override {
- std::cerr << "OnPublicResetPacket\n";
- }
void OnVersionNegotiationPacket(
const QuicVersionNegotiationPacket& /*packet*/) override {
std::cerr << "OnVersionNegotiationPacket\n";