summaryrefslogtreecommitdiffhomepage
path: root/mullvad-api/src/proxy.rs
diff options
context:
space:
mode:
authorMarkus Pettersson <markus.pettersson@mullvad.net>2023-08-08 16:12:57 +0200
committerDavid Lönnhager <david.l@mullvad.net>2023-10-09 14:39:54 +0200
commit2796dda1376e0d7b78fc274ada988a8a371101a2 (patch)
treea45b97d306f21ab78e459e9d7d4ee53c47a40a25 /mullvad-api/src/proxy.rs
parent524a64d100693f3dc3c4b77c5c3b9d478dd6a4b9 (diff)
downloadmullvadvpn-2796dda1376e0d7b78fc274ada988a8a371101a2.tar.xz
mullvadvpn-2796dda1376e0d7b78fc274ada988a8a371101a2.zip
Add `Socks5` as a Proxy setting
- Rename `InnerConnectionMode` variant `Proxied` to `Shadowsocks` - Move proxy/socket connection logic to `InnerConnectMode` impl block - Move `handle_x_connection` functions to `InnerConnectionMode` impl block - These functions does not need to be visible in the entire module, really. - Refactor some code into standalone functions - Mostly for visibilities' sake, but it also helps `rustc` with inferring the return type of each match arm inside of `stream_fut`.
Diffstat (limited to 'mullvad-api/src/proxy.rs')
-rw-r--r--mullvad-api/src/proxy.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/mullvad-api/src/proxy.rs b/mullvad-api/src/proxy.rs
index 1e6ab41f80..c5c2426933 100644
--- a/mullvad-api/src/proxy.rs
+++ b/mullvad-api/src/proxy.rs
@@ -8,7 +8,9 @@ use std::{
pin::Pin,
task::{self, Poll},
};
-use talpid_types::{net::openvpn::ShadowsocksProxySettings, ErrorExt};
+use talpid_types::{
+ net::openvpn::ShadowsocksProxySettings, net::openvpn::SocksProxySettings, ErrorExt,
+};
use tokio::{
fs,
io::{AsyncRead, AsyncWrite, AsyncWriteExt, ReadBuf},
@@ -36,6 +38,7 @@ impl fmt::Display for ApiConnectionMode {
#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
pub enum ProxyConfig {
Shadowsocks(ShadowsocksProxySettings),
+ Socks(SocksProxySettings),
}
impl fmt::Display for ProxyConfig {
@@ -43,6 +46,7 @@ impl fmt::Display for ProxyConfig {
match self {
// TODO: Do not hardcode TCP
ProxyConfig::Shadowsocks(ss) => write!(f, "Shadowsocks {}/TCP", ss.peer),
+ ProxyConfig::Socks(s) => write!(f, "Socks5 {}/TCP", s.peer),
}
}
}
@@ -110,8 +114,11 @@ impl ApiConnectionMode {
/// Returns the remote address, or `None` for `ApiConnectionMode::Direct`.
pub fn get_endpoint(&self) -> Option<SocketAddr> {
match self {
- ApiConnectionMode::Proxied(ProxyConfig::Shadowsocks(ss)) => Some(ss.peer),
ApiConnectionMode::Direct => None,
+ ApiConnectionMode::Proxied(proxy_config) => match proxy_config {
+ ProxyConfig::Shadowsocks(ss) => Some(ss.peer),
+ ProxyConfig::Socks(s) => Some(s.peer),
+ },
}
}