dont use remote_addr

This commit is contained in:
Ferdinand Schober
2024-09-06 18:31:21 +02:00
parent 937652ac44
commit 0fe5416ac5

View File

@@ -23,7 +23,9 @@ pub(crate) enum LanMouseConnectionError {
NoIps, NoIps,
} }
async fn connect(addr: SocketAddr) -> Result<Arc<dyn Conn + Sync + Send>, LanMouseConnectionError> { async fn connect(
addr: SocketAddr,
) -> Result<(Arc<dyn Conn + Sync + Send>, SocketAddr), LanMouseConnectionError> {
let conn = Arc::new(UdpSocket::bind("0.0.0.0:0").await?); let conn = Arc::new(UdpSocket::bind("0.0.0.0:0").await?);
conn.connect(addr).await?; conn.connect(addr).await?;
log::info!("connected to {addr}, establishing secure dtls channel ..."); log::info!("connected to {addr}, establishing secure dtls channel ...");
@@ -36,12 +38,12 @@ async fn connect(addr: SocketAddr) -> Result<Arc<dyn Conn + Sync + Send>, LanMou
}; };
let dtls_conn: Arc<dyn Conn + Send + Sync> = let dtls_conn: Arc<dyn Conn + Send + Sync> =
Arc::new(DTLSConn::new(conn, config, true, None).await?); Arc::new(DTLSConn::new(conn, config, true, None).await?);
Ok(dtls_conn) Ok((dtls_conn, addr))
} }
async fn connect_any( async fn connect_any(
addrs: &[SocketAddr], addrs: &[SocketAddr],
) -> Result<Arc<dyn Conn + Send + Sync>, LanMouseConnectionError> { ) -> Result<(Arc<dyn Conn + Send + Sync>, SocketAddr), LanMouseConnectionError> {
let mut joinset = JoinSet::new(); let mut joinset = JoinSet::new();
for &addr in addrs { for &addr in addrs {
joinset.spawn_local(connect(addr)); joinset.spawn_local(connect(addr));
@@ -84,8 +86,7 @@ impl LanMouseConnection {
.into_iter() .into_iter()
.map(|a| SocketAddr::new(a, port)) .map(|a| SocketAddr::new(a, port))
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let conn = connect_any(&addrs).await?; let (conn, addr) = connect_any(&addrs).await?;
let addr = conn.remote_addr().expect("no remote addr");
self.server.set_active_addr(handle, addr); self.server.set_active_addr(handle, addr);
conn.send(buf).await?; conn.send(buf).await?;
return Ok(()); return Ok(());