mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-04-02 19:11:27 +03:00
fix dns resolving
This commit is contained in:
@@ -107,7 +107,8 @@ async fn handle_frontend_event(
|
|||||||
log::debug!("frontend: {event:?}");
|
log::debug!("frontend: {event:?}");
|
||||||
match event {
|
match event {
|
||||||
FrontendRequest::Create => {
|
FrontendRequest::Create => {
|
||||||
add_client(server, frontend).await;
|
let handle = add_client(server, frontend).await;
|
||||||
|
resolve_dns(server, resolve_tx, handle).await;
|
||||||
}
|
}
|
||||||
FrontendRequest::Activate(handle, active) => {
|
FrontendRequest::Activate(handle, active) => {
|
||||||
if active {
|
if active {
|
||||||
@@ -140,10 +141,12 @@ async fn handle_frontend_event(
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
FrontendRequest::UpdateFixIps(handle, fix_ips) => {
|
FrontendRequest::UpdateFixIps(handle, fix_ips) => {
|
||||||
update_fix_ips(server, resolve_tx, handle, fix_ips).await;
|
update_fix_ips(server, handle, fix_ips).await;
|
||||||
|
resolve_dns(server, resolve_tx, handle).await;
|
||||||
}
|
}
|
||||||
FrontendRequest::UpdateHostname(handle, hostname) => {
|
FrontendRequest::UpdateHostname(handle, hostname) => {
|
||||||
update_hostname(server, resolve_tx, handle, hostname).await;
|
update_hostname(server, resolve_tx, handle, hostname).await;
|
||||||
|
resolve_dns(server, resolve_tx, handle).await;
|
||||||
}
|
}
|
||||||
FrontendRequest::UpdatePort(handle, port) => {
|
FrontendRequest::UpdatePort(handle, port) => {
|
||||||
update_port(server, handle, port).await;
|
update_port(server, handle, port).await;
|
||||||
@@ -152,31 +155,41 @@ async fn handle_frontend_event(
|
|||||||
update_pos(server, handle, capture, emulate, pos).await;
|
update_pos(server, handle, capture, emulate, pos).await;
|
||||||
}
|
}
|
||||||
FrontendRequest::ResolveDns(handle) => {
|
FrontendRequest::ResolveDns(handle) => {
|
||||||
let hostname = server
|
resolve_dns(server, resolve_tx, handle).await;
|
||||||
.client_manager
|
|
||||||
.borrow()
|
|
||||||
.get(handle)
|
|
||||||
.and_then(|(c, _)| c.hostname.clone());
|
|
||||||
if let Some(hostname) = hostname {
|
|
||||||
let _ = resolve_tx.send(DnsRequest { hostname, handle }).await;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn resolve_dns(server: &Server, resolve_tx: &Sender<DnsRequest>, handle: ClientHandle) {
|
||||||
|
let hostname = server
|
||||||
|
.client_manager
|
||||||
|
.borrow()
|
||||||
|
.get(handle)
|
||||||
|
.and_then(|(c, _)| c.hostname.clone());
|
||||||
|
if let Some(hostname) = hostname {
|
||||||
|
let _ = resolve_tx
|
||||||
|
.send(DnsRequest {
|
||||||
|
hostname: hostname.clone(),
|
||||||
|
handle,
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async fn broadcast(frontend: &mut FrontendListener, event: FrontendEvent) {
|
async fn broadcast(frontend: &mut FrontendListener, event: FrontendEvent) {
|
||||||
if let Err(e) = frontend.broadcast_event(event).await {
|
if let Err(e) = frontend.broadcast_event(event).await {
|
||||||
log::error!("error notifying frontend: {e}");
|
log::error!("error notifying frontend: {e}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn add_client(server: &Server, frontend: &mut FrontendListener) {
|
pub async fn add_client(server: &Server, frontend: &mut FrontendListener) -> ClientHandle {
|
||||||
let handle = server.client_manager.borrow_mut().add_client();
|
let handle = server.client_manager.borrow_mut().add_client();
|
||||||
log::info!("added client {handle}");
|
log::info!("added client {handle}");
|
||||||
|
|
||||||
let (c, s) = server.client_manager.borrow().get(handle).unwrap().clone();
|
let (c, s) = server.client_manager.borrow().get(handle).unwrap().clone();
|
||||||
broadcast(frontend, FrontendEvent::Created(handle, c, s)).await;
|
broadcast(frontend, FrontendEvent::Created(handle, c, s)).await;
|
||||||
|
handle
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn deactivate_client(
|
pub async fn deactivate_client(
|
||||||
@@ -251,25 +264,13 @@ pub async fn remove_client(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn update_fix_ips(
|
async fn update_fix_ips(server: &Server, handle: ClientHandle, fix_ips: Vec<IpAddr>) {
|
||||||
server: &Server,
|
let mut client_manager = server.client_manager.borrow_mut();
|
||||||
resolve_tx: &Sender<DnsRequest>,
|
let Some((c, _)) = client_manager.get_mut(handle) else {
|
||||||
handle: ClientHandle,
|
return;
|
||||||
fix_ips: Vec<IpAddr>,
|
|
||||||
) {
|
|
||||||
let hostname = {
|
|
||||||
let mut client_manager = server.client_manager.borrow_mut();
|
|
||||||
let Some((c, _)) = client_manager.get_mut(handle) else {
|
|
||||||
return;
|
|
||||||
};
|
|
||||||
|
|
||||||
c.fix_ips = fix_ips;
|
|
||||||
c.hostname.clone()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(hostname) = hostname {
|
c.fix_ips = fix_ips;
|
||||||
let _ = resolve_tx.send(DnsRequest { hostname, handle }).await;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn update_hostname(
|
async fn update_hostname(
|
||||||
|
|||||||
Reference in New Issue
Block a user