Add the inferproxy byte forwarder with its two limits
Implemented-By: Laguna S 2.1 (OpenCode)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user