Files
wireguard-rs/src/configuration/uapi/get.rs
2024-05-15 09:08:43 +02:00

57 lines
1.7 KiB
Rust

use std::io;
use super::Configuration;
pub fn serialize<C: Configuration, W: io::Write>(writer: &mut W, config: &C) -> io::Result<()> {
let mut write = |key: &'static str, value: String| {
debug_assert!(value.is_ascii());
debug_assert!(key.is_ascii());
log::trace!("UAPI: return : {}={}", key, value);
writer.write_all(key.as_ref())?;
writer.write_all(b"=")?;
writer.write_all(value.as_ref())?;
writer.write_all(b"\n")
};
// serialize interface
config
.get_private_key()
.map(|_sk| write("private_key", hex::encode([0; 32])));
config
.get_listen_port()
.map(|port| write("listen_port", port.to_string()));
config
.get_fwmark()
.map(|fwmark| write("fwmark", fwmark.to_string()));
// serialize all peers
let mut peers = config.get_peers();
while let Some(p) = peers.pop() {
write("public_key", hex::encode(p.public_key.as_bytes()))?;
write("preshared_key", hex::encode(p.preshared_key))?;
write("rx_bytes", p.rx_bytes.to_string())?;
write("tx_bytes", p.tx_bytes.to_string())?;
write(
"persistent_keepalive_interval",
p.persistent_keepalive_interval.to_string(),
)?;
if let Some((secs, nsecs)) = p.last_handshake_time {
write("last_handshake_time_sec", secs.to_string())?;
write("last_handshake_time_nsec", nsecs.to_string())?;
}
if let Some(endpoint) = p.endpoint {
write("endpoint", endpoint.to_string())?;
}
for (ip, cidr) in p.allowed_ips {
write("allowed_ip", ip.to_string() + "/" + &cidr.to_string())?;
}
}
Ok(())
}