use std::time::Duration;
use crate::configuration::Proxy;
-use crate::middleware::{CLIENT_MIDDLEWARE, SERVER_MIDDLEWARE};
+use crate::middleware::get as get_middleware;
/// A proxy server that listens for plaintext connections and forwards them
/// via TLS.
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 || {
return;
}
+ let available_middleware = get_middleware();
+ let available_middleware_clone = Arc::clone(&available_middleware);
+
let connector = match TlsConnector::new() {
Ok(c) => c,
Err(e) => {
}
};
- 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;
}
};
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_original = String::from_utf8_lossy(&buffer[..bytes_read])
.replace('\n', "\\n")
.replace('\r', "\\r")
.replace('\t', "\\t");
- debug!(">>> {}", debug_str);
+
+ let debug_final = String::from_utf8_lossy(&command)
+ .replace('\n', "\\n")
+ .replace('\r', "\\r")
+ .replace('\t', "\\t");
+
+ debug!(">>> {debug_original}");
+ if debug_original != debug_final {
+ debug!("### {debug_final}");
+ }
// Lock the TLS stream and write the data to server
match tls_stream_clone.lock() {
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_original = String::from_utf8_lossy(&buffer[..bytes_read])
.replace('\n', "\\n")
.replace('\r', "\\r")
.replace('\t', "\\t");
- debug!("<<< {}", debug_str);
+
+ let debug_final = String::from_utf8_lossy(&command)
+ .replace('\n', "\\n")
+ .replace('\r', "\\r")
+ .replace('\t', "\\t");
+ debug!("<<< {debug_original}");
+ if debug_original != debug_final {
+ debug!("### {debug_final}");
+ }
// Write decrypted data to client
if client_writer.write_all(&command).is_err() {