Pass data_size into QuicPacketCreator::CreateStreamFrame instead of calculating it inside the method and no longer special case the 0 length case, except the existing QUIC_BUG.
gfe-relnote: n/a (Code refactor)
PiperOrigin-RevId: 238444568
Change-Id: I66c6ea5046639e91390bb64f88e5ab4e479a1b36
diff --git a/quic/core/quic_packet_creator.cc b/quic/core/quic_packet_creator.cc
index f5c7684..ec7248d 100644
--- a/quic/core/quic_packet_creator.cc
+++ b/quic/core/quic_packet_creator.cc
@@ -179,10 +179,14 @@
bool needs_full_padding,
TransmissionType transmission_type,
QuicFrame* frame) {
- if (!HasRoomForStreamFrame(id, offset, write_length - iov_offset)) {
+ // TODO(ianswett): Remove write_length once the multi-packet CHLO check is
+ // done higher in the stack.
+ DCHECK_GE(write_length, iov_offset);
+ const size_t data_size = write_length - iov_offset;
+ if (!HasRoomForStreamFrame(id, offset, data_size)) {
return false;
}
- CreateStreamFrame(id, write_length, iov_offset, offset, fin, frame);
+ CreateStreamFrame(id, data_size, offset, fin, frame);
// Explicitly disallow multi-packet CHLOs.
if (FLAGS_quic_enforce_single_packet_chlo &&
StreamFrameStartsWithChlo(frame->stream_frame) &&
@@ -267,12 +271,10 @@
}
void QuicPacketCreator::CreateStreamFrame(QuicStreamId id,
- size_t write_length,
- size_t iov_offset,
+ size_t data_size,
QuicStreamOffset offset,
bool fin,
QuicFrame* frame) {
- const size_t data_size = write_length - iov_offset;
DCHECK_GT(
max_packet_length_,
StreamFramePacketOverhead(
@@ -287,13 +289,9 @@
<< QuicFramer::GetMinStreamFrameSize(framer_->transport_version(), id,
offset, true, data_size);
- if (iov_offset == write_length) {
- QUIC_BUG_IF(!fin) << "Creating a stream frame with no data or fin.";
- // Create a new packet for the fin, if necessary.
- *frame = QuicFrame(QuicStreamFrame(id, true, offset, QuicStringPiece()));
- return;
- }
-
+ QUIC_BUG_IF(data_size == 0 && !fin)
+ << "Creating a stream frame for stream ID:" << id
+ << " with no data or fin.";
size_t min_frame_size = QuicFramer::GetMinStreamFrameSize(
framer_->transport_version(), id, offset,
/* last_frame_in_packet= */ true, data_size);