Kinda get network working

This commit is contained in:
Michael Mikovsky
2025-08-12 22:24:00 -06:00
parent 8b2a596b9a
commit 856d7e467f
15 changed files with 3316 additions and 3219 deletions
+85
View File
@@ -0,0 +1,85 @@
mod syscall_exec;
use std::{
io::{Read, Write},
net::{TcpListener, TcpStream},
thread,
};
use syscall_lib::{Message, ProgramMemory, Syscall};
fn main() {
let listener = TcpListener::bind("127.0.0.1:1234").unwrap();
for stream in listener.incoming() {
let mut stream = stream.unwrap();
thread::spawn(move || {
let _ = handle_connection(&mut stream);
println!("Connection from {} closed", stream.peer_addr().unwrap());
});
}
}
fn handle_connection(stream: &mut TcpStream) -> Result<(), std::io::Error> {
println!("Got connection from {}", stream.peer_addr()?);
// let mut memory = ProgramMemory::default();
loop {
let mut size_buf = [0u8; 4];
stream.read_exact(&mut size_buf)?;
let size = u32::from_be_bytes(size_buf);
let mut buf = vec![0u8; size as usize];
stream.read_exact(&mut buf)?;
let decoded = Syscall::decode(&buf).unwrap();
println!("{:?} -> ", decoded);
// let result = match decoded {
// Syscall::Write(..) => 0,
// _ => syscall_exec::execute_syscall(decoded),
// };
let result = syscall_exec::execute_syscall(decoded);
println!("{:?}", result);
let bytes: [u8; 8] = result.to_be_bytes();
stream.write_all(&bytes)?;
stream.flush()?;
// let response = bincode::serialize(&result).unwrap();
// stream.write_all(&response).unwrap();
// match decoded {
// Message::RequestMemory(addr) => {
// let mem_map = memory.lock().unwrap();
// let data = mem_map.get(&addr);
// let response = bincode::serialize(&data).unwrap();
// stream.write_all(&response).unwrap();
// }
// Message::UpdateMemory(addr, data) => {
// let mut mem_map = memory.lock().unwrap();
// mem_map.insert(addr, data);
// println!("Memory at {} updated.", addr);
// }
// Message::Syscall(_, _) => {
// // The host doesn't execute the syscall.
// // It just waits for the result.
// }
// Message::SyscallReturn(ret, new_mem) => {
// println!("Syscall returned with value: {}", ret);
// if let Some((addr, data)) = new_mem {
// let mut mem_map = memory.lock().unwrap();
// mem_map.insert(addr, data);
// println!("New memory object created at {}.", addr);
// }
// }
// }
// println!("{:?}", decoded);
}
}