Reconsider inorder queueing
This commit is contained in:
@@ -17,6 +17,7 @@ use super::peer;
|
||||
use super::peer::{Peer, PeerInner};
|
||||
use super::SIZE_MESSAGE_PREFIX;
|
||||
|
||||
use super::messages::TYPE_TRANSPORT;
|
||||
use super::types::{Callback, Callbacks, KeyCallback, Opaque, PhantomCallbacks, RouterError};
|
||||
use super::workers::{worker_parallel, JobParallel};
|
||||
|
||||
@@ -66,8 +67,8 @@ pub struct DecryptionState<C: Callbacks, T: Tun, B: Bind> {
|
||||
}
|
||||
|
||||
pub struct Device<C: Callbacks, T: Tun, B: Bind>(
|
||||
Arc<DeviceInner<C, T, B>>,
|
||||
Vec<thread::JoinHandle<()>>,
|
||||
Arc<DeviceInner<C, T, B>>, // reference to device state
|
||||
Vec<thread::JoinHandle<()>>, // join handles for workers
|
||||
);
|
||||
|
||||
impl<C: Callbacks, T: Tun, B: Bind> Drop for Device<C, T, B> {
|
||||
@@ -207,8 +208,17 @@ impl<C: Callbacks, T: Tun, B: Bind> Device<C, T, B> {
|
||||
|
||||
// schedule for encryption and transmission to peer
|
||||
if let Some(job) = peer.send_job(msg) {
|
||||
println!("made job!");
|
||||
self.0.injector.push((peer.clone(), job));
|
||||
}
|
||||
|
||||
// ensure workers running
|
||||
if self.0.parked.load(Ordering::Acquire) {
|
||||
for handle in &self.1 {
|
||||
handle.thread().unpark();
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -216,8 +226,17 @@ impl<C: Callbacks, T: Tun, B: Bind> Device<C, T, B> {
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
/// - ct_msg: Encrypted transport message
|
||||
pub fn recv(&self, ct_msg: &mut [u8]) {
|
||||
/// - msg: Encrypted transport message
|
||||
pub fn recv(&self, msg: Vec<u8>) -> Result<(), RouterError> {
|
||||
// ensure that the type field access is within bounds
|
||||
if msg.len() < SIZE_MESSAGE_PREFIX || msg[0] != TYPE_TRANSPORT {
|
||||
return Err(RouterError::MalformedTransportMessage);
|
||||
}
|
||||
|
||||
// parse / cast
|
||||
|
||||
// lookup peer based on receiver id
|
||||
|
||||
unimplemented!();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user