mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-04-15 02:41:28 +03:00
move channel creation out of dns
This commit is contained in:
16
src/dns.rs
16
src/dns.rs
@@ -1,6 +1,6 @@
|
|||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use std::net::IpAddr;
|
use std::net::IpAddr;
|
||||||
use tokio::sync::mpsc::{channel, Receiver, Sender};
|
use tokio::sync::mpsc::Receiver;
|
||||||
|
|
||||||
use hickory_resolver::{error::ResolveError, TokioAsyncResolver};
|
use hickory_resolver::{error::ResolveError, TokioAsyncResolver};
|
||||||
|
|
||||||
@@ -12,16 +12,12 @@ pub(crate) struct DnsResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl DnsResolver {
|
impl DnsResolver {
|
||||||
pub(crate) async fn new() -> Result<(Self, Sender<ClientHandle>)> {
|
pub(crate) fn new(dns_request: Receiver<ClientHandle>) -> Result<Self> {
|
||||||
let resolver = TokioAsyncResolver::tokio_from_system_conf()?;
|
let resolver = TokioAsyncResolver::tokio_from_system_conf()?;
|
||||||
let (dns_tx, dns_request) = channel(1);
|
Ok(Self {
|
||||||
Ok((
|
resolver,
|
||||||
Self {
|
dns_request,
|
||||||
resolver,
|
})
|
||||||
dns_request,
|
|
||||||
},
|
|
||||||
dns_tx,
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn resolve(&self, host: &str) -> Result<Vec<IpAddr>, ResolveError> {
|
async fn resolve(&self, host: &str) -> Result<Vec<IpAddr>, ResolveError> {
|
||||||
|
|||||||
@@ -135,6 +135,7 @@ impl Server {
|
|||||||
let (udp_recv_tx, udp_recv_rx) = channel(1); /* udp receiver */
|
let (udp_recv_tx, udp_recv_rx) = channel(1); /* udp receiver */
|
||||||
let (udp_send_tx, udp_send_rx) = channel(1); /* udp sender */
|
let (udp_send_tx, udp_send_rx) = channel(1); /* udp sender */
|
||||||
let (request_tx, mut request_rx) = channel(1); /* frontend requests */
|
let (request_tx, mut request_rx) = channel(1); /* frontend requests */
|
||||||
|
let (dns_tx, dns_rx) = channel(1); /* dns requests */
|
||||||
|
|
||||||
// udp task
|
// udp task
|
||||||
let network = network_task::new(self.clone(), udp_recv_tx.clone(), udp_send_rx).await?;
|
let network = network_task::new(self.clone(), udp_recv_tx.clone(), udp_send_rx).await?;
|
||||||
@@ -152,11 +153,8 @@ impl Server {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// create dns resolver
|
// create dns resolver
|
||||||
let (resolver, dns_request) = DnsResolver::new().await?;
|
let resolver = DnsResolver::new(dns_rx)?;
|
||||||
let server = self.clone();
|
let dns_task = tokio::task::spawn_local(resolver.run(self.clone()));
|
||||||
let dns_task = tokio::task::spawn_local(async move {
|
|
||||||
resolver.run(server).await;
|
|
||||||
});
|
|
||||||
|
|
||||||
// task that pings clients to see if they are responding
|
// task that pings clients to see if they are responding
|
||||||
let ping = ping_task::new(
|
let ping = ping_task::new(
|
||||||
@@ -207,7 +205,7 @@ impl Server {
|
|||||||
let request = self.pending_dns_requests.borrow_mut().pop_front();
|
let request = self.pending_dns_requests.borrow_mut().pop_front();
|
||||||
request
|
request
|
||||||
} {
|
} {
|
||||||
dns_request.send(request).await.expect("channel closed");
|
dns_tx.send(request).await.expect("channel closed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ = self.cancelled() => break,
|
_ = self.cancelled() => break,
|
||||||
@@ -225,7 +223,7 @@ impl Server {
|
|||||||
assert!(!udp_recv_tx.is_closed());
|
assert!(!udp_recv_tx.is_closed());
|
||||||
assert!(!udp_send_tx.is_closed());
|
assert!(!udp_send_tx.is_closed());
|
||||||
assert!(!request_tx.is_closed());
|
assert!(!request_tx.is_closed());
|
||||||
assert!(!dns_request.is_closed());
|
assert!(!dns_tx.is_closed());
|
||||||
|
|
||||||
self.cancel();
|
self.cancel();
|
||||||
futures::future::join_all(join_handles).await;
|
futures::future::join_all(join_handles).await;
|
||||||
|
|||||||
Reference in New Issue
Block a user