aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-01-27 17:00:32 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-01-27 17:00:32 +0100
commitb5234d6f3aeb75365269c14bd4f553becaf59b70 (patch)
treea7c425c4faa652abaa4af1e4a39cb992bb75feef /src
parent408fda8d8b94fdfd9ad9b9b07faa9716df3d7346 (diff)
Separate client and server middleware
Diffstat (limited to 'src')
-rw-r--r--src/middleware/mod.rs3
-rw-r--r--src/proxy.rs16
2 files changed, 13 insertions, 6 deletions
diff --git a/src/middleware/mod.rs b/src/middleware/mod.rs
index a1070f4..da7e64a 100644
--- a/src/middleware/mod.rs
+++ b/src/middleware/mod.rs
@@ -4,4 +4,5 @@ use find_mailboxes_compatibility::middleware as find_mailboxes_compatibility_mid
type Middleware = fn(&[u8]) -> Vec<u8>;
-pub const MIDDLEWARE: [Middleware; 1] = [find_mailboxes_compatibility_middleware];
+pub const CLIENT_MIDDLEWARE: [Middleware; 1] = [find_mailboxes_compatibility_middleware];
+pub const SERVER_MIDDLEWARE: [Middleware; 0] = [];
diff --git a/src/proxy.rs b/src/proxy.rs
index 2798df3..befb35b 100644
--- a/src/proxy.rs
+++ b/src/proxy.rs
@@ -42,7 +42,7 @@ use std::thread::{sleep, spawn, JoinHandle};
use std::time::Duration;
use crate::configuration::Proxy;
-use crate::middleware::MIDDLEWARE;
+use crate::middleware::{SERVER_MIDDLEWARE, CLIENT_MIDDLEWARE};
/// A proxy server that listens for plaintext connections and forwards them
/// via TLS.
@@ -229,7 +229,7 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
let mut command = buffer[..bytes_read].to_vec();
- for middleware in MIDDLEWARE {
+ for middleware in CLIENT_MIDDLEWARE {
command = middleware(&command);
}
@@ -242,7 +242,7 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
// Lock the TLS stream and write the data to server
match tls_stream_clone.lock() {
Ok(mut tls_guard) => {
- if let Err(error) = tls_guard.write_all(&buffer[..bytes_read]) {
+ if let Err(error) = tls_guard.write_all(&command) {
debug!(">>> Error writing to server: {error}");
break;
}
@@ -286,14 +286,20 @@ fn handle_client(client_stream: TcpStream, configuration: &Arc<Proxy>) {
}
};
- let debug_str = String::from_utf8_lossy(&buffer[..bytes_read])
+ let mut command = buffer[..bytes_read].to_vec();
+
+ for middleware in SERVER_MIDDLEWARE {
+ command = middleware(&command);
+ }
+
+ let debug_str = String::from_utf8_lossy(&command)
.replace('\n', "\\n")
.replace('\r', "\\r")
.replace('\t', "\\t");
debug!("<<< {}", debug_str);
// Write decrypted data to client
- if client_writer.write_all(&buffer[..bytes_read]).is_err() {
+ if client_writer.write_all(&command).is_err() {
debug!("<<< ERR");
break;
}