use fibers_transport::{PollRecv, PollSend, Result, TcpTransport, Transport};
use stun_codec::{Attribute, DecodedMessage, Message, TransactionId};
use super::StunTransport;
#[derive(Debug)]
pub struct StunTcpTransporter<T> {
inner: T,
}
impl<A, T> StunTcpTransporter<T>
where
A: Attribute,
T: TcpTransport<SendItem = Message<A>, RecvItem = DecodedMessage<A>>,
{
pub fn new(inner: T) -> Self {
StunTcpTransporter { inner }
}
pub fn inner_ref(&self) -> &T {
&self.inner
}
pub fn inner_mut(&mut self) -> &mut T {
&mut self.inner
}
}
impl<A, T> Transport for StunTcpTransporter<T>
where
A: Attribute,
T: TcpTransport<SendItem = Message<A>, RecvItem = DecodedMessage<A>>,
{
type PeerAddr = ();
type SendItem = Message<A>;
type RecvItem = DecodedMessage<A>;
fn start_send(&mut self, (): Self::PeerAddr, item: Self::SendItem) -> Result<()> {
track!(self.inner.start_send((), item))
}
fn poll_send(&mut self) -> PollSend {
track!(self.inner.poll_send())
}
fn poll_recv(&mut self) -> PollRecv<(Self::PeerAddr, Self::RecvItem)> {
track!(self.inner.poll_recv())
}
}
impl<A, T> StunTransport<A> for StunTcpTransporter<T>
where
A: Attribute,
T: TcpTransport<SendItem = Message<A>, RecvItem = DecodedMessage<A>>,
{
fn finish_transaction(&mut self, _peer: &(), _transaction_id: TransactionId) -> Result<()> {
Ok(())
}
}