diff options
author | Özgür Kesim <oec@codeblau.de> | 2022-01-31 14:08:18 +0100 |
---|---|---|
committer | Özgür Kesim <oec@codeblau.de> | 2022-01-31 14:08:18 +0100 |
commit | 322b3c0624028d059613b557a6298001939e4ae9 (patch) | |
tree | 2da86b1094dccb05800a42a832489438e03c9e78 /src | |
parent | 3805929479b58eb53bd86244abe676c9b4c1def2 (diff) |
ipv6 address added
Diffstat (limited to 'src')
-rw-r--r-- | src/utils/local_ip.rs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/utils/local_ip.rs b/src/utils/local_ip.rs index 6df7016..07f5c19 100644 --- a/src/utils/local_ip.rs +++ b/src/utils/local_ip.rs @@ -3,15 +3,25 @@ use crate::types::ThreadsData; pub async fn get_local_ip() -> ThreadsData { let addrs = nix::ifaddrs::getifaddrs().unwrap(); - let mut ip = String::new(); + let mut ip = String::new(); + let mut ip6 = String::new(); + let mut found4 = false; + let mut found6 = false; for ifaddr in addrs { match ifaddr.address { Some(address) => { + if found4 && found6 { break; } if ifaddr.interface_name == CONFIG.local_ip.interface { match address.family() { nix::sys::socket::AddressFamily::Inet => { + if found4 { continue; } ip = address.to_string().split(':').next().unwrap().to_string(); - break; + found4 = true; + } + nix::sys::socket::AddressFamily::Inet6 => { + if found6 { continue; } + ip6 = address.to_string().rsplit_once(':').unwrap().0.to_string(); + found6 = true; } _ => continue, }; @@ -23,6 +33,9 @@ pub async fn get_local_ip() -> ThreadsData { if ip.is_empty() { ip = String::from("Error!") } - let data = format!(" {} {} {}", CONFIG.local_ip.icon, ip, CONFIG.seperator); + if !ip6.is_empty() { + ip6 = format!(" {}", ip6) + } + let data = format!(" {} {}{} {}", CONFIG.local_ip.icon, ip, ip6, CONFIG.seperator); ThreadsData::LocalIp(data) } |