@@ -2198,6 +2198,19 @@ impl Connection {
2198
2198
Ok(())
2199
2199
}
2200
2200
2201
+ /// Sets the `max_idle_timeout` transport parameter, in milliseconds.
2202
+ ///
2203
+ /// This must only be called immediately after creating a connection, that
2204
+ /// is, before any packet is sent or received.
2205
+ ///
2206
+ /// The default value is infinite, that is, no timeout is used unless
2207
+ /// already configured when creating the connection.
2208
+ pub fn set_max_idle_timeout(&mut self, v: u64) -> Result<()> {
2209
+ self.local_transport_params.max_idle_timeout = v;
2210
+
2211
+ self.encode_transport_params()
2212
+ }
2213
+
2201
2214
/// Processes QUIC packets received from the peer.
2202
2215
///
2203
2216
/// On success the number of bytes processed from the input buffer is
@@ -9228,6 +9241,40 @@ mod tests {
9228
9241
);
9229
9242
}
9230
9243
9244
+ #[test]
9245
+ fn change_idle_timeout() {
9246
+ let mut config = Config::new(0x1).unwrap();
9247
+ config
9248
+ .set_application_protos(&[b"proto1", b"proto2"])
9249
+ .unwrap();
9250
+ config.set_max_idle_timeout(999999);
9251
+ config.verify_peer(false);
9252
+
9253
+ let mut pipe = testing::Pipe::with_client_config(&mut config).unwrap();
9254
+ assert_eq!(pipe.client.local_transport_params.max_idle_timeout, 999999);
9255
+ assert_eq!(pipe.client.peer_transport_params.max_idle_timeout, 0);
9256
+ assert_eq!(pipe.server.local_transport_params.max_idle_timeout, 0);
9257
+ assert_eq!(pipe.server.peer_transport_params.max_idle_timeout, 0);
9258
+
9259
+ pipe.client.set_max_idle_timeout(456000).unwrap();
9260
+ pipe.server.set_max_idle_timeout(234000).unwrap();
9261
+ assert_eq!(pipe.client.local_transport_params.max_idle_timeout, 456000);
9262
+ assert_eq!(pipe.client.peer_transport_params.max_idle_timeout, 0);
9263
+ assert_eq!(pipe.server.local_transport_params.max_idle_timeout, 234000);
9264
+ assert_eq!(pipe.server.peer_transport_params.max_idle_timeout, 0);
9265
+
9266
+ assert_eq!(pipe.handshake(), Ok(()));
9267
+
9268
+ assert_eq!(
9269
+ pipe.client.idle_timeout(),
9270
+ Some(time::Duration::from_millis(234000))
9271
+ );
9272
+ assert_eq!(
9273
+ pipe.server.idle_timeout(),
9274
+ Some(time::Duration::from_millis(234000))
9275
+ );
9276
+ }
9277
+
9231
9278
#[test]
9232
9279
fn handshake() {
9233
9280
let mut pipe = testing::Pipe::new().unwrap();
0 commit comments