diff --git a/.github/workflows/build-deploy.yaml b/.github/workflows/build-deploy.yaml index 198b516..df05dab 100644 --- a/.github/workflows/build-deploy.yaml +++ b/.github/workflows/build-deploy.yaml @@ -85,7 +85,7 @@ jobs: - name: Install Rust uses: dtolnay/rust-toolchain@stable with: - toolchain: nightly-2026-01-26 + toolchain: nightly-2026-10-26 targets: ${{ matrix.target }} - name: Install cross @@ -234,7 +234,7 @@ jobs: - name: Install Rust uses: dtolnay/rust-toolchain@stable with: - toolchain: nightly-2026-01-26 + toolchain: nightly-2026-10-26 targets: ${{ matrix.target }} - name: Install cross-compilation tools (Linux) @@ -414,7 +414,7 @@ jobs: uses: docker/setup-buildx-action@v4.4.1 - name: Login to DockerHub - uses: docker/login-action@v4.6.0 + uses: docker/login-action@v4.7.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} diff --git a/.github/workflows/cargo-test.yaml b/.github/workflows/cargo-test.yaml index 07c2742..3be8f2f 100644 --- a/.github/workflows/cargo-test.yaml +++ b/.github/workflows/cargo-test.yaml @@ -25,7 +25,7 @@ jobs: - name: Install Rust uses: dtolnay/rust-toolchain@stable with: - toolchain: nightly-2026-01-26 + toolchain: nightly-2026-10-26 components: clippy, rustfmt - name: cargo fmt run: cargo fmt -p proxy-crypto -p proxy-core -p proxy-client -p proxy-server -p proxy-tui -p proxy-ffi -p proxy-updater -p proxy-ui-services -p galaxy-geometry -- --check @@ -55,8 +55,8 @@ jobs: .\scripts\windows\stage-ui-native.ps1 -Configuration Release -SkipBuild $fvmDir = Join-Path $env:RUNNER_TEMP 'fvm' $archive = Join-Path $env:RUNNER_TEMP 'fvm.zip' - Invoke-WebRequest 'https://github.com/btwld/fvm/releases/download/4.1.0/fvm-4.1.0-windows-x64.zip' -OutFile $archive - if ((Get-FileHash $archive -Algorithm SHA256).Hash -ne '70527bbfdc1beb3fc028043ffeadbceae575f801be423edc819a81dfa6abd8da') { throw 'FVM checksum mismatch' } + Invoke-WebRequest 'https://github.com/btwld/fvm/releases/download/4.3.2/fvm-4.3.2-windows-x64.zip' -OutFile $archive + if ((Get-FileHash $archive -Algorithm SHA256).Hash -ne '97696d118ad35bf25dc91fd28c70bb3d77b6d1fee6658fbd744e838b5f81da4a') { throw 'FVM checksum mismatch' } Expand-Archive $archive -DestinationPath $fvmDir $fvmExe = @(Get-ChildItem $fvmDir -Filter fvm.exe -Recurse) if ($fvmExe.Count -ne 1) { throw 'FVM executable missing or ambiguous' } diff --git a/AGENTS.md b/AGENTS.md index 0408edf..6524b47 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,7 +28,7 @@ then implementation simplicity. project files. Windows uses the MSVC target with Visual Studio 2022 Build Tools (Desktop development with C++) and CMake. Keep `Cargo.lock` committed, and change it only when dependency resolution changes. -- **Flutter**: FVM only. `ui/flutter/.fvmrc` pins the SDK (Flutter 3.47.7). +- **Flutter**: FVM only. `ui/flutter/.fvmrc` pins the SDK (Flutter 3.47.8). Never run bare `flutter` or `dart`; use `fvm flutter …` and `fvm dart …` from `ui/flutter`, and run `fvm install` after cloning or an SDK change. Never commit `.fvm/`, `.dart_tool/`, `build/` or `ui/flutter/native/`, which holds diff --git a/CLAUDE.md b/CLAUDE.md index e599a03..12d0972 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -887,7 +887,8 @@ resolving names locally first, which fake-IP DNS makes impossible under TUN. ## References -- **Rust toolchain**: 1.87.0 (see `rust-toolchain.toml`) +- **Rust toolchain**: pinned nightly (see `rust-toolchain.toml`); `rustfmt.toml` uses + nightly-only options, and CI installs the same date - **Crypto library**: `ring` (AES-256-GCM) - **Async runtime**: `tokio` (default) or `monoio` (io_uring) -- **Flutter version**: 3.38.6 (see `ui/flutter/.github/workflows/build.yaml`) +- **Flutter version**: 3.47.8 (see `ui/flutter/.fvmrc`) diff --git a/Cargo.lock b/Cargo.lock index 636bdf4..e1aca1c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -128,9 +128,9 @@ dependencies = [ [[package]] name = "arc-swap" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +checksum = "380962b3d93b99642e50b9febf72c071e97e8b32d86eae9cf4ef582bb960ae6e" dependencies = [ "rustversion", ] @@ -179,7 +179,7 @@ checksum = "82f6aeea286b8eb4dd3431a1be1b59d290ace00f5bfd8e2a159bc2a05e2c1667" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -233,39 +233,6 @@ name = "better_mimalloc_sys" version = "0.1.2" dependencies = [ "cc", - "cty", - "libc", -] - -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bincode-next" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6626829353ae29293be5c86f42de5f0468bc758af074b0c7d08f07e538ccbc" -dependencies = [ - "bincode_derive-next", - "pastey", - "rapidhash", - "serde", - "unty-next", -] - -[[package]] -name = "bincode_derive-next" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "409532b1da3be643427e49c2f79e0c47d445f695e1b028270d9e80e9044d7d1c" -dependencies = [ - "virtue-next", ] [[package]] @@ -346,15 +313,6 @@ dependencies = [ "piper", ] -[[package]] -name = "branches" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11502672c5570f77f6bdf573332483f8475bab6a7fda00f1fae8ddb5a6245c0" -dependencies = [ - "rustc_version", -] - [[package]] name = "branches" version = "0.5.1" @@ -408,9 +366,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.6.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f74872d07caf508b30a21f6836e7d7016a2eaf7d9ff4f48deaa58cd8a0407630" +checksum = "86e055fa6e3e40ad6187ba25b6855eeb635d5271f8e0f0e1e9a5826b8d75bea0" dependencies = [ "find-msvc-tools", "shlex 2.0.1", @@ -519,7 +477,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -536,9 +494,9 @@ checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" [[package]] name = "combine" -version = "4.6.8" +version = "4.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +checksum = "4356eba6976435498d05a311ee9fc486da3bc81c200d3f0d7dd9703b41913f92" dependencies = [ "bytes", "memchr", @@ -645,9 +603,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01a7799fd6b852db0e61728dde9a204c423b44d689dbd432522543614b490e78" +checksum = "0ba106e844045ddc02c20768ac4b0b7cb45f2cc2ecbd833ac9f5dacb183c2055" dependencies = [ "cfg-if", ] @@ -740,12 +698,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - [[package]] name = "daemonize" version = "0.5.0" @@ -775,7 +727,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -786,7 +738,7 @@ checksum = "2ac7135c3ef02b2f7833bbeb1be5ba7f966dcde8a87c6b87f65a778d71a02785" dependencies = [ "darling_core", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -798,7 +750,7 @@ dependencies = [ "cfg-if", "crossbeam-utils", "hashbrown 0.14.5", - "lock_api", + "lock_api 0.4.14", "once_cell", "parking_lot_core", ] @@ -811,9 +763,9 @@ checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" [[package]] name = "defmt" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2953bfe4f93bbd20cc71198842756f77d161884c99ebbabc41d80231ded88d1" +checksum = "e4a0795ac740cb54d7b3775c9c17345f6aaecf884c01733b39d6017738e0e3e1" dependencies = [ "bitflags 1.3.2", "defmt-macros", @@ -821,21 +773,21 @@ dependencies = [ [[package]] name = "defmt-macros" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad9c72e7ca2137e0dc3813245a0d282fd6daad32fd800af018306a9169b5fe8" +checksum = "840bb056bd99c495c9188198a258ab787c79f306d864db3e6e8451442d6d8366" dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.9", ] [[package]] name = "defmt-parser" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" +checksum = "71958f69fb2de856c5dd51ac9377e986ca1aa5919f931bf5395a807277f889a0" dependencies = [ "thiserror 2.0.21", ] @@ -848,9 +800,9 @@ checksum = "5729f5117e208430e437df2f4843f5e5952997175992d1414f94c57d61e270b4" [[package]] name = "deranged" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" +checksum = "9e9de72ce2ad1f90dc62fa25f0f430ef85eb4b0d8fa0be4f30373bc40a21d28e" [[package]] name = "derive_more" @@ -938,7 +890,7 @@ checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1014,9 +966,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "00d174d5400e5e8fd687ad1049e2f578285fa914201b1af7e8b112a4546bd826" [[package]] name = "errno" @@ -1025,7 +977,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -1104,9 +1056,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" +checksum = "1c66915cc5391097de7a2b0b972e8505aa33c0df401fd3a6811dbdb32881ba48" [[package]] name = "finl_unicode" @@ -1218,7 +1170,7 @@ checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -1254,6 +1206,21 @@ dependencies = [ name = "galaxy-geometry" version = "0.6.13" +[[package]] +name = "generator" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1be81b31c9ce4caf7f3178eeb90662bb1864d3ad363ec6bdada3201adff19c37" +dependencies = [ + "cc", + "cfg-if", + "libc", + "log", + "rustversion", + "windows-link", + "windows-result", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -1309,20 +1276,6 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" -[[package]] -name = "handlebars" -version = "3.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4498fc115fa7d34de968184e473529abb40eeb6be8bc5f7faba3d08c316cb3e3" -dependencies = [ - "log", - "pest", - "pest_derive", - "quick-error", - "serde", - "serde_json", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -1335,17 +1288,6 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "allocator-api2", - "equivalent", - "foldhash", -] - [[package]] name = "hashbrown" version = "0.17.1" @@ -1441,7 +1383,7 @@ dependencies = [ "parking_lot", "rand 0.10.3", "resolv-conf", - "smallvec 1.16.2", + "smallvec 1.16.4", "system-configuration 0.7.0", "thiserror 2.0.21", "tokio", @@ -1508,7 +1450,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "smallvec 1.16.2", + "smallvec 1.16.4", "tokio", "want", ] @@ -1578,9 +1520,9 @@ dependencies = [ [[package]] name = "icu_collections" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +checksum = "fe090a42a0d3140fed8c63263ed1fecc02422cb2f4bfe55cd8de2de1b8e105dd" dependencies = [ "displaydoc", "potential_utf", @@ -1592,9 +1534,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +checksum = "25d29b57c17c6528d0dc4c2141cfa2d08200465acb537a3909c8b9b8a4a984c0" dependencies = [ "displaydoc", "litemap", @@ -1605,29 +1547,29 @@ dependencies = [ [[package]] name = "icu_normalizer" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +checksum = "404a3b8c486f205c87fe7f23ab6894d84a4ad76d6e4671ae1981ba7def87c599" dependencies = [ "icu_collections", "icu_normalizer_data", "icu_properties", "icu_provider", - "smallvec 1.16.2", + "smallvec 1.16.4", "zerovec", ] [[package]] name = "icu_normalizer_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" +checksum = "20f0088bfb7441f7a37fa0c9e20cb1e9cba1cac6b9ce8cd2a6dc44294f8e8cbc" [[package]] name = "icu_properties" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +checksum = "2ea83d991c56158f7cf898bf86436c1dfe7c07ee82fe88951f2695c9f37a379f" dependencies = [ "displaydoc", "icu_collections", @@ -1640,15 +1582,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.3.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" +checksum = "b98f29af82d02b163fe50161388350e743bb3107cc8e8c2f7314cb505faddfcf" [[package]] name = "icu_provider" -version = "2.3.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +checksum = "413099315636c588ee8f011190b329b971a09a8fae9d157e01dcae8379468514" dependencies = [ "displaydoc", "icu_locale_core", @@ -1672,7 +1614,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" dependencies = [ "idna_adapter", - "smallvec 1.16.2", + "smallvec 1.16.4", "utf8_iter", ] @@ -1728,23 +1670,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn 3.0.6", -] - -[[package]] -name = "interfaces" -version = "0.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb6250a98af259a26fd5a4a6081fccea9ac116e4c3178acf4aeb86d32d2b7715" -dependencies = [ - "bitflags 2.13.2", - "cc", - "handlebars", - "lazy_static", - "libc", - "nix 0.26.4", - "serde", - "serde_derive", + "syn 3.0.9", ] [[package]] @@ -1955,35 +1881,24 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kanal" -version = "0.2.0-beta1" -dependencies = [ - "branches 0.5.1", - "cacheguard", - "futures-core", - "lock_api", -] - [[package]] name = "kanal-plus" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b95b5999547076732485ad2dda0bee60b861563aba3eaa614e4e40a851eb750" +version = "0.2.2" dependencies = [ - "branches 0.3.0", + "branches", "cacheguard", "futures-core", - "lock_api", + "lock_api 0.5.0", + "loom", ] [[package]] name = "kasuari" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" +checksum = "72f14c90e40a6133f4805b83542a7ed7364f56070b447f56e7f4e90297122209" dependencies = [ - "hashbrown 0.16.1", + "hashbrown 0.17.1", "portable-atomic", "thiserror 2.0.21", ] @@ -2014,7 +1929,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -2087,9 +2002,9 @@ checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" +checksum = "4744e383959f0db86ede514b809b1c53251889093803c05267acc7d4e7030d70" [[package]] name = "lock_api" @@ -2100,11 +2015,37 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lock_api" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65d91b22da179613dcf4d6ec8349563f52a363f6849e03b00dd0a185ec4a59af" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.34" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" +dependencies = [ + "serde_core", +] + +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "pin-utils", + "scoped-tls", + "tracing", + "tracing-subscriber", +] [[package]] name = "lru" @@ -2129,20 +2070,14 @@ checksum = "d3d25b0e0b648a86960ac23b7ad4abb9717601dec6f66c165f5b037f3f03065f" [[package]] name = "mac_address" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b367b50a9be9a5d3b5718c1da74e5d6b9c17647f89752ee2562a470cc3c4eb1a" +checksum = "f3d0581a75c45969c63afd2bb87b1d8b25cfcc556c7a918cf9bb13b0fe8d2381" dependencies = [ - "nix 0.30.1", + "nix 0.31.3", "windows-sys 0.61.2", ] -[[package]] -name = "malloc_size_of" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d719de8b8f230028cf8192ae4c1b25267cd6b8a99d2747d345a70b8c81aa13" - [[package]] name = "matchers" version = "0.2.0" @@ -2186,15 +2121,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a64a92489e2744ce060c349162be1c5f33c6969234104dbd99ddb5feb08b8c15" -[[package]] -name = "memoffset" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" -dependencies = [ - "autocfg", -] - [[package]] name = "memoffset" version = "0.9.1" @@ -2254,7 +2180,7 @@ dependencies = [ "equivalent", "parking_lot", "portable-atomic", - "smallvec 1.16.2", + "smallvec 1.16.4", "tagptr", "uuid", ] @@ -2267,9 +2193,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "netdev" -version = "0.46.3" +version = "0.47.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3c52c2584961c68f5a6e3356797344061f818c93b8acc9cd6d7e284795e563e" +checksum = "98a4d13f8061600697d721c5fd45262aba533a7d4a7670e7c64fd02d68e4a9fb" dependencies = [ "block2", "dispatch2", @@ -2331,7 +2257,7 @@ dependencies = [ "libc", "netlink-packet-core 0.7.0", "netlink-packet-utils", - "smallvec 1.16.2", + "smallvec 1.16.4", ] [[package]] @@ -2403,19 +2329,6 @@ dependencies = [ "thiserror 2.0.21", ] -[[package]] -name = "nix" -version = "0.26.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" -dependencies = [ - "bitflags 1.3.2", - "cfg-if", - "libc", - "memoffset 0.7.1", - "pin-utils", -] - [[package]] name = "nix" version = "0.29.0" @@ -2438,7 +2351,6 @@ dependencies = [ "cfg-if", "cfg_aliases", "libc", - "memoffset 0.9.1", ] [[package]] @@ -2451,7 +2363,7 @@ dependencies = [ "cfg-if", "cfg_aliases", "libc", - "memoffset 0.9.1", + "memoffset", ] [[package]] @@ -2521,9 +2433,9 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +checksum = "cabcc654086861f9e1bc5115258de62ef92c79b20f4615a1b0cc57c4e82027d4" dependencies = [ "libc", ] @@ -2576,6 +2488,17 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-open-directory" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb82bed227edf5201dfedf072bba4015a33d3d4a98519837295a90f0a23f676d" +dependencies = [ + "objc2", + "objc2-core-foundation", + "objc2-foundation", +] + [[package]] name = "objc2-system-configuration" version = "0.3.2" @@ -2604,9 +2527,9 @@ checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" [[package]] name = "openssl-probe" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" +checksum = "7e036b411754132fd6b74e94b74e9a13c5cf606fa93d1885c35860d3060820b1" [[package]] name = "option-ext" @@ -2668,7 +2591,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ - "lock_api", + "lock_api 0.4.14", "parking_lot_core", ] @@ -2681,7 +2604,7 @@ dependencies = [ "cfg-if", "libc", "redox_syscall", - "smallvec 1.16.2", + "smallvec 1.16.4", "windows-link", ] @@ -2691,12 +2614,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pastey" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee67f1008b1ba2321834326597b8e186293b049a023cdef258527550b9935b4" - [[package]] name = "percent-encoding" version = "2.3.2" @@ -2705,21 +2622,20 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.9.3" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b568374ba38b33a6c627141f891faf16902b08d2db26b8ede1bcb0a15b1919fa" +checksum = "a8db75153506001cb36ed924f08cadc862eb3f8c4d0d534139f29074769d7660" dependencies = [ "memchr", - "psm", - "stacker", + "pest_stack_guard", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.9.3" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b66e184b924cebaaff20ab2256ca52f12332d528a39aa76553b5d96f92aacf7f" +checksum = "20aa17e11fb35664b67d5214a0afac57a360d231b6ec53d6eba0700b27d933b4" dependencies = [ "pest", "pest_generator", @@ -2727,26 +2643,36 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.9.3" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a87478d267e4de54a626af9754f2f0f58e927aac6ed0575fe89bc05ad6851694" +checksum = "626ec5afccf44ccbfeb2b232316510bb55b4bf34d891afcb0fb07d2b17d7fe9d" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "pest_meta" -version = "2.9.3" +version = "2.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f986f248b4241ac359b831f6139aaa34e03b08a37b6caf7e201a33f95c869e1" +checksum = "b3f45b6caa65c1b08186832745159c2529994146340a7bf44168095469720f5d" dependencies = [ "pest", ] +[[package]] +name = "pest_stack_guard" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97e6cd2217057fa86b6eaa512917e58089d875b957a31e35e7ab729977e0a5f2" +dependencies = [ + "psm", + "stacker", +] + [[package]] name = "phf" version = "0.11.3" @@ -2824,9 +2750,9 @@ dependencies = [ [[package]] name = "plist" -version = "1.10.1" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896bade328c13f7042a297ea5ac5b0951f6cf989dea5f32c2fd98da398195cb" +checksum = "327a4cb2ad49dc48adfdc9da89e22c64d488b508c67a044d71ba729e4521a285" dependencies = [ "base64 0.23.1", "indexmap", @@ -2932,7 +2858,7 @@ dependencies = [ "etherparse", "futures", "hashbrown 0.17.1", - "kanal", + "kanal-plus", "libc", "log", "moka", @@ -2961,7 +2887,6 @@ name = "proxy-core" version = "0.6.13" dependencies = [ "arc-swap", - "async-broadcast", "base64 0.23.1", "better_mimalloc_rs", "dashmap", @@ -2972,9 +2897,7 @@ dependencies = [ "indexmap", "indicatif", "ipnet", - "kanal", "libc", - "lru", "maxminddb", "moka", "once_cell", @@ -2995,7 +2918,6 @@ dependencies = [ "tracing", "tracing-subscriber", "uni-stream", - "ureq", "url", "webpki-roots", "windows-sys 0.61.2", @@ -3047,7 +2969,7 @@ dependencies = [ "ring", "serde", "serde_json", - "smallvec 2.0.0-alpha.12", + "smallvec 2.0.0-beta.3", "snafu", "socket2", "sysinfo", @@ -3125,12 +3047,6 @@ dependencies = [ "cc", ] -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quick-xml" version = "0.42.0" @@ -3187,7 +3103,7 @@ dependencies = [ "once_cell", "socket2", "tracing", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3267,15 +3183,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "rapidhash" -version = "4.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da7e78a036ce858e8d55b7e7dc8ba3a88b78350fd2155d3591bbd966b58589e" -dependencies = [ - "rustversion", -] - [[package]] name = "ratatui" version = "0.30.2" @@ -3519,22 +3426,22 @@ dependencies = [ [[package]] name = "rustix" -version = "1.1.5" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891efababe418670775f199f0d233d84843c227a0949a883ce15b37c78d6629d" +checksum = "e5e76742e5294153d4dde1207dbec5bdd81eef6fabdc0d2118babadabfd858aa" dependencies = [ "bitflags 2.13.2", "errno", "libc", "linux-raw-sys", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] name = "rustls" -version = "0.23.45" +version = "0.23.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" +checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf" dependencies = [ "log", "once_cell", @@ -3547,9 +3454,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab5152771c58876a2146916e53e35057e1a4dfa2b9df0f0305b07f611fdea4d" +checksum = "4a073f5dc7469f984c52ad2752b63b0807745133b6de880b7b64c1ac4c48aec4" dependencies = [ "openssl-probe", "rustls-pki-types", @@ -3585,7 +3492,7 @@ dependencies = [ "security-framework", "security-framework-sys", "webpki-root-certs", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -3596,9 +3503,9 @@ checksum = "eec689c0bc40ff2458a5977b6619cb718087084a18e02a131c599b62d05e1a5f" [[package]] name = "rustls-webpki" -version = "0.103.15" +version = "0.103.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" +checksum = "4443b1b6d39d7c663139942cc4558262562d2c84123bb6282ef177009ca8b281" dependencies = [ "ring", "rustls-pki-types", @@ -3628,13 +3535,19 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c1b7e4904c873ef0710c1f407dde2e6287de2bebc1bbbf7d430bb7cbffd939" +checksum = "9cb23c424d8ee841bb4d813677ca237e2a610067d594fec130f87d6093495ab5" dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -3697,14 +3610,14 @@ checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "serde_json" -version = "1.0.151" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" dependencies = [ "itoa", "memchr", @@ -3821,19 +3734,13 @@ checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" [[package]] name = "smallvec" -version = "1.16.2" +version = "1.16.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9395f0f0eee849a9b707b2f06bb92a6a422090e2123bb2ef8e87a0e61892a8e" +checksum = "d0d5d4b1981b8bbbb7aed204cae5726d683d5d6ac7e74ec54122ea28f315e7c8" [[package]] name = "smallvec" -version = "2.0.0-alpha.12" -dependencies = [ - "bincode", - "bytes", - "malloc_size_of", - "serde_core", -] +version = "2.0.0-beta.3" [[package]] name = "snafu" @@ -3868,9 +3775,9 @@ dependencies = [ [[package]] name = "socks5-impl" -version = "0.9.8" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06ffc60fe8f46f21a90e7a331289c26753eef83074ea248e5302f9d196d6216" +checksum = "457c3c9183a19e67d12d8838e20b653d158ddcd86758dd992d8c60c08ef15d85" dependencies = [ "async-trait", "bytes", @@ -3963,9 +3870,9 @@ dependencies = [ [[package]] name = "syn" -version = "3.0.6" +version = "3.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" dependencies = [ "proc-macro2", "quote", @@ -3989,20 +3896,21 @@ checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] name = "sysinfo" -version = "0.38.4" +version = "0.39.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ab6a2f8bfe508deb3c6406578252e491d299cbbf3bc0529ecc3313aee4a52f" +checksum = "d2071df9448915b71c4fe6d25deaf1c22f12bd234f01540b77312bb8e41361e6" dependencies = [ "libc", "memchr", "ntapi", "objc2-core-foundation", "objc2-io-kit", + "objc2-open-directory", "windows", ] @@ -4010,9 +3918,9 @@ dependencies = [ name = "sysproxy" version = "0.3.0" dependencies = [ - "interfaces", "iptools", "log", + "nix 0.31.3", "thiserror 2.0.21", "windows", "winreg", @@ -4067,7 +3975,7 @@ dependencies = [ "getrandom 0.4.3", "once_cell", "rustix", - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -4193,7 +4101,7 @@ checksum = "fe5197923287db20a58125f0bc85c062f7f2c892de97b18c356f9efb14b28524" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -4239,9 +4147,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +checksum = "abc840c238154d58f9e86b2792261edfde565a17696e1cda1a449de27979801a" dependencies = [ "displaydoc", "zerovec", @@ -4255,9 +4163,9 @@ checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" [[package]] name = "tokio" -version = "1.53.2" +version = "1.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e95f91fcc7a621e8b030f6aa23c71fe9838ae2fb4d8118b75602a328f5144044" +checksum = "b52fd3255258d26fac7264ab5a76b53c13367136dc011d3d6ad4f8ed070396a3" dependencies = [ "bytes", "libc", @@ -4278,7 +4186,7 @@ checksum = "78773a2a397f451582ce068015985c33193cf6dea8b74d2a639fe457b2f07b0e" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] @@ -4481,7 +4389,7 @@ dependencies = [ "once_cell", "regex-automata", "sharded-slab", - "smallvec 1.16.2", + "smallvec 1.16.4", "thread_local", "tracing", "tracing-core", @@ -4541,7 +4449,6 @@ dependencies = [ "android_logger", "async-trait", "base64easy", - "bincode-next", "chrono", "clap", "ctrlc2", @@ -4560,7 +4467,6 @@ dependencies = [ "netdev", "netstat2", "nix 0.31.3", - "percent-encoding", "serde", "serde_json", "shlex 2.0.1", @@ -4572,7 +4478,6 @@ dependencies = [ "tproxy-config", "tun", "unicase", - "url", "windows-service", "windows-sys 0.61.2", ] @@ -4598,8 +4503,6 @@ dependencies = [ "hashbrown 0.17.1", "hickory-resolver", "kanal-plus", - "once_cell", - "parking_lot", "socket2", "tokio", "tracing", @@ -4613,9 +4516,9 @@ checksum = "357cc3acc6a036009fd6c973ed009037c732d60d0b4f6c673e9041497482a28f" [[package]] name = "unicode-ident" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" [[package]] name = "unicode-segmentation" @@ -4652,17 +4555,11 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" -[[package]] -name = "unty-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16062d030850f35054e37746427b9febb74a2f24c9c6dd6fa2d0c13c5f53221e" - [[package]] name = "ureq" -version = "3.4.2" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a7ac20be9b7726e0bbdbf974c059676d9acb1cd414961f570a4e8231cacd7fc" +checksum = "cde93ff05758a36a851a398a772b0b79a82fbe3c186a46f2696baaeaf84c966b" dependencies = [ "base64 0.23.1", "log", @@ -4676,9 +4573,9 @@ dependencies = [ [[package]] name = "ureq-proto" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f86fd172ccca569e458f61b6bdd6220965a9ef36e672a6852953b51a0e1583be" +checksum = "841583fc36089d7d59419568ae157f43a5a03a2e5a81ba87c77d1596ef46e922" dependencies = [ "base64 0.23.1", "http", @@ -4724,9 +4621,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.27.0" +version = "1.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97277d36b9c3ace13e58fa6e753f8b0bbbf302a18dd193240d70f9e29681059a" +checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514" dependencies = [ "atomic", "getrandom 0.4.3", @@ -4746,12 +4643,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "virtue-next" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d5208a9710a6ca1c2da0d64289a5dcca13deb05afdedf651f4e11bcd9fc53eb" - [[package]] name = "vtparse" version = "0.6.2" @@ -4838,7 +4729,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "wasm-bindgen-shared", ] @@ -4886,18 +4777,18 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" +checksum = "e49d0e65abc00c142e8f9428da991da9f1a250c39be97459901eb12b9b49f62a" dependencies = [ "rustls-pki-types", ] [[package]] name = "webpki-roots" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a" +checksum = "f5f280bbb2b287bc8e7de7e3852945a0ff50d1bbcb5ed42b6c7a568c546df171" dependencies = [ "rustls-pki-types", ] @@ -5002,7 +4893,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.61.2", + "windows-sys 0.52.0", ] [[package]] @@ -5341,9 +5232,9 @@ checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" [[package]] name = "yoke" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +checksum = "417ef3fcf6c300b7dbd25c85531a746931c02ad536f3cf4786ed1e88223340b3" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -5358,24 +5249,24 @@ checksum = "ec8ebde2db3681e8c9980cc27822030e68752690ddfa9473e739aeb4dbde6d71" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.62" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86502bf56ac7c77571a32e2647bb2a15894565e981fb2a48d7bde2d91c965a9d" +checksum = "e5fe1f8f1b06191a00962174c61aa5005e0bb391a6d80d07e24d115c01a92ed8" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.62" +version = "0.8.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5457206954b06561e2608c7e19cf58b1926586d999c246eebe4502f7e2039d1a" +checksum = "863ad3ac83293fb4d740aedbfdc9240dd8d1a50c1099acd76ce80ce7c7230c7f" dependencies = [ "proc-macro2", "quote", @@ -5399,7 +5290,7 @@ checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", "synstructure", ] @@ -5422,9 +5313,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.8" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +checksum = "f58a2799cfe9a1670c7ea8edbd52ef8edb93cb37a7f83bf31ba9e35d9dae6a40" dependencies = [ "yoke", "zerofrom", @@ -5433,13 +5324,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.6" +version = "0.11.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +checksum = "c3743ddbf47738d929cd1ae2e199d40d0162979dfe31aef8ae646d2bf00bf97a" dependencies = [ "proc-macro2", "quote", - "syn 3.0.6", + "syn 3.0.9", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index ca338ef..e4717a6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,9 +12,11 @@ members = [ "crates/galaxy-geometry", ] exclude = [ + "deps/better_mimalloc_rs", "deps/quinn", "deps/kanal", "deps/uni-stream", + "deps/rust-smallvec", "deps/sysproxy-rs", "deps/tun2proxy", "deps/ipstack", @@ -53,14 +55,14 @@ tracing-subscriber = { version = "0.3.23", features = [ # Concurrency dashmap = "6.2.1" -arc-swap = "1.9.2" +arc-swap = "1.9.3" once_cell = "1.21.4" +# 0.13 needs libc >= 0.2.191, which proxy-core cannot take yet (see its libc pin). parking_lot = "0.12" # Collections indexmap = "2" hashbrown = "0.17.1" -lru = "0.18" moka = { version = "0.12.16", features = ["sync"] } # Async utilities @@ -73,7 +75,7 @@ reqwest = { version = "0.13", default-features = false, features = [ "json", "stream", ] } -rustls = { version = "0.23.45", default-features = false, features = ["std", "ring", "tls12"] } +rustls = { version = "0.23.46", default-features = false, features = ["std", "ring", "tls12"] } ureq = { version = "3", default-features = false, features = ["rustls"] } tokio-socks = "0.5.3" ipnet = { version = "2.12", features = ["serde"] } @@ -101,8 +103,7 @@ chrono = "0.4" # System dirs = "7" -# sysinfo 0.39 uses cfg_select, not stabilized in the pinned January nightly. -sysinfo = "0.38" +sysinfo = "0.39" # Memory allocator better_mimalloc_rs = { path = "deps/better_mimalloc_rs", features = ["config"] } @@ -111,10 +112,15 @@ better_mimalloc_rs = { path = "deps/better_mimalloc_rs", features = ["config"] } rand = "0.10" # Local dependencies -kanal = { path = "deps/kanal" } +kanal = { package = "kanal-plus", path = "deps/kanal" } sysproxy = { path = "deps/sysproxy-rs" } smallvec = { path = "deps/rust-smallvec", features = ["std"] } tun2proxy = { path = "deps/tun2proxy", default-features = false } # `deps/ipstack` has no entry here on purpose: nothing in the workspace uses it # directly. `tun2proxy` depends on it by path, which is what pulls the fork into # the build. + +# uni-stream is published and so requires kanal-plus from crates.io; resolve it +# to the same fork checkout so the build carries one channel crate. +[patch.crates-io] +kanal-plus = { path = "deps/kanal" } diff --git a/crates/galaxy-geometry/src/bodies.rs b/crates/galaxy-geometry/src/bodies.rs index 6db7045..13387b6 100644 --- a/crates/galaxy-geometry/src/bodies.rs +++ b/crates/galaxy-geometry/src/bodies.rs @@ -151,7 +151,12 @@ pub fn place_stars( yaw: f64, tilt: f64, ) { - for (star, out) in input.chunks_exact(3).zip(output.chunks_exact_mut(2)) { + for (star, out) in input + .as_chunks::<3>() + .0 + .iter() + .zip(output.as_chunks_mut::<2>().0) + { let parallax = star[2] as f64; let shift_x = yaw / TAU * width * parallax * 2.2; let shift_y = (tilt - 0.6) * height * parallax * 0.6; @@ -183,8 +188,10 @@ mod tests { ); assert!( output - .chunks_exact(2) - .all(|p| (0.0..800.0).contains(&p[0]) && (0.0..600.0).contains(&p[1])) + .as_chunks::<2>() + .0 + .iter() + .all(|[x, y]| (0.0..800.0).contains(x) && (0.0..600.0).contains(y)) ); } } diff --git a/crates/galaxy-geometry/src/layout.rs b/crates/galaxy-geometry/src/layout.rs index c9f02fa..4005da5 100644 --- a/crates/galaxy-geometry/src/layout.rs +++ b/crates/galaxy-geometry/src/layout.rs @@ -26,11 +26,11 @@ fn pair_angle(a: u32, b: u32) -> f64 { /// Output is interleaved x/z, in the original sorted country order. pub fn relax(seeds: &[Seed], output: &mut [f64]) { assert_eq!(output.len(), seeds.len() * 2); - for (seed, point) in seeds.iter().zip(output.chunks_exact_mut(2)) { - point.copy_from_slice(&[seed.x, seed.z]); + for (seed, point) in seeds.iter().zip(output.as_chunks_mut::<2>().0) { + *point = [seed.x, seed.z]; } for _ in 0..240 { - for (seed, point) in seeds.iter().zip(output.chunks_exact_mut(2)) { + for (seed, point) in seeds.iter().zip(output.as_chunks_mut::<2>().0) { point[0] += (seed.x - point[0]) * 0.015; point[1] += (seed.z - point[1]) * 0.015; let radius = (point[0] * point[0] + point[1] * point[1]).sqrt(); diff --git a/crates/proxy-client/src/client/packet_tunnel.rs b/crates/proxy-client/src/client/packet_tunnel.rs index ad9bbfe..28611ec 100644 --- a/crates/proxy-client/src/client/packet_tunnel.rs +++ b/crates/proxy-client/src/client/packet_tunnel.rs @@ -14,7 +14,7 @@ use tokio::runtime::Runtime; use tokio::sync::mpsc; use tokio_util::sync::{CancellationToken, PollSender}; use tokio_util::task::TaskTracker; -use tun2proxy::{ArgDns, ArgProxy, ArgUdpStrategy, Args, VirtualDnsState}; +use tun2proxy::{ArgDns, ArgUdpStrategy, Args, ProxyParameters, VirtualDnsState}; use super::{ClientConfig, ClientRuntimeConfig, run_client_with_listener_runtime_config}; @@ -236,11 +236,10 @@ impl PacketTunnelRuntime { input: input_rx, output: PollSender::new(output_tx), }; + let proxy = ProxyParameters::try_from(format!("socks5://127.0.0.1:{local_port}").as_str()) + .map_err(|_| io::Error::new(io::ErrorKind::InvalidInput, "invalid loopback proxy"))?; let args = Args { - proxy: ArgProxy::try_from(format!("socks5://127.0.0.1:{local_port}").as_str()) - .map_err(|_| { - io::Error::new(io::ErrorKind::InvalidInput, "invalid loopback proxy") - })?, + proxy, setup: false, dns: if config.tun_fake_ip { ArgDns::Virtual diff --git a/crates/proxy-client/src/client/tun.rs b/crates/proxy-client/src/client/tun.rs index fd5274f..db8550f 100644 --- a/crates/proxy-client/src/client/tun.rs +++ b/crates/proxy-client/src/client/tun.rs @@ -18,7 +18,7 @@ use std::os::fd::{IntoRawFd, OwnedFd}; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio_util::sync::CancellationToken; -use tun2proxy::{ArgDns, ArgProxy, ArgUdpStrategy, Args}; +use tun2proxy::{ArgDns, ArgUdpStrategy, Args, ProxyParameters}; pub use tun2proxy::{ NetworkTeardownError as TunNetworkTeardownError, ProcessBypass, VirtualDnsState as TunVirtualDnsState, @@ -841,7 +841,7 @@ async fn run_with_ready_inner( } return Err(error); } - let proxy = ArgProxy::try_from(format!("socks5://127.0.0.1:{local_port}").as_str()) + let proxy = ProxyParameters::try_from(format!("socks5://127.0.0.1:{local_port}").as_str()) .map_err(|error| io::Error::new(io::ErrorKind::InvalidInput, error.to_string()))?; let platform_owned_tun = tun_fd.is_some(); let mut args = Args { diff --git a/crates/proxy-client/src/client/windows_icon.rs b/crates/proxy-client/src/client/windows_icon.rs index 66a28cb..3c879fe 100644 --- a/crates/proxy-client/src/client/windows_icon.rs +++ b/crates/proxy-client/src/client/windows_icon.rs @@ -109,7 +109,7 @@ fn render_icon_rgba(icon: windows_sys::Win32::UI::WindowsAndMessaging::HICON) -> let bgra = std::slice::from_raw_parts(bits.cast::(), (ICON_SIZE * ICON_SIZE * 4) as usize); let mut rgba = bgra.to_vec(); - for pixel in rgba.chunks_exact_mut(4) { + for pixel in rgba.as_chunks_mut::<4>().0 { pixel.swap(0, 2); } SelectObject(memory, previous); diff --git a/crates/proxy-client/tests/tun_dns.rs b/crates/proxy-client/tests/tun_dns.rs index af59eb4..516209c 100644 --- a/crates/proxy-client/tests/tun_dns.rs +++ b/crates/proxy-client/tests/tun_dns.rs @@ -8,7 +8,7 @@ use proxy_client::client::tun::TunConfig; use tokio::io::{AsyncReadExt, AsyncWriteExt, DuplexStream}; use tokio::net::TcpListener; use tokio_util::sync::CancellationToken; -use tun2proxy::{ArgProxy, ArgUdpStrategy, Args, VirtualDnsState}; +use tun2proxy::{ArgUdpStrategy, Args, ProxyParameters, VirtualDnsState}; const CLIENT: [u8; 4] = [10, 77, 0, 2]; const PORTAL: [u8; 4] = [10, 77, 0, 1]; @@ -21,7 +21,7 @@ async fn udp_dns_retries_and_id_collisions_survive_one_tcp_relay() { let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); let args = Args { setup: false, - proxy: ArgProxy::try_from( + proxy: ProxyParameters::try_from( format!("socks5://{}", listener.local_addr().unwrap()).as_str(), ) .unwrap(), @@ -196,7 +196,8 @@ async fn real_listener_forces_dns_through_remote_without_forcing_other_traffic() }; let args = Args { setup: false, - proxy: ArgProxy::try_from(format!("socks5://{local_addr}").as_str()).unwrap(), + proxy: ProxyParameters::try_from(format!("socks5://{local_addr}").as_str()) + .unwrap(), dns: TunConfig::new(Vec::::new()).unwrap().dns_mode(), dns_addr: resolver.parse().unwrap(), udp_strategy: ArgUdpStrategy::Block, @@ -348,7 +349,7 @@ async fn disabling_fake_ip_proxies_udp_and_tcp_dns_and_preserves_cached_domains( let listener = TcpListener::bind("127.0.0.1:0").await.unwrap(); let mut args = Args { setup: false, - proxy: ArgProxy::try_from( + proxy: ProxyParameters::try_from( format!("socks5://{}", listener.local_addr().unwrap()).as_str(), ) .unwrap(), diff --git a/crates/proxy-core/Cargo.toml b/crates/proxy-core/Cargo.toml index 62fd10a..80ef57b 100644 --- a/crates/proxy-core/Cargo.toml +++ b/crates/proxy-core/Cargo.toml @@ -36,7 +36,6 @@ parking_lot = { workspace = true } # Collections indexmap = { workspace = true } -lru = { workspace = true } moka = { workspace = true } # Async utilities @@ -47,7 +46,6 @@ reqwest = { workspace = true } rustls = { workspace = true } quinn = { workspace = true } webpki-roots = "1" -ureq = { workspace = true } tokio-socks = { workspace = true } ipnet = { workspace = true } percent-encoding = { workspace = true } @@ -70,8 +68,6 @@ indicatif = { workspace = true, optional = true } # auto-proxy dependencies (optional) hashbrown = { workspace = true, optional = true } -kanal = { workspace = true, optional = true } -async-broadcast = { workspace = true, optional = true } # `test-util` provides the paused clock the geo rate-limiter tests need, so they # assert timing without sleeping in real time. @@ -84,8 +80,9 @@ tokio = { workspace = true, features = [ # Descriptor-limit policy (see src/rlimit.rs) [target.'cfg(unix)'.dependencies] -# nix 0.31 still references iOS system-control types removed by libc 0.2.190. -# Keep the latest compatible bindings until nix restricts those APIs to macOS. +# nix 0.31.3 still references iOS system-control types removed by libc 0.2.190. +# nix-rust/nix#2821 restricts them to macOS but is not released yet; lift this +# pin (and move parking_lot to 0.13) once a nix release carries it. libc = "=0.2.189" [target.'cfg(windows)'.dependencies] @@ -101,5 +98,5 @@ windows-sys = { version = "0.61", features = [ no-external-geo = [] default = ["tokio", "auto-proxy"] tokio = ["dep:tokio", "dep:tokio-util"] -auto-proxy = ["dep:hashbrown", "dep:kanal", "dep:async-broadcast"] +auto-proxy = ["dep:hashbrown"] cli-dep = ["dep:indicatif"] diff --git a/crates/proxy-ffi/src/disk_log.rs b/crates/proxy-ffi/src/disk_log.rs index 9d86052..b930cbd 100644 --- a/crates/proxy-ffi/src/disk_log.rs +++ b/crates/proxy-ffi/src/disk_log.rs @@ -102,7 +102,7 @@ impl DiskLog { let length = line.len(); if self .queued_bytes - .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |bytes| { + .try_update(Ordering::Relaxed, Ordering::Relaxed, |bytes| { (length <= MAX_QUEUED_BYTES.saturating_sub(bytes)).then_some(bytes + length) }) .is_err() diff --git a/crates/proxy-server/src/server/connection.rs b/crates/proxy-server/src/server/connection.rs index 364e185..d8c2393 100644 --- a/crates/proxy-server/src/server/connection.rs +++ b/crates/proxy-server/src/server/connection.rs @@ -16,7 +16,7 @@ use proxy_core::{ MyAsyncCodecReader, MyAsyncReadExt, MyAsyncWriteExt, ProxyHeader, ProxyTransport, get_data_size, set_data_size, }; -use smallvec::{SmallVec, smallvec}; +use smallvec::SmallVec; use snafu::ResultExt; use tracing::{Instrument, field}; @@ -292,7 +292,8 @@ async fn handle_connect_inner( } const STACK_SIZE: usize = MAX_HEADER_SIZE as usize / 2; - let mut header_buf: SmallVec = smallvec![0u8; msg_len as usize]; + let mut header_buf = SmallVec::::new(); + header_buf.resize(msg_len as usize, 0); client_reader .read_exact(&mut header_buf) .await diff --git a/crates/proxy-server/src/server/icmp.rs b/crates/proxy-server/src/server/icmp.rs index 2fcbc9a..161f0e1 100644 --- a/crates/proxy-server/src/server/icmp.rs +++ b/crates/proxy-server/src/server/icmp.rs @@ -156,7 +156,7 @@ impl EchoSocket { } self.sent += 1; let token = NEXT_PROBE - .fetch_update(Ordering::Relaxed, Ordering::Relaxed, |value| { + .try_update(Ordering::Relaxed, Ordering::Relaxed, |value| { value.checked_add(1) }) .map_err(|_| io::Error::other("ICMP probe identifiers exhausted"))?; diff --git a/crates/proxy-tui/src/bin/main.rs b/crates/proxy-tui/src/bin/main.rs index 5fd9fc2..b2cb4a4 100644 --- a/crates/proxy-tui/src/bin/main.rs +++ b/crates/proxy-tui/src/bin/main.rs @@ -189,20 +189,11 @@ async fn main() -> std::io::Result<()> { state.page_offset = 0; } KeyCode::Up => match state.tab_index { - 0 => { - if state.selected_node > 0 { - state.selected_node -= 1; - } - } - 1 => { - if state.selected_group > 0 { - state.selected_group -= 1; - } - } + 0 => state.selected_node = state.selected_node.saturating_sub(1), + 1 => state.selected_group = state.selected_group.saturating_sub(1), 2 => { - if state.selected_relay_target > 0 { - state.selected_relay_target -= 1; - } + state.selected_relay_target = + state.selected_relay_target.saturating_sub(1) } _ => {} }, diff --git a/crates/proxy-ui-services/Cargo.toml b/crates/proxy-ui-services/Cargo.toml index 4e9eeb2..68b6fc0 100644 --- a/crates/proxy-ui-services/Cargo.toml +++ b/crates/proxy-ui-services/Cargo.toml @@ -23,7 +23,7 @@ rand.workspace = true trash = "5.2" [target.'cfg(target_os = "macos")'.dependencies] -plist = "1.7" +plist = "1.10" [target.'cfg(target_os = "windows")'.dependencies] sysinfo.workspace = true diff --git a/crates/proxy-updater/Cargo.toml b/crates/proxy-updater/Cargo.toml index 93cf9c1..448bce2 100644 --- a/crates/proxy-updater/Cargo.toml +++ b/crates/proxy-updater/Cargo.toml @@ -11,7 +11,6 @@ path = "src/main.rs" [dependencies] proxy-core = { path = "../proxy-core" } -anyhow.workspace = true serde.workspace = true serde_json.workspace = true tokio.workspace = true @@ -22,6 +21,7 @@ ring.workspace = true base64.workspace = true [target.'cfg(windows)'.dependencies] +anyhow.workspace = true windows-sys = { version = "0.61", features = [ "Win32_Foundation", "Win32_Storage_FileSystem", diff --git a/deps/better_mimalloc_rs b/deps/better_mimalloc_rs index c9177cc..20f2732 160000 --- a/deps/better_mimalloc_rs +++ b/deps/better_mimalloc_rs @@ -1 +1 @@ -Subproject commit c9177cc5679709379c668379c4ccfc90c89fec96 +Subproject commit 20f273269a257b1a73ca7a41940c188f211cde7a diff --git a/deps/ipstack b/deps/ipstack index 5d5450c..e4ef686 160000 --- a/deps/ipstack +++ b/deps/ipstack @@ -1 +1 @@ -Subproject commit 5d5450cad1d3a01085afd425bdb5b4839ec6708e +Subproject commit e4ef686d8bba0ee2cc03489e3153cd64109cc687 diff --git a/deps/kanal b/deps/kanal index d3bcbb7..2e04519 160000 --- a/deps/kanal +++ b/deps/kanal @@ -1 +1 @@ -Subproject commit d3bcbb7bc2e0a032a660bbf24137142a91515832 +Subproject commit 2e04519dd112a7d0d150e30690f0758087821f5e diff --git a/deps/rust-smallvec b/deps/rust-smallvec index 983d9ac..f7998fd 160000 --- a/deps/rust-smallvec +++ b/deps/rust-smallvec @@ -1 +1 @@ -Subproject commit 983d9ac9764bf9771db2a267280c797713d0e07f +Subproject commit f7998fdb95f7beb6b162e73f41cd5f5d3dd13706 diff --git a/deps/sysproxy-rs b/deps/sysproxy-rs index e8e1640..6cdff0b 160000 --- a/deps/sysproxy-rs +++ b/deps/sysproxy-rs @@ -1 +1 @@ -Subproject commit e8e1640a3d591804003072a17940479122d65509 +Subproject commit 6cdff0b1344908ece6f2bf9c55572e52032f3866 diff --git a/deps/tun2proxy b/deps/tun2proxy index f4b3c11..f51acbd 160000 --- a/deps/tun2proxy +++ b/deps/tun2proxy @@ -1 +1 @@ -Subproject commit f4b3c11047abec7f799abd01255e76f29719ed31 +Subproject commit f51acbd8eabc274e901de31631b1a3e0686833d9 diff --git a/deps/uni-stream b/deps/uni-stream index 6e74a6e..0eb13a8 160000 --- a/deps/uni-stream +++ b/deps/uni-stream @@ -1 +1 @@ -Subproject commit 6e74a6e2420ad45298a1c35c165ad6f727fe9616 +Subproject commit 0eb13a881b30b632e937fe1f72285f56d6222ccb diff --git a/rust-toolchain.toml b/rust-toolchain.toml index caf4e88..59f2b60 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ [toolchain] -channel = "nightly-2026-01-26" +channel = "nightly-2026-10-26" diff --git a/ui/flutter b/ui/flutter index 41d71a9..7cd9408 160000 --- a/ui/flutter +++ b/ui/flutter @@ -1 +1 @@ -Subproject commit 41d71a9c4f2a54ccd3a8a3ebb6fc440ad8bec0a6 +Subproject commit 7cd9408bb96892073b9966b06d741bf8f9449c44