Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion src/connection/connection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1420,7 +1420,7 @@ impl Connection {
// All ack-eliciting 0-RTT and 1-RTT packets within its advertised
// max_ack_delay.
if space.ack_timer.is_none() {
let ack_delay = time::Duration::from_millis(self.peer_transport_params.max_ack_delay);
let ack_delay = time::Duration::from_millis(self.local_transport_params.max_ack_delay);
space.ack_timer = Some(time::Instant::now() + ack_delay);
debug!(
"{} set ack timer for space {:?}, timeout {:?} ",
Expand Down Expand Up @@ -6769,6 +6769,38 @@ pub(crate) mod tests {
Ok(())
}

#[test]
fn ack_timer_uses_local_max_ack_delay() -> Result<()> {
const LOCAL_MAX_ACK_DELAY: u64 = 100;
const PEER_MAX_ACK_DELAY: u64 = 1;

let mut client_config = TestPair::new_test_config(false)?;
client_config.set_ack_eliciting_threshold(2);
client_config.set_max_ack_delay(LOCAL_MAX_ACK_DELAY);
let mut server_config = TestPair::new_test_config(true)?;
let mut test_pair = TestPair::new(&mut client_config, &mut server_config)?;
test_pair.client.peer_transport_params.max_ack_delay = PEER_MAX_ACK_DELAY;

let before = time::Instant::now();
test_pair
.client
.try_schedule_ack_frame(SpaceId::Data, 1, true)?;
let after = time::Instant::now();

let ack_timer = test_pair
.client
.spaces
.get(SpaceId::Data)
.unwrap()
.ack_timer
.unwrap();
let local_ack_delay = Duration::from_millis(LOCAL_MAX_ACK_DELAY);
assert!(ack_timer >= before + local_ack_delay);
assert!(ack_timer <= after + local_ack_delay);

Ok(())
}

#[test]
fn ack_initial_or_handshake_space() -> Result<()> {
let mut client_config = TestPair::new_test_config(false)?;
Expand Down