diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index ac4ea1f3..00000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,108 +0,0 @@ -# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference -version: 2.1 - -orbs: - win: circleci/windows@2.2.0 # The Windows orb give you everything you need to start using the Windows executor. -# Use a package of configuration called an orb. -# Orchestrate or schedule a set of jobs -jobs: - build_windows: - executor: - name: win/default - shell: bash.exe - size: xlarge - steps: - - checkout - - run: pip install --upgrade b2 - - run: b2 authorize-account $B2_KEYID $B2_APPKEY - - run: curl https://win.rustup.rs/ > rustup-init.exe - - run: ./rustup-init -y --default-toolchain "stable-i686-pc-windows-msvc" --profile minimal - - run: PATH=$PATH:/c/Users/circleci/.cargo/bin CARGO_NET_GIT_FETCH_WITH_CLI=true cargo build --release - - run: bash move_built.sh - - run: b2 sync ./OUTPUT/ b2://geph-dl/geph4-binaries/ - - build_osx: - working_directory: ~/repo/ - macos: - xcode: 12.5.1 - resource_class: macos.x86.medium.gen2 - steps: - - checkout - # - run: sudo apt install python3-pip - # - run: sudo pip3 install --upgrade b2 - # - run: | - # b2 authorize-account $B2_KEYID $B2_APPKEY - - run: curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py - - run: python3 get-pip.py - - run: pip3 install --upgrade b2 - - run: b2 authorize-account $B2_KEYID $B2_APPKEY - - run: curl https://sh.rustup.rs -sSf | sh -s -- -y - - run: cargo build --release --locked --target x86_64-apple-darwin - - run: sh move_built.sh - # - run: echo 'export PATH=$HOME/.cargo/bin:$PATH' >> $BASH_ENV - # - run: sh osx_build.sh - # - run: sh move_built.sh - - run: b2 sync ~/repo/OUTPUT/ b2://geph-dl/geph4-binaries/ - build_cross_android: - working_directory: ~/repo/ - machine: - image: ubuntu-2204:2023.07.2 - resource_class: xlarge - steps: - - checkout - - run: curl https://sh.rustup.rs -sSf | sh -s -- -y - - run: echo 'export PATH=$HOME/.cargo/bin:$PATH' >> $BASH_ENV - - run: sh cross-setup.sh - - run: sudo apt install python3-pip - - run: sudo pip3 install --upgrade b2 - - run: | - b2 authorize-account $B2_KEYID $B2_APPKEY - - run: cargo install cross --git https://github.com/cross-rs/cross - - run: cross build --release --locked --target armv7-linux-androideabi - - run: cross build --release --locked --target aarch64-linux-android - # - run: cross build --release --locked --target x86_64-linux-android - # - run: cross build --release --locked --target i686-linux-android - - run: sh move_built.sh - - run: b2 sync ~/repo/OUTPUT/ b2://geph-dl/geph4-binaries/ - build_cross_linux: - working_directory: ~/repo/ - machine: - image: ubuntu-2004:2023.04.2 - resource_class: large - steps: - - checkout - - run: sudo apt install python3-pip - - run: sudo pip3 install --upgrade b2 - - run: | - b2 authorize-account $B2_KEYID $B2_APPKEY - - run: curl https://sh.rustup.rs -sSf | sh -s -- -y - - run: echo 'export PATH=$HOME/.cargo/bin:$PATH' >> $BASH_ENV - - run: cargo install cross --locked - - run: cross build --release --locked --target armv7-unknown-linux-musleabihf - - run: cross build --release --locked --target x86_64-unknown-linux-musl - - run: sh move_built.sh - - run: b2 sync ./OUTPUT/ b2://geph-dl/geph4-binaries/ - -workflows: - version: 2 - main: - jobs: - - build_windows - - build_cross_android - # filters: - # branches: - # ignore: /.*/ - # tags: - # only: /.*/ - - build_cross_linux - # filters: - # branches: - # ignore: /.*/ - # tags: - # only: /.*/ - - build_osx - # filters: - # branches: - # ignore: /.*/ - # tags: - # only: /.*/ diff --git a/.github/workflows/upload.yaml b/.github/workflows/upload.yaml new file mode 100644 index 00000000..e735edf8 --- /dev/null +++ b/.github/workflows/upload.yaml @@ -0,0 +1,139 @@ +name: CI + +on: + push: + branches: "*" + pull_request: + branches: "*" + +jobs: + build_windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + - name: Install b2 + run: pip install --upgrade b2 + - name: Authorize b2 + run: b2 authorize-account ${{ secrets.B2_KEYID }} ${{ secrets.B2_APPKEY }} + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable-i686-pc-windows-msvc + profile: minimal + default: true + - name: Build + run: cargo build --release + env: + CARGO_NET_GIT_FETCH_WITH_CLI: true + - name: Move built files + run: bash move_built.sh + - name: Sync to B2 + run: b2 sync ./OUTPUT/ b2://geph-dl/geph4-binaries/ + + build_osx: + runs-on: macos-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + - name: Install b2 + run: | + pip3 install --upgrade b2 + - name: Authorize b2 + run: b2 authorize-account ${{ secrets.B2_KEYID }} ${{ secrets.B2_APPKEY }} + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + default: true + - name: Enable x86 + run: rustup target add x86_64-apple-darwin + - name: Build + run: cargo build --release --locked --target x86_64-apple-darwin + - name: Move built files + run: sh move_built.sh + - name: Sync to B2 + run: b2 sync ./OUTPUT/ b2://geph-dl/geph4-binaries/ + + build_android: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + - name: Install b2 + run: pip3 install --upgrade b2 + - name: Authorize b2 + run: b2 authorize-account ${{ secrets.B2_KEYID }} ${{ secrets.B2_APPKEY }} + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + default: true + - name: Add Android targets + run: | + rustup target add armv7-linux-androideabi + rustup target add aarch64-linux-android + - name: Setup Android NDK + uses: nttld/setup-ndk@v1 + with: + ndk-version: r25b + - name: Install cargo-ndk + run: cargo install cargo-ndk + - name: Build for armv7-linux-androideabi + run: | + cargo ndk -t armeabi-v7a -p 21 build --release + - name: Build for aarch64-linux-android + run: | + cargo ndk -t arm64-v8a -p 21 build --release + - name: Move built files + run: bash move_built.sh + - name: Sync to B2 + run: b2 sync ./OUTPUT/ b2://geph-dl/geph4-binaries/ + + build_cross_linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.x" + - name: Install b2 + run: pip3 install --upgrade b2 + - name: Authorize b2 + run: b2 authorize-account ${{ secrets.B2_KEYID }} ${{ secrets.B2_APPKEY }} + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + profile: minimal + default: true + - name: Install cross + run: cargo install cross --locked + - name: Build for armv7-unknown-linux-musleabihf + run: cross build --release --locked --target armv7-unknown-linux-musleabihf + - name: Build for x86_64-unknown-linux-musl + run: cross build --release --locked --target x86_64-unknown-linux-musl + - name: Move built files + run: sh move_built.sh + - name: Sync to B2 + run: b2 sync ./OUTPUT/ b2://geph-dl/geph4-binaries/ diff --git a/Cargo.lock b/Cargo.lock index b171c186..13912296 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -9,7 +9,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f043101f6732b1bcdff32dcfdf6e5ca351d0e755abaeff9b5efa356b762a113" dependencies = [ "atomicwrites", - "log 0.4.20", + "log", "serde", "serde_json", "thiserror", @@ -17,9 +17,9 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -39,6 +39,16 @@ dependencies = [ "generic-array", ] +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + [[package]] name = "aes" version = "0.6.0" @@ -47,7 +57,7 @@ checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561" dependencies = [ "aes-soft", "aesni", - "cipher", + "cipher 0.2.5", ] [[package]] @@ -56,9 +66,9 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da" dependencies = [ - "aead", + "aead 0.3.2", "aes", - "cipher", + "cipher 0.2.5", "ctr", "ghash", "subtle", @@ -70,7 +80,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072" dependencies = [ - "cipher", + "cipher 0.2.5", "opaque-debug", ] @@ -80,7 +90,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce" dependencies = [ - "cipher", + "cipher 0.2.5", "opaque-debug", ] @@ -92,43 +102,42 @@ checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" [[package]] name = "ahash" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.15", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if 1.0.0", - "getrandom 0.2.12", + "getrandom 0.2.15", "once_cell", - "serde", "version_check", "zerocopy", ] [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" @@ -154,11 +163,70 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" + +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys 0.52.0", +] + +[[package]] +name = "anyctx" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fe5a3722bef0d71b976d7ed31de07523d1359e944e174e4c1af24ee8a4755e3" +dependencies = [ + "ahash 0.8.11", + "dashmap 5.5.3", +] + [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arbitrary" @@ -170,16 +238,16 @@ dependencies = [ ] [[package]] -name = "arc-swap" -version = "1.6.0" +name = "arc-writer" +version = "0.2.1-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6" +checksum = "e15dd4b662a8ee95155b5f897c9302805c7df12f6ae63b29310697f47e2bf98b" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "9d151e35f61089500b617991b791fc8bfd237ae50cd5950803758a179b41e67a" [[package]] name = "arrayvec" @@ -189,9 +257,9 @@ checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ascii" @@ -210,40 +278,51 @@ dependencies = [ "futures-core", ] +[[package]] +name = "async-broadcast" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy 0.5.2", + "futures-core", + "pin-project-lite 0.2.14", +] + [[package]] name = "async-channel" version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "event-listener 2.5.3", "futures-core", ] [[package]] name = "async-channel" -version = "2.1.1" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" dependencies = [ - "concurrent-queue 2.4.0", - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", + "concurrent-queue 2.5.0", + "event-listener-strategy 0.5.2", "futures-core", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", ] [[package]] name = "async-compat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68a707c1feb095d8c07f8a65b9f506b117d30af431cab89374357de7c11461b" +checksum = "7bab94bde396a3f7b4962e396fdad640e241ed797d4d8d77fc8c237d14c58fc0" dependencies = [ "futures-core", "futures-io", "once_cell", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "tokio", ] @@ -253,30 +332,30 @@ version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2886ab563af5038f79ec016dd7b87947ed138b794e8dd64992962c9cca0411" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "futures-io", ] [[package]] name = "async-event" -version = "0.1.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4172595da7ffb68640606be5723e35a353555f2829e9209437627a003725bbdb" +checksum = "c1222afd3d2bce3995035054046a279ae7aa154d70d0766cea050073f3fd7ddf" dependencies = [ "loom", + "pin-project-lite 0.2.14", ] [[package]] name = "async-executor" -version = "1.8.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +checksum = "d7ebdfa2ebdab6b1760375fa7d6f382b9f486eac35fc994625a00e89280bdbb7" dependencies = [ - "async-lock 3.3.0", "async-task", - "concurrent-queue 2.4.0", - "fastrand 2.0.1", - "futures-lite 2.2.0", + "concurrent-queue 2.5.0", + "fastrand 2.1.1", + "futures-lite 2.3.0", "slab", ] @@ -287,23 +366,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" dependencies = [ "async-lock 2.8.0", - "autocfg 1.1.0", + "autocfg 1.3.0", "blocking", "futures-lite 1.13.0", ] +[[package]] +name = "async-fs" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" +dependencies = [ + "async-lock 3.4.0", + "blocking", + "futures-lite 2.3.0", +] + [[package]] name = "async-global-executor" version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel 2.1.1", + "async-channel 2.3.1", "async-executor", - "async-io 2.3.0", - "async-lock 3.3.0", + "async-io 2.3.4", + "async-lock 3.4.0", "blocking", - "futures-lite 2.2.0", + "futures-lite 2.3.0", "once_cell", ] @@ -320,7 +410,7 @@ dependencies = [ "futures-lite 1.13.0", "http-types", "httparse", - "log 0.4.20", + "log", "pin-project", ] @@ -331,11 +421,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ "async-lock 2.8.0", - "autocfg 1.1.0", + "autocfg 1.3.0", "cfg-if 1.0.0", - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "futures-lite 1.13.0", - "log 0.4.20", + "log", "parking", "polling 2.8.0", "rustix 0.37.27", @@ -346,21 +436,21 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.0" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb41eb19024a91746eba0773aa5e16036045bbf45733766661099e182ea6a744" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ - "async-lock 3.3.0", + "async-lock 3.4.0", "cfg-if 1.0.0", - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "futures-io", - "futures-lite 2.2.0", + "futures-lite 2.3.0", "parking", - "polling 3.3.2", - "rustix 0.38.30", + "polling 3.7.3", + "rustix 0.38.35", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -374,13 +464,13 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.3.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener 4.0.3", - "event-listener-strategy 0.4.0", - "pin-project-lite 0.2.13", + "event-listener 5.3.1", + "event-listener-strategy 0.5.2", + "pin-project-lite 0.2.14", ] [[package]] @@ -393,26 +483,25 @@ dependencies = [ ] [[package]] -name = "async-native-tls" -version = "0.4.0" +name = "async-net" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d57d4cec3c647232e1094dc013546c0b33ce785d8aeb251e1f20dfaf8a9a13fe" +checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" dependencies = [ - "futures-util", - "native-tls", - "thiserror", - "url", + "async-io 1.13.0", + "blocking", + "futures-lite 1.13.0", ] [[package]] name = "async-net" -version = "1.8.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f" +checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io 1.13.0", + "async-io 2.3.4", "blocking", - "futures-lite 1.13.0", + "futures-lite 2.3.0", ] [[package]] @@ -434,47 +523,46 @@ dependencies = [ "cfg-if 1.0.0", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.30", + "rustix 0.38.35", "windows-sys 0.48.0", ] [[package]] -name = "async-recursion" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - -[[package]] -name = "async-rwlock" -version = "1.3.0" +name = "async-process" +version = "2.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "261803dcc39ba9e72760ba6e16d0199b1eef9fc44e81bffabbebb9f5aea3906c" +checksum = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374" dependencies = [ - "async-mutex", - "event-listener 2.5.3", + "async-channel 2.3.1", + "async-io 2.3.4", + "async-lock 3.4.0", + "async-signal", + "async-task", + "blocking", + "cfg-if 1.0.0", + "event-listener 5.3.1", + "futures-lite 2.3.0", + "rustix 0.38.35", + "tracing", + "windows-sys 0.59.0", ] [[package]] name = "async-signal" -version = "0.2.5" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io 2.3.0", - "async-lock 2.8.0", + "async-io 2.3.4", + "async-lock 3.4.0", "atomic-waker", "cfg-if 1.0.0", "futures-core", "futures-io", - "rustix 0.38.30", + "rustix 0.38.35", "signal-hook-registry", "slab", - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] @@ -487,7 +575,7 @@ dependencies = [ "async-global-executor", "async-io 1.13.0", "async-lock 2.8.0", - "async-process", + "async-process 1.8.1", "crossbeam-utils", "futures-channel", "futures-core", @@ -495,10 +583,10 @@ dependencies = [ "futures-lite 1.13.0", "gloo-timers", "kv-log-macro", - "log 0.4.20", + "log", "memchr", "once_cell", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "pin-utils", "slab", "wasm-bindgen-futures", @@ -506,19 +594,29 @@ dependencies = [ [[package]] name = "async-task" -version = "4.7.0" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.77" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", +] + +[[package]] +name = "async_io_stream" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" +dependencies = [ + "futures", + "rustc_version 0.4.1", ] [[package]] @@ -537,14 +635,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] -name = "atomic-write-file" -version = "0.1.2" +name = "atomic_float" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edcdbedc2236483ab103a53415653d6b4442ea6141baf1ffa85df29635e88436" -dependencies = [ - "nix", - "rand 0.8.5", -] +checksum = "628d228f918ac3b82fe590352cc719d30664a0c13ca3a60266fe02c7132d480a" [[package]] name = "atomicwrites" @@ -573,167 +667,549 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" dependencies = [ - "autocfg 1.1.0", + "autocfg 1.3.0", ] [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] -name = "backoff" -version = "0.4.0" +name = "aws-config" +version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +checksum = "4e95816a168520d72c0e7680c405a5a8c1fb6a035b4bc4b9d7b0de8e1a941697" dependencies = [ - "getrandom 0.2.12", - "instant", - "rand 0.8.5", + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.1", + "hex", + "http 0.2.12", + "ring 0.17.8", + "time 0.3.36", + "tokio", + "tracing", + "url", + "zeroize", ] [[package]] -name = "backtrace" -version = "0.1.8" +name = "aws-credential-types" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150ae7828afa7afb6d474f909d64072d21de1f3365b6e8ad8029bf7b1c6350a0" +checksum = "60e8f6b615cb5fc60a98132268508ad104310f0cfb25a1c22eee76efdf9154da" dependencies = [ - "backtrace-sys", - "cfg-if 0.1.10", - "dbghelp-sys", - "debug-builders", - "kernel32-sys", - "libc", - "winapi 0.2.8", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", ] [[package]] -name = "backtrace" -version = "0.3.69" +name = "aws-runtime" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" -dependencies = [ - "addr2line", - "cc", - "cfg-if 1.0.0", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", +checksum = "2424565416eef55906f9f8cece2072b6b6a76075e3ff81483ebe938a89a4c05f" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.1", + "http 0.2.12", + "http-body 0.4.6", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.14", + "tracing", + "uuid", ] [[package]] -name = "backtrace-sys" -version = "0.1.37" +name = "aws-sdk-lambda" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399" +checksum = "afb8c310dbf424c9028c36342ffd1fe511a673d5fd5f201f354bba06770afa6e" dependencies = [ - "cc", - "libc", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", ] [[package]] -name = "base-x" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" - -[[package]] -name = "base32" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" - -[[package]] -name = "base64" -version = "0.13.1" +name = "aws-sdk-sso" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "af0a3f676cba2c079c9563acc9233998c8951cdbe38629a0bef3c8c1b02f3658" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] [[package]] -name = "base64" -version = "0.21.7" +name = "aws-sdk-ssooidc" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +checksum = "c91b6a04495547162cf52b075e3c15a17ab6608bf9c5785d3e5a5509b3f09f5c" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] [[package]] -name = "binary-search" -version = "0.1.2" +name = "aws-sdk-sts" +version = "1.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bea0ab2808834a04d4ae0d831f476217fdbee35cb620bf6b2e5807a4e9435776" +checksum = "99c56bcd6a56cab7933980a54148b476a5a69a7694e3874d9aa2a566f150447d" +dependencies = [ + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", +] [[package]] -name = "bincode" -version = "1.3.3" +name = "aws-sigv4" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +checksum = "5df1b0fa6be58efe9d4ccc257df0a53b89cd8909e86591a13ca54817c87517be" dependencies = [ - "serde", + "aws-credential-types", + "aws-smithy-eventstream", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac 0.12.1", + "http 0.2.12", + "http 1.1.0", + "once_cell", + "percent-encoding", + "sha2 0.10.8", + "time 0.3.36", + "tracing", ] [[package]] -name = "bitflags" -version = "0.5.0" +name = "aws-smithy-async" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f67931368edf3a9a51d29886d245f1c3db2f1ef0dcc9e35ff70341b78c10d23" +checksum = "62220bc6e97f946ddd51b5f1361f78996e704677afc518a4ff66b7a72ea1378c" +dependencies = [ + "futures-util", + "pin-project-lite 0.2.14", + "tokio", +] [[package]] -name = "bitflags" -version = "1.3.2" +name = "aws-smithy-eventstream" +version = "0.60.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "e6363078f927f612b970edf9d1903ef5cef9a64d1e8423525ebb1f0a1633c858" +dependencies = [ + "aws-smithy-types", + "bytes", + "crc32fast", +] [[package]] -name = "bitflags" -version = "2.4.2" +name = "aws-smithy-http" +version = "0.60.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" +checksum = "01dbcb6e2588fd64cfb6d7529661b06466419e4c54ed1c62d6510d2d0350a728" +dependencies = [ + "aws-smithy-eventstream", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http-body 0.4.6", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.14", + "pin-utils", + "tracing", +] [[package]] -name = "bitmaps" -version = "2.1.0" +name = "aws-smithy-json" +version = "0.60.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" dependencies = [ - "typenum", + "aws-smithy-types", ] [[package]] -name = "bitvec" -version = "0.20.4" +name = "aws-smithy-query" +version = "0.60.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7774144344a4faa177370406a7ff5f1da24303817368584c6206c8303eb07848" +checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb" dependencies = [ - "funty 1.1.0", - "radium 0.6.2", - "tap", - "wyz 0.2.0", + "aws-smithy-types", + "urlencoding", ] [[package]] -name = "bitvec" -version = "1.0.1" +name = "aws-smithy-runtime" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +checksum = "d1ce695746394772e7000b39fe073095db6d45a862d0767dd5ad0ac0d7f8eb87" dependencies = [ - "funty 2.0.0", - "radium 0.7.0", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand 2.1.1", + "h2", + "http 0.2.12", + "http-body 0.4.6", + "http-body 1.0.1", + "httparse", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "once_cell", + "pin-project-lite 0.2.14", + "pin-utils", + "rustls 0.21.12", + "tokio", + "tracing", +] + +[[package]] +name = "aws-smithy-runtime-api" +version = "1.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e086682a53d3aa241192aa110fa8dfce98f2f5ac2ead0de84d41582c7e8fdb96" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.1.0", + "pin-project-lite 0.2.14", + "tokio", + "tracing", + "zeroize", +] + +[[package]] +name = "aws-smithy-types" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "273dcdfd762fae3e1650b8024624e7cd50e484e37abdab73a7a706188ad34543" +dependencies = [ + "base64-simd", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.1.0", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite 0.2.14", + "pin-utils", + "ryu", + "serde", + "time 0.3.36", + "tokio", + "tokio-util", +] + +[[package]] +name = "aws-smithy-xml" +version = "0.60.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d123fbc2a4adc3c301652ba8e149bf4bc1d1725affb9784eb20c953ace06bf55" +dependencies = [ + "xmlparser", +] + +[[package]] +name = "aws-types" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" +dependencies = [ + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version 0.4.1", + "tracing", +] + +[[package]] +name = "backoff" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" +dependencies = [ + "getrandom 0.2.15", + "instant", + "rand 0.8.5", +] + +[[package]] +name = "backtrace" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150ae7828afa7afb6d474f909d64072d21de1f3365b6e8ad8029bf7b1c6350a0" +dependencies = [ + "backtrace-sys", + "cfg-if 0.1.10", + "dbghelp-sys", + "debug-builders", + "kernel32-sys", + "libc", + "winapi 0.2.8", +] + +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "base-x" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" + +[[package]] +name = "base32" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ce669cd6c8588f79e15cf450314f9638f967fc5770ff1c7c1deb0925ea7cfa" + +[[package]] +name = "base32" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "binary-search" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bea0ab2808834a04d4ae0d831f476217fdbee35cb620bf6b2e5807a4e9435776" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bipe" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d82b477ec343d3f07970a4cccdf47b2d62f2e648254f1fdc424f8764f0f3945e" +dependencies = [ + "concurrent-queue 1.2.4", + "event-listener 2.5.3", + "futures-core", + "futures-lite 1.13.0", + "rtrb", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", "tap", - "wyz 0.5.1", + "wyz", ] [[package]] name = "blake3" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +checksum = "30cca6d3674597c30ddf2c587bf8d9d65c9a84d2326d941cc79c9842dfe0ef52" dependencies = [ "arrayref", - "arrayvec 0.7.4", + "arrayvec 0.7.6", "cc", "cfg-if 1.0.0", "constant_time_eq", + "serde", +] + +[[package]] +name = "blind-rsa-signatures" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7a988a0de8f466ebc1b89f588aa8bdb28bd7e9a5f745da2b209e8f407d24ec" +dependencies = [ + "derive-new", + "derive_more", + "digest 0.10.7", + "hmac-sha256", + "hmac-sha512", + "num-integer", + "num-traits", + "rand 0.8.5", + "rsa 0.8.2", + "serde", ] [[package]] @@ -756,31 +1232,48 @@ dependencies = [ [[package]] name = "blocking" -version = "1.5.1" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "async-channel 2.1.1", - "async-lock 3.3.0", + "async-channel 2.3.1", "async-task", - "fastrand 2.0.1", "futures-io", - "futures-lite 2.2.0", + "futures-lite 2.3.0", "piper", - "tracing", ] [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "bytecount" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205" +checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" + +[[package]] +name = "bytemuck" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773d90827bc3feecfb67fab12e24de0749aad83c74b9504ecde46237b5cd24e2" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", +] [[package]] name = "byteorder" @@ -790,13 +1283,43 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] +[[package]] +name = "bytes-utils" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] + +[[package]] +name = "c2rust-bitfields" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b43c3f07ab0ef604fa6f595aa46ec2f8a22172c975e186f6f5bf9829a3b72c41" +dependencies = [ + "c2rust-bitfields-derive", +] + +[[package]] +name = "c2rust-bitfields-derive" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3cbc102e2597c9744c8bd8c15915d554300601c91a079430d309816b0912545" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "cache-padded" version = "1.3.0" @@ -811,29 +1334,13 @@ checksum = "5e2afe73808fbaac302e39c9754bfc3c4b4d0f99c9c240b9f4e4efc841ad1b74" dependencies = [ "async-mutex", "async-trait", - "cached_proc_macro 0.6.2", + "cached_proc_macro", "cached_proc_macro_types", "futures", "hashbrown 0.9.1", "once_cell", ] -[[package]] -name = "cached" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2bc2fd249a24a9cdd4276f3a3e0461713271ab63b0e9e656e200e8e21c8c927" -dependencies = [ - "async-mutex", - "async-rwlock", - "async-trait", - "cached_proc_macro 0.7.1", - "cached_proc_macro_types", - "futures", - "hashbrown 0.11.2", - "once_cell", -] - [[package]] name = "cached_proc_macro" version = "0.6.2" @@ -846,29 +1353,17 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "cached_proc_macro" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3531903b39df48a378a7ed515baee7c1fff32488489c7d0725eb1749b22a91" -dependencies = [ - "cached_proc_macro_types", - "darling 0.13.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "cached_proc_macro_types" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a4f925191b4367301851c6d99b09890311d74b0d43f274c0b34c86d308a3663" +checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0" [[package]] name = "camino" -version = "1.1.6" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -881,9 +1376,9 @@ checksum = "6f125eb85b84a24c36b02ed1d22c9dd8632f53b3cde6e4d23512f94021030003" [[package]] name = "cargo-platform" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" dependencies = [ "serde", ] @@ -896,18 +1391,18 @@ checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" dependencies = [ "camino", "cargo-platform", - "semver 1.0.21", + "semver 1.0.23", "serde", "serde_json", ] [[package]] name = "cc" -version = "1.0.83" +version = "1.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "e9d013ecb737093c0e86b151a7b837993cf9ec6c502946cfb44bedc392421e0b" dependencies = [ - "libc", + "shlex", ] [[package]] @@ -928,20 +1423,44 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed8738f14471a99f0e316c327e68fc82a3611cc2895fcb604b89eedaf8f39d95" dependencies = [ - "cipher", + "cipher 0.2.5", "zeroize", ] +[[package]] +name = "chacha20" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818" +dependencies = [ + "cfg-if 1.0.0", + "cipher 0.4.4", + "cpufeatures", +] + [[package]] name = "chacha20poly1305" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1fc18e6d90c40164bf6c317476f2a98f04661e310e79830366b7e914c58a8e" dependencies = [ - "aead", - "chacha20", - "cipher", - "poly1305", + "aead 0.3.2", + "chacha20 0.6.0", + "cipher 0.2.5", + "poly1305 0.6.2", + "zeroize", +] + +[[package]] +name = "chacha20poly1305" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35" +dependencies = [ + "aead 0.5.2", + "chacha20 0.9.1", + "cipher 0.4.4", + "poly1305 0.8.0", "zeroize", ] @@ -951,7 +1470,7 @@ version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "106561f7d2650ede8661b192329822074a37359e95903bd58eb599c9ad64a747" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "conv", "debugtrace", "either", @@ -959,9 +1478,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -969,7 +1488,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -987,6 +1506,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", + "zeroize", +] + [[package]] name = "clap" version = "2.34.0" @@ -1002,6 +1532,46 @@ dependencies = [ "vec_map", ] +[[package]] +name = "clap" +version = "4.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", +] + +[[package]] +name = "clap_derive" +version = "4.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + [[package]] name = "clone-macro" version = "0.1.0" @@ -1009,13 +1579,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "11b52aa11e0a83701c2f8a2b683c254889d8a957e7f58a5a06c5f98ebb4fc3c1" [[package]] -name = "cloudabi" -version = "0.0.3" +name = "colorchoice" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -dependencies = [ - "bitflags 1.3.2", -] +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] name = "colored" @@ -1038,24 +1605,30 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ "crossbeam-utils", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "const_fn" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935" +checksum = "373e9fafaa20882876db20562275ff58d50e0caa2590077fe7ce7bef90211d0d" [[package]] name = "constant_time_eq" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] name = "conv" @@ -1080,8 +1653,8 @@ checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951" dependencies = [ "aes-gcm", "base64 0.13.1", - "hkdf", - "hmac", + "hkdf 0.10.0", + "hmac 0.10.1", "percent-encoding", "rand 0.8.5", "sha2 0.9.9", @@ -1101,15 +1674,15 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" dependencies = [ "libc", ] @@ -1122,9 +1695,9 @@ checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" [[package]] name = "crc" -version = "3.0.1" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" dependencies = [ "crc-catalog", ] @@ -1135,11 +1708,20 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "crossbeam-channel" -version = "0.5.11" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176dc175b78f56c0f321911d9c8eb2b77a78a4860b9c19db83835fea1a46649b" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -1174,9 +1756,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -1185,6 +1767,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", + "rand_core 0.6.4", "typenum", ] @@ -1204,21 +1787,34 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f" dependencies = [ - "cipher", + "cipher 0.2.5", ] [[package]] name = "curve25519-dalek" -version = "3.2.1" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f9d052967f590a76e62eb387bd0bbb1b000182c3cefe5364db6b7211651bc0" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "byteorder", - "digest 0.9.0", - "rand_core 0.5.1", + "cfg-if 1.0.0", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", "serde", "subtle", - "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.77", ] [[package]] @@ -1252,12 +1848,12 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "darling_core 0.20.3", - "darling_macro 0.20.3", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] @@ -1276,16 +1872,16 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 2.0.48", + "strsim 0.11.1", + "syn 2.0.77", ] [[package]] @@ -1301,13 +1897,13 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "darling_core 0.20.3", + "darling_core 0.20.10", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -1327,10 +1923,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.14.3", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core 0.9.10", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", + "hashbrown 0.14.5", "lock_api", "once_cell", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", ] [[package]] @@ -1362,12 +1972,34 @@ dependencies = [ name = "default-net" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e70d471b0ba4e722c85651b3bb04b6880dfdb1224a43ade80c1295314db646" +checksum = "05e70d471b0ba4e722c85651b3bb04b6880dfdb1224a43ade80c1295314db646" +dependencies = [ + "libc", + "memalloc", + "system-configuration", + "windows 0.30.0", +] + +[[package]] +name = "der" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" +dependencies = [ + "const-oid", + "pem-rfc7468 0.6.0", + "zeroize", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ - "libc", - "memalloc", - "system-configuration", - "windows 0.30.0", + "const-oid", + "pem-rfc7468 0.7.0", + "zeroize", ] [[package]] @@ -1391,6 +2023,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "derive-new" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "derive_arbitrary" version = "1.3.2" @@ -1399,20 +2042,20 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", - "rustc_version 0.4.0", - "syn 1.0.109", + "rustc_version 0.4.1", + "syn 2.0.77", ] [[package]] @@ -1425,6 +2068,12 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "diatomic-waker" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af873b6853650fb206431c52fa7bbf6917146b70a8a9979d6d141f5d5394086b" + [[package]] name = "digest" version = "0.9.0" @@ -1441,7 +2090,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.4", + "const-oid", "crypto-common", + "subtle", ] [[package]] @@ -1450,7 +2101,16 @@ version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" dependencies = [ - "dirs-sys", + "dirs-sys 0.3.7", +] + +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", ] [[package]] @@ -1464,6 +2124,18 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + [[package]] name = "discard" version = "1.0.4" @@ -1472,9 +2144,9 @@ checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" [[package]] name = "dnsclient" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2f14b3b465bc4911d0d758f8c6d55cfce09dd9663a8c103fe7e13b22a744fa1" +checksum = "8d4f6b3f88ed75d8745ae4450725c3d3b27d26060d0010b921c7a1a976c45d80" dependencies = [ "async-std", "dnssector", @@ -1510,9 +2182,9 @@ checksum = "2afbb9b0aef60e4f0d2b18129b6c0dff035a6f7dbbd17c2f38c1432102ee223c" [[package]] name = "ed25519" -version = "1.5.3" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ "serde", "signature", @@ -1535,68 +2207,67 @@ dependencies = [ [[package]] name = "ed25519-dalek" -version = "1.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ "curve25519-dalek", "ed25519", - "rand 0.7.3", "serde", - "serde_bytes", - "sha2 0.9.9", - "zeroize", + "sha2 0.10.8", + "subtle", ] [[package]] name = "eff-wordlist" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226cc2588a6b769f444d06dedd29a366ea92469edea1cef7873fbd76e5b34c24" +checksum = "cd8bc86f92f53c5f70e170794b075ecf275126dfcea3c814a4dbf3bbcbb0612b" dependencies = [ - "rand 0.6.5", + "rand 0.8.5", ] [[package]] name = "either" -version = "1.9.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" dependencies = [ "serde", ] [[package]] -name = "encoding_rs" -version = "0.8.33" +name = "elevated-command" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "54c410eccdcc5b759704fdb6a792afe6b01ab8a062e2c003ff2567e2697a94aa" dependencies = [ - "cfg-if 1.0.0", + "anyhow", + "base64 0.21.7", + "libc", + "log", + "winapi 0.3.9", + "windows 0.52.0", ] [[package]] -name = "env_logger" -version = "0.9.3" +name = "encoding_rs" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ - "atty", - "humantime", - "log 0.4.20", - "regex", - "termcolor", + "cfg-if 1.0.0", ] [[package]] name = "env_logger" -version = "0.10.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7" dependencies = [ + "atty", "humantime", - "is-terminal", - "log 0.4.20", + "log", "regex", "termcolor", ] @@ -1609,9 +2280,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1627,10 +2298,24 @@ dependencies = [ ] [[package]] -name = "ethnum" -version = "1.5.0" +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if 1.0.0", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "etherparse" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b90ca2580b73ab6a1f724b76ca11ab632df820fd6040c336200d2c1df7b3c82c" +checksum = "095ab548cf452be5813424558a18af88f0a620d0f4a3d8793aa09311a3b6fa5f" +dependencies = [ + "arrayvec 0.7.6", +] [[package]] name = "event-listener" @@ -1644,20 +2329,20 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" dependencies = [ - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "parking", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", ] [[package]] name = "event-listener" -version = "4.0.3" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" dependencies = [ - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "parking", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", ] [[package]] @@ -1667,17 +2352,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "15c97b4e30ea7e4b7e7b429d6e2d8510433ba8cee4e70dfb3243794e539d29fd" dependencies = [ "event-listener 3.1.0", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", ] [[package]] name = "event-listener-strategy" -version = "0.4.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "event-listener 4.0.3", - "pin-project-lite 0.2.13", + "event-listener 5.3.1", + "pin-project-lite 0.2.14", ] [[package]] @@ -1686,7 +2371,7 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86" dependencies = [ - "backtrace 0.3.69", + "backtrace 0.3.73", "failure_derive", ] @@ -1725,9 +2410,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.0.1" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdh" @@ -1737,11 +2422,17 @@ checksum = "ed106530ccc9d287f2e13243c45af7adeef9d14c0f4ba7eeb47b2bd5bd995cfe" dependencies = [ "digest 0.9.0", "failure", - "num-bigint-dig", + "num-bigint-dig 0.6.1", "secret_integers", "subtle", ] +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + [[package]] name = "flume" version = "0.10.14" @@ -1796,18 +2487,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fuchsia-cprng" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" - -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "funty" version = "2.0.0" @@ -1829,6 +2508,17 @@ dependencies = [ "futures-util", ] +[[package]] +name = "futures-buffered" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fa130f3777d0d4b0993653c20bc433026d3290627693c4ed1b18dd237357ab" +dependencies = [ + "diatomic-waker 0.2.2", + "futures-core", + "pin-project-lite 0.2.14", +] + [[package]] name = "futures-channel" version = "0.3.30" @@ -1839,6 +2529,21 @@ dependencies = [ "futures-sink", ] +[[package]] +name = "futures-concurrency" +version = "7.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b14ac911e85d57c5ea6eef76d7b4d4a3177ecd15f4bea2e61927e9e3823e19f" +dependencies = [ + "bitvec", + "futures-buffered", + "futures-core", + "futures-lite 1.13.0", + "pin-project", + "slab", + "smallvec", +] + [[package]] name = "futures-core" version = "0.3.30" @@ -1875,7 +2580,7 @@ checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.12.1", + "parking_lot 0.12.3", ] [[package]] @@ -1895,21 +2600,21 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "waker-fn", ] [[package]] name = "futures-lite" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "fastrand 2.0.1", + "fastrand 2.1.1", "futures-core", "futures-io", "parking", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", ] [[package]] @@ -1920,7 +2625,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -1937,9 +2642,9 @@ checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-timer" -version = "3.0.2" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" [[package]] name = "futures-util" @@ -1954,41 +2659,11 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "pin-utils", "slab", ] -[[package]] -name = "genawaiter" -version = "0.99.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86bd0361bcbde39b13475e6e36cb24c329964aa2611be285289d1e4b751c1a0" -dependencies = [ - "genawaiter-macro", - "genawaiter-proc-macro", - "proc-macro-hack", -] - -[[package]] -name = "genawaiter-macro" -version = "0.99.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b32dfe1fdfc0bbde1f22a5da25355514b5e450c33a6af6770884c8750aedfbc" - -[[package]] -name = "genawaiter-proc-macro" -version = "0.99.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784f84eebc366e15251c4a8c3acee82a6a6f427949776ecb88377362a9621738" -dependencies = [ - "proc-macro-error 0.4.12", - "proc-macro-hack", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "generator" version = "0.7.5" @@ -1997,7 +2672,7 @@ checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" dependencies = [ "cc", "libc", - "log 0.4.20", + "log", "rustversion", "windows 0.48.0", ] @@ -2014,17 +2689,16 @@ dependencies = [ [[package]] name = "geph-nat" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dd76f75cffdda5c89ebbb79e9e720e436733a723ab05cfa32f3518d04747f7d" +checksum = "4bb37bc660835accc0b3ade1f2078e88128d4e727f3c10b03b9a5a8921b06c0a" dependencies = [ - "async-net", "bytes", "easy-parallel", "fastrand 1.9.0", - "log 0.4.20", - "lru 0.7.8", - "parking_lot 0.12.1", + "log", + "lru", + "parking_lot 0.12.3", "pnet_packet 0.31.0", ] @@ -2037,23 +2711,23 @@ dependencies = [ "anyhow", "async-dup", "bincode", - "cached 0.23.0", + "cached", "concurrent-queue 1.2.4", "dnsclient", - "log 0.4.20", + "log", "once_cell", "serde", - "smol", + "smol 1.3.0", "smol-timeout", ] [[package]] name = "geph4-client" -version = "4.11.0" +version = "4.99.0-actuallyfive.14" dependencies = [ "acidjson", "anyhow", - "async-broadcast", + "async-broadcast 0.6.0", "async-compat", "async-dup", "async-h1", @@ -2061,12 +2735,13 @@ dependencies = [ "async-signal", "async-trait", "backoff", + "base32 0.5.1", "binary-search", "bincode", "blake3", "byteorder", "bytes", - "cached 0.23.0", + "cached", "cap", "chrono", "clone-macro", @@ -2074,10 +2749,10 @@ dependencies = [ "dashmap 5.5.3", "default-net", "derivative", - "dirs", + "dirs 3.0.2", "ed25519-dalek", "eff-wordlist", - "env_logger 0.9.3", + "env_logger", "event-listener 2.5.3", "fastrand 1.9.0", "flume 0.10.14", @@ -2086,129 +2761,258 @@ dependencies = [ "geph-nat", "geph4-aioutils", "geph4-protocol", - "gibbername", + "geph5-broker-protocol", + "geph5-client", "governor", "hex", - "http", + "http 0.2.12", "http-types", - "hyper 0.14.28", + "hyper 0.14.30", "im", "io-lifetimes", "ip_network_table-deps-treebitmap", + "isocountry", "itertools 0.10.5", "libc", - "log 0.4.20", - "melbootstrap", - "melprot", - "melstructs", - "mizaru", - "moka 0.11.3", + "log", + "mizaru", + "moka 0.11.3", + "nanorpc", + "native-tls", + "once_cell", + "oneshot", + "os_pipe", + "pad", + "panic-message", + "parking_lot 0.11.2", + "pin-project", + "pnet_packet 0.35.0", + "psl", + "rand 0.7.3", + "regex", + "rlimit", + "rsa-fdh", + "rusqlite", + "rustix 0.36.17", + "rustls 0.19.1", + "scopeguard", + "serde", + "serde_json", + "sha2 0.9.9", + "sharded-slab", + "shutdown_hooks", + "signal-hook", + "sillad", + "slab", + "smol 1.3.0", + "smol-timeout", + "smol_str 0.1.24", + "smolscale 0.4.11", + "socket2 0.3.19", + "socksv5 0.2.0", + "sqlx", + "stdcode", + "strip-ansi-escapes", + "strsim 0.10.0", + "structopt", + "tap", + "thiserror", + "tiny_http", + "tmelcrypt", + "tokio", + "tracing", + "tun 0.5.5", + "webpki-roots 0.21.1", + "whoami", + "winapi 0.3.9", + "x25519-dalek", +] + +[[package]] +name = "geph4-protocol" +version = "0.19.0-alpha.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91dc197242dd9018b9d3052261ff44ec3d86e85c097a0b5e9670c6f1d13662c4" +dependencies = [ + "acidjson", + "anyhow", + "arrayref", + "async-compat", + "async-net 1.8.0", + "async-trait", + "base64 0.13.1", + "bincode", + "blake3", + "bytes", + "chacha20poly1305 0.7.1", + "dashmap 5.5.3", + "ed25519-dalek", + "event-listener 2.5.3", + "fastrand 1.9.0", + "futures-util", + "geph4-aioutils", + "hex", + "log", + "mini-moka", + "mizaru", + "nanorpc", + "native-tls", + "once_cell", + "parking_lot 0.11.2", + "rand 0.8.5", + "regex", + "reqwest 0.11.27", + "rsa 0.3.0", + "rsa-fdh", + "serde", + "serde_json", + "serde_with 2.3.3", + "sha2 0.9.9", + "smol 1.3.0", + "smol-timeout", + "smol_str 0.1.24", + "smolscale 0.3.54", + "stdcode", + "strsim 0.10.0", + "tap", + "thiserror", + "tmelcrypt", + "x25519-dalek", +] + +[[package]] +name = "geph5-broker-protocol" +version = "0.2.0-alpha.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e4fea7931d1e9bd6a3f7550d9955f3e1b790dc12e6fd6472480f6fafdbd608" +dependencies = [ + "anyhow", + "async-trait", + "blake3", + "bytes", + "ed25519-dalek", + "isocountry", + "language-tags", + "mizaru2", + "nanorpc", + "serde", + "serde_json", + "serde_with 3.9.0", + "stdcode", + "thiserror", + "tracing", +] + +[[package]] +name = "geph5-client" +version = "0.2.0-alpha.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "481db239519ceed8617379aff97e18899b211f34b2c32e1bab3d465f3e517580" +dependencies = [ + "anyctx", + "anyhow", + "arc-writer", + "async-broadcast 0.7.1", + "async-compat", + "async-dup", + "async-trait", + "atomic_float", + "aws-config", + "aws-sdk-lambda", + "aws-smithy-runtime", + "blake3", + "blind-rsa-signatures", + "bytes", + "chrono", + "clap 4.5.17", + "clone-macro", + "crossbeam-queue", + "dashmap 6.1.0", + "dirs 5.0.1", + "ed25519-dalek", + "elevated-command", + "event-listener 5.3.1", + "futures-concurrency", + "futures-util", + "geph5-broker-protocol", + "geph5-misc-rpc", + "hex", + "http 1.1.0", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.24.2", + "hyper-util", + "ipstack-geph", + "isocountry", + "itertools 0.13.0", + "libc", + "mizaru2", + "moka 0.12.8", "nanorpc", - "native-tls", + "nanorpc-sillad", + "nursery_macro", "once_cell", "oneshot", - "os_pipe", - "pad", - "panic-message", - "parking_lot 0.11.2", + "parking_lot 0.12.3", + "picomux", "pin-project", - "pnet_packet 0.27.2", + "pnet_packet 0.35.0", "psl", - "rand 0.7.3", - "regex", - "rlimit", - "rsa-fdh", - "rusqlite", - "rustix 0.36.17", - "rustls", + "rand 0.8.5", + "reqwest 0.12.7", "scopeguard", "serde", "serde_json", - "sha2 0.9.9", - "sharded-slab", - "shutdown_hooks", - "signal-hook", - "slab", - "smol", - "smol-timeout", - "smol_str", - "smolscale 0.4.4", - "socket2 0.3.19", - "socksv5", - "sosistab2", - "sosistab2-obfstls", - "sosistab2-obfsudp", + "serde_yaml", + "sillad", + "sillad-sosistab3", + "simple-dns", + "smol 2.0.1", + "smol-timeout2", + "smol_str 0.2.2", + "smolscale 0.4.11", + "socksv5 0.3.1", "sqlx", "stdcode", - "strip-ansi-escapes", - "strsim 0.10.0", - "structopt", + "tachyonix", "tap", "thiserror", - "tiny_http", - "tmelcrypt", "tokio", + "tower-service", "tracing", - "tun", - "webpki-roots", - "whoami", + "tracing-subscriber", + "tun 0.6.1", "winapi 0.3.9", "x25519-dalek", ] [[package]] -name = "geph4-protocol" -version = "0.18.0" +name = "geph5-misc-rpc" +version = "0.2.0-alpha.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d521f0d73efa70562214f2116770bcb2b7ae2617a038178a89811a399b744f3f" +checksum = "28a44fc6c21f9864d656d51b77777565a5bc47015f481e931aaebe9771d555fc" dependencies = [ - "acidjson", "anyhow", - "arrayref", - "async-compat", - "async-net", + "async-task", "async-trait", - "base64 0.13.1", - "bincode", + "bipe", "blake3", "bytes", - "chacha20poly1305", - "dashmap 5.5.3", + "chacha20poly1305 0.10.1", "ed25519-dalek", - "event-listener 2.5.3", - "fastrand 1.9.0", "futures-util", - "geph4-aioutils", - "gibbername", - "hex", - "log 0.4.20", - "melbootstrap", - "melprot", - "melstructs", - "mini-moka", - "mizaru", "nanorpc", - "native-tls", - "once_cell", - "parking_lot 0.11.2", - "rand 0.7.3", - "regex", - "reqwest", - "rsa", - "rsa-fdh", + "pin-project", "serde", "serde_json", - "serde_with 2.3.3", - "sha2 0.9.9", - "smol", - "smol-timeout", - "smol_str", - "smolscale 0.3.54", + "sillad", + "smallvec", + "smolscale 0.4.11", + "socksv5 0.3.1", "stdcode", - "strsim 0.10.0", + "tachyonix", "tap", "thiserror", - "tmelcrypt", "x25519-dalek", ] @@ -2225,9 +3029,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.12" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2246,44 +3050,11 @@ dependencies = [ "polyval", ] -[[package]] -name = "gibbercode" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5e1e98529e21c93a87a3983ea57464933a08358709185b486d193423cb2a4c" -dependencies = [ - "itertools 0.10.5", -] - -[[package]] -name = "gibbername" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7eccfc3aaf1673633ecbc3594777c55c3189b67374f7e94920a03c3fc7a61c" -dependencies = [ - "anyhow", - "env_logger 0.10.2", - "futures-util", - "gibbercode", - "hex", - "log 0.4.20", - "melprot", - "melstructs", - "stdcode", - "tmelcrypt", -] - [[package]] name = "gimli" -version = "0.28.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" - -[[package]] -name = "glob" -version = "0.2.11" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be18de09a56b60ed0edf84bc9df007e30040691af7acd1c41874faac5895bfb" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "glob" @@ -2322,17 +3093,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.24" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ "bytes", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap 2.1.0", + "http 0.2.12", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -2346,7 +3117,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e91b62f79061a0bc2e046024cb7ba44b08419ed238ecbd9adbd787434b9e8c25" dependencies = [ "ahash 0.3.8", - "autocfg 1.1.0", + "autocfg 1.3.0", ] [[package]] @@ -2355,28 +3126,22 @@ version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" - [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", ] [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.11", "allocator-api2", ] @@ -2386,7 +3151,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.3", + "hashbrown 0.14.5", ] [[package]] @@ -2407,6 +3172,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.1.19" @@ -2418,9 +3189,15 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.3.4" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" [[package]] name = "hex" @@ -2435,7 +3212,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f" dependencies = [ "digest 0.9.0", - "hmac", + "hmac 0.10.1", +] + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac 0.12.1", ] [[package]] @@ -2449,22 +3235,57 @@ dependencies = [ ] [[package]] -name = "honggfuzz" -version = "0.5.55" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "848e9c511092e0daa0a35a63e8e6e475a3e8f870741448b9f6028d69b142f18e" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "arbitrary", - "lazy_static", - "memmap2", - "rustc_version 0.4.0", + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha256" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3688e69b38018fec1557254f64c8dc2cc8ec502890182f395dbb0aa997aa5735" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "hmac-sha512" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ce1f4656bae589a3fab938f9f09bf58645b7ed01a2c5f8a3c238e01a4ef78a" +dependencies = [ + "digest 0.10.7", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", ] [[package]] name = "http" -version = "0.2.11" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -2478,31 +3299,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", - "pin-project-lite 0.2.13", + "http 0.2.12", + "pin-project-lite 0.2.14", ] [[package]] name = "http-body" -version = "1.0.0-rc.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "951dfc2e32ac02d67c90c0d65bd27009a635dc9b381a2cc7d284ab01e3a0150d" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http", + "http 1.1.0", ] [[package]] name = "http-body-util" -version = "0.1.0-rc.2" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92445bc9cc14bfa0a3ce56817dc3b5bcc227a168781a356b702410789cec0d10" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http", - "http-body 1.0.0-rc.2", - "pin-project-lite 0.2.13", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite 0.2.14", ] [[package]] @@ -2518,7 +3339,7 @@ dependencies = [ "cookie", "futures-lite 1.13.0", "infer", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "rand 0.7.3", "serde", "serde_json", @@ -2529,9 +3350,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "httpdate" @@ -2547,22 +3368,22 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.28" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ "bytes", "futures-channel", "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body 0.4.6", "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.13", - "socket2 0.5.5", + "pin-project-lite 0.2.14", + "socket2 0.5.7", "tokio", "tower-service", "tracing", @@ -2571,25 +3392,59 @@ dependencies = [ [[package]] name = "hyper" -version = "1.0.0-rc.2" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "289cfdbf735dea222b0ec6a10224b4d9552c7662bb451d4589cbfda3d407d1a3" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", - "http", - "http-body 1.0.0-rc.2", + "http 1.1.0", + "http-body 1.0.1", "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", + "smallvec", "tokio", - "tracing", "want", ] +[[package]] +name = "hyper-rustls" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" +dependencies = [ + "futures-util", + "http 0.2.12", + "hyper 0.14.30", + "log", + "rustls 0.21.12", + "rustls-native-certs", + "tokio", + "tokio-rustls 0.24.1", + "webpki-roots 0.25.4", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.12", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", + "webpki-roots 0.26.5", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -2597,24 +3452,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.28", + "hyper 0.14.30", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-util" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite 0.2.14", + "socket2 0.5.7", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -2664,19 +3539,20 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "autocfg 1.1.0", + "autocfg 1.3.0", "hashbrown 0.12.3", "serde", ] [[package]] name = "indexmap" -version = "2.1.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", + "serde", ] [[package]] @@ -2685,11 +3561,20 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if 1.0.0", ] @@ -2700,7 +3585,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.4", + "hermit-abi 0.3.9", "libc", "windows-sys 0.48.0", ] @@ -2711,6 +3596,12 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c429fffa658f288669529fc26565f728489a2e39bc7b24a428aaaf51355182e" +[[package]] +name = "ioctl-sys" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd11f3a29434026f5ff98c730b668ba74b1033637b8817940b54d040696133c" + [[package]] name = "ip_network_table-deps-treebitmap" version = "0.5.0" @@ -2724,54 +3615,72 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] -name = "is-terminal" -version = "0.4.10" +name = "ipstack-geph" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455" +checksum = "195c1535c7465e387c13f84b03ac1552ce30fedccc25c908d8dacac14b7dfdbd" dependencies = [ - "hermit-abi 0.3.4", - "rustix 0.38.30", - "windows-sys 0.52.0", + "ahash 0.8.11", + "anyhow", + "async-channel 2.3.1", + "async-executor", + "async-io 2.3.4", + "bytes", + "etherparse", + "futures-lite 2.3.0", + "log", + "parking_lot 0.12.3", + "pollster", + "rand 0.8.5", + "smol-timeout", + "thiserror", ] [[package]] -name = "itertools" -version = "0.10.5" +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "isocountry" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea1dc4bf0fb4904ba83ffdb98af3d9c325274e92e6e295e4151e86c96363e04" dependencies = [ - "either", + "serde", + "thiserror", ] [[package]] name = "itertools" -version = "0.11.0" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itertools" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.67" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2792,23 +3701,42 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" dependencies = [ - "log 0.4.20", + "log", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" +dependencies = [ + "serde", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.5.2", + "spin 0.9.8", ] [[package]] name = "libc" -version = "0.2.152" +version = "0.2.158" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" + +[[package]] +name = "libloading" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if 1.0.0", + "windows-targets 0.52.6", +] [[package]] name = "libm" @@ -2818,13 +3746,12 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" [[package]] name = "libredox" -version = "0.0.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "libc", - "redox_syscall 0.4.1", ] [[package]] @@ -2852,35 +3779,26 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" [[package]] name = "linux-raw-sys" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" -dependencies = [ - "autocfg 1.1.0", - "scopeguard", - "serde", -] - -[[package]] -name = "log" -version = "0.3.9" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ - "log 0.4.20", + "autocfg 1.3.0", + "scopeguard", + "serde", ] [[package]] name = "log" -version = "0.4.20" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" dependencies = [ "value-bag", ] @@ -2893,7 +3811,6 @@ checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" dependencies = [ "cfg-if 1.0.0", "generator", - "pin-utils", "scoped-tls", "tracing", "tracing-subscriber", @@ -2908,24 +3825,6 @@ dependencies = [ "hashbrown 0.12.3", ] -[[package]] -name = "lru" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7" -dependencies = [ - "hashbrown 0.14.3", -] - -[[package]] -name = "lz4_flex" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a8cbbb2831780bc3b9c15a41f5b49222ef756b6730a95f3decfdd15903eb5a3" -dependencies = [ - "twox-hash", -] - [[package]] name = "mach2" version = "0.4.2" @@ -2945,99 +3844,13 @@ dependencies = [ ] [[package]] -name = "melbootstrap" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24368d3e4b6a4eb2a40767a3d0f72a7d9f4d8f2f1f0fbe5d406f7b52214c668a" -dependencies = [ - "melstructs", - "once_cell", -] - -[[package]] -name = "melnet2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd09e9b3476e3fceea47f1d93b9c68c45b947d47695ad3f779570ed994e4fc9" -dependencies = [ - "anyhow", - "async-trait", - "concurrent-queue 1.2.4", - "dashmap 5.5.3", - "fastrand 1.9.0", - "futures-util", - "itertools 0.10.5", - "log 0.4.20", - "lz4_flex", - "moka 0.9.9", - "nanorpc", - "nanorpc-http", - "pin-project", - "reusable-box-future", - "serde", - "serde_json", - "smol", - "smol-timeout", - "smol_str", - "smolscale 0.3.54", - "thiserror", -] - -[[package]] -name = "melprot" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d450ed39b4f3cfa6640695d40f80d52d1ad3807a8516c24222d3cc227850fcd" -dependencies = [ - "anyhow", - "arrayref", - "async-recursion", - "async-trait", - "bytes", - "derivative", - "futures-util", - "hex", - "log 0.4.20", - "lru 0.7.8", - "melbootstrap", - "melnet2", - "melstructs", - "mini-moka", - "nanorpc", - "novasmt", - "once_cell", - "parking_lot 0.12.1", - "rustc-hash", - "serde", - "serde_json", - "smol", - "smol_str", - "smolscale 0.3.54", - "stdcode", - "thiserror", - "tmelcrypt", -] - -[[package]] -name = "melstructs" -version = "0.3.2" +name = "md-5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0daeea135fc23ad021124895bd92069b3f8cec13f45cb14b60e3387ea079f877" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ - "bytes", - "derivative", - "derive_more", - "hex", - "num", - "num_enum", - "parse-display", - "serde", - "serde_repr", - "serde_with 1.14.0", - "stdcode", - "tap", - "thiserror", - "tmelcrypt", + "cfg-if 1.0.0", + "digest 0.10.7", ] [[package]] @@ -3048,18 +3861,9 @@ checksum = "df39d232f5c40b0891c10216992c2f250c054105cb1e56f0fc9032db6203ecc1" [[package]] name = "memchr" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" - -[[package]] -name = "memmap2" -version = "0.5.10" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" -dependencies = [ - "libc", -] +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "mime" @@ -3090,22 +3894,23 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", ] [[package]] name = "mio" -version = "0.8.10" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ + "hermit-abi 0.3.9", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -3119,33 +3924,25 @@ dependencies = [ "im", "rand 0.7.3", "rayon", - "rsa", + "rsa 0.3.0", "rsa-fdh", "serde", "sha2 0.9.9", ] [[package]] -name = "moka" -version = "0.9.9" +name = "mizaru2" +version = "0.2.0-alpha.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b28455ac4363046076054a7e9cfbd7f168019c29dba32a625f59fc0aeffaaea4" +checksum = "f166eaaf47cc58bedfe148cd1bcccd106e6049937e4462fd0fa16fe1c6cae8ab" dependencies = [ - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "num_cpus", - "once_cell", - "parking_lot 0.12.1", - "quanta 0.11.1", - "rustc_version 0.4.0", - "scheduled-thread-pool", - "skeptic", - "smallvec", - "tagptr", - "thiserror", - "triomphe", - "uuid", + "anyhow", + "blake3", + "blind-rsa-signatures", + "rand 0.8.5", + "rayon", + "serde", + "stdcode", ] [[package]] @@ -3158,9 +3955,9 @@ dependencies = [ "crossbeam-epoch", "crossbeam-utils", "once_cell", - "parking_lot 0.12.1", + "parking_lot 0.12.3", "quanta 0.11.1", - "rustc_version 0.4.0", + "rustc_version 0.4.1", "scheduled-thread-pool", "skeptic", "smallvec", @@ -3172,18 +3969,21 @@ dependencies = [ [[package]] name = "moka" -version = "0.12.3" +version = "0.12.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cebde309854872ea4fcaf4d7c870ad8d5873091c6bfb7ce91fd08ea648f20b0" +checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" dependencies = [ + "async-lock 3.4.0", + "async-trait", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", + "event-listener 5.3.1", + "futures-util", "once_cell", - "parking_lot 0.12.1", - "quanta 0.12.2", - "rustc_version 0.4.0", - "skeptic", + "parking_lot 0.12.3", + "quanta 0.12.3", + "rustc_version 0.4.1", "smallvec", "tagptr", "thiserror", @@ -3197,20 +3997,20 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.15", ] [[package]] name = "nanorpc" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81076363e771721de9b7afffdce190cfcbdeed60bd2ce5544ddf00c25d9cfb87" +checksum = "baf7684b542253563f27f68c2e8b96ce5f75b415470c2df84c083835d164cd9a" dependencies = [ "anyhow", "async-trait", "fastrand 1.9.0", "futures-lite 1.13.0", - "log 0.4.20", + "log", "nanorpc-derive", "serde", "serde_json", @@ -3219,41 +4019,38 @@ dependencies = [ [[package]] name = "nanorpc-derive" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5018dd1f05b88bb28d0bbc0705a5c837477894f1f31c6112a6a90db5d133b030" +checksum = "4b4cb53e6d3fa8590c3eda65e7c587c39ea9f43f8e34dde9bb269585ba0d4227" dependencies = [ "quote", "syn 1.0.109", ] [[package]] -name = "nanorpc-http" -version = "0.1.3" +name = "nanorpc-sillad" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6079fc9126cc8578a34f8533d5c82024af3218021b5cfb8509fe767ba2af3a95" +checksum = "5ec964bfdd2969ec140b474e4d7f0cb48d6341b3798c9753526311743ec7a1bb" dependencies = [ "anyhow", - "async-compat", + "async-executor", "async-trait", - "bytes", - "concurrent-queue 2.4.0", - "http-body-util", - "hyper 1.0.0-rc.2", + "futures-util", "nanorpc", "serde_json", - "smol", + "sillad", + "thiserror", ] [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", - "log 0.4.20", + "log", "openssl", "openssl-probe", "openssl-sys", @@ -3263,17 +4060,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.4.2", - "cfg-if 1.0.0", - "libc", -] - [[package]] name = "no-std-compat" version = "0.4.1" @@ -3305,32 +4091,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44a1290799eababa63ea60af0cbc3f03363e328e58f32fb0294798ed3e85f444" -[[package]] -name = "novasmt" -version = "0.2.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ebb8938a493ec608abc6ab8d49155f6a29bf8b6e0af51dd827b2716dc6af0a0" -dependencies = [ - "arrayref", - "backtrace 0.3.69", - "bitvec 0.20.4", - "blake3", - "bytes", - "dashmap 4.0.2", - "env_logger 0.9.3", - "ethnum", - "genawaiter", - "hex", - "honggfuzz", - "itertools 0.10.5", - "log 0.4.20", - "lru 0.7.8", - "rayon", - "replace_with", - "rustc-hash", - "serde", -] - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -3341,38 +4101,13 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "num" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" -dependencies = [ - "num-bigint 0.4.4", - "num-complex", - "num-integer", - "num-iter", - "num-rational", - "num-traits", -] - [[package]] name = "num-bigint" version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] - -[[package]] -name = "num-bigint" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" -dependencies = [ - "autocfg 1.1.0", + "autocfg 1.3.0", "num-integer", "num-traits", ] @@ -3397,54 +4132,57 @@ dependencies = [ ] [[package]] -name = "num-complex" -version = "0.4.4" +name = "num-bigint-dig" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", "num-traits", + "rand 0.8.5", + "serde", + "smallvec", + "zeroize", ] [[package]] -name = "num-integer" -version = "0.1.45" +name = "num-conv" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg 1.1.0", - "num-traits", -] +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" [[package]] -name = "num-iter" -version = "0.1.43" +name = "num-integer" +version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "autocfg 1.1.0", - "num-integer", "num-traits", ] [[package]] -name = "num-rational" -version = "0.4.1" +name = "num-iter" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" dependencies = [ - "autocfg 1.1.0", - "num-bigint 0.4.4", + "autocfg 1.3.0", "num-integer", "num-traits", ] [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ - "autocfg 1.1.0", + "autocfg 1.3.0", + "libm", ] [[package]] @@ -3453,36 +4191,24 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.4", + "hermit-abi 0.3.9", "libc", ] [[package]] -name = "num_enum" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.11" +name = "nursery_macro" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "791111c4315a831f9ed62c9acd795be7557185c126ef188823298ed81390dc53" dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", + "smol 1.3.0", ] [[package]] name = "object" -version = "0.32.2" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -3495,26 +4221,23 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oneshot" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f6640c6bda7731b1fdbab747981a0f896dd1fedaf9f4a53fa237a04a84431f4" -dependencies = [ - "loom", -] +checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.63" +version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "cfg-if 1.0.0", "foreign-types", "libc", @@ -3531,7 +4254,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -3542,18 +4265,18 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.2.1+3.2.0" +version = "300.3.2+3.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fe476c29791a5ca0d1273c697e96085bbabbbea2ef7afd5617e78a4b40332d3" +checksum = "a211a18d945ef7e648cc6e0058f4c548ee46aab922ea203e0d30e966ea23647b" dependencies = [ "cc", ] [[package]] name = "openssl-sys" -version = "0.9.99" +version = "0.9.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" dependencies = [ "cc", "libc", @@ -3562,16 +4285,28 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + [[package]] name = "os_pipe" -version = "1.1.5" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57119c3b893986491ec9aa85056780d3a0f3cf4da7cc09dd3650dbd6c6738fb9" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] +[[package]] +name = "outref" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" + [[package]] name = "overload" version = "0.1.1" @@ -3612,12 +4347,12 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", - "parking_lot_core 0.9.9", + "parking_lot_core 0.9.10", ] [[package]] @@ -3636,84 +4371,115 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if 1.0.0", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.3", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] -name = "parse-display" -version = "0.5.5" +name = "paste" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "813e91c6232dbeb2e9deba0eb0dc5c967bd6f380676fd34419f9ddd71411faa7" -dependencies = [ - "once_cell", - "parse-display-derive", - "regex", -] +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] -name = "parse-display-derive" -version = "0.5.5" +name = "pem" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "007ed61a69cf7d9b95cc5dc18489dbb4f70d4adb0a0c100e2dd46f0be241711a" +checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" dependencies = [ + "base64 0.13.1", "once_cell", - "proc-macro2", - "quote", "regex", - "regex-syntax 0.6.29", - "structmeta", - "syn 1.0.109", ] [[package]] -name = "paste" -version = "1.0.14" +name = "pem-rfc7468" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] [[package]] -name = "pem" -version = "0.8.3" +name = "pem-rfc7468" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" dependencies = [ - "base64 0.13.1", - "once_cell", - "regex", + "base64ct", ] [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "picomux" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2396208dc7e80ebf2216b21b4b8bff8d647db5cca8365a76165397d8c03b440" +dependencies = [ + "ahash 0.8.11", + "anyhow", + "async-channel 2.3.1", + "async-dup", + "async-event", + "async-io 2.3.4", + "async-task", + "async_io_stream", + "bipe", + "bytemuck", + "bytes", + "dashmap 6.1.0", + "fastrand 2.1.1", + "futures-intrusive 0.5.0", + "futures-lite 2.3.0", + "futures-util", + "oneshot", + "parking_lot 0.12.3", + "pin-project", + "rand 0.8.5", + "recycle-box", + "scopeguard", + "serde", + "serde_json", + "sillad", + "smol-timeout", + "smolscale 0.4.11", + "tachyonix", + "tap", + "tracing", + "tracing-test", +] [[package]] name = "pin-project" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.3" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -3724,9 +4490,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -3736,26 +4502,63 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.1" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.0.1", + "fastrand 2.1.1", "futures-io", ] [[package]] -name = "pkg-config" -version = "0.3.29" +name = "pkcs1" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" +dependencies = [ + "der 0.6.1", + "pkcs8 0.9.0", + "spki 0.6.0", + "zeroize", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.9", + "pkcs8 0.10.2", + "spki 0.7.3", +] [[package]] -name = "pnet_base" -version = "0.27.2" +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", +] + +[[package]] +name = "pkg-config" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e4688aa497ef62129f302a5800ebde67825f8ff129f43690ca84099f6620bed" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "pnet_base" @@ -3767,14 +4570,12 @@ dependencies = [ ] [[package]] -name = "pnet_macros" -version = "0.27.2" +name = "pnet_base" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d894a90dbdbe976e624453fc31b1912f658083778329442dda1cca94f76a3e76" +checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7" dependencies = [ - "regex", - "syntex", - "syntex_syntax", + "no-std-net", ] [[package]] @@ -3790,12 +4591,15 @@ dependencies = [ ] [[package]] -name = "pnet_macros_support" -version = "0.27.2" +name = "pnet_macros" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b99269a458570bc06a9132254349f6543d9abc92e88b68d8de934aac9481f6c" +checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863" dependencies = [ - "pnet_base 0.27.2", + "proc-macro2", + "quote", + "regex", + "syn 2.0.77", ] [[package]] @@ -3808,16 +4612,12 @@ dependencies = [ ] [[package]] -name = "pnet_packet" -version = "0.27.2" +name = "pnet_macros_support" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33f8238f4eb897a55ca06510cd71afb5b5ca7b4ff2d7188f1ca855fc1710133e" +checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab" dependencies = [ - "glob 0.2.11", - "pnet_base 0.27.2", - "pnet_macros 0.27.2", - "pnet_macros_support 0.27.2", - "syntex", + "pnet_base 0.35.0", ] [[package]] @@ -3826,42 +4626,61 @@ version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc3b5111e697c39c8b9795b9fdccbc301ab696699e88b9ea5a4e4628978f495f" dependencies = [ - "glob 0.3.1", + "glob", "pnet_base 0.31.0", "pnet_macros 0.31.0", "pnet_macros_support 0.31.0", ] +[[package]] +name = "pnet_packet" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f" +dependencies = [ + "glob", + "pnet_base 0.35.0", + "pnet_macros 0.35.0", + "pnet_macros_support 0.35.0", +] + [[package]] name = "polling" version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ - "autocfg 1.1.0", + "autocfg 1.3.0", "bitflags 1.3.2", "cfg-if 1.0.0", - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "libc", - "log 0.4.20", - "pin-project-lite 0.2.13", + "log", + "pin-project-lite 0.2.14", "windows-sys 0.48.0", ] [[package]] name = "polling" -version = "3.3.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if 1.0.0", - "concurrent-queue 2.4.0", - "pin-project-lite 0.2.13", - "rustix 0.38.30", + "concurrent-queue 2.5.0", + "hermit-abi 0.4.0", + "pin-project-lite 0.2.14", + "rustix 0.38.35", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + [[package]] name = "poly1305" version = "0.6.2" @@ -3869,7 +4688,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b7456bc1ad2d4cf82b3a016be4c2ac48daf11bf990c1603ebd447fe6f30fca8" dependencies = [ "cpuid-bool", - "universal-hash", + "universal-hash 0.4.0", +] + +[[package]] +name = "poly1305" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf" +dependencies = [ + "cpufeatures", + "opaque-debug", + "universal-hash 0.5.1", ] [[package]] @@ -3880,7 +4710,7 @@ checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd" dependencies = [ "cpuid-bool", "opaque-debug", - "universal-hash", + "universal-hash 0.4.0", ] [[package]] @@ -3891,51 +4721,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "priority-queue" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff39edfcaec0d64e8d0da38564fad195d2d51b680940295fcc307366e101e61" -dependencies = [ - "autocfg 1.1.0", - "indexmap 1.9.3", -] - -[[package]] -name = "probability" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42746b805e424b759d46c22c65dc66ccca057a2db96e9db4fda6c337a287e485" -dependencies = [ - "random", - "special", -] - -[[package]] -name = "proc-macro-crate" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" -dependencies = [ - "once_cell", - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "0.4.12" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18f33027081eba0a6d8aba6d1b1c3a3be58cbb12106341c2d5759fcd9b5277e7" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "proc-macro-error-attr 0.4.12", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", + "zerocopy", ] [[package]] @@ -3944,23 +4734,10 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" dependencies = [ - "proc-macro-error-attr 1.0.4", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a5b4b77fdb63c1eca72173d68d24501c54ab1269409f6b672c85deb18af69de" -dependencies = [ + "proc-macro-error-attr", "proc-macro2", "quote", "syn 1.0.109", - "syn-mid", "version_check", ] @@ -3983,18 +4760,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.76" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] [[package]] name = "psl" -version = "2.1.14" +version = "2.1.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "383703acfc34f7a00724846c14dc5ea4407c59e5aedcbbb18a1c0c1a23fe5013" +checksum = "ce9398ad066421139b2e3afe16ea46772ffda30bd9ba57554dc035df5e26edc8" dependencies = [ "psl-types", ] @@ -4007,11 +4784,11 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" [[package]] name = "pulldown-cmark" -version = "0.9.3" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "memchr", "unicase", ] @@ -4044,59 +4821,82 @@ dependencies = [ [[package]] name = "quanta" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ca0b7bac0b97248c40bb77288fc52029cf1459c0461ea1b05ee32ccf011de2c" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" dependencies = [ "crossbeam-utils", "libc", "once_cell", - "raw-cpuid 11.0.1", + "raw-cpuid 11.1.0", "wasi 0.11.0+wasi-snapshot-preview1", "web-sys", "winapi 0.3.9", ] [[package]] -name = "quote" -version = "1.0.35" +name = "quinn" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" dependencies = [ - "proc-macro2", + "bytes", + "pin-project-lite 0.2.14", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls 0.23.12", + "socket2 0.5.7", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "radium" -version = "0.6.2" +name = "quinn-proto" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "643f8f41a8ebc4c5dc4515c82bb8abd397b527fc20fd681b7c011c2aee5d44fb" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash 2.0.0", + "rustls 0.23.12", + "slab", + "thiserror", + "tinyvec", + "tracing", +] [[package]] -name = "radium" -version = "0.7.0" +name = "quinn-udp" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] [[package]] -name = "rand" -version = "0.6.5" +name = "quote" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc 0.1.0", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi 0.3.9", + "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.7.3" @@ -4107,7 +4907,7 @@ dependencies = [ "libc", "rand_chacha 0.2.2", "rand_core 0.5.1", - "rand_hc 0.2.0", + "rand_hc", ] [[package]] @@ -4121,16 +4921,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand_chacha" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", -] - [[package]] name = "rand_chacha" version = "0.2.2" @@ -4151,21 +4941,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "rand_core" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" -dependencies = [ - "rand_core 0.4.2", -] - -[[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - [[package]] name = "rand_core" version = "0.5.1" @@ -4181,16 +4956,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.12", -] - -[[package]] -name = "rand_hc" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" -dependencies = [ - "rand_core 0.3.1", + "getrandom 0.2.15", ] [[package]] @@ -4202,59 +4968,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "rand_isaac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" -dependencies = [ - "rand_core 0.3.1", -] - -[[package]] -name = "rand_jitter" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" -dependencies = [ - "libc", - "rand_core 0.4.2", - "winapi 0.3.9", -] - -[[package]] -name = "rand_os" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" -dependencies = [ - "cloudabi", - "fuchsia-cprng", - "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.9", -] - -[[package]] -name = "rand_pcg" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" -dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", -] - -[[package]] -name = "rand_xorshift" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "rand_xoshiro" version = "0.6.0" @@ -4264,12 +4977,6 @@ dependencies = [ "rand_core 0.6.4", ] -[[package]] -name = "random" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "474c42c904f04dfe2a595a02f71e1a0e5e92ffb5761cc9a4c02140b93b8dd504" - [[package]] name = "raw-cpuid" version = "10.7.0" @@ -4281,18 +4988,18 @@ dependencies = [ [[package]] name = "raw-cpuid" -version = "11.0.1" +version = "11.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1" +checksum = "cb9ee317cfe3fbd54b36a511efc1edd42e216903c9cd575e686dd68a2ba90d8d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", ] [[package]] name = "rayon" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" dependencies = [ "either", "rayon-core", @@ -4308,15 +5015,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "rdrand" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] - [[package]] name = "recycle-box" version = "0.2.0" @@ -4334,47 +5032,34 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.4.1" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" -dependencies = [ - "getrandom 0.2.12", - "libredox", - "thiserror", -] - -[[package]] -name = "reed-solomon-erasure" -version = "6.0.0" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7263373d500d4d4f505d43a2a662d475a894aa94503a1ee28e9188b5f3960d4f" -dependencies = [ - "libm", - "lru 0.7.8", - "parking_lot 0.11.2", - "smallvec", - "spin 0.9.8", +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -4388,49 +5073,38 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax 0.8.4", ] [[package]] -name = "regex-syntax" -version = "0.6.29" +name = "regex-lite" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" [[package]] name = "regex-syntax" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" - -[[package]] -name = "replace_with" -version = "0.1.7" +version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a8614ee435691de62bcffcf4a66d91b3594bf1428a5722e79103249a095690" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] -name = "replay_filter" -version = "0.1.2" +name = "regex-syntax" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e92f12b45df65374163d6bf4327abd0e8c3d2e198bebfbd5f53c13edaeb900ea" -dependencies = [ - "bitvec 1.0.1", - "honggfuzz", - "log 0.4.20", -] +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "reqwest" -version = "0.11.23" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ "base64 0.21.7", "bytes", @@ -4438,21 +5112,23 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.28", + "hyper 0.14.30", "hyper-tls", "ipnet", "js-sys", - "log 0.4.20", + "log", "mime", "native-tls", "once_cell", "percent-encoding", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", + "rustls-pemfile 1.0.4", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper 0.1.2", "system-configuration", "tokio", "tokio-native-tls", @@ -4465,10 +5141,46 @@ dependencies = [ ] [[package]] -name = "reusable-box-future" -version = "0.2.0" +name = "reqwest" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e0e61cd21fbddd85fbd9367b775660a01d388c08a61c6d2824af480b0309bb9" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite 0.2.14", + "quinn", + "rustls 0.23.12", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "webpki-roots 0.26.5", + "windows-registry", +] [[package]] name = "ring" @@ -4487,16 +5199,17 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.7" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", - "getrandom 0.2.12", + "cfg-if 1.0.0", + "getrandom 0.2.15", "libc", "spin 0.9.8", "untrusted 0.9.0", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -4517,7 +5230,7 @@ dependencies = [ "byteorder", "digest 0.9.0", "lazy_static", - "num-bigint-dig", + "num-bigint-dig 0.6.1", "num-integer", "num-iter", "num-traits", @@ -4531,6 +5244,47 @@ dependencies = [ "zeroize", ] +[[package]] +name = "rsa" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a77d189da1fee555ad95b7e50e7457d91c0e089ec68ca69ad2989413bbdab4" +dependencies = [ + "byteorder", + "digest 0.10.7", + "num-bigint-dig 0.8.4", + "num-integer", + "num-iter", + "num-traits", + "pkcs1 0.4.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "serde", + "signature", + "subtle", + "zeroize", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig 0.8.4", + "num-integer", + "num-traits", + "pkcs1 0.7.5", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "signature", + "spki 0.7.3", + "subtle", + "zeroize", +] + [[package]] name = "rsa-fdh" version = "0.5.0" @@ -4539,20 +5293,29 @@ checksum = "0694e7d9d4af4d6ec8b9d14e40c9aca67fba667275b5413dda5e69ba84516aa3" dependencies = [ "digest 0.9.0", "fdh", - "num-bigint-dig", + "num-bigint-dig 0.6.1", "rand 0.7.3", - "rsa", + "rsa 0.3.0", "subtle", "thiserror", ] +[[package]] +name = "rtrb" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99e704dd104faf2326a320140f70f0b736d607c1caa1b1748a6c568a79819109" +dependencies = [ + "cache-padded", +] + [[package]] name = "rusqlite" version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -4562,9 +5325,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -4573,10 +5336,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] -name = "rustc-serialize" -version = "0.3.25" +name = "rustc-hash" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe834bc780604f4674073badbad26d7219cadfb4a2275802db12cbae17498401" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" @@ -4589,11 +5352,11 @@ dependencies = [ [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.21", + "semver 1.0.23", ] [[package]] @@ -4626,14 +5389,14 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.30" +version = "0.38.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" +checksum = "a85d50532239da68e9addb745ba38ff4612a242c1c7ceea689c4bc7c2f43c36f" dependencies = [ - "bitflags 2.4.2", + "bitflags 2.6.0", "errno", "libc", - "linux-raw-sys 0.4.13", + "linux-raw-sys 0.4.14", "windows-sys 0.52.0", ] @@ -4644,23 +5407,107 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" dependencies = [ "base64 0.13.1", - "log 0.4.20", + "log", "ring 0.16.20", - "sct", + "sct 0.6.1", "webpki", ] +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct 0.7.1", +] + +[[package]] +name = "rustls" +version = "0.23.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +dependencies = [ + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.7", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.16" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -4686,7 +5533,7 @@ version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3cbc66816425a074528352f5789333ecff06ca41b36b0b0efdfbb29edc391a19" dependencies = [ - "parking_lot 0.12.1", + "parking_lot 0.12.3", ] [[package]] @@ -4711,6 +5558,16 @@ dependencies = [ "untrusted 0.7.1", ] +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + [[package]] name = "secret_integers" version = "0.1.7" @@ -4719,11 +5576,11 @@ checksum = "6267ec5e8c6409b7616e40fbcda431c016271d245e93aa850ffda8f5e1bfa36f" [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation", "core-foundation-sys", "libc", @@ -4732,9 +5589,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" dependencies = [ "core-foundation-sys", "libc", @@ -4751,9 +5608,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.21" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] @@ -4766,9 +5623,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.195" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] @@ -4782,33 +5639,25 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_bytes" -version = "0.11.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" -dependencies = [ - "serde", -] - [[package]] name = "serde_derive" -version = "1.0.195" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.111" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa", + "memchr", "ryu", "serde", ] @@ -4824,17 +5673,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "serde_repr" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.48", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -4870,7 +5708,25 @@ dependencies = [ "serde", "serde_json", "serde_with_macros 2.3.3", - "time 0.3.31", + "time 0.3.36", +] + +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.5.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.9.0", + "time 0.3.36", ] [[package]] @@ -4891,10 +5747,35 @@ version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "881b6f881b17d13214e5d494c939ebab463d01264ce1811e9d4ac3a882e7695f" dependencies = [ - "darling 0.20.3", + "darling 0.20.10", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", +] + +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.77", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.5.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", ] [[package]] @@ -4906,11 +5787,22 @@ dependencies = [ "sha1_smol", ] +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest 0.10.7", +] + [[package]] name = "sha1_smol" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" [[package]] name = "sha2" @@ -4945,6 +5837,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "shutdown_hooks" version = "0.1.0" @@ -4963,18 +5861,80 @@ dependencies = [ [[package]] name = "signal-hook-registry" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" dependencies = [ "libc", ] [[package]] name = "signature" -version = "1.6.4" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "sillad" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019be3d215864f13b76226f0599d91759447ced3b6c91268d6998f044470b58e" +dependencies = [ + "anyhow", + "async-io 2.3.4", + "async-trait", + "futures-concurrency", + "futures-lite 2.3.0", + "futures-util", + "libc", + "pin-project", + "rand 0.8.5", + "smol-timeout", + "tracing", +] + +[[package]] +name = "sillad-sosistab3" +version = "0.2.0-alpha.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec1eb72fadec7e2c15fd6aa9906d4a0aa1660e2530ac120d8843a6197549234" +dependencies = [ + "anyhow", + "arrayref", + "async-executor", + "async-io 2.3.4", + "async-task", + "async-trait", + "blake3", + "chacha20poly1305 0.10.1", + "futures-util", + "hex", + "once_cell", + "pin-project", + "rand 0.8.5", + "serde", + "serde_json", + "sillad", + "smallvec", + "smolscale 0.4.11", + "tachyonix", + "tap", + "tracing", + "x25519-dalek", +] + +[[package]] +name = "simple-dns" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +checksum = "4c80e565e7dcc4f1ef247e2f395550d4cf7d777746d5988e7e4e3156b71077fc" +dependencies = [ + "bitflags 2.6.0", +] [[package]] name = "simple_asn1" @@ -4983,7 +5943,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b" dependencies = [ "chrono", - "num-bigint 0.2.6", + "num-bigint", "num-traits", ] @@ -5006,7 +5966,7 @@ dependencies = [ "bytecount", "cargo_metadata", "error-chain", - "glob 0.3.1", + "glob", "pulldown-cmark", "tempfile", "walkdir", @@ -5018,14 +5978,14 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ - "autocfg 1.1.0", + "autocfg 1.3.0", ] [[package]] name = "smallvec" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smol" @@ -5035,15 +5995,32 @@ checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1" dependencies = [ "async-channel 1.9.0", "async-executor", - "async-fs", + "async-fs 1.6.0", "async-io 1.13.0", "async-lock 2.8.0", - "async-net", - "async-process", + "async-net 1.8.0", + "async-process 1.8.1", "blocking", "futures-lite 1.13.0", ] +[[package]] +name = "smol" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aad24f41392790e6ac67f4f4cd871da61f7d758e07b5622431e491e897d9c8a7" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-fs 2.1.2", + "async-io 2.3.4", + "async-lock 3.4.0", + "async-net 2.0.0", + "async-process 2.2.4", + "blocking", + "futures-lite 2.3.0", +] + [[package]] name = "smol-timeout" version = "0.6.0" @@ -5054,6 +6031,16 @@ dependencies = [ "pin-project-lite 0.1.12", ] +[[package]] +name = "smol-timeout2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ff2999617659d3f0dbddc5facf590cff11dab249fd3eeed0f08dc94452666fa" +dependencies = [ + "async-io 2.3.4", + "pin-project-lite 0.1.12", +] + [[package]] name = "smol_str" version = "0.1.24" @@ -5063,6 +6050,15 @@ dependencies = [ "serde", ] +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + [[package]] name = "smolscale" version = "0.3.54" @@ -5075,9 +6071,9 @@ dependencies = [ "async-global-executor", "async-io 1.13.0", "async-task", - "backtrace 0.3.69", + "backtrace 0.3.73", "cache-padded", - "concurrent-queue 2.4.0", + "concurrent-queue 2.5.0", "crossbeam-deque", "crossbeam-queue", "crossbeam-utils", @@ -5088,12 +6084,12 @@ dependencies = [ "futures-intrusive 0.4.2", "futures-lite 1.13.0", "futures-util", - "log 0.4.20", + "log", "num_cpus", "once_cell", - "parking_lot 0.12.1", - "pin-project-lite 0.2.13", - "rustc-hash", + "parking_lot 0.12.3", + "pin-project-lite 0.2.14", + "rustc-hash 1.1.0", "scopeguard", "slab", "smallvec", @@ -5105,40 +6101,40 @@ dependencies = [ [[package]] name = "smolscale" -version = "0.4.4" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbdca91c61f5db17b8a075842e1f0e2714cdadd96483940209906e4f29a12bc" +checksum = "856ab506273759ef9632e33412680c3da2267c6fa238fab6ce93fc58212ff57e" dependencies = [ "anyhow", "async-channel 1.9.0", "async-compat", + "async-event", "async-executor", "async-global-executor", - "async-io 1.13.0", + "async-io 2.3.4", "async-task", - "backtrace 0.3.69", + "backtrace 0.3.73", "cache-padded", - "crossbeam-deque", "crossbeam-queue", "crossbeam-utils", "dashmap 5.5.3", "event-listener 2.5.3", "fastrand 1.9.0", - "flume 0.10.14", - "futures-intrusive 0.4.2", "futures-lite 1.13.0", "futures-util", - "log 0.4.20", + "log", "num_cpus", "once_cell", - "parking_lot 0.12.1", - "pin-project-lite 0.2.13", - "rustc-hash", + "parking_lot 0.12.3", + "pin-project-lite 0.2.14", + "pollster", + "rustc-hash 1.1.0", "scopeguard", "slab", "smallvec", "st3", "tabwriter", + "tachyonix", "thread_local", "waker-fn", ] @@ -5166,12 +6162,12 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -5186,174 +6182,86 @@ dependencies = [ ] [[package]] -name = "sosistab2" -version = "0.10.18" +name = "socksv5" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff9a6bc8da3d1b7f02a306461e1c7d9a3905e7279dde076c85054f10dbe47ba8" +checksum = "aacc0d3f4727eeea5226189bf99d225b3f496d1379305c492f2af06adfeb8a51" dependencies = [ - "ahash 0.8.7", - "anyhow", - "arrayref", - "async-event", - "async-trait", - "blake3", - "bytes", - "cached 0.26.2", - "clone-macro", - "concurrent-queue 1.2.4", - "dashmap 5.5.3", - "derivative", - "diatomic-waker", - "event-listener 2.5.3", - "fastrand 1.9.0", - "futures-intrusive 0.5.0", - "futures-util", - "hex", - "indexmap 1.9.3", - "itertools 0.10.5", - "log 0.4.20", - "num_cpus", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "rand 0.7.3", - "rand_chacha 0.2.2", - "recycle-box", - "replay_filter", - "ring 0.16.20", - "scopeguard", - "serde", - "slab", - "smallvec", - "smol", - "smol-timeout", - "smolscale 0.4.4", - "stdcode", - "subtle", + "byteorder", + "futures", "thiserror", - "x25519-dalek", ] [[package]] -name = "sosistab2-obfstls" -version = "0.1.1" +name = "spin" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "491610349879c885c396ca05ae3343be626854f18cc5a348d19e16b73da09d39" -dependencies = [ - "anyhow", - "arrayref", - "async-dup", - "async-native-tls", - "async-trait", - "bytes", - "futures-util", - "log 0.4.20", - "native-tls", - "rand 0.7.3", - "serde", - "smol", - "smol-timeout", - "smolscale 0.4.4", - "sosistab2", - "stdcode", - "subtle", -] +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] -name = "sosistab2-obfsudp" -version = "0.1.11" +name = "spin" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d61f019a7c6fe0e6eb5e0449fc9fea6e3eabc98579f56642b046bb5a449999" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" dependencies = [ - "ahash 0.8.7", - "anyhow", - "arc-swap", - "async-trait", - "blake3", - "bytes", - "derivative", - "hex", - "itertools 0.11.0", - "log 0.4.20", - "lru 0.12.1", - "moka 0.12.3", - "once_cell", - "parking_lot 0.12.1", - "priority-queue", - "probability", - "rand 0.7.3", - "reed-solomon-erasure", - "replay_filter", - "ring 0.17.7", - "scopeguard", - "serde", - "smol", - "smol-timeout", - "smolscale 0.4.4", - "sosistab2", - "stdcode", - "x25519-dalek", + "lock_api", ] [[package]] -name = "special" -version = "0.10.3" +name = "spki" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b89cf0d71ae639fdd8097350bfac415a41aabf1d5ddd356295fdc95f09760382" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" dependencies = [ - "libm", + "base64ct", + "der 0.6.1", ] [[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "spin" -version = "0.9.8" +name = "spki" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" dependencies = [ - "lock_api", + "base64ct", + "der 0.7.9", ] [[package]] name = "sqlformat" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce81b7bd7c4493975347ef60d8c7e8b742d4694f4c49f93e0a12ea263938176c" +checksum = "f895e3734318cc55f1fe66258926c9b910c124d47520339efecbb6c59cec7c1f" dependencies = [ - "itertools 0.12.0", "nom", "unicode_categories", ] [[package]] name = "sqlx" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dba03c279da73694ef99763320dea58b51095dfe87d001b1d4b5fe78ba8763cf" +checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" dependencies = [ "sqlx-core", "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", "sqlx-sqlite", ] [[package]] name = "sqlx-core" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd" +checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.11", "atoi", "byteorder", "bytes", "crc", "crossbeam-queue", - "dotenvy", "either", "event-listener 2.5.3", "futures-channel", @@ -5363,13 +6271,14 @@ dependencies = [ "futures-util", "hashlink", "hex", - "indexmap 2.1.0", - "log 0.4.20", + "indexmap 2.5.0", + "log", "memchr", "once_cell", "paste", "percent-encoding", "serde", + "serde_json", "sha2 0.10.8", "smallvec", "sqlformat", @@ -5382,9 +6291,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89961c00dc4d7dffb7aee214964b065072bff69e36ddb9e2c107541f75e4f2a5" +checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" dependencies = [ "proc-macro2", "quote", @@ -5395,11 +6304,10 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0bd4519486723648186a08785143599760f7cc81c52334a55d6a83ea1e20841" +checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" dependencies = [ - "atomic-write-file", "dotenvy", "either", "heck 0.4.1", @@ -5411,6 +6319,7 @@ dependencies = [ "serde_json", "sha2 0.10.8", "sqlx-core", + "sqlx-mysql", "sqlx-sqlite", "syn 1.0.109", "tempfile", @@ -5418,11 +6327,91 @@ dependencies = [ "url", ] +[[package]] +name = "sqlx-mysql" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.6.0", + "byteorder", + "bytes", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa 0.9.6", + "serde", + "sha1 0.10.6", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +dependencies = [ + "atoi", + "base64 0.21.7", + "bitflags 2.6.0", + "byteorder", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf 0.12.4", + "hmac 0.12.1", + "home", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "whoami", +] + [[package]] name = "sqlx-sqlite" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "210976b7d948c7ba9fced8ca835b11cbb2d677c59c79de41ac0d397e14547490" +checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" dependencies = [ "atoi", "flume 0.11.0", @@ -5432,7 +6421,7 @@ dependencies = [ "futures-intrusive 0.5.0", "futures-util", "libsqlite3-sys", - "log 0.4.20", + "log", "percent-encoding", "serde", "sqlx-core", @@ -5460,12 +6449,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "stdcode" version = "0.1.14" @@ -5518,7 +6501,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "sha1", + "sha1 0.6.1", "syn 1.0.109", ] @@ -5528,6 +6511,17 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + [[package]] name = "strip-ansi-escapes" version = "0.1.1" @@ -5550,27 +6544,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] -name = "structmeta" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104842d6278bf64aa9d2f182ba4bde31e8aec7a131d29b7f444bb9b344a09e2a" -dependencies = [ - "proc-macro2", - "quote", - "structmeta-derive", - "syn 1.0.109", -] - -[[package]] -name = "structmeta-derive" -version = "0.1.6" +name = "strsim" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24420be405b590e2d746d83b01f09af673270cf80e9b003a5fa7b651c58c7d93" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "structopt" @@ -5578,7 +6555,7 @@ version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10" dependencies = [ - "clap", + "clap 2.34.0", "lazy_static", "structopt-derive", ] @@ -5590,7 +6567,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ "heck 0.3.3", - "proc-macro-error 1.0.4", + "proc-macro-error", "proc-macro2", "quote", "syn 1.0.109", @@ -5598,108 +6575,63 @@ dependencies = [ [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subtle-ng" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn" -version = "2.0.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "syn-mid" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea305d57546cc8cd04feb14b62ec84bf17f50e3f7b12560d7bfa9265f39d9ed" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142" [[package]] -name = "synstructure" -version = "0.12.6" +name = "syn" +version = "1.0.109" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "unicode-xid 0.2.4", + "unicode-ident", ] [[package]] -name = "syntex" -version = "0.42.2" +name = "syn" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a30b08a6b383a22e5f6edc127d169670d48f905bb00ca79a00ea3e442ebe317" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ - "syntex_errors", - "syntex_syntax", + "proc-macro2", + "quote", + "unicode-ident", ] [[package]] -name = "syntex_errors" -version = "0.42.0" +name = "sync_wrapper" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c48f32867b6114449155b2a82114b86d4b09e1bddb21c47ff104ab9172b646" -dependencies = [ - "libc", - "log 0.3.9", - "rustc-serialize", - "syntex_pos", - "term", - "unicode-xid 0.0.3", -] +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" [[package]] -name = "syntex_pos" -version = "0.42.0" +name = "sync_wrapper" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd49988e52451813c61fecbe9abb5cfd4e1b7bb6cdbb980a6fbcbab859171a6" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" dependencies = [ - "rustc-serialize", + "futures-core", ] [[package]] -name = "syntex_syntax" -version = "0.42.0" +name = "synstructure" +version = "0.12.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7628a0506e8f9666fdabb5f265d0059b059edac9a3f810bda077abb5d826bd8d" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ - "bitflags 0.5.0", - "libc", - "log 0.3.9", - "rustc-serialize", - "syntex_errors", - "syntex_pos", - "term", - "unicode-xid 0.0.3", + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", ] [[package]] @@ -5732,6 +6664,20 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "tachyonix" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1924ef47bc3b427ea2a0b55ba97d0e9116e9103483ecd75a43f47a66443527c5" +dependencies = [ + "async-event", + "crossbeam-utils", + "diatomic-waker 0.1.0", + "futures-core", + "loom", + "pin-project-lite 0.2.14", +] + [[package]] name = "tagptr" version = "0.2.0" @@ -5746,25 +6692,15 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if 1.0.0", - "fastrand 2.0.1", - "redox_syscall 0.4.1", - "rustix 0.38.30", - "windows-sys 0.52.0", -] - -[[package]] -name = "term" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1" -dependencies = [ - "kernel32-sys", - "winapi 0.2.8", + "fastrand 2.1.1", + "once_cell", + "rustix 0.38.35", + "windows-sys 0.59.0", ] [[package]] @@ -5787,29 +6723,29 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if 1.0.0", "once_cell", @@ -5832,16 +6768,17 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", + "num-conv", "powerfmt", "serde", "time-core", - "time-macros 0.2.16", + "time-macros 0.2.18", ] [[package]] @@ -5862,10 +6799,11 @@ dependencies = [ [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] @@ -5891,14 +6829,14 @@ dependencies = [ "ascii", "chunked_transfer", "httpdate", - "log 0.4.20", + "log", ] [[package]] name = "tinyvec" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" dependencies = [ "tinyvec_macros", ] @@ -5917,11 +6855,11 @@ checksum = "fc7f6a14c9dc3042c5944b50665e8b25bc6f4a1d49b29016f2a4a156d8fc1bf3" dependencies = [ "arbitrary", "arrayref", - "base32", + "base32 0.4.0", "blake3", "ed25519-consensus", "hex", - "log 0.4.20", + "log", "rand 0.8.5", "serde", "serde-big-array", @@ -5930,17 +6868,18 @@ dependencies = [ [[package]] name = "tokio" -version = "1.35.1" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ - "backtrace 0.3.69", + "backtrace 0.3.73", "bytes", "libc", "mio", - "pin-project-lite 0.2.13", - "socket2 0.5.5", - "windows-sys 0.48.0", + "pin-project-lite 0.2.14", + "signal-hook-registry", + "socket2 0.5.7", + "windows-sys 0.52.0", ] [[package]] @@ -5953,53 +6892,77 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.12", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" dependencies = [ "futures-core", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "tokio", ] [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", "futures-sink", - "pin-project-lite 0.2.13", + "pin-project-lite 0.2.14", "tokio", - "tracing", ] [[package]] -name = "toml_datetime" -version = "0.6.5" +name = "tower" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite 0.2.14", + "tokio", + "tower-layer", + "tower-service", +] [[package]] -name = "toml_edit" -version = "0.19.15" +name = "tower-layer" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" -dependencies = [ - "indexmap 2.1.0", - "toml_datetime", - "winnow", -] +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -6007,8 +6970,8 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log 0.4.20", - "pin-project-lite 0.2.13", + "log", + "pin-project-lite 0.2.14", "tracing-attributes", "tracing-core", ] @@ -6021,7 +6984,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] @@ -6040,11 +7003,21 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "log 0.4.20", + "log", "once_cell", "tracing-core", ] +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + [[package]] name = "tracing-subscriber" version = "0.3.18" @@ -6055,12 +7028,36 @@ dependencies = [ "nu-ansi-term", "once_cell", "regex", + "serde", + "serde_json", "sharded-slab", "smallvec", "thread_local", "tracing", "tracing-core", "tracing-log", + "tracing-serde", +] + +[[package]] +name = "tracing-test" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "557b891436fe0d5e0e363427fc7f217abf9ccd510d5136549847bdcbcd011d68" +dependencies = [ + "tracing-core", + "tracing-subscriber", + "tracing-test-macro", +] + +[[package]] +name = "tracing-test-macro" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04659ddb06c87d233c566112c1c9c5b9e98256d9af50ec3bc9c8327f873a7568" +dependencies = [ + "quote", + "syn 2.0.77", ] [[package]] @@ -6081,19 +7078,22 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbc25e23adc6cac7dd895ce2780f255902290fc39b00e1ae3c33e89f3d20fa66" dependencies = [ - "ioctl-sys", + "ioctl-sys 0.6.0", "libc", "thiserror", ] [[package]] -name = "twox-hash" -version = "1.6.3" +name = "tun" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +checksum = "0adb9992bbd5ca76f3847ed579ad4ee8defb2ec2eea918cceef17ccc66fa4fd4" dependencies = [ - "cfg-if 1.0.0", - "static_assertions", + "ioctl-sys 0.8.0", + "libc", + "log", + "thiserror", + "wintun", ] [[package]] @@ -6125,36 +7125,36 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] [[package]] -name = "unicode-segmentation" -version = "1.10.1" +name = "unicode-properties" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" [[package]] -name = "unicode-width" -version = "0.1.11" +name = "unicode-segmentation" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] -name = "unicode-xid" -version = "0.0.3" +name = "unicode-width" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36dff09cafb4ec7c8cf0023eb0b686cb6ce65499116a12201c9e11840ca01beb" +checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d" [[package]] name = "unicode-xid" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" [[package]] name = "unicode_categories" @@ -6172,6 +7172,22 @@ dependencies = [ "subtle", ] +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + [[package]] name = "untrusted" version = "0.7.1" @@ -6186,9 +7202,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -6204,17 +7220,17 @@ checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf8parse" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" dependencies = [ - "getrandom 0.2.12", + "getrandom 0.2.15", ] [[package]] @@ -6225,9 +7241,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.6.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cdbaf5e132e593e9fc1de6a15bbec912395b11fb9719e061cf64f804524c503" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" [[package]] name = "vcpkg" @@ -6243,9 +7259,15 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.4" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vsimd" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" [[package]] name = "vte" @@ -6260,9 +7282,9 @@ dependencies = [ [[package]] name = "vte_generate_state_changes" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff" +checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e" dependencies = [ "proc-macro2", "quote", @@ -6270,15 +7292,15 @@ dependencies = [ [[package]] name = "waker-fn" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -6305,36 +7327,43 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + [[package]] name = "wasm-bindgen" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if 1.0.0", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", - "log 0.4.20", + "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.40" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -6344,9 +7373,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6354,28 +7383,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.90" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "web-sys" -version = "0.3.67" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -6400,13 +7429,29 @@ dependencies = [ "webpki", ] +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +dependencies = [ + "rustls-pki-types", +] + [[package]] name = "whoami" -version = "1.4.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "wasm-bindgen", + "redox_syscall 0.5.3", + "wasite", "web-sys", ] @@ -6440,11 +7485,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "winapi 0.3.9", + "windows-sys 0.59.0", ] [[package]] @@ -6475,13 +7520,72 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-core" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", ] [[package]] @@ -6508,7 +7612,16 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", ] [[package]] @@ -6543,17 +7656,18 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] @@ -6570,9 +7684,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_msvc" @@ -6594,9 +7708,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_i686_gnu" @@ -6618,9 +7732,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_msvc" @@ -6642,9 +7762,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_x86_64_gnu" @@ -6666,9 +7786,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnullvm" @@ -6684,9 +7804,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" @@ -6708,18 +7828,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" - -[[package]] -name = "winnow" -version = "0.5.34" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" -dependencies = [ - "memchr", -] +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winreg" @@ -6732,10 +7843,17 @@ dependencies = [ ] [[package]] -name = "wyz" -version = "0.2.0" +name = "wintun" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" +checksum = "29b83b0eca06dd125dbcd48a45327c708a6da8aada3d95a3f06db0ce4b17e0d4" +dependencies = [ + "c2rust-bitfields", + "libloading", + "log", + "thiserror", + "windows 0.51.1", +] [[package]] name = "wyz" @@ -6748,41 +7866,47 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "1.2.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2392b6b94a576b4e2bf3c5b2757d63f10ada8020a2e4d08ac849ebcf6ea8e077" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" dependencies = [ "curve25519-dalek", - "rand_core 0.5.1", + "rand_core 0.6.4", "serde", - "zeroize", ] +[[package]] +name = "xmlparser" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" + [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ + "byteorder", "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] [[package]] name = "zeroize" -version = "1.3.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" dependencies = [ "zeroize_derive", ] @@ -6795,5 +7919,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.48", + "syn 2.0.77", ] diff --git a/Cargo.toml b/Cargo.toml index 8758a1bf..0c83e6ef 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "geph4-client" -version = "4.11.0" +version = "4.99.0-actuallyfive.14" authors = ["nullchinchilla "] edition = "2021" description = "Geph client" @@ -13,6 +13,9 @@ repository = "https://github.com/geph-official/geph4-client" # sosistab2-obfsudp={path="../sosistab2-obfsudp"} # sosistab2={path="../sosistab2"} +#geph5-client={path="../geph5/binaries/geph5-client"} +#sillad={path="../geph5/libraries/sillad"} + [lib] name = "geph4client" crate-type = ["staticlib", "lib", "cdylib"] @@ -26,7 +29,9 @@ flume = "0.10.14" os_pipe = "1.1.4" dirs = "3.0.2" -ed25519-dalek = { version = "1.0.1", features = ["serde"] } +ed25519-dalek = { version = "2", features = [ + "serde", +], default-features = false } futures-util = "0.3.28" hex = "0.4.3" http-types = "2.12.0" @@ -47,12 +52,12 @@ socksv5 = "0.2.0" strsim = "0.10.0" structopt = "0.3.26" -x25519-dalek = { version = "1.2.0", features = ["serde"] } +x25519-dalek = { version = "2", features = ["serde"], default-features = false } chrono = "0.4.31" socket2 = "0.3.19" treebitmap = { package = "ip_network_table-deps-treebitmap", version = "0.5.0" } -pnet_packet = "0.27.2" +pnet_packet = "0.35" governor = "0.3.2" async-dup = "1.2.2" bytes = { version = "1.5.0", features = ["serde"] } @@ -65,15 +70,23 @@ cached = "0.23.0" rustls = "0.19.1" webpki-roots = "0.21.1" strip-ansi-escapes = "0.1.1" - + geph-nat = "0.1.6" mizaru = "0.1.3" geph4-aioutils = "0.1.5" # alloc_geiger = "0.1" - +geph5-client = {version="0.2.0-alpha.17", features=["windivert"]} +geph5-broker-protocol = "0.2.0-alpha.17" +sillad = "0.2.1" # socks2http tokio = { version = "1.33.0", features = ["rt", "net", "io-util"] } -hyper = { version = "0.14.27", features = ["http1", "client", "server", "tcp", "stream"] } +hyper = { version = "0.14.27", features = [ + "http1", + "client", + "server", + "tcp", + "stream", +] } pin-project = "1.1.3" http = "0.2.9" psl = "2.1.4" @@ -103,11 +116,6 @@ byteorder = "1.5.0" smol_str = "0.1.24" -sosistab2="0.10" -sosistab2-obfsudp="0.1" -sosistab2-obfstls="0.1" - - stdcode = "0.1.14" # jemallocator-global = "0.3.2" panic-message = "0.3.0" @@ -119,25 +127,31 @@ futures-intrusive = "0.5.0" oneshot = "0.1.6" io-lifetimes = "1.0.5" rustix = "0.36.9" -tmelcrypt = "0.2.7" +# tmelcrypt = "0.2.7" -geph4-protocol = "0.18.0" +geph4-protocol = "0.19.0-alpha.2" # geph4-protocol = { git = "https://github.com/geph-official/geph4-protocol", branch = "user-info" } -melprot = "0.13.7" +# melprot = "0.13.7" acidjson = "0.1.3" -melstructs = "0.3.2" -gibbername = "0.1.1" -melbootstrap = "0.8.4" +# melstructs = "0.3.2" +# gibbername = "0.1.1" +# melbootstrap = "0.8.4" moka = "0.11.3" async-once-cell = "0.5.3" clone-macro = "0.1.0" -sqlx = {version="0.7.3", default-features=false, features=["sqlite", "runtime-tokio"]} +sqlx = { version = "0.7.3", default-features = false, features = [ + "sqlite", + "runtime-tokio", +] } derivative = "2.2.0" async-signal = "0.2.5" slab = "0.4.9" sharded-slab = "0.1.7" async-broadcast = "0.6.0" +tmelcrypt = "0.2.7" +isocountry = "0.3.2" +base32 = "0.5.1" # tracing-subscriber = "0.2.15" [target.'cfg(unix)'.dependencies] @@ -160,6 +174,5 @@ opt-level = 3 panic = "abort" opt-level = 3 debug = 0 -# lto = true strip = true -codegen-units = 1 +lto="thin" \ No newline at end of file diff --git a/move_built.sh b/move_built.sh index ca7f1441..d52143d0 100755 --- a/move_built.sh +++ b/move_built.sh @@ -1,5 +1,6 @@ -#!/bin/sh -VERSION=$(git describe) +#!/bin/bash +VERSION=$(git describe --always) +echo $VERSION mkdir -p ./OUTPUT/$VERSION/ mv ./target/x86_64-unknown-linux-musl/release/geph4-client ./OUTPUT/$VERSION/geph4-client-linux-amd64 mv ./target/x86_64-unknown-linux-gnu/release/geph4-vpn-helper ./OUTPUT/$VERSION/geph4-vpn-helper-linux-amd64 diff --git a/src/config.rs b/src/config.rs index f2d5622d..c8d3d333 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,10 +1,11 @@ -use std::{path::PathBuf, str::FromStr}; +use std::{path::PathBuf, str::FromStr, sync::LazyLock}; -use crate::{conninfo_store::ConnInfoStore, fronts::parse_fronts}; +use crate::fronts::parse_fronts; use anyhow::Context; use geph4_protocol::binder::protocol::{BinderClient, Credentials}; +use geph5_client::{BridgeMode, BrokerSource, Config}; use serde::{Deserialize, Serialize}; use sqlx::{ sqlite::{SqliteConnectOptions, SqliteJournalMode, SqliteSynchronous}, @@ -263,59 +264,43 @@ fn str_to_mizaru_pk(src: &str) -> mizaru::PublicKey { mizaru::PublicKey(raw_bts) } -/// Given the common and authentication options, produce a binder client. -pub async fn get_conninfo_store( - common_opt: &CommonOpt, - auth_opt: &AuthOpt, - exit_host: &str, -) -> anyhow::Result { - let auth_opt = auth_opt.clone(); - - // create a dbpath based on hashing the username together with the password - let mut dbpath = auth_opt.credential_cache.clone(); - - let user_cache_key = hex::encode(blake3::hash(&auth_opt.auth_kind.stdcode()).as_bytes()); - - let auth_kind = auth_opt.auth_kind; - - let get_creds = move || match auth_kind.clone() { - Some(AuthKind::AuthPassword { username, password }) => Credentials::Password { - username: username.into(), - password: password.into(), +pub static GEPH5_CONFIG_TEMPLATE: LazyLock = LazyLock::new(|| Config { + socks5_listen: None, + http_proxy_listen: None, + + control_listen: None, + exit_constraint: geph5_client::ExitConstraint::Auto, + bridge_mode: BridgeMode::Auto, + cache: None, + broker: Some(BrokerSource::Race(vec![ + BrokerSource::Fronted { + front: "https://vuejs.org".into(), + host: "svitania-naidallszei-2.netlify.app".into(), }, - Some(AuthKind::AuthKeypair { sk_path }) => { - let sk_raw = hex::decode(std::fs::read(sk_path).unwrap()).unwrap(); - let sk = Ed25519SK::from_bytes(&sk_raw) - .context("cannot decode secret key") - .unwrap(); - Credentials::new_keypair(&sk) - } - None => panic!("Missing authentication credentials"), - }; - - dbpath.push(&user_cache_key); - std::fs::create_dir_all(&dbpath)?; - dbpath.push("conninfo.db"); - - // TODO: WAL mode - let db = SqlitePool::connect_with( - SqliteConnectOptions::new() - .filename(dbpath) - .create_if_missing(true) - .synchronous(SqliteSynchronous::Normal) - .journal_mode(SqliteJournalMode::Wal), - ) - .await?; - - let cbc = ConnInfoStore::connect( - db, - common_opt.get_binder_client(), - common_opt.binder_mizaru_free.clone(), - common_opt.binder_mizaru_plus.clone(), - exit_host, - get_creds, - ) - .await?; - - Ok(cbc) -} + BrokerSource::AwsLambda { + function_name: "geph-lambda-bouncer".into(), + region: "us-east-1".into(), + access_key_id: String::from_utf8_lossy( + &base32::decode( + base32::Alphabet::Crockford, + "855MJGAMB58MCPJBB97K4P2C6NC36DT8", + ) + .unwrap(), + ) + .to_string(), + secret_access_key: String::from_utf8_lossy( + &base32::decode( + base32::Alphabet::Crockford, + "8SQ7ECABES132WT4B9GQEN356XQ6GRT36NS64GBK9HP42EAGD8W6JRA39DTKAP2J", + ) + .unwrap(), + ) + .to_string(), + }, + ])), + vpn: false, + spoof_dns: false, + passthrough_china: false, + dry_run: false, + credentials: geph5_broker_protocol::Credential::TestDummy, +}); diff --git a/src/connect.rs b/src/connect.rs index 2ae5cbae..be8370af 100644 --- a/src/connect.rs +++ b/src/connect.rs @@ -1,23 +1,15 @@ use std::{sync::Arc, time::Duration}; -use anyhow::Context; - use bytes::Bytes; use clone_macro::clone; use futures_util::{future::select_all, FutureExt, TryFutureExt}; use itertools::Itertools; -use once_cell::sync::Lazy; -use rand::Rng; use smol::prelude::*; use smolscale::immortal::{Immortal, RespawnStrategy}; -use crate::{ - config::{get_conninfo_store, ConnectOpt}, - connect::tunnel::{BinderTunnelParams, ClientTunnel, EndpointSource}, - conninfo_store::ConnInfoStore, -}; +use crate::{config::ConnectOpt, connect::tunnel::ClientTunnel}; use crate::debugpack::DebugPack; mod dns; @@ -44,38 +36,8 @@ impl ConnectDaemon { opt.use_bridges ); - let conn_info = Arc::new( - get_conninfo_store( - &opt.common, - &opt.auth, - opt.exit_server - .as_ref() - .context("no exit server provided")?, - ) - .await?, - ); - - let endpoint = { - if let Some(override_url) = opt.override_connect.clone() { - EndpointSource::Independent { - endpoint: override_url, - } - } else { - EndpointSource::Binder( - conn_info.clone(), - BinderTunnelParams { - exit_server: opt.exit_server.clone(), - use_bridges: opt.use_bridges, - force_bridge: opt.force_bridge, - force_protocol: opt.force_protocol.clone(), - }, - ) - } - }; - - let tunnel = ClientTunnel::new(endpoint, |_| {}).into(); + let tunnel = ClientTunnel::new(opt.clone()).into(); let ctx = ConnectContext { - conn_info, tunnel, opt: opt.clone(), debug: Arc::new(DebugPack::new(&opt.common.debugpack_path)?), @@ -109,16 +71,11 @@ impl ConnectDaemon { #[derive(Clone)] pub struct ConnectContext { opt: ConnectOpt, - conn_info: Arc, + tunnel: Arc, debug: Arc, } -static METRIC_SESSION_ID: Lazy = Lazy::new(|| { - let mut rng = rand::thread_rng(); - rng.gen() -}); - async fn connect_loop(ctx: ConnectContext) -> anyhow::Result<()> { let socks2http = smolscale::spawn(crate::socks2http::run_tokio(ctx.opt.http_listen, { let mut addr = ctx.opt.socks5_listen; @@ -138,20 +95,6 @@ async fn connect_loop(ctx: ConnectContext) -> anyhow::Result<()> { .chain(std::iter::once(smolscale::spawn(smol::future::pending()))) // ensures there's at least one .collect_vec(); - let refresh = smolscale::spawn(clone!([ctx], async move { - if ctx.opt.override_connect.is_none() { - loop { - log::debug!("about to refresh..."); - if let Err(err) = ctx.conn_info.refresh(false).await { - log::warn!("error refreshing store: {:?}", err); - } - smol::Timer::after(Duration::from_secs(120)).await; - } - } else { - smol::future::pending().await - } - })); - let vpn = smolscale::spawn(vpn::vpn_loop(ctx.clone())); let stats = smolscale::spawn(stats::serve_stats_loop(ctx.clone())); @@ -159,7 +102,6 @@ async fn connect_loop(ctx: ConnectContext) -> anyhow::Result<()> { socks2http .race(socks5) .race(dns) - .race(refresh) .race(select_all(forward_ports).map(|s| s.0)) .race(vpn) .race(stats) diff --git a/src/connect/dns.rs b/src/connect/dns.rs index 33bb81a5..920f1a1a 100644 --- a/src/connect/dns.rs +++ b/src/connect/dns.rs @@ -1,9 +1,10 @@ +use sillad::Pipe; use smol::{ channel::{Receiver, Sender}, prelude::*, }; use smol_timeout::TimeoutExt; -use sosistab2::Stream; + use std::net::SocketAddr; use std::time::Duration; @@ -43,8 +44,8 @@ pub async fn dns_loop(ctx: ConnectContext, addr: SocketAddr) -> anyhow::Result<( /// A DNS connection pool struct DnsPool { ctx: ConnectContext, - send_conn: Sender<(Stream, Instant)>, - recv_conn: Receiver<(Stream, Instant)>, + send_conn: Sender<(Box, Instant)>, + recv_conn: Receiver<(Box, Instant)>, } impl DnsPool { diff --git a/src/connect/port_forwarder.rs b/src/connect/port_forwarder.rs index 4af3a91b..9e65585f 100644 --- a/src/connect/port_forwarder.rs +++ b/src/connect/port_forwarder.rs @@ -1,5 +1,7 @@ use std::net::SocketAddr; +use futures_util::AsyncReadExt; + use super::ConnectContext; /// Forwards ports using a particular description. @@ -16,9 +18,10 @@ pub async fn port_forwarder(ctx: ConnectContext, desc: String) -> anyhow::Result let ctx = ctx.clone(); smolscale::spawn(async move { let remote = ctx.tunnel.connect_stream(&remote_addr).await.ok()?; + let (read_remote, write_remote) = remote.split(); smol::future::race( - smol::io::copy(remote.clone(), conn.clone()), - smol::io::copy(conn, remote), + smol::io::copy(read_remote, conn.clone()), + smol::io::copy(conn, write_remote), ) .await .ok() diff --git a/src/connect/socks5.rs b/src/connect/socks5.rs index a1192433..a4e8c392 100644 --- a/src/connect/socks5.rs +++ b/src/connect/socks5.rs @@ -1,17 +1,14 @@ use std::{sync::atomic::Ordering, time::Duration}; use anyhow::Context; -use futures_util::TryFutureExt; +use futures_util::{AsyncReadExt, TryFutureExt}; use psl::Psl; use smol_timeout::TimeoutExt; use std::net::{Ipv4Addr, SocketAddr, SocketAddrV4}; use crate::{ china, - connect::{ - stats::{STATS_RECV_BYTES, STATS_SEND_BYTES}, - tunnel::activity::notify_activity, - }, + connect::stats::{STATS_RECV_BYTES, STATS_SEND_BYTES}, }; use super::ConnectContext; @@ -91,14 +88,13 @@ async fn handle_socks5( port, ) .await?; + let (conn_read, conn_write) = conn.split(); smol::future::race( - geph4_aioutils::copy_with_stats(conn.clone(), s5client.clone(), |n| { + geph4_aioutils::copy_with_stats(conn_read, s5client.clone(), |n| { STATS_RECV_BYTES.fetch_add(n as u64, Ordering::Relaxed); - notify_activity(); }), - geph4_aioutils::copy_with_stats(s5client, conn, |n| { + geph4_aioutils::copy_with_stats(s5client, conn_write, |n| { STATS_SEND_BYTES.fetch_add(n as u64, Ordering::Relaxed); - notify_activity(); }), ) .await?; diff --git a/src/connect/stats.rs b/src/connect/stats.rs index a2026f4a..7257d311 100644 --- a/src/connect/stats.rs +++ b/src/connect/stats.rs @@ -1,4 +1,4 @@ -mod gatherer; +pub mod gatherer; use std::{ sync::atomic::{AtomicU64, Ordering}, @@ -12,7 +12,7 @@ use smol_str::SmolStr; use smolscale::reaper::TaskReaper; use self::gatherer::StatsGatherer; -pub use gatherer::StatItem; + use nanorpc::nanorpc_derive; use nanorpc::RpcService; use once_cell::sync::Lazy; @@ -72,7 +72,7 @@ struct StatsControlProtocolImpl { impl StatsControlProtocol for StatsControlProtocolImpl { /// Obtains whether or not the daemon is connected. async fn is_connected(&self) -> bool { - self.ctx.tunnel.status().connected() + self.ctx.tunnel.status().await.connected() } /// Obtains statistics. diff --git a/src/connect/tunnel.rs b/src/connect/tunnel.rs new file mode 100644 index 00000000..3fa19a47 --- /dev/null +++ b/src/connect/tunnel.rs @@ -0,0 +1,133 @@ +use bytes::Bytes; + +use derivative::Derivative; +use geph5_broker_protocol::Credential; +use geph5_client::{BridgeMode, ExitConstraint}; + +use sillad::Pipe; +use smol::Task; +use smol_str::SmolStr; +use std::{ + sync::atomic::Ordering, + time::{Duration, SystemTime}, +}; +use stdcode::StdcodeSerializeExt; +use tmelcrypt::Hashable; + +use crate::{ + config::{ConnectOpt, GEPH5_CONFIG_TEMPLATE}, + connect::stats::{STATS_RECV_BYTES, STATS_SEND_BYTES}, +}; + +use super::stats::{gatherer::StatItem, STATS_GATHERER}; + +/// A ConnectionStatus shows the status of the tunnel. +#[derive(Clone, Derivative)] +#[derivative(Debug)] +pub enum ConnectionStatus { + Connecting, + Connected { protocol: SmolStr, address: SmolStr }, +} + +impl ConnectionStatus { + pub fn connected(&self) -> bool { + matches!(self, Self::Connected { .. }) + } +} + +/// A tunnel starts and keeps alive the best sosistab session it can under given constraints. +/// A sosistab Session is *a single end-to-end connection between a client and a server.* +/// This can be thought of as analogous to TcpStream, except all reads and writes are datagram-based and unreliable. +pub struct ClientTunnel { + client: geph5_client::Client, + _stat_reporter: Task<()>, +} + +impl ClientTunnel { + /// Creates a new ClientTunnel. + pub fn new(opt: ConnectOpt) -> Self { + let (username, password) = match &opt.auth.auth_kind { + Some(crate::config::AuthKind::AuthPassword { username, password }) => { + (username.clone(), password.clone()) + } + _ => todo!(), + }; + let mut config = GEPH5_CONFIG_TEMPLATE.clone(); + config.credentials = Credential::LegacyUsernamePassword { username, password }; + config.bridge_mode = if opt.use_bridges { + BridgeMode::ForceBridges + } else { + BridgeMode::Auto + }; + config.cache = Some( + opt.auth + .credential_cache + .clone() + .join(format!("cache-{}.db", opt.auth.stdcode().hash())), + ); + if let Some(exit) = opt.exit_server { + config.exit_constraint = ExitConstraint::Hostname(exit); + } + + #[cfg(any(target_os = "linux", target_os = "windows"))] + { + if opt.vpn_mode.is_some() { + config.vpn = true; + } + } + + log::debug!("cache path: {:?}", config.cache); + let client = geph5_client::Client::start(config); + let handle = client.control_client(); + let stat_reporter = smolscale::spawn(async move { + loop { + smol::Timer::after(Duration::from_secs(1)).await; + let info = handle.conn_info().await.unwrap(); + let recv_bytes = handle.stat_num("total_rx_bytes".into()).await.unwrap(); + let send_bytes = handle.stat_num("total_tx_bytes".into()).await.unwrap(); + STATS_RECV_BYTES.store(recv_bytes as _, Ordering::Relaxed); + STATS_SEND_BYTES.store(send_bytes as _, Ordering::Relaxed); + match info { + geph5_client::ConnInfo::Connecting => {} + geph5_client::ConnInfo::Connected(conn) => STATS_GATHERER.push(StatItem { + time: SystemTime::now(), + endpoint: conn.bridge.into(), + protocol: conn.protocol.into(), + ping: Duration::from_millis(100), + send_bytes: send_bytes as u64, + recv_bytes: recv_bytes as u64, + }), + } + } + }); + Self { + client, + _stat_reporter: stat_reporter, + } + } + + /// Returns the current connection status. + pub async fn status(&self) -> ConnectionStatus { + let conn_info = self.client.control_client().conn_info().await.unwrap(); + match conn_info { + geph5_client::ConnInfo::Connecting => ConnectionStatus::Connecting, + geph5_client::ConnInfo::Connected(info) => ConnectionStatus::Connected { + protocol: info.protocol.into(), + address: info.bridge.into(), + }, + } + } + + /// Returns a sosistab stream to the given remote host. + pub async fn connect_stream(&self, remote: &str) -> anyhow::Result> { + self.client.open_conn(remote).await + } + + pub async fn send_vpn(&self, msg: &[u8]) -> anyhow::Result<()> { + self.client.send_vpn_packet(msg.to_vec().into()).await + } + + pub async fn recv_vpn(&self) -> anyhow::Result { + self.client.recv_vpn_packet().await + } +} diff --git a/src/connect/tunnel/activity.rs b/src/connect/tunnel/activity.rs deleted file mode 100644 index 2d385ff7..00000000 --- a/src/connect/tunnel/activity.rs +++ /dev/null @@ -1,38 +0,0 @@ -use event_listener::Event; -use once_cell::sync::Lazy; -use parking_lot::Mutex; -use smol::prelude::*; -use std::time::{Duration, SystemTime}; - -static LAST_ACTIVITY: Lazy> = Lazy::new(|| Mutex::new(SystemTime::now())); -static ACTIVITY_EVENT: Event = Event::new(); - -/// Wait till there's activity -pub async fn wait_activity(timeout: Duration) { - ACTIVITY_EVENT - .listen() - .or(async { - let adjusted_timeout = timeout.min( - Duration::from_secs_f64( - 1.5f64 - .powf( - LAST_ACTIVITY - .lock() - .elapsed() - .unwrap_or_else(|_| Duration::from_secs(1000)) - .as_secs_f64(), - ) - .min(10000.0), - ) - .max(Duration::from_secs(5)), - ); - smol::Timer::after(adjusted_timeout).await; - }) - .await -} - -/// Notifies of activity. -pub fn notify_activity() { - *LAST_ACTIVITY.lock() = SystemTime::now(); - ACTIVITY_EVENT.notify(usize::MAX); -} diff --git a/src/connect/tunnel/autoconnect.rs b/src/connect/tunnel/autoconnect.rs deleted file mode 100644 index 2ba5c57f..00000000 --- a/src/connect/tunnel/autoconnect.rs +++ /dev/null @@ -1,167 +0,0 @@ -use std::{ - marker::PhantomData, - sync::Arc, - time::{Duration, Instant}, -}; - -use async_trait::async_trait; -use bytes::Bytes; - -use smol::{ - channel::{Receiver, Sender}, - future::FutureExt, - Task, -}; -use sosistab2::Pipe; - -pub struct AutoconnectPipe { - protocol: String, - peer_metadata: String, - peer_addr: String, - - send_up: Sender, - recv_down: Receiver, - - _task: Task<()>, - - _p: PhantomData

