Detailed changes
@@ -8245,7 +8245,7 @@ dependencies = [
"prost 0.9.0",
"prost-build 0.9.0",
"prost-types 0.9.0",
- "reqwest 0.12.8",
+ "reqwest 0.12.15",
"serde",
"workspace-hack",
]
@@ -12018,8 +12018,8 @@ dependencies = [
[[package]]
name = "reqwest"
-version = "0.12.8"
-source = "git+https://github.com/zed-industries/reqwest.git?rev=fd110f6998da16bbca97b6dddda9be7827c50e29#fd110f6998da16bbca97b6dddda9be7827c50e29"
+version = "0.12.15"
+source = "git+https://github.com/zed-industries/reqwest.git?rev=951c770a32f1998d6e999cef3e59e0013e6c4415#951c770a32f1998d6e999cef3e59e0013e6c4415"
dependencies = [
"base64 0.22.1",
"bytes 1.10.1",
@@ -12054,13 +12054,14 @@ dependencies = [
"tokio-rustls 0.26.2",
"tokio-socks",
"tokio-util",
+ "tower 0.5.2",
"tower-service",
"url",
"wasm-bindgen",
"wasm-bindgen-futures",
"wasm-streams",
"web-sys",
- "windows-registry 0.2.0",
+ "windows-registry 0.4.0",
]
[[package]]
@@ -12075,7 +12076,7 @@ dependencies = [
"http_client_tls",
"log",
"regex",
- "reqwest 0.12.8",
+ "reqwest 0.12.15",
"serde",
"smol",
"tokio",
@@ -15134,6 +15135,11 @@ version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper 1.0.2",
+ "tokio",
"tower-layer",
"tower-service",
]
@@ -17220,13 +17226,13 @@ dependencies = [
[[package]]
name = "windows-registry"
-version = "0.2.0"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
+checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
dependencies = [
- "windows-result 0.2.0",
- "windows-strings 0.1.0",
- "windows-targets 0.52.6",
+ "windows-result 0.3.2",
+ "windows-strings 0.3.1",
+ "windows-targets 0.53.0",
]
[[package]]
@@ -17277,6 +17283,15 @@ dependencies = [
"windows-targets 0.52.6",
]
+[[package]]
+name = "windows-strings"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
+dependencies = [
+ "windows-link",
+]
+
[[package]]
name = "windows-strings"
version = "0.4.0"
@@ -17361,13 +17376,29 @@ dependencies = [
"windows_aarch64_gnullvm 0.52.6",
"windows_aarch64_msvc 0.52.6",
"windows_i686_gnu 0.52.6",
- "windows_i686_gnullvm",
+ "windows_i686_gnullvm 0.52.6",
"windows_i686_msvc 0.52.6",
"windows_x86_64_gnu 0.52.6",
"windows_x86_64_gnullvm 0.52.6",
"windows_x86_64_msvc 0.52.6",
]
+[[package]]
+name = "windows-targets"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
+dependencies = [
+ "windows_aarch64_gnullvm 0.53.0",
+ "windows_aarch64_msvc 0.53.0",
+ "windows_i686_gnu 0.53.0",
+ "windows_i686_gnullvm 0.53.0",
+ "windows_i686_msvc 0.53.0",
+ "windows_x86_64_gnu 0.53.0",
+ "windows_x86_64_gnullvm 0.53.0",
+ "windows_x86_64_msvc 0.53.0",
+]
+
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@@ -17386,6 +17417,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
+
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@@ -17404,6 +17441,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
+
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@@ -17422,12 +17465,24 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+[[package]]
+name = "windows_i686_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
+
[[package]]
name = "windows_i686_gnullvm"
version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
+
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@@ -17446,6 +17501,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+[[package]]
+name = "windows_i686_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
+
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@@ -17464,6 +17525,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
+
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@@ -17482,6 +17549,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
+
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@@ -17500,6 +17573,12 @@ version = "0.52.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.53.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
+
[[package]]
name = "winnow"
version = "0.7.6"
@@ -18010,6 +18089,7 @@ dependencies = [
"subtle",
"syn 1.0.109",
"syn 2.0.100",
+ "sync_wrapper 1.0.2",
"thiserror 2.0.12",
"time",
"time-macros",
@@ -18020,6 +18100,7 @@ dependencies = [
"tokio-util",
"toml_datetime",
"toml_edit",
+ "tower 0.5.2",
"tracing",
"tracing-core",
"tungstenite 0.26.2",
@@ -506,7 +506,7 @@ rayon = "1.8"
ref-cast = "1.0.24"
regex = "1.5"
repair_json = "0.1.0"
-reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "fd110f6998da16bbca97b6dddda9be7827c50e29", default-features = false, features = [
+reqwest = { git = "https://github.com/zed-industries/reqwest.git", rev = "951c770a32f1998d6e999cef3e59e0013e6c4415", default-features = false, features = [
"charset",
"http2",
"macos-system-configuration",
@@ -564,7 +564,7 @@ impl Client {
pub fn production(cx: &mut App) -> Arc<Self> {
let clock = Arc::new(clock::RealSystemClock);
- let http = Arc::new(HttpClientWithUrl::new_uri(
+ let http = Arc::new(HttpClientWithUrl::new_url(
cx.http_client(),
&ClientSettings::get_global(cx).server_url,
cx.http_client().proxy().cloned(),
@@ -1,10 +1,10 @@
//! socks proxy
use anyhow::{Result, anyhow};
-use http_client::Uri;
+use http_client::Url;
use tokio_socks::tcp::{Socks4Stream, Socks5Stream};
pub(crate) async fn connect_socks_proxy_stream(
- proxy: Option<&Uri>,
+ proxy: Option<&Url>,
rpc_host: (&str, u16),
) -> Result<Box<dyn AsyncReadWrite>> {
let stream = match parse_socks_proxy(proxy) {
@@ -32,9 +32,9 @@ pub(crate) async fn connect_socks_proxy_stream(
Ok(stream)
}
-fn parse_socks_proxy(proxy: Option<&Uri>) -> Option<((String, u16), SocksVersion)> {
- let proxy_uri = proxy?;
- let scheme = proxy_uri.scheme_str()?;
+fn parse_socks_proxy(proxy: Option<&Url>) -> Option<((String, u16), SocksVersion)> {
+ let proxy_url = proxy?;
+ let scheme = proxy_url.scheme();
let socks_version = if scheme.starts_with("socks4") {
// socks4
SocksVersion::V4
@@ -44,7 +44,7 @@ fn parse_socks_proxy(proxy: Option<&Uri>) -> Option<((String, u16), SocksVersion
} else {
return None;
};
- if let (Some(host), Some(port)) = (proxy_uri.host(), proxy_uri.port_u16()) {
+ if let Some((host, port)) = proxy_url.host().zip(proxy_url.port_or_known_default()) {
Some(((host.to_string(), port), socks_version))
} else {
None
@@ -17,7 +17,7 @@ use client::{Client, ProxySettings, UserStore};
use collections::{HashMap, HashSet};
use extension::ExtensionHostProxy;
use futures::future;
-use gpui::http_client::{Uri, read_proxy_from_env};
+use gpui::http_client::read_proxy_from_env;
use gpui::{App, AppContext, Application, AsyncApp, Entity, SemanticVersion, UpdateGlobal};
use gpui_tokio::Tokio;
use language::LanguageRegistry;
@@ -358,7 +358,7 @@ pub fn init(cx: &mut App) -> Arc<AgentAppState> {
let proxy_str = ProxySettings::get_global(cx).proxy.to_owned();
let proxy_url = proxy_str
.as_ref()
- .and_then(|input| input.parse::<Uri>().ok())
+ .and_then(|input| input.parse().ok())
.or_else(read_proxy_from_env);
let http = {
let _guard = Tokio::handle(cx).enter();
@@ -24,7 +24,7 @@ pub use async_context::*;
use collections::{FxHashMap, FxHashSet, HashMap, VecDeque};
pub use context::*;
pub use entity_map::*;
-use http_client::HttpClient;
+use http_client::{HttpClient, Url};
use smallvec::SmallVec;
#[cfg(any(test, feature = "test-support"))]
pub use test_context::*;
@@ -1890,7 +1890,7 @@ impl HttpClient for NullHttpClient {
async move { Err(anyhow!("No HttpClient available")) }.boxed()
}
- fn proxy(&self) -> Option<&http_client::Uri> {
+ fn proxy(&self) -> Option<&Url> {
None
}
@@ -82,7 +82,7 @@ pub trait HttpClient: 'static + Send + Sync {
}
}
- fn proxy(&self) -> Option<&Uri>;
+ fn proxy(&self) -> Option<&Url>;
}
/// An [`HttpClient`] that may have a proxy.
@@ -90,22 +90,22 @@ pub trait HttpClient: 'static + Send + Sync {
pub struct HttpClientWithProxy {
#[deref]
client: Arc<dyn HttpClient>,
- proxy: Option<Uri>,
+ proxy: Option<Url>,
}
impl HttpClientWithProxy {
/// Returns a new [`HttpClientWithProxy`] with the given proxy URL.
pub fn new(client: Arc<dyn HttpClient>, proxy_url: Option<String>) -> Self {
- let proxy_uri = proxy_url
+ let proxy_url = proxy_url
.and_then(|proxy| proxy.parse().ok())
.or_else(read_proxy_from_env);
- Self::new_uri(client, proxy_uri)
+ Self::new_url(client, proxy_url)
}
- pub fn new_uri(client: Arc<dyn HttpClient>, proxy_uri: Option<Uri>) -> Self {
+ pub fn new_url(client: Arc<dyn HttpClient>, proxy_url: Option<Url>) -> Self {
Self {
client,
- proxy: proxy_uri,
+ proxy: proxy_url,
}
}
}
@@ -118,7 +118,7 @@ impl HttpClient for HttpClientWithProxy {
self.client.send(req)
}
- fn proxy(&self) -> Option<&Uri> {
+ fn proxy(&self) -> Option<&Url> {
self.proxy.as_ref()
}
@@ -135,7 +135,7 @@ impl HttpClient for Arc<HttpClientWithProxy> {
self.client.send(req)
}
- fn proxy(&self) -> Option<&Uri> {
+ fn proxy(&self) -> Option<&Url> {
self.proxy.as_ref()
}
@@ -173,12 +173,12 @@ impl HttpClientWithUrl {
}
}
- pub fn new_uri(
+ pub fn new_url(
client: Arc<dyn HttpClient>,
base_url: impl Into<String>,
- proxy_uri: Option<Uri>,
+ proxy_url: Option<Url>,
) -> Self {
- let client = HttpClientWithProxy::new_uri(client, proxy_uri);
+ let client = HttpClientWithProxy::new_url(client, proxy_url);
Self {
base_url: Mutex::new(base_url.into()),
@@ -250,7 +250,7 @@ impl HttpClient for Arc<HttpClientWithUrl> {
self.client.send(req)
}
- fn proxy(&self) -> Option<&Uri> {
+ fn proxy(&self) -> Option<&Url> {
self.client.proxy.as_ref()
}
@@ -267,7 +267,7 @@ impl HttpClient for HttpClientWithUrl {
self.client.send(req)
}
- fn proxy(&self) -> Option<&Uri> {
+ fn proxy(&self) -> Option<&Url> {
self.client.proxy.as_ref()
}
@@ -276,7 +276,7 @@ impl HttpClient for HttpClientWithUrl {
}
}
-pub fn read_proxy_from_env() -> Option<Uri> {
+pub fn read_proxy_from_env() -> Option<Url> {
const ENV_VARS: &[&str] = &[
"ALL_PROXY",
"all_proxy",
@@ -286,13 +286,10 @@ pub fn read_proxy_from_env() -> Option<Uri> {
"http_proxy",
];
- for var in ENV_VARS {
- if let Ok(env) = std::env::var(var) {
- return env.parse::<Uri>().ok();
- }
- }
-
- None
+ ENV_VARS
+ .iter()
+ .find_map(|var| std::env::var(var).ok())
+ .and_then(|env| env.parse().ok())
}
pub struct BlockedHttpClient;
@@ -317,7 +314,7 @@ impl HttpClient for BlockedHttpClient {
})
}
- fn proxy(&self) -> Option<&Uri> {
+ fn proxy(&self) -> Option<&Url> {
None
}
@@ -393,7 +390,7 @@ impl HttpClient for FakeHttpClient {
future
}
- fn proxy(&self) -> Option<&Uri> {
+ fn proxy(&self) -> Option<&Url> {
None
}
@@ -5,7 +5,7 @@ pub use archive::extract_zip;
use async_compression::futures::bufread::GzipDecoder;
use async_tar::Archive;
use futures::AsyncReadExt;
-use http_client::{HttpClient, Uri};
+use http_client::{HttpClient, Url};
use semver::Version;
use serde::Deserialize;
use smol::io::BufReader;
@@ -247,7 +247,7 @@ trait NodeRuntimeTrait: Send + Sync {
async fn run_npm_subcommand(
&self,
directory: Option<&Path>,
- proxy: Option<&Uri>,
+ proxy: Option<&Url>,
subcommand: &str,
args: &[&str],
) -> Result<Output>;
@@ -394,7 +394,7 @@ impl NodeRuntimeTrait for ManagedNodeRuntime {
async fn run_npm_subcommand(
&self,
directory: Option<&Path>,
- proxy: Option<&Uri>,
+ proxy: Option<&Url>,
subcommand: &str,
args: &[&str],
) -> Result<Output> {
@@ -535,7 +535,7 @@ impl NodeRuntimeTrait for SystemNodeRuntime {
async fn run_npm_subcommand(
&self,
directory: Option<&Path>,
- proxy: Option<&Uri>,
+ proxy: Option<&Url>,
subcommand: &str,
args: &[&str],
) -> anyhow::Result<Output> {
@@ -613,7 +613,7 @@ impl NodeRuntimeTrait for UnavailableNodeRuntime {
async fn run_npm_subcommand(
&self,
_: Option<&Path>,
- _: Option<&Uri>,
+ _: Option<&Url>,
_: &str,
_: &[&str],
) -> anyhow::Result<Output> {
@@ -632,7 +632,7 @@ impl NodeRuntimeTrait for UnavailableNodeRuntime {
fn configure_npm_command(
command: &mut smol::process::Command,
directory: Option<&Path>,
- proxy: Option<&Uri>,
+ proxy: Option<&Url>,
) {
if let Some(directory) = directory {
command.current_dir(directory);
@@ -11,7 +11,7 @@ use futures::{AsyncRead, AsyncWrite, AsyncWriteExt, FutureExt, SinkExt, select,
use git::GitHostingProviderRegistry;
use gpui::{App, AppContext as _, Context, Entity, SemanticVersion, UpdateGlobal as _};
use gpui_tokio::Tokio;
-use http_client::{Uri, read_proxy_from_env};
+use http_client::{Url, read_proxy_from_env};
use language::LanguageRegistry;
use node_runtime::{NodeBinaryOptions, NodeRuntime};
use paths::logs_dir;
@@ -853,13 +853,13 @@ pub fn handle_settings_file_changes(
.detach();
}
-fn read_proxy_settings(cx: &mut Context<HeadlessProject>) -> Option<Uri> {
+fn read_proxy_settings(cx: &mut Context<HeadlessProject>) -> Option<Url> {
let proxy_str = ProxySettings::get_global(cx).proxy.to_owned();
let proxy_url = proxy_str
.as_ref()
.and_then(|input: &String| {
input
- .parse::<Uri>()
+ .parse::<Url>()
.inspect_err(|e| log::error!("Error parsing proxy settings: {}", e))
.ok()
})
@@ -1,10 +1,11 @@
+use std::error::Error;
use std::sync::{LazyLock, OnceLock};
use std::{any::type_name, borrow::Cow, mem, pin::Pin, task::Poll, time::Duration};
use anyhow::anyhow;
use bytes::{BufMut, Bytes, BytesMut};
use futures::{AsyncRead, TryStreamExt as _};
-use http_client::{RedirectPolicy, http};
+use http_client::{RedirectPolicy, Url, http};
use regex::Regex;
use reqwest::{
header::{HeaderMap, HeaderValue},
@@ -18,7 +19,7 @@ static REDACT_REGEX: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"key=[^&]+")
pub struct ReqwestClient {
client: reqwest::Client,
- proxy: Option<http::Uri>,
+ proxy: Option<Url>,
handle: tokio::runtime::Handle,
}
@@ -43,23 +44,34 @@ impl ReqwestClient {
Ok(client.into())
}
- pub fn proxy_and_user_agent(proxy: Option<http::Uri>, agent: &str) -> anyhow::Result<Self> {
+ pub fn proxy_and_user_agent(proxy: Option<Url>, agent: &str) -> anyhow::Result<Self> {
let mut map = HeaderMap::new();
map.insert(http::header::USER_AGENT, HeaderValue::from_str(agent)?);
let mut client = Self::builder().default_headers(map);
- if let Some(proxy) = proxy.clone().and_then(|proxy_uri| {
- reqwest::Proxy::all(proxy_uri.to_string())
- .inspect_err(|e| log::error!("Failed to parse proxy URI {}: {}", proxy_uri, e))
+ let client_has_proxy;
+
+ if let Some(proxy) = proxy.as_ref().and_then(|proxy_url| {
+ reqwest::Proxy::all(proxy_url.clone())
+ .inspect_err(|e| {
+ log::error!(
+ "Failed to parse proxy URL '{}': {}",
+ proxy_url,
+ e.source().unwrap_or(&e as &_)
+ )
+ })
.ok()
}) {
client = client.proxy(proxy);
- }
+ client_has_proxy = true;
+ } else {
+ client_has_proxy = false;
+ };
let client = client
.use_preconfigured_tls(http_client_tls::tls_config())
.build()?;
let mut client: ReqwestClient = client.into();
- client.proxy = proxy;
+ client.proxy = client_has_proxy.then_some(proxy).flatten();
Ok(client)
}
}
@@ -195,7 +207,7 @@ fn redact_error(mut error: reqwest::Error) -> reqwest::Error {
}
impl http_client::HttpClient for ReqwestClient {
- fn proxy(&self) -> Option<&http::Uri> {
+ fn proxy(&self) -> Option<&Url> {
self.proxy.as_ref()
}
@@ -256,7 +268,7 @@ impl http_client::HttpClient for ReqwestClient {
#[cfg(test)]
mod tests {
- use http_client::{HttpClient, http};
+ use http_client::{HttpClient, Url};
use crate::ReqwestClient;
@@ -265,35 +277,38 @@ mod tests {
let client = ReqwestClient::new();
assert_eq!(client.proxy(), None);
- let proxy = http::Uri::from_static("http://localhost:10809");
+ let proxy = Url::parse("http://localhost:10809").unwrap();
let client = ReqwestClient::proxy_and_user_agent(Some(proxy.clone()), "test").unwrap();
assert_eq!(client.proxy(), Some(&proxy));
- let proxy = http::Uri::from_static("https://localhost:10809");
+ let proxy = Url::parse("https://localhost:10809").unwrap();
let client = ReqwestClient::proxy_and_user_agent(Some(proxy.clone()), "test").unwrap();
assert_eq!(client.proxy(), Some(&proxy));
- let proxy = http::Uri::from_static("socks4://localhost:10808");
+ let proxy = Url::parse("socks4://localhost:10808").unwrap();
let client = ReqwestClient::proxy_and_user_agent(Some(proxy.clone()), "test").unwrap();
assert_eq!(client.proxy(), Some(&proxy));
- let proxy = http::Uri::from_static("socks4a://localhost:10808");
+ let proxy = Url::parse("socks4a://localhost:10808").unwrap();
let client = ReqwestClient::proxy_and_user_agent(Some(proxy.clone()), "test").unwrap();
assert_eq!(client.proxy(), Some(&proxy));
- let proxy = http::Uri::from_static("socks5://localhost:10808");
+ let proxy = Url::parse("socks5://localhost:10808").unwrap();
let client = ReqwestClient::proxy_and_user_agent(Some(proxy.clone()), "test").unwrap();
assert_eq!(client.proxy(), Some(&proxy));
- let proxy = http::Uri::from_static("socks5h://localhost:10808");
+ let proxy = Url::parse("socks5h://localhost:10808").unwrap();
let client = ReqwestClient::proxy_and_user_agent(Some(proxy.clone()), "test").unwrap();
assert_eq!(client.proxy(), Some(&proxy));
}
#[test]
- #[should_panic]
fn test_invalid_proxy_uri() {
- let proxy = http::Uri::from_static("file:///etc/hosts");
- ReqwestClient::proxy_and_user_agent(Some(proxy), "test").unwrap();
+ let proxy = Url::parse("socks://127.0.0.1:20170").unwrap();
+ let client = ReqwestClient::proxy_and_user_agent(Some(proxy), "test").unwrap();
+ assert!(
+ client.proxy.is_none(),
+ "An invalid proxy URL should add no proxy to the client!"
+ )
}
}
@@ -20,7 +20,7 @@ use git::GitHostingProviderRegistry;
use gpui::{App, AppContext as _, Application, AsyncApp, UpdateGlobal as _};
use gpui_tokio::Tokio;
-use http_client::{Uri, read_proxy_from_env};
+use http_client::{Url, read_proxy_from_env};
use language::LanguageRegistry;
use prompt_store::PromptBuilder;
use reqwest_client::ReqwestClient;
@@ -354,7 +354,7 @@ fn main() {
.as_ref()
.and_then(|input| {
input
- .parse::<Uri>()
+ .parse::<Url>()
.inspect_err(|e| log::error!("Error parsing proxy settings: {}", e))
.ok()
})
@@ -263,9 +263,11 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
[target.x86_64-apple-darwin.build-dependencies]
clang-sys = { version = "1", default-features = false, features = ["clang_11_0", "runtime"] }
@@ -288,9 +290,11 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
[target.aarch64-apple-darwin.dependencies]
core-foundation = { version = "0.9" }
@@ -311,9 +315,11 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
[target.aarch64-apple-darwin.build-dependencies]
clang-sys = { version = "1", default-features = false, features = ["clang_11_0", "runtime"] }
@@ -336,9 +342,11 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
security-framework = { version = "3", features = ["OSX_10_14"] }
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
[target.x86_64-unknown-linux-gnu.dependencies]
aes = { version = "0.8", default-features = false, features = ["zeroize"] }
@@ -373,11 +381,13 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
@@ -412,11 +422,13 @@ rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["ev
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
@@ -453,11 +465,13 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
@@ -492,11 +506,13 @@ rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["ev
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
@@ -512,9 +528,11 @@ naga = { version = "23", features = ["spv-out", "wgsl-in"] }
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event"] }
scopeguard = { version = "1" }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
winapi = { version = "0.3", default-features = false, features = ["cfg", "consoleapi", "errhandlingapi", "evntrace", "fileapi", "handleapi", "in6addr", "inaddr", "knownfolders", "minwinbase", "ntsecapi", "objbase", "processenv", "processthreadsapi", "shlobj", "std", "sysinfoapi", "winbase", "windef", "winerror", "winioctl"] }
windows-core = { version = "0.61" }
windows-numerics = { version = "0.2" }
@@ -535,9 +553,11 @@ proc-macro2 = { version = "1", default-features = false, features = ["span-locat
ring = { version = "0.17", features = ["std"] }
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event"] }
scopeguard = { version = "1" }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
winapi = { version = "0.3", default-features = false, features = ["cfg", "consoleapi", "errhandlingapi", "evntrace", "fileapi", "handleapi", "in6addr", "inaddr", "knownfolders", "minwinbase", "ntsecapi", "objbase", "processenv", "processthreadsapi", "shlobj", "std", "sysinfoapi", "winbase", "windef", "winerror", "winioctl"] }
windows-core = { version = "0.61" }
windows-numerics = { version = "0.2" }
@@ -578,11 +598,13 @@ rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs",
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }
@@ -617,11 +639,13 @@ rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["ev
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net", "process", "termios", "time"] }
scopeguard = { version = "1" }
smallvec = { version = "1", default-features = false, features = ["write"] }
+sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
tokio-rustls = { version = "0.26", default-features = false, features = ["ring"] }
tokio-socks = { version = "0.5", features = ["futures-io"] }
tokio-stream = { version = "0.1", features = ["fs"] }
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
+tower = { version = "0.5", default-features = false, features = ["timeout", "util"] }
zeroize = { version = "1", features = ["zeroize_derive"] }
zvariant = { version = "5", default-features = false, features = ["enumflags2", "gvariant", "url"] }