diff options
Diffstat (limited to 'src/network/connection.rs')
-rw-r--r-- | src/network/connection.rs | 40 |
1 files changed, 29 insertions, 11 deletions
diff --git a/src/network/connection.rs b/src/network/connection.rs index b4e0de2..907e929 100644 --- a/src/network/connection.rs +++ b/src/network/connection.rs @@ -1,16 +1,20 @@ use ::std::collections::HashMap; use ::std::fmt; -use ::std::net::Ipv4Addr; +use ::std::net::{IpAddr, Ipv4Addr}; use ::std::net::SocketAddr; -#[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug)] +#[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)] pub enum Protocol { Tcp, Udp, } impl Protocol { + // Currently, linux implementation doesn't use this function. + // Without this #[cfg] clippy complains about dead code, and CI refuses + // to pass. + #[cfg(target_os = "macos")] pub fn from_str(string: &str) -> Option<Self> { match string { "TCP" => Some(Protocol::Tcp), @@ -29,17 +33,23 @@ impl fmt::Display for Protocol { } } -#[derive(Clone, Ord, PartialOrd, PartialEq, Eq, Hash)] +#[derive(Clone, Ord, PartialOrd, PartialEq, Eq, Hash, Debug, Copy)] pub struct Socket { pub ip: Ipv4Addr, pub port: u16, } -#[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord)] +#[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)] +pub struct LocalSocket { + pub ip: IpAddr, + pub port: u16, + pub protocol: Protocol, +} + +#[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)] pub struct Connection { pub remote_socket: Socket, - pub protocol: Protocol, - pub local_port: u16, + pub local_socket: LocalSocket, } pub fn display_ip_or_host(ip: Ipv4Addr, ip_to_host: &HashMap<Ipv4Addr, String>) -> String { @@ -57,23 +67,31 @@ pub fn display_connection_string( format!( "<{}>:{} => {}:{} ({})", interface_name, - connection.local_port, + connection.local_socket.port, display_ip_or_host(connection.remote_socket.ip, ip_to_host), connection.remote_socket.port, - connection.protocol, + connection.local_socket.protocol, ) } impl Connection { - pub fn new(remote_socket: SocketAddr, local_port: u16, protocol: Protocol) -> Option<Self> { + pub fn new( + remote_socket: SocketAddr, + local_ip: IpAddr, + local_port: u16, + protocol: Protocol, + ) -> Option<Self> { match remote_socket { SocketAddr::V4(remote_socket) => Some(Connection { remote_socket: Socket { ip: *remote_socket.ip(), port: remote_socket.port(), }, - protocol, - local_port, + local_socket: LocalSocket { + ip: local_ip, + port: local_port, + protocol, + }, }), _ => None, } |