This commit is contained in:
2025-11-08 20:47:02 +01:00
parent b5aa11c46b
commit 50cd15867b
4 changed files with 15 additions and 17 deletions
Generated
+1
View File
@@ -2324,6 +2324,7 @@ name = "lanspread-mdns"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"eyre", "eyre",
"log",
"mdns-sd", "mdns-sd",
"tracing", "tracing",
] ]
+2 -1
View File
@@ -12,6 +12,7 @@ todo = "warn"
unwrap_used = "warn" unwrap_used = "warn"
[dependencies] [dependencies]
mdns-sd = { workspace = true }
eyre = { workspace = true } eyre = { workspace = true }
log = { workspace = true }
mdns-sd = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
+11 -15
View File
@@ -47,10 +47,7 @@ impl Drop for MdnsAdvertiser {
} }
} }
pub fn discover_service( pub fn discover_service(service_type: &str) -> eyre::Result<SocketAddr> {
service_type: &str,
instance_name: Option<&str>,
) -> eyre::Result<SocketAddr> {
let mdns = ServiceDaemon::new().expect("Failed to create mDNS daemon."); let mdns = ServiceDaemon::new().expect("Failed to create mDNS daemon.");
let receiver = mdns.browse(service_type)?; let receiver = mdns.browse(service_type)?;
@@ -58,28 +55,27 @@ pub fn discover_service(
while let Ok(event) = receiver.recv() { while let Ok(event) = receiver.recv() {
match event { match event {
ServiceEvent::ServiceResolved(info) => { ServiceEvent::ServiceResolved(info) => {
tracing::trace!(?info, "mdns ServiceResolved event"); log::trace!("mdns ServiceResolved event: {info:?}");
if let Some(instance_name) = instance_name // Check if this service matches our expected service type
&& info.get_fullname() != format!("{instance_name}.{service_type}") if info.ty_domain != service_type {
{ log::trace!(
tracing::warn!( "Got mDNS with uninteresting service type: {} (expected: {})",
"Found service with wrong instance name: {} (expected: {})", info.ty_domain,
info.get_fullname(), service_type,
instance_name,
); );
continue; continue;
} }
if let Some(address) = info.get_addresses().iter().next() { if let Some(address) = info.get_addresses().iter().next() {
tracing::info!("Found server at {}:{}", address, info.get_port()); log::info!("Found server at {}:{}", address, info.get_port());
return Ok((address.to_ip_addr(), info.get_port()).into()); return Ok((address.to_ip_addr(), info.get_port()).into());
} }
tracing::error!(?info, "No address found in mDNS response."); log::error!("No address found in mDNS response: {info:?}");
} }
other_event => { other_event => {
tracing::trace!(?other_event, "mdns unrelated event"); log::trace!("mdns unrelated event: {other_event:?}");
} }
} }
} }
@@ -370,7 +370,7 @@ async fn find_server(app: AppHandle) {
log::info!("Looking for server..."); log::info!("Looking for server...");
loop { loop {
match discover_service(LANSPREAD_SERVICE_TYPE, None) { match discover_service(LANSPREAD_SERVICE_TYPE) {
Ok(server_addr) => { Ok(server_addr) => {
log::info!("Found server at {server_addr}"); log::info!("Found server at {server_addr}");
let state: tauri::State<LanSpreadState> = app.state(); let state: tauri::State<LanSpreadState> = app.state();