diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2020-05-10 21:23:34 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2020-05-10 21:23:51 +0200 |
commit | 6c386146a77ecb8ff317d76823c0f788bd70d8c3 (patch) | |
tree | fa7a7399a74eebb2b1000f0bab0d41efe6c9ec50 /src/wireguard/router/peer.rs | |
parent | Added basic readme. (diff) | |
download | wireguard-rs-6c386146a77ecb8ff317d76823c0f788bd70d8c3.tar.xz wireguard-rs-6c386146a77ecb8ff317d76823c0f788bd70d8c3.zip |
Refactoring timer code:
- Remove the Events struct
- Implement Callbacks on the PeerInner, elimiting an Arc.
Diffstat (limited to 'src/wireguard/router/peer.rs')
-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 |