Browse Source

Add zeroconf-port option

Sasha Hilton 7 years ago
parent
commit
8e8bab03d5
2 changed files with 19 additions and 4 deletions
  1. 3 2
      src/discovery.rs
  2. 16 2
      src/main.rs

+ 3 - 2
src/discovery.rs

@@ -194,14 +194,15 @@ pub struct DiscoveryStream {
     _svc: mdns::Service,
     _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>
     -> io::Result<DiscoveryStream>
 {
 {
     let (discovery, creds_rx) = Discovery::new(config.clone(), device_id);
     let (discovery, creds_rx) = Discovery::new(config.clone(), device_id);
 
 
     let serve = {
     let serve = {
         let http = Http::new();
         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 addr = serve.incoming_ref().local_addr();
     let server_future = {
     let server_future = {

+ 16 - 2
src/main.rs

@@ -81,6 +81,7 @@ struct Setup {
     connect_config: ConnectConfig,
     connect_config: ConnectConfig,
     credentials: Option<Credentials>,
     credentials: Option<Credentials>,
     enable_discovery: bool,
     enable_discovery: bool,
+    zeroconf_port: u16,
 }
 }
 
 
 fn setup(args: &[String]) -> Setup {
 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("", "backend", "Audio backend to use. Use '?' to list options", "BACKEND")
         .optopt("", "device", "Audio device to use. Use '?' to list options", "DEVICE")
         .optopt("", "device", "Audio device to use. Use '?' to list options", "DEVICE")
         .optopt("", "mixer", "Mixer to use", "MIXER")
         .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..]) {
     let matches = match opts.parse(&args[1..]) {
         Ok(m) => m,
         Ok(m) => m,
@@ -160,6 +162,17 @@ fn setup(args: &[String]) -> Setup {
         }
         }
     debug!("Volume \"{}\" !", initial_volume);
     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 name = matches.opt_str("name").unwrap();
     let use_audio_cache = !matches.opt_present("disable-audio-cache");
     let use_audio_cache = !matches.opt_present("disable-audio-cache");
 
 
@@ -221,6 +234,7 @@ fn setup(args: &[String]) -> Setup {
         credentials: credentials,
         credentials: credentials,
         device: device,
         device: device,
         enable_discovery: enable_discovery,
         enable_discovery: enable_discovery,
+        zeroconf_port: zeroconf_port,
         mixer: mixer,
         mixer: mixer,
     }
     }
 }
 }
@@ -269,7 +283,7 @@ impl Main {
             let config = task.connect_config.clone();
             let config = task.connect_config.clone();
             let device_id = task.session_config.device_id.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 {
         if let Some(credentials) = setup.credentials {