summaryrefslogtreecommitdiffhomepage
path: root/talpid-openvpn/src/proxy/noop.rs
blob: 1fe97be50c8f0f7618fe7c8511af44ecaa7193e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use async_trait::async_trait;
use futures::{StreamExt, channel::mpsc};

use super::{ProxyMonitor, ProxyMonitorCloseHandle, Result};

pub struct NoopProxyMonitor {
    tx: mpsc::UnboundedSender<()>,
    rx: mpsc::UnboundedReceiver<()>,
    port: u16,
}

impl NoopProxyMonitor {
    pub fn start(port: u16) -> Result<Self> {
        let (tx, rx) = mpsc::unbounded();
        Ok(NoopProxyMonitor { tx, rx, port })
    }
}

#[async_trait]
impl ProxyMonitor for NoopProxyMonitor {
    fn close_handle(&mut self) -> Box<dyn ProxyMonitorCloseHandle> {
        Box::new(NoopProxyMonitorCloseHandle {
            tx: self.tx.clone(),
        })
    }

    async fn wait(mut self: Box<Self>) -> Result<()> {
        let _ = self.rx.next().await;
        Ok(())
    }

    fn port(&self) -> u16 {
        self.port
    }
}

struct NoopProxyMonitorCloseHandle {
    tx: mpsc::UnboundedSender<()>,
}

impl ProxyMonitorCloseHandle for NoopProxyMonitorCloseHandle {
    fn close(self: Box<Self>) -> Result<()> {
        let _ = self.tx.unbounded_send(());
        Ok(())
    }
}