1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
use hex::FromHex;
use subtle::ConstantTimeEq;
use x25519_dalek::{PublicKey, StaticSecret};
use super::{ConfigError, Configuration};
struct Serializer<C: Configuration> {
config: C,
}
impl<C: Configuration> Serializer<C> {
fn get(&self) -> Vec<String> {
let mut peers = self.config.get_peers();
let mut lines = Vec::with_capacity(peers.len() * 6 + 5);
let mut write = |key, value: String| {
lines.push(String::new() + key + "=" + &value);
};
// serialize interface
self.config
.get_private_key()
.map(|sk| write("private_key", hex::encode(sk.to_bytes())));
self.config
.get_listen_port()
.map(|port| write("listen_port", port.to_string()));
self.config
.get_fwmark()
.map(|fwmark| write("fwmark", fwmark.to_string()));
// serialize all peers
while let Some(p) = peers.pop() {
write("rx_bytes", p.rx_bytes.to_string());
write("tx_bytes", p.tx_bytes.to_string());
write(
"last_handshake_time_sec",
p.last_handshake_time_nsec.to_string(),
);
write(
"last_handshake_time_nsec",
p.last_handshake_time_nsec.to_string(),
);
write("public_key", hex::encode(p.public_key.as_bytes()));
p.preshared_key
.map(|psk| write("preshared_key", hex::encode(psk)));
for (ip, cidr) in p.allowed_ips {
write("allowed_ip", ip.to_string() + "/" + &cidr.to_string())
}
}
lines
}
}
|