Skip to content

Commit 16f7239

Browse files
jmartinesppoljar
authored andcommitted
refactor: Make RequestConfig::timeout optional
This allows us to remove the default timeout on a per-request basis
1 parent da946e5 commit 16f7239

File tree

3 files changed

+15
-8
lines changed

3 files changed

+15
-8
lines changed

crates/matrix-sdk/src/client/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2312,7 +2312,7 @@ impl Client {
23122312
});
23132313
let mut request_config = self.request_config();
23142314
if let Some(timeout) = sync_settings.timeout {
2315-
request_config.timeout += timeout;
2315+
request_config.timeout = Some(timeout);
23162316
}
23172317

23182318
let response = self.send(request).with_request_config(request_config).await?;

crates/matrix-sdk/src/config/request.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ use crate::http_client::DEFAULT_REQUEST_TIMEOUT;
4444
#[derive(Copy, Clone)]
4545
pub struct RequestConfig {
4646
pub(crate) timeout: Duration,
47+
pub(crate) timeout: Option<Duration>,
4748
pub(crate) retry_limit: Option<usize>,
4849
pub(crate) max_retry_time: Option<Duration>,
4950
pub(crate) max_concurrent_requests: Option<NonZeroUsize>,
@@ -82,6 +83,7 @@ impl Default for RequestConfig {
8283
fn default() -> Self {
8384
Self {
8485
timeout: DEFAULT_REQUEST_TIMEOUT,
86+
timeout: Some(DEFAULT_REQUEST_TIMEOUT),
8587
retry_limit: Default::default(),
8688
max_retry_time: Default::default(),
8789
max_concurrent_requests: Default::default(),
@@ -132,8 +134,8 @@ impl RequestConfig {
132134

133135
/// Set the timeout duration for all HTTP requests.
134136
#[must_use]
135-
pub fn timeout(mut self, timeout: Duration) -> Self {
136-
self.timeout = timeout;
137+
pub fn timeout(mut self, timeout: impl Into<Option<Duration>>) -> Self {
138+
self.timeout = timeout.into();
137139
self
138140
}
139141

crates/matrix-sdk/src/http_client/native.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ pub(crate) struct HttpSettings {
149149
pub(crate) disable_ssl_verification: bool,
150150
pub(crate) proxy: Option<String>,
151151
pub(crate) user_agent: Option<String>,
152-
pub(crate) timeout: Duration,
152+
pub(crate) timeout: Option<Duration>,
153+
pub(crate) read_timeout: Option<Duration>,
153154
pub(crate) additional_root_certificates: Vec<Certificate>,
154155
pub(crate) disable_built_in_root_certificates: bool,
155156
}
@@ -161,7 +162,8 @@ impl Default for HttpSettings {
161162
disable_ssl_verification: false,
162163
proxy: None,
163164
user_agent: None,
164-
timeout: DEFAULT_REQUEST_TIMEOUT,
165+
timeout: Some(DEFAULT_REQUEST_TIMEOUT),
166+
read_timeout: None,
165167
additional_root_certificates: Default::default(),
166168
disable_built_in_root_certificates: false,
167169
}
@@ -175,11 +177,14 @@ impl HttpSettings {
175177
let user_agent = self.user_agent.clone().unwrap_or_else(|| "matrix-rust-sdk".to_owned());
176178
let mut http_client = reqwest::Client::builder()
177179
.user_agent(user_agent)
178-
.timeout(self.timeout)
179180
// As recommended by BCP 195.
180181
// See: https://datatracker.ietf.org/doc/bcp195/
181182
.min_tls_version(tls::Version::TLS_1_2);
182183

184+
if let Some(timeout) = self.timeout {
185+
http_client = http_client.timeout(timeout);
186+
}
187+
183188
if self.disable_ssl_verification {
184189
warn!("SSL verification disabled in the HTTP client!");
185190
http_client = http_client.danger_accept_invalid_certs(true)
@@ -213,7 +218,7 @@ impl HttpSettings {
213218
pub(super) async fn send_request(
214219
client: &reqwest::Client,
215220
request: &http::Request<Bytes>,
216-
timeout: Duration,
221+
timeout: Option<Duration>,
217222
send_progress: SharedObservable<TransmissionProgress>,
218223
) -> Result<http::Response<Bytes>, HttpError> {
219224
use std::convert::Infallible;
@@ -251,7 +256,7 @@ pub(super) async fn send_request(
251256
reqwest::Request::try_from(request)?
252257
};
253258

254-
*request.timeout_mut() = Some(timeout);
259+
*request.timeout_mut() = timeout;
255260
request
256261
};
257262

0 commit comments

Comments
 (0)