mirror of
https://github.com/librespot-org/librespot.git
synced 2025-10-03 01:39:28 +02:00
Add an option to specify IPs that zeroconf will bind to (#1071)
* added an option to specify ip addresses to which mDNS should bind (ignored by `DNS-SD`) * changed command line option to `zeroconf-interface` to be consistent with `zeroconf-port` use builder pattern to DRY up the code used macro to print warning message * fixing register error * renamed `bind_ip` variables to match the option to `zeroconf_ip`, to be more consistent * Changed user help Modified comments Added block for condition to clean the code Added new modification to the change log Co-authored-by: setime <timeframe1@gmx.de>
This commit is contained in:
parent
b0db6502b5
commit
bf7cbbaadd
3 changed files with 73 additions and 14 deletions
|
@ -47,6 +47,7 @@ pub struct Discovery {
|
|||
pub struct Builder {
|
||||
server_config: server::Config,
|
||||
port: u16,
|
||||
zeroconf_ip: Vec<std::net::IpAddr>,
|
||||
}
|
||||
|
||||
/// Errors that can occur while setting up a [`Discovery`] instance.
|
||||
|
@ -87,6 +88,7 @@ impl Builder {
|
|||
client_id: client_id.into(),
|
||||
},
|
||||
port: 0,
|
||||
zeroconf_ip: vec![],
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,6 +104,12 @@ impl Builder {
|
|||
self
|
||||
}
|
||||
|
||||
/// Set the ip addresses on which it should listen to incoming connections. The default is all interfaces.
|
||||
pub fn zeroconf_ip(mut self, zeroconf_ip: Vec<std::net::IpAddr>) -> Self {
|
||||
self.zeroconf_ip = zeroconf_ip;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the port on which it should listen to incoming connections.
|
||||
/// The default value `0` means any port.
|
||||
pub fn port(mut self, port: u16) -> Self {
|
||||
|
@ -117,24 +125,38 @@ impl Builder {
|
|||
let mut port = self.port;
|
||||
let name = self.server_config.name.clone().into_owned();
|
||||
let server = DiscoveryServer::new(self.server_config, &mut port)??;
|
||||
let _zeroconf_ip = self.zeroconf_ip;
|
||||
let svc;
|
||||
|
||||
#[cfg(feature = "with-dns-sd")]
|
||||
let svc = dns_sd::DNSService::register(
|
||||
Some(name.as_ref()),
|
||||
"_spotify-connect._tcp",
|
||||
None,
|
||||
None,
|
||||
port,
|
||||
&["VERSION=1.0", "CPath=/"],
|
||||
)?;
|
||||
{
|
||||
svc = dns_sd::DNSService::register(
|
||||
Some(name.as_ref()),
|
||||
"_spotify-connect._tcp",
|
||||
None,
|
||||
None,
|
||||
port,
|
||||
&["VERSION=1.0", "CPath=/"],
|
||||
)?;
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "with-dns-sd"))]
|
||||
let svc = libmdns::Responder::spawn(&tokio::runtime::Handle::current())?.register(
|
||||
"_spotify-connect._tcp".to_owned(),
|
||||
name,
|
||||
port,
|
||||
&["VERSION=1.0", "CPath=/"],
|
||||
);
|
||||
{
|
||||
let _svc = if !_zeroconf_ip.is_empty() {
|
||||
libmdns::Responder::spawn_with_ip_list(
|
||||
&tokio::runtime::Handle::current(),
|
||||
_zeroconf_ip,
|
||||
)?
|
||||
} else {
|
||||
libmdns::Responder::spawn(&tokio::runtime::Handle::current())?
|
||||
};
|
||||
svc = _svc.register(
|
||||
"_spotify-connect._tcp".to_owned(),
|
||||
name,
|
||||
port,
|
||||
&["VERSION=1.0", "CPath=/"],
|
||||
);
|
||||
}
|
||||
|
||||
Ok(Discovery { server, _svc: svc })
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue