]> git.r.bdr.sh - rbdr/olden-mail/blobdiff - src/proxy.rs
Trim the trailing "
[rbdr/olden-mail] / src / proxy.rs
index befb35b59c39effc2e8e00de81c3f943c84775b1..b8d95cd466efb263c3736002f07a67e40e53654a 100644 (file)
@@ -42,7 +42,7 @@ use std::thread::{sleep, spawn, JoinHandle};
 use std::time::Duration;
 
 use crate::configuration::Proxy;
-use crate::middleware::{SERVER_MIDDLEWARE, CLIENT_MIDDLEWARE};
+use crate::middleware::get as get_middleware;
 
 /// A proxy server that listens for plaintext connections and forwards them
 /// via TLS.
@@ -117,8 +117,8 @@ fn run_proxy(configuration: &Arc<Proxy>, running: &Arc<AtomicBool>) {
 
     while running.load(Ordering::SeqCst) {
         match listener.accept() {
-            Ok((stream, addr)) => {
-                info!("New {} connection from {}", configuration.protocol, addr);
+            Ok((stream, address)) => {
+                info!("New {} connection from {}", configuration.protocol, address);
 
                 let configuration_clone = Arc::clone(configuration);
                 let handle = spawn(move || {
@@ -159,6 +159,9 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
         return;
     }
 
+    let available_middleware = get_middleware();
+    let available_middleware_clone = Arc::clone(&available_middleware);
+
     let connector = match TlsConnector::new() {
         Ok(c) => c,
         Err(e) => {
@@ -167,14 +170,14 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
         }
     };
 
-    let remote_addr = format!(
+    let remote_address = format!(
         "{}:{}",
         configuration.remote_host, configuration.remote_port
     );
-    let tcp_stream = match TcpStream::connect(&remote_addr) {
+    let tcp_stream = match TcpStream::connect(&remote_address) {
         Ok(stream) => stream,
         Err(e) => {
-            error!("Failed to connect to {}: {}", remote_addr, e);
+            error!("Failed to connect to {}: {}", remote_address, e);
             return;
         }
     };
@@ -229,11 +232,13 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
 
             let mut command = buffer[..bytes_read].to_vec();
 
-            for middleware in CLIENT_MIDDLEWARE {
-                command = middleware(&command);
+            if let Ok(mut guard) = available_middleware.lock() {
+                for middleware in guard.iter_mut() {
+                    command = middleware.client_message(&command);
+                }
             }
 
-            let debug_str = String::from_utf8_lossy(&command)
+            let debug_str = String::from_utf8_lossy(&buffer[..bytes_read])
                 .replace('\n', "\\n")
                 .replace('\r', "\\r")
                 .replace('\t', "\\t");
@@ -288,11 +293,13 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
 
             let mut command = buffer[..bytes_read].to_vec();
 
-            for middleware in SERVER_MIDDLEWARE {
-                command = middleware(&command);
+            if let Ok(mut guard) = available_middleware_clone.lock() {
+                for middleware in guard.iter_mut() {
+                    command = middleware.server_message(&command);
+                }
             }
 
-            let debug_str = String::from_utf8_lossy(&command)
+            let debug_str = String::from_utf8_lossy(&buffer[..bytes_read])
                 .replace('\n', "\\n")
                 .replace('\r', "\\r")
                 .replace('\t', "\\t");