From c4b8fdd4f0ee3f819d0850ee722aa9e37b11df3f Mon Sep 17 00:00:00 2001 From: zonyitoo Date: Sat, 25 May 2024 00:00:43 +0800 Subject: [PATCH] feat(local-fake-dns): removed deps to prost, use bson --- .github/workflows/build-nightly-release.yml | 8 - .github/workflows/build-release.yml | 8 - Cargo.lock | 361 ++++++++++-------- Dockerfile | 2 +- crates/shadowsocks-service/Cargo.toml | 7 +- crates/shadowsocks-service/build.rs | 11 - .../src/local/fake_dns/manager.rs | 31 +- .../src/local/fake_dns/proto.rs | 55 +++ .../src/local/fake_dns/proto/fake_dns.proto | 22 -- .../src/local/fake_dns/proto/mod.rs | 3 - 10 files changed, 285 insertions(+), 223 deletions(-) delete mode 100644 crates/shadowsocks-service/build.rs create mode 100644 crates/shadowsocks-service/src/local/fake_dns/proto.rs delete mode 100644 crates/shadowsocks-service/src/local/fake_dns/proto/fake_dns.proto delete mode 100644 crates/shadowsocks-service/src/local/fake_dns/proto/mod.rs diff --git a/.github/workflows/build-nightly-release.yml b/.github/workflows/build-nightly-release.yml index ee8e2bd2..2160347f 100644 --- a/.github/workflows/build-nightly-release.yml +++ b/.github/workflows/build-nightly-release.yml @@ -81,10 +81,6 @@ jobs: brew install gnu-tar # echo "::add-path::/usr/local/opt/gnu-tar/libexec/gnubin" echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH - - name: Install Protoc - uses: arduino/setup-protoc@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Rust run: | @@ -113,10 +109,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: ilammy/setup-nasm@v1 - - name: Install Protoc - uses: arduino/setup-protoc@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Rust run: | diff --git a/.github/workflows/build-release.yml b/.github/workflows/build-release.yml index cc9eeb3a..5a2d07cf 100644 --- a/.github/workflows/build-release.yml +++ b/.github/workflows/build-release.yml @@ -101,10 +101,6 @@ jobs: brew install gnu-tar # echo "::add-path::/usr/local/opt/gnu-tar/libexec/gnubin" echo "/usr/local/opt/gnu-tar/libexec/gnubin" >> $GITHUB_PATH - - name: Install Protoc - uses: arduino/setup-protoc@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Rust run: | @@ -136,10 +132,6 @@ jobs: steps: - uses: actions/checkout@v4 - uses: ilammy/setup-nasm@v1 - - name: Install Protoc - uses: arduino/setup-protoc@v3 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Install Rust run: | diff --git a/Cargo.lock b/Cargo.lock index 2241ff84..d5cc07f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -67,6 +67,19 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -142,9 +155,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.83" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25bdb32cbbdce2b519a9cd7df3a678443100e265d5e25ca763b7572a5104f5f3" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arc-swap" @@ -172,9 +185,15 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.3.0" @@ -183,9 +202,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "aws-lc-rs" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8487b59d62764df8231cb371c459314df895b41756df457a1fb1243d65c89195" +checksum = "474d7cec9d0a1126fad1b224b767fcbf351c23b0309bb21ec210bcfd379926a5" dependencies = [ "aws-lc-sys", "mirai-annotations", @@ -195,9 +214,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c15eb61145320320eb919d9bab524617a7aa4216c78d342fae3a758bc33073e4" +checksum = "7505fc3cb7acbf42699a43a79dd9caa4ed9e99861dfbb837c5c0fb5a0a8d2980" dependencies = [ "bindgen", "cc", @@ -229,6 +248,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[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" @@ -266,7 +291,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.63", + "syn 2.0.66", "which", ] @@ -288,6 +313,18 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "blake3" version = "1.5.1" @@ -321,6 +358,27 @@ dependencies = [ "siphasher", ] +[[package]] +name = "bson" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d43b38e074cc0de2957f10947e376a1d88b9c4dbab340b590800cc1b2e066b2" +dependencies = [ + "ahash", + "base64 0.13.1", + "bitvec", + "hex", + "indexmap", + "js-sys", + "once_cell", + "rand", + "serde", + "serde_bytes", + "serde_json", + "time", + "uuid", +] + [[package]] name = "build-time" version = "0.1.3" @@ -331,7 +389,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -390,9 +448,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.97" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099a5357d84c4c61eb35fc8eafa9a79a902c2f76911e5747ced4e032edd8d9b4" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" dependencies = [ "jobserver", "libc", @@ -572,18 +630,18 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-channel" -version = "0.5.12" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3db02a9c5b5121e1e42fbdb1aeb65f5e02624cc58c43f2884c6ccac0b82f95" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ "crossbeam-utils", ] @@ -599,9 +657,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-bigint" @@ -652,9 +710,9 @@ checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] name = "defmt" -version = "0.3.6" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3939552907426de152b3c2c6f51ed53f98f448babd26f28694c95f5906194595" +checksum = "a99dd22262668b887121d4672af5a64b238f026099f1a2a1b322066c9ecfe9e0" dependencies = [ "bitflags 1.3.2", "defmt-macros", @@ -662,15 +720,15 @@ dependencies = [ [[package]] name = "defmt-macros" -version = "0.3.7" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18bdc7a7b92ac413e19e95240e75d3a73a8d8e78aa24a594c22cbb4d44b4bbda" +checksum = "e3a9f309eff1f79b3ebdf252954d90ae440599c26c2c553fe87a2d17195f2dcb" dependencies = [ "defmt-parser", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -779,9 +837,9 @@ dependencies = [ [[package]] name = "either" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47c1c47d2f5964e29c61246e81db715514cd532db6b5116a25ea3c03d6780a2" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" [[package]] name = "elliptic-curve" @@ -816,10 +874,10 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a" dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -907,12 +965,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "fnv" version = "1.0.7" @@ -968,6 +1020,12 @@ dependencies = [ "libc", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futures" version = "0.3.30" @@ -1024,7 +1082,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -1144,15 +1202,15 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http 1.1.0", "indexmap", "slab", @@ -1220,18 +1278,18 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -[[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.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hickory-proto" version = "0.24.1" @@ -1407,7 +1465,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body", "httparse", @@ -1556,9 +1614,9 @@ dependencies = [ [[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", ] @@ -1742,9 +1800,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[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" @@ -1874,9 +1932,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.2" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" dependencies = [ "adler", ] @@ -1899,12 +1957,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9be0862c1b3f26a88803c4a49de6889c10e608b3ee9344e6ef5b45fb37ad3d1" -[[package]] -name = "multimap" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" - [[package]] name = "native-tls" version = "0.2.11" @@ -2052,7 +2104,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2063,9 +2115,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-src" -version = "300.2.3+3.2.1" +version = "300.3.0+3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843" +checksum = "eba8804a1c5765b18c4b3f907e6897ebabeedebc9830e1a0046c4a4cf44663e1" dependencies = [ "cc", ] @@ -2216,7 +2268,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2230,16 +2282,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset", - "indexmap", -] - [[package]] name = "pin-project" version = "1.1.5" @@ -2257,7 +2299,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2330,7 +2372,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" dependencies = [ "proc-macro2", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -2368,66 +2410,13 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.82" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ad3d49ab951a01fbaafe34f2ec74122942fe18a3f9814c3268f1bb72042131b" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" dependencies = [ "unicode-ident", ] -[[package]] -name = "prost" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80b776a1b2dc779f5ee0641f8ade0125bc1298dd41a9a0c16d8bd57b42d222b1" -dependencies = [ - "bytes", - "heck 0.5.0", - "itertools", - "log", - "multimap", - "once_cell", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 2.0.63", - "tempfile", -] - -[[package]] -name = "prost-derive" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn 2.0.63", -] - -[[package]] -name = "prost-types" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3235c33eb02c1f1e212abdbe34c78b264b038fb58ca612664343271e36e55ffe" -dependencies = [ - "prost", -] - [[package]] name = "qrcode" version = "0.14.0" @@ -2496,6 +2485,12 @@ dependencies = [ "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.8.5" @@ -2620,7 +2615,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "h2 0.4.4", + "h2 0.4.5", "http 1.1.0", "http-body", "http-body-util", @@ -2803,22 +2798,22 @@ dependencies = [ "log", "ring 0.17.8", "rustls-pki-types", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", "subtle", "zeroize", ] [[package]] name = "rustls" -version = "0.23.5" +version = "0.23.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afabcee0551bd1aa3e18e5adbf2c0544722014b899adb31bd186ec638d3da97e" +checksum = "79adb16721f56eb2d843e67676896a61ce7a0fa622dc18d3e372477a029d2740" dependencies = [ "aws-lc-rs", "log", "once_cell", "rustls-pki-types", - "rustls-webpki 0.102.3", + "rustls-webpki 0.102.4", "subtle", "zeroize", ] @@ -2885,9 +2880,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.102.3" +version = "0.102.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" dependencies = [ "aws-lc-rs", "ring 0.17.8", @@ -2983,9 +2978,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.201" +version = "1.0.202" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" dependencies = [ "serde_derive", ] @@ -3001,14 +2996,23 @@ dependencies = [ ] [[package]] -name = "serde_derive" -version = "1.0.201" +name = "serde_bytes" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -3017,6 +3021,7 @@ version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ + "indexmap", "itoa", "ryu", "serde", @@ -3182,6 +3187,7 @@ version = "1.19.0" dependencies = [ "arc-swap", "async-trait", + "bson", "byte_string", "byteorder", "bytes", @@ -3203,8 +3209,6 @@ dependencies = [ "nix", "once_cell", "pin-project", - "prost", - "prost-build", "rand", "regex", "rustls-native-certs 0.7.0", @@ -3402,9 +3406,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.63" +version = "2.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf5be731623ca1a1fb7d8be6f261a3be6d3e2337b8a1f97be944d020c8fcb704" +checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5" dependencies = [ "proc-macro2", "quote", @@ -3444,6 +3448,12 @@ dependencies = [ "libc", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "tcmalloc" version = "0.3.0" @@ -3498,7 +3508,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -3596,7 +3606,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -3636,7 +3646,7 @@ version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.23.5", + "rustls 0.23.8", "rustls-pki-types", "tokio", ] @@ -3719,7 +3729,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", ] [[package]] @@ -3883,6 +3893,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "uuid" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +dependencies = [ + "getrandom", + "serde", +] + [[package]] name = "valuable" version = "0.1.0" @@ -3947,7 +3967,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "wasm-bindgen-shared", ] @@ -3981,7 +4001,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.63", + "syn 2.0.66", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4277,17 +4297,60 @@ dependencies = [ "windows", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "xdg" version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" +[[package]] +name = "zerocopy" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "zeroize" version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] [[package]] name = "zstd" diff --git a/Dockerfile b/Dockerfile index 12c0cc72..1ea5a0e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM --platform=$BUILDPLATFORM rust:1.67.1-alpine3.17 AS builder ARG TARGETARCH RUN set -x \ - && apk add --no-cache build-base protoc + && apk add --no-cache build-base WORKDIR /root/shadowsocks-rust diff --git a/crates/shadowsocks-service/Cargo.toml b/crates/shadowsocks-service/Cargo.toml index 1297f20c..035fa993 100644 --- a/crates/shadowsocks-service/Cargo.toml +++ b/crates/shadowsocks-service/Cargo.toml @@ -95,7 +95,7 @@ local-socks4 = ["local"] # Enable Tun interface protocol for sslocal local-tun = ["local", "etherparse", "tun", "smoltcp"] # Enable Fake DNS -local-fake-dns = ["local", "trust-dns", "sled", "prost", "prost-build"] +local-fake-dns = ["local", "trust-dns", "sled", "bson"] # sslocal support online URL (SIP008 Online Configuration Delivery) # https://shadowsocks.org/doc/sip008.html local-online-config = ["local"] @@ -134,7 +134,6 @@ byte_string = "1.0" byteorder = "1.5" rand = { version = "0.8", features = ["small_rng"] } sled = { version = "0.34.7", features = ["compression"], optional = true } -prost = { version = "0.12.6", optional = true } futures = "0.3" tokio = { version = "1.5", features = [ @@ -183,6 +182,7 @@ smoltcp = { version = "0.11", optional = true, default-features = false, feature serde = { version = "1.0", features = ["derive"] } json5 = "0.4" +bson = { version = "2.10.0", optional = true } shadowsocks = { version = "1.19.0", path = "../shadowsocks", default-features = false } @@ -193,9 +193,6 @@ nix = { version = "0.29", features = ["ioctl"] } [target.'cfg(windows)'.dependencies] windows-sys = { version = "0.52", features = ["Win32_Networking_WinSock"] } -[build-dependencies] -prost-build = { version = "0.12.4", optional = true } - [dev-dependencies] byteorder = "1.5" env_logger = "0.11" diff --git a/crates/shadowsocks-service/build.rs b/crates/shadowsocks-service/build.rs deleted file mode 100644 index 15b5511d..00000000 --- a/crates/shadowsocks-service/build.rs +++ /dev/null @@ -1,11 +0,0 @@ -use std::io; - -fn main() -> io::Result<()> { - #[cfg(feature = "local-fake-dns")] - prost_build::compile_protos( - &["src/local/fake_dns/proto/fake_dns.proto"], - &["src/local/fake_dns/proto/"], - )?; - - Ok(()) -} diff --git a/crates/shadowsocks-service/src/local/fake_dns/manager.rs b/crates/shadowsocks-service/src/local/fake_dns/manager.rs index 1fccfee0..c7d2c1fd 100644 --- a/crates/shadowsocks-service/src/local/fake_dns/manager.rs +++ b/crates/shadowsocks-service/src/local/fake_dns/manager.rs @@ -1,7 +1,7 @@ //! Fake DNS manager use std::{ - io::{self, Cursor}, + io, iter::Cycle, net::{IpAddr, Ipv4Addr, Ipv6Addr}, path::Path, @@ -11,13 +11,12 @@ use std::{ use hickory_resolver::proto::rr::Name; use ipnet::{Ipv4AddrRange, Ipv4Net, Ipv6AddrRange, Ipv6Net}; use log::{trace, warn}; -use prost::Message; use sled::{Config as SledConfig, Db as SledDatabase}; use tokio::sync::Mutex; use super::proto; -const FAKE_DNS_MANAGER_STORAGE_VERSION: u32 = 1; +const FAKE_DNS_MANAGER_STORAGE_VERSION: u32 = 2; /// Fake DNS manager pub struct FakeDnsManager { @@ -37,7 +36,7 @@ macro_rules! map_domain_ip { let mut domain_name_mapping = proto::DomainNameMapping::default(); if let Some(ref v) = name2ip_value { - domain_name_mapping = proto::DomainNameMapping::decode(&mut Cursor::new(v))?; + domain_name_mapping = proto::DomainNameMapping::decode(v)?; if !domain_name_mapping.$addr_field.is_empty() { match domain_name_mapping.$addr_field.parse::<$addr_ty>() { @@ -56,11 +55,11 @@ macro_rules! map_domain_ip { let ip2name_key = FakeDnsManager::get_ip2name_key(i.into()); let ip2name_value = $self.db.get(&ip2name_key)?; if let Some(ref v) = ip2name_value { - let mut ip_mapping = proto::IpAddrMapping::decode(&mut Cursor::new(v))?; + let mut ip_mapping = proto::IpAddrMapping::decode(v)?; if ip_mapping.domain_name == $domain.to_string() { // Try to extend its expire time ip_mapping.expire_time = expire_secs; - let nv = ip_mapping.encode_to_vec(); + let nv = ip_mapping.encode_to_vec()?; if let Ok(..) = $self .db @@ -77,7 +76,7 @@ macro_rules! map_domain_ip { if !reallocate { domain_name_mapping.expire_time = expire_secs; - let nv = domain_name_mapping.encode_to_vec(); + let nv = domain_name_mapping.encode_to_vec()?; // Ignore update error. It is ok if expire_time is updated by another thread. let _ = $self @@ -106,7 +105,7 @@ macro_rules! map_domain_ip { loop { let ip2name_value = $self.db.get(&ip2name_key)?; if let Some(ref v) = ip2name_value { - let ip_mapping = proto::IpAddrMapping::decode(&mut Cursor::new(v))?; + let ip_mapping = proto::IpAddrMapping::decode(v)?; let now = FakeDnsManager::get_current_timestamp(); if ip_mapping.expire_time > now { @@ -120,14 +119,14 @@ macro_rules! map_domain_ip { ip_mapping.expire_time = expire_secs; ip_mapping.domain_name = $domain.to_string(); - let nv = ip_mapping.encode_to_vec(); + let nv = ip_mapping.encode_to_vec()?; if let Ok(..) = $self.db.compare_and_swap(&ip2name_key, ip2name_value, Some(nv.clone())) { // Replace name2ip domain_name_mapping.$addr_field = ip.to_string(); domain_name_mapping.expire_time = ip_mapping.expire_time; - let nv = domain_name_mapping.encode_to_vec(); + let nv = domain_name_mapping.encode_to_vec()?; if let Ok(..) = $self .db @@ -175,7 +174,7 @@ impl FakeDnsManager { let key = "shadowsocks_fakedns_meta"; if let Some(v) = db.get(key)? { - let c = proto::StorageMeta::decode(&mut Cursor::new(&v))?; + let c = proto::StorageMeta::decode(&v)?; if c.version == FAKE_DNS_MANAGER_STORAGE_VERSION { if ipv4_network_str != c.ipv4_network || ipv6_network_str != c.ipv6_network { warn!( @@ -199,7 +198,7 @@ impl FakeDnsManager { version: FAKE_DNS_MANAGER_STORAGE_VERSION, }; - let v = c.encode_to_vec(); + let v = c.encode_to_vec()?; db.insert(key, v)?; trace!("FakeDNS database created. {:?}", c); @@ -249,13 +248,13 @@ impl FakeDnsManager { match ip2name_value { None => Ok(None), Some(ref v) => { - let mut ip_mapping = proto::IpAddrMapping::decode(&mut Cursor::new(v))?; + let mut ip_mapping = proto::IpAddrMapping::decode(v)?; let now = FakeDnsManager::get_current_timestamp(); if ip_mapping.expire_time >= now { // Ok. It is not expired yet. Try to extend its expire time. ip_mapping.expire_time = now + self.expire_duration.as_secs() as i64; - let nv = ip_mapping.encode_to_vec(); + let nv = ip_mapping.encode_to_vec()?; let _ = self .db .compare_and_swap(&ip2name_key, ip2name_value.as_ref(), Some(nv))?; @@ -272,9 +271,9 @@ impl FakeDnsManager { let name2ip_value = self.db.get(&name2ip_key)?; match name2ip_value { Some(ref v) => { - let mut domain_name_mapping = proto::DomainNameMapping::decode(&mut Cursor::new(v))?; + let mut domain_name_mapping = proto::DomainNameMapping::decode(v)?; domain_name_mapping.expire_time = ip_mapping.expire_time; - let nv = domain_name_mapping.encode_to_vec(); + let nv = domain_name_mapping.encode_to_vec()?; let _ = self.db.compare_and_swap(&name2ip_key, name2ip_value.as_ref(), Some(nv)); } None => { diff --git a/crates/shadowsocks-service/src/local/fake_dns/proto.rs b/crates/shadowsocks-service/src/local/fake_dns/proto.rs new file mode 100644 index 00000000..3e2ec020 --- /dev/null +++ b/crates/shadowsocks-service/src/local/fake_dns/proto.rs @@ -0,0 +1,55 @@ +//! Data representation in Database + +use std::io; + +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize, Default, Clone, Debug)] +pub struct StorageMeta { + pub ipv4_network: String, + pub ipv6_network: String, + pub version: u32, +} + +impl StorageMeta { + pub fn decode(v: &[u8]) -> io::Result { + bson::from_slice(v).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) + } + + pub fn encode_to_vec(&self) -> io::Result> { + bson::to_vec(self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) + } +} + +#[derive(Serialize, Deserialize, Default, Clone, Debug)] +pub struct IpAddrMapping { + pub domain_name: String, + pub expire_time: i64, +} + +impl IpAddrMapping { + pub fn decode(v: &[u8]) -> io::Result { + bson::from_slice(v).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) + } + + pub fn encode_to_vec(&self) -> io::Result> { + bson::to_vec(self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) + } +} + +#[derive(Serialize, Deserialize, Default, Clone, Debug)] +pub struct DomainNameMapping { + pub ipv4_addr: String, + pub ipv6_addr: String, + pub expire_time: i64, +} + +impl DomainNameMapping { + pub fn decode(v: &[u8]) -> io::Result { + bson::from_slice(v).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) + } + + pub fn encode_to_vec(&self) -> io::Result> { + bson::to_vec(self).map_err(|e| io::Error::new(io::ErrorKind::Other, e)) + } +} diff --git a/crates/shadowsocks-service/src/local/fake_dns/proto/fake_dns.proto b/crates/shadowsocks-service/src/local/fake_dns/proto/fake_dns.proto deleted file mode 100644 index d202213b..00000000 --- a/crates/shadowsocks-service/src/local/fake_dns/proto/fake_dns.proto +++ /dev/null @@ -1,22 +0,0 @@ -syntax = "proto3"; - -package shadowsocks_service.local.fake_dns.proto; - -message StorageMeta { - string ipv4_network = 1; // IPv4 allocation pool - string ipv6_network = 2; // IPv6 allocation pool - uint32 version = 3; // Storage Version -} - -// ip2domain_{IP_ADDR} -message IpAddrMapping { - string domain_name = 1; // Original Domain - int64 expire_time = 2; -} - -// domain2ip_{DOMAIN_NAME} -message DomainNameMapping { - string ipv4_addr = 1; // Mapped IPv4 Address - string ipv6_addr = 2; // Mapped IPv6 Address - int64 expire_time = 3; -} diff --git a/crates/shadowsocks-service/src/local/fake_dns/proto/mod.rs b/crates/shadowsocks-service/src/local/fake_dns/proto/mod.rs deleted file mode 100644 index aafe63b5..00000000 --- a/crates/shadowsocks-service/src/local/fake_dns/proto/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -//! FakeDNS protobuf - -include!(concat!(env!("OUT_DIR"), "/shadowsocks_service.local.fake_dns.proto.rs"));