, -} - -impl AutoconnectPipe

{ - /// Creates a new autoconnecting pipe. - pub fn new(pipe: P, recreate: impl Fn() -> Task

+ Send + Sync + 'static) -> Self { - let protocol = pipe.protocol().to_string(); - let peer_metadata = pipe.peer_metadata().to_string(); - let peer_addr = pipe.peer_addr(); - let (send_up, recv_up) = smol::channel::unbounded(); - let (send_down, recv_down) = smol::channel::unbounded(); - let _task = smolscale::spawn(autoconnect_loop( - recv_up, - send_down, - pipe, - recreate, - protocol.clone(), - peer_addr.clone(), - )); - Self { - _task, - - send_up, - recv_down, - - protocol, - peer_metadata, - peer_addr, - - _p: Default::default(), - } - } -} - -#[async_trait] -impl Pipe for AutoconnectPipe

{ - fn send(&self, to_send: Bytes) { - let _ = self.send_up.try_send(to_send); - } - - async fn recv(&self) -> std::io::Result { - self.recv_down - .recv() - .await - .map_err(|_e| std::io::Error::new(std::io::ErrorKind::BrokenPipe, "shuffler died")) - } - - fn protocol(&self) -> &str { - &self.protocol - } - - fn peer_metadata(&self) -> &str { - &self.peer_metadata - } - - fn peer_addr(&self) -> String { - self.peer_addr.clone() - } -} - -async fn autoconnect_loop( - recv_up: Receiver, - send_down: Sender, - init_pipe: P, - recreate: impl Fn() -> Task

+ Send + Sync + 'static, - - protocol: String, - endpoint: String, -) { - scopeguard::defer!({ - log::debug!("**** AUTOCONNECT LOOP STOPPED ****"); - }); - - enum Event

{ - Up(Bytes), - Down(Bytes), - Replaced(P), - } - let mut current_pipe = init_pipe; - let mut replace_task: Option<(Receiver

, Task<()>)> = None; - let recreate = Arc::new(recreate); - loop { - let up_event = async { - let up = recv_up.recv().await?; - anyhow::Ok(Event::Up(up)) - }; - let dn_event = async { - anyhow::Ok(if let Ok(val) = current_pipe.recv().await { - Event::Down(val) - } else { - smol::future::pending().await - }) - }; - let replace_event = async { - if let Some((recv, _)) = replace_task.as_ref() { - anyhow::Ok(Event::Replaced(recv.recv().await?)) - } else { - smol::future::pending().await - } - }; - - match up_event.or(replace_event.or(dn_event)).await { - Ok(Event::Up(up)) => { - current_pipe.send(up); - // on average, we need 5 packets to break through - if replace_task.is_none() && fastrand::f64() < 0.2 { - let (send, recv) = smol::channel::bounded(1); - let protocol = protocol.clone(); - let endpoint = endpoint.clone(); - let recreate = recreate.clone(); - replace_task = Some(( - recv, - smolscale::spawn(async move { - smol::Timer::after(Duration::from_secs(5)).await; - let start = Instant::now(); - log::debug!("reconnecting {protocol}/{endpoint}..."); - let replacement = recreate().await; - log::debug!( - "reconnected {protocol}/{endpoint} in {:?}!", - start.elapsed() - ); - let _ = send.try_send(replacement); - }), - )); - } - } - Ok(Event::Down(dn)) => { - replace_task = None; - let _ = send_down.try_send(dn); - } - Ok(Event::Replaced(p)) => { - current_pipe = p; - replace_task = None; - } - Err(err) => { - log::warn!("error: {:?}", err); - smol::Timer::after(Duration::from_secs(1)).await; - } - } - } -} diff --git a/src/connect/tunnel/delay.rs b/src/connect/tunnel/delay.rs deleted file mode 100644 index a4d97503..00000000 --- a/src/connect/tunnel/delay.rs +++ /dev/null @@ -1,62 +0,0 @@ -use std::{ - sync::Arc, - time::{Duration, Instant}, -}; - -use async_trait::async_trait; -use bytes::Bytes; -use smol::{channel::Sender, Task}; -use sosistab2::Pipe; - -pub struct DelayPipe { - inner: Arc

, - send_outgoing: Sender<(Bytes, Instant)>, - delay: Duration, - _task: Task>, -} - -impl DelayPipe

{ - /// Creates a new Pipe that delays outgoing packets for the given duration. - pub fn new(pipe: P, delay: Duration) -> Self { - let pipe = Arc::new(pipe); - let (send_outgoing, recv_outgoing) = smol::channel::unbounded(); - let out_pipe = pipe.clone(); - let _task = smolscale::spawn(async move { - loop { - let (pkt, deadline) = recv_outgoing.recv().await?; - smol::Timer::at(deadline).await; - out_pipe.send(pkt); - } - }); - Self { - inner: pipe, - send_outgoing, - delay, - _task, - } - } -} -#[async_trait] -impl Pipe for DelayPipe

{ - fn send(&self, to_send: Bytes) { - let _ = self - .send_outgoing - .try_send((to_send, Instant::now() + self.delay)); - } - - async fn recv(&self) -> std::io::Result { - self.inner.recv().await - } - - fn protocol(&self) -> &str { - self.inner.protocol() - } - - fn peer_metadata(&self) -> &str { - self.inner.peer_metadata() - } - - fn peer_addr(&self) -> String { - self.inner.peer_addr() - } -} diff --git a/src/connect/tunnel/mod.rs b/src/connect/tunnel/mod.rs deleted file mode 100644 index 12ecb2d9..00000000 --- a/src/connect/tunnel/mod.rs +++ /dev/null @@ -1,190 +0,0 @@ - -use bytes::Bytes; - -use derivative::Derivative; -use geph_nat::GephNat; -use parking_lot::RwLock; - -use smol::channel::{Receiver, Sender}; -use smol_str::SmolStr; -use std::{net::SocketAddr, ops::Deref}; - -use sosistab2::Stream; -use std::sync::Arc; -use tunnel_actor::tunnel_actor; -pub mod activity; -mod getsess; - -mod autoconnect; -mod delay; -mod tunnel_actor; - -use std::net::Ipv4Addr; - -use crate::conninfo_store::ConnInfoStore; - -use self::activity::notify_activity; - -#[derive(Clone)] -pub enum EndpointSource { - Independent { endpoint: String }, - Binder(Arc, BinderTunnelParams), -} - -#[derive(Clone)] -pub struct BinderTunnelParams { - pub exit_server: Option, - pub use_bridges: bool, - pub force_bridge: Option, - pub force_protocol: Option, -} - -#[derive(Clone)] -struct TunnelCtx { - endpoint: EndpointSource, - recv_socks5_conn: Receiver<(String, Sender)>, - - connect_status: Arc>, - recv_vpn_outgoing: Receiver, - send_vpn_incoming: Sender, - - status_callback: Arc, -} - -/// A status update from a [ClientTunnel]. -#[derive(Clone, Debug, PartialEq, PartialOrd, Ord, Eq, Hash)] -#[non_exhaustive] -pub enum TunnelStatus { - /// Just about to connect to a given address, with the given protocol - PreConnect { addr: SocketAddr, protocol: SmolStr }, -} - -/// A ConnectionStatus shows the status of the tunnel. -#[derive(Clone, Derivative)] -#[derivative(Debug)] -pub enum ConnectionStatus { - Connecting, - Connected { - protocol: SmolStr, - address: SmolStr, - #[derivative(Debug = "ignore")] - vpn_client_ip: Option<(Ipv4Addr, Arc)>, - }, -} - -impl ConnectionStatus { - pub fn connected(&self) -> bool { - matches!(self, Self::Connected { .. }) - } -} - -/// A tunnel starts and keeps alive the best sosistab session it can under given constraints. -/// A sosistab Session is *a single end-to-end connection between a client and a server.* -/// This can be thought of as analogous to TcpStream, except all reads and writes are datagram-based and unreliable. -pub struct ClientTunnel { - endpoint: EndpointSource, - - connect_status: Arc>, - - send_vpn_outgoing: Sender, - recv_vpn_incoming: Receiver, - - open_socks5_conn: Sender<(String, Sender)>, - - _task: Arc>>, -} - -impl ClientTunnel { - /// Creates a new ClientTunnel. - pub fn new( - endpoint: EndpointSource, - status_callback: impl Fn(TunnelStatus) + Send + Sync + 'static, - ) -> Self { - let (send_socks5, recv_socks5) = smol::channel::unbounded(); - let (send_outgoing, recv_outgoing) = smol::channel::bounded(10000); - let (send_incoming, recv_incoming) = smol::channel::bounded(10000); - - let connect_status = Arc::new(RwLock::new(ConnectionStatus::Connecting)); - let ctx = TunnelCtx { - endpoint: endpoint.clone(), - recv_socks5_conn: recv_socks5, - - connect_status: connect_status.clone(), - send_vpn_incoming: send_incoming, - recv_vpn_outgoing: recv_outgoing, - status_callback: Arc::new(status_callback), - }; - let task = Arc::new(smolscale::spawn(tunnel_actor(ctx))); - - ClientTunnel { - endpoint, - - send_vpn_outgoing: send_outgoing, - recv_vpn_incoming: recv_incoming, - open_socks5_conn: send_socks5, - - connect_status, - _task: task, - } - } - - /// Returns the current connection status. - pub fn status(&self) -> ConnectionStatus { - self.connect_status.read().clone() - } - - /// Returns a sosistab stream to the given remote host. - pub async fn connect_stream(&self, remote: &str) -> anyhow::Result { - let (send, recv) = smol::channel::bounded(1); - self.open_socks5_conn - .send((remote.to_string(), send)) - .await?; - Ok(recv.recv().await?) - } - - pub async fn send_vpn(&self, msg: &[u8]) -> anyhow::Result<()> { - notify_activity(); - let mangled_msg = { - let status = self.connect_status.read(); - if let ConnectionStatus::Connected { - protocol: _, - address: _, - vpn_client_ip: Some((_, nat)), - } = status.deref() - { - nat.mangle_upstream_pkt(msg) - } else { - None - } - }; - if let Some(msg) = mangled_msg { - self.send_vpn_outgoing.send(msg).await?; - } - Ok(()) - } - - pub async fn recv_vpn(&self) -> anyhow::Result { - loop { - let msg = self.recv_vpn_incoming.recv().await?; - let status = self.connect_status.read(); - if let ConnectionStatus::Connected { - protocol: _, - address: _, - vpn_client_ip: Some((_, nat)), - } = status.deref() - { - if let Some(msg) = nat.mangle_downstream_pkt(&msg) { - return Ok(msg); - } - } else { - anyhow::bail!( - "cannot processed received VPN when connection status is not connected" - ) - } - } - } - - pub fn get_endpoint(&self) -> EndpointSource { - self.endpoint.clone() - } -} diff --git a/src/connect/tunnel/tunnel_actor.rs b/src/connect/tunnel/tunnel_actor.rs deleted file mode 100644 index ee8ae20c..00000000 --- a/src/connect/tunnel/tunnel_actor.rs +++ /dev/null @@ -1,267 +0,0 @@ -use crate::connect::{ - stats::{StatItem, STATS_GATHERER, STATS_RECV_BYTES, STATS_SEND_BYTES}, - tunnel::{ConnectionStatus, EndpointSource}, -}; - -use super::{ - activity::{notify_activity, wait_activity}, - getsess::get_session, - TunnelCtx, -}; -use anyhow::Context; -use async_trait::async_trait; -use bytes::Bytes; -use geph4_protocol::{ - binder::protocol::BlindToken, - client_exit::{ClientExitClient, CLIENT_EXIT_PSEUDOHOST}, -}; -use geph_nat::GephNat; -use std::{net::Ipv4Addr, sync::atomic::Ordering, time::SystemTime}; - -use nanorpc::{JrpcRequest, JrpcResponse, RpcTransport}; - -use smol::{ - channel::{Receiver, Sender}, - io::BufReader, - prelude::*, -}; -use smol_timeout::TimeoutExt; -use sosistab2::{Pipe, Stream}; - -use std::{sync::Arc, time::Duration, time::Instant}; - -/// Background task of a TunnelManager -pub(super) async fn tunnel_actor(ctx: TunnelCtx) -> anyhow::Result<()> { - loop { - // Run until a failure happens, log the error, then restart - if let Err(err) = tunnel_actor_once(ctx.clone()).await { - log::warn!("tunnel_actor restarting: {:?}", err); - - smol::Timer::after(Duration::from_secs(1)).await; - } - } -} - -async fn tunnel_actor_once(ctx: TunnelCtx) -> anyhow::Result<()> { - let _start = Instant::now(); - - let ctx1 = ctx.clone(); - - notify_activity(); - - let tunnel_mux = get_session(&ctx).await?; - - let vpn_ip = if let EndpointSource::Binder(conninfo, _) = ctx.endpoint.clone() { - let auth_start = Instant::now(); - // authenticate - let token = conninfo.blind_token().await?; - let ipv4 = authenticate_session(&tunnel_mux, &token) - .timeout(Duration::from_secs(60)) - .await - .ok_or_else(|| anyhow::anyhow!("authentication timed out"))??; - let auth_time = auth_start.elapsed().as_secs_f64(); - log::debug!("auth time: {}s", auth_time); - log::info!("VPN private IP assigned: {ipv4}"); - Some(ipv4) - } else { - None - }; - - log::info!("TUNNEL_ACTOR MAIN LOOP!"); - *ctx.connect_status.write() = ConnectionStatus::Connected { - protocol: "sosistab2".into(), - address: "dynamic".into(), - vpn_client_ip: vpn_ip.map(|ip| (ip, Arc::new(GephNat::new(1000, ip)))), - }; - - let ctx2 = ctx.clone(); - scopeguard::defer!({ - *ctx2.connect_status.write() = ConnectionStatus::Connecting; - }); - - let (send_death, recv_death) = smol::channel::unbounded(); - - connection_handler_loop(ctx1.clone(), tunnel_mux.clone(), send_death) - .or(async { - // kill the whole session if any one connection fails - let e = recv_death.recv().await.context("death received")?; - anyhow::bail!(e) - }) - .or(watchdog_loop(ctx1.clone(), tunnel_mux.clone())) - .or(vpn_loop( - tunnel_mux.clone(), - ctx.send_vpn_incoming, - ctx.recv_vpn_outgoing, - )) - .await -} - -/// authenticates a muxed session -async fn authenticate_session( - session: &sosistab2::Multiplex, - token: &BlindToken, -) -> anyhow::Result { - let tport = StreamTransport::new(session.open_conn(CLIENT_EXIT_PSEUDOHOST).await?); - let client = ClientExitClient::from(tport); - if !client.validate(token.clone()).await? { - anyhow::bail!("invalid authentication token") - } - let addr = client - .get_vpn_ipv4() - .await? - .context("server did not provide VPN address")?; - Ok(addr) -} - -struct StreamTransport { - write: smol::lock::Mutex, - read: smol::lock::Mutex>, -} - -impl StreamTransport { - fn new(stream: Stream) -> Self { - Self { - write: stream.clone().into(), - read: BufReader::new(stream).into(), - } - } -} - -#[async_trait] -impl RpcTransport for StreamTransport { - type Error = anyhow::Error; - - async fn call_raw(&self, jrpc: JrpcRequest) -> anyhow::Result { - let mut write = self.write.lock().await; - write.write_all(&serde_json::to_vec(&jrpc)?).await?; - write.write_all(b"\n").await?; - let mut in_line = String::new(); - let mut read = self.read.lock().await; - read.read_line(&mut in_line).await?; - let incoming: JrpcResponse = serde_json::from_str(&in_line)?; - Ok(incoming) - } -} - -async fn vpn_loop( - mux: Arc, - send_incoming: Sender, - recv_outgoing: Receiver, -) -> anyhow::Result<()> { - let wire = mux.open_conn(CLIENT_EXIT_PSEUDOHOST).await?; - let uploop = async { - loop { - let to_send = recv_outgoing.recv().await?; - wire.send_urel(stdcode::serialize(&vec![to_send])?.into()) - .await?; - } - }; - let dnloop = async { - loop { - let received = wire.recv_urel().await?; - let received: Vec = stdcode::deserialize(&received)?; - for received in received { - send_incoming.send(received).await?; - } - } - }; - uploop.race(dnloop).await -} - -// handles socks5 connection requests -async fn connection_handler_loop( - ctx: TunnelCtx, - mux: Arc, - send_death: Sender, -) -> anyhow::Result<()> { - loop { - let (conn_host, conn_reply) = ctx - .recv_socks5_conn - .recv() - .await - .context("cannot get socks5 connect request")?; - let mux = mux.clone(); - let send_death = send_death.clone(); - notify_activity(); - smolscale::spawn(async move { - let start = Instant::now(); - let remote = mux - .open_conn(&conn_host) - .timeout(Duration::from_secs(60)) - .await; - match remote { - Some(Ok(remote)) => { - log::debug!( - "opened connection to {} in {} ms", - conn_host, - start.elapsed().as_millis(), - ); - - conn_reply.send(remote).await.context("conn_reply failed")?; - Ok::<(), anyhow::Error>(()) - } - Some(Err(err)) => { - send_death - .send(anyhow::anyhow!( - "conn open error {} in {}s", - err, - start.elapsed().as_secs_f64() - )) - .await?; - Ok(()) - } - None => { - send_death - .send(anyhow::anyhow!( - "conn timeout in {}s", - start.elapsed().as_secs_f64() - )) - .await?; - Ok(()) - } - } - }) - .detach(); - } -} - -// keeps the connection alive -async fn watchdog_loop( - _ctx: TunnelCtx, - tunnel_mux: Arc, -) -> anyhow::Result<()> { - loop { - let start = Instant::now(); - if tunnel_mux - .open_conn(CLIENT_EXIT_PSEUDOHOST) - .timeout(Duration::from_secs(30)) - .await - .is_none() - { - log::warn!("watchdog conn failed! resetting..."); - anyhow::bail!("watchdog failed"); - } else { - let ping = start.elapsed(); - let pipe = tunnel_mux.last_recv_pipe().context("no pipe")?; - let item = StatItem { - time: SystemTime::now(), - endpoint: pipe.peer_addr().into(), - protocol: pipe.protocol().into(), - ping, - send_bytes: STATS_SEND_BYTES.load(Ordering::Relaxed), - recv_bytes: STATS_RECV_BYTES.load(Ordering::Relaxed), - }; - STATS_GATHERER.push(item.clone()); - log::debug!( - "** watchdog completed in {:?} through {}/{} **", - ping, - pipe.protocol(), - pipe.peer_addr() - ); - } - - let timer = smol::Timer::after(Duration::from_secs(10)); - wait_activity(Duration::from_secs(600)).await; - timer.await; - } -} diff --git a/src/connect/vpn.rs b/src/connect/vpn.rs index 539b0f4d..29a66778 100644 --- a/src/connect/vpn.rs +++ b/src/connect/vpn.rs @@ -4,14 +4,9 @@ use smol::future::FutureExt; use super::ConnectContext; use crate::config::VpnMode; -#[cfg(target_os = "linux")] -mod linux_routing; - -#[cfg(target_os = "windows")] -mod windows_routing; #[cfg(unix)] -use std::os::unix::prelude::{AsRawFd, FromRawFd}; +use std::os::unix::prelude::FromRawFd; pub(super) async fn vpn_loop(ctx: ConnectContext) -> anyhow::Result<()> { #[cfg(any(target_os = "linux", target_os = "android"))] @@ -23,45 +18,10 @@ pub(super) async fn vpn_loop(ctx: ConnectContext) -> anyhow::Result<()> { return unsafe { fd_vpn_loop(ctx, fd_num).await }; } - #[cfg(target_os = "linux")] - if ctx.opt.vpn_mode == Some(VpnMode::TunNoRoute) { - let device = configure_tun_device(); - return unsafe { fd_vpn_loop(ctx, device.as_raw_fd()).await }; - } - - #[cfg(target_os = "linux")] - if ctx.opt.vpn_mode == Some(VpnMode::TunRoute) { - let device = configure_tun_device(); - return unsafe { - fd_vpn_loop(ctx.clone(), device.as_raw_fd()) - .race(linux_routing::routing_loop(ctx.clone())) - .await - }; - } - - #[cfg(target_os = "windows")] - if ctx.opt.vpn_mode == Some(VpnMode::WinDivert) { - return windows_routing::start_routing(ctx).await; - } smol::future::pending().await } -#[cfg(target_os = "linux")] -fn configure_tun_device() -> tun::platform::Device { - let device = tun::platform::Device::new( - tun::Configuration::default() - .name("tun-geph") - .address("100.64.89.64") - .netmask("255.255.255.0") - .destination("100.64.0.1") - .mtu(16384) - .up(), - ) - .expect("could not initialize TUN device"); - device -} - #[cfg(any(target_os = "linux", target_os = "android"))] async unsafe fn fd_vpn_loop(ctx: ConnectContext, fd_num: i32) -> anyhow::Result<()> { log::info!("entering fd_vpn_loop"); diff --git a/src/connect/vpn/linux_routing.rs b/src/connect/vpn/linux_routing.rs deleted file mode 100644 index c79b1c8c..00000000 --- a/src/connect/vpn/linux_routing.rs +++ /dev/null @@ -1,132 +0,0 @@ -use std::{process::Command, time::Duration}; - -use crate::connect::ConnectContext; -use anyhow::Context; -use async_signal::{Signal, Signals}; -use clone_macro::clone; -use dashmap::DashMap; -use itertools::Itertools; -use once_cell::sync::Lazy; - -use smol::stream::StreamExt; -use tap::Tap; - -use std::net::IpAddr; - -struct SingleWhitelister { - dest: IpAddr, -} - -impl Drop for SingleWhitelister { - fn drop(&mut self) { - log::debug!("DROPPING whitelist to {}", self.dest); - Command::new("sh") - .arg("-c") - .arg(format!( - "/usr/bin/env ip rule del to {} lookup main pref 1", - self.dest - )) - .status() - .expect("cannot run iptables"); - } -} - -impl SingleWhitelister { - fn new(dest: IpAddr) -> Self { - Command::new("sh") - .arg("-c") - .arg(format!( - "/usr/bin/env ip rule add to {} lookup main pref 1", - dest - )) - .status() - .expect("cannot run iptables"); - Self { dest } - } -} - -static WHITELIST: Lazy> = Lazy::new(DashMap::new); - -static LOCK: smol::lock::Mutex<()> = smol::lock::Mutex::new(()); - -pub(super) async fn routing_loop(ctx: ConnectContext) -> anyhow::Result<()> { - let _lock = LOCK - .try_lock() - .expect("only one VPN instance can run at the same"); - - // first whitelist all - log::debug!("whitelisting all"); - whitelist_once(&ctx).await?; - - // then spawn a background task to continually whitelist - let _bg_whitelist = smolscale::spawn(clone!([ctx], async move { - loop { - let _ = whitelist_once(&ctx).await; - smol::Timer::after(Duration::from_secs(1)).await; - } - })); - - // then wait for connection to become fully functional - log::debug!("waiting for tunnel to become fully functional"); - ctx.tunnel.connect_stream("1.1.1.1:53").await?; - - // setup routing - // redirect DNS to 1.1.1.1 - log::debug!("setting up VPN routing"); - std::env::set_var( - "GEPH_DNS", - ctx.opt - .dns_listen - .tap_mut(|d| d.set_ip("127.0.0.1".parse().unwrap())) - .to_string(), - ); - let cmd = include_str!("linux_routing_setup.sh"); - let mut child = smol::process::Command::new("sh") - .arg("-c") - .arg(cmd) - .spawn() - .unwrap(); - child - .status() - .await - .context("iptables was not set up properly")?; - - unsafe { - libc::atexit(teardown_routing); - } - - scopeguard::defer!(teardown_routing()); - - let mut signals = Signals::new([Signal::Term, Signal::Quit, Signal::Int]) - .context("did not register signal handler properly")?; - - while let Some(_signal) = signals.next().await { - teardown_routing(); - std::process::exit(-1) - } - - Ok(()) -} - -async fn whitelist_once(ctx: &ConnectContext) -> anyhow::Result<()> { - let bridge = ctx.conn_info.bridges().await?; - for bridge in bridge { - let addr = bridge.endpoint.ip(); - WHITELIST.entry(addr).or_insert_with(move || { - log::debug!("making whitelist entry for {}", addr); - SingleWhitelister::new(addr) - }); - } - Ok(()) -} - -extern "C" fn teardown_routing() { - log::debug!("teardown_routing starting!"); - WHITELIST.clear(); - let cmd = include_str!("linux_routing_setup.sh") - .lines() - .filter(|l| l.contains("-D") || l.contains("del") || l.contains("flush")) - .join("\n"); - let mut child = Command::new("sh").arg("-c").arg(cmd).spawn().unwrap(); - child.wait().expect("iptables was not set up properly"); -} diff --git a/src/connect/vpn/linux_routing_setup.sh b/src/connect/vpn/linux_routing_setup.sh deleted file mode 100644 index efb80a4d..00000000 --- a/src/connect/vpn/linux_routing_setup.sh +++ /dev/null @@ -1,36 +0,0 @@ -export PATH=$PATH:/usr/sbin/:/sbin/ -ip route flush table 8964 -ip route add default dev tun-geph table 8964 -# ip rule del not fwmark 8964 table 8964 -# ip rule add not fwmark 8964 table 8964 -ip rule del table main suppress_prefixlength 0 -ip rule add table main suppress_prefixlength 0 -ip rule del to all lookup 8964 pref 2 -ip rule add to all lookup 8964 pref 2 -iptables -t nat -D OUTPUT -p udp --dport 53 -j DNAT --to $GEPH_DNS -iptables -t nat -D OUTPUT -p tcp --dport 53 -j DNAT --to $GEPH_DNS -iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to $GEPH_DNS -iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to $GEPH_DNS -# # mark the owner -# iptables -D OUTPUT -t mangle -m owner ! --uid-owner `id -u` -j MARK --set-mark 8964 -# iptables -A OUTPUT -t mangle -m owner ! --uid-owner `id -u` -j MARK --set-mark 8964 -# iptables -D OUTPUT -t mangle -d 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 -j MARK --set-mark 11111 -# iptables -A OUTPUT -t mangle -d 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 -j MARK --set-mark 11111 -# # set up routing tables -# ip route flush table 8964 -# ip route add default dev tun-geph table 8964 -# ip rule del fwmark 8964 table 8964 -# ip rule add fwmark 8964 table 8964 -# # mangle -# iptables -t nat -D POSTROUTING -o tun-geph -j MASQUERADE -# iptables -t nat -A POSTROUTING -o tun-geph -j MASQUERADE -# # redirect DNS - -# # clamp MTU -# iptables -t mangle -D OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1240 -# iptables -t mangle -A OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1240 -# block ipv6 completely -ip6tables -D OUTPUT -o lo -j ACCEPT -ip6tables -A OUTPUT -o lo -j ACCEPT -ip6tables -D OUTPUT -j REJECT -ip6tables -A OUTPUT -j REJECT \ No newline at end of file diff --git a/src/connect/vpn/macos_routing.rs b/src/connect/vpn/macos_routing.rs deleted file mode 100644 index 449f3fca..00000000 --- a/src/connect/vpn/macos_routing.rs +++ /dev/null @@ -1,27 +0,0 @@ -use std::time::Duration; - -use dashmap::DashMap; -use once_cell::sync::Lazy; -use std::net::IpAddr; - -use crate::connect::TUNNEL; - -static WHITELIST: Lazy>> = Lazy::new(DashMap::new); -pub fn setup_routing(tun_name: &str) { - while !TUNNEL.status().connected() { - log::debug!("waiting for connection before routing things through VPN..."); - std::thread::sleep(Duration::from_secs(1)); - } - // Do the actual routing - log::info!("forcing traffic through VPN!"); - let uname = whoami::username(); - let interface = default_net::get_default_interface().expect("cannot get default interface"); - let iname = interface.name; - std::process::Command::new("/bin/sh") - .arg("-c") - .arg(format!( - "echo \"pass out quick on {iname} route-to {tun_name} user != {uname}\" | pfctl -ef -" - )) - .status() - .expect("could not run pfctl"); -} diff --git a/src/connect/vpn/windows_routing.rs b/src/connect/vpn/windows_routing.rs deleted file mode 100644 index 50c0f932..00000000 --- a/src/connect/vpn/windows_routing.rs +++ /dev/null @@ -1,148 +0,0 @@ -use crate::connect::ConnectContext; -use clone_macro::clone; -use dashmap::DashSet; -use once_cell::sync::Lazy; -use pnet_packet::{ip::IpNextHeaderProtocols, MutablePacket}; -use std::net::{IpAddr, Ipv4Addr}; -use std::sync::Arc; -use std::{ - convert::Infallible, - sync::atomic::{AtomicU32, Ordering}, - time::Duration, -}; - -mod windivert; - -static GEPH_OWN_ADDRS: Lazy> = Lazy::new(DashSet::new); - -pub async fn start_routing(ctx: ConnectContext) -> anyhow::Result<()> { - whitelist_once(&ctx).await?; - let _bg_whitelist = smolscale::spawn(clone!([ctx], async move { - loop { - let _ = whitelist_once(&ctx).await; - smol::Timer::after(Duration::from_secs(1)).await; - } - })); - - // then wait for connection to become fully functional - log::debug!("waiting for tunnel to become fully functional"); - ctx.tunnel.connect_stream("1.1.1.1:53").await?; - - let handle = Arc::new(windivert::PacketHandle::open( - "outbound and not loopback", - -100, - )?); - std::thread::spawn(clone!([ctx, handle], move || upload_loop(ctx, handle))); - std::thread::spawn(clone!([ctx, handle], move || download_loop(ctx, handle))); - smol::future::pending().await -} - -async fn whitelist_once(ctx: &ConnectContext) -> anyhow::Result<()> { - let bridge = ctx.conn_info.bridges().await?; - for bridge in bridge { - let addr = bridge.endpoint.ip(); - GEPH_OWN_ADDRS.insert(addr); - } - Ok(()) -} - -static FAKE_DNS_SERVER: AtomicU32 = AtomicU32::new(0); -static REAL_DNS_SERVER: Ipv4Addr = Ipv4Addr::new(1, 1, 1, 1); - -fn download_loop(ctx: ConnectContext, handle: Arc) -> Infallible { - loop { - let mut pkt = smol::future::block_on(ctx.tunnel.recv_vpn()) - .unwrap() - .to_vec(); - let mut mangled = false; - if let Some(mut ip_pkt) = pnet_packet::ipv4::MutableIpv4Packet::new(&mut pkt) { - if let Some(udp_pkt) = pnet_packet::udp::MutableUdpPacket::new(ip_pkt.payload_mut()) { - if udp_pkt.get_source() == 53 { - mangled = true; - } - } - if mangled { - ip_pkt.set_source(FAKE_DNS_SERVER.load(Ordering::SeqCst).into()) - } - } - if mangled { - fix_all_checksums(&mut pkt); - } - handle.inject(&pkt, false).expect("cannot inject"); - } -} - -fn upload_loop(ctx: ConnectContext, handle: Arc) { - loop { - let pkt = handle.receive(); - match pkt { - Ok(mut pkt) => { - let pkt_dest: Option = - pnet_packet::ipv4::Ipv4Packet::new(&pkt).map(|parsed| parsed.get_destination()); - if let Some(pkt_dest) = pkt_dest { - let pkt_dest: IpAddr = pkt_dest.into(); - let is_geph = GEPH_OWN_ADDRS.contains(&pkt_dest); - if is_geph { - // merely reinject - handle.inject(&pkt, true).expect("cannot inject"); - } else { - // mangle the dns to 1.1.1.1 - let mut mangled = false; - if let Some(mut ip_pkt) = - pnet_packet::ipv4::MutableIpv4Packet::new(&mut pkt) - { - if let Some(udp_pkt) = - pnet_packet::udp::MutableUdpPacket::new(ip_pkt.payload_mut()) - { - if udp_pkt.get_destination() == 53 { - mangled = true; - } - } - if mangled { - FAKE_DNS_SERVER - .store(ip_pkt.get_destination().into(), Ordering::SeqCst); - ip_pkt.set_destination(REAL_DNS_SERVER); - } - } - if mangled { - fix_all_checksums(&mut pkt); - } - // pass to geph - smol::future::block_on(ctx.tunnel.send_vpn(&pkt)); - } - } - } - Err(err) => { - log::error!("windivert error: {:?}", err); - std::thread::sleep(Duration::from_secs(1)); - } - } - } -} - -fn fix_all_checksums(bts: &mut [u8]) -> Option<()> { - let mut ip_layer = pnet_packet::ipv4::MutableIpv4Packet::new(bts)?; - let source = ip_layer.get_source(); - let destination = ip_layer.get_destination(); - // match on UDP vs TCP - match ip_layer.get_next_level_protocol() { - IpNextHeaderProtocols::Tcp => { - // extract the payload and modify its checksum too - let mut tcp_layer = pnet_packet::tcp::MutableTcpPacket::new(ip_layer.payload_mut())?; - let tcp_checksum = - pnet_packet::tcp::ipv4_checksum(&tcp_layer.to_immutable(), &source, &destination); - tcp_layer.set_checksum(tcp_checksum) - } - IpNextHeaderProtocols::Udp => { - // extract the payload and modify its checksum too - let mut udp_layer = pnet_packet::udp::MutableUdpPacket::new(ip_layer.payload_mut())?; - let udp_checksum = - pnet_packet::udp::ipv4_checksum(&udp_layer.to_immutable(), &source, &destination); - udp_layer.set_checksum(udp_checksum) - } - _ => (), - } - let ip_checksum = pnet_packet::ipv4::checksum(&ip_layer.to_immutable()); - ip_layer.set_checksum(ip_checksum); - Some(()) -} diff --git a/src/connect/vpn/windows_routing/windivert/bindings.rs b/src/connect/vpn/windows_routing/windivert/bindings.rs deleted file mode 100644 index 99476a84..00000000 --- a/src/connect/vpn/windows_routing/windivert/bindings.rs +++ /dev/null @@ -1,951 +0,0 @@ -#![allow(warnings, dead_code)] -/* automatically generated by rust-bindgen 0.56.0 */ -#[repr(C)] -#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] -pub struct __BindgenBitfieldUnit { - storage: Storage, - align: [Align; 0], -} -impl __BindgenBitfieldUnit { - #[inline] - pub const fn new(storage: Storage) -> Self { - Self { storage, align: [] } - } -} -impl __BindgenBitfieldUnit -where - Storage: AsRef<[u8]> + AsMut<[u8]>, -{ - #[inline] - pub fn get_bit(&self, index: usize) -> bool { - debug_assert!(index / 8 < self.storage.as_ref().len()); - let byte_index = index / 8; - let byte = self.storage.as_ref()[byte_index]; - let bit_index = if cfg!(target_endian = "big") { - 7 - (index % 8) - } else { - index % 8 - }; - let mask = 1 << bit_index; - byte & mask == mask - } - #[inline] - pub fn set_bit(&mut self, index: usize, val: bool) { - debug_assert!(index / 8 < self.storage.as_ref().len()); - let byte_index = index / 8; - let byte = &mut self.storage.as_mut()[byte_index]; - let bit_index = if cfg!(target_endian = "big") { - 7 - (index % 8) - } else { - index % 8 - }; - let mask = 1 << bit_index; - if val { - *byte |= mask; - } else { - *byte &= !mask; - } - } - #[inline] - pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 { - debug_assert!(bit_width <= 64); - debug_assert!(bit_offset / 8 < self.storage.as_ref().len()); - debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len()); - let mut val = 0; - for i in 0..(bit_width as usize) { - if self.get_bit(i + bit_offset) { - let index = if cfg!(target_endian = "big") { - bit_width as usize - 1 - i - } else { - i - }; - val |= 1 << index; - } - } - val - } - #[inline] - pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) { - debug_assert!(bit_width <= 64); - debug_assert!(bit_offset / 8 < self.storage.as_ref().len()); - debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len()); - for i in 0..(bit_width as usize) { - let mask = 1 << i; - let val_bit_is_set = val & mask == mask; - let index = if cfg!(target_endian = "big") { - bit_width as usize - 1 - i - } else { - i - }; - self.set_bit(index + bit_offset, val_bit_is_set); - } - } -} -pub const WINDIVERT_FLAG_SNIFF: u32 = 1; -pub const WINDIVERT_FLAG_RECV_ONLY: u32 = 4; -pub type DWORD = ::std::os::raw::c_ulong; -pub type BOOL = ::std::os::raw::c_int; -pub type UINT = ::std::os::raw::c_uint; -pub type INT16 = ::std::os::raw::c_short; -pub type INT64 = ::std::os::raw::c_longlong; -pub type UINT8 = ::std::os::raw::c_uchar; -pub type UINT16 = ::std::os::raw::c_ushort; -pub type UINT32 = ::std::os::raw::c_uint; -pub type UINT64 = ::std::os::raw::c_ulonglong; -pub type ULONG_PTR = ::std::os::raw::c_ulonglong; -pub type PVOID = *mut ::std::os::raw::c_void; -pub type HANDLE = *mut ::std::os::raw::c_void; -#[repr(C)] -#[derive(Copy, Clone)] -pub struct _OVERLAPPED { - pub Internal: ULONG_PTR, - pub InternalHigh: ULONG_PTR, - pub __bindgen_anon_1: _OVERLAPPED__bindgen_ty_1, - pub hEvent: HANDLE, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union _OVERLAPPED__bindgen_ty_1 { - pub __bindgen_anon_1: _OVERLAPPED__bindgen_ty_1__bindgen_ty_1, - pub Pointer: PVOID, - _bindgen_union_align: u64, -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _OVERLAPPED__bindgen_ty_1__bindgen_ty_1 { - pub Offset: DWORD, - pub OffsetHigh: DWORD, -} -#[test] -fn bindgen_test_layout__OVERLAPPED__bindgen_ty_1__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<_OVERLAPPED__bindgen_ty_1__bindgen_ty_1>(), - 8usize, - concat!( - "Size of: ", - stringify!(_OVERLAPPED__bindgen_ty_1__bindgen_ty_1) - ) - ); - assert_eq!( - ::std::mem::align_of::<_OVERLAPPED__bindgen_ty_1__bindgen_ty_1>(), - 4usize, - concat!( - "Alignment of ", - stringify!(_OVERLAPPED__bindgen_ty_1__bindgen_ty_1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_OVERLAPPED__bindgen_ty_1__bindgen_ty_1>())).Offset as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_OVERLAPPED__bindgen_ty_1__bindgen_ty_1), - "::", - stringify!(Offset) - ) - ); - - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_OVERLAPPED__bindgen_ty_1__bindgen_ty_1>())).OffsetHigh - as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(_OVERLAPPED__bindgen_ty_1__bindgen_ty_1), - "::", - stringify!(OffsetHigh) - ) - ); -} -#[test] -fn bindgen_test_layout__OVERLAPPED__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<_OVERLAPPED__bindgen_ty_1>(), - 8usize, - concat!("Size of: ", stringify!(_OVERLAPPED__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<_OVERLAPPED__bindgen_ty_1>(), - 8usize, - concat!("Alignment of ", stringify!(_OVERLAPPED__bindgen_ty_1)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_OVERLAPPED__bindgen_ty_1>())).Pointer as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_OVERLAPPED__bindgen_ty_1), - "::", - stringify!(Pointer) - ) - ); -} -#[test] -fn bindgen_test_layout__OVERLAPPED() { - assert_eq!( - ::std::mem::size_of::<_OVERLAPPED>(), - 32usize, - concat!("Size of: ", stringify!(_OVERLAPPED)) - ); - assert_eq!( - ::std::mem::align_of::<_OVERLAPPED>(), - 8usize, - concat!("Alignment of ", stringify!(_OVERLAPPED)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_OVERLAPPED>())).Internal as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_OVERLAPPED), - "::", - stringify!(Internal) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_OVERLAPPED>())).InternalHigh as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_OVERLAPPED), - "::", - stringify!(InternalHigh) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_OVERLAPPED>())).hEvent as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(_OVERLAPPED), - "::", - stringify!(hEvent) - ) - ); -} -pub type LPOVERLAPPED = *mut _OVERLAPPED; -extern "C" { - pub fn GetLastError() -> DWORD; -} -pub const WINDIVERT_LAYER_WINDIVERT_LAYER_NETWORK: WINDIVERT_LAYER = 0; -pub const WINDIVERT_LAYER_WINDIVERT_LAYER_NETWORK_FORWARD: WINDIVERT_LAYER = 1; -pub const WINDIVERT_LAYER_WINDIVERT_LAYER_FLOW: WINDIVERT_LAYER = 2; -pub const WINDIVERT_LAYER_WINDIVERT_LAYER_SOCKET: WINDIVERT_LAYER = 3; -pub const WINDIVERT_LAYER_WINDIVERT_LAYER_REFLECT: WINDIVERT_LAYER = 4; -pub type WINDIVERT_LAYER = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct WINDIVERT_DATA_NETWORK { - pub IfIdx: UINT32, - pub SubIfIdx: UINT32, -} -#[test] -fn bindgen_test_layout_WINDIVERT_DATA_NETWORK() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(WINDIVERT_DATA_NETWORK)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(WINDIVERT_DATA_NETWORK)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).IfIdx as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_NETWORK), - "::", - stringify!(IfIdx) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).SubIfIdx as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_NETWORK), - "::", - stringify!(SubIfIdx) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct WINDIVERT_DATA_FLOW { - pub EndpointId: UINT64, - pub ParentEndpointId: UINT64, - pub ProcessId: UINT32, - pub LocalAddr: [UINT32; 4usize], - pub RemoteAddr: [UINT32; 4usize], - pub LocalPort: UINT16, - pub RemotePort: UINT16, - pub Protocol: UINT8, -} -#[test] -fn bindgen_test_layout_WINDIVERT_DATA_FLOW() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(WINDIVERT_DATA_FLOW)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(WINDIVERT_DATA_FLOW)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).EndpointId as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(EndpointId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ParentEndpointId as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(ParentEndpointId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ProcessId as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(ProcessId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).LocalAddr as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(LocalAddr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).RemoteAddr as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(RemoteAddr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).LocalPort as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(LocalPort) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).RemotePort as *const _ as usize }, - 54usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(RemotePort) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Protocol as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_FLOW), - "::", - stringify!(Protocol) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct WINDIVERT_DATA_SOCKET { - pub EndpointId: UINT64, - pub ParentEndpointId: UINT64, - pub ProcessId: UINT32, - pub LocalAddr: [UINT32; 4usize], - pub RemoteAddr: [UINT32; 4usize], - pub LocalPort: UINT16, - pub RemotePort: UINT16, - pub Protocol: UINT8, -} -#[test] -fn bindgen_test_layout_WINDIVERT_DATA_SOCKET() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(WINDIVERT_DATA_SOCKET)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(WINDIVERT_DATA_SOCKET)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).EndpointId as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(EndpointId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ParentEndpointId as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(ParentEndpointId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ProcessId as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(ProcessId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).LocalAddr as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(LocalAddr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).RemoteAddr as *const _ as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(RemoteAddr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).LocalPort as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(LocalPort) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).RemotePort as *const _ as usize - }, - 54usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(RemotePort) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Protocol as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_SOCKET), - "::", - stringify!(Protocol) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct WINDIVERT_DATA_REFLECT { - pub Timestamp: INT64, - pub ProcessId: UINT32, - pub Layer: WINDIVERT_LAYER, - pub Flags: UINT64, - pub Priority: INT16, -} -#[test] -fn bindgen_test_layout_WINDIVERT_DATA_REFLECT() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(WINDIVERT_DATA_REFLECT)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(WINDIVERT_DATA_REFLECT)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).Timestamp as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_REFLECT), - "::", - stringify!(Timestamp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ProcessId as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_REFLECT), - "::", - stringify!(ProcessId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Layer as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_REFLECT), - "::", - stringify!(Layer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Flags as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_REFLECT), - "::", - stringify!(Flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Priority as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_DATA_REFLECT), - "::", - stringify!(Priority) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct WINDIVERT_ADDRESS { - pub Timestamp: INT64, - pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize], u8>, - pub Reserved2: UINT32, - pub __bindgen_anon_1: WINDIVERT_ADDRESS__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union WINDIVERT_ADDRESS__bindgen_ty_1 { - pub Network: WINDIVERT_DATA_NETWORK, - pub Flow: WINDIVERT_DATA_FLOW, - pub Socket: WINDIVERT_DATA_SOCKET, - pub Reflect: WINDIVERT_DATA_REFLECT, - pub Reserved3: [UINT8; 64usize], - _bindgen_union_align: [u64; 8usize], -} -#[test] -fn bindgen_test_layout_WINDIVERT_ADDRESS__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(WINDIVERT_ADDRESS__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(WINDIVERT_ADDRESS__bindgen_ty_1)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).Network as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS__bindgen_ty_1), - "::", - stringify!(Network) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).Flow as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS__bindgen_ty_1), - "::", - stringify!(Flow) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).Socket as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS__bindgen_ty_1), - "::", - stringify!(Socket) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).Reflect as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS__bindgen_ty_1), - "::", - stringify!(Reflect) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).Reserved3 as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS__bindgen_ty_1), - "::", - stringify!(Reserved3) - ) - ); -} -#[test] -fn bindgen_test_layout_WINDIVERT_ADDRESS() { - assert_eq!( - ::std::mem::size_of::(), - 80usize, - concat!("Size of: ", stringify!(WINDIVERT_ADDRESS)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(WINDIVERT_ADDRESS)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Timestamp as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS), - "::", - stringify!(Timestamp) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Reserved2 as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(WINDIVERT_ADDRESS), - "::", - stringify!(Reserved2) - ) - ); -} -impl WINDIVERT_ADDRESS { - #[inline] - pub fn Layer(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 8u8) as u32) } - } - #[inline] - pub fn set_Layer(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(0usize, 8u8, val as u64) - } - } - #[inline] - pub fn Event(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(8usize, 8u8) as u32) } - } - #[inline] - pub fn set_Event(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(8usize, 8u8, val as u64) - } - } - #[inline] - pub fn Sniffed(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(16usize, 1u8) as u32) } - } - #[inline] - pub fn set_Sniffed(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(16usize, 1u8, val as u64) - } - } - #[inline] - pub fn Outbound(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(17usize, 1u8) as u32) } - } - #[inline] - pub fn set_Outbound(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(17usize, 1u8, val as u64) - } - } - #[inline] - pub fn Loopback(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(18usize, 1u8) as u32) } - } - #[inline] - pub fn set_Loopback(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(18usize, 1u8, val as u64) - } - } - #[inline] - pub fn Impostor(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(19usize, 1u8) as u32) } - } - #[inline] - pub fn set_Impostor(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(19usize, 1u8, val as u64) - } - } - #[inline] - pub fn IPv6(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(20usize, 1u8) as u32) } - } - #[inline] - pub fn set_IPv6(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(20usize, 1u8, val as u64) - } - } - #[inline] - pub fn IPChecksum(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(21usize, 1u8) as u32) } - } - #[inline] - pub fn set_IPChecksum(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(21usize, 1u8, val as u64) - } - } - #[inline] - pub fn TCPChecksum(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(22usize, 1u8) as u32) } - } - #[inline] - pub fn set_TCPChecksum(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(22usize, 1u8, val as u64) - } - } - #[inline] - pub fn UDPChecksum(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(23usize, 1u8) as u32) } - } - #[inline] - pub fn set_UDPChecksum(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(23usize, 1u8, val as u64) - } - } - #[inline] - pub fn Reserved1(&self) -> UINT32 { - unsafe { ::std::mem::transmute(self._bitfield_1.get(24usize, 8u8) as u32) } - } - #[inline] - pub fn set_Reserved1(&mut self, val: UINT32) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(24usize, 8u8, val as u64) - } - } - #[inline] - pub fn new_bitfield_1( - Layer: UINT32, - Event: UINT32, - Sniffed: UINT32, - Outbound: UINT32, - Loopback: UINT32, - Impostor: UINT32, - IPv6: UINT32, - IPChecksum: UINT32, - TCPChecksum: UINT32, - UDPChecksum: UINT32, - Reserved1: UINT32, - ) -> __BindgenBitfieldUnit<[u8; 4usize], u8> { - let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize], u8> = - Default::default(); - __bindgen_bitfield_unit.set(0usize, 8u8, { - let Layer: u32 = unsafe { ::std::mem::transmute(Layer) }; - Layer as u64 - }); - __bindgen_bitfield_unit.set(8usize, 8u8, { - let Event: u32 = unsafe { ::std::mem::transmute(Event) }; - Event as u64 - }); - __bindgen_bitfield_unit.set(16usize, 1u8, { - let Sniffed: u32 = unsafe { ::std::mem::transmute(Sniffed) }; - Sniffed as u64 - }); - __bindgen_bitfield_unit.set(17usize, 1u8, { - let Outbound: u32 = unsafe { ::std::mem::transmute(Outbound) }; - Outbound as u64 - }); - __bindgen_bitfield_unit.set(18usize, 1u8, { - let Loopback: u32 = unsafe { ::std::mem::transmute(Loopback) }; - Loopback as u64 - }); - __bindgen_bitfield_unit.set(19usize, 1u8, { - let Impostor: u32 = unsafe { ::std::mem::transmute(Impostor) }; - Impostor as u64 - }); - __bindgen_bitfield_unit.set(20usize, 1u8, { - let IPv6: u32 = unsafe { ::std::mem::transmute(IPv6) }; - IPv6 as u64 - }); - __bindgen_bitfield_unit.set(21usize, 1u8, { - let IPChecksum: u32 = unsafe { ::std::mem::transmute(IPChecksum) }; - IPChecksum as u64 - }); - __bindgen_bitfield_unit.set(22usize, 1u8, { - let TCPChecksum: u32 = unsafe { ::std::mem::transmute(TCPChecksum) }; - TCPChecksum as u64 - }); - __bindgen_bitfield_unit.set(23usize, 1u8, { - let UDPChecksum: u32 = unsafe { ::std::mem::transmute(UDPChecksum) }; - UDPChecksum as u64 - }); - __bindgen_bitfield_unit.set(24usize, 8u8, { - let Reserved1: u32 = unsafe { ::std::mem::transmute(Reserved1) }; - Reserved1 as u64 - }); - __bindgen_bitfield_unit - } -} -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_NETWORK_PACKET: WINDIVERT_EVENT = 0; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_FLOW_ESTABLISHED: WINDIVERT_EVENT = 1; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_FLOW_DELETED: WINDIVERT_EVENT = 2; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_BIND: WINDIVERT_EVENT = 3; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_CONNECT: WINDIVERT_EVENT = 4; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_LISTEN: WINDIVERT_EVENT = 5; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_ACCEPT: WINDIVERT_EVENT = 6; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_CLOSE: WINDIVERT_EVENT = 7; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_REFLECT_OPEN: WINDIVERT_EVENT = 8; -pub const WINDIVERT_EVENT_WINDIVERT_EVENT_REFLECT_CLOSE: WINDIVERT_EVENT = 9; -pub type WINDIVERT_EVENT = ::std::os::raw::c_int; -extern "C" { - pub fn WinDivertOpen( - filter: *const ::std::os::raw::c_char, - layer: WINDIVERT_LAYER, - priority: INT16, - flags: UINT64, - ) -> HANDLE; -} -extern "C" { - pub fn WinDivertRecv( - handle: HANDLE, - pPacket: *mut ::std::os::raw::c_void, - packetLen: UINT, - pRecvLen: *mut UINT, - pAddr: *mut WINDIVERT_ADDRESS, - ) -> BOOL; -} -extern "C" { - pub fn WinDivertRecvEx( - handle: HANDLE, - pPacket: *mut ::std::os::raw::c_void, - packetLen: UINT, - pRecvLen: *mut UINT, - flags: UINT64, - pAddr: *mut WINDIVERT_ADDRESS, - pAddrLen: *mut UINT, - lpOverlapped: LPOVERLAPPED, - ) -> BOOL; -} -extern "C" { - pub fn WinDivertSend( - handle: HANDLE, - pPacket: *const ::std::os::raw::c_void, - packetLen: UINT, - pSendLen: *mut UINT, - pAddr: *const WINDIVERT_ADDRESS, - ) -> BOOL; -} -extern "C" { - pub fn WinDivertSendEx( - handle: HANDLE, - pPacket: *const ::std::os::raw::c_void, - packetLen: UINT, - pSendLen: *mut UINT, - flags: UINT64, - pAddr: *const WINDIVERT_ADDRESS, - addrLen: UINT, - lpOverlapped: LPOVERLAPPED, - ) -> BOOL; -} -extern "C" { - pub fn WinDivertClose(handle: HANDLE) -> BOOL; -} diff --git a/src/connect/vpn/windows_routing/windivert/mod.rs b/src/connect/vpn/windows_routing/windivert/mod.rs deleted file mode 100644 index 625c4219..00000000 --- a/src/connect/vpn/windows_routing/windivert/mod.rs +++ /dev/null @@ -1,163 +0,0 @@ -//! A low-level, safe wrapper around WinDivert. -use anyhow::Result; -use bindings::WINDIVERT_ADDRESS; -use std::{ffi::CString, mem::MaybeUninit}; -use thiserror::Error; - -#[allow(dead_code, non_camel_case_types, non_snake_case)] -pub mod bindings; -mod packet; -pub use packet::*; -mod socket; -pub use socket::*; -use winapi::um::{errhandlingapi::GetLastError, handleapi::INVALID_HANDLE_VALUE}; - -#[derive(Debug, Error)] -#[error("internal WinDivert error: {0}")] -pub struct InternalError(pub bindings::DWORD); - -fn check_c_error(retcode: T, is_success: impl FnOnce(&T) -> bool) -> Result { - if is_success(&retcode) { - Ok(retcode) - } else { - let err = unsafe { GetLastError() }; - Err(InternalError(err)) - } -} - -/// A RAII-guarded WinDivert handle -pub struct Handle { - handle: bindings::HANDLE, -} - -unsafe impl Send for Handle {} - -impl Handle { - /// Open a new handle - pub fn open( - filter: &str, - layer: Layer, - priority: i16, - flags: u64, - ) -> Result { - static _MUTEX: std::sync::Mutex<()> = std::sync::Mutex::new(()); - let _guard = _MUTEX.lock().unwrap(); - let possibly_handle = unsafe { - let filter = CString::new(filter).unwrap(); - bindings::WinDivertOpen( - filter.into_raw() as *const i8, - layer.to_windivert(), - priority, - flags, - ) - }; - let handle = check_c_error(possibly_handle, |h| *h != INVALID_HANDLE_VALUE)?; - log::info!("initialized windivert = {:?}", handle); - Ok(Self { handle }) - } - - /// Receives a single captured packet/event guaranteed to match the filter passed to open() - pub fn receive( - &self, - packet_buf: Option<&mut [u8]>, - addr_buf: Option<&mut MaybeUninit>, - ) -> Result { - let mut recv_len = 0; - let packet_len = packet_buf.as_ref().map(|v| v.len()).unwrap_or_default(); - - let maybe_received = unsafe { - bindings::WinDivertRecv( - self.handle, - packet_buf - .map(|v| v.as_mut_ptr()) - .unwrap_or(std::ptr::null_mut()) as _, - packet_len as _, - &mut recv_len, - addr_buf - .map(|v| v as *mut _) - .unwrap_or(std::ptr::null_mut()) as _, - ) - }; - - check_c_error(maybe_received, |n| *n > 0)?; - Ok(recv_len as _) - } - - pub fn send(&self, packet: &[u8], addr: WINDIVERT_ADDRESS) -> Result<(), InternalError> { - let packet_len = packet.len() as u32; - let maybe_injected = unsafe { - bindings::WinDivertSend( - self.handle, - packet.as_ptr() as _, - packet_len, - std::ptr::null_mut(), - &addr, - ) - }; - - check_c_error(maybe_injected, |b| *b > 0)?; - Ok(()) - } - - pub fn send_multi>( - &self, - packets: &[P], - addr: WINDIVERT_ADDRESS, - ) -> Result<(), InternalError> { - let packet_count = packets.len(); - let mut concatenated = Vec::with_capacity(packets.iter().map(|v| v.as_ref().len()).sum()); - for p in packets { - concatenated.extend_from_slice(p.as_ref()); - } - let mut addrs: Vec<_> = (0..packet_count).map(|_| addr.clone()).collect(); - let mut send_len = 0; - let maybe_injected = unsafe { - bindings::WinDivertSendEx( - self.handle, - concatenated.as_ptr() as _, - concatenated.len() as _, - &mut send_len, - 0, - addrs.as_ptr() as _, - (packet_count * std::mem::size_of::()) as _, - std::ptr::null_mut() as _, - ) - }; - - check_c_error(maybe_injected, |b| *b > 0)?; - Ok(()) - } - - pub fn shutdown(&self) { - unsafe { bindings::WinDivertClose(self.handle) }; - } -} - -/// This prevents us from ever forgetting to close a handle. -impl Drop for Handle { - fn drop(&mut self) { - let retcode = unsafe { bindings::WinDivertClose(self.handle) }; - check_c_error(retcode, |v| *v > 0).expect("dropping a handle must succeed!"); - } -} - -#[derive(Clone, Copy, Debug)] -pub enum Layer { - Network, - NetworkForward, - Flow, - Socket, - Reflect, -} - -impl Layer { - pub fn to_windivert(&self) -> i32 { - match self { - Layer::Network => bindings::WINDIVERT_LAYER_WINDIVERT_LAYER_NETWORK, - Layer::NetworkForward => bindings::WINDIVERT_LAYER_WINDIVERT_LAYER_NETWORK_FORWARD, - Layer::Flow => bindings::WINDIVERT_LAYER_WINDIVERT_LAYER_FLOW, - Layer::Socket => bindings::WINDIVERT_LAYER_WINDIVERT_LAYER_SOCKET, - Layer::Reflect => bindings::WINDIVERT_LAYER_WINDIVERT_LAYER_REFLECT, - } - } -} diff --git a/src/connect/vpn/windows_routing/windivert/packet.rs b/src/connect/vpn/windows_routing/windivert/packet.rs deleted file mode 100644 index 346343cd..00000000 --- a/src/connect/vpn/windows_routing/windivert/packet.rs +++ /dev/null @@ -1,76 +0,0 @@ -use once_cell::sync::Lazy; -use parking_lot::Mutex; -use std::mem::MaybeUninit; - -use super::{bindings, Handle, InternalError, Layer}; -use std::collections::VecDeque; - -pub struct PacketHandle { - handle: Handle, - buffer: VecDeque>, -} - -unsafe impl Sync for PacketHandle {} - -unsafe impl Send for PacketHandle {} - -static LAST_RECV_ADDR: Lazy>> = - Lazy::new(|| Mutex::new(None)); - -impl PacketHandle { - pub fn open(filter: &str, priority: i16) -> Result { - let flag: u32 = 0; - Ok(Self { - handle: Handle::open(filter, Layer::Network, priority, flag as _)?, - buffer: VecDeque::new(), - }) - } - - pub fn receive(&self) -> Result, InternalError> { - let mut packet: Vec = vec![0; 4096]; - let mut addr: MaybeUninit = MaybeUninit::uninit(); - let packet_len = self.handle.receive(Some(&mut packet), Some(&mut addr))?; - let addr = unsafe { addr.assume_init() }; - packet.truncate(packet_len); - *LAST_RECV_ADDR.lock() = Some(addr); - Ok(packet) - } - - pub fn inject(&self, packet: &[u8], is_outbound: bool) -> Result<(), InternalError> { - if let Some(mut addr) = *LAST_RECV_ADDR.lock() { - addr.set_Outbound(is_outbound as _); - addr.set_Impostor(1); - addr.set_IPChecksum(0); - addr.set_TCPChecksum(0); - addr.set_UDPChecksum(0); - self.handle.send(packet, addr)?; - // println!("injecting a packet of length {}", packet.len()); - } else { - log::warn!("ignoring packet because we don't know how to inject"); - }; - Ok(()) - } - - pub fn inject_multi>( - &self, - packets: &[P], - is_outbound: bool, - ) -> Result<(), InternalError> { - if let Some(mut addr) = *LAST_RECV_ADDR.lock() { - addr.set_Outbound(is_outbound as _); - addr.set_Impostor(1); - addr.set_IPChecksum(0); - addr.set_TCPChecksum(0); - addr.set_UDPChecksum(0); - self.handle.send_multi(packets, addr)?; - // println!("injecting a packet of length {}", packet.len()); - } else { - log::warn!("ignoring packets because we don't know how to inject"); - }; - Ok(()) - } - - pub fn shutdown(&self) { - self.handle.shutdown() - } -} diff --git a/src/connect/vpn/windows_routing/windivert/socket.rs b/src/connect/vpn/windows_routing/windivert/socket.rs deleted file mode 100644 index af125af8..00000000 --- a/src/connect/vpn/windows_routing/windivert/socket.rs +++ /dev/null @@ -1,109 +0,0 @@ -use super::{bindings, Handle, InternalError, Layer}; -use std::convert::TryInto; -use std::{ - mem::MaybeUninit, - net::{IpAddr, SocketAddr}, -}; - -/// A handle for socket-layer events. -pub struct SocketHandle { - handle: Handle, -} - -impl SocketHandle { - /// Opens a SocketHandle. - pub fn open(filter: &str, priority: i16) -> Result { - let handle = Handle::open( - filter, - Layer::Socket, - priority, - (bindings::WINDIVERT_FLAG_SNIFF | bindings::WINDIVERT_FLAG_RECV_ONLY) as _, - )?; - Ok(Self { handle }) - } - - /// Receives a socket event. - pub fn receive(&mut self) -> Result { - let mut addr: MaybeUninit = MaybeUninit::uninit(); - self.handle.receive(None, Some(&mut addr))?; - let addr = unsafe { addr.assume_init() }; - - // now we parse it. we parse the "flow" part of the union even though this is a socket handle because they are the same. - let data = unsafe { addr.__bindgen_anon_1.Socket }; - let (local_addr, remote_addr) = parse_addr(&addr, &data); - let evt_type = match addr.Event() as _ { - bindings::WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_ACCEPT => SocketEvtType::Accept, - bindings::WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_BIND => SocketEvtType::Bind, - bindings::WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_CLOSE => SocketEvtType::Close, - bindings::WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_CONNECT => SocketEvtType::Connect, - bindings::WINDIVERT_EVENT_WINDIVERT_EVENT_SOCKET_LISTEN => SocketEvtType::Listen, - _ => panic!("Non-socket event somehow got here..."), - }; - - let is_tcp = data.Protocol == 6; - - Ok(SocketEvt { - kind: evt_type, - local_addr, - remote_addr, - process_id: data.ProcessId, - is_tcp, - }) - } -} - -/// An socket-related event -#[derive(Debug, Clone, Copy)] -pub struct SocketEvt { - pub kind: SocketEvtType, - pub local_addr: SocketAddr, - pub remote_addr: SocketAddr, - pub process_id: u32, - pub is_tcp: bool, -} - -#[derive(Copy, Clone, PartialEq, Eq, Debug)] -pub enum SocketEvtType { - Bind, - Connect, - Listen, - Accept, - Close, -} - -pub fn parse_addr( - addr: &bindings::WINDIVERT_ADDRESS, - windivert_socket: &bindings::WINDIVERT_DATA_SOCKET, -) -> (SocketAddr, SocketAddr) { - if addr.IPv6() == 1 { - ( - SocketAddr::new( - IpAddr::V6(to_u8(windivert_socket.LocalAddr).into()), - windivert_socket.LocalPort, - ), - SocketAddr::new( - IpAddr::V6(to_u8(windivert_socket.RemoteAddr).into()), - windivert_socket.RemotePort, - ), - ) - } else { - ( - SocketAddr::new( - IpAddr::V4(windivert_socket.LocalAddr[0].into()), - windivert_socket.LocalPort, - ), - SocketAddr::new( - IpAddr::V4(windivert_socket.RemoteAddr[0].into()), - windivert_socket.RemotePort, - ), - ) - } -} - -fn to_u8(thirty_twos: [u32; 4]) -> [u8; 16] { - let thirty_twos: Vec = thirty_twos.iter().rev().cloned().collect(); - let v: Vec = (0..16) - .map(|i| thirty_twos[i / 4].to_be_bytes()[i % 4]) - .collect(); - v.try_into().unwrap() -} diff --git a/src/lib.rs b/src/lib.rs index b48cc024..a70ac0ba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,6 +16,7 @@ use once_cell::sync::Lazy; use pad::{Alignment, PadStr}; use sharded_slab::Slab; +use smol::channel::Sender; use structopt::StructOpt; use sync::sync_json; @@ -26,10 +27,10 @@ use crate::{config::Opt, connect::ConnectDaemon, debugpack::DebugPack}; mod binderproxy; mod china; mod connect; -mod conninfo_store; + mod debugpack; mod main_bridgetest; -mod metrics; + mod sync; // #[global_allocator] @@ -39,7 +40,8 @@ pub fn dispatch() -> anyhow::Result<()> { std::env::remove_var("http_proxy"); std::env::remove_var("https_proxy"); - let mut recv_logs = config_logging(); + let (send_logs, recv_logs) = smol::channel::bounded(1000); + config_logging(send_logs); let version = env!("CARGO_PKG_VERSION"); log::info!("geph4-client v{} starting...", version); std::env::set_var("GEPH_VERSION", version); @@ -68,57 +70,51 @@ pub fn dispatch() -> anyhow::Result<()> { static LONGEST_LINE_EVER: AtomicUsize = AtomicUsize::new(0); -fn config_logging() -> async_broadcast::Receiver { - static LOG_SINK: Lazy<( - async_broadcast::Sender, - async_broadcast::Receiver, - )> = Lazy::new(|| async_broadcast::broadcast(1000)); - - if let Err(e) = env_logger::Builder::from_env( - env_logger::Env::default() - .default_filter_or("geph4client=debug,geph4_protocol=debug,melprot=debug,warn"), - ) - .format_timestamp_millis() - .format(move |buf, record| { - let preamble = format!( - "[{} {}]:", - record.module_path().unwrap_or("none").dimmed(), - match record.level() { - log::Level::Error => "ERRO".red(), - log::Level::Warn => "WARN".bright_yellow(), - log::Level::Info => "INFO".bright_green(), - log::Level::Debug => "DEBG".bright_blue(), - log::Level::Trace => "TRAC".bright_black(), - }, - ); - let len = strip_ansi_escapes::strip(&preamble).unwrap().len(); - let longest = LONGEST_LINE_EVER.fetch_max(len, Ordering::SeqCst); - let preamble = "" - .pad_to_width_with_alignment(longest.saturating_sub(len), Alignment::Right) - + &preamble; - let line = format!("{} {}", preamble, record.args()); - writeln!(buf, "{}", line).unwrap(); - let _ = LOG_SINK.0.try_broadcast( - String::from_utf8_lossy(&strip_ansi_escapes::strip(line).unwrap()).to_string(), - ); - Ok(()) - }) - .format_target(false) - .try_init() +fn config_logging(logs: Sender) { + if let Err(e) = + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or( + "geph4client=debug,geph4_protocol=debug,melprot=debug,warn,geph5=debug", + )) + .format_timestamp_millis() + .format(move |buf, record| { + let preamble = format!( + "[{} {}]:", + record.module_path().unwrap_or("none").dimmed(), + match record.level() { + log::Level::Error => "ERRO".red(), + log::Level::Warn => "WARN".bright_yellow(), + log::Level::Info => "INFO".bright_green(), + log::Level::Debug => "DEBG".bright_blue(), + log::Level::Trace => "TRAC".bright_black(), + }, + ); + let len = strip_ansi_escapes::strip(&preamble).unwrap().len(); + let longest = LONGEST_LINE_EVER.fetch_max(len, Ordering::SeqCst); + let preamble = "" + .pad_to_width_with_alignment(longest.saturating_sub(len), Alignment::Right) + + &preamble; + let line = format!("{} {}", preamble, record.args()); + writeln!(buf, "{}", line).unwrap(); + let _ = logs.try_send( + String::from_utf8_lossy(&strip_ansi_escapes::strip(line).unwrap()).to_string(), + ); + Ok(()) + }) + .format_target(false) + .try_init() { log::debug!("{}", e); } - - LOG_SINK.1.clone() } static SLAB: Lazy> = Lazy::new(Slab::new); fn save_logs(daemon_key: c_int) { - let mut recv_logs = config_logging(); + let (send_logs, recv_logs) = smol::channel::bounded(1000); + config_logging(send_logs); let shuffler = smolscale::spawn::>(async move { loop { - let received = recv_logs.recv_direct().await?; + let received = recv_logs.recv().await?; if let Some(daemon) = SLAB.get(daemon_key as usize) { daemon.debug().add_logline(&received); } else { diff --git a/src/metrics.rs b/src/metrics.rs deleted file mode 100644 index 423baa59..00000000 --- a/src/metrics.rs +++ /dev/null @@ -1,20 +0,0 @@ -use std::net::SocketAddr; - -use serde::Serialize; - -#[derive(Debug, Serialize)] -pub struct BridgeMetrics { - pub address: SocketAddr, - pub protocol: String, - pub pipe_latency: Option, -} - -#[derive(Debug, Serialize)] -#[serde(tag = "type")] -#[serde(rename_all = "snake_case")] -pub enum Metrics { - ConnEstablished { - bridges: Vec, - total_latency: f64, - }, -} diff --git a/src/sync.rs b/src/sync.rs index 67d4e19b..25a15ad1 100644 --- a/src/sync.rs +++ b/src/sync.rs @@ -1,14 +1,17 @@ -use geph4_protocol::binder::protocol::Level; +use anyhow::Context; +use geph4_protocol::binder::protocol::{Level, UserInfoV2}; +use geph5_broker_protocol::BrokerClient; use itertools::Itertools; use serde::{Deserialize, Serialize}; use smol_timeout::TimeoutExt; use std::time::Duration; +use stdcode::StdcodeSerializeExt; use structopt::StructOpt; -use crate::config::{get_conninfo_store, AuthOpt, CommonOpt}; +use crate::config::{AuthOpt, CommonOpt, GEPH5_CONFIG_TEMPLATE}; #[derive(Debug, StructOpt, Deserialize, Serialize, Clone)] pub struct SyncOpt { @@ -32,36 +35,70 @@ const VERSION: &str = env!("CARGO_PKG_VERSION"); pub async fn sync_json(opt: SyncOpt) -> anyhow::Result { log::info!("SYNC getting conninfo store"); + let broker_transport = BrokerClient::from( + GEPH5_CONFIG_TEMPLATE + .broker + .as_ref() + .unwrap() + .rpc_transport(), + ); + let timeout_duration = Duration::from_secs(15); let result = (async { - let binder_client = get_conninfo_store(&opt.common, &opt.auth, "").await?; - binder_client.refresh(false).await?; // we always refresh for the sync verb - - let master = binder_client.summary().await?; - let user = binder_client.user_info().await?; - let exits = master - .exits + let exits = broker_transport + .get_exits() + .await? + .map_err(|e| anyhow::anyhow!(e))?; + let free_exits = broker_transport + .get_free_exits() + .await? + .map_err(|e| anyhow::anyhow!(e))?; + // TODO verify + let exits = exits.inner; + let free_exits = free_exits.inner; + let exits = exits + .all_exits .into_iter() .map(|exit| DumbedDownExitDescriptor { - hostname: exit.hostname.into(), - signing_key: hex::encode(exit.signing_key), - country_code: exit.country_code.into(), - city_code: exit.city_code.into(), - allowed_levels: exit - .allowed_levels - .into_iter() - .map(|l| match l { - Level::Free => "free".to_string(), - Level::Plus => "plus".to_string(), - }) - .collect_vec(), - load: exit.load, + hostname: exit.1.b2e_listen.ip().to_string(), + signing_key: hex::encode(exit.0.as_bytes()), + country_code: exit.1.country.alpha2().into(), + city_code: exit.1.city.clone(), + allowed_levels: if free_exits.all_exits.iter().map(|fe| fe.0).any(|fe| fe == exit.0) { + vec!["free".to_string(), "plus".to_string()] + } else { + vec!["plus".to_string()] + }, + load: exit.1.load as _, }) .collect_vec(); + let credentials = match &opt.auth.auth_kind { + Some(crate::config::AuthKind::AuthPassword { username, password }) => { + geph5_broker_protocol::Credential::LegacyUsernamePassword { username: username.clone(), password: password.clone() } + } + _ => todo!(), + }; + let user_cache_key = hex::encode(blake3::hash(&opt.auth.stdcode()).as_bytes()); + std::fs::create_dir_all(&opt.auth.credential_cache)?; + let token_path = opt.auth.credential_cache.join(format!("{user_cache_key}-sync_auth_token")); + let auth_token = if let Ok(val) = smol::fs::read_to_string(&token_path).await { + val + } else { + let auth_token = broker_transport.get_auth_token(credentials).await??; + smol::fs::write(&token_path, &auth_token).await?; + auth_token + }; + let user_info = broker_transport + .get_user_info(auth_token) + .await?? + .context("no such user")?; + Ok(serde_json::json!({ "exits": exits, - "user": user, + "user": UserInfoV2 { userid: user_info.user_id as _, subscription: user_info.plus_expires_unix.map(|unix| { + geph4_protocol::binder::protocol::SubscriptionInfo { level: Level::Plus, expires_unix: unix as _ } + }) }, "version": VERSION }) .to_string())