feat(client): allow to config http2 max concurrent reset streams (#2535)
Setting streams to 0 makes h2 work on wasm platforms without a `Instant::now` implementation.
This commit is contained in:
		| @@ -1151,6 +1151,21 @@ impl Builder { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Sets the maximum number of HTTP2 concurrent locally reset streams. | ||||||
|  |     /// | ||||||
|  |     /// See the documentation of [`h2::client::Builder::max_concurrent_reset_streams`] for more | ||||||
|  |     /// details. | ||||||
|  |     /// | ||||||
|  |     /// The default value is determined by the `h2` crate. | ||||||
|  |     /// | ||||||
|  |     /// [`h2::client::Builder::max_concurrent_reset_streams`]: https://docs.rs/h2/client/struct.Builder.html#method.max_concurrent_reset_streams | ||||||
|  |     #[cfg(feature = "http2")] | ||||||
|  |     #[cfg_attr(docsrs, doc(cfg(feature = "http2")))] | ||||||
|  |     pub fn http2_max_concurrent_reset_streams(&mut self, max: usize) -> &mut Self { | ||||||
|  |         self.conn_builder.http2_max_concurrent_reset_streams(max); | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Set whether to retry requests that get disrupted before ever starting |     /// Set whether to retry requests that get disrupted before ever starting | ||||||
|     /// to write. |     /// to write. | ||||||
|     /// |     /// | ||||||
|   | |||||||
| @@ -530,7 +530,8 @@ impl Builder { | |||||||
|         &mut self, |         &mut self, | ||||||
|         enabled: bool, |         enabled: bool, | ||||||
|     ) -> &mut Builder { |     ) -> &mut Builder { | ||||||
|         self.h1_parser_config.allow_spaces_after_header_name_in_responses(enabled); |         self.h1_parser_config | ||||||
|  |             .allow_spaces_after_header_name_in_responses(enabled); | ||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @@ -701,6 +702,21 @@ impl Builder { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /// Sets the maximum number of HTTP2 concurrent locally reset streams. | ||||||
|  |     /// | ||||||
|  |     /// See the documentation of [`h2::client::Builder::max_concurrent_reset_streams`] for more | ||||||
|  |     /// details. | ||||||
|  |     /// | ||||||
|  |     /// The default value is determined by the `h2` crate. | ||||||
|  |     /// | ||||||
|  |     /// [`h2::client::Builder::max_concurrent_reset_streams`]: https://docs.rs/h2/client/struct.Builder.html#method.max_concurrent_reset_streams | ||||||
|  |     #[cfg(feature = "http2")] | ||||||
|  |     #[cfg_attr(docsrs, doc(cfg(feature = "http2")))] | ||||||
|  |     pub fn http2_max_concurrent_reset_streams(&mut self, max: usize) -> &mut Self { | ||||||
|  |         self.h2_builder.max_concurrent_reset_streams = Some(max); | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// Constructs a connection with the configured options and IO. |     /// Constructs a connection with the configured options and IO. | ||||||
|     pub fn handshake<T, B>( |     pub fn handshake<T, B>( | ||||||
|         &self, |         &self, | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ use tokio::io::{AsyncRead, AsyncWrite}; | |||||||
|  |  | ||||||
| use super::{decode_content_length, ping, PipeToSendStream, SendBuf}; | use super::{decode_content_length, ping, PipeToSendStream, SendBuf}; | ||||||
| use crate::body::HttpBody; | use crate::body::HttpBody; | ||||||
| use crate::common::{task, exec::Exec, Future, Never, Pin, Poll}; | use crate::common::{exec::Exec, task, Future, Never, Pin, Poll}; | ||||||
| use crate::headers; | use crate::headers; | ||||||
| use crate::proto::Dispatched; | use crate::proto::Dispatched; | ||||||
| use crate::{Body, Request, Response}; | use crate::{Body, Request, Response}; | ||||||
| @@ -44,6 +44,7 @@ pub(crate) struct Config { | |||||||
|     pub(crate) keep_alive_timeout: Duration, |     pub(crate) keep_alive_timeout: Duration, | ||||||
|     #[cfg(feature = "runtime")] |     #[cfg(feature = "runtime")] | ||||||
|     pub(crate) keep_alive_while_idle: bool, |     pub(crate) keep_alive_while_idle: bool, | ||||||
|  |     pub(crate) max_concurrent_reset_streams: Option<usize>, | ||||||
| } | } | ||||||
|  |  | ||||||
| impl Default for Config { | impl Default for Config { | ||||||
| @@ -59,6 +60,7 @@ impl Default for Config { | |||||||
|             keep_alive_timeout: Duration::from_secs(20), |             keep_alive_timeout: Duration::from_secs(20), | ||||||
|             #[cfg(feature = "runtime")] |             #[cfg(feature = "runtime")] | ||||||
|             keep_alive_while_idle: false, |             keep_alive_while_idle: false, | ||||||
|  |             max_concurrent_reset_streams: None, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -70,6 +72,9 @@ fn new_builder(config: &Config) -> Builder { | |||||||
|         .initial_connection_window_size(config.initial_conn_window_size) |         .initial_connection_window_size(config.initial_conn_window_size) | ||||||
|         .max_frame_size(config.max_frame_size) |         .max_frame_size(config.max_frame_size) | ||||||
|         .enable_push(false); |         .enable_push(false); | ||||||
|  |     if let Some(max) = config.max_concurrent_reset_streams { | ||||||
|  |         builder.max_concurrent_reset_streams(max); | ||||||
|  |     } | ||||||
|     builder |     builder | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user