Implement restrictions at https://tools.ietf.org/html/draft-ietf-quic-transport-27#section-7.3.1.
This prepares for 0-rtt on the client side.
This change should be no-op for current deployment in gfe because config is currently only set once.
gfe-relnote: unused code. not protected.
PiperOrigin-RevId: 308861599
Change-Id: I0c8182f3d11330f40024dca76de9fed6d383f8d1
diff --git a/quic/core/quic_stream.cc b/quic/core/quic_stream.cc
index 15212f9..c43d914 100644
--- a/quic/core/quic_stream.cc
+++ b/quic/core/quic_stream.cc
@@ -904,11 +904,22 @@
}
}
-void QuicStream::UpdateSendWindowOffset(QuicStreamOffset new_window) {
- if (flow_controller_->UpdateSendWindowOffset(new_window)) {
+bool QuicStream::ConfigSendWindowOffset(QuicStreamOffset new_offset) {
+ if (perspective_ == Perspective::IS_CLIENT &&
+ session()->version().AllowsLowFlowControlLimits() &&
+ new_offset < flow_controller_->send_window_offset()) {
+ OnUnrecoverableError(
+ QUIC_FLOW_CONTROL_INVALID_WINDOW,
+ quiche::QuicheStrCat("New stream max data ", new_offset,
+ " decreases current limit: ",
+ flow_controller_->send_window_offset()));
+ return false;
+ }
+ if (flow_controller_->UpdateSendWindowOffset(new_offset)) {
// Let session unblock this stream.
session_->MarkConnectionLevelWriteBlocked(id_);
}
+ return true;
}
void QuicStream::AddRandomPaddingAfterFin() {