From c4ae23e5eed49a4e765e19e56adc41ee4c065c35 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 28 Mar 2022 02:19:09 +0100 Subject: [PATCH] server: Support explicit specification of addresses to listen on Signed-off-by: Ian Jackson --- TODO | 1 - src/config.rs | 27 ++++++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/TODO b/TODO index 07ea54f7..9419f15b 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,4 @@ TODOs in diff content-type for download bundles http2 HEAD requests -fix listen Build on stable diff --git a/src/config.rs b/src/config.rs index d3cd1182..b580c3b9 100644 --- a/src/config.rs +++ b/src/config.rs @@ -30,6 +30,7 @@ pub struct ServerConfigSpec { pub command_socket: Option, pub debug: Option, pub http_port: Option, + #[serde(default)] pub listen: Vec, pub public_url: String, pub sse_wildcard_url: Option, pub template_dir: Option, @@ -130,7 +131,7 @@ impl ServerConfigSpec { -> Result { let ServerConfigSpec { change_directory, base_dir, save_dir, command_socket, debug, - http_port, public_url, sse_wildcard_url, + http_port, listen, public_url, sse_wildcard_url, template_dir, specs_dir, nwtemplate_dir, wasm_dir, libexec_dir, usvg_bin, log, bundled_sources, shapelibs, sendmail, debug_js_inject_file, check_bundled_sources, fake_rng, @@ -281,14 +282,22 @@ impl ServerConfigSpec { let check_bundled_sources = check_bundled_sources.unwrap_or(true); - let http_port = http_port.unwrap_or(8000); - let addrs: &[&dyn IpAddress] = &[ - &Ipv6Addr::LOCALHOST, - &Ipv4Addr::LOCALHOST, - ]; - let listen = addrs.iter() - .map(|addr| addr.with_port(http_port)) - .collect(); + let listen = (! listen.is_empty()).then(|| listen); + let listen = match (listen, http_port) { + (Some(addrs), None) => addrs, + (Some(_), Some(_)) => throw!(anyhow!( + "both http_port and listen specified")), + (None, http_port) => { + let http_port = http_port.unwrap_or(8000); + let addrs: &[&dyn IpAddress] = &[ + &Ipv6Addr::LOCALHOST, + &Ipv4Addr::LOCALHOST, + ]; + addrs.iter() + .map(|addr| addr.with_port(http_port)) + .collect() + }, + }; let server = ServerConfig { save_dir, command_socket, debug, -- 2.30.2