use anyhow::{bail, Result};
use std::net::IpAddr;
use crate::config::misc::IpVersion;
pub fn get_remote_ip_from_mdns_hostname(
hostname: &str,
timeout_ms: u64,
ip_version: IpVersion,
) -> Result<IpAddr> {
if let Some(info) = crate::mdns::resolve::resolve_mdns_hostname(hostname, timeout_ms, true)? {
if let Some(ip) = info.get_ip(ip_version) {
return Ok(ip.to_owned());
} else {
bail!("Failed resolving IP for {hostname}")
}
}
bail!("Failed resolving IP for {hostname}")
}
pub fn is_mdns_hostname(hostname: &str) -> bool {
let suffix_variant1 = ".local.";
let suffix_variant2 = ".local";
let hostname_len = hostname.len();
if hostname_len >= suffix_variant1.len()
&& hostname
.chars()
.rev()
.zip(suffix_variant1.chars().rev())
.all(|(h, s)| h == s)
{
return true;
}
if hostname_len >= suffix_variant2.len()
&& hostname
.chars()
.rev()
.zip(suffix_variant2.chars().rev())
.all(|(h, s)| h == s)
{
return true;
}
false
}