diff --git a/Cargo.lock b/Cargo.lock index a4c6fef..29c59cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -218,7 +218,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", "synstructure", ] @@ -230,7 +230,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", "synstructure", ] @@ -242,7 +242,7 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -272,7 +272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" dependencies = [ "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -504,7 +504,7 @@ checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -553,7 +553,7 @@ dependencies = [ "cc", "cfg-if 1.0.0", "libc", - "miniz_oxide", + "miniz_oxide 0.5.4", "object", "rustc-demangle", ] @@ -609,7 +609,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -892,7 +892,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -1028,6 +1028,15 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d0165d2900ae6778e36e80bbc4da3b5eefccee9ba939761f9c2882a5d9af3ff" +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + [[package]] name = "crossbeam-utils" version = "0.8.12" @@ -1095,16 +1104,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "ctor" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdffe87e1d521a10f9696f833fe502293ea446d7f256c06128293a4119bdf4cb" -dependencies = [ - "quote", - "syn", -] - [[package]] name = "ctr" version = "0.6.0" @@ -1173,7 +1172,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 1.0.102", ] [[package]] @@ -1190,7 +1189,7 @@ checksum = "dcb67a6de1f602736dd7eaead0080cf3435df806c61b24b13328db128c58868f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -1214,7 +1213,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn", + "syn 1.0.102", ] [[package]] @@ -1225,7 +1224,7 @@ checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -1251,7 +1250,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.102", ] [[package]] @@ -1311,7 +1310,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -1321,7 +1320,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.102", ] [[package]] @@ -1334,7 +1333,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.0", - "syn", + "syn 1.0.102", ] [[package]] @@ -1354,9 +1353,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.5" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer 0.10.3", "crypto-common", @@ -1377,7 +1376,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -1442,7 +1441,7 @@ dependencies = [ "base16ct", "crypto-bigint", "der", - "digest 0.10.5", + "digest 0.10.7", "ff", "generic-array", "group", @@ -1464,7 +1463,7 @@ dependencies = [ "heck 0.4.0", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -1547,6 +1546,17 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "libz-sys", + "miniz_oxide 0.7.1", +] + [[package]] name = "float-cmp" version = "0.9.0" @@ -1579,9 +1589,9 @@ checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" [[package]] name = "futures" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -1594,9 +1604,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -1604,15 +1614,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -1622,9 +1632,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" @@ -1643,13 +1653,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.23", ] [[package]] @@ -1665,15 +1675,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" @@ -1683,9 +1693,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.24" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -1923,7 +1933,7 @@ version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -2159,12 +2169,15 @@ dependencies = [ "libp2p", "libp2p-bitswap", "libp2p-broadcast", + "libp2p-dns", + "libp2p-tcp", "multihash", "names", "parking_lot 0.11.2", "pin-project", "prometheus", "rand 0.8.5", + "rcgen 0.9.3", "regex", "tempdir", "thiserror", @@ -2183,10 +2196,12 @@ dependencies = [ "anyhow", "async-process", "async-std", + "base64 0.13.0", "chrono", "futures", "ipfs-embed", "libipld", + "libp2p", "multihash", "parking_lot 0.11.2", "serde", @@ -2310,7 +2325,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.102", "synstructure", ] @@ -2376,6 +2391,7 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-webrtc", + "libp2p-websocket", "libp2p-yamux", "multiaddr", "parking_lot 0.12.1", @@ -2443,7 +2459,7 @@ dependencies = [ "ring", "rw-stream-sink", "sec1", - "sha2 0.10.6", + "sha2 0.10.7", "smallvec", "thiserror", "unsigned-varint", @@ -2489,7 +2505,7 @@ dependencies = [ "prost-codec", "rand 0.8.5", "regex", - "sha2 0.10.6", + "sha2 0.10.7", "smallvec", "thiserror", "unsigned-varint", @@ -2537,7 +2553,7 @@ dependencies = [ "prost 0.11.0", "prost-build 0.11.1", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.7", "smallvec", "thiserror", "uint", @@ -2614,7 +2630,7 @@ dependencies = [ "prost 0.11.0", "prost-build 0.11.1", "rand 0.8.5", - "sha2 0.10.6", + "sha2 0.10.7", "snow", "static_assertions", "thiserror", @@ -2723,7 +2739,7 @@ checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" dependencies = [ "heck 0.4.0", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -2792,6 +2808,25 @@ dependencies = [ "webrtc", ] +[[package]] +name = "libp2p-websocket" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +dependencies = [ + "either", + "futures", + "futures-rustls", + "libp2p-core", + "log", + "parking_lot 0.12.1", + "quicksink", + "rw-stream-sink", + "soketto", + "url", + "webpki-roots", +] + [[package]] name = "libp2p-yamux" version = "0.42.0" @@ -2831,7 +2866,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn", + "syn 1.0.102", ] [[package]] @@ -2893,6 +2928,17 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "libz-sys" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + [[package]] name = "link-cplusplus" version = "1.0.7" @@ -2920,11 +2966,10 @@ dependencies = [ [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" dependencies = [ - "cfg-if 1.0.0", "serde", "value-bag", ] @@ -2980,7 +3025,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -3013,6 +3058,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", +] + [[package]] name = "mio" version = "0.8.4" @@ -3062,9 +3116,9 @@ checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc" dependencies = [ "blake3 1.3.1", "core2", - "digest 0.10.5", + "digest 0.10.7", "multihash-derive", - "sha2 0.10.6", + "sha2 0.10.7", "unsigned-varint", ] @@ -3078,7 +3132,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.102", "synstructure", ] @@ -3364,9 +3418,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.16.0" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] name = "opaque-debug" @@ -3394,7 +3448,7 @@ checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] @@ -3405,7 +3459,7 @@ checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa" dependencies = [ "ecdsa", "elliptic-curve", - "sha2 0.10.6", + "sha2 0.10.7", ] [[package]] @@ -3504,22 +3558,22 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.12" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.12" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.23", ] [[package]] @@ -3660,7 +3714,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.102", "version_check", ] @@ -3683,9 +3737,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.47" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" dependencies = [ "unicode-ident", ] @@ -3725,7 +3779,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -3843,7 +3897,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -3856,7 +3910,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -3869,7 +3923,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -3914,6 +3968,17 @@ 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 = "quinn-proto" version = "0.9.1" @@ -3934,9 +3999,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.21" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" dependencies = [ "proc-macro2", ] @@ -4402,7 +4467,7 @@ checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -4491,13 +4556,13 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" dependencies = [ "cfg-if 1.0.0", "cpufeatures", - "digest 0.10.5", + "digest 0.10.7", ] [[package]] @@ -4506,7 +4571,7 @@ version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2904bea16a1ae962b483322a1c7b81d976029203aea1f461e51cd7705db7ba9" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", "keccak", ] @@ -4544,7 +4609,7 @@ version = "1.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" dependencies = [ - "digest 0.10.5", + "digest 0.10.7", "rand_core 0.6.4", ] @@ -4603,7 +4668,7 @@ dependencies = [ "rand_core 0.6.4", "ring", "rustc_version 0.4.0", - "sha2 0.10.6", + "sha2 0.10.7", "subtle", ] @@ -4617,6 +4682,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "soketto" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" +dependencies = [ + "base64 0.13.0", + "bytes", + "flate2", + "futures", + "httparse", + "log", + "rand 0.8.5", + "sha-1", +] + [[package]] name = "spin" version = "0.5.2" @@ -4672,7 +4753,7 @@ dependencies = [ "quote", "serde", "serde_derive", - "syn", + "syn 1.0.102", ] [[package]] @@ -4688,7 +4769,7 @@ dependencies = [ "serde_derive", "serde_json", "sha1", - "syn", + "syn 1.0.102", ] [[package]] @@ -4730,7 +4811,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -4769,11 +4850,70 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "sval" -version = "1.0.0-alpha.5" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08" +checksum = "8b031320a434d3e9477ccf9b5756d57d4272937b8d22cb88af80b7633a1b78b1" + +[[package]] +name = "sval_buffer" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf7e9412af26b342f3f2cc5cc4122b0105e9d16eb76046cd14ed10106cf6028" +dependencies = [ + "sval", + "sval_ref", +] + +[[package]] +name = "sval_dynamic" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0ef628e8a77a46ed3338db8d1b08af77495123cc229453084e47cd716d403cf" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_fmt" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dc09e9364c2045ab5fa38f7b04d077b3359d30c4c2b3ec4bae67a358bd64326" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_json" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ada6f627e38cbb8860283649509d87bc4a5771141daa41c78fd31f2b9485888d" +dependencies = [ + "itoa", + "ryu", + "sval", +] + +[[package]] +name = "sval_ref" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703ca1942a984bd0d9b5a4c0a65ab8b4b794038d080af4eb303c71bc6bf22d7c" +dependencies = [ + "sval", +] + +[[package]] +name = "sval_serde" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830926cd0581f7c3e5d51efae4d35c6b6fc4db583842652891ba2f1bed8db046" dependencies = [ "serde", + "sval", + "sval_buffer", + "sval_fmt", ] [[package]] @@ -4787,6 +4927,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -4795,7 +4946,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", "unicode-xid", ] @@ -4891,7 +5042,7 @@ checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -4999,7 +5150,7 @@ dependencies = [ "proc-macro2", "quote", "standback", - "syn", + "syn 1.0.102", ] [[package]] @@ -5055,7 +5206,7 @@ checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -5101,7 +5252,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", ] [[package]] @@ -5322,16 +5473,38 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.0.0-alpha.9" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92ccd67fb88503048c01b59152a04effd0782d035a83a6d256ce6085f08f4a3" +dependencies = [ + "value-bag-serde1", + "value-bag-sval2", +] + +[[package]] +name = "value-bag-serde1" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55" +checksum = "b0b9f3feef403a50d4d67e9741a6d8fc688bcbb4e4f31bd4aab72cc690284394" dependencies = [ - "ctor", "erased-serde", "serde", "serde_fmt", +] + +[[package]] +name = "value-bag-sval2" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30b24f4146b6f3361e91cbf527d1fb35e9376c3c0cef72ca5ec5af6d640fad7d" +dependencies = [ "sval", - "version_check", + "sval_buffer", + "sval_dynamic", + "sval_fmt", + "sval_json", + "sval_ref", + "sval_serde", ] [[package]] @@ -5423,7 +5596,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.102", "wasm-bindgen-shared", ] @@ -5457,7 +5630,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5513,6 +5686,15 @@ dependencies = [ "untrusted", ] +[[package]] +name = "webpki-roots" +version = "0.22.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +dependencies = [ + "webpki 0.22.0", +] + [[package]] name = "webrtc" version = "0.6.0" @@ -5536,7 +5718,7 @@ dependencies = [ "sdp", "serde", "serde_json", - "sha2 0.10.6", + "sha2 0.10.7", "stun", "thiserror", "time 0.3.17", @@ -5961,9 +6143,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.5.7" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" +checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" dependencies = [ "zeroize_derive", ] @@ -5976,6 +6158,6 @@ checksum = "3f8f187641dad4f680d25c4bfc4225b418165984179f26ca76ec4fb6441d3a17" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.102", "synstructure", ] diff --git a/Cargo.toml b/Cargo.toml index 357ea4e..87e1aa6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,11 +34,14 @@ lazy_static = "1.4.0" libipld = { version = "0.14.0", default-features = false } libp2p-bitswap = "0.25.0" libp2p-broadcast = "0.12.0" +libp2p-tcp = { features = ["async-io"] } +libp2p-dns = {features = ["async-std"] } names = "0.13.0" parking_lot = "0.11.2" pin-project = "1.0.10" prometheus = "0.13.0" rand = "0.8.5" +rcgen = "0.9.3" thiserror = "1.0.30" tide = { version = "0.16.0", optional = true } tokio-crate = { package = "tokio", version = "1.17.0", features = ["rt"], optional = true } @@ -61,6 +64,7 @@ features = [ "pnet", "tcp", "yamux", + "websocket", ] [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 66a4fa1..0c76965 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -5,6 +5,24 @@ authors = ["David Craven "] edition = "2018" publish = false +[dependencies.libp2p] +version = "0.50.0" +features = [ + "dns", + "gossipsub", + "identify", + "kad", + "macros", + "mdns", + "mplex", + "noise", + "ping", + "pnet", + "tcp", + "yamux", + "websocket", +] + [dependencies] anyhow = "1.0.56" async-process = "1.3.0" @@ -19,4 +37,5 @@ serde = { version = "1.0.136", features = ["derive"] } serde_json = "1.0.79" structopt = "0.3.26" tracing = "0.1.32" +base64 = "0.13" tracing-subscriber = { version = "0.3.9", features = ["env-filter"] } diff --git a/cli/src/lib.rs b/cli/src/lib.rs index aab4804..ed0b5ef 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -6,6 +6,7 @@ use ipfs_embed::{ use serde::{Deserialize, Serialize}; use std::{collections::HashMap, path::PathBuf}; use structopt::StructOpt; +use libp2p::core::PeerId as p2pPeerId; #[derive(Debug, StructOpt)] #[structopt(name = "ipfs_embed")] @@ -15,6 +16,8 @@ pub struct Config { #[structopt(long)] pub node_name: Option, #[structopt(long)] + pub psk: Option, + #[structopt(long)] pub keypair: u64, #[structopt(long)] pub enable_mdns: bool, @@ -26,7 +29,7 @@ pub struct Config { pub external: Vec, #[structopt(long)] pub disable_port_reuse: bool, -} + } impl Config { pub fn new(keypair: u64) -> Self { @@ -38,6 +41,7 @@ impl Config { bootstrap: vec![], external: vec![], enable_mdns: false, + psk: None, disable_port_reuse: false, } } @@ -63,6 +67,9 @@ impl From for async_process::Command { if let Some(node_name) = config.node_name.as_ref() { cmd.arg("--node-name").arg(node_name); } + if let Some(psk) = config.psk.as_ref() { + cmd.arg("--psk").arg(psk); + } cmd.arg("--keypair").arg(config.keypair.to_string()); for listen_on in &config.listen_on { cmd.arg("--listen-on").arg(listen_on.to_string()); @@ -79,6 +86,7 @@ impl From for async_process::Command { if config.disable_port_reuse { cmd.arg("--disable-port-reuse"); } + cmd } } @@ -101,6 +109,7 @@ pub enum Command { Dial(PeerId), PrunePeers, Get(Cid), + Fetch(Cid, Vec), Insert(Block), Alias(String, Option), Flush, @@ -114,6 +123,7 @@ impl std::fmt::Display for Command { Self::Dial(peer) => write!(f, ">dial {}", peer)?, Self::PrunePeers => write!(f, ">prune-peers")?, Self::Get(cid) => write!(f, ">get {}", cid)?, + Self::Fetch(cid, providers) => write!(f, ">fetch {} {:?}", cid, providers)?, Self::Insert(block) => { write!(f, ">insert {} ", block.cid())?; for byte in block.data() { @@ -153,6 +163,12 @@ impl std::str::FromStr for Command { let cid = parts.next().unwrap().parse()?; Self::Get(cid) } + Some(">fetch") => { + let cid = parts.next().unwrap().parse()?; + let peer_id = parts.next().unwrap().parse()?; + let providers = vec![peer_id]; + Self::Fetch(cid, providers) + } Some(">insert") => { let cid = parts.next().unwrap().parse()?; let str_data = parts.next().unwrap(); diff --git a/cli/src/main.rs b/cli/src/main.rs index 6ac7d6e..928a9b8 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -19,6 +19,27 @@ async fn main() { } } +fn base16_decode_string(input: &str) -> Option<[u8; 32]> { + if input.len() % 2 != 0 { + return None; // Invalid input length + } + + let mut decoded_bytes = [0u8; 32]; + + for (i, byte) in decoded_bytes.iter_mut().enumerate() { + let start = i * 2; + let end = start + 2; + let hex_byte = &input[start..end]; + *byte = match u8::from_str_radix(hex_byte, 16) { + Ok(byte) => byte, + Err(_) => return None, // Invalid hex digit + }; + } + + Some(decoded_bytes) +} + + async fn run() -> Result<()> { let stdin = std::io::stdin(); let mut stdout = std::io::stdout(); @@ -35,8 +56,14 @@ async fn run() -> Result<()> { } else { None }, + psk: if let Some(psk) = config.psk { + Some(base16_decode_string(&psk).unwrap()) + } else { + None + }, kad: None, port_reuse: !config.disable_port_reuse, + keep_alive: true, ..Default::default() }; let node_name = if let Some(node_name) = config.node_name { @@ -121,6 +148,8 @@ async fn run() -> Result<()> { .lock() .get(&cid) .map(|block| writeln!(stdout, "{}", Event::Block(block)).expect("print")), + Ok(Command::Fetch(cid, providers)) => ipfs.lock().fetch(&cid, providers).await + .map(|block| writeln!(stdout, "{}", Event::Block(block)).expect("print")), Ok(Command::Insert(block)) => ipfs.lock().insert(block), Ok(Command::Alias(alias, cid)) => ipfs.lock().alias(&alias, cid.as_ref()), Ok(Command::Flush) => { diff --git a/src/net/mod.rs b/src/net/mod.rs index c2f281c..1ade959 100644 --- a/src/net/mod.rs +++ b/src/net/mod.rs @@ -66,6 +66,8 @@ use std::{ time::Duration, }; use void::unreachable; +use libp2p::websocket as websocket; +use rcgen::generate_simple_self_signed; #[derive(Clone, Debug, Eq, PartialEq)] pub enum ListenerEvent { @@ -162,9 +164,22 @@ impl NetworkService { let behaviour = NetworkBackendBehaviour::new(&mut config, store, listeners, peers, external)?; - let tcp = { - let transport = - TcpTransport::new(TcpConfig::new().nodelay(true).port_reuse(config.port_reuse)); + let tcp_or_ws = { + let transport = { + let tcp = TcpTransport::new(TcpConfig::new().nodelay(true).port_reuse(config.port_reuse)); + let mut ws_tcp = websocket::WsConfig::new( + TcpTransport::new(TcpConfig::new().nodelay(true).port_reuse(config.port_reuse)) + ); + + let rcgen_cert = generate_simple_self_signed(vec!["localhost".to_string()]).unwrap(); + let priv_key = websocket::tls::PrivateKey::new(rcgen_cert.serialize_private_key_der()); + let cert = websocket::tls::Certificate::new(rcgen_cert.serialize_der().unwrap()); + ws_tcp.set_tls_config(websocket::tls::Config::new(priv_key, vec![cert]).unwrap()); + + tcp.or_transport(ws_tcp) + }; + + let transport = if let Some(psk) = config.psk { let psk = PreSharedKey::new(psk); EitherTransport::Left( @@ -173,6 +188,7 @@ impl NetworkService { } else { EitherTransport::Right(transport) }; + let dh_key = noise::Keypair::::new() .into_authentic(&libp2p::core::identity::Keypair::Ed25519( config.node_key.clone(), @@ -187,40 +203,26 @@ impl NetworkService { )) .timeout(Duration::from_secs(5)) }; - assert_transport_error_type::<_, TransportError>(&tcp); - /*let quic = { - QuicConfig { - keypair: config.node_key, - transport: config.quic, - ..Default::default() - } - .listen_on("/ip4/0.0.0.0/udp/0/quic".parse().unwrap()) - .await? - .boxed() - }; - let quic_or_tcp = quic.or_transport(tcp).map(|either, _| match either { - EitherOutput::First(first) => first, - EitherOutput::Second(second) => second, - });*/ - let quic_or_tcp = tcp.boxed(); + + let tcp_or_ws = tcp_or_ws.boxed(); #[cfg(feature = "async_global")] let transport = if let Some(config) = config.dns { match config { DnsConfig::Custom { config, opts } => { - Dns::custom(quic_or_tcp, config, opts).await? + Dns::custom(tcp_or_ws, config, opts).await? } DnsConfig::SystemWithFallback { config, opts } => { match trust_dns_resolver::system_conf::read_system_conf() { - Ok((config, opts)) => Dns::custom(quic_or_tcp, config, opts).await?, + Ok((config, opts)) => Dns::custom(tcp_or_ws, config, opts).await?, Err(e) => { tracing::warn!("falling back to custom DNS config, system default yielded error `${:#}`", e); - Dns::custom(quic_or_tcp, config, opts).await? + Dns::custom(tcp_or_ws, config, opts).await? } } } } } else { - Dns::system(quic_or_tcp).await? + Dns::system(tcp_or_ws).await? }; #[cfg(all(feature = "tokio", not(feature = "async_global")))] let transport = if let Some(config) = config.dns { diff --git a/src/net/peers.rs b/src/net/peers.rs index 8e3ac22..7b47161 100644 --- a/src/net/peers.rs +++ b/src/net/peers.rs @@ -244,6 +244,7 @@ impl AddressBook { } tracing::debug!("request dialing {}", peer); let handler = self.new_handler(); + println!("xoxo add dial action {}", peer.to_string()); self.actions.push_back(NetworkBehaviourAction::Dial { opts: DialOpts::peer_id(*peer).build(), handler,