diff --git a/quinn-proto/src/connection.rs b/quinn-proto/src/connection.rs index 69fe432e1..331e146a3 100644 --- a/quinn-proto/src/connection.rs +++ b/quinn-proto/src/connection.rs @@ -1440,23 +1440,7 @@ where self.reject_0rtt(); } else { self.accepted_0rtt = true; - if params.initial_max_data < self.params.initial_max_data - || params.initial_max_stream_data_bidi_local - < self.params.initial_max_stream_data_bidi_local - || params.initial_max_stream_data_bidi_remote - < self.params.initial_max_stream_data_bidi_remote - || params.initial_max_stream_data_uni - < self.params.initial_max_stream_data_uni - || params.initial_max_streams_bidi - < self.params.initial_max_streams_bidi - || params.initial_max_streams_uni - < self.params.initial_max_streams_uni - { - return Err(TransportError::PROTOCOL_VIOLATION( - "flow control parameters were reduced wrt. 0-RTT", - ) - .into()); - } + params.validate_0rtt(&self.params)?; } } if let Some(token) = params.stateless_reset_token { diff --git a/quinn-proto/src/transport_parameters.rs b/quinn-proto/src/transport_parameters.rs index 0cabd4908..89fc7eac6 100644 --- a/quinn-proto/src/transport_parameters.rs +++ b/quinn-proto/src/transport_parameters.rs @@ -94,6 +94,24 @@ impl TransportParameters { ..Self::default() } } + + /// Check that these parameters are legal when resuming from + /// certain cached parameters + pub fn validate_0rtt(&self, cached: &TransportParameters) -> Result<(), TransportError> { + if cached.initial_max_data < self.initial_max_data + || cached.initial_max_stream_data_bidi_local < self.initial_max_stream_data_bidi_local + || cached.initial_max_stream_data_bidi_remote < self.initial_max_stream_data_bidi_remote + || cached.initial_max_stream_data_uni < self.initial_max_stream_data_uni + || cached.initial_max_streams_bidi < self.initial_max_streams_bidi + || cached.initial_max_streams_uni < self.initial_max_streams_uni + { + return Err(TransportError::PROTOCOL_VIOLATION( + "0-RTT accepted with incompatible transport parameters", + ) + .into()); + } + Ok(()) + } } #[derive(Debug, Copy, Clone, Eq, PartialEq)]