aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-01-25 11:00:29 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-01-25 11:00:29 +0100
commit2fdda21d13ed742bdb52ec3ba74538af83de2bf4 (patch)
tree99dce889e84538e222a1327caa3157e08bb96911 /src
parenta9923f251d1a3828f5fd943e1b87ec260afa7d82 (diff)
Address clippy issues
Diffstat (limited to 'src')
-rw-r--r--src/configuration.rs10
-rw-r--r--src/main.rs26
-rw-r--r--src/proxy.rs34
3 files changed, 35 insertions, 35 deletions
diff --git a/src/configuration.rs b/src/configuration.rs
index af5c46d..49cd991 100644
--- a/src/configuration.rs
+++ b/src/configuration.rs
@@ -18,7 +18,7 @@ pub enum ConfigurationError {
/// Configuration for any proxy
#[derive(Debug)]
-pub struct ProxyConfiguration {
+pub struct Proxy {
pub local_port: u16,
pub bind_address: String,
pub remote_host: String,
@@ -28,8 +28,8 @@ pub struct ProxyConfiguration {
/// Aggregated configuration for both proxies, already in a reference counter.
pub struct Configuration {
- pub imap_configuration: Arc<ProxyConfiguration>,
- pub smtp_configuration: Arc<ProxyConfiguration>,
+ pub imap_configuration: Arc<Proxy>,
+ pub smtp_configuration: Arc<Proxy>,
}
impl Configuration {
@@ -37,14 +37,14 @@ impl Configuration {
/// variables. Exits if the right ones aren't found.
pub fn new() -> Result<Self, ConfigurationError> {
Ok(Configuration {
- imap_configuration: Arc::new(ProxyConfiguration {
+ imap_configuration: Arc::new(Proxy {
local_port: get_env_number("LOCAL_IMAP_PORT", 143)?,
bind_address: get_env_var("LOCAL_IMAP_BIND_ADDRESS", Some("0.0.0.0".to_string()))?,
remote_host: get_env_var("REMOTE_IMAP_DOMAIN", None)?,
remote_port: get_env_number("REMOTE_IMAP_PORT", 993)?,
protocol: "IMAP",
}),
- smtp_configuration: Arc::new(ProxyConfiguration {
+ smtp_configuration: Arc::new(Proxy {
local_port: get_env_number("LOCAL_SMTP_PORT", 25)?,
bind_address: get_env_var("LOCAL_SMTP_BIND_ADDRESS", Some("0.0.0.0".to_string()))?,
remote_host: get_env_var("REMOTE_SMTP_DOMAIN", None)?,
diff --git a/src/main.rs b/src/main.rs
index 863b2ee..87ae738 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -11,8 +11,8 @@
//!
//! ### Pre-built binaries and packages
//!
-//! Binaries are available for macos and linux, for both aarch64 and x86_64
-//! from https://build.r.bdr.sh/olden-mail, including `.deb` and `.rpm`
+//! Binaries are available for macos and linux, for both aarch64 and `x86_64`
+//! from <https://build.r.bdr.sh/olden-mail>, including `.deb` and `.rpm`
//! packages.
//!
//! ### Homebrew
@@ -35,22 +35,22 @@
//! no options.
//!
//! * `LOCAL_IMAP_PORT` u16, the port in which the server will listen for
-//! IMAP clients. Defaults to 143.
+//! IMAP clients. Defaults to 143.
//! * `LOCAL_IMAP_BIND_ADDRESS` String, the address on which to listen for
-//! IMAP clients. Defaults to 0.0.0.0.
+//! IMAP clients. Defaults to 0.0.0.0.
//! * `REMOTE_IMAP_PORT` u16, the port to which the server will forward the
-//! IMAP messages. Defaults to 993.
+//! IMAP messages. Defaults to 993.
//! * `REMOTE_IMAP_HOST` String, the host to which the server will forward the
-//! IMAP messages. Required.
+//! IMAP messages. Required.
//!
//! * `LOCAL_SMTP_PORT` u16, the port in which the server will listen for
-//! SMTP clients. Defaults to 25.
+//! SMTP clients. Defaults to 25.
//! * `LOCAL_SMTP_BIND_ADDRESS` String, the address on which to listen for
-//! SMTP clients. Defaults to 0.0.0.0.
+//! SMTP clients. Defaults to 0.0.0.0.
//! * `REMOTE_SMTP_PORT` u16, the port to which the server will forward the
-//! SMTP messages. Defaults to 465.
+//! SMTP messages. Defaults to 465.
//! * `REMOTE_SMTP_HOST` String, the host to which the server will forward the
-//! SMTP messages. Required.
+//! SMTP messages. Required.
//!
//! This means the minimum invocation is this (Shown here with inline
//! environment variables)
@@ -74,7 +74,7 @@ mod configuration;
mod proxy;
use configuration::Configuration;
-use proxy::ProxyServer;
+use proxy::Server;
fn main() {
Builder::from_env(Env::default().default_filter_or("info"))
@@ -88,8 +88,8 @@ fn main() {
let (tx, rx) = mpsc::channel();
- let mut imap_proxy = ProxyServer::new(configuration.imap_configuration);
- let mut smtp_proxy = ProxyServer::new(configuration.smtp_configuration);
+ let mut imap_proxy = Server::new(configuration.imap_configuration);
+ let mut smtp_proxy = Server::new(configuration.smtp_configuration);
ctrlc::set_handler(move || {
info!("Shutting down...");
diff --git a/src/proxy.rs b/src/proxy.rs
index c6954a0..a2f62e4 100644
--- a/src/proxy.rs
+++ b/src/proxy.rs
@@ -1,7 +1,7 @@
//! # Proxy Module
//!
//! This module has the actual proxy functionality, exposed through
-//! `ProxyServer`. The proxy consists of a local unencrypted TCP stream
+//! `Server`. The proxy consists of a local unencrypted TCP stream
//! and a remote TLS stream. Messages are passed between them via two
//! threads.
//!
@@ -9,24 +9,24 @@
//! - **Client to Server Thread**: Forwards data from client -> TLS server
//! - **Serveer to Client Thread**: Forwards data from TLS server -> client
//!
-//! Finally, the ProxyServer may be shutdown by calling `.shutdown()`,
+//! Finally, the `Server` may be shutdown by calling `.shutdown()`,
//! this will stop new connections and wait for it to finish.
//!
//! # Example
//!
//! ```
//! use std::sync::Arc;
-//! use crate::configuration::ProxyConfiguration;
-//! use crate::proxy::ProxyServer;
+//! use crate::configuration::Proxy;
+//! use crate::proxy::Server;
//!
-//! let config = Arc::new(ProxyConfiguration {
+//! let config = Arc::new(Proxy {
//! protocol: "IMAP".to_string(),
//! local_port: 143,
//! remote_domain: "imap.example.com".to_string(),
//! remote_port: 993,
//! });
//!
-//! let mut server = ProxyServer::new(config);
+//! let mut server = Server::new(config);
//! // The server runs in a background thread. To shut down gracefully:
//! server.shutdown();
//! ```
@@ -41,33 +41,33 @@ use std::sync::{
use std::thread::{sleep, spawn, JoinHandle};
use std::time::Duration;
-use crate::configuration::ProxyConfiguration;
+use crate::configuration::Proxy;
/// A proxy server that listens for plaintext connections and forwards them
/// via TLS.
///
-/// Creating a new `ProxyServer` spawns a dedicated thread that:
+/// Creating a new `Server` spawns a dedicated thread that:
/// - Binds to a local port (non-blocking mode).
/// - Spawns additional threads for each incoming client connection.
/// - Manages connection-lifetime until it receives a shutdown signal.
-pub struct ProxyServer {
+pub struct Server {
running: Arc<AtomicBool>,
thread_handle: Option<JoinHandle<()>>,
}
-impl ProxyServer {
- /// Creates a new `ProxyServer` for the given `ProxyConfiguration` and
+impl Server {
+ /// Creates a new `Server` for the given `Proxy` configuration and
/// immediately starts it.
///
/// # Arguments
///
- /// * `configuration` - Shared (Arc) `ProxyConfiguration`
+ /// * `configuration` - Shared (Arc) `Proxy`
///
/// # Returns
///
- /// A `ProxyServer` instance that will keep running until its `.shutdown()`
+ /// A `Server` instance that will keep running until its `.shutdown()`
/// method is called, or an error occurs.
- pub fn new(configuration: Arc<ProxyConfiguration>) -> Self {
+ pub fn new(configuration: Arc<Proxy>) -> Self {
let running = Arc::new(AtomicBool::new(true));
let running_clone = Arc::clone(&running);
@@ -75,7 +75,7 @@ impl ProxyServer {
run_proxy(configuration, running_clone);
});
- ProxyServer {
+ Server {
running,
thread_handle: Some(thread_handle),
}
@@ -93,7 +93,7 @@ impl ProxyServer {
/// The main loop that listens for incoming (plaintext) connections on
/// `configuration.bind_address:configuration.local_port`.
-fn run_proxy(configuration: Arc<ProxyConfiguration>, running: Arc<AtomicBool>) {
+fn run_proxy(configuration: Arc<Proxy>, running: Arc<AtomicBool>) {
let listener = match TcpListener::bind(format!(
"{}:{}",
configuration.bind_address, configuration.local_port
@@ -152,7 +152,7 @@ fn run_proxy(configuration: Arc<ProxyConfiguration>, running: Arc<AtomicBool>) {
}
/// Handles a single client connection by bridging it (plaintext) to a TLS connection.
-fn handle_client(client_stream: TcpStream, configuration: Arc<ProxyConfiguration>) {
+fn handle_client(client_stream: TcpStream, configuration: Arc<Proxy>) {
if let Err(e) = client_stream.set_nonblocking(true) {
error!("Failed to set client stream to nonblocking: {}", e);
return;