66 lines
1.8 KiB
Rust
66 lines
1.8 KiB
Rust
use sslrelay::{self, CallbackRet, HandlerCallbacks, RelayConfig, TCPDataType, TLSConfig};
|
|
|
|
// Handler object
|
|
#[derive(Clone)] // Must have Clone trait implemented.
|
|
struct Handler;
|
|
|
|
/*
|
|
Callback traits that can be used to read or inject data
|
|
into data upstream or downstream.
|
|
*/
|
|
impl HandlerCallbacks for Handler {
|
|
// DownStream non blocking callback
|
|
fn ds_nb_callback(&self, in_data: Vec<u8>, _conn_id: u64) {
|
|
if let Ok(in_data) = str::from_utf8(&in_data) {
|
|
println!("[downstream] {in_data}");
|
|
} else {
|
|
//println!("[downstream] {in_data:?}");
|
|
}
|
|
}
|
|
|
|
// DownStream blocking callback
|
|
fn ds_b_callback(&mut self, _in_data: Vec<u8>, _conn_id: u64) -> CallbackRet {
|
|
//println!("[CALLBACK] Down Stream Blocking CallBack!");
|
|
CallbackRet::Relay(_in_data)
|
|
}
|
|
|
|
// UpStream non blocking callback
|
|
fn us_nb_callback(&self, in_data: Vec<u8>, _conn_id: u64) {
|
|
if let Ok(in_data) = str::from_utf8(&in_data) {
|
|
println!("[upstream] {in_data}");
|
|
} else {
|
|
//println!("[upstream] {in_data:?}");
|
|
}
|
|
}
|
|
|
|
// UpStream blocking callback
|
|
fn us_b_callback(&mut self, _in_data: Vec<u8>, _conn_id: u64) -> CallbackRet {
|
|
//println!("[CALLBACK] Up Stream Blocking CallBack!");
|
|
CallbackRet::Relay(_in_data)
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
// Create new SSLRelay object
|
|
let mut relay = sslrelay::SSLRelay::new(
|
|
Handler,
|
|
RelayConfig {
|
|
downstream_data_type: TCPDataType::TLS,
|
|
upstream_data_type: TCPDataType::TLS,
|
|
bind_host: "127.0.0.1".to_string(),
|
|
bind_port: "443".to_string(),
|
|
remote_host: |server_name| {
|
|
server_name.map_or_else(|| panic!("NO HOST"), str::to_string)
|
|
},
|
|
remote_port: "443".to_string(),
|
|
tls_config:
|
|
TLSConfig::FILE {
|
|
certificate_path: "/dev/shm/exp/certs/prime256v1/apple.com.crt".to_string(),
|
|
private_key_path: "/dev/shm/exp/certs/prime256v1/apple.com.key".to_string(),
|
|
},
|
|
},
|
|
);
|
|
|
|
// Start listening
|
|
relay.start();
|
|
}
|