binary data transfer, begin CLI, packet routing

This commit is contained in:
Michael Mikovsky
2025-06-12 05:44:54 -06:00
parent aea44b75a2
commit d7f350bd40
21 changed files with 457 additions and 260 deletions
+114 -115
View File
@@ -7,8 +7,8 @@ use std::{
use clap::{Parser, Subcommand};
use log::error;
use unshell_rs::Cli;
use unshell_rs_lib::connection::ConnectionConfig;
use unshell_rs::{Cli, run_endpoint};
use unshell_rs_lib::nodes::ConnectionConfig;
pub static DEFAULT_CONFIG_FILEPATH: &'static str = "server_config.json";
@@ -30,42 +30,32 @@ struct Args {
#[derive(Debug, Subcommand)]
enum Commands {
// Start,
// Middle,
// End,
//
Test1,
Test2,
Test3,
Test4,
Test5,
Test6,
// Run as a service, and potentially hosting a website
// #[command(arg_required_else_help = true)]
// Relay {
// /// IPv4 to listen for clients on.
// host: String,
Relay {
/// IPv4 to listen for clients on.
#[arg(short, long, default_value_t = ("0.0.0.0".to_string()))]
host: String,
// /// Port listen to for command clients
// #[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
// port: u16,
/// Port listen to for command clients
#[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
port: u16,
// /// Json file to store config
// #[arg(short, long, default_value_t = DEFAULT_CONFIG_FILEPATH.to_string())]
// config_filepath: String,
// // /// Port to listen for website traffic (0 is disabled)
// // #[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
// // web_port: u16,
// },
// /// Connect to remote server
// Connect {
// /// Remote server to connect to
// host: String,
/// Json file to store config
#[arg(short, long, default_value_t = DEFAULT_CONFIG_FILEPATH.to_string())]
config_filepath: String,
// /// Port to listen for website traffic (0 is disabled)
// #[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
// web_port: u16,
},
/// Connect to remote server
Connect {
/// Remote server to connect on
host: String,
// /// Port listen to for command clients
// #[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
// port: u16,
// },
#[arg(short, long, default_value_t = DEFAULT_SERVICE_PORT)]
/// Port listen to for command clients
port: u16,
},
}
fn main() -> Result<(), Box<dyn Error>> {
@@ -83,87 +73,96 @@ fn main() -> Result<(), Box<dyn Error>> {
// error!("{}", e);
// }
// }
Commands::Test1 {} => Cli::connect(
"Test1".to_string(),
vec![],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13371")?,
layers: vec![],
}],
),
Commands::Test2 {} => Cli::connect(
"Test2".to_string(),
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13371")?,
layers: vec![],
}],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13372")?,
layers: vec![],
}],
),
Commands::Test3 {} => Cli::connect(
"Test3".to_string(),
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13372")?,
layers: vec![],
}],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13373")?,
layers: vec![],
}],
),
Commands::Test4 {} => Cli::connect(
"Test4".to_string(),
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13371")?,
layers: vec![],
}],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13374")?,
layers: vec![],
}],
),
Commands::Test5 {} => Cli::connect(
"Test5".to_string(),
vec![
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13372")?,
layers: vec![],
},
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13374")?,
layers: vec![],
},
],
vec![ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13375")?,
layers: vec![],
}],
),
Commands::Test6 {} => Cli::connect(
"Test6".to_string(),
vec![
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13373")?,
layers: vec![],
},
ConnectionConfig {
socket: SocketAddr::from_str("127.0.0.1:13375")?,
layers: vec![],
},
],
vec![],
),
// Commands::Connect { host, port } => {
// let addr = SocketAddr::from_str(format!("{}:{}", host, port).as_str());
// Cli::connect(if let Ok(addr) = addr {
// addr
// } else {
// error!("Could not parse address!");
// return Ok(());
// })
// }
// Commands::Test1 {} => Cli::connect(
// "Test1".to_string(),
// vec![],
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13371")?,
// layers: vec![],
// }],
// ),
// Commands::Test2 {} => Cli::connect(
// "Test2".to_string(),
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13371")?,
// layers: vec![],
// }],
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13372")?,
// layers: vec![],
// }],
// ),
// Commands::Test3 {} => Cli::connect(
// "Test3".to_string(),
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13372")?,
// layers: vec![],
// }],
// vec![],
// ), // Commands::Test4 {} => Cli::connect(
// "Test4".to_string(),
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13371")?,
// layers: vec![],
// }],
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13374")?,
// layers: vec![],
// }],
// ),
// Commands::Test5 {} => Cli::connect(
// "Test5".to_string(),
// vec![
// ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13372")?,
// layers: vec![],
// },
// ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13374")?,
// layers: vec![],
// },
// ],
// vec![ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13375")?,
// layers: vec![],
// }],
// ),
// Commands::Test6 {} => Cli::connect(
// "Test6".to_string(),
// vec![
// ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13373")?,
// layers: vec![],
// },
// ConnectionConfig {
// socket: SocketAddr::from_str("127.0.0.1:13375")?,
// layers: vec![],
// },
// ],
// vec![],
// ),
Commands::Connect { host, port } => {
let addr = SocketAddr::from_str(format!("{}:{}", host, port).as_str());
Cli::connect(if let Ok(addr) = addr {
addr
} else {
error!("Could not parse address!");
return Ok(());
})
}
Commands::Relay {
host,
port,
config_filepath,
} => {
let addr = SocketAddr::from_str(format!("{}:{}", host, port).as_str());
run_endpoint(if let Ok(addr) = addr {
addr
} else {
error!("Could not parse address!");
return Ok(());
})
}
} {
error!("{}", e);
};