From 5167e1f06dce7bbf2cb521dbfb5ca28c15b2a547 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 9 Jan 2025 21:01:58 +0000 Subject: [PATCH] add option to disable listeners Signed-off-by: Jason Volk --- conduwuit-example.toml | 5 +++++ src/core/config/mod.rs | 5 +++++ src/router/serve/mod.rs | 14 ++++++++++---- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/conduwuit-example.toml b/conduwuit-example.toml index 96578da3..54143ced 100644 --- a/conduwuit-example.toml +++ b/conduwuit-example.toml @@ -1503,6 +1503,11 @@ # #sender_workers = 0 +# Enables listener sockets; can be set to false to disable listening. This +# option is intended for developer/diagnostic purposes only. +# +#listening = true + [global.tls] # Path to a valid TLS certificate file. diff --git a/src/core/config/mod.rs b/src/core/config/mod.rs index 84b88c7c..cb42940b 100644 --- a/src/core/config/mod.rs +++ b/src/core/config/mod.rs @@ -1710,6 +1710,11 @@ pub struct Config { #[serde(default)] pub sender_workers: usize, + /// Enables listener sockets; can be set to false to disable listening. This + /// option is intended for developer/diagnostic purposes only. + #[serde(default = "true_fn")] + pub listening: bool, + #[serde(flatten)] #[allow(clippy::zero_sized_map_values)] // this is a catchall, the map shouldn't be zero at runtime diff --git a/src/router/serve/mod.rs b/src/router/serve/mod.rs index f6262202..5c822f2b 100644 --- a/src/router/serve/mod.rs +++ b/src/router/serve/mod.rs @@ -6,7 +6,7 @@ mod unix; use std::sync::Arc; use axum_server::Handle as ServerHandle; -use conduwuit::Result; +use conduwuit::{err, Result}; use conduwuit_service::Services; use tokio::sync::broadcast; @@ -16,13 +16,19 @@ use super::layers; pub(super) async fn serve( services: Arc, handle: ServerHandle, - shutdown: broadcast::Receiver<()>, -) -> Result<()> { + mut shutdown: broadcast::Receiver<()>, +) -> Result { let server = &services.server; let config = &server.config; + if !config.listening { + return shutdown + .recv() + .await + .map_err(|e| err!(error!("channel error: {e}"))); + } + let addrs = config.get_bind_addrs(); let (app, _guard) = layers::build(&services)?; - if cfg!(unix) && config.unix_socket_path.is_some() { unix::serve(server, app, shutdown).await } else if config.tls.certs.is_some() {