aboutsummaryrefslogtreecommitdiffstats
path: root/src/peer.rs
diff options
context:
space:
mode:
authorJake McGinty <me@jake.su>2018-02-19 14:57:15 +0000
committerJake McGinty <me@jake.su>2018-02-19 14:57:15 +0000
commitf05a39a69579a4f106583d4d9152253b46a5fd73 (patch)
tree40919c0c60702fcf7953953d17986feaf205da5e /src/peer.rs
parentignore incoming tunnel headers, just look at IP version (diff)
downloadwireguard-rs-f05a39a69579a4f106583d4d9152253b46a5fd73.tar.xz
wireguard-rs-f05a39a69579a4f106583d4d9152253b46a5fd73.zip
give each peer their own packet queue
Diffstat (limited to 'src/peer.rs')
-rw-r--r--src/peer.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/peer.rs b/src/peer.rs
index 259c971..23a57ec 100644
--- a/src/peer.rs
+++ b/src/peer.rs
@@ -3,6 +3,7 @@ use byteorder::{ByteOrder, LittleEndian};
use consts::{TRANSPORT_OVERHEAD, TRANSPORT_HEADER_SIZE, MAX_SEGMENT_SIZE, REJECT_AFTER_MESSAGES, PADDING_MULTIPLE};
use cookie;
use failure::{Error, SyncFailure, err_msg};
+use futures::unsync::mpsc;
use ip_packet::IpPacket;
use noise;
use std::{self, mem};
@@ -15,7 +16,6 @@ use rand::{self, Rng};
use snow;
use types::PeerInfo;
-#[derive(Default)]
pub struct Peer {
pub info: PeerInfo,
pub sessions: Sessions,
@@ -25,6 +25,26 @@ pub struct Peer {
pub last_tun_queue: Option<Instant>,
pub last_handshake: Option<Instant>,
pub last_handshake_tai64n: Option<TAI64N>,
+ pub outgoing_queue: mpsc::Receiver<Vec<u8>>,
+ pub outgoing_queue_tx: mpsc::Sender<Vec<u8>>,
+}
+
+impl Default for Peer {
+ fn default() -> Self {
+ let (outgoing_queue_tx, outgoing_queue) = mpsc::channel::<Vec<u8>>(1024);
+ Self {
+ info: Default::default(),
+ sessions: Default::default(),
+ tx_bytes: Default::default(),
+ rx_bytes: Default::default(),
+ last_sent_init: Default::default(),
+ last_tun_queue: Default::default(),
+ last_handshake: Default::default(),
+ last_handshake_tai64n: Default::default(),
+ outgoing_queue_tx,
+ outgoing_queue,
+ }
+ }
}
impl PartialEq for Peer {
@@ -123,6 +143,10 @@ impl Peer {
peer
}
+ pub fn queue_tx(&self) -> mpsc::Sender<Vec<u8>> {
+ self.outgoing_queue_tx.clone()
+ }
+
pub fn find_session(&mut self, our_index: u32) -> Option<(&mut Session, SessionType)> {
let sessions = &mut self.sessions;