Allow peers to pick low flow control limits in T099
Google QUIC requires flow control limits to be above 16K but IETF QUIC allows any values. In order to interoperate we need to allow low values in T099.
gfe-relnote: protected by disabled flag quic_supports_tls_handshake
PiperOrigin-RevId: 246002368
Change-Id: I5660e591256a355985877c2fb3c41fee06eb5a06
diff --git a/quic/core/quic_session.cc b/quic/core/quic_session.cc
index 2b9ffa5..5d02a12 100644
--- a/quic/core/quic_session.cc
+++ b/quic/core/quic_session.cc
@@ -69,7 +69,9 @@
this,
QuicUtils::GetInvalidStreamId(connection->transport_version()),
/*is_connection_flow_controller*/ true,
- kMinimumFlowControlSendWindow,
+ connection->version().AllowsLowFlowControlLimits()
+ ? 0
+ : kMinimumFlowControlSendWindow,
config_.GetInitialSessionFlowControlWindowToSend(),
kSessionReceiveWindowLimit,
perspective() == Perspective::IS_SERVER,
@@ -1054,10 +1056,11 @@
}
void QuicSession::OnNewStreamFlowControlWindow(QuicStreamOffset new_window) {
- if (new_window < kMinimumFlowControlSendWindow) {
+ if (new_window < kMinimumFlowControlSendWindow &&
+ !connection_->version().AllowsLowFlowControlLimits()) {
QUIC_LOG_FIRST_N(ERROR, 1)
<< "Peer sent us an invalid stream flow control send window: "
- << new_window << ", below default: " << kMinimumFlowControlSendWindow;
+ << new_window << ", below minimum: " << kMinimumFlowControlSendWindow;
if (connection_->connected()) {
connection_->CloseConnection(
QUIC_FLOW_CONTROL_INVALID_WINDOW, "New stream window too low",
@@ -1080,7 +1083,8 @@
}
void QuicSession::OnNewSessionFlowControlWindow(QuicStreamOffset new_window) {
- if (new_window < kMinimumFlowControlSendWindow) {
+ if (new_window < kMinimumFlowControlSendWindow &&
+ !connection_->version().AllowsLowFlowControlLimits()) {
QUIC_LOG_FIRST_N(ERROR, 1)
<< "Peer sent us an invalid session flow control send window: "
<< new_window << ", below default: " << kMinimumFlowControlSendWindow;