diff --git a/src/cargo/ops/registry.rs b/src/cargo/ops/registry.rs index 0a2244bb794..0ac1335f9d1 100644 --- a/src/cargo/ops/registry.rs +++ b/src/cargo/ops/registry.rs @@ -367,8 +367,7 @@ pub fn configure_http_handle(config: &Config, handle: &mut Easy) -> CargoResult< // connect phase as well as a "low speed" timeout so if we don't receive // many bytes in a large-ish period of time then we time out. handle.connect_timeout(Duration::new(30, 0))?; - handle.low_speed_limit(10 /* bytes per second */)?; - handle.low_speed_time(Duration::new(30, 0))?; + handle.low_speed_limit(http_low_speed_limit(config)?)?; if let Some(proxy) = http_proxy(config)? { handle.proxy(&proxy)?; } @@ -390,6 +389,14 @@ pub fn configure_http_handle(config: &Config, handle: &mut Easy) -> CargoResult< Ok(()) } +/// Find an override from config for curl low-speed-limit option, otherwise use default value +fn http_low_speed_limit(config: &Config) -> CargoResult { + if let Some(s) = config.get::>("http.low-speed-limit")? { + return Ok(s); + } + Ok(10) +} + /// Find an explicit HTTP proxy if one is available. /// /// Favor cargo's `http.proxy`, then git's `http.proxy`. Proxies specified diff --git a/src/doc/src/reference/config.md b/src/doc/src/reference/config.md index 3bb4c68b3ff..1c6dd671bd4 100644 --- a/src/doc/src/reference/config.md +++ b/src/doc/src/reference/config.md @@ -95,6 +95,7 @@ proxy = "host:port" # HTTP proxy to use for HTTP requests (defaults to none) timeout = 60000 # Timeout for each HTTP request, in milliseconds cainfo = "cert.pem" # Path to Certificate Authority (CA) bundle (optional) check-revoke = true # Indicates whether SSL certs are checked for revocation +low-speed-limit = 0 # Lower threshold for bytes/sec (10 = default, 0 = disabled) [build] jobs = 1 # number of parallel jobs, defaults to # of CPUs