Add zeroconf-port option

This commit is contained in:
Sasha Hilton 2018-01-30 21:38:54 +01:00
parent 5f21c25828
commit 8e8bab03d5
2 changed files with 19 additions and 4 deletions

View file

@ -194,14 +194,15 @@ pub struct DiscoveryStream {
_svc: mdns::Service,
}
pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String)
pub fn discovery(handle: &Handle, config: ConnectConfig, device_id: String, port: u16)
-> io::Result<DiscoveryStream>
{
let (discovery, creds_rx) = Discovery::new(config.clone(), device_id);
let serve = {
let http = Http::new();
http.serve_addr_handle(&"0.0.0.0:0".parse().unwrap(), &handle, move || Ok(discovery.clone())).unwrap()
debug!("Zeroconf server listening on 0.0.0.0:{}", port);
http.serve_addr_handle(&format!("0.0.0.0:{}", port).parse().unwrap(), &handle, move || Ok(discovery.clone())).unwrap()
};
let addr = serve.incoming_ref().local_addr();
let server_future = {

View file

@ -81,6 +81,7 @@ struct Setup {
connect_config: ConnectConfig,
credentials: Option<Credentials>,
enable_discovery: bool,
zeroconf_port: u16,
}
fn setup(args: &[String]) -> Setup {
@ -99,7 +100,8 @@ fn setup(args: &[String]) -> Setup {
.optopt("", "backend", "Audio backend to use. Use '?' to list options", "BACKEND")
.optopt("", "device", "Audio device to use. Use '?' to list options", "DEVICE")
.optopt("", "mixer", "Mixer to use", "MIXER")
.optopt("", "initial-volume", "Initial volume in %, once connected (must be from 0 to 100)", "VOLUME");
.optopt("", "initial-volume", "Initial volume in %, once connected (must be from 0 to 100)", "VOLUME")
.optopt("z", "zeroconf-port", "The port the internal server advertised over zeroconf uses.", "ZEROCONF_PORT");
let matches = match opts.parse(&args[1..]) {
Ok(m) => m,
@ -160,6 +162,17 @@ fn setup(args: &[String]) -> Setup {
}
debug!("Volume \"{}\" !", initial_volume);
let zeroconf_port: u16;
if matches.opt_present("zeroconf-port") && matches.opt_str("zeroconf-port").unwrap().parse::<u16>().is_ok() {
let z = matches.opt_str("zeroconf-port").unwrap().parse::<u16>().unwrap();
match z {
z if z >= 1024 => { zeroconf_port = z }
_ => { zeroconf_port = 0 }
}
} else {
zeroconf_port = 0
}
let name = matches.opt_str("name").unwrap();
let use_audio_cache = !matches.opt_present("disable-audio-cache");
@ -221,6 +234,7 @@ fn setup(args: &[String]) -> Setup {
credentials: credentials,
device: device,
enable_discovery: enable_discovery,
zeroconf_port: zeroconf_port,
mixer: mixer,
}
}
@ -269,7 +283,7 @@ impl Main {
let config = task.connect_config.clone();
let device_id = task.session_config.device_id.clone();
task.discovery = Some(discovery(&handle, config, device_id).unwrap());
task.discovery = Some(discovery(&handle, config, device_id, setup.zeroconf_port).unwrap());
}
if let Some(credentials) = setup.credentials {