From 6eb185f76a04596f07550eec0419c75dc738e430 Mon Sep 17 00:00:00 2001 From: Revertron Date: Wed, 15 Sep 2021 16:06:10 +0200 Subject: [PATCH] Removed async dnsclient in favor of internal implementation. --- Cargo.lock | 566 ++-------------------------------------------- Cargo.toml | 3 +- src/dns/client.rs | 76 +++++-- 3 files changed, 83 insertions(+), 562 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aacad18..179e280 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -78,7 +78,7 @@ dependencies = [ [[package]] name = "alfis" -version = "0.6.6" +version = "0.6.7" dependencies = [ "base64", "bincode", @@ -88,7 +88,6 @@ dependencies = [ "chrono", "derive_more", "digest", - "dnsclient", "ecies-ed25519", "ed25519-dalek", "getopts", @@ -117,146 +116,11 @@ dependencies = [ "ureq", "uuid", "web-view", - "winapi 0.3.9", + "winapi", "winres", "x25519-dalek", ] -[[package]] -name = "anyhow" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf" - -[[package]] -name = "async-channel" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "once_cell", - "slab", -] - -[[package]] -name = "async-global-executor" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9586ec52317f36de58453159d48351bc244bc24ced3effc1fce22f3d48664af6" -dependencies = [ - "async-channel", - "async-executor", - "async-io", - "async-mutex", - "blocking", - "futures-lite", - "num_cpus", - "once_cell", -] - -[[package]] -name = "async-io" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b" -dependencies = [ - "concurrent-queue", - "futures-lite", - "libc", - "log", - "once_cell", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "winapi 0.3.9", -] - -[[package]] -name = "async-lock" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-mutex" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "479db852db25d9dbf6204e6cb6253698f175c15726470f78af0d918e99d6156e" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-process" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b21b63ab5a0db0369deb913540af2892750e42d949faacc7a61495ac418a1692" -dependencies = [ - "async-io", - "blocking", - "cfg-if 1.0.0", - "event-listener", - "futures-lite", - "libc", - "once_cell", - "signal-hook", - "winapi 0.3.9", -] - -[[package]] -name = "async-std" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" -dependencies = [ - "async-channel", - "async-global-executor", - "async-io", - "async-lock", - "async-process", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "num_cpus", - "once_cell", - "pin-project-lite", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - -[[package]] -name = "async-task" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" - [[package]] name = "atk-sys" version = "0.10.0" @@ -269,43 +133,12 @@ dependencies = [ "system-deps", ] -[[package]] -name = "atomic-waker" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" - [[package]] name = "autocfg" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[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-sys" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18fbebbe1c9d1f383a9cc7e8ccdb471b91c8d024ee9c2ca5b5346121fe8b4399" -dependencies = [ - "cc", - "libc", -] - [[package]] name = "base64" version = "0.13.0" @@ -321,12 +154,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bitflags" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aad18937a628ec6abcd26d1489012cc0e18c21798210f491af69ded9b881106d" - [[package]] name = "bitflags" version = "1.2.1" @@ -363,20 +190,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "blocking" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e170dbede1f740736619b776d7251cb1b9095c435c34d8ca9f57fcd2f335e9" -dependencies = [ - "async-channel", - "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "once_cell", -] - [[package]] name = "boxfnonce" version = "0.1.1" @@ -395,12 +208,6 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "cache-padded" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "631ae5198c9be5e753e5cc215e1bd73c2b466a3565173db433f52bb9d3e66dba" - [[package]] name = "cairo-sys-rs" version = "0.10.0" @@ -417,12 +224,6 @@ version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd" -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -435,7 +236,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8c5d87765c99be3d2cb08d11a3c14820ecaf2c7ad45d301c533103d2d8a146c" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cipher 0.3.0", "cpufeatures 0.2.1", "zeroize", @@ -454,18 +255,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "chomp" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f74ad218e66339b11fd23f693fb8f1d621e80ba6ac218297be26073365d163d" -dependencies = [ - "bitflags 0.7.0", - "conv", - "debugtrace", - "either", -] - [[package]] name = "chrono" version = "0.4.19" @@ -477,7 +266,7 @@ dependencies = [ "num-traits", "serde", "time", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -504,24 +293,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "concurrent-queue" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" -dependencies = [ - "cache-padded", -] - -[[package]] -name = "conv" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299" -dependencies = [ - "custom_derive", -] - [[package]] name = "convert_case" version = "0.4.0" @@ -552,16 +323,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if 1.0.0", - "lazy_static", -] - [[package]] name = "crypto-mac" version = "0.8.0" @@ -582,16 +343,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctor" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e98e2ad1a782e33928b96fc3948e7c355e5af34ba4de7670fe8bac2a3b2006d" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ctr" version = "0.6.0" @@ -614,37 +365,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "custom_derive" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8ae57c4978a2acd8b869ce6b9ca1dfe817bff704c220209fdef2c0b75a01b9" - -[[package]] -name = "dbghelp-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "debug-builders" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f5d8e3d14cabcb2a8a59d7147289173c6ada77a0bc526f6b85078f941c0cf12" - -[[package]] -name = "debugtrace" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62e432bd83c5d70317f6ebd8a50ed4afb32907c64d6e2e1e65e339b06dc553f3" -dependencies = [ - "backtrace", -] - [[package]] name = "derive_more" version = "0.99.16" @@ -667,32 +387,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "dnsclient" -version = "0.1.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca5429947886eabb8da7268aa9d61ba4348347417b04452310bf3b5b5258ac7" -dependencies = [ - "async-std", - "dnssector", - "rand 0.8.4", -] - -[[package]] -name = "dnssector" -version = "0.2.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef40cef9c349123274f45efc0021dcd1bd4b5b35226eafe4b84a9d8a2a6deeeb" -dependencies = [ - "anyhow", - "byteorder", - "chomp", - "hex", - "libc", - "rand 0.8.4", - "thiserror", -] - [[package]] name = "ecies-ed25519" version = "0.5.1" @@ -733,27 +427,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "either" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a39bffec1e2015c5d8a6773cb0cf48d0d758c842398f624c34969071f5499ea7" - -[[package]] -name = "event-listener" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" - -[[package]] -name = "fastrand" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b394ed3d285a429378d3b384b9eb1285267e7df4b166df24b7a6939a04dc392e" -dependencies = [ - "instant", -] - [[package]] name = "form_urlencoded" version = "1.0.1" @@ -764,42 +437,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "futures-channel" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" -dependencies = [ - "futures-core", -] - -[[package]] -name = "futures-core" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" - -[[package]] -name = "futures-io" -version = "0.3.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - [[package]] name = "gdk-pixbuf-sys" version = "0.10.0" @@ -855,7 +492,7 @@ version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.9.0+wasi-snapshot-preview1", ] @@ -866,7 +503,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "wasi 0.10.2+wasi-snapshot-preview1", ] @@ -891,7 +528,7 @@ dependencies = [ "gobject-sys", "libc", "system-deps", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -904,19 +541,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "gloo-timers" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47204a46aaff920a1ea58b11d03dec6f704287d27561724a4631e450654a891f" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "gobject-sys" version = "0.10.0" @@ -1016,15 +640,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "instant" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "itoa" version = "0.4.7" @@ -1049,25 +664,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - -[[package]] -name = "kv-log-macro" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" -dependencies = [ - "log", -] - [[package]] name = "lazy_static" version = "1.4.0" @@ -1086,8 +682,7 @@ version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ - "cfg-if 1.0.0", - "value-bag", + "cfg-if", ] [[package]] @@ -1105,12 +700,6 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - [[package]] name = "mio" version = "0.7.13" @@ -1121,7 +710,7 @@ dependencies = [ "log", "miow", "ntapi", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1130,7 +719,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1139,7 +728,7 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1201,7 +790,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b46b233de7d83bc167fe43ae2dda3b5b84e80e09cceba581e4decb958a4896bf" dependencies = [ "pathdiff", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1216,12 +805,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - [[package]] name = "pathdiff" version = "0.2.0" @@ -1243,37 +826,12 @@ dependencies = [ "ucd-trie", ] -[[package]] -name = "pin-project-lite" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "pkg-config" version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c" -[[package]] -name = "polling" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92341d779fa34ea8437ef4d82d440d5e1ce3f3ff7f824aa64424cd481f9a1f25" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "log", - "wepoll-ffi", - "winapi 0.3.9", -] - [[package]] name = "poly1305" version = "0.7.0" @@ -1413,7 +971,7 @@ dependencies = [ "spin", "untrusted", "web-sys", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1529,31 +1087,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ "block-buffer", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures 0.2.1", "digest", "opaque-debug", ] -[[package]] -name = "signal-hook" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c98891d737e271a2954825ef19e46bd16bdb98e2746f2eec4f7a4ef7946efd1" -dependencies = [ - "libc", - "signal-hook-registry", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - [[package]] name = "signature" version = "1.3.1" @@ -1571,29 +1110,13 @@ dependencies = [ "termcolor", ] -[[package]] -name = "slab" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c307a32c1c5c437f38c7fd45d753050587732ba8628319fbdf12a7e289ccc590" - -[[package]] -name = "socket2" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad" -dependencies = [ - "libc", - "winapi 0.3.9", -] - [[package]] name = "soup-sys" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3c7adf08565630bbb71f955f11f8a68464817ded2703a3549747c235b58a13e" dependencies = [ - "bitflags 1.2.1", + "bitflags", "gio-sys", "glib-sys", "gobject-sys", @@ -1736,7 +1259,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbb8681124ddad2b07e677d7a99f564c9edbd289cc53cdc0010fd110cb4818ec" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1746,7 +1269,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" dependencies = [ "libc", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1888,16 +1411,6 @@ dependencies = [ "serde", ] -[[package]] -name = "value-bag" -version = "1.0.0-alpha.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd320e1520f94261153e96f7534476ad869c14022aee1e59af7c778075d840ae" -dependencies = [ - "ctor", - "version_check", -] - [[package]] name = "version-compare" version = "0.0.10" @@ -1910,12 +1423,6 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - [[package]] name = "wasi" version = "0.9.0+wasi-snapshot-preview1" @@ -1934,7 +1441,7 @@ version = "0.2.76" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce9b1b516211d33767048e5d47fa2a381ed8b76fc48d2ce4aa39877f9f183e0" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -1953,18 +1460,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95fded345a6559c2cfee778d562300c581f7d4ff3edb9b0d230d69800d213972" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.76" @@ -2023,7 +1518,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "389e5138c85a0d111b9bda05b59efa8562315e1d657d72451410e12c858f0619" dependencies = [ "atk-sys", - "bitflags 1.2.1", + "bitflags", "cairo-sys-rs", "gdk-pixbuf-sys", "gdk-sys", @@ -2075,21 +1570,6 @@ dependencies = [ "webkit2gtk-sys", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -2100,12 +1580,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -2118,7 +1592,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 5cee830..e0c7787 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "alfis" -version = "0.6.6" +version = "0.6.7" authors = ["Revertron "] edition = "2018" build = "build.rs" @@ -39,7 +39,6 @@ sqlite = "0.26.0" uuid = { version = "0.8.2", features = ["serde", "v4"] } mio = { version = "0.7.13", features = ["os-poll", "net"] } ureq = "2.2" -dnsclient = "0.1" lru = "0.6" derive_more = "0.99.16" lazy_static = "1.4.0" diff --git a/src/dns/client.rs b/src/dns/client.rs index 13b0149..4c5f032 100644 --- a/src/dns/client.rs +++ b/src/dns/client.rs @@ -3,7 +3,7 @@ use std::io::{Write, Read}; use std::marker::{Send, Sync}; use std::net::{SocketAddr, TcpStream, ToSocketAddrs, UdpSocket, IpAddr}; -use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::atomic::{AtomicUsize, Ordering, AtomicBool}; use std::sync::mpsc::{channel, Sender}; use std::sync::{Arc, Mutex, RwLock}; use std::thread::{sleep, Builder}; @@ -17,8 +17,7 @@ use log::{debug, error, info, trace, warn}; use crate::dns::buffer::{BytePacketBuffer, PacketBuffer, StreamPacketBuffer, VectorPacketBuffer}; use crate::dns::netutil::{read_packet_length, write_packet_length}; -use crate::dns::protocol::{DnsPacket, DnsQuestion, QueryType}; -use dnsclient::UpstreamServer; +use crate::dns::protocol::{DnsPacket, DnsQuestion, QueryType, DnsRecord}; use lru::LruCache; #[derive(Debug, Display, From, Error)] @@ -37,6 +36,7 @@ pub trait DnsClient { fn get_failed_count(&self) -> usize; fn run(&self) -> Result<()>; + fn stop(&mut self); fn send_query(&self, qname: &str, qtype: QueryType, server: &str, recursive: bool) -> Result; } @@ -61,7 +61,10 @@ pub struct DnsNetworkClient { socket_ipv6: UdpSocket, /// Queries in progress - pending_queries: Arc>> + pending_queries: Arc>>, + + /// Stopping handle + stopped: Arc } /// A query in progress. This struct holds the `id` if the request, and a channel @@ -85,7 +88,8 @@ impl DnsNetworkClient { seq: AtomicUsize::new(0), socket_ipv4: UdpSocket::bind(format!("0.0.0.0:{}", port)).expect("Error binding IPv4"), socket_ipv6: UdpSocket::bind(format!("[::]:{}", port + 1)).expect("Error binding IPv6"), - pending_queries: Arc::new(Mutex::new(Vec::new())) + pending_queries: Arc::new(Mutex::new(Vec::new())), + stopped: Arc::new(AtomicBool::new(false)) } } @@ -197,15 +201,22 @@ impl DnsClient for DnsNetworkClient { /// The run method launches a worker thread. Unless this thread is running, no /// responses will ever be generated, and clients will just block indefinitely. fn run(&self) -> Result<()> { + let timeout = Some(std::time::Duration::from_millis(500)); // Start the thread for handling incoming responses { let socket_copy = self.socket_ipv4.try_clone()?; + let _ = socket_copy.set_read_timeout(timeout); let pending_queries_lock = self.pending_queries.clone(); + let stopped = Arc::clone(&self.stopped); Builder::new() .name("DnsNetworkClient-worker-thread".into()) .spawn(move || { loop { + if stopped.load(Ordering::SeqCst) { + break; + } + // Read data into a buffer let mut res_buffer = BytePacketBuffer::new(); match socket_copy.recv_from(&mut res_buffer.buf) { @@ -253,12 +264,18 @@ impl DnsClient for DnsNetworkClient { // Start the same thread for IPv6 { let socket_copy = self.socket_ipv6.try_clone()?; + let _ = socket_copy.set_read_timeout(timeout); let pending_queries_lock = self.pending_queries.clone(); + let stopped = Arc::clone(&self.stopped); Builder::new() .name("DnsNetworkClient-worker-thread".into()) .spawn(move || { loop { + if stopped.load(Ordering::SeqCst) { + break; + } + // Read data into a buffer let mut res_buffer = BytePacketBuffer::new(); match socket_copy.recv_from(&mut res_buffer.buf) { @@ -306,12 +323,16 @@ impl DnsClient for DnsNetworkClient { // Start the thread for timing out requests { let pending_queries_lock = self.pending_queries.clone(); + let stopped = Arc::clone(&self.stopped); Builder::new() .name("DnsNetworkClient-timeout-thread".into()) .spawn(move || { - let timeout = Duration::seconds(10); + let timeout = Duration::seconds(5); loop { + if stopped.load(Ordering::SeqCst) { + break; + } if let Ok(mut pending_queries) = pending_queries_lock.lock() { let mut finished_queries = Vec::new(); for (i, pending_query) in pending_queries.iter().enumerate() { @@ -336,6 +357,10 @@ impl DnsClient for DnsNetworkClient { Ok(()) } + fn stop(&mut self) { + self.stopped.store(true, Ordering::SeqCst); + } + fn send_query(&self, qname: &str, qtype: QueryType, server: &str, recursive: bool) -> Result { let packet = self.send_udp_query(qname, qtype, server, recursive)?; if !packet.header.truncated_message { @@ -359,11 +384,9 @@ impl HttpsDnsClient { let servers = bootstraps .iter() .filter_map(|addr| addr.parse().ok()) - .map(|addr: SocketAddr| UpstreamServer::new(addr.clone())) - .collect::>(); + .collect::>(); trace!("Using bootstraps: {:?}", &servers); - let dns_client = dnsclient::sync::DNSClient::new(servers); let cache: LruCache> = LruCache::new(10); let cache = RwLock::new(cache); @@ -383,13 +406,30 @@ impl HttpsDnsClient { return Ok(addrs.clone()); } + let port = 10000 + (rand::random::() % 50000); + let mut dns_client = DnsNetworkClient::new(port); + dns_client.run().unwrap(); + let mut result: Vec = Vec::new(); - if let Ok(addrs) = dns_client.query_a(&addr) { - result.extend(addrs.into_iter().map(|ip| IpAddr::V4(ip))) - } - if let Ok(addrs) = dns_client.query_aaaa(&addr) { - result.extend(addrs.into_iter().map(|ip| IpAddr::V6(ip))); + for server in &servers { + if let Ok(res) = dns_client.send_udp_query(&addr, QueryType::A, server, true) { + for answer in &res.answers { + match answer { + DnsRecord::A { addr, .. } => result.push(IpAddr::V4(addr.clone())), + _ => {} + } + } + } + if let Ok(res) = dns_client.send_udp_query(&addr, QueryType::AAAA, server, true) { + for answer in &res.answers { + match answer { + DnsRecord::AAAA { addr, .. } => result.push(IpAddr::V6(addr.clone())), + _ => {} + } + } + } } + dns_client.stop(); let addrs = result .into_iter() @@ -420,6 +460,10 @@ impl DnsClient for HttpsDnsClient { Ok(()) } + fn stop(&mut self) { + debug!("Stopped DoH client"); + } + fn send_query(&self, qname: &str, qtype: QueryType, doh_url: &str, recursive: bool) -> Result { // Create DnsPacket let mut packet = DnsPacket::new(); @@ -509,6 +553,10 @@ pub mod tests { Ok(()) } + fn stop(&mut self) { + // Nothing + } + fn send_query(&self, qname: &str, qtype: QueryType, server: &str, recursive: bool) -> Result { (self.callback)(qname, qtype, server, recursive) }