commit 7f234cabc25f456f81060d4af5b9896fa4484cc2 Author: Lucas Schumacher Date: Sat Sep 23 22:25:10 2023 -0400 test program diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..620c248 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "tnc-tcp" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..5f87214 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "tnc-tcp" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..fa643b5 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,38 @@ +use std::io::{prelude::*, stdin}; +use std::net::TcpStream; +use std::thread; + +fn raw_to_string(rawdata: &[u8]) -> String { + let mut data = String::new(); + for byte in rawdata.iter() { + if *byte >= 32 && *byte >= 126 { + data.push((*byte).into()); + } else { + data.push_str(&format!("\\{:x?} ", *byte)); + } + } + data +} +fn main() { + println!("Hello, world!"); + let mut control = TcpStream::connect("localhost:8515").unwrap(); + let mut ctl = control.try_clone().unwrap(); + let mut data = TcpStream::connect("localhost:8516").unwrap(); + thread::spawn(move || { + let mut buf: Vec = vec![0; 4096]; + while let Ok(len) = data.read(&mut buf) { + println!("DATA: {}", raw_to_string(&buf[..len])); + } + }); + thread::spawn(move || { + let mut buf: Vec = vec![0; 2046]; + while let Ok(len) = ctl.read(&mut buf) { + println!("CTLR: {}", raw_to_string(&buf[..len])); + } + }); + let mut input = String::new(); + while let Ok(_n) = stdin().read_line(&mut input) { + input.push('\r'); + control.write(input.as_bytes()).unwrap(); + } +}