]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Improve make_addr_port by letting SocketAddrV4/V6 format themselves.
authorKevin P. Fleming <kevin@km6g.us>
Sun, 6 Jul 2025 15:46:28 +0000 (11:46 -0400)
committerKevin P. Fleming <kevin@km6g.us>
Mon, 7 Jul 2025 10:15:51 +0000 (06:15 -0400)
contrib/pblogger-rs/src/display.rs

index d85f0ca62e1093154310fb8ca38e3ebe6ed6669c..c8fb08d20ac59c801c061d73471fcc1c0cc374b9 100644 (file)
@@ -2,7 +2,7 @@ use crate::pdns::{PbdnsMessage, pbdns_message};
 use byteorder::{ByteOrder, NetworkEndian};
 use chrono::DateTime;
 use std::fmt;
-use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr};
+use std::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
 
 pub struct ClientMessage {
     pub client_addr: SocketAddr,
@@ -30,25 +30,30 @@ fn make_addr_port(
     if let Some(family) = msg_family
         && let Some(addr) = msg_addr
     {
-        let fromaddr = match pbdns_message::SocketFamily::try_from(family) {
-            Ok(pbdns_message::SocketFamily::Inet) => {
+        match (pbdns_message::SocketFamily::try_from(family), msg_port) {
+            (Ok(pbdns_message::SocketFamily::Inet), Some(port)) => SocketAddrV4::new(
+                Ipv4Addr::from_bits(NetworkEndian::read_u32(&addr[0..4])),
+                u16::try_from(port).unwrap(),
+            )
+            .to_string(),
+            (Ok(pbdns_message::SocketFamily::Inet6), Some(port)) => SocketAddrV6::new(
+                Ipv6Addr::from_bits(NetworkEndian::read_u128(&addr[0..16])),
+                u16::try_from(port).unwrap(),
+                0,
+                0,
+            )
+            .to_string(),
+            (Ok(pbdns_message::SocketFamily::Inet), None) => {
                 Ipv4Addr::from_bits(NetworkEndian::read_u32(&addr[0..4])).to_string()
             }
-            Ok(pbdns_message::SocketFamily::Inet6) => {
-                format!(
-                    "[{}]",
-                    Ipv6Addr::from_bits(NetworkEndian::read_u128(&addr[0..16]))
-                )
+            (Ok(pbdns_message::SocketFamily::Inet6), None) => {
+                Ipv6Addr::from_bits(NetworkEndian::read_u128(&addr[0..16])).to_string()
             }
-            Err(_) => "unsupported".into(),
-        };
-        if let Some(port) = msg_port {
-            return format!("{fromaddr}:{port}");
+            (Err(_), _) => "unsupported".into(),
         }
-        return fromaddr;
+    } else {
+        "unknown".into()
     }
-
-    "unknown".into()
 }
 
 #[allow(clippy::too_many_lines)]