tunneler_core/server/tcpforwarder/client/
tokio_tx.rs

1use crate::{general::ConnectionWriter, message::Message};
2
3#[derive(Debug)]
4pub enum SendError {
5    QueueReceive,
6    IO(std::io::Error),
7}
8
9impl From<std::io::Error> for SendError {
10    fn from(other: std::io::Error) -> Self {
11        Self::IO(other)
12    }
13}
14
15pub async fn send<C>(
16    write_con: &mut C,
17    queue: &mut tokio::sync::mpsc::UnboundedReceiver<Message>,
18    header_buf: &mut [u8; 13],
19) -> Result<(), SendError>
20where
21    C: ConnectionWriter + Send,
22{
23    let msg = match queue.recv().await {
24        Some(m) => m,
25        None => return Err(SendError::QueueReceive),
26    };
27
28    write_con.write_msg(&msg, header_buf).await?;
29
30    Ok(())
31}