浏览代码

Merge pull request #109 from librespot-org/zeroconf_port

Add zeroconf-port option
Sasha Hilton 7 年之前
父节点
当前提交
3efe499737
共有 2 个文件被更改,包括 19 次插入4 次删除
  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 {