progress [CI SKIP]

This commit is contained in:
2019-03-30 17:53:27 +01:00
parent a8be702e88
commit a6af494cb9
3 changed files with 97 additions and 48 deletions

View File

@@ -1,4 +1,6 @@
use crate::model::{Base64Backed, ECCKey, Interface, Peer, PeerBuilder, SharedKey, WireguardController};
use crate::model::{
Base64Backed, ECCKey, Interface, Peer, PeerBuilder, SharedKey, WireguardController,
};
use std::io::{BufRead, BufReader, Error, ErrorKind, Result, Write};
use std::net::{IpAddr, SocketAddr};
use std::os::unix::net::UnixStream;
@@ -46,6 +48,10 @@ impl WireguardController for Userspace {
Ok(())
};
match key.as_ref() {
"" => {
//Empty line means end of data
build_peer(&mut peer, builder); //TODO: handle possible actual error case
}
"public_key" => {
add_key(&mut peer, parse_err(ECCKey::from_base64(value))?)?;
}
@@ -64,9 +70,15 @@ impl WireguardController for Userspace {
"last_handshake_time_nsec" => {
builder.add_last_handshake(Duration::from_nanos(value_as_num()?.into()));
}
"persistent_keepalive" => {
"persistent_keepalive_interval" => {
builder.persistent_keepalive(Some(Duration::from_secs(value_as_num()?.into())));
}
"rx_bytes" => {
builder.add_traffic((parse_err(value.parse::<u64>())?, 0));
}
"tx_bytes" => {
builder.add_traffic((0, (parse_err(value.parse::<u64>())?)));
}
"allowed_ip" => {
let mut parts = value.split("/").into_iter();
let net = match (
@@ -89,7 +101,11 @@ impl WireguardController for Userspace {
format!("Returned error code: {}", code),
))?,
},
_ => Err(Error::new(ErrorKind::InvalidData, "Unknown key"))?,
"listen_port" | "fwmark" | "private_key" => (), //Ignore for now
_ => Err(Error::new(
ErrorKind::InvalidData,
["Unknown key: \"", &key, "\""].join(""),
))?,
}
Ok(peer)
}
@@ -100,19 +116,19 @@ impl WireguardController for Userspace {
match build_peer(builder, line) {
Ok(Some(value)) => Some(Some(Ok(value))),
Err(err) => {
eprintln!("{:?}", err);
None
}, //TODO: propagate
eprintln!("{:?}", err);
None
} //TODO: propagate
_ => Some(None),
}
})
.flatten();
Ok(Box::new(peers))
}
fn interface(&mut self) -> Result<Interface> {
let mut stream = UnixStream::connect(&self.0)?;
stream.write_all(b"get=1\n")?;
stream.write_all(b"get=1\n")?;
unimplemented!("TODO: return iface")
}