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, _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, _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, _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, _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(); }