Add retire_prior_to to NewConnectionId frame
IETF altered the NewConnectionId frame format, adding a "retire_prior_to"
field. This CL adds that field and modifies the framer and tests as needed.
gfe-relnote: N/A is only for IETF QUIC (version 99 flag protected)
NEW_REQUIRED_FIELD_OK="Message not currently in use, nothing in the logs"
Note wrt the protobuf update - this CL adds a field to an IETF QUIC frame. Correspondingly, the relevant protobuf gets a new field. Since IETF QUIC is not in use, there are no instances of this protobuf in use/existance/etc yet ... so there is no incompatbility with other processes/etc to be concerned with.
PiperOrigin-RevId: 257833679
Change-Id: I80d80db9f1f23b8e570c504199fdd346b7cb4ca4
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc
index cdb941f..6c089c1 100644
--- a/quic/core/quic_framer.cc
+++ b/quic/core/quic_framer.cc
@@ -768,6 +768,7 @@
const QuicNewConnectionIdFrame& frame) {
return kQuicFrameTypeSize +
QuicDataWriter::GetVarInt62Len(frame.sequence_number) +
+ QuicDataWriter::GetVarInt62Len(frame.retire_prior_to) +
kConnectionIdLengthSize + frame.connection_id.length() +
sizeof(frame.stateless_reset_token);
}
@@ -5998,6 +5999,10 @@
set_detailed_error("Can not write New Connection ID sequence number");
return false;
}
+ if (!writer->WriteVarInt62(frame.retire_prior_to)) {
+ set_detailed_error("Can not write New Connection ID retire_prior_to");
+ return false;
+ }
if (!writer->WriteUInt8(frame.connection_id.length())) {
set_detailed_error(
"Can not write New Connection ID frame connection ID Length");
@@ -6025,6 +6030,15 @@
return false;
}
+ if (!reader->ReadVarInt62(&frame->retire_prior_to)) {
+ set_detailed_error(
+ "Unable to read new connection ID frame retire_prior_to.");
+ return false;
+ }
+ if (frame->retire_prior_to > frame->sequence_number) {
+ set_detailed_error("Retire_prior_to > sequence_number.");
+ return false;
+ }
uint8_t connection_id_length;
if (!reader->ReadUInt8(&connection_id_length)) {
set_detailed_error(