diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-07-07 23:51:19 +0200 | 
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-07-07 23:51:24 +0200 | 
| commit | ac1ecb0876d57d73cee54127f5ba793095808b92 (patch) | |
| tree | a2489ac8b91ed877db0c0c729b6d95ef732bbfde /server | |
| parent | d21f0fa8363a0d48c6b6cd0c0589c012e7fe7bf5 (diff) | |
| download | hurrycurry-ac1ecb0876d57d73cee54127f5ba793095808b92.tar hurrycurry-ac1ecb0876d57d73cee54127f5ba793095808b92.tar.bz2 hurrycurry-ac1ecb0876d57d73cee54127f5ba793095808b92.tar.zst | |
server mdns prevent advertising not supported ip versions
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/main.rs | 2 | ||||
| -rw-r--r-- | server/src/network/mdns.rs | 15 | 
2 files changed, 11 insertions, 6 deletions
| diff --git a/server/src/main.rs b/server/src/main.rs index 7fbc044a..c5f28ed8 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -172,7 +172,7 @@ async fn run(args: Args) -> anyhow::Result<()> {      if args.mdns {          tokio::task::spawn(hurrycurry_server::network::mdns::mdns_loop(              args.server_name.clone(), -            args.listen.port(), +            args.listen,              state.clone(),          ));      } diff --git a/server/src/network/mdns.rs b/server/src/network/mdns.rs index 43f7bc91..5bd71c60 100644 --- a/server/src/network/mdns.rs +++ b/server/src/network/mdns.rs @@ -22,10 +22,10 @@ use hurrycurry_protocol::VERSION;  use log::{info, warn};  use mdns_sd::{ServiceDaemon, ServiceInfo};  use rand::random; -use std::{collections::HashMap, sync::Arc, time::Duration}; +use std::{collections::HashMap, net::SocketAddr, sync::Arc, time::Duration};  use tokio::{sync::RwLock, time::interval}; -pub async fn mdns_loop(name: String, port: u16, state: Arc<RwLock<Server>>) { +pub async fn mdns_loop(name: String, listen_addr: SocketAddr, state: Arc<RwLock<Server>>) {      let d = match ServiceDaemon::new() {          Ok(d) => d,          Err(e) => { @@ -37,7 +37,7 @@ pub async fn mdns_loop(name: String, port: u16, state: Arc<RwLock<Server>>) {      let hostname = format!("hks-{}.local.", random::<u64>());      loop {          interval.tick().await; -        if let Err(e) = update_service(&d, &state, &name, &hostname, port).await { +        if let Err(e) = update_service(&d, &state, &name, &hostname, listen_addr).await {              warn!("mDNS service update failed: {e}");          }          info!("updated mDNS service record"); @@ -49,12 +49,17 @@ async fn update_service(      state: &Arc<RwLock<Server>>,      name: &str,      hostname: &str, -    port: u16, +    listen_addr: SocketAddr,  ) -> Result<()> {      let addrs = get_if_addrs()?          .into_iter()          .map(|e| e.addr.ip())          .filter(|a| !a.is_loopback()) +        .filter(|a| { +            (a.is_ipv6() && listen_addr.is_ipv6()) +                || (a.is_ipv4() && listen_addr.is_ipv4()) +                || (a.is_ipv4() && listen_addr.is_ipv6() && !cfg!(windows)) +        })          .collect::<Vec<_>>();      let players = state.read().await.count_chefs(); @@ -64,7 +69,7 @@ async fn update_service(          name,          hostname,          &*addrs, -        port, +        listen_addr.port(),          HashMap::from_iter([              ("players".to_string(), players.to_string()),              ("version".to_string(), env!("CARGO_PKG_VERSION").to_string()), | 
