diff --git a/Cargo.lock b/Cargo.lock index 4763a392b4..5113621805 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -62,18 +62,6 @@ dependencies = [ "aes", ] -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy 0.7.32", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -159,45 +147,6 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "asn1-rs" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom 7.1.3", - "num-traits", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "async-broadcast" version = "0.7.2" @@ -359,6 +308,15 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "atomic-polyfill" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" +dependencies = [ + "critical-section", +] + [[package]] name = "atomic-waker" version = "1.1.2" @@ -647,6 +605,12 @@ dependencies = [ "alloc-stdlib", ] +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + [[package]] name = "buffer-redux" version = "1.0.2" @@ -824,7 +788,7 @@ dependencies = [ "iana-time-zone", "num-traits", "serde", - "windows-link", + "windows-link 0.2.0", ] [[package]] @@ -916,6 +880,17 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" +[[package]] +name = "color-backtrace" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e49b1973af2a47b5b44f7dd0a344598da95c872e1556b045607888784e973b91" +dependencies = [ + "backtrace", + "btparse", + "termcolor", +] + [[package]] name = "color_quant" version = "1.1.0" @@ -1357,8 +1332,8 @@ dependencies = [ "sha2", "shadowsocks", "smallvec", - "strum 0.27.2", - "strum_macros 0.27.2", + "strum", + "strum_macros", "tagger", "tempfile", "testdir", @@ -1493,20 +1468,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "der-parser" -version = "9.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom 7.1.3", - "num-bigint", - "num-traits", - "rusticata-macros", -] - [[package]] name = "der_derive" version = "0.7.3" @@ -2354,13 +2315,12 @@ dependencies = [ ] [[package]] -name = "hashbrown" -version = "0.14.5" +name = "hash32" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" dependencies = [ - "ahash", - "allocator-api2", + "byteorder", ] [[package]] @@ -2369,6 +2329,8 @@ version = "0.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" dependencies = [ + "allocator-api2", + "equivalent", "foldhash", ] @@ -2378,7 +2340,21 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.15.4", + "hashbrown", +] + +[[package]] +name = "heapless" +version = "0.7.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" +dependencies = [ + "atomic-polyfill", + "hash32", + "rustc_version", + "serde", + "spin 0.9.8", + "stable_deref_trait", ] [[package]] @@ -2647,7 +2623,7 @@ dependencies = [ "hyper", "libc", "pin-project-lite", - "socket2", + "socket2 0.5.9", "tokio", "tower-service", "tracing", @@ -2895,7 +2871,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown", ] [[package]] @@ -2925,7 +2901,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" dependencies = [ - "socket2", + "socket2 0.5.9", "widestring", "windows-sys 0.48.0", "winreg", @@ -2939,21 +2915,18 @@ checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "iroh" -version = "0.35.0" +version = "0.92.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ca758f4ce39ae3f07de922be6c73de6a48a07f39554e78b5745585652ce38f5" +checksum = "135ad6b793a5851b9e5435ad36fea63df485f8fd4520a58117e7dc3326a69c15" dependencies = [ "aead", - "anyhow", - "atomic-waker", "backon", "bytes", "cfg_aliases", - "concurrent-queue", "crypto_box", "data-encoding", "der", - "derive_more 1.0.0", + "derive_more 2.0.1", "ed25519-dalek", "futures-buffered", "futures-util", @@ -2969,24 +2942,27 @@ dependencies = [ "iroh-quinn-udp", "iroh-relay", "n0-future", - "netdev", + "n0-snafu", + "n0-watcher", + "nested_enum_utils", + "netdev 0.36.0", "netwatch", "pin-project", "pkarr", "portmapper", "rand 0.8.5", - "rcgen", "reqwest", "ring", "rustls", - "rustls-webpki", + "rustls-pki-types", + "rustls-webpki 0.103.7", "serde", "smallvec", + "snafu", "spki", - "strum 0.26.2", + "strum", "stun-rs", "surge-ping", - "thiserror 2.0.17", "time", "tokio", "tokio-stream", @@ -2995,48 +2971,36 @@ dependencies = [ "url", "wasm-bindgen-futures", "webpki-roots", - "x509-parser", "z32", ] [[package]] name = "iroh-base" -version = "0.35.0" +version = "0.92.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91ac4aaab68153d726c4e6b39c30f9f9253743f0e25664e52f4caeb46f48d11" +checksum = "04ae51a14c9255a735b1db2d8cf29b875b971e96a5b23e4d0d1ee7d85bf32132" dependencies = [ "curve25519-dalek", "data-encoding", - "derive_more 1.0.0", + "derive_more 2.0.1", "ed25519-dalek", + "n0-snafu", + "nested_enum_utils", "rand_core 0.6.4", "serde", - "thiserror 2.0.17", + "snafu", "url", ] -[[package]] -name = "iroh-blake3" -version = "1.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbba31f40a650f58fa28dd585a8ca76d8ae3ba63aacab4c8269004a0c803930" -dependencies = [ - "arrayref", - "arrayvec", - "cc", - "cfg-if", - "constant_time_eq", -] - [[package]] name = "iroh-gossip" -version = "0.35.0" +version = "0.92.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ca43045ceb44b913369f417d56323fb1628ebf482ab4c1e9360e81f1b58cbc2" +checksum = "7d530166ebdcfe321fb3a406dba62d777c98e1159237c7aaf0591e3758eb013c" dependencies = [ - "anyhow", - "async-channel 2.5.0", + "blake3", "bytes", + "data-encoding", "derive_more 1.0.0", "ed25519-dalek", "futures-concurrency", @@ -3045,15 +3009,17 @@ dependencies = [ "hex", "indexmap", "iroh", - "iroh-blake3", + "iroh-base", "iroh-metrics", + "irpc", "n0-future", + "n0-snafu", + "nested_enum_utils", "postcard", "rand 0.8.5", "rand_core 0.6.4", "serde", - "serde-error", - "thiserror 2.0.17", + "snafu", "tokio", "tokio-util", "tracing", @@ -3061,12 +3027,13 @@ dependencies = [ [[package]] name = "iroh-metrics" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f70466f14caff7420a14373676947e25e2917af6a5b1bec45825beb2bf1eb6a7" +checksum = "c8922c169f1b84d39d325c02ef1bbe1419d4de6e35f0403462b3c7e60cc19634" dependencies = [ "iroh-metrics-derive", "itoa", + "postcard", "serde", "snafu", "tracing", @@ -3086,9 +3053,9 @@ dependencies = [ [[package]] name = "iroh-quinn" -version = "0.13.0" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76c6245c9ed906506ab9185e8d7f64857129aee4f935e899f398a3bd3b70338d" +checksum = "0cde160ebee7aabede6ae887460cd303c8b809054224815addf1469d54a6fcf7" dependencies = [ "bytes", "cfg_aliases", @@ -3097,7 +3064,7 @@ dependencies = [ "pin-project-lite", "rustc-hash", "rustls", - "socket2", + "socket2 0.5.9", "thiserror 2.0.17", "tokio", "tracing", @@ -3133,22 +3100,22 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.9", "tracing", "windows-sys 0.59.0", ] [[package]] name = "iroh-relay" -version = "0.35.0" +version = "0.92.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c63f122cdfaa4b4e0e7d6d3921d2b878f42a0c6d3ee5a29456dc3f5ab5ec931f" +checksum = "315cb02e660de0de339303296df9a29b27550180bb3979d0753a267649b34a7f" dependencies = [ - "anyhow", + "blake3", "bytes", "cfg_aliases", "data-encoding", - "derive_more 1.0.0", + "derive_more 2.0.1", "getrandom 0.3.3", "hickory-resolver", "http 1.1.0", @@ -3159,8 +3126,10 @@ dependencies = [ "iroh-metrics", "iroh-quinn", "iroh-quinn-proto", - "lru 0.12.3", + "lru", "n0-future", + "n0-snafu", + "nested_enum_utils", "num_enum", "pin-project", "pkarr", @@ -3168,12 +3137,13 @@ dependencies = [ "rand 0.8.5", "reqwest", "rustls", - "rustls-webpki", + "rustls-pki-types", + "rustls-webpki 0.103.7", "serde", + "serde_bytes", "sha1", - "strum 0.26.2", - "stun-rs", - "thiserror 2.0.17", + "snafu", + "strum", "tokio", "tokio-rustls", "tokio-util", @@ -3185,6 +3155,33 @@ dependencies = [ "z32", ] +[[package]] +name = "irpc" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "092c0b20697bbc7de4839eebcb49be975cc09221021626d301eea55fc10bfeb7" +dependencies = [ + "futures-util", + "irpc-derive", + "n0-future", + "serde", + "thiserror 2.0.17", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "irpc-derive" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "209d38d83c0f7043916e90de2d3a8d01035db3a2f49ea7d5fb41b8f43e889924" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "itertools" version = "0.13.0" @@ -3347,20 +3344,14 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "lru" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc" -dependencies = [ - "hashbrown 0.14.5", -] - [[package]] name = "lru" version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +dependencies = [ + "hashbrown", +] [[package]] name = "lru_time_cache" @@ -3505,6 +3496,30 @@ dependencies = [ "web-time", ] +[[package]] +name = "n0-snafu" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1815107e577a95bfccedb4cfabc73d709c0db6d12de3f14e0f284a8c5036dc4f" +dependencies = [ + "anyhow", + "btparse", + "color-backtrace", + "snafu", + "tracing-error", +] + +[[package]] +name = "n0-watcher" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31462392a10d5ada4b945e840cbec2d5f3fee752b96c4b33eb41414d8f45c2a" +dependencies = [ + "derive_more 1.0.0", + "n0-future", + "snafu", +] + [[package]] name = "native-tls" version = "0.2.14" @@ -3536,19 +3551,36 @@ dependencies = [ [[package]] name = "netdev" -version = "0.31.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f901362e84cd407be6f8cd9d3a46bccf09136b095792785401ea7d283c79b91d" +checksum = "862209dce034f82a44c95ce2b5183730d616f2a68746b9c1959aa2572e77c0a1" dependencies = [ "dlopen2", "ipnet", "libc", "netlink-packet-core", - "netlink-packet-route 0.17.1", + "netlink-packet-route 0.22.0", "netlink-sys", "once_cell", "system-configuration", - "windows-sys 0.52.0", + "windows-sys 0.59.0", +] + +[[package]] +name = "netdev" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daa1e3eaf125c54c21e6221df12dd2a0a682784a068782dd564c836c0f281b6d" +dependencies = [ + "dlopen2", + "ipnet", + "libc", + "netlink-packet-core", + "netlink-packet-route 0.22.0", + "netlink-sys", + "once_cell", + "system-configuration", + "windows-sys 0.59.0", ] [[package]] @@ -3564,23 +3596,24 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.17.1" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "053998cea5a306971f88580d0829e90f270f940befd7cf928da179d4187a5a66" +checksum = "fc0e7987b28514adf555dc1f9a5c30dfc3e50750bbaffb1aec41ca7b23dcd8e4" dependencies = [ "anyhow", - "bitflags 1.3.2", + "bitflags 2.9.1", "byteorder", "libc", + "log", "netlink-packet-core", "netlink-packet-utils", ] [[package]] name = "netlink-packet-route" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0800eae8638a299eaa67476e1c6b6692922273e0f7939fd188fc861c837b9cd2" +checksum = "56d83370a96813d7c977f8b63054f1162df6e5784f1c598d689236564fb5a6f2" dependencies = [ "anyhow", "bitflags 2.9.1", @@ -3632,34 +3665,36 @@ dependencies = [ [[package]] name = "netwatch" -version = "0.5.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eeaa5f7505c93c5a9b35ba84fd21fb8aa3f24678c76acfe8716af7862fb07a" +checksum = "8a63d76f52f3f15ebde3ca751a2ab73a33ae156662bc04383bac8e824f84e9bb" dependencies = [ "atomic-waker", "bytes", "cfg_aliases", - "derive_more 1.0.0", + "derive_more 2.0.1", "iroh-quinn-udp", "js-sys", "libc", "n0-future", + "n0-watcher", "nested_enum_utils", - "netdev", + "netdev 0.37.3", "netlink-packet-core", - "netlink-packet-route 0.23.0", + "netlink-packet-route 0.24.0", "netlink-proto", "netlink-sys", + "pin-project-lite", "serde", "snafu", - "socket2", + "socket2 0.6.0", "time", "tokio", "tokio-util", "tracing", "web-sys", - "windows 0.59.0", - "windows-result 0.3.0", + "windows 0.61.3", + "windows-result 0.3.4", "wmi", ] @@ -3742,16 +3777,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint-dig" version = "0.8.4" @@ -3869,15 +3894,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "oid-registry" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" -dependencies = [ - "asn1-rs", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -4055,16 +4071,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pem" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" -dependencies = [ - "base64", - "serde", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -4253,7 +4259,7 @@ dependencies = [ "futures-lite", "getrandom 0.2.16", "log", - "lru 0.13.0", + "lru", "ntimestamp", "reqwest", "self_cell", @@ -4408,13 +4414,13 @@ checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "portmapper" -version = "0.5.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6db66007eac4a0ec8331d0d20c734bd64f6445d64bbaf0d0a27fea7a054e36" +checksum = "a9f99e8cd25cd8ee09fc7da59357fd433c0a19272956ebb4ad7443b21842988d" dependencies = [ "base64", "bytes", - "derive_more 1.0.0", + "derive_more 2.0.1", "futures-lite", "futures-util", "hyper-util", @@ -4424,11 +4430,11 @@ dependencies = [ "nested_enum_utils", "netwatch", "num_enum", - "rand 0.8.5", + "rand 0.9.0", "serde", "smallvec", "snafu", - "socket2", + "socket2 0.6.0", "time", "tokio", "tokio-util", @@ -4446,6 +4452,7 @@ dependencies = [ "cobs", "embedded-io 0.4.0", "embedded-io 0.6.1", + "heapless", "postcard-derive", "serde", ] @@ -4658,7 +4665,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2", + "socket2 0.5.9", "thiserror 2.0.17", "tokio", "tracing", @@ -4693,7 +4700,7 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2", + "socket2 0.5.9", "tracing", "windows-sys 0.59.0", ] @@ -4847,19 +4854,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "rcgen" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" -dependencies = [ - "pem", - "ring", - "rustls-pki-types", - "time", - "yasna", -] - [[package]] name = "redox_syscall" version = "0.3.5" @@ -5100,15 +5094,6 @@ dependencies = [ "semver", ] -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom 7.1.3", -] - [[package]] name = "rustix" version = "0.38.44" @@ -5145,7 +5130,7 @@ dependencies = [ "once_cell", "ring", "rustls-pki-types", - "rustls-webpki", + "rustls-webpki 0.102.8", "subtle", "zeroize", ] @@ -5180,6 +5165,17 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.14" @@ -5379,12 +5375,13 @@ dependencies = [ ] [[package]] -name = "serde-error" -version = "0.1.3" +name = "serde_bytes" +version = "0.11.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342110fb7a5d801060c885da03bf91bfa7c7ca936deafcc64bb6706375605d47" +checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" dependencies = [ "serde", + "serde_core", ] [[package]] @@ -5558,7 +5555,7 @@ dependencies = [ "serde_json", "serde_urlencoded", "shadowsocks-crypto", - "socket2", + "socket2 0.5.9", "spin 0.10.0", "thiserror 2.0.17", "tokio", @@ -5665,18 +5662,19 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "snafu" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +checksum = "6e84b3f4eacbf3a1ce05eac6763b4d629d60cbc94d632e4092c54ade71f1e1a2" dependencies = [ + "backtrace", "snafu-derive", ] [[package]] name = "snafu-derive" -version = "0.8.5" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +checksum = "c1c97747dbf44bb1ca44a561ece23508e99cb592e862f22222dcf42f51d1e451" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -5694,11 +5692,24 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "spin" version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] [[package]] name = "spin" @@ -5743,32 +5754,13 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "strum" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" -dependencies = [ - "strum_macros 0.26.2", -] - [[package]] name = "strum" version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af23d6f6c1a224baef9d3f61e287d2761385a5b88fdab4eb4c6f11aeb54c4bcf" - -[[package]] -name = "strum_macros" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.106", + "strum_macros", ] [[package]] @@ -5832,7 +5824,7 @@ dependencies = [ "parking_lot", "pnet_packet", "rand 0.8.5", - "socket2", + "socket2 0.5.9", "thiserror 1.0.69", "tokio", "tracing", @@ -5946,6 +5938,15 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + [[package]] name = "testdir" version = "0.9.3" @@ -6029,13 +6030,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", - "itoa", "js-sys", "num-conv", "powerfmt", "serde", "time-core", - "time-macros", ] [[package]] @@ -6044,16 +6043,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" -[[package]] -name = "time-macros" -version = "0.2.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" -dependencies = [ - "num-conv", - "time-core", -] - [[package]] name = "tinystr" version = "0.7.6" @@ -6102,7 +6091,7 @@ dependencies = [ "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.9", "tokio-macros", "windows-sys 0.52.0", ] @@ -6177,7 +6166,7 @@ dependencies = [ "log", "once_cell", "pin-project", - "socket2", + "socket2 0.5.9", "tokio", "windows-sys 0.52.0", ] @@ -6199,9 +6188,9 @@ dependencies = [ [[package]] name = "tokio-websockets" -version = "0.11.4" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fcaf159b4e7a376b05b5bfd77bfd38f3324f5fce751b4213bfc7eaa47affb4e" +checksum = "b1b6348ebfaaecd771cecb69e832961d277f59845d4220a584701f72728152b7" dependencies = [ "base64", "bytes", @@ -6353,6 +6342,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-error" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db" +dependencies = [ + "tracing", + "tracing-subscriber", +] + [[package]] name = "tracing-log" version = "0.2.0" @@ -6803,12 +6802,24 @@ dependencies = [ [[package]] name = "windows" -version = "0.59.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f919aee0a93304be7f62e8e5027811bbba96bcb1de84d6618be56e43f8a32a1" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" dependencies = [ - "windows-core 0.59.0", - "windows-targets 0.53.0", + "windows-collections", + "windows-core 0.61.2", + "windows-future", + "windows-link 0.1.3", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" +dependencies = [ + "windows-core 0.61.2", ] [[package]] @@ -6835,15 +6846,26 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.59.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "810ce18ed2112484b0d4e15d022e5f598113e220c53e373fb31e67e21670c1ce" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ - "windows-implement 0.59.0", - "windows-interface 0.59.0", - "windows-result 0.3.0", - "windows-strings 0.3.0", - "windows-targets 0.53.0", + "windows-implement 0.60.1", + "windows-interface 0.59.2", + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", + "windows-threading", ] [[package]] @@ -6859,9 +6881,9 @@ dependencies = [ [[package]] name = "windows-implement" -version = "0.59.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83577b051e2f49a058c308f17f273b570a6a758386fc291b5f6a934dd84e48c1" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", @@ -6881,28 +6903,44 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.0" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb26fd936d991781ea39e87c3a27285081e3c0da5ca0fcbc02d368cc6f52ff01" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", "syn 2.0.106", ] +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + [[package]] name = "windows-link" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core 0.61.2", + "windows-link 0.1.3", +] + [[package]] name = "windows-registry" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3" dependencies = [ - "windows-result 0.3.0", + "windows-result 0.3.4", "windows-strings 0.3.0", "windows-targets 0.53.0", ] @@ -6918,11 +6956,11 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.3.0" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08106ce80268c4067c0571ca55a9b4e9516518eaa1a1fe9b37ca403ae1d1a34" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.53.0", + "windows-link 0.1.3", ] [[package]] @@ -6944,6 +6982,15 @@ dependencies = [ "windows-targets 0.53.0", ] +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows-sys" version = "0.48.0" @@ -7018,6 +7065,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link 0.1.3", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.48.5" @@ -7195,17 +7251,17 @@ dependencies = [ [[package]] name = "wmi" -version = "0.14.5" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7787dacdd8e71cbc104658aade4009300777f9b5fda6a75f19145fedb8a18e71" +checksum = "3d3de777dce4cbcdc661d5d18e78ce4b46a37adc2bb7c0078a556c7f07bcce2f" dependencies = [ "chrono", "futures", "log", "serde", "thiserror 2.0.17", - "windows 0.59.0", - "windows-core 0.59.0", + "windows 0.61.3", + "windows-core 0.61.2", ] [[package]] @@ -7260,23 +7316,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "x509-parser" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" -dependencies = [ - "asn1-rs", - "data-encoding", - "der-parser", - "lazy_static", - "nom 7.1.3", - "oid-registry", - "rusticata-macros", - "thiserror 1.0.69", - "time", -] - [[package]] name = "xattr" version = "1.4.0" @@ -7309,15 +7348,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" -[[package]] -name = "yasna" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" -dependencies = [ - "time", -] - [[package]] name = "yerpc" version = "0.6.4" diff --git a/Cargo.toml b/Cargo.toml index 1de886afb8..e36758d423 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,8 +67,8 @@ humansize = "2" hyper = "1" hyper-util = "0.1.16" image = { version = "0.25.6", default-features=false, features = ["gif", "jpeg", "ico", "png", "pnm", "webp", "bmp"] } -iroh-gossip = { version = "0.35", default-features = false, features = ["net"] } -iroh = { version = "0.35", default-features = false } +iroh-gossip = { version = "0.92", default-features = false, features = ["net"] } +iroh = { version = "0.92", default-features = false } kamadak-exif = "0.6.1" libc = { workspace = true } mail-builder = { version = "0.4.4", default-features = false } diff --git a/deny.toml b/deny.toml index 42d5ab5c52..d2fd573016 100644 --- a/deny.toml +++ b/deny.toml @@ -7,6 +7,9 @@ ignore = [ # "RUSTSEC-2023-0071", + # Archived repository + "RUSTSEC-2023-0089", + # Unmaintained instant "RUSTSEC-2024-0384", @@ -26,12 +29,11 @@ skip = [ { name = "derive_more", version = "1.0.0" }, { name = "event-listener", version = "2.5.3" }, { name = "getrandom", version = "0.2.12" }, - { name = "hashbrown", version = "0.14.5" }, { name = "heck", version = "0.4.1" }, { name = "http", version = "0.2.12" }, { name = "linux-raw-sys", version = "0.4.14" }, - { name = "lru", version = "0.12.3" }, - { name = "netlink-packet-route", version = "0.17.1" }, + { name = "netdev", version = "0.36.0" }, + { name = "netlink-packet-route", version = "0.22.0" }, { name = "nom", version = "7.1.3" }, { name = "rand_chacha", version = "0.3.1" }, { name = "rand_core", version = "0.6.4" }, @@ -39,10 +41,10 @@ skip = [ { name = "redox_syscall", version = "0.3.5" }, { name = "redox_syscall", version = "0.4.1" }, { name = "rustix", version = "0.38.44" }, + { name = "rustls-webpki", version = "0.102.8" }, { name = "serdect", version = "0.2.0" }, + { name = "socket2", version = "0.5.9" }, { name = "spin", version = "0.9.8" }, - { name = "strum_macros", version = "0.26.2" }, - { name = "strum", version = "0.26.2" }, { name = "syn", version = "1.0.109" }, { name = "thiserror-impl", version = "1.0.69" }, { name = "thiserror", version = "1.0.69" }, @@ -57,6 +59,7 @@ skip = [ { name = "windows_i686_msvc" }, { name = "windows-implement" }, { name = "windows-interface" }, + { name = "windows-link" }, { name = "windows-result" }, { name = "windows-strings" }, { name = "windows-sys" }, diff --git a/src/headerdef.rs b/src/headerdef.rs index 1669c91c12..8102bcb813 100644 --- a/src/headerdef.rs +++ b/src/headerdef.rs @@ -119,6 +119,11 @@ pub enum HeaderDef { AuthenticationResults, /// Node address from iroh where direct addresses have been removed. + /// + /// The node address sent in this header must have + /// a non-null relay URL as contacting home relay + /// is the only way to reach the node without + /// direct addresses and global discovery. IrohNodeAddr, /// Advertised gossip topic for one webxdc. diff --git a/src/imex/transfer.rs b/src/imex/transfer.rs index 16f2f6dc5f..55eb0ba1f3 100644 --- a/src/imex/transfer.rs +++ b/src/imex/transfer.rs @@ -33,7 +33,7 @@ use std::task::Poll; use anyhow::{Context as _, Result, bail, format_err}; use futures_lite::FutureExt; -use iroh::{Endpoint, RelayMode}; +use iroh::{Endpoint, RelayMode, Watcher as _}; use tokio::fs; use tokio::task::JoinHandle; use tokio_util::sync::CancellationToken; @@ -96,12 +96,11 @@ impl BackupProvider { pub async fn prepare(context: &Context) -> Result { let relay_mode = RelayMode::Disabled; let endpoint = Endpoint::builder() - .tls_x509() // For compatibility with iroh <0.34.0 .alpns(vec![BACKUP_ALPN.to_vec()]) .relay_mode(relay_mode) .bind() .await?; - let node_addr = endpoint.node_addr().await?; + let node_addr = endpoint.node_addr().initialized().await; // Acquire global "ongoing" mutex. let cancel_token = context.alloc_ongoing().await?; @@ -303,11 +302,7 @@ pub async fn get_backup2( ) -> Result<()> { let relay_mode = RelayMode::Disabled; - let endpoint = Endpoint::builder() - .tls_x509() // For compatibility with iroh <0.34.0 - .relay_mode(relay_mode) - .bind() - .await?; + let endpoint = Endpoint::builder().relay_mode(relay_mode).bind().await?; let conn = endpoint.connect(node_addr, BACKUP_ALPN).await?; let (mut send_stream, mut recv_stream) = conn.open_bi().await?; diff --git a/src/mimefactory.rs b/src/mimefactory.rs index 4cee76a496..6dc70165fb 100644 --- a/src/mimefactory.rs +++ b/src/mimefactory.rs @@ -1522,16 +1522,19 @@ impl MimeFactory { )); } SystemMessage::IrohNodeAddr => { + let node_addr = context + .get_or_try_init_peer_channel() + .await? + .get_node_addr() + .await?; + + // We should not send `null` as relay URL + // as this is the only way to reach the node. + debug_assert!(node_addr.relay_url().is_some()); headers.push(( HeaderDef::IrohNodeAddr.into(), - mail_builder::headers::text::Text::new(serde_json::to_string( - &context - .get_or_try_init_peer_channel() - .await? - .get_node_addr() - .await?, - )?) - .into(), + mail_builder::headers::text::Text::new(serde_json::to_string(&node_addr)?) + .into(), )); } SystemMessage::CallAccepted => { diff --git a/src/peer_channels.rs b/src/peer_channels.rs index 0299affad4..e4416689eb 100644 --- a/src/peer_channels.rs +++ b/src/peer_channels.rs @@ -26,8 +26,10 @@ use anyhow::{Context as _, Result, anyhow, bail}; use data_encoding::BASE32_NOPAD; use futures_lite::StreamExt; +use iroh::Watcher as _; use iroh::{Endpoint, NodeAddr, NodeId, PublicKey, RelayMode, RelayUrl, SecretKey}; -use iroh_gossip::net::{Event, GOSSIP_ALPN, Gossip, GossipEvent, JoinOptions}; +use iroh_gossip::api::{Event as GossipEvent, GossipReceiver, GossipSender, JoinOptions}; +use iroh_gossip::net::{GOSSIP_ALPN, Gossip}; use iroh_gossip::proto::TopicId; use parking_lot::Mutex; use std::collections::{BTreeSet, HashMap}; @@ -124,6 +126,7 @@ impl Iroh { let (gossip_sender, gossip_receiver) = self .gossip .subscribe_with_opts(topic, JoinOptions::with_bootstrap(node_ids)) + .await? .split(); let ctx = ctx.clone(); @@ -142,7 +145,7 @@ impl Iroh { pub async fn maybe_add_gossip_peer(&self, topic: TopicId, peer: NodeAddr) -> Result<()> { if self.iroh_channels.read().await.get(&topic).is_some() { self.router.endpoint().add_node_addr(peer.clone())?; - self.gossip.subscribe(topic, vec![peer.node_id])?; + self.gossip.subscribe(topic, vec![peer.node_id]).await?; } Ok(()) } @@ -185,9 +188,16 @@ impl Iroh { } /// Get the iroh [NodeAddr] without direct IP addresses. + /// + /// The address is guaranteed to have home relay URL set + /// as it is the only way to reach the node + /// without global discovery mechanisms. pub(crate) async fn get_node_addr(&self) -> Result { - let mut addr = self.router.endpoint().node_addr().await?; + // Wait until home relay connection is established. + let _relay_url = self.router.endpoint().home_relay().initialized().await; + let mut addr = self.router.endpoint().node_addr().initialized().await; addr.direct_addresses = BTreeSet::new(); + debug_assert!(addr.relay_url().is_some()); Ok(addr) } @@ -214,11 +224,11 @@ pub(crate) struct ChannelState { /// The subscribe loop handle. subscribe_loop: JoinHandle<()>, - sender: iroh_gossip::net::GossipSender, + sender: GossipSender, } impl ChannelState { - fn new(subscribe_loop: JoinHandle<()>, sender: iroh_gossip::net::GossipSender) -> Self { + fn new(subscribe_loop: JoinHandle<()>, sender: GossipSender) -> Self { Self { subscribe_loop, sender, @@ -248,7 +258,6 @@ impl Context { }; let endpoint = Endpoint::builder() - .tls_x509() // For compatibility with iroh <0.34.0 .secret_key(secret_key) .alpns(vec![GOSSIP_ALPN.to_vec()]) .relay_mode(relay_mode) @@ -262,8 +271,7 @@ impl Context { let gossip = Gossip::builder() .max_message_size(128 * 1024) - .spawn(endpoint.clone()) - .await?; + .spawn(endpoint.clone()); let router = iroh::protocol::Router::builder(endpoint) .accept(GOSSIP_ALPN, gossip.clone()) @@ -518,45 +526,39 @@ pub(crate) async fn create_iroh_header(ctx: &Context, msg_id: MsgId) -> Result, ) -> Result<()> { - let mut join_tx = Some(join_tx); + stream.joined().await?; + // Try to notify that at least one peer joined, + // but ignore the error if receiver is dropped and nobody listens. + join_tx.send(()).ok(); + + for node in stream.neighbors() { + iroh_add_peer_for_topic(context, msg_id, topic, node, None).await?; + } while let Some(event) = stream.try_next().await? { match event { - Event::Gossip(event) => match event { - GossipEvent::Joined(nodes) => { - if let Some(join_tx) = join_tx.take() { - // Try to notify that at least one peer joined, - // but ignore the error if receiver is dropped and nobody listens. - join_tx.send(()).ok(); - } - - for node in nodes { - iroh_add_peer_for_topic(context, msg_id, topic, node, None).await?; - } - } - GossipEvent::NeighborUp(node) => { - info!(context, "IROH_REALTIME: NeighborUp: {}", node.to_string()); - iroh_add_peer_for_topic(context, msg_id, topic, node, None).await?; - } - GossipEvent::NeighborDown(_node) => {} - GossipEvent::Received(message) => { - info!(context, "IROH_REALTIME: Received realtime data"); - context.emit_event(EventType::WebxdcRealtimeData { - msg_id, - data: message - .content - .get(0..message.content.len() - 4 - PUBLIC_KEY_LENGTH) - .context("too few bytes in iroh message")? - .into(), - }); - } - }, - Event::Lagged => { + GossipEvent::NeighborUp(node) => { + info!(context, "IROH_REALTIME: NeighborUp: {}", node.to_string()); + iroh_add_peer_for_topic(context, msg_id, topic, node, None).await?; + } + GossipEvent::NeighborDown(_node) => {} + GossipEvent::Received(message) => { + info!(context, "IROH_REALTIME: Received realtime data"); + context.emit_event(EventType::WebxdcRealtimeData { + msg_id, + data: message + .content + .get(0..message.content.len() - 4 - PUBLIC_KEY_LENGTH) + .context("too few bytes in iroh message")? + .into(), + }); + } + GossipEvent::Lagged => { warn!(context, "Gossip lost some messages"); } };