changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate rust/lib/net/src/connection.rs

changeset 698: 96958d3eb5b0
parent: 0ccbbd142694
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
17
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
1
 use std::{
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
2
   collections::HashMap,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
3
   fmt,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
4
   net::{IpAddr, SocketAddr},
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
5
 };
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
6
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
7
 #[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)]
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
8
 pub enum Protocol {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
9
   Tcp,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
10
   Udp,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
11
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
12
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
13
 impl Protocol {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
14
   pub fn from_str(string: &str) -> Option<Self> {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
15
     match string.to_ascii_uppercase().as_str() {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
16
       "TCP" => Some(Protocol::Tcp),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
17
       "UDP" => Some(Protocol::Udp),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
18
       _ => None,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
19
     }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
20
   }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
21
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
22
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
23
 impl fmt::Display for Protocol {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
24
   fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
25
     match *self {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
26
       Protocol::Tcp => write!(f, "tcp"),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
27
       Protocol::Udp => write!(f, "udp"),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
28
     }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
29
   }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
30
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
31
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
32
 #[derive(Clone, Ord, PartialOrd, PartialEq, Eq, Hash, Debug, Copy)]
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
33
 pub struct Socket {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
34
   pub ip: IpAddr,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
35
   pub port: u16,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
36
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
37
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
38
 #[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)]
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
39
 pub struct LocalSocket {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
40
   pub ip: IpAddr,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
41
   pub port: u16,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
42
   pub protocol: Protocol,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
43
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
44
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
45
 #[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)]
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
46
 pub struct Connection {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
47
   pub local_socket: LocalSocket,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
48
   pub remote_socket: Socket,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
49
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
50
 
67
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 17
diff changeset
51
 pub fn display_ip_or_host(
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 17
diff changeset
52
   ip: IpAddr,
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 17
diff changeset
53
   ip_to_host: &HashMap<IpAddr, String>,
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 17
diff changeset
54
 ) -> String {
17
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
55
   match ip_to_host.get(&ip) {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
56
     Some(host) => host.clone(),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
57
     None => ip.to_string(),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
58
   }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
59
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
60
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
61
 pub fn display_connection_string(
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
62
   connection: &Connection,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
63
   ip_to_host: &HashMap<IpAddr, String>,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
64
   interface_name: &str,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
65
 ) -> String {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
66
   format!(
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
67
     "<{}>:{} => {}:{} ({})",
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
68
     interface_name,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
69
     connection.local_socket.port,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
70
     display_ip_or_host(connection.remote_socket.ip, ip_to_host),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
71
     connection.remote_socket.port,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
72
     connection.local_socket.protocol,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
73
   )
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
74
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
75
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
76
 impl Connection {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
77
   pub fn new(
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
78
     remote_socket: SocketAddr,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
79
     local_ip: IpAddr,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
80
     local_port: u16,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
81
     protocol: Protocol,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
82
   ) -> Self {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
83
     Connection {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
84
       remote_socket: Socket {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
85
         ip: remote_socket.ip(),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
86
         port: remote_socket.port(),
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
87
       },
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
88
       local_socket: LocalSocket {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
89
         ip: local_ip,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
90
         port: local_port,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
91
         protocol,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
92
       },
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
93
     }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
94
   }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
95
 }
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
96
 
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
97
 /// DL/UL stats for network interfaces
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
98
 #[derive(Clone)]
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
99
 pub struct ConnectionInfo {
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
100
   pub interface_name: String,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
101
   pub total_bytes_downloaded: u128,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
102
   pub total_bytes_uploaded: u128,
c7165d93a9eb add obj and net src
ellis <ellis@rwest.io>
parents:
diff changeset
103
 }