socket_proxy_testing/
lib.rs
1use fidl_fuchsia_net::{IpAddress, SocketAddress};
6use fidl_fuchsia_netpol_socketproxy::{
7 DnsServerList, FuchsiaNetworkInfo, Network, NetworkDnsServers, NetworkInfo, StarnixNetworkInfo,
8};
9
10fn dns_server_list(id: u32) -> DnsServerList {
11 DnsServerList { source_network_id: Some(id), addresses: Some(vec![]), ..Default::default() }
12}
13
14fn starnix_network_info(mark: u32) -> NetworkInfo {
15 NetworkInfo::Starnix(StarnixNetworkInfo {
16 mark: Some(mark),
17 handle: Some(0),
18 ..Default::default()
19 })
20}
21
22fn starnix_network(network_id: u32) -> Network {
23 Network {
24 network_id: Some(network_id),
25 info: Some(starnix_network_info(network_id)),
26 dns_servers: Some(Default::default()),
27 ..Default::default()
28 }
29}
30
31fn fuchsia_network(network_id: u32) -> Network {
32 Network {
33 network_id: Some(network_id),
34 info: Some(NetworkInfo::Fuchsia(FuchsiaNetworkInfo { ..Default::default() })),
35 dns_servers: Some(Default::default()),
36 ..Default::default()
37 }
38}
39
40pub trait ToNetwork {
41 fn to_network(self, registry: RegistryType) -> Network;
42}
43
44pub trait ToDnsServerList {
45 fn to_dns_server_list(self) -> DnsServerList;
46}
47
48impl ToNetwork for u32 {
49 fn to_network(self, registry: RegistryType) -> Network {
50 match registry {
51 RegistryType::Starnix => starnix_network(self),
52 RegistryType::Fuchsia => fuchsia_network(self),
53 }
54 }
55}
56
57impl ToDnsServerList for u32 {
58 fn to_dns_server_list(self) -> DnsServerList {
59 dns_server_list(self)
60 }
61}
62
63pub enum RegistryType {
64 Starnix,
65 Fuchsia,
66}
67
68impl ToNetwork for (u32, Vec<IpAddress>) {
69 fn to_network(self, registry: RegistryType) -> Network {
70 let (v4, v6) = self.1.iter().fold((Vec::new(), Vec::new()), |(mut v4s, mut v6s), s| {
71 match s {
72 IpAddress::Ipv4(v4) => v4s.push(*v4),
73 IpAddress::Ipv6(v6) => v6s.push(*v6),
74 }
75 (v4s, v6s)
76 });
77 let base = match registry {
78 RegistryType::Starnix => starnix_network(self.0),
79 RegistryType::Fuchsia => fuchsia_network(self.0),
80 };
81 Network {
82 dns_servers: Some(NetworkDnsServers {
83 v4: Some(v4),
84 v6: Some(v6),
85 ..Default::default()
86 }),
87 ..base
88 }
89 }
90}
91
92impl ToDnsServerList for (u32, Vec<SocketAddress>) {
93 fn to_dns_server_list(self) -> DnsServerList {
94 DnsServerList { addresses: Some(self.1), ..dns_server_list(self.0) }
95 }
96}
97
98impl<N: ToNetwork + Clone> ToNetwork for &N {
99 fn to_network(self, registry: RegistryType) -> Network {
100 self.clone().to_network(registry)
101 }
102}
103
104impl<D: ToDnsServerList + Clone> ToDnsServerList for &D {
105 fn to_dns_server_list(self) -> DnsServerList {
106 self.clone().to_dns_server_list()
107 }
108}