diff options
Diffstat (limited to '')
-rw-r--r-- | src/wireguard/router/peer.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/wireguard/router/peer.rs b/src/wireguard/router/peer.rs index 67d90d8..3eed7c7 100644 --- a/src/wireguard/router/peer.rs +++ b/src/wireguard/router/peer.rs @@ -22,6 +22,7 @@ use core::sync::atomic::AtomicBool; use alloc::sync::Arc; // TODO: consider no_std alternatives +use std::fmt; use std::net::{IpAddr, SocketAddr}; use arraydeque::{ArrayDeque, Wrapping}; @@ -46,6 +47,14 @@ pub struct PeerInner<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E pub endpoint: Mutex<Option<E>>, } +impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref for PeerInner<E, C, T, B> { + type Target = C::Opaque; + + fn deref(&self) -> &Self::Target { + &self.opaque + } +} + pub struct Peer<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> { inner: Arc<PeerInner<E, C, T, B>>, } @@ -87,6 +96,16 @@ pub struct PeerHandle<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer< peer: Peer<E, C, T, B>, } +impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Clone + for PeerHandle<E, C, T, B> +{ + fn clone(&self) -> Self { + PeerHandle { + peer: self.peer.clone(), + } + } +} + impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref for PeerHandle<E, C, T, B> { @@ -96,6 +115,14 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> Deref } } +impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> fmt::Display + for PeerHandle<E, C, T, B> +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "PeerHandle(format: TODO)") + } +} + impl EncryptionState { fn new(keypair: &Arc<KeyPair>) -> EncryptionState { EncryptionState { @@ -338,6 +365,10 @@ impl<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> PeerHandle<E, *self.peer.endpoint.lock() = Some(endpoint); } + pub fn opaque(&self) -> &C::Opaque { + &self.opaque + } + /// Returns the current endpoint of the peer (for configuration) /// /// # Note |