secure_exec_sidecar_core/
net.rs1use serde_json::{json, Value};
2use std::net::SocketAddr;
3
4pub fn socket_addr_family(addr: &SocketAddr) -> &'static str {
5 match addr {
6 SocketAddr::V4(_) => "IPv4",
7 SocketAddr::V6(_) => "IPv6",
8 }
9}
10
11pub fn socket_address_value(addr: &SocketAddr) -> Value {
12 json!({
13 "address": addr.ip().to_string(),
14 "family": socket_addr_family(addr),
15 "port": addr.port(),
16 })
17}
18
19pub fn local_endpoint_value(addr: &SocketAddr) -> Value {
20 json!({
21 "localAddress": addr.ip().to_string(),
22 "localPort": addr.port(),
23 "family": socket_addr_family(addr),
24 })
25}
26
27pub fn remote_endpoint_value(addr: &SocketAddr, port: u16) -> Value {
28 json!({
29 "remoteAddress": addr.ip().to_string(),
30 "remotePort": port,
31 "remoteFamily": socket_addr_family(addr),
32 })
33}
34
35pub fn tcp_socket_info_value(local: &SocketAddr, remote: &SocketAddr) -> Value {
36 json!({
37 "localAddress": local.ip().to_string(),
38 "localPort": local.port(),
39 "localFamily": socket_addr_family(local),
40 "remoteAddress": remote.ip().to_string(),
41 "remotePort": remote.port(),
42 "remoteFamily": socket_addr_family(remote),
43 })
44}
45
46pub fn unix_socket_info_value(local_path: Option<&str>, remote_path: Option<&str>) -> Value {
47 json!({
48 "localPath": local_path,
49 "remotePath": remote_path,
50 })
51}
52
53#[cfg(test)]
54mod tests {
55 use super::*;
56 use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
57
58 #[test]
59 fn formats_socket_families() {
60 assert_eq!(
61 socket_addr_family(&SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 1)),
62 "IPv4"
63 );
64 assert_eq!(
65 socket_addr_family(&SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 1)),
66 "IPv6"
67 );
68 }
69
70 #[test]
71 fn formats_tcp_socket_info() {
72 let local = SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 1234);
73 let remote = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(10, 0, 0, 1)), 80);
74
75 assert_eq!(
76 tcp_socket_info_value(&local, &remote),
77 json!({
78 "localAddress": "127.0.0.1",
79 "localPort": 1234,
80 "localFamily": "IPv4",
81 "remoteAddress": "10.0.0.1",
82 "remotePort": 80,
83 "remoteFamily": "IPv4",
84 })
85 );
86 }
87
88 #[test]
89 fn formats_unix_socket_info() {
90 assert_eq!(
91 unix_socket_info_value(Some("/tmp/server.sock"), Some("/tmp/client.sock")),
92 json!({
93 "localPath": "/tmp/server.sock",
94 "remotePath": "/tmp/client.sock",
95 })
96 );
97 }
98}