aboutsummaryrefslogtreecommitdiffstats
path: root/src/configuration/uapi/get.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/configuration/uapi/get.rs')
-rw-r--r--src/configuration/uapi/get.rs41
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
}
}