From baffd770729594aa65374536a01ff3511087b42c Mon Sep 17 00:00:00 2001 From: Henning Holm Date: Sun, 3 Jan 2021 18:21:42 +0100 Subject: [PATCH] Restructure launch of servers This change enables the possibility of launching multiple Iron server instances, which is required for implementing the redirect HTTP server. --- src/main.rs | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index fcd2e8a..751d8f5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ extern crate log; use crate::config::Options; use hyper_native_tls::NativeTlsServer; -use iron::prelude::*; +use iron::{prelude::*, Listening}; use staticfiles::*; use structopt::StructOpt; @@ -19,12 +19,21 @@ mod logger; mod signal_manager; mod staticfiles; -fn on_server_running(server_name: &str, proto: &str, addr: &str) { +/// Struct for holding a reference to a running iron server instance +#[derive(Debug)] +struct RunningServer { + listening: Listening, + server_type: String, +} + +fn on_server_running(server_name: &str, running_servers: &Vec) { // Notify when server is running - logger::log_server(&format!( - "Static {} Server \"{}\" is listening on {}", - proto, server_name, addr - )); + running_servers.iter().for_each(|server| { + logger::log_server(&format!( + "{} Server \"{}\" is listening on {}", + server.server_type, server_name, server.listening.socket + )) + }); // Wait for incoming signals (E.g Ctrl+C (SIGINT), SIGTERM, etc signal_manager::wait_for_signal(|sig: signal::Signal| { @@ -42,7 +51,6 @@ fn main() { logger::init(&opts.log_level); let addr = &format!("{}{}{}", opts.host, ":", opts.port); - let proto = if opts.tls { "HTTPS" } else { "HTTP" }; // Configure & launch the HTTP server @@ -54,19 +62,29 @@ fn main() { cors_allow_origins: opts.cors_allow_origins, }); + let mut running_servers = Vec::new(); if opts.tls { + // Launch static HTTPS server let ssl = NativeTlsServer::new(opts.tls_pkcs12, &opts.tls_pkcs12_passwd).unwrap(); match Iron::new(files.handle()).https(addr, ssl) { - Result::Ok(_) => on_server_running(&opts.name, &proto, addr), + Result::Ok(listening) => running_servers.push(RunningServer { + listening, + server_type: "Static HTTPS".to_string(), + }), Result::Err(err) => panic!("{:?}", err), } } else { + // Launch static HTTP server match Iron::new(files.handle()).http(addr) { - Result::Ok(_) => on_server_running(&opts.name, &proto, addr), + Result::Ok(listening) => running_servers.push(RunningServer { + listening, + server_type: "Static HTTP".to_string(), + }), Result::Err(err) => panic!("{:?}", err), } } + on_server_running(&opts.name, &running_servers); } #[cfg(test)] -- libgit2 1.7.2