mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-05-06 17:59:11 +00:00
feat: separate zstd and faketcp into features (#1861)
* feat: separate faketcp into a feature * fix: no need to initialize out_len * feat: separate zstd into a feature * clippy: remove unnecessary cast, because for unix size_t always equals usize
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
#[cfg(feature = "zstd")]
|
||||
use anyhow::Context;
|
||||
#[cfg(feature = "zstd")]
|
||||
use dashmap::DashMap;
|
||||
#[cfg(feature = "zstd")]
|
||||
use std::cell::RefCell;
|
||||
#[cfg(feature = "zstd")]
|
||||
use zstd::bulk;
|
||||
|
||||
use zerocopy::{AsBytes as _, FromBytes as _};
|
||||
@@ -38,6 +42,7 @@ impl DefaultCompressor {
|
||||
compress_algo: CompressorAlgo,
|
||||
) -> Result<Vec<u8>, Error> {
|
||||
match compress_algo {
|
||||
#[cfg(feature = "zstd")]
|
||||
CompressorAlgo::ZstdDefault => CTX_MAP.with(|map_cell| {
|
||||
let map = map_cell.borrow();
|
||||
let mut ctx_entry = map.entry(compress_algo).or_default();
|
||||
@@ -58,6 +63,7 @@ impl DefaultCompressor {
|
||||
compress_algo: CompressorAlgo,
|
||||
) -> Result<Vec<u8>, Error> {
|
||||
match compress_algo {
|
||||
#[cfg(feature = "zstd")]
|
||||
CompressorAlgo::ZstdDefault => DCTX_MAP.with(|map_cell| {
|
||||
let map = map_cell.borrow();
|
||||
let mut ctx_entry = map.entry(compress_algo).or_default();
|
||||
@@ -169,12 +175,13 @@ impl Compressor for DefaultCompressor {
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "zstd")]
|
||||
thread_local! {
|
||||
static CTX_MAP: RefCell<DashMap<CompressorAlgo, bulk::Compressor<'static>>> = RefCell::new(DashMap::new());
|
||||
static DCTX_MAP: RefCell<DashMap<CompressorAlgo, bulk::Decompressor<'static>>> = RefCell::new(DashMap::new());
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[cfg(all(test, feature = "zstd"))]
|
||||
pub mod tests {
|
||||
use super::*;
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ use std::{
|
||||
|
||||
use http_connector::HttpTunnelConnector;
|
||||
|
||||
#[cfg(feature = "faketcp")]
|
||||
use crate::tunnel::fake_tcp::FakeTcpTunnelConnector;
|
||||
#[cfg(feature = "quic")]
|
||||
use crate::tunnel::quic::QUICTunnelConnector;
|
||||
#[cfg(unix)]
|
||||
@@ -14,9 +16,8 @@ use crate::tunnel::wireguard::{WgConfig, WgTunnelConnector};
|
||||
use crate::{
|
||||
common::{error::Error, global_ctx::ArcGlobalCtx, idn, network::IPCollector},
|
||||
tunnel::{
|
||||
check_scheme_and_get_socket_addr, fake_tcp::FakeTcpTunnelConnector,
|
||||
ring::RingTunnelConnector, tcp::TcpTunnelConnector, udp::UdpTunnelConnector, IpVersion,
|
||||
TunnelConnector,
|
||||
check_scheme_and_get_socket_addr, ring::RingTunnelConnector, tcp::TcpTunnelConnector,
|
||||
udp::UdpTunnelConnector, IpVersion, TunnelConnector,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -165,6 +166,7 @@ pub async fn create_connector_by_url(
|
||||
let connector = dns_connector::DNSTunnelConnector::new(url, global_ctx.clone());
|
||||
Box::new(connector)
|
||||
}
|
||||
#[cfg(feature = "faketcp")]
|
||||
"faketcp" => {
|
||||
let dst_addr =
|
||||
check_scheme_and_get_socket_addr::<SocketAddr>(&url, "faketcp", ip_version).await?;
|
||||
|
||||
@@ -9,6 +9,8 @@ use anyhow::Context;
|
||||
use async_trait::async_trait;
|
||||
use tokio::task::JoinSet;
|
||||
|
||||
#[cfg(feature = "faketcp")]
|
||||
use crate::tunnel::fake_tcp::FakeTcpTunnelListener;
|
||||
#[cfg(feature = "quic")]
|
||||
use crate::tunnel::quic::QUICTunnelListener;
|
||||
#[cfg(feature = "wireguard")]
|
||||
@@ -21,8 +23,8 @@ use crate::{
|
||||
},
|
||||
peers::peer_manager::PeerManager,
|
||||
tunnel::{
|
||||
fake_tcp::FakeTcpTunnelListener, ring::RingTunnelListener, tcp::TcpTunnelListener,
|
||||
udp::UdpTunnelListener, Tunnel, TunnelListener,
|
||||
ring::RingTunnelListener, tcp::TcpTunnelListener, udp::UdpTunnelListener, Tunnel,
|
||||
TunnelListener,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -49,6 +51,7 @@ pub fn get_listener_by_url(
|
||||
use crate::tunnel::websocket::WSTunnelListener;
|
||||
Box::new(WSTunnelListener::new(l.clone()))
|
||||
}
|
||||
#[cfg(feature = "faketcp")]
|
||||
"faketcp" => Box::new(FakeTcpTunnelListener::new(l.clone())),
|
||||
#[cfg(unix)]
|
||||
"unix" => {
|
||||
|
||||
@@ -330,6 +330,7 @@ impl TryFrom<CompressionAlgoPb> for CompressorAlgo {
|
||||
|
||||
fn try_from(value: CompressionAlgoPb) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
#[cfg(feature = "zstd")]
|
||||
CompressionAlgoPb::Zstd => Ok(CompressorAlgo::ZstdDefault),
|
||||
CompressionAlgoPb::None => Ok(CompressorAlgo::None),
|
||||
_ => Err(anyhow::anyhow!("Invalid CompressionAlgoPb")),
|
||||
@@ -342,6 +343,7 @@ impl TryFrom<CompressorAlgo> for CompressionAlgoPb {
|
||||
|
||||
fn try_from(value: CompressorAlgo) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
#[cfg(feature = "zstd")]
|
||||
CompressorAlgo::ZstdDefault => Ok(CompressionAlgoPb::Zstd),
|
||||
CompressorAlgo::None => Ok(CompressionAlgoPb::None),
|
||||
}
|
||||
|
||||
@@ -716,7 +716,7 @@ fn open_bpf_device() -> io::Result<OwnedFd> {
|
||||
|
||||
fn set_ifreq_name(ifr: &mut libc::ifreq, interface_name: &str) -> io::Result<()> {
|
||||
let bytes = interface_name.as_bytes();
|
||||
let ifnamsiz = libc::IFNAMSIZ as usize;
|
||||
let ifnamsiz = libc::IFNAMSIZ;
|
||||
if bytes.len() >= ifnamsiz {
|
||||
return Err(io::Error::new(
|
||||
io::ErrorKind::InvalidInput,
|
||||
@@ -932,7 +932,7 @@ impl MacosBpfTun {
|
||||
|
||||
let pkt_start = off + pkt_range.start;
|
||||
let pkt_end = off + pkt_range.end;
|
||||
let shift = (pkt_range.start as usize).saturating_sub(hdr_len as usize);
|
||||
let shift = pkt_range.start.saturating_sub(hdr_len as usize);
|
||||
if shift != 0 && shifted_record_logs_left > 0 {
|
||||
shifted_record_logs_left -= 1;
|
||||
warn!(
|
||||
@@ -1039,7 +1039,7 @@ impl stack::Tun for MacosBpfTun {
|
||||
Ok(())
|
||||
};
|
||||
|
||||
let mut out_len = 0usize;
|
||||
let mut out_len: usize;
|
||||
let res = match self.link_type {
|
||||
LinkType::En10Mb => {
|
||||
out_len = packet.len();
|
||||
|
||||
@@ -15,7 +15,6 @@ use self::packet_def::ZCPacket;
|
||||
|
||||
pub mod buf;
|
||||
pub mod common;
|
||||
pub mod fake_tcp;
|
||||
pub mod filter;
|
||||
pub mod mpsc;
|
||||
pub mod packet_def;
|
||||
@@ -33,6 +32,9 @@ pub const PROTO_PORT_OFFSET: &[(&str, u16)] = &[
|
||||
("faketcp", 3),
|
||||
];
|
||||
|
||||
#[cfg(feature = "faketcp")]
|
||||
pub mod fake_tcp;
|
||||
|
||||
#[cfg(feature = "wireguard")]
|
||||
pub mod wireguard;
|
||||
|
||||
|
||||
@@ -288,6 +288,7 @@ pub const AES_GCM_ENCRYPTION_RESERVED: usize = std::mem::size_of::<AesGcmTail>()
|
||||
#[repr(u8)]
|
||||
pub enum CompressorAlgo {
|
||||
None = 0,
|
||||
#[cfg(feature = "zstd")]
|
||||
ZstdDefault = 1,
|
||||
}
|
||||
|
||||
@@ -301,6 +302,7 @@ pub const COMPRESSOR_TAIL_SIZE: usize = std::mem::size_of::<CompressorTail>();
|
||||
impl CompressorTail {
|
||||
pub fn get_algo(&self) -> Option<CompressorAlgo> {
|
||||
match self.algo {
|
||||
#[cfg(feature = "zstd")]
|
||||
1 => Some(CompressorAlgo::ZstdDefault),
|
||||
_ => None,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user