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);
diff --git a/quic/core/quic_packet_creator.h b/quic/core/quic_packet_creator.h
index 7e129e1..76e7726 100644
--- a/quic/core/quic_packet_creator.h
+++ b/quic/core/quic_packet_creator.h
@@ -277,11 +277,10 @@
friend class test::QuicPacketCreatorPeer;
// Creates a stream frame which fits into the current open packet. If
- // |write_length| is 0 and fin is true, the expected behavior is to consume
- // the fin but return 0.
+ // |data_size| is 0 and fin is true, the expected behavior is to consume
+ // the fin.
void CreateStreamFrame(QuicStreamId id,
- size_t write_length,
- size_t iov_offset,
+ size_t data_size,
QuicStreamOffset offset,
bool fin,
QuicFrame* frame);
diff --git a/quic/core/quic_packet_creator_test.cc b/quic/core/quic_packet_creator_test.cc
index efd7485..6727fca 100644
--- a/quic/core/quic_packet_creator_test.cc
+++ b/quic/core/quic_packet_creator_test.cc
@@ -390,7 +390,7 @@
QuicPacketCreatorPeer::CreateStreamFrame(
&creator_,
QuicUtils::GetCryptoStreamId(client_framer_.transport_version()),
- iov_.iov_len, 0u, 0u, false, &frame);
+ iov_.iov_len, 0u, false, &frame);
QuicFrames frames;
frames.push_back(frame);
char buffer[kMaxPacketSize];
@@ -413,7 +413,7 @@
QuicPacketCreatorPeer::CreateStreamFrame(
&creator_,
QuicUtils::GetCryptoStreamId(client_framer_.transport_version()),
- iov_.iov_len, 0u, 0u, false, &frame);
+ iov_.iov_len, 0u, false, &frame);
const int kNumPaddingBytes1 = 4;
int packet_size = 0;
@@ -480,7 +480,7 @@
QuicPacketCreatorPeer::CreateStreamFrame(
&creator_,
QuicUtils::GetCryptoStreamId(client_framer_.transport_version()),
- iov_.iov_len, 0, kOffset, false, &frame);
+ iov_.iov_len, kOffset, false, &frame);
QuicFrames frames;
frames.push_back(frame);
char buffer[kMaxPacketSize];
@@ -1375,7 +1375,7 @@
QuicPacketCreatorPeer::CreateStreamFrame(
&creator_,
QuicUtils::GetCryptoStreamId(client_framer_.transport_version()),
- iov_.iov_len, 0u, 0u, false, &frame);
+ iov_.iov_len, 0u, false, &frame);
QuicFrames frames;
frames.push_back(frame);
char buffer[kMaxPacketSize];