summaryrefslogtreecommitdiffstats
path: root/src/network/connection.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/connection.rs')
-rw-r--r--src/network/connection.rs40
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,
}