aboutsummaryrefslogtreecommitdiff
path: root/src/proxy.rs
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-01-27 21:50:05 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-01-27 21:50:05 +0100
commit8ab8739c55711caa07b8d7540309cb48cc892369 (patch)
treea249dbe9dde23931e775520378fac76d88834499 /src/proxy.rs
parent8ef3566a8961e2305ab701fce160de0dba1d050c (diff)
Adjust middleware to modify responses
Diffstat (limited to 'src/proxy.rs')
-rw-r--r--src/proxy.rs31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/proxy.rs b/src/proxy.rs
index 33de440..781ce2e 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::{CLIENT_MIDDLEWARE, SERVER_MIDDLEWARE};
+use crate::middleware::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");