From d8e31a9eddc357a32d635ff5967ac61960862021 Mon Sep 17 00:00:00 2001 From: Markus Pettersson Date: Sat, 30 Nov 2024 18:11:48 +0100 Subject: [PATCH 1/2] Make `EncryptedDNSForwarder::from_stream` infallibe --- mullvad-api/src/https_client_with_sni.rs | 3 ++- mullvad-encrypted-dns-proxy/src/forwarder.rs | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/mullvad-api/src/https_client_with_sni.rs b/mullvad-api/src/https_client_with_sni.rs index 09e198ca3bcf..09ce493431ce 100644 --- a/mullvad-api/src/https_client_with_sni.rs +++ b/mullvad-api/src/https_client_with_sni.rs @@ -159,7 +159,8 @@ impl InnerConnectionMode { InnerConnectionMode::EncryptedDnsProxy(proxy_config) => { let first_hop = SocketAddr::V4(proxy_config.addr); let make_proxy_stream = |tcp_stream| async { - EncryptedDNSForwarder::from_stream(&proxy_config, tcp_stream) + let forwarder = EncryptedDNSForwarder::from_stream(&proxy_config, tcp_stream); + Ok(forwarder) }; Self::connect_proxied( first_hop, diff --git a/mullvad-encrypted-dns-proxy/src/forwarder.rs b/mullvad-encrypted-dns-proxy/src/forwarder.rs index 0cac1f6072be..43ebca522932 100644 --- a/mullvad-encrypted-dns-proxy/src/forwarder.rs +++ b/mullvad-encrypted-dns-proxy/src/forwarder.rs @@ -24,7 +24,7 @@ where S: AsyncRead + AsyncWrite + Unpin, { /// Create a [`Forwarder`] with a connected `stream` to an encrypted DNS proxy server - pub fn from_stream(proxy_config: &crate::config::ProxyConfig, stream: S) -> io::Result { + pub fn from_stream(proxy_config: &crate::config::ProxyConfig, stream: S) -> Self { let (read_obfuscator, write_obfuscator) = if let Some(obfuscation_config) = &proxy_config.obfuscation { ( @@ -35,11 +35,11 @@ where (None, None) }; - Ok(Self { + Self { read_obfuscator, write_obfuscator, stream, - }) + } } } @@ -48,7 +48,7 @@ impl Forwarder { /// Create a forwarder that will connect to a given proxy endpoint. pub async fn connect(proxy_config: &crate::config::ProxyConfig) -> io::Result { let server_connection = TcpStream::connect(proxy_config.addr).await?; - Self::from_stream(proxy_config, server_connection) + Ok(Self::from_stream(proxy_config, server_connection)) } /// Forwards traffic from the client stream to the remote proxy, obfuscating and deobfuscating From 728ea4b5329d56596277dcd17678530a46d64fce Mon Sep 17 00:00:00 2001 From: Markus Pettersson Date: Sat, 30 Nov 2024 18:23:25 +0100 Subject: [PATCH 2/2] Clean up import --- mullvad-encrypted-dns-proxy/src/forwarder.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/mullvad-encrypted-dns-proxy/src/forwarder.rs b/mullvad-encrypted-dns-proxy/src/forwarder.rs index 43ebca522932..d69d38426a13 100644 --- a/mullvad-encrypted-dns-proxy/src/forwarder.rs +++ b/mullvad-encrypted-dns-proxy/src/forwarder.rs @@ -7,12 +7,11 @@ use tokio::{ net::TcpStream, }; -use crate::config::Obfuscator; +use crate::config::{Obfuscator, ProxyConfig}; /// Forwards local traffic to a proxy endpoint, obfuscating it if the proxy config says so. /// -/// Obtain [`ProxyConfig`](crate::config::ProxyConfig)s with -/// [resolve_configs](crate::config_resolver::resolve_configs). +/// Obtain [`ProxyConfig`](ProxyConfig)s with [resolve_configs](crate::config_resolver::resolve_configs). pub struct Forwarder { read_obfuscator: Option>, write_obfuscator: Option>, @@ -24,7 +23,7 @@ where S: AsyncRead + AsyncWrite + Unpin, { /// Create a [`Forwarder`] with a connected `stream` to an encrypted DNS proxy server - pub fn from_stream(proxy_config: &crate::config::ProxyConfig, stream: S) -> Self { + pub fn from_stream(proxy_config: &ProxyConfig, stream: S) -> Self { let (read_obfuscator, write_obfuscator) = if let Some(obfuscation_config) = &proxy_config.obfuscation { ( @@ -46,7 +45,7 @@ where /// Forward TCP traffic over various proxy configurations. impl Forwarder { /// Create a forwarder that will connect to a given proxy endpoint. - pub async fn connect(proxy_config: &crate::config::ProxyConfig) -> io::Result { + pub async fn connect(proxy_config: &ProxyConfig) -> io::Result { let server_connection = TcpStream::connect(proxy_config.addr).await?; Ok(Self::from_stream(proxy_config, server_connection)) }