jets 0.4.3

A Rust rule-based tunnel
Documentation
use super::{Outbound, ProxySocket, ProxyStream};
use crate::app::config::OutboundProtocolOption;
use crate::app::dns::DnsManager;
use crate::common::Address;
use async_trait::async_trait;
use std::io::{Error, ErrorKind, Result};
use std::net::SocketAddr;

#[derive(Clone, Debug, Default)]
pub struct BlackholeOutbound;

#[async_trait]
impl Outbound for BlackholeOutbound {
    fn protocol(&self) -> OutboundProtocolOption {
        OutboundProtocolOption::Blackhole
    }

    async fn pre_connect(&self, _dns: &DnsManager) -> Result<Option<Box<dyn Outbound>>> {
        Ok(None)
    }

    async fn connect_tcp(&self, addr: Address) -> Result<Box<dyn ProxyStream>> {
        Err(Error::new(
            ErrorKind::WouldBlock,
            format!("{} went into to blackhole", addr),
        ))
    }

    async fn bind(&self, _peer: SocketAddr, addr: Address) -> Result<Box<dyn ProxySocket>> {
        Err(Error::new(
            ErrorKind::WouldBlock,
            format!("{} went into to blackhole", addr),
        ))
    }
}