From e1f1c94d32d2d6c56db4b36e06779c20e5f71798 Mon Sep 17 00:00:00 2001 From: Alexander Shishenko Date: Wed, 10 Nov 2021 04:45:53 +0300 Subject: [PATCH] Working implementation of gossipsub + indexing (only triggered via grpc) --- Cargo.lock | 1194 ++---------------------- src/daemon-rs/Cargo.toml | 8 +- src/daemon-rs/build.rs | 1 + src/daemon-rs/src/bucket/manager.rs | 68 ++ src/daemon-rs/src/bucket/mod.rs | 68 +- src/daemon-rs/src/bucket/watcher.rs | 32 - src/daemon-rs/src/discover.rs | 51 - src/daemon-rs/src/grpc.rs | 2 +- src/daemon-rs/src/main.rs | 22 +- src/daemon-rs/src/p2p.rs | 172 ++++ src/daemon-rs/src/p2p_server.rs | 1 - src/daemon-rs/src/proto/protocol.proto | 8 + src/daemon-rs/src/settings.rs | 11 + src/util/Cargo.toml | 2 +- src/util/src/index.rs | 11 +- src/util/src/indexer.rs | 22 +- src/util/src/path_normalize.rs | 3 +- src/util/src/secret.rs | 5 + 18 files changed, 388 insertions(+), 1293 deletions(-) create mode 100644 src/daemon-rs/src/bucket/manager.rs delete mode 100644 src/daemon-rs/src/bucket/watcher.rs delete mode 100644 src/daemon-rs/src/discover.rs create mode 100644 src/daemon-rs/src/p2p.rs delete mode 100644 src/daemon-rs/src/p2p_server.rs create mode 100644 src/daemon-rs/src/proto/protocol.proto diff --git a/Cargo.lock b/Cargo.lock index f3bcf823..8766f568 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - [[package]] name = "aead" version = "0.4.3" @@ -45,9 +39,9 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "991984e3fd003e7ba02eb724f87a0f997b78677c46c0e91f8424ad7394c9886a" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ "getrandom 0.2.3", "once_cell", @@ -65,9 +59,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.44" +version = "1.0.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" +checksum = "ee10e43ae4a853c0a3591d4e2ada1719e553be18199d9da9d4a83f5927c2f5c7" [[package]] name = "arrayref" @@ -75,59 +69,12 @@ version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "asn1_der" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" -[[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" @@ -142,70 +89,11 @@ dependencies = [ "parking", "polling", "slab", - "socket2 0.4.2", + "socket2", "waker-fn", "winapi", ] -[[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-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", - "crossbeam-utils", - "futures-channel", - "futures-core", - "futures-io", - "futures-lite", - "gloo-timers", - "kv-log-macro", - "log", - "memchr", - "num_cpus", - "once_cell", - "pin-project-lite 0.2.7", - "pin-utils", - "slab", - "wasm-bindgen-futures", -] - -[[package]] -name = "async-std-resolver" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed4e2c3da14d8ad45acb1e3191db7a918e9505b6f155b218e70a7c9a1a48c638" -dependencies = [ - "async-std", - "async-trait", - "futures-io", - "futures-util", - "pin-utils", - "trust-dns-resolver", -] - [[package]] name = "async-stream" version = "0.3.2" @@ -227,12 +115,6 @@ dependencies = [ "syn", ] -[[package]] -name = "async-task" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0" - [[package]] name = "async-trait" version = "0.1.51" @@ -254,7 +136,7 @@ dependencies = [ "futures-sink", "futures-util", "memchr", - "pin-project-lite 0.2.7", + "pin-project-lite", ] [[package]] @@ -266,24 +148,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "atomic-waker" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a" - -[[package]] -name = "attohttpc" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247" -dependencies = [ - "http", - "log", - "url", - "wildmatch", -] - [[package]] name = "atty" version = "0.2.14" @@ -313,12 +177,6 @@ version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" -[[package]] -name = "bimap" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ae17cabbc8a38a1e3e4c1a6a664e9a09672dc14d0896fa8d865d3a5a446b07" - [[package]] name = "bitflags" version = "1.3.2" @@ -362,20 +220,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" -[[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 = "bs58" version = "0.4.0" @@ -570,41 +414,6 @@ dependencies = [ "libc", ] -[[package]] -name = "crc32fast" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db" -dependencies = [ - "cfg-if", - "lazy_static", -] - -[[package]] -name = "crunchy" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" - [[package]] name = "crypto-mac" version = "0.8.0" @@ -615,16 +424,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctor" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc0a48a9b826acdf4028595adc9db92caea352f7af011a3034acd172a52a0aa" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ctr" version = "0.8.0" @@ -634,17 +433,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "cuckoofilter" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b810a8449931679f64cd7eef1bbd0fa315801b6d5d9cdc1ace2804d6529eee18" -dependencies = [ - "byteorder", - "fnv", - "rand 0.7.3", -] - [[package]] name = "curve25519-dalek" version = "3.2.0" @@ -719,18 +507,17 @@ dependencies = [ name = "daemon-rs" version = "0.1.0" dependencies = [ - "bytes", + "built", "directories", "env_logger", "figment", "futures", "hex", - "igd", "libp2p", "librevault_util", "log", - "notify", "prost", + "prost-build", "serde", "serde_json", "tokio", @@ -784,12 +571,6 @@ dependencies = [ "quick-error", ] -[[package]] -name = "dtoa" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0" - [[package]] name = "ed25519" version = "1.2.0" @@ -833,18 +614,6 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -[[package]] -name = "enum-as-inner" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c5f0096a91d210159eceb2ff5e1c4da18388a170e1e3ce948aac9c8fdbbf595" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "env_logger" version = "0.9.0" @@ -858,12 +627,6 @@ dependencies = [ "termcolor", ] -[[package]] -name = "event-listener" -version = "2.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7531096570974c3a9dcf9e4b8e1cede1ec26cf5046219fb3b9d897503b9be59" - [[package]] name = "fallible-iterator" version = "0.2.0" @@ -898,37 +661,12 @@ dependencies = [ "version_check", ] -[[package]] -name = "filetime" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "winapi", -] - [[package]] name = "fixedbitset" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "398ea4fabe40b9b0d885340a2a991a44c8a645624075ad966d21f88688e2b69e" -[[package]] -name = "flate2" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" -dependencies = [ - "cfg-if", - "crc32fast", - "libc", - "libz-sys", - "miniz_oxide", -] - [[package]] name = "fnv" version = "1.0.7" @@ -960,15 +698,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fsevent-sys" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0e564d24da983c053beff1bb7178e237501206840a3e6bf4e267b9e8ae734a" -dependencies = [ - "libc", -] - [[package]] name = "futures" version = "0.3.17" @@ -1029,7 +758,7 @@ dependencies = [ "futures-io", "memchr", "parking", - "pin-project-lite 0.2.7", + "pin-project-lite", "waker-fn", ] @@ -1046,17 +775,6 @@ dependencies = [ "syn", ] -[[package]] -name = "futures-rustls" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a1387e07917c711fb4ee4f48ea0adb04a3c9739e53ef85bf43ae1edc2937a8b" -dependencies = [ - "futures-io", - "rustls", - "webpki", -] - [[package]] name = "futures-sink" version = "0.3.17" @@ -1089,7 +807,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.7", + "pin-project-lite", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -1138,24 +856,11 @@ dependencies = [ "polyval", ] -[[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 = "h2" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c06815895acec637cd6ed6e9662c935b866d20a106f8361892893a7d9234964" +checksum = "7fd819562fcebdac5afc5c113c3ec36f902840b70fd4fc458799c8ce4607ae55" dependencies = [ "bytes", "fnv", @@ -1218,38 +923,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" -[[package]] -name = "hmac" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840" -dependencies = [ - "crypto-mac", - "digest", -] - -[[package]] -name = "hmac-drbg" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" -dependencies = [ - "digest", - "generic-array", - "hmac", -] - -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - [[package]] name = "http" version = "0.2.5" @@ -1269,7 +942,7 @@ checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ "bytes", "http", - "pin-project-lite 0.2.7", + "pin-project-lite", ] [[package]] @@ -1306,8 +979,8 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project-lite 0.2.7", - "socket2 0.4.2", + "pin-project-lite", + "socket2", "tokio", "tower-service", "tracing", @@ -1321,7 +994,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ "hyper", - "pin-project-lite 0.2.7", + "pin-project-lite", "tokio", "tokio-io-timeout", ] @@ -1339,9 +1012,9 @@ dependencies = [ [[package]] name = "if-addrs" -version = "0.6.6" +version = "0.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a83ec4af652890ac713ffd8dc859e650420a5ef47f7b9be29b6664ab50fbc8" +checksum = "2273e421f7c4f0fc99e1934fe4776f59d8df2972f4199d703fc0da9f2a9f73de" dependencies = [ "if-addrs-sys", "libc", @@ -1374,24 +1047,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "igd" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4e7ee8b51e541486d7040883fe1f00e2a9954bcc24fd155b7e4f03ed4b93dd" -dependencies = [ - "attohttpc", - "bytes", - "futures", - "http", - "hyper", - "log", - "rand 0.8.4", - "tokio", - "url", - "xmltree", -] - [[package]] name = "indexmap" version = "1.7.0" @@ -1402,26 +1057,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "inotify" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5fc8f41dbaa9c8492a96c8afffda4f76896ee041d6a57606e70581b80c901f" -dependencies = [ - "bitflags", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - [[package]] name = "instant" version = "0.1.12" @@ -1431,18 +1066,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "ipconfig" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" -dependencies = [ - "socket2 0.3.19", - "widestring", - "winapi", - "winreg", -] - [[package]] name = "ipnet" version = "2.3.1" @@ -1479,35 +1102,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7" -[[package]] -name = "kqueue" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "058a107a784f8be94c7d35c1300f4facced2e93d2fbe5b1452b44e905ddca4a9" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" -dependencies = [ - "bitflags", - "libc", -] - -[[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" @@ -1516,9 +1110,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.103" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "libp2p" @@ -1531,28 +1125,13 @@ dependencies = [ "futures", "lazy_static", "libp2p-core", - "libp2p-deflate", - "libp2p-dns", - "libp2p-floodsub", "libp2p-gossipsub", - "libp2p-identify", - "libp2p-kad", "libp2p-mdns", - "libp2p-metrics", "libp2p-mplex", "libp2p-noise", - "libp2p-ping", - "libp2p-plaintext", - "libp2p-pnet", - "libp2p-relay", - "libp2p-rendezvous", - "libp2p-request-response", "libp2p-swarm", "libp2p-swarm-derive", "libp2p-tcp", - "libp2p-uds", - "libp2p-wasm-ext", - "libp2p-websocket", "libp2p-yamux", "multiaddr", "parking_lot", @@ -1575,7 +1154,6 @@ dependencies = [ "futures", "futures-timer", "lazy_static", - "libsecp256k1", "log", "multiaddr", "multihash", @@ -1595,49 +1173,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-deflate" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51a800adb195f33de63f4b17b63fe64cfc23bf2c6a0d3d0d5321328664e65197" -dependencies = [ - "flate2", - "futures", - "libp2p-core", -] - -[[package]] -name = "libp2p-dns" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb8f89d15cb6e3c5bc22afff7513b11bab7856f2872d3cfba86f7f63a06bc498" -dependencies = [ - "async-std-resolver", - "futures", - "libp2p-core", - "log", - "smallvec", - "trust-dns-resolver", -] - -[[package]] -name = "libp2p-floodsub" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aab3d7210901ea51b7bae2b581aa34521797af8c4ec738c980bda4a06434067f" -dependencies = [ - "cuckoofilter", - "fnv", - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "prost", - "prost-build", - "rand 0.7.3", - "smallvec", -] - [[package]] name = "libp2p-gossipsub" version = "0.33.0" @@ -1664,49 +1199,6 @@ dependencies = [ "wasm-timer", ] -[[package]] -name = "libp2p-identify" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca1275574183f288ff8b72d535d5ffa5ea9292ef7829af8b47dcb197c7b0dcd" -dependencies = [ - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "lru 0.6.6", - "prost", - "prost-build", - "smallvec", - "wasm-timer", -] - -[[package]] -name = "libp2p-kad" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2297dc0ca285f3a09d1368bde02449e539b46f94d32d53233f53f6625bcd3ba" -dependencies = [ - "arrayvec", - "asynchronous-codec", - "bytes", - "either", - "fnv", - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "prost", - "prost-build", - "rand 0.7.3", - "sha2", - "smallvec", - "uint", - "unsigned-varint", - "void", - "wasm-timer", -] - [[package]] name = "libp2p-mdns" version = "0.32.0" @@ -1724,24 +1216,10 @@ dependencies = [ "log", "rand 0.8.4", "smallvec", - "socket2 0.4.2", + "socket2", "void", ] -[[package]] -name = "libp2p-metrics" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4af432fcdd2f8ba4579b846489f8f0812cfd738ced2c0af39df9b1c48bbb6ab2" -dependencies = [ - "libp2p-core", - "libp2p-identify", - "libp2p-kad", - "libp2p-ping", - "libp2p-swarm", - "open-metrics-client", -] - [[package]] name = "libp2p-mplex" version = "0.30.0" @@ -1782,116 +1260,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-ping" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80ef7b0ec5cf06530d9eb6cf59ae49d46a2c45663bde31c25a12f682664adbcf" -dependencies = [ - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.7.3", - "void", - "wasm-timer", -] - -[[package]] -name = "libp2p-plaintext" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fba1a6ff33e4a274c89a3b1d78b9f34f32af13265cc5c46c16938262d4e945a" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "prost", - "prost-build", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-pnet" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1a458bbda880107b5b36fcb9b5a1ef0c329685da0e203ed692a8ebe64cc92c" -dependencies = [ - "futures", - "log", - "pin-project 1.0.8", - "rand 0.7.3", - "salsa20", - "sha3", -] - -[[package]] -name = "libp2p-relay" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2852b61c90fa8ce3c8fcc2aba76e6cefc20d648f9df29157d6b3a916278ef3e3" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "futures-timer", - "libp2p-core", - "libp2p-swarm", - "log", - "pin-project 1.0.8", - "prost", - "prost-build", - "rand 0.7.3", - "smallvec", - "unsigned-varint", - "void", - "wasm-timer", -] - -[[package]] -name = "libp2p-rendezvous" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14a6d2b9e7677eff61dc3d2854876aaf3976d84a01ef6664b610c77a0c9407c5" -dependencies = [ - "asynchronous-codec", - "bimap", - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "prost", - "prost-build", - "rand 0.8.4", - "sha2", - "thiserror", - "unsigned-varint", - "void", - "wasm-timer", -] - -[[package]] -name = "libp2p-request-response" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a877a4ced6d46bf84677e1974e8cf61fb434af73b2e96fb48d6cb6223a4634d8" -dependencies = [ - "async-trait", - "bytes", - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "lru 0.7.0", - "rand 0.7.3", - "smallvec", - "unsigned-varint", - "wasm-timer", -] - [[package]] name = "libp2p-swarm" version = "0.31.0" @@ -1924,59 +1292,15 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7399c5b6361ef525d41c11fcf51635724f832baf5819b30d3d873eabb4fbae4b" dependencies = [ - "async-io", "futures", "futures-timer", - "if-watch", + "if-addrs", "ipnet", "libc", "libp2p-core", "log", - "socket2 0.4.2", -] - -[[package]] -name = "libp2p-uds" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8b7563e46218165dfd60f64b96f7ce84590d75f53ecbdc74a7dd01450dc5973" -dependencies = [ - "async-std", - "futures", - "libp2p-core", - "log", -] - -[[package]] -name = "libp2p-wasm-ext" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1008a302b73c5020251f9708c653f5ed08368e530e247cc9cd2f109ff30042cf" -dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "parity-send-wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", -] - -[[package]] -name = "libp2p-websocket" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e12df82d1ed64969371a9e65ea92b91064658604cc2576c2757f18ead9a1cf" -dependencies = [ - "either", - "futures", - "futures-rustls", - "libp2p-core", - "log", - "quicksink", - "rw-stream-sink", - "soketto", - "url", - "webpki-roots", + "socket2", + "tokio", ] [[package]] @@ -2029,69 +1353,10 @@ dependencies = [ ] [[package]] -name = "libsecp256k1" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" -dependencies = [ - "arrayref", - "base64", - "digest", - "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", - "rand 0.8.4", - "serde", - "sha2", - "typenum", -] - -[[package]] -name = "libsecp256k1-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" -dependencies = [ - "crunchy", - "digest", - "subtle", -] - -[[package]] -name = "libsecp256k1-gen-ecmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsecp256k1-gen-genmult" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" -dependencies = [ - "libsecp256k1-core", -] - -[[package]] -name = "libsqlite3-sys" -version = "0.23.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd5850c449b40bacb498b2bbdfaff648b1b055630073ba8db499caf2d0ea9f2" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - -[[package]] -name = "libz-sys" -version = "1.1.3" +name = "libsqlite3-sys" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de5435b8549c16d423ed0c03dbaafe57cf6c3344744f1242520d59c9d8ecec66" +checksum = "abd5850c449b40bacb498b2bbdfaff648b1b055630073ba8db499caf2d0ea9f2" dependencies = [ "cc", "pkg-config", @@ -2107,12 +1372,6 @@ dependencies = [ "cc", ] -[[package]] -name = "linked-hash-map" -version = "0.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" - [[package]] name = "lock_api" version = "0.4.5" @@ -2129,34 +1388,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" dependencies = [ "cfg-if", - "value-bag", -] - -[[package]] -name = "lru" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ea2d928b485416e8908cff2d97d621db22b27f7b3b6729e438bcf42c671ba91" -dependencies = [ - "hashbrown", -] - -[[package]] -name = "lru" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c748cfe47cb8da225c37595b3108bea1c198c84aaae8ea0ba76d01dda9fc803" -dependencies = [ - "hashbrown", -] - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", ] [[package]] @@ -2165,12 +1396,6 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6947f235ac161b1db484c51e222003b8eb4e9190b5c46651f508c353ad9176fe" -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - [[package]] name = "matches" version = "0.1.9" @@ -2183,16 +1408,6 @@ version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" -[[package]] -name = "miniz_oxide" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] - [[package]] name = "mio" version = "0.7.14" @@ -2286,24 +1501,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" -[[package]] -name = "notify" -version = "5.0.0-pre.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245d358380e2352c2d020e8ee62baac09b3420f1f6c012a31326cfced4ad487d" -dependencies = [ - "bitflags", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "mio", - "walkdir", - "winapi", -] - [[package]] name = "ntapi" version = "0.3.6" @@ -2365,29 +1562,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" -[[package]] -name = "open-metrics-client" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7337d80c23c2d8b1349563981bc4fb531220733743ba8115454a67b181173f0d" -dependencies = [ - "dtoa", - "itoa", - "open-metrics-client-derive-text-encode", - "owning_ref", -] - -[[package]] -name = "open-metrics-client-derive-text-encode" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a15c83b586f00268c619c1cb3340ec1a6f59dd9ba1d9833a273a68e6d5cd8ffc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "openssl" version = "0.10.38" @@ -2424,21 +1598,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "owning_ref" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" -dependencies = [ - "stable_deref_trait", -] - -[[package]] -name = "parity-send-wrapper" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6f" - [[package]] name = "parking" version = "2.0.0" @@ -2541,12 +1700,6 @@ dependencies = [ "syn", ] -[[package]] -name = "pin-project-lite" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" - [[package]] name = "pin-project-lite" version = "0.2.7" @@ -2561,9 +1714,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.20" +version = "0.3.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb" +checksum = "12295df4f294471248581bc09bef3c38a5e46f1e36d6a37353621a0c6c357e1f" [[package]] name = "polling" @@ -2603,9 +1756,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.10" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857" +checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" [[package]] name = "proc-macro-crate" @@ -2655,9 +1808,9 @@ checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.29" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ "unicode-xid", ] @@ -2721,17 +1874,6 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quicksink" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858" -dependencies = [ - "futures-core", - "futures-sink", - "pin-project-lite 0.1.12", -] - [[package]] name = "quote" version = "1.0.10" @@ -2867,16 +2009,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] - [[package]] name = "ring" version = "0.16.20" @@ -2916,19 +2048,6 @@ dependencies = [ "semver 0.11.0", ] -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64", - "log", - "ring", - "sct", - "webpki", -] - [[package]] name = "rw-stream-sink" version = "0.2.1" @@ -2946,24 +2065,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" -[[package]] -name = "salsa20" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "scopeguard" version = "1.1.0" @@ -2976,16 +2077,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e114536316b51a5aa7a0e59fc49661fd263c5507dd08bd28de052e57626ce69" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "semver" version = "0.11.0" @@ -3035,28 +2126,15 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.68" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8" +checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" dependencies = [ "itoa", "ryu", "serde", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer", - "cfg-if", - "cpufeatures", - "digest", - "opaque-debug", -] - [[package]] name = "sha2" version = "0.9.8" @@ -3140,17 +2218,6 @@ dependencies = [ "x25519-dalek", ] -[[package]] -name = "socket2" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" -dependencies = [ - "cfg-if", - "libc", - "winapi", -] - [[package]] name = "socket2" version = "0.4.2" @@ -3161,34 +2228,12 @@ dependencies = [ "winapi", ] -[[package]] -name = "soketto" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "083624472e8817d44d02c0e55df043737ff11f279af924abdf93845717c2b75c" -dependencies = [ - "base64", - "bytes", - "flate2", - "futures", - "httparse", - "log", - "rand 0.8.4", - "sha-1", -] - [[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "stable_deref_trait" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" - [[package]] name = "static_assertions" version = "1.1.0" @@ -3209,9 +2254,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.80" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ "proc-macro2", "quote", @@ -3320,7 +2365,7 @@ dependencies = [ "mio", "num_cpus", "once_cell", - "pin-project-lite 0.2.7", + "pin-project-lite", "signal-hook-registry", "tokio-macros", "winapi", @@ -3332,15 +2377,15 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90c49f106be240de154571dd31fbe48acb10ba6c6dd6f6517ad603abffa42de9" dependencies = [ - "pin-project-lite 0.2.7", + "pin-project-lite", "tokio", ] [[package]] name = "tokio-macros" -version = "1.5.0" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2dd85aeaba7b68df939bd357c6afb36c87951be9e80bf9c859f2fc3e9fca0fd" +checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095" dependencies = [ "proc-macro2", "quote", @@ -3349,26 +2394,26 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2f3f698253f03119ac0102beaa64f67a67e08074d03a22d18784104543727f" +checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" dependencies = [ "futures-core", - "pin-project-lite 0.2.7", + "pin-project-lite", "tokio", ] [[package]] name = "tokio-util" -version = "0.6.8" +version = "0.6.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d3725d3efa29485e87311c5b699de63cde14b00ed4d256b8318aa30ca452cd" +checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" dependencies = [ "bytes", "futures-core", "futures-sink", "log", - "pin-project-lite 0.2.7", + "pin-project-lite", "tokio", ] @@ -3449,7 +2494,7 @@ dependencies = [ "futures-util", "indexmap", "pin-project 1.0.8", - "pin-project-lite 0.2.7", + "pin-project-lite", "rand 0.8.4", "slab", "tokio", @@ -3480,7 +2525,7 @@ checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" dependencies = [ "cfg-if", "log", - "pin-project-lite 0.2.7", + "pin-project-lite", "tracing-attributes", "tracing-core", ] @@ -3515,49 +2560,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "trust-dns-proto" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0d7f5db438199a6e2609debe3f69f808d074e0a2888ee0bccb45fe234d03f4" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna", - "ipnet", - "lazy_static", - "log", - "rand 0.8.4", - "smallvec", - "thiserror", - "tinyvec", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.20.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ad17b608a64bd0735e67bde16b0636f8aa8591f831a25d18443ed00a699770" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "log", - "lru-cache", - "parking_lot", - "resolv-conf", - "smallvec", - "thiserror", - "trust-dns-proto", -] - [[package]] name = "try-lock" version = "0.2.3" @@ -3576,18 +2578,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c" -[[package]] -name = "uint" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6470ab50f482bde894a037a57064480a246dbfdd5960bd65a44824693f08da5f" -dependencies = [ - "byteorder", - "crunchy", - "hex", - "static_assertions", -] - [[package]] name = "uncased" version = "0.9.6" @@ -3651,14 +2641,12 @@ dependencies = [ [[package]] name = "unsigned-varint" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f8d425fafb8cd76bc3f22aace4af471d3156301d7508f2107e98fbeae10bc7f" +checksum = "d86a8dc7f45e4c1b0d30e43038c38f274e77af056aa5f74b93c2cf9eb3c1c836" dependencies = [ "asynchronous-codec", "bytes", - "futures-io", - "futures-util", ] [[package]] @@ -3679,16 +2667,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "value-bag" -version = "1.0.0-alpha.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79923f7731dc61ebfba3633098bf3ac533bbd35ccd8c57e7088d9a5eebe0263f" -dependencies = [ - "ctor", - "version_check", -] - [[package]] name = "vcpkg" version = "0.2.15" @@ -3713,17 +2691,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - [[package]] name = "want" version = "0.3.0" @@ -3837,25 +2804,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki", -] - [[package]] name = "wepoll-ffi" version = "0.1.2" @@ -3876,18 +2824,6 @@ dependencies = [ "libc", ] -[[package]] -name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - -[[package]] -name = "wildmatch" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a" - [[package]] name = "winapi" version = "0.3.9" @@ -3919,15 +2855,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "winreg" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" -dependencies = [ - "winapi", -] - [[package]] name = "x25519-dalek" version = "1.2.0" @@ -3939,21 +2866,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "xml-rs" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" - -[[package]] -name = "xmltree" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" -dependencies = [ - "xml-rs", -] - [[package]] name = "yamux" version = "0.9.0" @@ -3979,9 +2891,9 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.2.0" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7" +checksum = "65f1a51723ec88c66d5d1fe80c841f17f63587d6691901d66be9bec6c3b51f73" dependencies = [ "proc-macro2", "quote", diff --git a/src/daemon-rs/Cargo.toml b/src/daemon-rs/Cargo.toml index 427147e8..b5e6094e 100644 --- a/src/daemon-rs/Cargo.toml +++ b/src/daemon-rs/Cargo.toml @@ -11,17 +11,17 @@ serde = { version = "1", features = ["derive"] } #simple_logger = "1.13.0" directories = "4.0.1" tokio = { version = "1.13.0", features = ["rt", "macros", "rt-multi-thread", "fs", "sync", "net", "signal"] } -notify = "5.0.0-pre.13" -igd = { version = "0.12.0", features = ["aio"] } +#igd = { version = "0.12.0", features = ["aio"] } futures = "0.3.17" -bytes = "1.1.0" serde_json = "1" tonic = "0.6.1" prost = "0.9.0" tonic-reflection = "0.3.0" hex = "0.4.3" env_logger = "0.9.0" -libp2p = "0.40.0" +libp2p = { version = "0.40.0", features = ["tcp-tokio", "gossipsub", "mplex", "yamux", "noise", "mdns"], default-features = false } +built = "0.5" [build-dependencies] tonic-build = "0.6.0" +prost-build = "0.9.0" diff --git a/src/daemon-rs/build.rs b/src/daemon-rs/build.rs index b3c4ce11..ac377970 100644 --- a/src/daemon-rs/build.rs +++ b/src/daemon-rs/build.rs @@ -8,5 +8,6 @@ fn main() -> Result<(), Box> { .file_descriptor_set_path(descriptor_path) .format(true) .compile(&["src/proto/controller.proto"], &["src/proto/"])?; + prost_build::compile_protos(&["src/proto/protocol.proto"], &["src/proto/"]).unwrap(); Ok(()) } diff --git a/src/daemon-rs/src/bucket/manager.rs b/src/daemon-rs/src/bucket/manager.rs new file mode 100644 index 00000000..542fc6fc --- /dev/null +++ b/src/daemon-rs/src/bucket/manager.rs @@ -0,0 +1,68 @@ +use crate::bucket::collection::BucketCollection; +use crate::bucket::{Bucket, BucketEvent}; +use crate::settings::BucketConfig; +use log::trace; +use std::sync::{Arc, RwLock}; +use tokio::sync::{broadcast, mpsc}; + +#[derive(Clone, Debug)] +pub enum BucketManagerEvent { + BucketAdded(Arc), + BucketRemoved(Arc), + BucketEvent { + bucket: Arc, + event: BucketEvent, + }, +} + +pub struct BucketManager { + buckets: Arc>, + event_sender: broadcast::Sender, +} + +impl BucketManager { + pub fn new() -> Self { + let (event_sender, _) = broadcast::channel(128); + BucketManager { + buckets: Arc::new(RwLock::new(BucketCollection::new())), + event_sender, + } + } + + pub async fn add_bucket(&self, config: BucketConfig) { + let mut lock = self.buckets.write().unwrap(); + + let (event_sender_bucket, mut event_receiver_bucket) = mpsc::channel(128); + + let bucket = Bucket::new(config, event_sender_bucket).await; + let bucket_arc = (*lock).add_bucket(bucket); + bucket_arc.initialize().await; + trace!("Sending event for BucketAdded"); + + let _ = self + .event_sender + .send(BucketManagerEvent::BucketAdded(bucket_arc.clone())); + + let event_sender_local = self.event_sender.clone(); + + tokio::spawn(async move { + loop { + tokio::select! { + event = event_receiver_bucket.recv() => { + if let Some(event) = event { + event_sender_local.send(BucketManagerEvent::BucketEvent {bucket: bucket_arc.clone(), event}); + } else { break; } + } + } + } + }); + } + + pub fn get_event_channel(&self) -> broadcast::Receiver { + self.event_sender.subscribe() + } + + pub fn get_bucket_byid(&self, bucket_id: &[u8]) -> Option> { + self.buckets.read().unwrap().get_bucket_byid(bucket_id) + } +} diff --git a/src/daemon-rs/src/bucket/mod.rs b/src/daemon-rs/src/bucket/mod.rs index 200850c9..b7a0ce0a 100644 --- a/src/daemon-rs/src/bucket/mod.rs +++ b/src/daemon-rs/src/bucket/mod.rs @@ -1,29 +1,38 @@ +use std::borrow::Cow; +use std::fmt; +use std::fmt::Formatter; use std::path::{Path, PathBuf}; -use std::sync::{Arc, RwLock}; +use std::sync::Arc; -use collection::BucketCollection; -use librevault_util::index::Index; +use librevault_util::index::{Index, SignedMeta}; use librevault_util::secret::Secret; mod collection; -mod watcher; +pub mod manager; + use crate::settings::BucketConfig; -use hex::ToHex; +// use librevault_util::index::proto::Meta; use librevault_util::indexer::{make_meta, sign_meta}; use log::debug; +use tokio::sync::mpsc; + +#[derive(Clone, Debug)] +pub enum BucketEvent { + MetaAdded { signed_meta: SignedMeta }, +} pub struct Bucket { secret: Secret, root: PathBuf, index: Arc, - system_dir: PathBuf, + + event_sender: mpsc::Sender, } impl Bucket { - async fn new(config: BucketConfig) -> Self { - let bucket_id_hex: String = config.secret.get_id().encode_hex(); - debug!("Creating bucket: {}", bucket_id_hex); + async fn new(config: BucketConfig, event_sender: mpsc::Sender) -> Self { + debug!("Creating bucket: {}", config.secret.get_id_hex()); let system_dir = config.path.join(".librevault"); @@ -34,15 +43,19 @@ impl Bucket { secret: config.secret, root: config.path, index, - system_dir, + event_sender, } } - fn get_id(&self) -> Vec { + pub fn get_id(&self) -> Vec { self.secret.get_id() } - async fn launch_bucket(&self) { + pub fn get_id_hex(&self) -> String { + self.secret.get_id_hex() + } + + async fn initialize(&self) { let _ = tokio::task::block_in_place(move || self.index.migrate()); // TODO: block somewhere else // loop { @@ -55,31 +68,18 @@ impl Bucket { if let Ok(meta) = meta { debug!("Meta: {:?}", &meta); let signed_meta = sign_meta(&meta, &self.secret); - self.index.put_meta(signed_meta, true).unwrap(); - } - } -} - -pub struct BucketManager { - buckets: Arc>, -} + self.index.put_meta(&signed_meta, true).unwrap(); -impl BucketManager { - pub fn new() -> Self { - BucketManager { - buckets: Arc::new(RwLock::new(BucketCollection::new())), + self.event_sender + .send(BucketEvent::MetaAdded { signed_meta }) + .await + .expect("Channel must be open"); } } +} - pub async fn add_bucket(&self, config: BucketConfig) { - let mut lock = self.buckets.write().unwrap(); - - let bucket = Bucket::new(config).await; - let bucket_arc = (*lock).add_bucket(bucket); - bucket_arc.launch_bucket().await; - } - - pub fn get_bucket_byid(&self, bucket_id: &[u8]) -> Option> { - self.buckets.read().unwrap().get_bucket_byid(bucket_id) +impl fmt::Debug for Bucket { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + write!(f, "(Bucket: id={}, loc={:?})", self.get_id_hex(), self.root) } } diff --git a/src/daemon-rs/src/bucket/watcher.rs b/src/daemon-rs/src/bucket/watcher.rs deleted file mode 100644 index 9bb6aabc..00000000 --- a/src/daemon-rs/src/bucket/watcher.rs +++ /dev/null @@ -1,32 +0,0 @@ -use std::path::Path; - -use futures::channel::mpsc::{channel, Receiver}; -use futures::{SinkExt, StreamExt}; -use notify::{Event, RecommendedWatcher, RecursiveMode, Watcher}; - -fn async_watcher() -> notify::Result<(RecommendedWatcher, Receiver>)> { - let (mut tx, rx) = channel(1); - - let watcher = RecommendedWatcher::new(move |res| { - futures::executor::block_on(async { - tx.send(res).await.unwrap(); - }) - })?; - - Ok((watcher, rx)) -} - -pub async fn async_watch>(path: P, mode: RecursiveMode) -> notify::Result<()> { - let (mut watcher, mut rx) = async_watcher()?; - - watcher.watch(path.as_ref(), mode)?; - - while let Some(res) = rx.next().await { - match res { - Ok(event) => println!("changed: {:?}", event), - Err(e) => println!("watch error: {:?}", e), - } - } - - Ok(()) -} diff --git a/src/daemon-rs/src/discover.rs b/src/daemon-rs/src/discover.rs deleted file mode 100644 index 510e3a36..00000000 --- a/src/daemon-rs/src/discover.rs +++ /dev/null @@ -1,51 +0,0 @@ -use log::debug; -use serde::{Deserialize, Serialize}; -use std::net::Ipv4Addr; -use std::str::FromStr; -use std::sync::Arc; -use std::time::Duration; -use tokio::net::UdpSocket; - -#[derive(Serialize, Deserialize, Debug)] -struct McastMessage { - port: u16, - peer_id: String, - bucket_id: String, -} - -pub async fn discover_mcast() { - let sock = Arc::new(UdpSocket::bind("0.0.0.0:28914").await.unwrap()); - sock.join_multicast_v4( - Ipv4Addr::from_str("239.192.152.144").unwrap(), - Ipv4Addr::from_str("0.0.0.0").unwrap(), - ) - .unwrap(); - - let sock2 = sock.clone(); - - tokio::spawn(async move { - loop { - let msg = McastMessage { - port: 1234, - peer_id: "asdasd".to_string(), - bucket_id: "sdaasfv".to_string(), - }; - debug!("Sending multicast message: {:?}", msg); - let len = sock2 - .send_to(&*serde_json::to_vec(&msg).unwrap(), "239.192.152.144:28914") - .await - .unwrap(); - debug!("Sent {} bytes", len); - tokio::time::sleep(Duration::from_secs(1)).await; - } - }); - - loop { - let mut buf = [0u8; 65535]; - let b = sock.recv(buf.as_mut()).await.unwrap(); - let mut msg = buf.to_vec(); - msg.truncate(b); - let msg: McastMessage = serde_json::from_slice(msg.as_slice()).unwrap(); - debug!("Got message: {:?}", msg); - } -} diff --git a/src/daemon-rs/src/grpc.rs b/src/daemon-rs/src/grpc.rs index b01e1ba7..fd4925e8 100644 --- a/src/daemon-rs/src/grpc.rs +++ b/src/daemon-rs/src/grpc.rs @@ -2,7 +2,7 @@ use std::path::Path; use std::sync::Arc; use tonic::{transport::Server, Request, Response, Status}; -use crate::bucket::BucketManager; +use crate::bucket::manager::BucketManager; use crate::settings::ConfigManager; use log::debug; use proto::controller_server::{Controller, ControllerServer}; diff --git a/src/daemon-rs/src/main.rs b/src/daemon-rs/src/main.rs index 593b43a2..42146165 100644 --- a/src/daemon-rs/src/main.rs +++ b/src/daemon-rs/src/main.rs @@ -4,14 +4,13 @@ use directories::ProjectDirs; use log::{debug, info}; +use crate::p2p::run_server; use crate::settings::ConfigManager; -use bucket::BucketManager; -use librevault_util::nodekey::nodekey_write_new; +use bucket::manager::BucketManager; mod bucket; -mod discover; mod grpc; -mod p2p_server; +mod p2p; mod settings; #[tokio::main] @@ -36,19 +35,22 @@ async fn main() { std::fs::create_dir_all(&config_dir).expect("Could not create config directory"); let settings = Arc::new(ConfigManager::new(config_dir).unwrap()); - let buckets = Arc::new(BucketManager::new()); + + tokio::spawn(grpc::run_grpc(buckets.clone(), settings.clone())); + tokio::spawn(run_server( + buckets.clone(), + settings.clone(), + buckets.get_event_channel(), + )); + + // Add buckets only after passing to components for bucket_config in &settings.config().buckets { buckets.add_bucket(bucket_config.clone()).await; } - nodekey_write_new(config_dir.join("key.pem").to_str().unwrap()); - tokio::spawn(grpc::run_grpc(buckets.clone(), settings.clone())); - let _ = tokio::signal::ctrl_c().await; - // discover_mcast().await; - // let gateway = search_gateway(SearchOptions::default()).await.unwrap(); // info!("Detected IGD gateway: {:?}", gateway); } diff --git a/src/daemon-rs/src/p2p.rs b/src/daemon-rs/src/p2p.rs new file mode 100644 index 00000000..bd7f8ec8 --- /dev/null +++ b/src/daemon-rs/src/p2p.rs @@ -0,0 +1,172 @@ +use crate::bucket::manager::{BucketManager, BucketManagerEvent}; +use crate::bucket::BucketEvent; +use crate::settings::ConfigManager; +use futures::StreamExt; +use libp2p::{ + core::{upgrade, Multiaddr}, + gossipsub::{ + Gossipsub, GossipsubConfigBuilder, GossipsubEvent, GossipsubMessage, IdentTopic as Topic, + MessageAuthenticity, MessageId, ValidationMode, + }, + identity, + mdns::{Mdns, MdnsConfig, MdnsEvent}, + mplex, + multiaddr::multiaddr, + noise, + swarm::{SwarmBuilder, SwarmEvent}, + tcp::TokioTcpConfig, + yamux, NetworkBehaviour, PeerId, Transport, +}; +use log::{debug, info, trace}; +use prost::Message; +use std::collections::hash_map::DefaultHasher; +use std::hash::{Hash, Hasher}; +use std::net::IpAddr; +use std::sync::Arc; +use std::time::Duration; +use tokio::sync::broadcast::Receiver; + +pub mod proto { + include!(concat!(env!("OUT_DIR"), "/librevault.protocol.v1.rs")); +} + +enum ComposedEvent { + Mdns(MdnsEvent), + Gossipsub(GossipsubEvent), +} + +impl From for ComposedEvent { + fn from(event: MdnsEvent) -> Self { + ComposedEvent::Mdns(event) + } +} + +impl From for ComposedEvent { + fn from(event: GossipsubEvent) -> Self { + ComposedEvent::Gossipsub(event) + } +} + +// fn make_have_meta { +// +// } + +pub async fn run_server( + buckets: Arc, + config: Arc, + mut receiver: Receiver, +) { + let id_keys = identity::Keypair::generate_ed25519(); + let peer_id = PeerId::from(id_keys.public()); + info!("Local peer id: {:?}", peer_id); + + let noise_keys = noise::Keypair::::new() + .into_authentic(&id_keys) + .expect("Signing libp2p-noise static DH keypair failed."); + + let transport = TokioTcpConfig::new() + .nodelay(true) + .upgrade(upgrade::Version::V1) + .authenticate(noise::NoiseConfig::xx(noise_keys).into_authenticated()) + .multiplex(upgrade::SelectUpgrade::new( + yamux::YamuxConfig::default(), + mplex::MplexConfig::default(), + )) + .boxed(); + + #[derive(NetworkBehaviour)] + #[behaviour(out_event = "ComposedEvent")] + struct MyBehaviour { + mdns: Mdns, + gossipsub: Gossipsub, + } + + let config_bind = &config.config().p2p.bind; + let bound_multiaddrs: Vec = config_bind + .iter() + .map(|&sa| match sa.ip() { + IpAddr::V4(a) => multiaddr!(Ip4(a), Tcp(sa.port())), + IpAddr::V6(a) => multiaddr!(Ip6(a), Tcp(sa.port())), + }) + .collect(); + + let mut swarm = { + let message_id_fn = |message: &GossipsubMessage| { + let mut s = DefaultHasher::new(); + if let Some(peer_id) = message.source { + s.write(&*peer_id.to_bytes()); + } + s.write(&*message.data); + MessageId::from(s.finish().to_string()) + }; + + // Set a custom gossipsub + let gossipsub_config = GossipsubConfigBuilder::default() + .heartbeat_interval(Duration::from_secs(10)) // This is set to aid debugging by not cluttering the log space + .validation_mode(ValidationMode::Strict) // This sets the kind of message validation. The default is Strict (enforce message signing) + .message_id_fn(message_id_fn) // content-address messages. No two messages of the + // same content will be propagated. + .build() + .expect("Valid config"); + // build a gossipsub network behaviour + let gossipsub: Gossipsub = + Gossipsub::new(MessageAuthenticity::Signed(id_keys), gossipsub_config) + .expect("Correct configuration"); + + let mdns = Mdns::new(MdnsConfig::default()).await.unwrap(); + let behaviour = MyBehaviour { mdns, gossipsub }; + SwarmBuilder::new(transport, behaviour, peer_id) + .executor(Box::new(|fut| { + tokio::spawn(fut); + })) + .build() + }; + + for bound_multiaddr in bound_multiaddrs { + swarm.listen_on(bound_multiaddr).unwrap(); + } + + trace!("Everything before loop is completed"); + + loop { + tokio::select! { + // Swarm events + event = swarm.select_next_some() => { + match event { + SwarmEvent::Behaviour(ComposedEvent::Mdns(MdnsEvent::Discovered(list))) => { + for (peer_id, multiaddr) in list { + debug!("Discovered peer using mDNS: {:?}, {:?}", peer_id, multiaddr); + swarm.dial_addr(multiaddr); + } + } + SwarmEvent::NewListenAddr { address, .. } => {println!("Listening on {:?}", address);}, + _ => {} + } + }, + // Bucket events (useful for gossipsub) + event = receiver.recv() => { + info!("got event: {:?}", event); + match event { + Ok(BucketManagerEvent::BucketAdded(bucket)) => { + let topic = Topic::new(bucket.get_id_hex()); + swarm.behaviour_mut().gossipsub.subscribe(&topic).unwrap(); + } + Ok(BucketManagerEvent::BucketRemoved(bucket)) => { + let topic = Topic::new(bucket.get_id_hex()); + swarm.behaviour_mut().gossipsub.unsubscribe(&topic).unwrap(); + } + Ok(BucketManagerEvent::BucketEvent {bucket, event}) => { + let topic = Topic::new(bucket.get_id_hex()); + match event { + BucketEvent::MetaAdded {signed_meta} => { + let broadcast_msg = proto::HaveMeta {meta: signed_meta.meta, signature: signed_meta.signature}; + swarm.behaviour_mut().gossipsub.publish(topic, broadcast_msg.encode_to_vec()); + } + } + } + Err(_) => {} + } + } + } + } +} diff --git a/src/daemon-rs/src/p2p_server.rs b/src/daemon-rs/src/p2p_server.rs deleted file mode 100644 index 56916645..00000000 --- a/src/daemon-rs/src/p2p_server.rs +++ /dev/null @@ -1 +0,0 @@ -async fn run_server() {} diff --git a/src/daemon-rs/src/proto/protocol.proto b/src/daemon-rs/src/proto/protocol.proto new file mode 100644 index 00000000..e96eaec9 --- /dev/null +++ b/src/daemon-rs/src/proto/protocol.proto @@ -0,0 +1,8 @@ +syntax = "proto3"; +package librevault.protocol.v1; +import "google/protobuf/empty.proto"; + +message HaveMeta { + bytes meta = 1; + bytes signature = 2; +} diff --git a/src/daemon-rs/src/settings.rs b/src/daemon-rs/src/settings.rs index bfe86e0e..3bdea092 100644 --- a/src/daemon-rs/src/settings.rs +++ b/src/daemon-rs/src/settings.rs @@ -19,11 +19,17 @@ pub(crate) struct ControllerConfig { pub(crate) bind: SocketAddr, } +#[derive(Serialize, Deserialize, Clone)] +pub(crate) struct P2PConfig { + pub(crate) bind: Vec, +} + #[derive(Serialize, Deserialize)] pub(crate) struct RootConfig { pub(crate) client_name: String, pub(crate) buckets: Vec, pub(crate) controller: ControllerConfig, + pub(crate) p2p: P2PConfig, } impl Default for RootConfig { @@ -36,6 +42,11 @@ impl Default for RootConfig { bind: "[::1]:42346".parse().unwrap(), } }, + p2p: { + P2PConfig { + bind: vec!["0.0.0.0:0".parse().unwrap(), "[::]:0".parse().unwrap()], + } + }, } } } diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml index 39e3df3b..16859ce5 100644 --- a/src/util/Cargo.toml +++ b/src/util/Cargo.toml @@ -17,7 +17,7 @@ path-slash = "0.1.4" unicode-normalization = "0.1.19" prost = "0.9.0" cxx = "1.0" -serde_json = "1.0.59" +serde_json = "1.0.69" serde = { version = "1.0", features = ["derive"] } base64 = "0.13.0" # Crypto diff --git a/src/util/src/index.rs b/src/util/src/index.rs index 117b7e89..72698f8e 100644 --- a/src/util/src/index.rs +++ b/src/util/src/index.rs @@ -21,17 +21,16 @@ where D: Deserializer<'de>, { use serde::de::Error; - use serde::Deserialize; String::deserialize(deserializer) .and_then(|string| base64::decode(&string).map_err(|err| Error::custom(err.to_string()))) } -#[derive(Serialize, Deserialize, Clone)] +#[derive(Serialize, Deserialize, Clone, Debug)] pub struct SignedMeta { #[serde(serialize_with = "as_base64", deserialize_with = "from_base64")] - pub(crate) meta: Vec, + pub meta: Vec, #[serde(serialize_with = "as_base64", deserialize_with = "from_base64")] - pub(crate) signature: Vec, + pub signature: Vec, } #[derive(Serialize)] @@ -195,7 +194,7 @@ impl Index { Ok(meta_stmt.exists(named_params! {":chunk_id": chunk_id})?) } - pub fn put_meta(&self, meta: SignedMeta, fully_assembled: bool) -> Result<(), IndexError> { + pub fn put_meta(&self, meta: &SignedMeta, fully_assembled: bool) -> Result<(), IndexError> { let de_meta = proto::Meta::decode(&*meta.meta).unwrap(); let mut conn = self.conn.lock().unwrap(); @@ -275,7 +274,7 @@ impl Index { } fn c_put_meta(&self, signed_meta: &str, fully_assembled: bool) -> Result<(), IndexError> { - self.put_meta(serde_json::from_str(signed_meta).unwrap(), fully_assembled) + self.put_meta(&serde_json::from_str(signed_meta).unwrap(), fully_assembled) } } diff --git a/src/util/src/indexer.rs b/src/util/src/indexer.rs index ed82efc7..ee4e717a 100644 --- a/src/util/src/indexer.rs +++ b/src/util/src/indexer.rs @@ -4,7 +4,7 @@ use crate::index::SignedMeta; use crate::path_normalize::normalize; use crate::rabin::{rabin_init, rabin_next_chunk, Rabin}; use crate::secret::Secret; -use log::{debug, trace, warn}; +use log::{debug, trace}; use num_derive::FromPrimitive; use num_traits::FromPrimitive; use prost::Message; @@ -25,10 +25,10 @@ pub mod proto { #[derive(FromPrimitive)] enum ObjectType { - TOMBSTONE = 0, - FILE = 1, - DIRECTORY = 2, - SYMLINK = 3, + Tombstone = 0, + File = 1, + Directory = 2, + Symlink = 3, } #[derive(Debug)] @@ -128,18 +128,18 @@ fn make_type(path: &Path, preserve_symlinks: bool) -> Result Ok(ObjectType::TOMBSTONE), + ErrorKind::NotFound => Ok(ObjectType::Tombstone), _ => Err(IndexingError::from(e)), }; } let file_type = metadata.unwrap().file_type(); if file_type.is_file() { - Ok(ObjectType::FILE) + Ok(ObjectType::File) } else if file_type.is_dir() { - Ok(ObjectType::DIRECTORY) + Ok(ObjectType::Directory) } else if file_type.is_symlink() { - Ok(ObjectType::SYMLINK) + Ok(ObjectType::Symlink) } else { Err(IndexingError::UnsupportedType) } @@ -157,7 +157,7 @@ pub fn make_meta(path: &Path, root: &Path, secret: &Secret) -> Result Result Some(proto::meta::TypeSpecificMetadata::FileMetadata( + Some(ObjectType::File) => Some(proto::meta::TypeSpecificMetadata::FileMetadata( proto::meta::FileMetadata { algorithm_type: 0, strong_hash_type: 0, diff --git a/src/util/src/path_normalize.rs b/src/util/src/path_normalize.rs index a5ed5809..72602bd6 100644 --- a/src/util/src/path_normalize.rs +++ b/src/util/src/path_normalize.rs @@ -1,3 +1,4 @@ +use log::trace; use path_slash::{PathBufExt, PathExt}; use std::fmt::{Display, Formatter}; use std::path::{Path, PathBuf}; @@ -35,7 +36,7 @@ pub fn normalize( normalized.pop(); } - log::trace!("path: {:?} normalized: {:?}", path, normalized); + trace!("path: {:?} normalized: {:?}", path, normalized); Ok(normalized.into_bytes()) } diff --git a/src/util/src/secret.rs b/src/util/src/secret.rs index 821a6dc6..2470f4bd 100644 --- a/src/util/src/secret.rs +++ b/src/util/src/secret.rs @@ -4,6 +4,7 @@ use std::str::FromStr; use ed25519::signature::Signature; use ed25519_dalek_fiat::{Keypair, PublicKey, SecretKey, Signer, Verifier, PUBLIC_KEY_LENGTH}; +use hex::ToHex; use lazy_static::lazy_static; use luhn::Luhn; use rand::rngs::OsRng; @@ -133,6 +134,10 @@ impl Secret { pub fn get_id(&self) -> Vec { Sha3_256::digest(self.get_public_key().unwrap().as_bytes()).to_vec() } + + pub fn get_id_hex(&self) -> String { + self.get_id().encode_hex() + } } impl Display for Secret {