From 7d28db736b4e3d698002e875bbe0d75ec614c66f Mon Sep 17 00:00:00 2001 From: zonyitoo Date: Mon, 23 Mar 2026 00:03:27 +0800 Subject: [PATCH] feat: bump version v1.25.0 - MSRV upgraded to v1.91, due to smoltcp v0.13. - Upgrade dependencies - Add cursor rule orientation --- .../rules/shadowsocks-rust-orientation.mdc | 74 +++++++++++++++++++ Cargo.lock | 6 +- Cargo.toml | 4 +- crates/shadowsocks-service/Cargo.toml | 4 +- crates/shadowsocks/Cargo.toml | 2 +- debian/changelog | 8 ++ 6 files changed, 90 insertions(+), 8 deletions(-) create mode 100644 .cursor/rules/shadowsocks-rust-orientation.mdc diff --git a/.cursor/rules/shadowsocks-rust-orientation.mdc b/.cursor/rules/shadowsocks-rust-orientation.mdc new file mode 100644 index 00000000..ad14bb71 --- /dev/null +++ b/.cursor/rules/shadowsocks-rust-orientation.mdc @@ -0,0 +1,74 @@ +--- +description: shadowsocks-rust workspace orientation (binaries, crates, features, hot paths) +alwaysApply: true +--- + +# shadowsocks-rust orientation + +## Toolchain + +- **Edition**: 2024. **MSRV**: `1.91` (root + both crates; `clippy.toml` matches). Breaking bumps are semver-major for this repo. +- **Workspace**: root `shadowsocks-rust` + `crates/shadowsocks` + `crates/shadowsocks-service` (see root `Cargo.toml` `[workspace]`). + +## Dependency direction + +``` +shadowsocks-rust (binaries, CLI, logging, allocators) + └── shadowsocks-service (roles, config load, ACL, DNS helpers, local modes) + └── shadowsocks (protocol, relay I/O, crypto facade) + └── shadowsocks-crypto (ciphers; optional ring / AEAD-2022, etc.) +``` + +- **Do not** make `shadowsocks` depend on `shadowsocks-service`. New shared logic belongs in `shadowsocks` or a small shared module, not the reverse. + +## Root crate (`shadowsocks-rust`) + +- **`bin/*.rs`**: thin `main` — build `clap` `Command`, delegate to `shadowsocks_rust::service::{local,server,manager,...}` (`src/service/*.rs`). +- **`src/lib.rs`**: `VERSION`, re-exports service entrypoints. +- **`src/config.rs`**, **`src/logging/*`**, **`src/daemonize/*`**, **`src/monitor/*`**, **`src/allocator/*`**: process-wide concerns (not protocol). +- **Features**: root features mostly **forward** to `shadowsocks-service/...` (e.g. `local` → `shadowsocks-service/local`, `local-tun` → `local-tun` + `ipnet`). Prefer enabling capability on the service crate when adding optional deps. + +## `crates/shadowsocks` (core) + +- **Role**: `ServerConfig`, relay primitives, SOCKS5 `Address`, manager wire protocol, `Context`, sockets (`net`), plugins. +- **High-signal paths**: + - **TCP / stream tunneling**: `relay/tcprelay/` (`ProxyListener`, `ProxyClientStream`, proxy stream protocol under `proxy_stream/`). + - **UDP**: `relay/udprelay/` (`ProxySocket`), **`net/udp.rs`** (socket wrapper, `batch_send` / `batch_recv`), **`net/sys/unix/*`** (Linux batching via `sendmmsg`/`recvmmsg`-style APIs). + - **Manager**: `manager/`. + - **DNS resolver hook**: `dns_resolver/`. + +## `crates/shadowsocks-service` + +- **Role**: runnable **local** (`sslocal`), **server** (`ssserver`), **manager** (`ssmanager`); loads JSON5 config; ACL; Hickory DNS integration; platform redir/tun/http. +- **Layout** (under `src/`): + - **`local/`** — SOCKS4/5 (`local/socks/`), HTTP proxy (`local/http/`), transparent **redir** (`local/redir/`, per-OS `sys/` subdirs), **tunnel**, **TUN** (`local/tun/` — `smoltcp` user stack when `local-tun`), **fake-dns**, **online_config** (SIP008), **dns** relay, **net/tcp|udp** listeners, **loadbalancing** (`PingBalancer`), **`context.rs`** (`ServiceContext`). + - **`server/`** — TCP/UDP relay servers (`tcprelay.rs`, `udprelay.rs`), `server.rs`, `context.rs`. + - **`manager/`** — manager daemon. + - **`acl/`** — ACL matching. + - **`dns/`**, **`net/`** — shared service-layer DNS / flow / sockets. + - **`config.rs`** — service config types and loading. +- **`local/context.rs`**: central handle for accept opts, balancer, ACL, DNS — most local features thread through here. + +## Main binaries (feature-gated) + +| Binary | Feature | Typical entry | +|---------------|-------------|----------------| +| `sslocal` | `local` | `src/service/local.rs` → `shadowsocks_service::run_local` | +| `ssserver` | `server` | `src/service/server.rs` | +| `ssmanager` | `manager` | `src/service/manager.rs` | +| `ssurl` | `utility` | own bin + optional `utility-url-outline` / `reqwest` | +| `ssservice` | `service` | wrapper for packaged multi-role | +| `sswinservice`| `winservice`| Windows service | + +## Where to look (common tasks) + +- **Local UDP association / performance**: `crates/shadowsocks-service/src/local/net/udp/association.rs` + core `crates/shadowsocks/src/net/udp.rs` + `crates/shadowsocks/src/net/sys/unix/*`. +- **TCP local accept / upstream**: `local/net/tcp/`, `relay/tcprelay/` (core). +- **TLS to local HTTP / DNS-over-TLS**: `shadowsocks-service` optional `tokio-rustls`, `rustls-native-certs`, Hickory features (`dns-over-tls`, etc.). +- **TUN / smoltcp**: `local/tun/*.rs` (device bridge, TCP manager thread, IP parsing); dep `smoltcp` with `medium-ip`, TCP/UDP sockets. + +## Design notes + +- **Async**: Tokio throughout service layer; core relay types are often used from async contexts. +- **Config**: JSON5 files + CLI; many structs under `shadowsocks`/`shadowsocks-service` `config` modules — search `Config` / `ServerConfig` before duplicating options. +- **Tests**: workspace integration tests in `tests/*.rs`; `crates/shadowsocks/tests/`; `#[cfg(test)]` modules beside sources. diff --git a/Cargo.lock b/Cargo.lock index c2fd7809..7a27cf8a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3208,7 +3208,7 @@ dependencies = [ [[package]] name = "shadowsocks" -version = "1.24.0" +version = "1.25.0" dependencies = [ "aes", "arc-swap", @@ -3275,7 +3275,7 @@ dependencies = [ [[package]] name = "shadowsocks-rust" -version = "1.24.0" +version = "1.25.0" dependencies = [ "base64", "build-time", @@ -3316,7 +3316,7 @@ dependencies = [ [[package]] name = "shadowsocks-service" -version = "1.24.0" +version = "1.25.0" dependencies = [ "arc-swap", "base64", diff --git a/Cargo.toml b/Cargo.toml index 2d8bb4e8..a0678202 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks-rust" -version = "1.24.0" +version = "1.25.0" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" @@ -249,7 +249,7 @@ jemallocator = { version = "0.5", optional = true } snmalloc-rs = { version = "0.3", optional = true } rpmalloc = { version = "0.2", optional = true } -shadowsocks-service = { version = "1.24.0", path = "./crates/shadowsocks-service", default-features = false } +shadowsocks-service = { version = "1.25.0", path = "./crates/shadowsocks-service", default-features = false } windows-service = { version = "0.8", optional = true } diff --git a/crates/shadowsocks-service/Cargo.toml b/crates/shadowsocks-service/Cargo.toml index c793ad3d..5cc7af8a 100644 --- a/crates/shadowsocks-service/Cargo.toml +++ b/crates/shadowsocks-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks-service" -version = "1.24.0" +version = "1.25.0" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" @@ -200,7 +200,7 @@ json5 = "1.3" serde_json = "1.0" bson = { version = "3.0.0", features = ["serde"], optional = true } -shadowsocks = { version = "1.24.0", path = "../shadowsocks", default-features = false } +shadowsocks = { version = "1.25.0", path = "../shadowsocks", default-features = false } # Just for the ioctl call macro [target.'cfg(any(target_os = "macos", target_os = "ios", target_os = "freebsd", target_os = "openbsd"))'.dependencies] diff --git a/crates/shadowsocks/Cargo.toml b/crates/shadowsocks/Cargo.toml index 8f335b0d..ca6928e2 100644 --- a/crates/shadowsocks/Cargo.toml +++ b/crates/shadowsocks/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks" -version = "1.24.0" +version = "1.25.0" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" diff --git a/debian/changelog b/debian/changelog index e2ba21be..abc3a634 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +shadowsocks-rust (1.25.0) unstable; urgency=medium + + ## Miscellaneous + + - MSRV bumps to v1.91 (breaking change for downstream toolchains; required by `smoltcp` 0.13) + + -- ty Sun, 22 Mar 2026 12:00:00 +0800 + shadowsocks-rust (1.24.0) unstable; urgency=medium ## Features