diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-02-06 14:22:59 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-02-07 17:34:19 +0100 |
| commit | 0bfaddec42d4a2db516d99bc572b27e394427aa8 (patch) | |
| tree | 44d1359f75d6dcf2be62f44ed54ddd89cab94d25 /test/socks-server/src | |
| parent | f94d31a75bcfc0228dee7835cb8c1a992cf29f1a (diff) | |
| download | mullvadvpn-0bfaddec42d4a2db516d99bc572b27e394427aa8.tar.xz mullvadvpn-0bfaddec42d4a2db516d99bc572b27e394427aa8.zip | |
Move testing SOCKS server to own crate
Diffstat (limited to 'test/socks-server/src')
| -rw-r--r-- | test/socks-server/src/lib.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/socks-server/src/lib.rs b/test/socks-server/src/lib.rs new file mode 100644 index 0000000000..19638efe39 --- /dev/null +++ b/test/socks-server/src/lib.rs @@ -0,0 +1,38 @@ +use futures::StreamExt; +use std::io; +use std::net::SocketAddr; + +#[derive(err_derive::Error, Debug)] +pub enum Error { + #[error(display = "Failed to start SOCKS5 server")] + StartSocksServer(#[error(source)] io::Error), +} + +pub async fn spawn(bind_addr: SocketAddr) -> Result<tokio::task::JoinHandle<()>, Error> { + let socks_server: fast_socks5::server::Socks5Server = + fast_socks5::server::Socks5Server::bind(bind_addr) + .await + .map_err(Error::StartSocksServer)?; + + let handle = tokio::spawn(async move { + let mut incoming = socks_server.incoming(); + + while let Some(new_client) = incoming.next().await { + match new_client { + Ok(socket) => { + let fut = socket.upgrade_to_socks5(); + tokio::spawn(async move { + match fut.await { + Ok(_socket) => log::info!("socks client disconnected"), + Err(error) => log::error!("socks client failed: {error}"), + } + }); + } + Err(error) => { + log::error!("failed to accept socks client: {error}"); + } + } + } + }); + Ok(handle) +} |
