From 6ddb2ca6ec02b79e63ce7eb442904f4fc91e077e Mon Sep 17 00:00:00 2001 From: Hristo Venev Date: Tue, 19 Mar 2019 11:47:44 +0200 Subject: Move stuff around, base64 decode keys. --- src/proto.rs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'src/proto.rs') diff --git a/src/proto.rs b/src/proto.rs index 414eee8..bfc3cbb 100644 --- a/src/proto.rs +++ b/src/proto.rs @@ -2,15 +2,15 @@ // // See COPYING. +use crate::ip::{Ipv4Net, Ipv6Net}; +use crate::model::{Key, Endpoint}; use serde_derive; use std::time::SystemTime; -use crate::ip::{Endpoint, Ipv4Net, Ipv6Net}; - #[serde(deny_unknown_fields)] #[derive(serde_derive::Serialize, serde_derive::Deserialize, Clone, PartialEq, Eq, Debug)] pub struct Peer { - pub public_key: String, + pub public_key: Key, #[serde(default = "Vec::new")] pub ipv4: Vec, #[serde(default = "Vec::new")] @@ -32,11 +32,7 @@ pub struct Server { pub struct RoadWarrior { #[serde(flatten)] pub peer: Peer, - pub base: String, -} - -fn default_peer_keepalive() -> u32 { - 0 + pub base: Key, } #[derive(serde_derive::Serialize, serde_derive::Deserialize, Clone, PartialEq, Eq, Debug)] @@ -62,10 +58,16 @@ pub struct Source { pub next: Option, } +#[inline] +fn default_peer_keepalive() -> u32 { + 0 +} + mod serde_utc { use crate::bin; use chrono::{DateTime, SecondsFormat, TimeZone, Utc}; use serde::*; + use std::fmt; use std::time::SystemTime; pub fn serialize(t: &SystemTime, ser: S) -> Result { @@ -83,9 +85,19 @@ mod serde_utc { pub fn deserialize<'de, D: Deserializer<'de>>(de: D) -> Result { if de.is_human_readable() { - let s: String = String::deserialize(de)?; - let t = DateTime::parse_from_rfc3339(&s).map_err(de::Error::custom)?; - Ok(t.into()) + struct RFC3339Visitor; + impl<'de> serde::de::Visitor<'de> for RFC3339Visitor { + type Value = SystemTime; + + fn expecting(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str("RFC3339 time") + } + + fn visit_str(self, s: &str) -> Result { + DateTime::parse_from_rfc3339(s).map_err(de::Error::custom).map(SystemTime::from) + } + } + de.deserialize_str(RFC3339Visitor) } else { let mut buf = <[u8; 12]>::deserialize(de)?; let (buf_secs, buf_nanos) = array_refs![&mut buf, 8, 4]; -- cgit