From 212573b4b1b2a6ebe86a5ae0795433c85cfd2741 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Fri, 17 Jun 2022 10:42:02 +0200 Subject: [PATCH] Handle CTRL+C for IMAP --- src/server.rs | 32 +++++++++++++++++--------------- src/session.rs | 5 ++++- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/server.rs b/src/server.rs index 2c8fe8b..5e9eb26 100644 --- a/src/server.rs +++ b/src/server.rs @@ -11,11 +11,11 @@ use rusoto_signature::Region; use tokio::sync::watch; use tower::Service; -use crate::service; -use crate::lmtp::*; use crate::config::*; +use crate::lmtp::*; use crate::login::{ldap_provider::*, static_provider::*, *}; use crate::mailbox::Mailbox; +use crate::service; pub struct Server { lmtp_server: Option>, @@ -38,7 +38,6 @@ impl Server { }) } - pub async fn run(self) -> Result<()> { //tracing::info!("Starting server on {:#}", self.imap.incoming.local_addr); tracing::info!("Starting Aerogramme..."); @@ -49,21 +48,24 @@ impl Server { let _ = provoke_exit.send(true); }; - - try_join!(async { - match self.lmtp_server.as_ref() { - None => Ok(()), - Some(s) => s.run(exit_signal.clone()).await, + try_join!( + async { + match self.lmtp_server.as_ref() { + None => Ok(()), + Some(s) => s.run(exit_signal.clone()).await, + } + }, + //@FIXME handle ctrl + c + async { + let mut must_exit = exit_signal.clone(); + tokio::select! { + s = self.imap_server => s?, + _ = must_exit.changed() => tracing::info!("IMAP server received CTRL+C, exiting."), + } + Ok(()) } - }, - //@FIXME handle ctrl + c - async { - self.imap_server.await?; - Ok(()) - } )?; - Ok(()) } } diff --git a/src/session.rs b/src/session.rs index a3e4e24..a709986 100644 --- a/src/session.rs +++ b/src/session.rs @@ -84,7 +84,10 @@ pub struct Instance { pub user: Option, } impl Instance { - fn new(login_provider: Arc, rx: mpsc::Receiver) -> Self { + fn new( + login_provider: Arc, + rx: mpsc::Receiver, + ) -> Self { Self { login_provider, rx,