[package]
name = "easytier"
description = "A full meshed p2p VPN, connecting all your devices in one network with one command."
homepage = "https://github.com/KKRainbow/EasyTier"
repository = "https://github.com/KKRainbow/EasyTier"
version = "0.1.2"
edition = "2021"
authors = ["kkrainbow"]
keywords = ["vpn", "p2p", "network", "easytier"]
categories = ["network-programming", "command-line-utilities"]
rust-version = "1.75"
license-file = "LICENSE"
readme = "README.md"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[[bin]]
name = "easytier-core"
path = "src/easytier-core.rs"

[[bin]]
name = "easytier-cli"
path = "src/easytier-cli.rs"
test = false

[lib]
name = "easytier"
path = "src/lib.rs"
test = false

[dependencies]
tracing = { version = "0.1", features = ["log"] }
tracing-subscriber = { version = "0.3", features = [
    "env-filter",
    "local-time",
    "time",
] }
tracing-appender = "0.2.3"
log = "0.4"
thiserror = "1.0"
auto_impl = "1.1.0"
crossbeam = "0.8.4"
time = "0.3"
toml = "0.8.12"
chrono = "0.4.35"

gethostname = "0.4.3"

futures = { version = "0.3", features = ["bilock", "unstable"] }

tokio = { version = "1", features = ["full"] }
tokio-stream = "0.1"
tokio-util = { version = "0.7.9", features = ["codec", "net"] }

async-stream = "0.3.5"
async-trait = "0.1.74"

dashmap = "5.5.3"
timedmap = "=1.0.1"

# for full-path zero-copy
zerocopy = { version = "0.7.32", features = ["derive", "simd"] }
bytes = "1.5.0"
pin-project-lite = "0.2.13"
atomicbox = "0.4.0"
tachyonix = "0.2.1"

quinn = { version = "0.10.2" }
rustls = { version = "0.21.0", features = ["dangerous_configuration"] }
rcgen = "0.11.1"

# for tap device
tun = { version = "0.6.1", features = ["async"] }
# for net ns
nix = { version = "0.27", features = ["sched", "socket", "ioctl"] }

uuid = { version = "1.5.0", features = [
    "v4",
    "fast-rng",
    "macro-diagnostics",
    "serde",
] }

# for ring tunnel
crossbeam-queue = "0.3"
once_cell = "1.18.0"

# for packet
rkyv = { "version" = "0.7.42", features = [
    "validation",
    "archive_le",
    "strict",
    "copy_unsafe",
    "arbitrary_enum_discriminant",
] }
postcard = { "version" = "1.0.8", features = ["alloc"] }

# for rpc
tonic = "0.10"
prost = "0.12"
anyhow = "1.0"
tarpc = { version = "0.32", features = ["tokio1", "serde1"] }

url = { version = "2.5", features = ["serde"] }
percent-encoding = "2.3.1"

# for tun packet
byteorder = "1.5.0"

# for proxy
cidr = { version = "0.2.2", features = ["serde"] }
socket2 = "0.5.5"

# for hole punching
stun_codec = "0.3.4"
bytecodec = "0.4.15"
rand = "0.8.5"

serde = { version = "1.0", features = ["derive"] }
pnet = { version = "0.34.0", features = ["serde"] }
public-ip = { version = "0.2", features = ["default"] }

clap = { version = "4.4.8", features = ["unicode", "derive", "wrap_help"] }

async-recursion = "1.0.5"

network-interface = "1.1.1"

# for ospf route
pathfinding = "4.9.1"

# for encryption
boringtun = { version = "0.6.0" }
ring = { version = "0.16" }
bitflags = "2.5"

# for cli
tabled = "0.15.*"
humansize = "2.1.3"

base64 = "0.21.7"

derivative = "2.2.0"

mimalloc-rust = "0.2.1"

[target.'cfg(windows)'.dependencies]
windows-sys = { version = "0.52", features = [
    "Win32_Networking_WinSock",
    "Win32_NetworkManagement_IpHelper",
    "Win32_Foundation",
    "Win32_System_IO",
] }

[build-dependencies]
tonic-build = "0.10"

[target.'cfg(windows)'.build-dependencies]
reqwest = { version = "0.11", features = ["blocking"] }
zip = "0.6.6"


[dev-dependencies]
serial_test = "3.0.0"
rstest = "0.18.2"
defguard_wireguard_rs = "0.4.2"
