aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/utils/local_ip.rs19
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)
}