Add the inferproxy byte forwarder with its two limits

Implemented-By: Laguna S 2.1 (OpenCode)
This commit is contained in:
2026-09-17 21:03:41 -07:00
parent bc1e727c19
commit a0495ea36a
5 changed files with 427 additions and 2 deletions
+66 -2
View File
@@ -1,4 +1,68 @@
use std::env;
use std::fs;
use std::os::unix::fs::PermissionsExt;
use std::path::PathBuf;
use std::process;
use inferproxy::{Limits, serve};
fn main() {
eprintln!("inferproxy: not implemented until M2");
std::process::exit(2);
let args: Vec<String> = env::args().collect();
let mut listen: Option<String> = None;
let mut upstream: Option<String> = None;
let mut i = 1;
while i < args.len() {
match args[i].as_str() {
"--listen" => {
i += 1;
listen = args.get(i).cloned();
}
"--upstream" => {
i += 1;
upstream = args.get(i).cloned();
}
_ => usage(),
}
i += 1;
}
let listen = match listen {
Some(p) => p,
None => usage(),
};
let upstream = match upstream {
Some(p) => p,
None => usage(),
};
let path: PathBuf = listen.into();
match fs::remove_file(&path) {
Ok(()) => {}
Err(e) if e.kind() == std::io::ErrorKind::NotFound => {}
Err(e) => {
eprintln!("inferproxy: cannot remove stale socket: {e}");
process::exit(1);
}
}
let listener = match std::os::unix::net::UnixListener::bind(&path) {
Ok(l) => l,
Err(e) => {
eprintln!("inferproxy: bind failed: {e}");
process::exit(1);
}
};
let perms = fs::Permissions::from_mode(0o600);
if let Err(e) = fs::set_permissions(&path, perms) {
eprintln!("inferproxy: chmod failed: {e}");
process::exit(1);
}
eprintln!("inferproxy: {} -> {}", path.display(), upstream);
if let Err(e) = serve(listener, upstream, Limits::default()) {
eprintln!("inferproxy: {e}");
process::exit(1);
}
}
fn usage() -> ! {
eprintln!("usage: inferproxy --listen <socket path> --upstream <host:port>");
process::exit(2);
}