diff options
Diffstat (limited to 'src/configuration/uapi/get.rs')
-rw-r--r-- | src/configuration/uapi/get.rs | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/configuration/uapi/get.rs b/src/configuration/uapi/get.rs index c6f3c42..99ebbde 100644 --- a/src/configuration/uapi/get.rs +++ b/src/configuration/uapi/get.rs @@ -10,6 +10,45 @@ struct Serializer<C: Configuration> { impl<C: Configuration> Serializer<C> { fn get(&self) -> Vec<String> { - vec![] + 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 } } |