From: Ian Jackson Date: Tue, 3 Aug 2021 23:44:12 +0000 (+0100) Subject: rx queue add delimiters X-Git-Tag: hippotat/1.0.0~362 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=ed869c22fe347895322b5e7827d74951fba5bc8e;p=hippotat.git rx queue add delimiters Signed-off-by: Ian Jackson --- diff --git a/src/bin/client.rs b/src/bin/client.rs index 937d35f..95d4730 100644 --- a/src/bin/client.rs +++ b/src/bin/client.rs @@ -193,7 +193,7 @@ async fn run_client( let mut reqs: Vec = Vec::with_capacity(ic.max_requests_outstanding.sat()); - let mut rx_queue: Queue> = default(); + let mut rx_queue: FrameQueue = default(); // xxx check that ic settings are all honoured @@ -270,7 +270,6 @@ async fn run_client( Ok(()) }, |e| error!("{} #{}: rx discarding: {}", &ic, req_num, e)); - dbg!(&rx_queue); } } } diff --git a/src/queue.rs b/src/queue.rs index f821eb0..ba1d4ff 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -11,6 +11,11 @@ pub struct Queue { queue: VecDeque, } +#[derive(Default,Debug,Clone)] +pub struct FrameQueue { + queue: Queue, [u8]>>, +} + impl Debug for Queue where E: AsRef<[u8]> { #[throws(fmt::Error)] fn fmt(&self, f: &mut fmt::Formatter) { @@ -33,7 +38,18 @@ impl Queue where E: AsRef<[u8]> { pub fn is_empty(&self) -> bool { self.content == 0 } } -impl Extend for Queue where E: AsRef<[u8]> { +impl FrameQueue { + pub fn push>>(&mut self, b: B) { + self.push_(b.into()); + } + pub fn push_(&mut self, b: Box<[u8]>) { + self.queue.push_(Cervine::Owned(b)); + self.queue.push_(Cervine::Borrowed(&SLIP_END_SLICE)); + } + pub fn is_empty(&self) -> bool { self.queue.is_empty() } +} + +impl Extend for FrameQueue where E: Into> { fn extend(&mut self, it: I) where I: IntoIterator { @@ -59,3 +75,9 @@ impl hyper::body::Buf for Queue where E: AsRef<[u8]> { } } } + +impl hyper::body::Buf for FrameQueue { + fn remaining(&self) -> usize { self.queue.remaining() } + fn chunk(&self) -> &[u8] { self.queue.chunk() } + fn advance(&mut self, cnt: usize) { self.queue.advance(cnt) } +}