♻️ refactor: make the self-IP code available within the program

main
_ 2021-12-09 02:06:01 +00:00
parent 2ba1dc2834
commit 39bcea54d4
3 changed files with 23 additions and 22 deletions

View File

@ -3,3 +3,4 @@ Cool ideas that can be done but probably won't be.
- Command for shell substituting IPs into commands
- Arbitrary TCP forwarding of (stdin? stdout? TCP?)
- Netcat replacement "Just send a file" _including filename_
- Public-key crypto for trusting peers on first use (Hard cause it requires mutable disk state)

View File

@ -10,6 +10,27 @@ pub enum IpError {
Io (#[from] std::io::Error),
#[error (transparent)]
FromUtf8 (#[from] std::string::FromUtf8Error),
#[error ("Self-IP detection is not implemented on Mac OS")]
NotImplementedOnMac,
}
#[cfg(target_os = "linux")]
pub fn get_ips () -> Result <Vec <Ipv4Addr>, IpError> {
let output = linux::get_ip_addr_output ()?;
Ok (linux::parse_ip_addr_output (&output))
}
#[cfg(target_os = "macos")]
pub fn get_ips () -> Result <Vec <Ipv4Addr>, IpError> {
Err (IpError::NotImplementedOnMac)
}
#[cfg(target_os = "windows")]
pub fn get_ips () -> Result <Vec <Ipv4Addr>, IpError> {
let output = windows::get_ip_config_output ()?;
Ok (windows::parse_ip_config_output (&output))
}
#[cfg(target_os = "linux")]

View File

@ -45,11 +45,8 @@ async fn async_main () -> Result <(), AppError> {
Ok (())
}
#[cfg(target_os = "linux")]
fn my_ips () -> Result <(), AppError> {
let output = ip::linux::get_ip_addr_output ()?;
for addr in ip::linux::parse_ip_addr_output (&output)
for addr in ip::get_ips ()?
.iter ()
.filter (|a| ! a.is_loopback ())
{
@ -58,21 +55,3 @@ fn my_ips () -> Result <(), AppError> {
Ok (())
}
#[cfg(target_os = "macos")]
fn my_ips () -> Result <(), AppError> {
println! ("my-ips subcommand not implemented for macos");
Ok (())
}
#[cfg(target_os = "windows")]
fn my_ips () -> Result <(), AppError> {
let output = ip::windows::get_ip_config_output ()?;
for addr in ip::windows::parse_ip_config_output (&output) {
println! ("{:?}", addr);
}
Ok (())
}