mirror of
https://github.com/Astatin3/syscall-stream-rs.git
synced 2026-06-08 16:08:01 -06:00
53 lines
1.3 KiB
Rust
53 lines
1.3 KiB
Rust
use std::{
|
|
io::{BufReader, BufWriter, Read, Write},
|
|
net::TcpStream,
|
|
};
|
|
|
|
use syscall_lib::{ProgramMemory, Syscall};
|
|
|
|
use crate::syscall_exec;
|
|
|
|
pub struct Host {
|
|
stream: TcpStream,
|
|
reader: BufReader<TcpStream>,
|
|
writer: BufWriter<TcpStream>,
|
|
// memory: ProgramMemory,
|
|
}
|
|
|
|
impl Host {
|
|
pub fn new() -> Result<Host, std::io::Error> {
|
|
let stream = TcpStream::connect("localhost:1234")?;
|
|
let reader = BufReader::new(stream.try_clone()?);
|
|
let writer = BufWriter::new(stream.try_clone()?);
|
|
Ok(Host {
|
|
stream,
|
|
reader,
|
|
writer,
|
|
// memory: ProgramMemory::new(),
|
|
})
|
|
}
|
|
|
|
pub fn execute(&mut self, syscall: &Syscall) -> isize {
|
|
let bytes = syscall.encode();
|
|
|
|
self.writer
|
|
.write_all(&u32::to_be_bytes(bytes.len() as u32))
|
|
.unwrap();
|
|
self.writer.write_all(&bytes).unwrap();
|
|
self.writer.flush().unwrap();
|
|
|
|
println!("{:?} -> ", syscall);
|
|
|
|
// let response = syscall_exec::execute_syscall(syscall);
|
|
|
|
let mut response = [0u8; 8];
|
|
self.reader.read_exact(&mut response).unwrap();
|
|
|
|
let response = isize::from_be_bytes(response);
|
|
|
|
println!("{:?}", response);
|
|
|
|
response
|
|
}
|
|
}
|