chiark / gitweb /
wip packetqueue
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Aug 2021 15:11:45 +0000 (16:11 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 Aug 2021 15:12:01 +0000 (16:12 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
server/suser.rs
src/queue.rs

index 28929d9e8afa0c930f843fd5eb0c57eda3f7b147..69881e54f980752286d7ca0a67ead97a212b3849 100644 (file)
@@ -28,7 +28,7 @@ pub async fn run(global: Arc<Global>,
     target_requests_outstanding: u32,
   }
   let mut outstanding: VecDeque<Outstanding> = default();
-  let mut downbound: VecDeque<RoutedPacketData> = default();
+  let mut downbound: PacketQueue<RoutedPacketData> = default();
 
   let try_send_response = |
     reply_to: oneshot::Sender<WebResponse>,
index c87e1d7b5a9c45cce1c877a41ea3d98efb88635b..9deb48b584ef9a8313bff5908f685f11d910a672 100644 (file)
@@ -4,6 +4,29 @@
 
 use crate::prelude::*;
 
+// xxx are we using this at all ?
+#[derive(Default,Clone)]
+pub struct PacketQueue<D> {
+  queue: VecDeque<D>,
+  content: usize,
+}
+
+impl<D> PacketQueue<D> where D: AsRef<[u8]> {
+  pub fn push_back(&mut self, data: D) {
+    self.content += data.as_ref().len();
+    self.queue.push_back(data);
+  }
+
+  pub fn pop_front(&mut self) -> Option<D> {
+    let data = self.queue.pop_front()?;
+    self.content -= data.as_ref().len();
+    Some(data)
+  }
+
+  pub fn is_empty(&self) -> bool { self.queue.is_empty() }
+  pub fn peek_front(&self) -> Option<&D> { self.queue.front() }
+}
+
 #[derive(Default,Clone)]
 pub struct QueueBuf<E> {
   content: usize,