gfe-relnote: Change QuicRstStream::ietf_error_code to 64 bits and move it out of the union with error_code. Behavior change in IETF QUIC only, protected by gfe2_reloadable_flag_quic_enable_version_draft_25_v3 and gfe2_reloadable_flag_quic_enable_version_draft_27. Multiple tests rely on ietf_error_code being set to the value of error_code. However, if they stay in a union, and ietf_error_code is changed to 64 bits, then the upper bits will be unitialized, because error_code has fewer bits. Fortunately I was planning to move them out of the union so that upper layers can still interact with QuicRstStreamErrorCode regardless of QUIC version. PiperOrigin-RevId: 305870819 Change-Id: Iae47ede459094ade6f9dc7fddfc9acadb82fa417
diff --git a/quic/core/frames/quic_rst_stream_frame.cc b/quic/core/frames/quic_rst_stream_frame.cc index 63cf6ea..d9e14b7 100644 --- a/quic/core/frames/quic_rst_stream_frame.cc +++ b/quic/core/frames/quic_rst_stream_frame.cc
@@ -20,15 +20,8 @@ : control_frame_id(control_frame_id), stream_id(stream_id), error_code(error_code), - byte_offset(bytes_written) {} - -QuicRstStreamFrame::QuicRstStreamFrame(QuicControlFrameId control_frame_id, - QuicStreamId stream_id, - uint16_t ietf_error_code, - QuicStreamOffset bytes_written) - : control_frame_id(control_frame_id), - stream_id(stream_id), - ietf_error_code(ietf_error_code), + // TODO(b/124216424): Translate QuicRstStreamErrorCode to IETF error code. + ietf_error_code(error_code), byte_offset(bytes_written) {} std::ostream& operator<<(std::ostream& os,
diff --git a/quic/core/frames/quic_rst_stream_frame.h b/quic/core/frames/quic_rst_stream_frame.h index 9a9ed56..6239123 100644 --- a/quic/core/frames/quic_rst_stream_frame.h +++ b/quic/core/frames/quic_rst_stream_frame.h
@@ -18,10 +18,6 @@ QuicStreamId stream_id, QuicRstStreamErrorCode error_code, QuicStreamOffset bytes_written); - QuicRstStreamFrame(QuicControlFrameId control_frame_id, - QuicStreamId stream_id, - uint16_t ietf_error_code, - QuicStreamOffset bytes_written); friend QUIC_EXPORT_PRIVATE std::ostream& operator<<( std::ostream& os, @@ -33,15 +29,12 @@ QuicStreamId stream_id; - // Caller must know whether IETF- or Google- QUIC is in use and - // set the appropriate error code. - union { - QuicRstStreamErrorCode error_code; - // In IETF QUIC the code is up to the app on top of quic, so is - // more general than QuicRstStreamErrorCode allows. - // TODO(fkastenholz): Upgrade to uint64_t - uint16_t ietf_error_code; - }; + // Used for Google QUIC only. + // TODO(b/124216424): Consider using meaningful values when using IETF QUIC. + QuicRstStreamErrorCode error_code; + + // Used for IETF QUIC only. + uint64_t ietf_error_code; // Used to update flow control windows. On termination of a stream, both // endpoints must inform the peer of the number of bytes they have sent on
diff --git a/quic/core/quic_framer.cc b/quic/core/quic_framer.cc index dd880d7..da5d4c5 100644 --- a/quic/core/quic_framer.cc +++ b/quic/core/quic_framer.cc
@@ -5765,18 +5765,14 @@ return false; } - uint64_t error_code; - if (!reader->ReadVarInt62(&error_code)) { + if (!reader->ReadVarInt62(&frame->ietf_error_code)) { set_detailed_error("Unable to read rst stream error code."); return false; } - if (error_code > 0xffff) { - frame->ietf_error_code = 0xffff; - QUIC_DLOG(ERROR) << "Reset stream error code (" << error_code - << ") > 0xffff"; - } else { - frame->ietf_error_code = static_cast<uint16_t>(error_code); - } + + // TODO(b/124216424): Translate IETF error code to QuicRstStreamErrorCode. + frame->error_code = + static_cast<QuicRstStreamErrorCode>(frame->ietf_error_code); if (!reader->ReadVarInt62(&frame->byte_offset)) { set_detailed_error("Unable to read rst stream sent byte offset.");