mod ncat;
use std::{
- env, ops::Deref, process::{self, ExitCode}, thread
+ env, ops::Deref, process::{self, ExitCode}, thread, sync::Arc
};
use tokio;
let args: Vec<String> = env::args().collect();
- let mut ncat_opts = NCAT::NcatOptions::new();
-
if args.len() < 2 {
println!("too few arguments");
Ok(mut arcno) => {
- ncat_opts = arcno.as_ref().clone();
+ let mut ncat_opts = arcno.clone();
+
+ match NCAT::runner(ncat_opts.clone()) {
+
+ Ok(()) => {
+
+ return process::ExitCode::from(0u8);
+
+ }
+
+ Err(e) => {
+
+ println!("error: {}", e);
+ }
+ }
+
}
}
}
- tokio::spawn(NCAT::runner(ncat_opts.clone()));
-
- loop {
-
- }
-
return process::ExitCode::from(0u8);
}
}
-pub async fn runner(mut ncat_opts: NcatOptions) -> Result<(), String> {
+pub fn runner(mut ncat_opts: Arc<NcatOptions>) -> Result<(), String> {
let (tx, rx) = mpsc::channel::<NcatOptions>();
ncat_opts_updated = received;
+ let result = listen_and_serve(ncat_opts_updated.clone());
+
+ return result;
}
Err(e) => {
- ncat_opts_updated = ncat_opts.clone();
+ ncat_opts_updated = ncat_opts.as_ref().clone();
+
+ let result = listen_and_serve(ncat_opts_updated.clone());
+
+ return result;
}
};
- let result = listen_and_serve(ncat_opts_updated.clone());
-
- return result;
-
}
return Err("unsupported mode".to_string());
}
-fn client(mut ncat_opts: NcatOptions, tx: Sender<TcpStream>) -> Result<(), String> {
+fn client(mut ncat_opts: Arc<NcatOptions>, tx: Sender<TcpStream>) -> Result<(), String> {
let mut stream = TcpStream::connect((ncat_opts.host.as_str(), ncat_opts.port.to_string().parse::<u16>().unwrap())).unwrap();
let message = line.unwrap();
- if message == "exit".to_string() {
+ if message.trim() == "exit" {
break;
wbuff_vec.append(&mut message_vec);
- //let wbuff = wbuff_vec.as_slice();
-
let wsize = io_stream.write(&wbuff_vec).unwrap();
if wsize <= 0 {
}
}
+ println!("return");
+
return Ok(());
}
let mut header = [0u8; 4];
+ let mut count = 0u32;
+
loop {
let mut valread = 0;
}
- let mut datalen = LittleEndian::read_u32(&mut header);
-
- println!("datalen: {}", datalen);
+ let mut datalen = BigEndian::read_u32(&mut header);
- let mut data = Vec::<u8>::with_capacity(datalen as usize);
-
+ let mut data = vec![0; datalen as usize];;
+
valread = 0;
loop {
}
+
println!("{}", String::from_utf8(data).unwrap());
+
+ count += 1;
}
}
-async fn get_thread(mut ncat_opts: NcatOptions, tx: Sender<NcatOptions>, rx: Receiver<TcpStream>) {
+async fn get_thread(mut ncat_opts: Arc<NcatOptions>, tx: Sender<NcatOptions>, rx: Receiver<TcpStream>) {
if(ncat_opts.mode_client) {