Remove unused file.
This commit is contained in:
parent
4e11e8bafc
commit
d2ab194d03
|
@ -1,103 +0,0 @@
|
||||||
use std::{
|
|
||||||
sync::{Arc, Mutex, Weak},
|
|
||||||
task::{Context, Poll},
|
|
||||||
};
|
|
||||||
|
|
||||||
use bytes::{Buf, BufMut, Bytes};
|
|
||||||
|
|
||||||
use webtransport_generic::RecvStream as GenericRecvStream;
|
|
||||||
use webtransport_generic::SendStream as GenericSendStream;
|
|
||||||
|
|
||||||
// Ugh, so we need to wrap SendStream with a mutex because we need to be able to call set_priority on it.
|
|
||||||
// The problem is that set_priority takes a i32, while send_order is a VarInt
|
|
||||||
// So the solution is to maintain a priority queue of active streams and constantly update the priority with their index.
|
|
||||||
// So the library might update the priority of the stream at any point, while the application might similtaniously write to it.
|
|
||||||
pub struct SendStream<S>
|
|
||||||
where
|
|
||||||
S: GenericSendStream,
|
|
||||||
{
|
|
||||||
// All SendStream methods are &mut, so we need to wrap them with an internal mutex.
|
|
||||||
inner: Arc<Mutex<S>>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<S> SendStream<S>
|
|
||||||
where
|
|
||||||
S: GenericSendStream,
|
|
||||||
{
|
|
||||||
pub(crate) fn new(stream: S) -> Self {
|
|
||||||
Self {
|
|
||||||
inner: Arc::new(Mutex::new(stream)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn weak(&self) -> Weak<Mutex<S>> {
|
|
||||||
Arc::<Mutex<S>>::downgrade(&self.inner)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<S> GenericSendStream for SendStream<S>
|
|
||||||
where
|
|
||||||
S: GenericSendStream,
|
|
||||||
{
|
|
||||||
type Error = S::Error;
|
|
||||||
|
|
||||||
fn poll_send<B: Buf>(&mut self, cx: &mut Context<'_>, buf: &mut B) -> Poll<Result<usize, Self::Error>> {
|
|
||||||
self.inner.lock().unwrap().poll_send(cx, buf)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn reset(&mut self, reset_code: u32) {
|
|
||||||
self.inner.lock().unwrap().reset(reset_code)
|
|
||||||
}
|
|
||||||
|
|
||||||
// The application should NOT use this method.
|
|
||||||
// The library will automatically set the stream priority on creation based on the header.
|
|
||||||
fn set_priority(&mut self, order: i32) {
|
|
||||||
self.inner.lock().unwrap().set_priority(order)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unfortunately, we need to wrap RecvStream with a buffer since moq-transport::Coding only supports buffered reads.
|
|
||||||
// We first serve any data in the buffer, then we poll the stream.
|
|
||||||
// TODO fix this so we don't need the wrapper.
|
|
||||||
pub struct RecvStream<R>
|
|
||||||
where
|
|
||||||
R: GenericRecvStream,
|
|
||||||
{
|
|
||||||
buf: Bytes,
|
|
||||||
stream: R,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<R> RecvStream<R>
|
|
||||||
where
|
|
||||||
R: GenericRecvStream,
|
|
||||||
{
|
|
||||||
pub(crate) fn new(buf: Bytes, stream: R) -> Self {
|
|
||||||
Self { buf, stream }
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn stop(&mut self, code: u32) {
|
|
||||||
self.stream.stop(code)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<R> GenericRecvStream for RecvStream<R>
|
|
||||||
where
|
|
||||||
R: GenericRecvStream,
|
|
||||||
{
|
|
||||||
type Error = R::Error;
|
|
||||||
|
|
||||||
fn poll_recv<B: BufMut>(&mut self, cx: &mut Context<'_>, buf: &mut B) -> Poll<Result<Option<usize>, Self::Error>> {
|
|
||||||
if !self.buf.is_empty() {
|
|
||||||
let size = self.buf.len();
|
|
||||||
buf.put(&mut self.buf);
|
|
||||||
let size = size - self.buf.len();
|
|
||||||
Poll::Ready(Ok(Some(size)))
|
|
||||||
} else {
|
|
||||||
self.stream.poll_recv(cx, buf)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn stop(&mut self, error_code: u32) {
|
|
||||||
self.stream.stop(error_code)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue