71 lines
1.8 KiB
Rust
71 lines
1.8 KiB
Rust
mod args;
|
|
use args::Args;
|
|
use clap::Parser;
|
|
use uds::{UnixSeqpacketListener, UnixSeqpacketConn, UnixSocketAddr};
|
|
extern crate uds;
|
|
|
|
fn main() {
|
|
let args = Args::parse();
|
|
|
|
let result = validate_arguments(&args);
|
|
match result {
|
|
Ok(_) => {},
|
|
Err(err) => println!("{}", err.message)
|
|
}
|
|
}
|
|
|
|
fn validate_arguments(args: &Args) -> Result<(), RingsError> {
|
|
if !args.server && !args.client {
|
|
return Err(RingsError{message: "Please provide either --client or --server".to_string()});
|
|
}
|
|
|
|
if args.server && args.client {
|
|
return Err(RingsError{message: "You can't have both flags active at the same time".to_string()});
|
|
}
|
|
|
|
if args.server {
|
|
server()?;
|
|
return Ok(());
|
|
} else if args.client {
|
|
|
|
return Ok(());
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
fn server() -> Result<(), RingsError> {
|
|
create_rings_socket()?;
|
|
Ok(())
|
|
}
|
|
|
|
fn client( addr: &uds::UnixSocketAddr ) -> Result<UnixSeqpacketConn, RingsError> {
|
|
let client = uds::UnixSeqpacketConn::connect_unix_addr(addr);
|
|
match client {
|
|
Ok(client) => {
|
|
return Err(RingsError { message: "to be implemented".to_string() })
|
|
},
|
|
Err(_) => {
|
|
return Err(RingsError { message: "to be written".to_string() })
|
|
}
|
|
}
|
|
}
|
|
|
|
fn create_rings_socket() -> Result<UnixSeqpacketListener, RingsError> {
|
|
let addr = uds::UnixSocketAddr::new("@abstract");
|
|
match addr {
|
|
Ok(addr) => {
|
|
let listener = UnixSeqpacketListener::bind_unix_addr(&addr).expect("create seqpacket listener");
|
|
return Ok(listener)
|
|
},
|
|
Err(_) => {
|
|
return Err(RingsError { message: "boop".to_string() })
|
|
},
|
|
_ => {
|
|
return Err(RingsError { message: "something has gone wrong".to_string() })
|
|
}
|
|
};
|
|
}
|
|
|
|
struct RingsError {
|
|
message: String
|
|
} |