mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
34 lines
1 KiB
Rust
34 lines
1 KiB
Rust
use std::{io, net::ToSocketAddrs};
|
|
|
|
use tokio::net::TcpStream;
|
|
use url::Url;
|
|
|
|
use crate::proxytunnel;
|
|
|
|
pub async fn connect(host: &str, port: u16, proxy: Option<&Url>) -> io::Result<TcpStream> {
|
|
let socket = if let Some(proxy_url) = proxy {
|
|
info!("Using proxy \"{}\"", proxy_url);
|
|
|
|
let socket_addr = proxy_url.socket_addrs(|| None).and_then(|addrs| {
|
|
addrs.into_iter().next().ok_or_else(|| {
|
|
io::Error::new(
|
|
io::ErrorKind::NotFound,
|
|
"Can't resolve proxy server address",
|
|
)
|
|
})
|
|
})?;
|
|
let socket = TcpStream::connect(&socket_addr).await?;
|
|
|
|
proxytunnel::proxy_connect(socket, host, &port.to_string()).await?
|
|
} else {
|
|
let socket_addr = (host, port).to_socket_addrs()?.next().ok_or_else(|| {
|
|
io::Error::new(
|
|
io::ErrorKind::NotFound,
|
|
"Can't resolve access point address",
|
|
)
|
|
})?;
|
|
|
|
TcpStream::connect(&socket_addr).await?
|
|
};
|
|
Ok(socket)
|
|
}
|