diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml index f780dc85..ac55b8dd 100644 --- a/.github/workflows/build-test.yaml +++ b/.github/workflows/build-test.yaml @@ -48,6 +48,9 @@ jobs: with: fetch-depth: 0 + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@main + - name: Set up cargo cache uses: actions/cache@v4 continue-on-error: false diff --git a/.gitignore b/.gitignore index db3d5e54..e1c46044 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ target-common/ .vscode femme dist/ +*.code-workspace diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..c1a7bcff --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "rust-analyzer.cargo.allTargets": true, + "rust-analyzer.check.targets": "wasm32-unknown-unknown" +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 09b54aa6..19e37059 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,18 @@ Following https://keepachangelog.com/en/1.1.0/ and using - `Fixed` for any bug fixes. - `Security` in case of vulnerabilities. -## [Unreleased] +## [0.9.0] - 2025-02-24 + +This release is mostly for the start of the student project. +It is a mostly working version of the dht_storage module, but most of the CLI tools +and web-frontend are still missing. + +### Added +- flcrypto: for some basic cryptography wrappers around different types of signatures +- flmacro: with macros for simplifying the `Send` / `Sync` +- flmodules::flo handling Fledger Objects +- flmodules::dht_router implements a routing based on Kademlia +- flmodules::dht_storage to store FLOs in a distributed hash table ### Fixed - reconnections should work better now, both for libc and wasm @@ -17,6 +28,16 @@ Following https://keepachangelog.com/en/1.1.0/ and using - changed the names of the networking messages - added an `Overlay` module to abstract the network handling - more changes in names of the messages to remove ambiguities +- Renamed `Overlay` to `Router` + - think how the `Overlay` (should be renamed to `Adapter` or so) can be + redone. One possibility is to have the network module using a good + `NetworkMessage` which includes the `NetworkWrapper` and can also be used + by `Random` and `Loopix`. + - Question: how to handle special messages then? Like asking to reshuffle + connections in `random` or accessing the providers in `loopix`? + - Answer: they can be added as a broker with another message type, which is also + added to the broker structure + - add an internal message enum to separate them from the outside messages ## [0.8.0] - 2024-09-09 diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..eb989986 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,3959 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "aead" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +dependencies = [ + "crypto-common", + "generic-array", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aes-gcm" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" +dependencies = [ + "aead", + "aes", + "cipher", + "ctr", + "ghash", + "subtle", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc 0.2.169", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" +dependencies = [ + "anstyle", + "once_cell", + "windows-sys 0.59.0", +] + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "asn1-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +dependencies = [ + "asn1-rs-derive 0.4.0", + "asn1-rs-impl 0.1.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", +] + +[[package]] +name = "asn1-rs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" +dependencies = [ + "asn1-rs-derive 0.5.1", + "asn1-rs-impl 0.2.0", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "asn1-rs-derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "synstructure 0.12.6", +] + +[[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.98", + "synstructure 0.13.1", +] + +[[package]] +name = "asn1-rs-impl" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[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.98", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "async-trait" +version = "0.1.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc 0.2.169", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bimap" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" +dependencies = [ + "serde", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "block-padding" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93" +dependencies = [ + "generic-array", +] + +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + +[[package]] +name = "bumpalo" +version = "3.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" +dependencies = [ + "serde", +] + +[[package]] +name = "cbc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6" +dependencies = [ + "cipher", +] + +[[package]] +name = "cc" +version = "1.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3d1b2e905a3a7b00a6141adb0e4c0bb941d11caf55349d863942a1cc44e3c9" +dependencies = [ + "shlex", +] + +[[package]] +name = "ccm" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ae3c82e4355234767756212c570e29833699ab63e6ffd161887314cc5b43847" +dependencies = [ + "aead", + "cipher", + "ctr", + "subtle", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clap" +version = "4.5.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92b7b18d71fad5313a1e320fa9897994228ce274b60faa4d694fe0ea89cd9e6d" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap-verbosity-flag" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34c77f67047557f62582784fd7482884697731b2932c7d37ced54bce2312e1e2" +dependencies = [ + "clap", + "log", +] + +[[package]] +name = "clap_builder" +version = "4.5.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a35db2071778a7344791a4fb4f95308b5673d219dee3ae348b86642574ecc90c" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc 0.2.169", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc 0.2.169", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "rand_core", + "typenum", +] + +[[package]] +name = "ct-codecs" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.98", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "data-encoding" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "der-parser" +version = "8.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +dependencies = [ + "asn1-rs 0.5.2", + "displaydoc", + "nom", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "der-parser" +version = "9.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" +dependencies = [ + "asn1-rs 0.6.2", + "displaydoc", + "nom", + "num-bigint", + "num-traits", + "rusticata-macros", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + +[[package]] +name = "ed25519-compact" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" +dependencies = [ + "ct-codecs", + "ed25519", + "getrandom 0.2.15", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "serde", + "sha2", + "subtle", + "zeroize", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "env_filter" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "humantime", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "flarch" +version = "0.9.0" +dependencies = [ + "async-trait", + "btparse", + "bytes", + "chrono", + "env_logger", + "flmacro", + "futures", + "js-sys", + "log", + "rand", + "rmp-serde", + "serde", + "serde-wasm-bindgen", + "serde_json", + "serde_with", + "serde_yaml", + "sha2", + "thiserror 1.0.69", + "tokio", + "tokio-tungstenite", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "wasmtimer", + "web-sys", + "webrtc", +] + +[[package]] +name = "flcrypto" +version = "0.9.0" +dependencies = [ + "bytes", + "ed25519-dalek", + "flarch", + "flcrypto", + "flmacro", + "log", + "rand", + "rmp-serde", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.11", + "typetag", +] + +[[package]] +name = "fledger" +version = "0.9.0" +dependencies = [ + "clap", + "clap-verbosity-flag", + "env_logger", + "flarch", + "flcrypto", + "flmodules", + "flnode", + "log", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "flmacro" +version = "0.9.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "flmodules" +version = "0.9.0" +dependencies = [ + "async-recursion", + "async-stream", + "async-trait", + "bimap", + "bitflags 2.8.0", + "btparse", + "bytes", + "ed25519-compact", + "ed25519-dalek", + "env_logger", + "flarch", + "flcrypto", + "flmacro", + "flmodules", + "futures", + "getrandom 0.2.15", + "itertools", + "log", + "names", + "num-bigint", + "rand", + "rayon", + "reqwest", + "rmp-serde", + "serde", + "serde_derive", + "serde_json", + "serde_with", + "serde_yaml", + "sha2", + "strum_macros", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "toml", + "typetag", +] + +[[package]] +name = "flnode" +version = "0.9.0" +dependencies = [ + "async-trait", + "chrono", + "ed25519-compact", + "env_logger", + "flarch", + "flmodules", + "futures", + "getrandom 0.2.15", + "itertools", + "log", + "names", + "rand", + "serde", + "serde_derive", + "serde_json", + "serde_yaml", + "sha2", + "thiserror 1.0.69", + "tokio", + "toml", +] + +[[package]] +name = "flsignal" +version = "0.9.0" +dependencies = [ + "clap", + "clap-verbosity-flag", + "env_logger", + "flarch", + "flmodules", + "log", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc 0.2.169", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc 0.2.169", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + +[[package]] +name = "ghash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" +dependencies = [ + "opaque-debug", + "polyval", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", + "serde", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "block-padding", + "generic-array", +] + +[[package]] +name = "interceptor" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4705c00485029e738bea8c9505b5ddb1486a8f3627a953e1e77e6abdf5eef90c" +dependencies = [ + "async-trait", + "bytes", + "log", + "portable-atomic", + "rand", + "rtcp", + "rtp", + "thiserror 1.0.69", + "tokio", + "waitgroup", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "inventory" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" +dependencies = [ + "rustversion", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "js-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.169" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" + +[[package]] +name = "libc" +version = "0.9.0" +dependencies = [ + "clap", + "flarch", + "flmodules", + "log", + "shared", + "tokio", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minicov" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" +dependencies = [ + "cc", + "walkdir", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3b1c9bd4fe1f0f8b387f6eb9eb3b4a1aa26185e5750efb9140301703f62cd1b" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" +dependencies = [ + "libc 0.2.169", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "names" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc" +dependencies = [ + "rand", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc 0.2.169", + "memoffset", + "pin-utils", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[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", + "serde", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.36.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +dependencies = [ + "memchr", +] + +[[package]] +name = "oid-registry" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" +dependencies = [ + "asn1-rs 0.6.2", +] + +[[package]] +name = "once_cell" +version = "1.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc 0.2.169", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +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 0.22.1", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "ping" +version = "0.1.0" +dependencies = [ + "clap", + "flarch", + "flmodules", + "log", + "tokio", + "tokio-stream", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "polyval" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" +dependencies = [ + "cfg-if", + "cpufeatures", + "opaque-debug", + "universal-hash", +] + +[[package]] +name = "portable-atomic" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro2" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quinn" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "socket2", + "thiserror 2.0.11", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" +dependencies = [ + "bytes", + "getrandom 0.2.15", + "rand", + "ring", + "rustc-hash", + "rustls", + "rustls-pki-types", + "slab", + "thiserror 2.0.11", + "tinyvec", + "tracing", + "web-time", +] + +[[package]] +name = "quinn-udp" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944" +dependencies = [ + "cfg_aliases", + "libc 0.2.169", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc 0.2.169", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "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", + "x509-parser", + "yasna", +] + +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-rustls", + "tokio-util", + "tower", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots", + "windows-registry", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "ring" +version = "0.17.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e75ec5e92c4d8aede845126adc388046234541629e76029599ed35a003c7ed24" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc 0.2.169", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + +[[package]] +name = "rtcp" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc9f775ff89c5fe7f0cc0abafb7c57688ae25ce688f1a52dd88e277616c76ab2" +dependencies = [ + "bytes", + "thiserror 1.0.69", + "webrtc-util", +] + +[[package]] +name = "rtp" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6870f09b5db96f8b9e7290324673259fd15519ebb7d55acf8e7eb044a9ead6af" +dependencies = [ + "bytes", + "portable-atomic", + "rand", + "serde", + "thiserror 1.0.69", + "webrtc-util", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rusticata-macros" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" +dependencies = [ + "nom", +] + +[[package]] +name = "rustls" +version = "0.23.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + +[[package]] +name = "ryu" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" + +[[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 = "schannel" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sdp" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" +dependencies = [ + "rand", + "substring", + "thiserror 1.0.69", + "url", +] + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.8.0", + "core-foundation", + "core-foundation-sys", + "libc 0.2.169", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc 0.2.169", +] + +[[package]] +name = "semver" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" + +[[package]] +name = "serde" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.217" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_json" +version = "1.0.138" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.7.1", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "serde_yaml" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b" +dependencies = [ + "indexmap 1.9.3", + "ryu", + "serde", + "yaml-rust", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shared" +version = "0.9.0" +dependencies = [ + "async-trait", + "flarch", + "flmodules", + "log", + "serde", + "serde_json", + "tokio", + "tokio-stream", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-node" +version = "0.9.0" +dependencies = [ + "env_logger", + "flarch", + "flmodules", + "flnode", + "log", + "thiserror 1.0.69", + "tokio", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc 0.2.169", + "windows-sys 0.52.0", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + +[[package]] +name = "stun" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28fad383a1cc63ae141e84e48eaef44a1063e9d9e55bcb8f51a99b886486e01b" +dependencies = [ + "base64 0.21.7", + "crc", + "lazy_static", + "md-5", + "rand", + "ring", + "subtle", + "thiserror 1.0.69", + "tokio", + "url", + "webrtc-util", +] + +[[package]] +name = "substring" +version = "1.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86" +dependencies = [ + "autocfg", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", + "unicode-xid", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "time" +version = "0.3.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" +dependencies = [ + "backtrace", + "bytes", + "libc 0.2.169", + "mio", + "parking_lot", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tungstenite" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6989540ced10490aaf14e6bad2e3d33728a2813310a0c71d1574304c49631cd" +dependencies = [ + "futures-util", + "log", + "rustls", + "rustls-native-certs", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tungstenite", +] + +[[package]] +name = "tokio-util" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" +dependencies = [ + "indexmap 2.7.1", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "tungstenite" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e2ce1e47ed2994fd43b04c8f618008d4cabdd5ee34027cf14f9d918edd9c8" +dependencies = [ + "byteorder", + "bytes", + "data-encoding", + "http", + "httparse", + "log", + "rand", + "rustls", + "rustls-pki-types", + "sha1", + "thiserror 1.0.69", + "utf-8", +] + +[[package]] +name = "turn" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b000cebd930420ac1ed842c8128e3b3412512dfd5b82657eab035a3f5126acc" +dependencies = [ + "async-trait", + "base64 0.21.7", + "futures", + "log", + "md-5", + "portable-atomic", + "rand", + "ring", + "stun", + "thiserror 1.0.69", + "tokio", + "tokio-util", + "webrtc-util", +] + +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typetag" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "044fc3365ddd307c297fe0fe7b2e70588cdab4d0f62dc52055ca0d11b174cf0e" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] + +[[package]] +name = "typetag-impl" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9d30226ac9cbd2d1ff775f74e8febdab985dab14fb14aa2582c29a92d5555dc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "unicode-ident" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "universal-hash" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" +dependencies = [ + "crypto-common", + "subtle", +] + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf-8" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" +dependencies = [ + "getrandom 0.3.1", +] + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "waitgroup" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292" +dependencies = [ + "atomic-waker", +] + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "serde", + "serde_json", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn 2.0.98", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" +dependencies = [ + "js-sys", + "minicov", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "wasm-streams" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wasmtimer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" +dependencies = [ + "futures", + "js-sys", + "parking_lot", + "pin-utils", + "slab", + "wasm-bindgen", +] + +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "webrtc" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b3a840e31c969844714f93b5a87e73ee49f3bc2a4094ab9132c69497eb31db" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "cfg-if", + "hex", + "interceptor", + "lazy_static", + "log", + "portable-atomic", + "rand", + "rcgen", + "regex", + "ring", + "rtcp", + "rtp", + "rustls", + "sdp", + "serde", + "serde_json", + "sha2", + "smol_str", + "stun", + "thiserror 1.0.69", + "time", + "tokio", + "turn", + "url", + "waitgroup", + "webrtc-data", + "webrtc-dtls", + "webrtc-ice", + "webrtc-mdns", + "webrtc-media", + "webrtc-sctp", + "webrtc-srtp", + "webrtc-util", +] + +[[package]] +name = "webrtc-data" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8b7c550f8d35867b72d511640adf5159729b9692899826fe00ba7fa74f0bf70" +dependencies = [ + "bytes", + "log", + "portable-atomic", + "thiserror 1.0.69", + "tokio", + "webrtc-sctp", + "webrtc-util", +] + +[[package]] +name = "webrtc-dtls" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86e5eedbb0375aa04da93fc3a189b49ed3ed9ee844b6997d5aade14fc3e2c26e" +dependencies = [ + "aes", + "aes-gcm", + "async-trait", + "bincode", + "byteorder", + "cbc", + "ccm", + "der-parser 8.2.0", + "hkdf", + "hmac", + "log", + "p256", + "p384", + "portable-atomic", + "rand", + "rand_core", + "rcgen", + "ring", + "rustls", + "sec1", + "serde", + "sha1", + "sha2", + "subtle", + "thiserror 1.0.69", + "tokio", + "webrtc-util", + "x25519-dalek", + "x509-parser", +] + +[[package]] +name = "webrtc-ice" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4f0ca6d4df8d1bdd34eece61b51b62540840b7a000397bcfb53a7bfcf347c8" +dependencies = [ + "arc-swap", + "async-trait", + "crc", + "log", + "portable-atomic", + "rand", + "serde", + "serde_json", + "stun", + "thiserror 1.0.69", + "tokio", + "turn", + "url", + "uuid", + "waitgroup", + "webrtc-mdns", + "webrtc-util", +] + +[[package]] +name = "webrtc-mdns" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0804694f3b2acfdff48f6df217979b13cb0a00377c63b5effd111daaee7e8c4" +dependencies = [ + "log", + "socket2", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-media" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c15b20e98167b22949abc1c20eca7c6d814307d187068fe7a48f0b87a4f6d46" +dependencies = [ + "byteorder", + "bytes", + "rand", + "rtp", + "thiserror 1.0.69", +] + +[[package]] +name = "webrtc-sctp" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d850daa68639b9d7bb16400676e97525d1e52b15b4928240ae2ba0e849817a5" +dependencies = [ + "arc-swap", + "async-trait", + "bytes", + "crc", + "log", + "portable-atomic", + "rand", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-srtp" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbec5da43a62c228d321d93fb12cc9b4d9c03c9b736b0c215be89d8bd0774cfe" +dependencies = [ + "aead", + "aes", + "aes-gcm", + "byteorder", + "bytes", + "ctr", + "hmac", + "log", + "rtcp", + "rtp", + "sha1", + "subtle", + "thiserror 1.0.69", + "tokio", + "webrtc-util", +] + +[[package]] +name = "webrtc-test-libc" +version = "0.9.0" +dependencies = [ + "flarch", + "flmodules", + "log", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + +[[package]] +name = "webrtc-util" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc8d9bc631768958ed97b8d68b5d301e63054ae90b09083d43e2fefb939fd77e" +dependencies = [ + "async-trait", + "bitflags 1.3.2", + "bytes", + "ipnet", + "lazy_static", + "libc 0.2.169", + "log", + "nix", + "portable-atomic", + "rand", + "thiserror 1.0.69", + "tokio", + "winapi", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "x25519-dalek" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7e468321c81fb07fa7f4c636c3972b9100f0346e5b6a9f2bd0603a52f7ed277" +dependencies = [ + "curve25519-dalek", + "rand_core", + "serde", + "zeroize", +] + +[[package]] +name = "x509-parser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" +dependencies = [ + "asn1-rs 0.6.2", + "data-encoding", + "der-parser 9.0.0", + "lazy_static", + "nom", + "oid-registry", + "ring", + "rusticata-macros", + "thiserror 1.0.69", + "time", +] + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "yasna" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +dependencies = [ + "time", +] + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..811ff59f --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[workspace] +resolver = "2" + +members = [ + "test/signal-fledger", + "test/webrtc-libc-wasm/*", + "examples/ping", + "examples/ping-pong/libc", + "fl*", + "cli/*", +] + +exclude = ["flbrowser", "test/webrtc-libc-wasm/wasm", "test/fledger-nodejs", "examples/ping-pong/wasm"] diff --git a/DHT_STORAGE.md b/DHT_STORAGE.md new file mode 100644 index 00000000..76e335c3 --- /dev/null +++ b/DHT_STORAGE.md @@ -0,0 +1,86 @@ +# DHT Storage for webpages + +Using the DHT storage module from fledger, you can store data in a decentralized way. +A first use-case is to store and retrieve webpages from fledger. +Here is how it works: + +1. You create a static version of your website (with [Hugo](https://gohugo.io/), [Jekyll](https://jekyllrb.com/) or others) +2. You upload it to the fledger network +3. Your webpage is served from your node while its online, or from other people's node when you're offline + +In a future version, fledger will also track how long you're online and how many other pages +you're serving. +This will allow a tit-for-tat sharing: the longer and the more other pages you store and serve, +the longer other nodes wil store and serve your pages. + +# Exploring existing domains + +To upload your web page to fledger, you can simply go to the [Fledger Web](https://web.fledg.re) to connect +as a node. +Choose the _Manage Pages_ tab. +Fledger will automatically choose the standard root-domain for you. +You will see all subdomains of the root-domain available and can click +on any of them for sub-sub domains or the homepage. + +## Adding your own homepage + +To add your own homepage, you need to create a domain for it. +Then you can upload files and directories which will be stored +under this domain. +Per default, `index.html` or `index.md` is used as the homepage, but +you can also change this. + +### Creating your domain + +Each domain can decide whether it wants to accept random sub-domains or +whether it restricts them to the owner. +The root-domain accepts any sub-domain, and is selected by default. +Follow the steps to create your sob-domain and upload your page: + +1. Click `Add subdomain` +2. Enter the desired name - fledger will tell you if the name is available or not +3. Confirm with `Add` + +Please be aware that fledger will create a private key for protecting access to +your domain. +If you lose this key, you won't be able to modify the domain anymore. + +### Uploading your files + + + +## Private key storage + +The private keys created to protect your domain will be stored directly in your +browser. +So if you delete the `localStorage`, you will lose all your private keys and access +to your domain! +You can create a backup in the `Profile` tab, and store the json file somewhere safe on +your harddisk. +To restore a backup, you can upload it in the `Profile` tab. + +## Technical details + +Fledger does the following when you set up your own webpage: + +1. Creates a `Signer` and stores it locally +1. Creates and stores an `Identity` as a `FloIdentity` +1. Creates an `ACE` with the rules `domain.*`, `blob.*` and stores it as a `FloACE` +1. Creates a `Domain` updatable by the `ACE` +1. Creates a `FloBlob` with content-type `text/html` and links it with the `Domain` + +### Questions + +- should the `Domain` point to a home-page? +- is there a need for a hierarchical storage of the FloBlobs? +- how to discover the Domain given the name? + - ID of the domain could depend on the hash of the name + - a separate DNS system to resolve names to IDs +- how to discover the pages stored? + - Create a list of all domains if they point to a home-page + - the home-pages link to the other pages + - use sub-domains for different topics in the domains of the users +- should there be a main-domain with given subdomains (social, blog, tests) that can +be populated by new users? +- how to bootstrap the system? + - create one page for fledger, and hardcode this ID in the fledger-binary \ No newline at end of file diff --git a/Dockerfile.dev b/Dockerfile.dev index 15fb577f..07ded2dd 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -4,7 +4,7 @@ RUN apt update && apt install -y patchelf ca-certificates WORKDIR /home COPY flarch ./flarch -COPY flarch_macro ./flarch_macro +COPY flmacro ./flmacro COPY flmodules ./flmodules COPY flnode ./flnode COPY cli ./cli diff --git a/Makefile b/Makefile index 4aad8ba1..cfdd3fcd 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,10 @@ -CARGOS := cli/{fledger,flsignal} flarch flarch_macro flbrowser \ - flmodules flnode test/{fledger-nodejs,signal-fledger,webrtc-libc-wasm/{libc,wasm}} \ - examples/ping-pong/{wasm,shared,libc} -MAKE_TESTS := test/{webrtc-libc-wasm,signal-fledger} examples/ping-pong -CRATES := flarch_macro flarch flmodules flnode +CARGOS := cli/{fledger,flsignal} flarch flbrowser flcrypto flmacro \ + flmodules flnode test/signal-fledger \ + examples/ping-pong/{shared,libc} +MAKE_TESTS := +CRATES := flmacro flarch flmodules flnode SHELL := /bin/bash -PKILL = @ps aux | grep "$1" | grep -v grep | awk '{print $$2}' | xargs -r kill +PKILL = @/bin/ps aux | grep "$1" | egrep -v "(grep|vscode|rust-analyzer)" | awk '{print $$2}' | xargs -r kill cargo_check: for c in ${CARGOS}; do \ @@ -87,8 +87,8 @@ build_local: build_local_web build_cli serve_two: kill build_cli ( cd cli && cargo run --bin flsignal -- -vv ) & sleep 4 - ( cd cli && ( cargo run --bin fledger -- --config fledger/flnode -vv -s ws://localhost:8765 & \ - cargo run --bin fledger -- --config fledger/flnode2 -vv -s ws://localhost:8765 & ) ) + ( cd cli && ( cargo run --bin fledger -- --config fledger/flnode --log-dht-storage -vv -s ws://localhost:8765 & \ + cargo run --bin fledger -- --config fledger/flnode2 --log-dht-storage -vv -s ws://localhost:8765 & ) ) serve_local: kill build_local_web serve_two cd flbrowser && trunk serve --features local & diff --git a/README.md b/README.md index 07d72fe4..a8c99a14 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,11 @@ But of course there are many more things you can do: On the technical side, Fledger has / will have: - Gossip-based sharing of information +- Data storage using a distributed hash table - Proof-of-participation to distribute _Mana_ to participants (instead of miners) - Different consensus layers, depending on the need: implicit trust, ledger based -So the goal is to be able to serve both short-term online users like browsers, +The goal is to be able to serve both short-term online users like browsers, but also long-term users who have a server where they can run a fledger node. The system is set up to be 0-configuration and fast. @@ -37,15 +38,28 @@ What it will never do: ## State of Fledger -There has been a big rewrite of the first version of Fledger with the goal to: -- provide libraries for the webrtc-connections -- separate the different functionalities as standalone modules -- start implementing a real gossip-based chat application +As of February 2025, fledger has: +- a generic WebRTC network library +- gossip-based distribution of messages +- data storage using distributed hash tables +- a simple cryptographic layer for various types of signatures, including + "N out of T" signatures The code is written in a way that it can run in a wasm environment on browser or node, as well as in a libc environment. Some of the code can also be reused in other projects. +### Student Semester Projects + +With the support from prof. Bryan Ford's [DEDIS](https://dedis.epfl.ch) lab, one semester +student project was finished in Autumn '24, and a new one started in Spring '25: + +- Derya Cögendez worked on [Churning Mixers](https://c4dt.epfl.ch/wp-content/uploads/2025/01/2025-01-derya_cogendez_churning_mixers.pdf) with the experimental repo here: [student_24_fledger](https://github.com/dedis/student_24_fledger) +- Yohan Max Abehssera started to work in Feb. 2025 on `Fair Sharing` to implement a tit-for-tat + sharing mechanism for the [DHTStorage](./flmodules/src/dht_storage/) module + +## Project Directory + ### Library Crates A set of _shared_ crates implement the basic functionality, without the actual implementation @@ -55,7 +69,7 @@ of the network code: - [flnode](./flnode) - a generic implementation of a fledger-node, mostly connecting all _flmodules_ together and with the network - [flarch](./flarch) - architecture dependant implementations for some async tools -- [flarch_module](./flarch_module) - macro for easier definitions of `async_trait(?Send)` +- [flmacro](./flmacro) - macro for easier definitions of `async_trait(?Send)` ### Binaries @@ -75,13 +89,12 @@ These are the actual implementations of the WebRTC and Websocket for wasm and li ## Next steps The following next steps are in the pipeline: -- Create a nicer display of the chat, perhaps with markdown display of messages +- Create storage nodes that can serve data - Create a minimum consensus for people to try it out in the browser at https://web.fledg.re -- Create two chains: identity chain for nodes, and a first worker chain +- Create a nicer display of the chat, perhaps with markdown display of messages - Add WASM smart contracts - Add sharding to have more than one worker chain -- Create storage nodes that can serve data # Running it @@ -90,6 +103,20 @@ instructions. ## Running it on a server +### Using Docker + +If you want to use docker, you can download the `docker-compose.yaml` file and use this to +run two nodes on your server: + +```bash +curl https://raw.githubusercontent.com/ineiti/fledger/refs/heads/main/examples/docker-compose/docker-compose.flnode.yaml +docker compose up -d +``` + +It will initialize the servers, connect to the network, and start participating in sharing the data. + +### Using Devbox + Supposing you have [devbox](https://www.jetify.com/devbox/docs/installing_devbox/) installed, you can run: ```bash @@ -131,6 +158,12 @@ version of devbox. I suggest you use the `1YiB.rust-bundle` extension in VisualCode, which makes it easier to use rust. +## Add new Modules + +If you want to add a new module, you can use the [template](./flmodules/src/template/) module +by copying it, and changing the name. +You will find information about how to add a new module in the [flmodules/README.md](./flmodules/README.md). + # License This project is licensed under MIT or Apache2. diff --git a/WIP.md b/WIP.md index f9d28c69..1cd60161 100644 --- a/WIP.md +++ b/WIP.md @@ -1,20 +1,85 @@ # Work in progress +This file is in place of github issues, as currently I'm mostly developing on my own. + +## Removing Broker and replace it with BrokerIO + +- update documentation + - `flmoduls::network` + ## Current high-level goal +- Store a webpage in fledger + ## Current concrete goal +### User-facing + +Implement [DHT_STORAGE.md](./DHT_STORAGE.md). + +### DHT_storage + +1. Link it correctly to DHT_router + - implement and test the `DHTStorage(In|Out)` messages for interaction with local modules + - Implement and test the `MessageNodeDirect` messages to automatically update the FLOs stored +2. Store up to 1MB of data +3. Delete oldest/farthest data +4. Re-arranged everything to fit it better - probably should create a diagram to make sure it +still makes sense... +5. Implement the case when not all Flos are stored in all nodes, searching in other nodes, synching + cuckoo-IDs, remove furthest (shallowest) flos if memory is full + +TODO: +- verify Flos when they enter the system +- when new FloMetas enter the system, check which are the most probable to be kept: + - choose the closest (with the highest depth) not-yet-stored Flos for synching +- Add a timeout to FloCuckoos when they are purged from the system +- Add a timeout for Flos to purge them from the system + +### Testing + +Test in `flmodules/test/webpage.rs`: +- complete, including cuckoos, limited memory. +Make the following tests work again: +- `make cargo_test` +- `examples/ping-pong` +- `test/webrtc-libc-wasm` + + +### Crypto + +Have working `Identities` (`Identity`), and `Condition`s. + +TODO: +- finish access::test_badge + +### Flo + +Uses real signatures and verifications now + +TODO: +- Clean up the mess - it's still too much stuff calling criss-cross each other. +- Where are the Verifiers stored? +- There must be something shady going on with regard + to the verifierIDs which definitely don't match the FloID. +- Store all necessary data for verification in the Flo itself + +### DHT_router + +-- seems to be more or less OK, at least if it's usable by DHT_storage -- + +1. KBucket.active is only be populated once a node has been confirmed. + - Needs more testing if nodes fail and how they will be replaced + +TODO: +- should it also store one kademlia per realm? + - active nodes are stored in their own vec + - each realm-kademlia looks in these nodes first to populate the buckets + # TODO ## Features -- Needed for semester project: - - Import library for html serving with callbacks for loading of elements - - Easy simulation - - w/o network - - local network - - network with bw and delay -> on Deterlab - ## Bugs - flmodules/web_proxy has horrible error handling - too many `expect`s @@ -24,6 +89,11 @@ ## Cleanups / improvements +- flnode/src/node.rs changes: + - instead of calling `update`, use the `template` version with a tap and a watcher + - add the timer as an argument to the brokers which need it and remove the `add_timer` method +- rewrite the flmodules/src/\*/broker.rs : + - move dht_storage way of broker.rs/message.rs to other brokers, too - yaml files are stored as .toml - make sure old files can be read as .toml - save new files as .yaml @@ -31,16 +101,7 @@ - serde_yaml is deprecated - use serde_yaml_ng with singleton_map_recursive - use matchbox from https://github.com/johanhelsing/matchbox -- rewrite the flmodules/src/*/broker.rs : - - the returned broker should only represent the actual i/o messages - - add an internal message enum to separate them from the outside messages - - think how the `Overlay` (should be renamed to `Adapter` or so) can be - redone. One possibility is to have the network module using a good - `NetworkMessage` which includes the `NetworkWrapper` and can also be used - by `Random` and `Loopix`. - - Question: how to handle special messages then? Like asking to reshuffle - connections in `random` or accessing the providers in `loopix`? -- Clean up broker / network: +- Clean up broker: - Remove `Destination::{All,Others,This}` - Test it only `Destination::All` is ever used - Replace `process` with `async-task` @@ -50,14 +111,45 @@ ## Reaching out -- Sign up for dev6 +Added fledger to blog: https://ineiti.ch/projects/fledger/ + +# Some things done + +### Done +- Look at all TODOs +- make all tests pass again +- also compile for wasm +- replace `add_subsystem(Subsystem::Handler` with `add_handler` +- `BrokerIO` + - be renamed to `Broker`? Yes + - look which `add_translate` are actually used + - 4 add_translator_dire + - 7 add_translator_link + - 4 add_translator_i_ti + - 19 add_translator_o_ti + - 4 add_translator_o_to + - use `add_translator_link` +- unify `flmodules/*/broker.rs`: + - make sure no trailing `.into()` for the messages are left +- unify `flmodules/*/broker.rs`: + - naming: is it a verb? Subject? + - rename `(From|To)Router` and `(From|To)*` into `Router(In|Out)` and `*(In|Out)` + - add `type BrokerSome = Broker` + - always return a structure + - should it `add_translate` with a `Self::translate...` method, or in-line with `Box::new`? + - same functionality: + - structure creates broker and `add_handler` the `message` structure + - `message` structure takes zero or more of: config, DataStorage, `tokio::sync::watch` and is a `Subsystem::Handler` + - `core` does the core business +- [flmodules::random_connections::messages] 0x6000007c4ab0 Dropping message to unconnected node f88f09414a048f67 + - fixed it, but there might still be some random droppings around. Keeping the log for the moment. # Dates -2022-09-12: +2024-09-12: - update to latest versions of wasm libraries -2022-09-09: +2024-09-09: - Clean up broker / network: - change enums with `((a, b))` arguments to simple `(a, b)` arguments - remove `Destination` from `SubsystemListener` @@ -238,4 +330,4 @@ 2022-01-05: - moved modules to their own crate with 'raw' and 'message' modules - started working on the 'gossip' module -- next steps: finish 'gossip' module as a generic module, then add the 'message' code \ No newline at end of file +- next steps: finish 'gossip' module as a generic module, then add the 'message' code diff --git a/cli/Cargo.toml b/cli/Cargo.toml deleted file mode 100644 index 3594665d..00000000 --- a/cli/Cargo.toml +++ /dev/null @@ -1,8 +0,0 @@ -[workspace] - -resolver = "2" - -members = [ - "fledger", - "flsignal", -] diff --git a/cli/fledger/Cargo.toml b/cli/fledger/Cargo.toml index 7446c86f..0d13dc89 100644 --- a/cli/fledger/Cargo.toml +++ b/cli/fledger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fledger" -version = "0.8.0" +version = "0.9.0" edition = "2021" authors = ["Linus Gasser "] description = "The fledger server as a CLI" @@ -12,9 +12,10 @@ keywords = ["network", "signalling", "webrtc"] categories = ["network-programming"] [dependencies] -flarch = { path = "../../flarch", version = "0.8" } -flmodules = { path = "../../flmodules", version = "0.8" } -flnode = { path = "../../flnode", version = "0.8" } +flarch = { path = "../../flarch", version = "0.9" } +flmodules = { path = "../../flmodules", version = "0.9" } +flnode = { path = "../../flnode", version = "0.9" } +flcrypto = { path = "../../flcrypto", version = "0.9" } clap = "4" clap-verbosity-flag = "2" diff --git a/cli/fledger/src/main.rs b/cli/fledger/src/main.rs index 3775de3c..b7ca5982 100644 --- a/cli/fledger/src/main.rs +++ b/cli/fledger/src/main.rs @@ -1,36 +1,95 @@ -use clap::Parser; +use std::error::Error; + +use clap::{Parser, Subcommand}; use flarch::{ data_storage::{DataStorage, DataStorageFile}, tasks::wait_ms, web_rtc::connection::{ConnectionConfig, HostLogin, Login}, }; -use flmodules::network::{network_broker_start, signal::SIGNAL_VERSION}; +use flcrypto::access::Condition; +use flmodules::{ + dht_storage::core::RealmConfig, + flo::{crypto::Rules, realm::FloRealm}, + network::{broker::NetworkIn, network_start, signal::SIGNAL_VERSION}, +}; use flnode::{node::Node, version::VERSION_STRING}; /// Fledger node CLI binary #[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] +#[command(author, version, about, long_about = None)] struct Args { /// Path to the configuration directory - #[clap(short, long, default_value = "./flnode")] + #[arg(short, long, default_value = "./flnode")] config: String, /// Set the name of the node - reverts to a random value if not given - #[clap(short, long)] + #[arg(short, long)] name: Option, /// Uptime interval - to stress test disconnections - #[clap(short, long)] + #[arg(short, long)] uptime_sec: Option, /// Signalling server URL - #[clap(short, long, default_value = "wss://signal.fledg.re")] + #[arg(short, long, default_value = "wss://signal.fledg.re")] signal_url: String, /// Verbosity of the logger #[clap(flatten)] verbosity: clap_verbosity_flag::Verbosity, + + /// Log frequency in seconds + #[arg(long, default_value = "5")] + log_freq: u32, + + /// Log gossip messages + #[arg(long, default_value = "false")] + log_gossip: bool, + + /// Log random router + #[arg(long, default_value = "false")] + log_random: bool, + + /// Log countdown router + #[arg(long, default_value = "false")] + log_countdown: bool, + + /// Log dht-storage stats + #[arg(long, default_value = "false")] + log_dht_storage: bool, + + #[command(subcommand)] + command: Option, +} + +#[derive(Subcommand, Debug)] +enum Commands { + /// Handles Realms + Realm { + #[command(subcommand)] + command: RealmCommands, + }, + /// Lists cryptographic keys stored + Crypto {}, + /// Prints the statistics of the different modules and then quits + Stats {}, +} + +#[derive(Subcommand, Debug)] +enum RealmCommands { + /// List available realms + List, + /// Creates a new realm + Create { + /// The name of the new realm. + name: String, + /// The maximum size of the sum of all the objects in the realm. The actual + /// size will be bigger, as the data is serialized. + max_space: Option, + /// The maximum size of a single object in this realm. + max_flo_size: Option, + }, } #[tokio::main] @@ -38,13 +97,15 @@ async fn main() -> Result<(), Box> { let args = Args::parse(); let mut logger = env_logger::Builder::new(); - logger.filter_module("fl", args.verbosity.log_level_filter()); + logger.filter_module("fl", args.verbosity.clone().log_level_filter()); logger.parse_env("RUST_LOG"); logger.try_init().expect("Failed to initialize logger"); - let storage = DataStorageFile::new(args.config, "fledger".into()); - let mut node_config = Node::get_config(storage.clone())?; - args.name.map(|name| node_config.info.name = name); + let storage = DataStorageFile::new(args.config.clone(), "fledger".into()); + let mut node_config = Node::get_config(storage.clone_box())?; + args.name + .as_ref() + .map(|name| node_config.info.name = name.clone()); log::info!( "Starting app with version {}/{}", @@ -53,10 +114,10 @@ async fn main() -> Result<(), Box> { ); log::debug!("Connecting to websocket at {}", args.signal_url); - let network = network_broker_start( + let network = network_start( node_config.clone(), ConnectionConfig::new( - Some(args.signal_url), + Some(args.signal_url.clone()), None, Some(HostLogin { url: "turn:web.fledg.re:3478".into(), @@ -68,28 +129,147 @@ async fn main() -> Result<(), Box> { ), ) .await?; - let mut node = Node::start(Box::new(storage), node_config, network).await?; + let mut node = Node::start(Box::new(storage), node_config, network.broker).await?; let nc = &node.node_config.info; - log::info!("Starting node {}: {}", nc.get_id(), nc.name); + log::info!("Started node {}: {}", nc.get_id(), nc.name); + + match &args.command { + Some(cmd) => match cmd { + Commands::Realm { command } => match command { + RealmCommands::List => list_realms(node, args).await?, + RealmCommands::Create { + name, + max_space, + max_flo_size, + } => { + log::info!("{name} / {max_space:?} / {max_flo_size:?}"); + let fr = FloRealm::new( + name, + Rules::Update(Condition::Verifier( + node.crypto_storage + .get_signer() + .as_ref() + .verifier() + .get_id(), + )), + RealmConfig { + max_space: max_space.unwrap_or(1000000), + max_flo_size: max_flo_size.unwrap_or(10000), + }, + )?; + + log::info!("Connecting to other nodes"); + loop_node(&mut node, Some(&args), Some(2)).await?; + + let mut ds = node.dht_storage.as_mut().expect("Need DHT-Storage").clone(); + ds.store_flo(fr.into())?; + ds.propagate()?; - log::info!("Started successfully"); - let mut i: i32 = 0; + list_realms(node, args).await?; + } + }, + Commands::Crypto {} => todo!(), + Commands::Stats {} => todo!(), + }, + None => loop_node(&mut node, Some(&args), None).await?, + } + + Ok(()) +} + +async fn list_realms(mut node: Node, args: Args) -> Result<(), Box> { + let mut ds = node.dht_storage.as_mut().expect("Need DHT-Storage").clone(); + log::info!("Waiting for update of data"); + loop_node(&mut node, Some(&args), Some(20)).await?; + log::info!("Requesting sync of DHT-storage and waiting for answers"); + ds.sync()?; + ds.propagate()?; + loop_node(&mut node, Some(&args), Some(2)).await?; + let rids = ds.get_realm_ids().await?; + if rids.len() == 0 { + log::info!("No realms found."); + return Ok(()); + } + log::info!( + "Realm-IDs are: {}", + rids.iter() + .map(|rid| format!("{rid}")) + .collect::>() + .join(" :: ") + ); + + Ok(()) +} + +async fn loop_node( + node: &mut Node, + args: Option<&Args>, + max_count: Option, +) -> Result<(), Box> { + let mut i: u32 = 0; + node.broker_net + .emit_msg_in(NetworkIn::WSUpdateListRequest)?; loop { i += 1; - node.process() - .await - .err() - .map(|e| log::warn!("Couldn't process node: {e:?}")); - - if i % 3 == 2 { - log::info!("Nodes are: {:?}", node.nodes_online()?); - let ping = &node.ping.as_ref().unwrap().storage; - log::info!("Nodes countdowns are: {:?}", ping.stats); - log::debug!( - "Chat messages are: {:?}", - node.gossip.as_ref().unwrap().chat_events() - ); - } + wait_ms(1000).await; + + if let Some(a) = args.as_ref() { + a.log(i, node).await?; + } + + if let Some(c) = max_count.as_ref() { + if c < &i { + return Ok(()); + } + } + } +} + +impl Args { + async fn log(&self, i: u32, node: &mut Node) -> Result<(), Box> { + if i % self.log_freq == self.log_freq - 1 { + if self.log_random { + log::info!( + "Nodes are: {}", + node.nodes_online()? + .iter() + .map(|n| format!("{}/{}", n.name, n.get_id())) + .collect::>() + .join(" - ") + ); + } + + if self.log_countdown { + let ping = &node.ping.as_ref().unwrap().storage.borrow(); + log::info!("Nodes countdowns are: {:?}", ping.stats); + } + + if self.log_gossip { + log::debug!( + "Chat messages are: {:?}", + node.gossip.as_ref().unwrap().chat_events() + ); + } + + if self.log_dht_storage { + if let Some(ds) = node.dht_storage.as_mut() { + let rids = ds.get_realm_ids().await?; + if rids.len() == 0 { + log::info!("No realms found."); + return Ok(()); + } + log::info!( + "Realm-IDs are: {}", + rids.iter() + .map(|rid| format!("{rid}")) + .collect::>() + .join(" :: ") + ); + } + } + } + + Ok(()) } } diff --git a/cli/flsignal/Cargo.toml b/cli/flsignal/Cargo.toml index e67e91b0..359dc4c2 100644 --- a/cli/flsignal/Cargo.toml +++ b/cli/flsignal/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "flsignal" -version = "0.8.0" +version = "0.9.0" edition = "2021" authors = ["Linus Gasser "] description = "The signalling server as a CLI" @@ -12,8 +12,8 @@ keywords = ["network", "signalling", "webrtc"] categories = ["network-programming"] [dependencies] -flmodules = {path = "../../flmodules", version = "0.8"} -flarch = {path = "../../flarch", version = "0.8"} +flmodules = {path = "../../flmodules", version = "0.9"} +flarch = {path = "../../flarch", version = "0.9"} clap = "4" clap-verbosity-flag = "2" diff --git a/cli/flsignal/src/main.rs b/cli/flsignal/src/main.rs index 0858b7ac..691eddac 100644 --- a/cli/flsignal/src/main.rs +++ b/cli/flsignal/src/main.rs @@ -1,6 +1,6 @@ use clap::Parser; -use flmodules::network::signal::{SignalServer, SignalMessage, SignalOutput}; use flarch::web_rtc::web_socket_server::WebSocketServer; +use flmodules::network::signal::{SignalOut, SignalServer}; /// Fledger signalling server #[derive(Parser, Debug)] @@ -22,12 +22,12 @@ async fn main() -> Result<(), Box> { let wss = WebSocketServer::new(8765).await?; let mut signal_server = SignalServer::new(wss, 2).await?; - let (msgs, _) = signal_server.get_tap_sync().await?; + let (msgs, _) = signal_server.get_tap_out_sync().await?; log::info!("Started listening on port 8765"); for msg in msgs { log::debug!("{:?}", msg); - if matches!(msg, SignalMessage::Output(SignalOutput::Stopped)) { + if matches!(msg, SignalOut::Stopped) { log::error!("Server stopped working - exiting"); return Ok(()); } diff --git a/devbox.json b/devbox.json index b4bbf376..0bb524d8 100644 --- a/devbox.json +++ b/devbox.json @@ -20,13 +20,12 @@ "trunk": "latest", "wasm-pack": "latest", "nodejs": "18", - "procps": "latest", "vscode": "latest" }, "shell": { "init_hook": [ - "if [ ! -d $RUSTUP_HOME/toolchains/stable* ]; then rustup default stable; fi", - "if [ ! -d $RUSTUP_HOME/toolchains/stable*/lib/rustlib/wasm32-unknown-unknown ]; then rustup target add wasm32-unknown-unknown; fi", + "if [ -z \"$(echo $RUSTUP_HOME/toolchains/stable*)\" ]; then rustup default stable; fi", + "if [ -z \"$(echo $RUSTUP_HOME/toolchains/stable*/lib/rustlib/wasm32-unknown-unknown)\" ]; then rustup target add wasm32-unknown-unknown; fi", "alias ls='ls --color'" ], "scripts": { @@ -35,6 +34,12 @@ ], "fledger": [ "cd cli && cargo run -p fledger" + ], + "code": [ + "Code --user-data-dir .vscode ." + ], + "clean": [ + "make clean" ] } }, diff --git a/devbox.lock b/devbox.lock index 89366eb1..e6e998b7 100644 --- a/devbox.lock +++ b/devbox.lock @@ -3,346 +3,342 @@ "packages": { "darwin.apple_sdk.frameworks.CoreServices": { "resolved": "github:NixOS/nixpkgs/75a52265bda7fd25e06e3a67dee3f0354e73243c#darwin.apple_sdk.frameworks.CoreServices", - "source": "nixpkg" + "source": "nixpkg", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "path": "/nix/store/j343fncqfbb6wdlrwj6dnfmvx4hi1zki-apple-framework-CoreServices-11.0.0", + "default": true + } + ] + } + } }, "darwin.apple_sdk.frameworks.Security": { "resolved": "github:NixOS/nixpkgs/75a52265bda7fd25e06e3a67dee3f0354e73243c#darwin.apple_sdk.frameworks.Security", - "source": "nixpkg" + "source": "nixpkg", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "path": "/nix/store/9jbhn62ld50znjqxll0q5gq9i4disc1s-apple-framework-Security-11.0.0", + "default": true + } + ] + } + } }, "darwin.apple_sdk.frameworks.SystemConfiguration": { "resolved": "github:NixOS/nixpkgs/75a52265bda7fd25e06e3a67dee3f0354e73243c#darwin.apple_sdk.frameworks.SystemConfiguration", - "source": "nixpkg" + "source": "nixpkg", + "systems": { + "aarch64-darwin": { + "outputs": [ + { + "path": "/nix/store/jaxmz1dvsz8il7nkxwzw8xfxac3sfz5v-apple-framework-SystemConfiguration-11.0.0", + "default": true + } + ] + } + } }, "git@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#git", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#git", "source": "devbox-search", - "version": "2.45.2", + "version": "2.47.2", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/0hiwlijxhs9mvigjfsggl5rkr4gpk52q-git-2.45.2", + "path": "/nix/store/9z3jhc0rlj3zaw8nd1zka9vli6w0q11g-git-2.47.2", "default": true }, { "name": "doc", - "path": "/nix/store/rfzz8cr3hsk7gr35dk7hcbrfyqyxjibn-git-2.45.2-doc" + "path": "/nix/store/rh151iwgy4h8yv8kxd5facw57cyj0bav-git-2.47.2-doc" } ], - "store_path": "/nix/store/0hiwlijxhs9mvigjfsggl5rkr4gpk52q-git-2.45.2" + "store_path": "/nix/store/9z3jhc0rlj3zaw8nd1zka9vli6w0q11g-git-2.47.2" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/psrwvc0d56phgxn35dam0mkl6793ii4m-git-2.45.2", + "path": "/nix/store/gx5y37qcfqdvn0h6swjd04dmqjjh3nk7-git-2.47.2", "default": true }, { "name": "debug", - "path": "/nix/store/5hhh66s7rvqj321mp6dqshsrh16prycr-git-2.45.2-debug" + "path": "/nix/store/8vfpmf3vjgzl2psip76p0f9h11sb6y3p-git-2.47.2-debug" }, { "name": "doc", - "path": "/nix/store/xymplxcmd2snjikl6z7i45v2mrn1ghbl-git-2.45.2-doc" + "path": "/nix/store/c25mq3q83dvw3k5pb0qr5333g3cycylq-git-2.47.2-doc" } ], - "store_path": "/nix/store/psrwvc0d56phgxn35dam0mkl6793ii4m-git-2.45.2" + "store_path": "/nix/store/gx5y37qcfqdvn0h6swjd04dmqjjh3nk7-git-2.47.2" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/82ibhj1j82f19d4vwn7z88c9b1zg7xxa-git-2.45.2", + "path": "/nix/store/39xx5gx3hxigs1b5ldw5i2jr84vsn3rf-git-2.47.2", "default": true }, { "name": "doc", - "path": "/nix/store/z8q4agw3vfj7vlix8ppswrz900i6bsn3-git-2.45.2-doc" + "path": "/nix/store/xmh2djjrnbpiqqgpblrcbavnqh0nv4km-git-2.47.2-doc" } ], - "store_path": "/nix/store/82ibhj1j82f19d4vwn7z88c9b1zg7xxa-git-2.45.2" + "store_path": "/nix/store/39xx5gx3hxigs1b5ldw5i2jr84vsn3rf-git-2.47.2" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/p45c31p2qhwjy4vf60v2d2mw9bvvpb67-git-2.45.2", + "path": "/nix/store/33g65w5cc9n8fr0hxj84282xmv4l7hyl-git-2.47.2", "default": true }, { "name": "debug", - "path": "/nix/store/avmjkyw7m8qj9ylbziwigahmcyrgyxig-git-2.45.2-debug" + "path": "/nix/store/jyz4nvcd3bci4vg2sfsmvrq0fp9mzr5a-git-2.47.2-debug" }, { "name": "doc", - "path": "/nix/store/qlc68q98b3q3nd7prbdmkmm133vy2bf1-git-2.45.2-doc" + "path": "/nix/store/lb4nipdhlwrxdavz7gdkcik6lkz3cbdm-git-2.47.2-doc" } ], - "store_path": "/nix/store/p45c31p2qhwjy4vf60v2d2mw9bvvpb67-git-2.45.2" + "store_path": "/nix/store/33g65w5cc9n8fr0hxj84282xmv4l7hyl-git-2.47.2" } } }, + "github:NixOS/nixpkgs/nixpkgs-unstable": { + "resolved": "github:NixOS/nixpkgs/2d068ae5c6516b2d04562de50a58c682540de9bf?lastModified=1740303746&narHash=sha256-XcdiWLEhjJkMxDLKQJ0CCivmYYCvA5MDxu9pMybM5kM%3D" + }, "less@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#less", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#less", "source": "devbox-search", - "version": "661", + "version": "668", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/jprg2czvy02z67zlz7r3g89m9l96xcj1-less-661", + "path": "/nix/store/0jvdg8qg5qf2hzslmyz4wlkvqxcfxz6p-less-668", "default": true }, { "name": "man", - "path": "/nix/store/rcl5xwskryz2ydcv1bildcqp0qhbrdcp-less-661-man", + "path": "/nix/store/yk2cm7hrvkc2mcs9xn87lv3plqz1z8v2-less-668-man", "default": true } ], - "store_path": "/nix/store/jprg2czvy02z67zlz7r3g89m9l96xcj1-less-661" + "store_path": "/nix/store/0jvdg8qg5qf2hzslmyz4wlkvqxcfxz6p-less-668" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/7vw2q5m7qwam9cq5ix0sa81wvpxbv4n4-less-661", + "path": "/nix/store/l315xw99jm53gh1jin0h4xrq5knj4dr9-less-668", "default": true }, { "name": "man", - "path": "/nix/store/jj5yk5fksw867y8pchi0d64vz7v0rrgs-less-661-man", + "path": "/nix/store/pxmsqna2cz6s5qcbcca167q2p1d4ifnz-less-668-man", "default": true } ], - "store_path": "/nix/store/7vw2q5m7qwam9cq5ix0sa81wvpxbv4n4-less-661" + "store_path": "/nix/store/l315xw99jm53gh1jin0h4xrq5knj4dr9-less-668" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/wbzfabi4grgl5dircjhf95crawj5f9xp-less-661", + "path": "/nix/store/w6pfdkm418p93d4s3lhpzrd6ab6l8sfx-less-668", "default": true }, { "name": "man", - "path": "/nix/store/3ydhdnyb3icxaxsx282vpzad2pxcr6i5-less-661-man", + "path": "/nix/store/3kgsi6m4gfpcnbpq7x4dzhbl24i9vbd0-less-668-man", "default": true } ], - "store_path": "/nix/store/wbzfabi4grgl5dircjhf95crawj5f9xp-less-661" + "store_path": "/nix/store/w6pfdkm418p93d4s3lhpzrd6ab6l8sfx-less-668" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/1hjy5536gvxs11hkzb13f1mwm2p5zjv6-less-661", + "path": "/nix/store/m3ddz9mas3cqcx9500rqn59y0f7q9ykd-less-668", "default": true }, { "name": "man", - "path": "/nix/store/0rca3is3i18wv1masgm69nv06d1v3wld-less-661-man", + "path": "/nix/store/b60916dlncr25cw15hiy3kzm5x6qgl6b-less-668-man", "default": true } ], - "store_path": "/nix/store/1hjy5536gvxs11hkzb13f1mwm2p5zjv6-less-661" + "store_path": "/nix/store/m3ddz9mas3cqcx9500rqn59y0f7q9ykd-less-668" } } }, "libiconv@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#libiconv", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#libiconv", "source": "devbox-search", - "version": "99", + "version": "2.40", "systems": { "aarch64-darwin": { "outputs": [ { - "name": "out", - "path": "/nix/store/4m2zvl17xzbsbpnlgisl5mnwn2d5gdd6-libiconv-99", + "path": "/nix/store/msf2qxhv4971d669lmmjfp7kynj34jsy-libiconv-107", "default": true - }, + } + ] + }, + "aarch64-linux": { + "outputs": [ { - "name": "dev", - "path": "/nix/store/p8br93anpjh80j2fli7sj4bxf58fxysi-libiconv-99-dev" + "name": "out", + "path": "/nix/store/pgx7xylvqxbz6npcykm0wvbldv3pa3xd-glibc-iconv-2.40", + "default": true } ], - "store_path": "/nix/store/4m2zvl17xzbsbpnlgisl5mnwn2d5gdd6-libiconv-99" + "store_path": "/nix/store/pgx7xylvqxbz6npcykm0wvbldv3pa3xd-glibc-iconv-2.40" }, - "x86_64-darwin": { + "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/pm7prf7lkm7nqy91ywxmvm2s48v4dqlj-libiconv-99", + "path": "/nix/store/ir5078058nmc9rx6w0r4mk7jkzqxjqsz-glibc-iconv-2.40", "default": true - }, - { - "name": "dev", - "path": "/nix/store/r8ag21rmf0v0w696q0axch6k9l1dy8wh-libiconv-99-dev" } ], - "store_path": "/nix/store/pm7prf7lkm7nqy91ywxmvm2s48v4dqlj-libiconv-99" + "store_path": "/nix/store/ir5078058nmc9rx6w0r4mk7jkzqxjqsz-glibc-iconv-2.40" } } }, "nodejs@18": { - "last_modified": "2024-08-14T11:41:26Z", + "last_modified": "2025-02-07T11:26:36Z", "plugin_version": "0.0.2", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#nodejs_18", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#nodejs_18", "source": "devbox-search", - "version": "18.20.4", + "version": "18.20.6", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/jv2bz2b2pb2iy2q2i5r05b795fqvwai2-nodejs-18.20.4", + "path": "/nix/store/23bg0nd47da73sgljxizkg7v9khdw4az-nodejs-18.20.6", "default": true }, { "name": "libv8", - "path": "/nix/store/pzm8crfgfkxrrp459wh3bd7mdlwq8nfs-nodejs-18.20.4-libv8" + "path": "/nix/store/dvrqs027ljiya83mys1qv08cjc6fc4h0-nodejs-18.20.6-libv8" } ], - "store_path": "/nix/store/jv2bz2b2pb2iy2q2i5r05b795fqvwai2-nodejs-18.20.4" + "store_path": "/nix/store/23bg0nd47da73sgljxizkg7v9khdw4az-nodejs-18.20.6" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/d4jkkmx440krdz5izfy4kbwn3fpx69yp-nodejs-18.20.4", + "path": "/nix/store/v9w21arqydxj1hnswv31l2vk7q3cdqq3-nodejs-18.20.6", "default": true }, { "name": "libv8", - "path": "/nix/store/hl54kkx0ydb2hx75ni1l1fr7d0kgxazy-nodejs-18.20.4-libv8" + "path": "/nix/store/aikhb8l9qdq6f2fvgcjh6n97y9l6lnrw-nodejs-18.20.6-libv8" } ], - "store_path": "/nix/store/d4jkkmx440krdz5izfy4kbwn3fpx69yp-nodejs-18.20.4" + "store_path": "/nix/store/v9w21arqydxj1hnswv31l2vk7q3cdqq3-nodejs-18.20.6" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/r0lkisl0y12p585lfa6a1c0h12zksz10-nodejs-18.20.4", + "path": "/nix/store/812qxhp3sz2ilhg9fs02ckbmwpchxd17-nodejs-18.20.6", "default": true }, { "name": "libv8", - "path": "/nix/store/8msf26g4k1j98sfsdyivmjndp2bapdxf-nodejs-18.20.4-libv8" + "path": "/nix/store/vwsmzjxmygvkz87v8bz2smvwhxzvsdds-nodejs-18.20.6-libv8" } ], - "store_path": "/nix/store/r0lkisl0y12p585lfa6a1c0h12zksz10-nodejs-18.20.4" + "store_path": "/nix/store/812qxhp3sz2ilhg9fs02ckbmwpchxd17-nodejs-18.20.6" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/k9pq7ijgg6jjynmkcn4radvm5pqrrndk-nodejs-18.20.4", + "path": "/nix/store/qwzy9qniaywm3dm162si7qvivhqvg5r0-nodejs-18.20.6", "default": true }, { "name": "libv8", - "path": "/nix/store/da3ndzam8hfjd2ad47ddlyzglb71jxaf-nodejs-18.20.4-libv8" + "path": "/nix/store/las0nz6smawdmbrgf4z244v96wpixfzk-nodejs-18.20.6-libv8" } ], - "store_path": "/nix/store/k9pq7ijgg6jjynmkcn4radvm5pqrrndk-nodejs-18.20.4" + "store_path": "/nix/store/qwzy9qniaywm3dm162si7qvivhqvg5r0-nodejs-18.20.6" } } }, "openssh@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#openssh", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#openssh", "source": "devbox-search", - "version": "9.8p1", + "version": "9.9p1", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/yizghhxlspvaszsi4mqnm1sijj1wf6s3-openssh-9.8p1", + "path": "/nix/store/ar51njp80pmn8vccn0jpqa221wbjfcnc-openssh-9.9p1", "default": true } ], - "store_path": "/nix/store/yizghhxlspvaszsi4mqnm1sijj1wf6s3-openssh-9.8p1" + "store_path": "/nix/store/ar51njp80pmn8vccn0jpqa221wbjfcnc-openssh-9.9p1" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/jgvb9mpfyrl0kc1adfx38dsgf8x33w11-openssh-9.8p1", + "path": "/nix/store/012rmzna0ji4srjqk8g6j2i0b74zw4im-openssh-9.9p1", "default": true } ], - "store_path": "/nix/store/jgvb9mpfyrl0kc1adfx38dsgf8x33w11-openssh-9.8p1" + "store_path": "/nix/store/012rmzna0ji4srjqk8g6j2i0b74zw4im-openssh-9.9p1" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/h3q7k4lq8bsxpj87768l092yp1lrp0lm-openssh-9.8p1", - "default": true - } - ], - "store_path": "/nix/store/h3q7k4lq8bsxpj87768l092yp1lrp0lm-openssh-9.8p1" - }, - "x86_64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/qsl95d22jgnvd2z6l8lkfwbj1gkvim6p-openssh-9.8p1", - "default": true - } - ], - "store_path": "/nix/store/qsl95d22jgnvd2z6l8lkfwbj1gkvim6p-openssh-9.8p1" - } - } - }, - "procps@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#procps", - "source": "devbox-search", - "version": "3.3.17", - "systems": { - "aarch64-darwin": { - "outputs": [ - { - "name": "2008", - "path": "/nix/store/r2bmahj4d1r76r7sggc2k0s1p02sp1gp-procps-1003.1-2008", - "default": true - } - ] - }, - "aarch64-linux": { - "outputs": [ - { - "name": "out", - "path": "/nix/store/qywfynbhf6vh3a37n3512ncrkhzsxmf1-procps-3.3.17", + "path": "/nix/store/nfrhrdqg4dczzc42anm6inwig6fawag0-openssh-9.9p1", "default": true } ], - "store_path": "/nix/store/qywfynbhf6vh3a37n3512ncrkhzsxmf1-procps-3.3.17" + "store_path": "/nix/store/nfrhrdqg4dczzc42anm6inwig6fawag0-openssh-9.9p1" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/rcqvjqwjf8x08p94i689gqd2ga49xqn6-procps-3.3.17", + "path": "/nix/store/32s39mc064nvfvmd9daj0s3pqmsfgwj3-openssh-9.9p1", "default": true } ], - "store_path": "/nix/store/rcqvjqwjf8x08p94i689gqd2ga49xqn6-procps-3.3.17" + "store_path": "/nix/store/32s39mc064nvfvmd9daj0s3pqmsfgwj3-openssh-9.9p1" } } }, "rustup@latest": { - "last_modified": "2024-08-14T11:41:26Z", + "last_modified": "2025-02-07T11:26:36Z", "plugin_version": "0.0.1", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#rustup", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#rustup", "source": "devbox-search", "version": "1.27.1", "systems": { @@ -350,259 +346,259 @@ "outputs": [ { "name": "out", - "path": "/nix/store/8n1fnihj1lxgwj2gmk54nwshv37d67a4-rustup-1.27.1", + "path": "/nix/store/9b8v9lji5gjw5cj7f2nv3l184zyg0m3a-rustup-1.27.1", "default": true } ], - "store_path": "/nix/store/8n1fnihj1lxgwj2gmk54nwshv37d67a4-rustup-1.27.1" + "store_path": "/nix/store/9b8v9lji5gjw5cj7f2nv3l184zyg0m3a-rustup-1.27.1" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/bzmspl6g6lxgqpg64mmbn1q8306rbxn1-rustup-1.27.1", + "path": "/nix/store/d2g7zcymlvc5cjqcdpbqgrzzg2swwzik-rustup-1.27.1", "default": true } ], - "store_path": "/nix/store/bzmspl6g6lxgqpg64mmbn1q8306rbxn1-rustup-1.27.1" + "store_path": "/nix/store/d2g7zcymlvc5cjqcdpbqgrzzg2swwzik-rustup-1.27.1" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/6plkfpnj2zvn5dq6ln8r7jh40w7230jh-rustup-1.27.1", + "path": "/nix/store/pxbbd2112rlz283k82rsk0mfc9bw0jkb-rustup-1.27.1", "default": true } ], - "store_path": "/nix/store/6plkfpnj2zvn5dq6ln8r7jh40w7230jh-rustup-1.27.1" + "store_path": "/nix/store/pxbbd2112rlz283k82rsk0mfc9bw0jkb-rustup-1.27.1" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/sd66x947abmdpga7b148khk9i4g7kv43-rustup-1.27.1", + "path": "/nix/store/dqz7ghl1i46i8nswvkkl3h3jbhxkbchg-rustup-1.27.1", "default": true } ], - "store_path": "/nix/store/sd66x947abmdpga7b148khk9i4g7kv43-rustup-1.27.1" + "store_path": "/nix/store/dqz7ghl1i46i8nswvkkl3h3jbhxkbchg-rustup-1.27.1" } } }, "trunk@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#trunk", + "last_modified": "2025-02-12T00:10:52Z", + "resolved": "github:NixOS/nixpkgs/83a2581c81ff5b06f7c1a4e7cc736a455dfcf7b4#trunk", "source": "devbox-search", - "version": "0.20.3", + "version": "0.21.7", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/8rrdnm5vqd9v61rbxhkrgycbfwjiaykn-trunk-0.20.3", + "path": "/nix/store/p1k7f2fp7zx200qrirbrbzanxajy4f2q-trunk-0.21.7", "default": true } ], - "store_path": "/nix/store/8rrdnm5vqd9v61rbxhkrgycbfwjiaykn-trunk-0.20.3" + "store_path": "/nix/store/p1k7f2fp7zx200qrirbrbzanxajy4f2q-trunk-0.21.7" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/p0wh838rak0aq1aply7hjnz9f4a8r66z-trunk-0.20.3", + "path": "/nix/store/4j8cflpbph3m8kgxwjwcvjsr7i8w855r-trunk-0.21.7", "default": true } ], - "store_path": "/nix/store/p0wh838rak0aq1aply7hjnz9f4a8r66z-trunk-0.20.3" + "store_path": "/nix/store/4j8cflpbph3m8kgxwjwcvjsr7i8w855r-trunk-0.21.7" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/diii5lz9k4nnkgwga1k7biir6dhyh7kn-trunk-0.20.3", + "path": "/nix/store/8wfpm2a776zicab7i6bgbmw9q7rwkk05-trunk-0.21.7", "default": true } ], - "store_path": "/nix/store/diii5lz9k4nnkgwga1k7biir6dhyh7kn-trunk-0.20.3" + "store_path": "/nix/store/8wfpm2a776zicab7i6bgbmw9q7rwkk05-trunk-0.21.7" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/18lj5w1529n3m4znq7k9mq98nd4lxny1-trunk-0.20.3", + "path": "/nix/store/a8k6ggnqmv9dzdggxs4krbgcgq6x9s14-trunk-0.21.7", "default": true } ], - "store_path": "/nix/store/18lj5w1529n3m4znq7k9mq98nd4lxny1-trunk-0.20.3" + "store_path": "/nix/store/a8k6ggnqmv9dzdggxs4krbgcgq6x9s14-trunk-0.21.7" } } }, "vim@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#vim", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#vim", "source": "devbox-search", - "version": "9.1.0595", + "version": "9.1.1046", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/s7arni8gjj5b77sw1qv8xpklqazcx9yd-vim-9.1.0595", + "path": "/nix/store/rx2i32cjx1y09n3qr5939xxfqjpkrhsr-vim-9.1.1046", "default": true }, { "name": "xxd", - "path": "/nix/store/6i7lgynna1bk44319xiap4a7ymi9v2fm-vim-9.1.0595-xxd", + "path": "/nix/store/kbq8w3npsqgdipxc3ml57z67s0gn95yf-vim-9.1.1046-xxd", "default": true } ], - "store_path": "/nix/store/s7arni8gjj5b77sw1qv8xpklqazcx9yd-vim-9.1.0595" + "store_path": "/nix/store/rx2i32cjx1y09n3qr5939xxfqjpkrhsr-vim-9.1.1046" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/r1b7bp9bn00mx6zp6nziwhv6c9a9zpl7-vim-9.1.0595", + "path": "/nix/store/j67dghzznffvqvdg4q676ygw2pif1hw9-vim-9.1.1046", "default": true }, { "name": "xxd", - "path": "/nix/store/5hbsr0fzs0qg7kadbccmkd67ib3chs7p-vim-9.1.0595-xxd", + "path": "/nix/store/0jh6sz9n3hrx7rnb44fq3xngya14ds4j-vim-9.1.1046-xxd", "default": true } ], - "store_path": "/nix/store/r1b7bp9bn00mx6zp6nziwhv6c9a9zpl7-vim-9.1.0595" + "store_path": "/nix/store/j67dghzznffvqvdg4q676ygw2pif1hw9-vim-9.1.1046" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/llqzlc672c9ch6a86zvh76gq5v5jnsv1-vim-9.1.0595", + "path": "/nix/store/n4rw363dm6mmi8zrcyzd8k0yhmnyw333-vim-9.1.1046", "default": true }, { "name": "xxd", - "path": "/nix/store/39w4fgmvnqajmn3pw8r0j81zrhpam7n3-vim-9.1.0595-xxd", + "path": "/nix/store/kr9p6d9ws269mq9mf0b7al60b687x862-vim-9.1.1046-xxd", "default": true } ], - "store_path": "/nix/store/llqzlc672c9ch6a86zvh76gq5v5jnsv1-vim-9.1.0595" + "store_path": "/nix/store/n4rw363dm6mmi8zrcyzd8k0yhmnyw333-vim-9.1.1046" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/r2sjxb4zyl5jrb6s9jh78snv0si5h2gy-vim-9.1.0595", + "path": "/nix/store/91af2356mvkx4km3ngqi7sgfv6kimnc7-vim-9.1.1046", "default": true }, { "name": "xxd", - "path": "/nix/store/vzbif1ja5r0pscrndhcvfc38y07r33q6-vim-9.1.0595-xxd", + "path": "/nix/store/4n2k7vffrqzgm8pxa1a4vdky1hzfyl2d-vim-9.1.1046-xxd", "default": true } ], - "store_path": "/nix/store/r2sjxb4zyl5jrb6s9jh78snv0si5h2gy-vim-9.1.0595" + "store_path": "/nix/store/91af2356mvkx4km3ngqi7sgfv6kimnc7-vim-9.1.1046" } } }, "vscode@latest": { - "last_modified": "2024-08-16T17:05:30Z", - "resolved": "github:NixOS/nixpkgs/d4a7a4d0e066278bfb0d77bd2a7adde1c0ec9e3d#vscode", + "last_modified": "2025-02-16T00:50:12Z", + "resolved": "github:NixOS/nixpkgs/1dcdd535fef84d4671129a10e7072d56dca9a4d3#vscode", "source": "devbox-search", - "version": "1.92.2", + "version": "1.97.2", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/w1vy2d50lcgvj24vmwl99cz81kvynhaj-vscode-1.92.2", + "path": "/nix/store/v42413glqkxd9prq6jbzvwxzzb7vq0ps-vscode-1.97.2", "default": true } ], - "store_path": "/nix/store/w1vy2d50lcgvj24vmwl99cz81kvynhaj-vscode-1.92.2" + "store_path": "/nix/store/v42413glqkxd9prq6jbzvwxzzb7vq0ps-vscode-1.97.2" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/1glwx946zpqqndf8q4pirg7nwl1zhga1-vscode-1.92.2", + "path": "/nix/store/nygpcs0h70wa4381l983xx48r0jlzwld-vscode-1.97.2", "default": true } ], - "store_path": "/nix/store/1glwx946zpqqndf8q4pirg7nwl1zhga1-vscode-1.92.2" + "store_path": "/nix/store/nygpcs0h70wa4381l983xx48r0jlzwld-vscode-1.97.2" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/zsxk3wcy156yly0401a92dp8c5rwfdcx-vscode-1.92.2", + "path": "/nix/store/lc7aslkkymb6sjvj323dcqw7xfjajjhp-vscode-1.97.2", "default": true } ], - "store_path": "/nix/store/zsxk3wcy156yly0401a92dp8c5rwfdcx-vscode-1.92.2" + "store_path": "/nix/store/lc7aslkkymb6sjvj323dcqw7xfjajjhp-vscode-1.97.2" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/3xm62iszlb6q0fzpgcvyh5fc0p37amhz-vscode-1.92.2", + "path": "/nix/store/1wsgcydxm34rbg4n4cm7cy138y0jqvhp-vscode-1.97.2", "default": true } ], - "store_path": "/nix/store/3xm62iszlb6q0fzpgcvyh5fc0p37amhz-vscode-1.92.2" + "store_path": "/nix/store/1wsgcydxm34rbg4n4cm7cy138y0jqvhp-vscode-1.97.2" } } }, "wasm-pack@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#wasm-pack", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#wasm-pack", "source": "devbox-search", - "version": "0.12.1", + "version": "0.13.1", "systems": { "aarch64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/bgrah2f4wvxk9m8y201jlpm61wdxvl2h-wasm-pack-0.12.1", + "path": "/nix/store/8ng9cb2q3i7n3gxha49lrksrpa70g16c-wasm-pack-0.13.1", "default": true } ], - "store_path": "/nix/store/bgrah2f4wvxk9m8y201jlpm61wdxvl2h-wasm-pack-0.12.1" + "store_path": "/nix/store/8ng9cb2q3i7n3gxha49lrksrpa70g16c-wasm-pack-0.13.1" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/ipidznvb8js05w51xvs58klqhby6yr28-wasm-pack-0.12.1", + "path": "/nix/store/mdqzvdybrhivhz4wmvc2k9vsnl6gvq34-wasm-pack-0.13.1", "default": true } ], - "store_path": "/nix/store/ipidznvb8js05w51xvs58klqhby6yr28-wasm-pack-0.12.1" + "store_path": "/nix/store/mdqzvdybrhivhz4wmvc2k9vsnl6gvq34-wasm-pack-0.13.1" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/xpgwwwvag1b3arn7ipv2zrwf75gllkk5-wasm-pack-0.12.1", + "path": "/nix/store/ik7phkz2jaikipzrsp2d7iz8xffdq8cs-wasm-pack-0.13.1", "default": true } ], - "store_path": "/nix/store/xpgwwwvag1b3arn7ipv2zrwf75gllkk5-wasm-pack-0.12.1" + "store_path": "/nix/store/ik7phkz2jaikipzrsp2d7iz8xffdq8cs-wasm-pack-0.13.1" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/4mick6d3x1w5ky4szizqwn4l5ry07l5w-wasm-pack-0.12.1", + "path": "/nix/store/srjb601ikdig2506j2sqh4w0yga92j6b-wasm-pack-0.13.1", "default": true } ], - "store_path": "/nix/store/4mick6d3x1w5ky4szizqwn4l5ry07l5w-wasm-pack-0.12.1" + "store_path": "/nix/store/srjb601ikdig2506j2sqh4w0yga92j6b-wasm-pack-0.13.1" } } }, "which@latest": { - "last_modified": "2024-08-14T11:41:26Z", - "resolved": "github:NixOS/nixpkgs/0cb2fd7c59fed0cd82ef858cbcbdb552b9a33465#which", + "last_modified": "2025-02-07T11:26:36Z", + "resolved": "github:NixOS/nixpkgs/d98abf5cf5914e5e4e9d57205e3af55ca90ffc1d#which", "source": "devbox-search", "version": "2.21", "systems": { @@ -610,41 +606,41 @@ "outputs": [ { "name": "out", - "path": "/nix/store/6wqn8h6m6dwgj6rcfwcbgygwql9fr240-which-2.21", + "path": "/nix/store/y9i6grgmf838f858cj2myfdbw7377ldp-which-2.21", "default": true } ], - "store_path": "/nix/store/6wqn8h6m6dwgj6rcfwcbgygwql9fr240-which-2.21" + "store_path": "/nix/store/y9i6grgmf838f858cj2myfdbw7377ldp-which-2.21" }, "aarch64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/f0vx9zsf4bkfajiyh5d0vh4cvlcw9sn6-which-2.21", + "path": "/nix/store/96p5fxmlqvihdcmcrl8qq1qzlnjb5id1-which-2.21", "default": true } ], - "store_path": "/nix/store/f0vx9zsf4bkfajiyh5d0vh4cvlcw9sn6-which-2.21" + "store_path": "/nix/store/96p5fxmlqvihdcmcrl8qq1qzlnjb5id1-which-2.21" }, "x86_64-darwin": { "outputs": [ { "name": "out", - "path": "/nix/store/72v7pjm9261gjpsqib25isy8v37mffqk-which-2.21", + "path": "/nix/store/pyz0643263cqxq77sm2p291r28lrfb61-which-2.21", "default": true } ], - "store_path": "/nix/store/72v7pjm9261gjpsqib25isy8v37mffqk-which-2.21" + "store_path": "/nix/store/pyz0643263cqxq77sm2p291r28lrfb61-which-2.21" }, "x86_64-linux": { "outputs": [ { "name": "out", - "path": "/nix/store/53g1kcxlv9fi3v5zsksg6f5yq3iggszz-which-2.21", + "path": "/nix/store/f9qijkp80215dih25df0az32ii31vg27-which-2.21", "default": true } ], - "store_path": "/nix/store/53g1kcxlv9fi3v5zsksg6f5yq3iggszz-which-2.21" + "store_path": "/nix/store/f9qijkp80215dih25df0az32ii31vg27-which-2.21" } } } diff --git a/examples/ping-pong/Makefile b/examples/ping-pong/Makefile index 94933d26..8107e2a4 100644 --- a/examples/ping-pong/Makefile +++ b/examples/ping-pong/Makefile @@ -1,5 +1,5 @@ RUN_WEB := true -PKILL = @ps aux | grep "$1" | grep -v grep | awk '{print $$2}' | xargs -r kill +PKILL = @/bin/ps aux | grep "$1" | egrep -v "(grep|vscode|rust-analyzer)" | awk '{print $$2}' | xargs -r kill all: kill build run diff --git a/examples/ping-pong/libc/Cargo.lock b/examples/ping-pong/libc/Cargo.lock index bc6917e6..25fff8f7 100644 --- a/examples/ping-pong/libc/Cargo.lock +++ b/examples/ping-pong/libc/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -73,14 +73,14 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "libc 0.2.158", + "libc 0.2.169", ] [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -93,36 +93,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -143,7 +144,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -158,7 +159,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -182,7 +183,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -205,14 +206,25 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -221,24 +233,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -249,23 +261,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", - "libc 0.2.158", + "libc 0.2.169", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -315,9 +327,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" dependencies = [ "serde", ] @@ -340,11 +352,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -354,9 +372,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -372,9 +390,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "shlex", ] @@ -397,11 +415,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -424,9 +448,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "3e77c3243bd94243c03672cb5154667347c457ca271254724f9f393aee1c05ff" dependencies = [ "clap_builder", "clap_derive", @@ -434,9 +458,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" dependencies = [ "anstream", "anstyle", @@ -446,37 +470,27 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.13" +version = "4.5.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "clap_lex" -version = "0.7.2" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "const-oid" @@ -491,7 +505,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", - "libc 0.2.158", + "libc 0.2.169", ] [[package]] @@ -502,11 +516,11 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ - "libc 0.2.158", + "libc 0.2.169", ] [[package]] @@ -549,9 +563,9 @@ dependencies = [ [[package]] name = "ct-codecs" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" [[package]] name = "ctr" @@ -571,6 +585,7 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", + "digest", "fiat-crypto", "rustc_version", "subtle", @@ -585,7 +600,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -609,7 +624,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -620,14 +635,14 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -697,7 +712,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -714,6 +729,17 @@ dependencies = [ "spki", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + [[package]] name = "ed25519-compact" version = "2.1.1" @@ -721,7 +747,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" dependencies = [ "ct-codecs", - "getrandom", + "ed25519", + "getrandom 0.2.15", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "serde", + "sha2", + "subtle", + "zeroize", ] [[package]] @@ -753,9 +795,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -763,9 +805,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "anstream", "anstyle", @@ -780,6 +822,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "ff" version = "0.13.0" @@ -801,20 +853,23 @@ name = "flarch" version = "0.8.0" dependencies = [ "async-trait", + "btparse", + "bytes", "chrono", "env_logger", - "flarch_macro", + "flmacro", "futures", "js-sys", "log", "rand", + "rmp-serde", "serde", "serde-wasm-bindgen", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "wasm-bindgen", @@ -826,42 +881,68 @@ dependencies = [ ] [[package]] -name = "flarch_macro" +name = "flcrypto" +version = "0.8.0" +dependencies = [ + "bytes", + "ed25519-dalek", + "flarch", + "flmacro", + "log", + "rand", + "rmp-serde", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.11", + "typetag", +] + +[[package]] +name = "flmacro" version = "0.8.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "flmodules" version = "0.8.0" dependencies = [ + "async-recursion", "async-stream", "async-trait", "bimap", - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "ed25519-compact", + "ed25519-dalek", "flarch", + "flcrypto", + "flmacro", "futures", - "getrandom", + "getrandom 0.2.15", "itertools", "log", "names", + "num-bigint", "rand", "reqwest", + "rmp-serde", "serde", "serde_derive", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "strum_macros", + "thiserror 1.0.69", "tokio", "tokio-stream", "toml", + "typetag", ] [[package]] @@ -881,9 +962,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -896,9 +977,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -906,15 +987,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -923,38 +1004,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -987,11 +1068,23 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "js-sys", - "libc 0.2.158", - "wasi", + "libc 0.2.169", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc 0.2.169", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "ghash" version = "0.5.1" @@ -1004,9 +1097,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "group" @@ -1027,9 +1120,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "heck" @@ -1037,12 +1130,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hex" version = "0.4.3" @@ -1069,9 +1156,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1103,9 +1190,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "humantime" @@ -1115,9 +1202,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -1134,9 +1221,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", @@ -1152,9 +1239,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", @@ -1165,16 +1252,15 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1193,6 +1279,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1201,12 +1405,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1222,12 +1437,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -1254,18 +1469,27 @@ dependencies = [ "rand", "rtcp", "rtp", - "thiserror", + "thiserror 1.0.69", "tokio", "waitgroup", "webrtc-srtp", "webrtc-util", ] +[[package]] +name = "inventory" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" +dependencies = [ + "rustversion", +] + [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -1284,16 +1508,17 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1305,9 +1530,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libc" @@ -1327,6 +1552,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -1339,9 +1570,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "md-5" @@ -1376,9 +1607,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -1392,22 +1623,21 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", - "libc 0.2.158", - "wasi", + "libc 0.2.169", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1428,7 +1658,7 @@ checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" dependencies = [ "bitflags 1.3.2", "cfg-if", - "libc 0.2.158", + "libc 0.2.169", "memoffset", "pin-utils", ] @@ -1451,6 +1681,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -1479,9 +1710,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1497,9 +1728,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1509,9 +1740,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "p256" @@ -1527,9 +1758,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -1554,12 +1785,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", - "libc 0.2.158", + "libc 0.2.169", "redox_syscall", "smallvec", "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pem" version = "3.0.4" @@ -1585,31 +1822,11 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1641,9 +1858,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -1671,18 +1888,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quinn" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", @@ -1691,46 +1908,50 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror", + "thiserror 2.0.11", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom 0.2.15", "rand", "ring", "rustc-hash", "rustls", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.11", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ - "libc 0.2.158", + "cfg_aliases", + "libc 0.2.169", "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1741,7 +1962,7 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ - "libc 0.2.158", + "libc 0.2.169", "rand_chacha", "rand_core", ] @@ -1762,14 +1983,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem", "ring", @@ -1781,18 +2002,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1802,9 +2023,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1813,15 +2034,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", @@ -1851,6 +2072,7 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", + "tower", "tower-service", "url", "wasm-bindgen", @@ -1879,13 +2101,35 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", - "libc 0.2.158", + "getrandom 0.2.15", + "libc 0.2.169", "spin", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "rtcp" version = "0.11.0" @@ -1893,7 +2137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc9f775ff89c5fe7f0cc0abafb7c57688ae25ce688f1a52dd88e277616c76ab2" dependencies = [ "bytes", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -1907,7 +2151,7 @@ dependencies = [ "portable-atomic", "rand", "serde", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -1919,9 +2163,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -1943,9 +2187,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -1970,36 +2214,44 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" -version = "0.102.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -2012,19 +2264,13 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2039,7 +2285,7 @@ checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" dependencies = [ "rand", "substring", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -2063,34 +2309,34 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", - "libc 0.2.158", + "libc 0.2.169", "security-framework-sys", ] [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", - "libc 0.2.158", + "libc 0.2.169", ] [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -2108,20 +2354,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -2131,9 +2377,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2152,15 +2398,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -2170,14 +2416,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -2270,11 +2516,11 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ - "libc 0.2.158", + "libc 0.2.169", "windows-sys 0.52.0", ] @@ -2294,12 +2540,31 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + [[package]] name = "stun" version = "0.6.0" @@ -2313,7 +2578,7 @@ dependencies = [ "rand", "ring", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "url", "webrtc-util", @@ -2347,9 +2612,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2358,9 +2623,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -2385,34 +2650,54 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2431,19 +2716,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2456,13 +2751,13 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", - "libc 0.2.158", + "libc 0.2.169", "mio", "parking_lot", "pin-project-lite", @@ -2473,31 +2768,30 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2522,9 +2816,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2535,9 +2829,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -2556,11 +2850,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -2569,14 +2863,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -2596,9 +2890,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-core", @@ -2606,9 +2900,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -2635,7 +2929,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.69", "utf-8", ] @@ -2654,12 +2948,18 @@ dependencies = [ "rand", "ring", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "webrtc-util", ] +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -2667,31 +2967,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "typetag" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "044fc3365ddd307c297fe0fe7b2e70588cdab4d0f62dc52055ca0d11b174cf0e" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] [[package]] -name = "unicode-ident" -version = "1.0.12" +name = "typetag-impl" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "d9d30226ac9cbd2d1ff775f74e8febdab985dab14fb14aa2582c29a92d5555dc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-ident" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -2711,9 +3020,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2726,6 +3035,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2734,11 +3055,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" dependencies = [ - "getrandom", + "getrandom 0.3.1", ] [[package]] @@ -2781,14 +3102,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "serde", "serde_json", "wasm-bindgen-macro", @@ -2796,36 +3127,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2833,33 +3164,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", "minicov", - "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -2867,20 +3199,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -2891,9 +3223,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" dependencies = [ "futures", "js-sys", @@ -2905,9 +3237,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -2915,9 +3257,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.5" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -2950,7 +3292,7 @@ dependencies = [ "sha2", "smol_str", "stun", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "turn", @@ -2975,7 +3317,7 @@ dependencies = [ "bytes", "log", "portable-atomic", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-sctp", "webrtc-util", @@ -3011,7 +3353,7 @@ dependencies = [ "sha1", "sha2", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", "x25519-dalek", @@ -3033,7 +3375,7 @@ dependencies = [ "serde", "serde_json", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "turn", "url", @@ -3051,7 +3393,7 @@ checksum = "c0804694f3b2acfdff48f6df217979b13cb0a00377c63b5effd111daaee7e8c4" dependencies = [ "log", "socket2", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3066,7 +3408,7 @@ dependencies = [ "bytes", "rand", "rtp", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3082,7 +3424,7 @@ dependencies = [ "log", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3105,7 +3447,7 @@ dependencies = [ "rtp", "sha1", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3121,12 +3463,12 @@ dependencies = [ "bytes", "ipnet", "lazy_static", - "libc 0.2.158", + "libc 0.2.169", "log", "nix", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "winapi", ] @@ -3285,13 +3627,34 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x25519-dalek" version = "2.0.1" @@ -3318,7 +3681,7 @@ dependencies = [ "oid-registry", "ring", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -3340,6 +3703,30 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -3358,7 +3745,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", ] [[package]] @@ -3378,5 +3786,27 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] diff --git a/examples/ping-pong/libc/Cargo.toml b/examples/ping-pong/libc/Cargo.toml index a2d15a08..8918fb0f 100644 --- a/examples/ping-pong/libc/Cargo.toml +++ b/examples/ping-pong/libc/Cargo.toml @@ -1,14 +1,14 @@ [package] edition = "2021" name = "libc" -version = "0.8.0" +version = "0.9.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -flarch = {path = "../../../flarch", version = "0.8"} -flmodules = {path = "../../../flmodules", version = "0.8"} -shared = {path = "../shared", version = "0.8"} +flarch = {path = "../../../flarch", version = "0.9"} +flmodules = {path = "../../../flmodules", version = "0.9"} +shared = {path = "../shared", version = "0.9"} clap = {version = "4", features = ["derive"]} log = "0.4" diff --git a/examples/ping-pong/libc/src/main.rs b/examples/ping-pong/libc/src/main.rs index 0ef95cda..4c8b0c40 100644 --- a/examples/ping-pong/libc/src/main.rs +++ b/examples/ping-pong/libc/src/main.rs @@ -1,14 +1,15 @@ use clap::{Parser, ValueEnum}; use flarch::{start_logging_filter, web_rtc::connection::ConnectionConfig}; -use flmodules::nodeconfig::NodeConfig; use flmodules::network::NetworkSetupError; +use flmodules::nodeconfig::NodeConfig; use shared::{ - common::NodeList, + common::{NodeList, PingPongIn, PingPongOut}, event_loop, handler::{self, URL}, }; +use tokio::select; #[derive(Parser, Debug)] struct Args { @@ -30,28 +31,41 @@ async fn main() -> Result<(), NetworkSetupError> { let nc = NodeConfig::new(); let name = nc.info.name.clone(); - let net = flmodules::network::network_broker_start(nc.clone(), ConnectionConfig::from_signal(URL)).await?; + let net = + flmodules::network::network_start(nc.clone(), ConnectionConfig::from_signal(URL)) + .await?; let mut list = NodeList::new(vec![]); let mut pp = match args.code { - Code::Handler => handler::PingPong::new(nc.info.get_id(), net).await?, - Code::EventLoop => event_loop::start(nc.info.get_id(), net).await?, + Code::Handler => handler::PingPong::new(nc.info.get_id(), net.broker).await?, + Code::EventLoop => event_loop::start(nc.info.get_id(), net.broker).await?, }; - let (pp_rx, _) = pp.get_tap_sync().await?; - for msg in pp_rx { - match msg { - shared::common::PPMessage::ToNetwork(to, ppmsg) => { - log::info!("{name}: Sending {ppmsg:?} to {}", list.get_name(&to)) - } - shared::common::PPMessage::FromNetwork(from, ppmsg) => { - log::info!("{name}: Got {ppmsg:?} from {}", list.get_name(&from)) - } - shared::common::PPMessage::List(new_list) => { - if list.update(new_list) { - log::info!("{name}: Got new list: {}", list.names()); + let mut pp_rx = pp.get_tap_in().await?.0; + let mut pp_tx = pp.get_tap_out().await?.0; + loop { + select! { + Some(msg) = pp_rx.recv() => { + match msg{ + PingPongIn::FromNetwork(from, ppmsg) => { + log::info!("{name}: Got {ppmsg:?} from {}", list.get_name(&from)) + } + PingPongIn::List(new_list) => { + if list.update(new_list) { + log::info!("{name}: Got new list: {}", list.names()); + } + } + _ => {} + } + }, + Some(msg) = pp_tx.recv() => { + match msg { + PingPongOut::ToNetwork(to, ppmsg) => { + log::info!("{name}: Sending {ppmsg:?} to {}", list.get_name(&to)) + } + _ => {} } - } - _ => {} + }, + else => break, // Exit when all channels close } } Ok(()) diff --git a/examples/ping-pong/shared/Cargo.lock b/examples/ping-pong/shared/Cargo.lock index b4009f5b..540fad0e 100644 --- a/examples/ping-pong/shared/Cargo.lock +++ b/examples/ping-pong/shared/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -93,36 +93,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -143,7 +144,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -158,7 +159,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -182,7 +183,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -205,14 +206,25 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -221,24 +233,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -249,23 +261,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -315,9 +327,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" dependencies = [ "serde", ] @@ -340,11 +352,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -354,9 +372,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -372,9 +390,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "shlex", ] @@ -397,11 +415,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -424,19 +448,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "const-oid" @@ -462,9 +476,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -509,9 +523,9 @@ dependencies = [ [[package]] name = "ct-codecs" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" [[package]] name = "ctr" @@ -531,6 +545,7 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", + "digest", "fiat-crypto", "rustc_version", "subtle", @@ -545,7 +560,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -569,7 +584,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -580,14 +595,14 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -657,7 +672,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -674,6 +689,17 @@ dependencies = [ "spki", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + [[package]] name = "ed25519-compact" version = "2.1.1" @@ -681,7 +707,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" dependencies = [ "ct-codecs", - "getrandom", + "ed25519", + "getrandom 0.2.15", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "serde", + "sha2", + "subtle", + "zeroize", ] [[package]] @@ -713,9 +755,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -723,9 +765,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "anstream", "anstyle", @@ -740,6 +782,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "ff" version = "0.13.0" @@ -761,20 +813,23 @@ name = "flarch" version = "0.8.0" dependencies = [ "async-trait", + "btparse", + "bytes", "chrono", "env_logger", - "flarch_macro", + "flmacro", "futures", "js-sys", "log", "rand", + "rmp-serde", "serde", "serde-wasm-bindgen", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "wasm-bindgen", @@ -786,42 +841,68 @@ dependencies = [ ] [[package]] -name = "flarch_macro" +name = "flcrypto" +version = "0.8.0" +dependencies = [ + "bytes", + "ed25519-dalek", + "flarch", + "flmacro", + "log", + "rand", + "rmp-serde", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.11", + "typetag", +] + +[[package]] +name = "flmacro" version = "0.8.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "flmodules" version = "0.8.0" dependencies = [ + "async-recursion", "async-stream", "async-trait", "bimap", - "bitflags 2.6.0", + "bitflags 2.8.0", "bytes", "ed25519-compact", + "ed25519-dalek", "flarch", + "flcrypto", + "flmacro", "futures", - "getrandom", + "getrandom 0.2.15", "itertools", "log", "names", + "num-bigint", "rand", "reqwest", + "rmp-serde", "serde", "serde_derive", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "strum_macros", + "thiserror 1.0.69", "tokio", "tokio-stream", "toml", + "typetag", ] [[package]] @@ -841,9 +922,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -856,9 +937,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -866,15 +947,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -883,38 +964,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -948,10 +1029,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "ghash" version = "0.5.1" @@ -964,9 +1057,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "group" @@ -987,15 +1080,15 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" @@ -1023,9 +1116,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1057,9 +1150,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "humantime" @@ -1069,9 +1162,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -1088,9 +1181,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", @@ -1106,9 +1199,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", @@ -1119,16 +1212,15 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1147,6 +1239,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1155,12 +1365,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1176,12 +1397,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -1208,18 +1429,27 @@ dependencies = [ "rand", "rtcp", "rtp", - "thiserror", + "thiserror 1.0.69", "tokio", "waitgroup", "webrtc-srtp", "webrtc-util", ] +[[package]] +name = "inventory" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" +dependencies = [ + "rustversion", +] + [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -1238,16 +1468,17 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1259,9 +1490,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "linked-hash-map" @@ -1269,6 +1500,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -1281,9 +1518,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "md-5" @@ -1318,9 +1555,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -1334,22 +1571,21 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1393,6 +1629,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -1421,9 +1658,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1439,9 +1676,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1451,9 +1688,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "p256" @@ -1469,9 +1706,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -1502,6 +1739,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pem" version = "3.0.4" @@ -1527,31 +1770,11 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1583,9 +1806,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -1613,18 +1836,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quinn" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", @@ -1633,46 +1856,50 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror", + "thiserror 2.0.11", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom 0.2.15", "rand", "ring", "rustc-hash", "rustls", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.11", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1704,14 +1931,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem", "ring", @@ -1723,18 +1950,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1744,9 +1971,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1755,15 +1982,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", @@ -1793,6 +2020,7 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", + "tower", "tower-service", "url", "wasm-bindgen", @@ -1821,13 +2049,35 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "rtcp" version = "0.11.0" @@ -1835,7 +2085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc9f775ff89c5fe7f0cc0abafb7c57688ae25ce688f1a52dd88e277616c76ab2" dependencies = [ "bytes", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -1849,7 +2099,7 @@ dependencies = [ "portable-atomic", "rand", "serde", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -1861,9 +2111,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -1885,9 +2135,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -1912,36 +2162,44 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" -version = "0.102.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -1954,19 +2212,13 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -1981,7 +2233,7 @@ checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" dependencies = [ "rand", "substring", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -2005,7 +2257,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -2014,9 +2266,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2024,15 +2276,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -2050,20 +2302,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -2073,9 +2325,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2094,15 +2346,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -2112,14 +2364,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -2212,9 +2464,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2236,12 +2488,31 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + [[package]] name = "stun" version = "0.6.0" @@ -2255,7 +2526,7 @@ dependencies = [ "rand", "ring", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "url", "webrtc-util", @@ -2289,9 +2560,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2300,9 +2571,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -2327,34 +2598,54 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ - "thiserror-impl", + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2373,19 +2664,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2398,9 +2699,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -2415,31 +2716,30 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2464,9 +2764,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2477,9 +2777,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -2498,11 +2798,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -2511,14 +2811,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -2538,9 +2838,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-core", @@ -2548,9 +2848,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -2577,7 +2877,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.69", "utf-8", ] @@ -2596,12 +2896,18 @@ dependencies = [ "rand", "ring", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "webrtc-util", ] +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -2609,31 +2915,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "typetag" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "044fc3365ddd307c297fe0fe7b2e70588cdab4d0f62dc52055ca0d11b174cf0e" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] [[package]] -name = "unicode-ident" -version = "1.0.12" +name = "typetag-impl" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "d9d30226ac9cbd2d1ff775f74e8febdab985dab14fb14aa2582c29a92d5555dc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-ident" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -2653,9 +2968,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2668,6 +2983,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2676,11 +3003,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" dependencies = [ - "getrandom", + "getrandom 0.3.1", ] [[package]] @@ -2723,14 +3050,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "serde", "serde_json", "wasm-bindgen-macro", @@ -2738,36 +3075,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2775,33 +3112,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", "minicov", - "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -2809,20 +3147,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -2833,9 +3171,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" dependencies = [ "futures", "js-sys", @@ -2847,9 +3185,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -2857,9 +3205,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.5" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -2892,7 +3240,7 @@ dependencies = [ "sha2", "smol_str", "stun", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "turn", @@ -2917,7 +3265,7 @@ dependencies = [ "bytes", "log", "portable-atomic", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-sctp", "webrtc-util", @@ -2953,7 +3301,7 @@ dependencies = [ "sha1", "sha2", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", "x25519-dalek", @@ -2975,7 +3323,7 @@ dependencies = [ "serde", "serde_json", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "turn", "url", @@ -2993,7 +3341,7 @@ checksum = "c0804694f3b2acfdff48f6df217979b13cb0a00377c63b5effd111daaee7e8c4" dependencies = [ "log", "socket2", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3008,7 +3356,7 @@ dependencies = [ "bytes", "rand", "rtp", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3024,7 +3372,7 @@ dependencies = [ "log", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3047,7 +3395,7 @@ dependencies = [ "rtp", "sha1", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3068,7 +3416,7 @@ dependencies = [ "nix", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "winapi", ] @@ -3227,13 +3575,34 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x25519-dalek" version = "2.0.1" @@ -3260,7 +3629,7 @@ dependencies = [ "oid-registry", "ring", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -3282,6 +3651,30 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -3300,7 +3693,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", ] [[package]] @@ -3320,5 +3734,27 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] diff --git a/examples/ping-pong/shared/Cargo.toml b/examples/ping-pong/shared/Cargo.toml index b5ca3af7..fea0e7da 100644 --- a/examples/ping-pong/shared/Cargo.toml +++ b/examples/ping-pong/shared/Cargo.toml @@ -1,11 +1,11 @@ [package] edition = "2021" name = "shared" -version = "0.8.0" +version = "0.9.0" [dependencies] -flmodules = {path = "../../../flmodules", version = "0.8"} -flarch = {path = "../../../flarch", version = "0.8"} +flmodules = {path = "../../../flmodules", version = "0.9"} +flarch = {path = "../../../flarch", version = "0.9"} async-trait = "0.1" log = "0.4" @@ -15,5 +15,5 @@ tokio = "1" tokio-stream = "0.1" [dev-dependencies] -flmodules = {path = "../../../flmodules", version = "0.8", features = ["testing"]} +flmodules = {path = "../../../flmodules", version = "0.9", features = ["testing"]} tokio = {version = "1", features = ["rt-multi-thread"]} diff --git a/examples/ping-pong/shared/src/common.rs b/examples/ping-pong/shared/src/common.rs index 8048bbe6..a2bd15cc 100644 --- a/examples/ping-pong/shared/src/common.rs +++ b/examples/ping-pong/shared/src/common.rs @@ -3,15 +3,8 @@ use serde::{Deserialize, Serialize}; use flarch::nodeids::NodeID; use flmodules::nodeconfig::NodeInfo; -/// A PPMessage includes messages from the network, messages to be sent to -/// the network, and receiving an updated list from the signalling server. #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] -pub enum PPMessage { - /// Contains the destination-id and the message to be sent. The - /// user only has to send the 'ping', the PingPong implementation - /// automatically sends a 'pong' reply and requests for an updated - /// list of nodes. - ToNetwork(NodeID, PPMessageNode), +pub enum PingPongIn { /// Contains source-id of the message as well as the message itself. /// The user does not have to reply to incoming ping messages. FromNetwork(NodeID, PPMessageNode), @@ -21,6 +14,17 @@ pub enum PPMessage { Tick, } +#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] +pub enum PingPongOut { + /// Contains the destination-id and the message to be sent. The + /// user only has to send the 'ping', the PingPong implementation + /// automatically sends a 'pong' reply and requests for an updated + /// list of nodes. + ToNetwork(NodeID, PPMessageNode), + /// Request an updated list of nodes + WSUpdateListRequest, +} + /// Every contact is started with a ping and replied with a pong. #[derive(Clone, Debug, Serialize, Deserialize, PartialEq)] pub enum PPMessageNode { diff --git a/examples/ping-pong/shared/src/event_loop.rs b/examples/ping-pong/shared/src/event_loop.rs index 8ae1ea6f..aff6445a 100644 --- a/examples/ping-pong/shared/src/event_loop.rs +++ b/examples/ping-pong/shared/src/event_loop.rs @@ -3,14 +3,14 @@ use tokio::select; use tokio_stream::StreamExt; use flarch::{ - broker::{Broker, BrokerError}, + broker::{BrokerError, Broker}, nodeids::NodeID, tasks::{spawn_local, Interval}, }; +use flmodules::network::broker::{BrokerNetwork, NetworkIn, NetworkOut}; use flmodules::nodeconfig::NodeInfo; -use flmodules::network::messages::{NetworkIn, NetworkOut, NetworkMessage}; -use crate::common::{PPMessage, PPMessageNode}; +use crate::common::{PPMessageNode, PingPongIn, PingPongOut}; /// This is a more straightforward use of the network-broker. It loops over incoming /// messages and then sends out new messages by sending it over the network-broker. @@ -18,8 +18,8 @@ use crate::common::{PPMessage, PPMessageNode}; /// as a simple channel. pub async fn start( id: NodeID, - net: Broker, -) -> Result, BrokerError> { + net: BrokerNetwork, +) -> Result, BrokerError> { let ret = Broker::new(); let ret_clone = ret.clone(); @@ -36,10 +36,10 @@ pub async fn start( /// once a second. async fn event_loop( id: NodeID, - mut net: Broker, - mut ret: Broker, + mut net: BrokerNetwork, + mut ret: Broker, ) -> Result<(), BrokerError> { - let (mut tap, _) = net.get_tap().await?; + let (mut tap, _) = net.get_tap_out().await?; let mut nodes: Vec = vec![]; let mut interval_sec = Interval::new_interval(Duration::from_secs(1)); @@ -56,16 +56,16 @@ async fn event_loop( /// Requests a new list and sends a ping to all other nodes. fn update_list( id: NodeID, - net: &mut Broker, + net: &mut BrokerNetwork, nodes: &Vec, ) -> Result<(), BrokerError> { - net.emit_msg(NetworkMessage::Input(NetworkIn::WSUpdateListRequest))?; + net.emit_msg_in(NetworkIn::WSUpdateListRequest)?; for node in nodes.iter() { if node.get_id() != id { - net.emit_msg(NetworkMessage::Input(NetworkIn::MessageToNode( + net.emit_msg_in(NetworkIn::MessageToNode( node.get_id(), serde_json::to_string(&PPMessageNode::Ping).unwrap(), - )))?; + ))?; } } @@ -73,25 +73,25 @@ fn update_list( } fn new_msg( - net: &mut Broker, - ret: &mut Broker, - msg: Option, + net: &mut BrokerNetwork, + ret: &mut Broker, + msg: Option, ) -> Result>, BrokerError> { - if let Some(NetworkMessage::Output(msg_tap)) = msg { + if let Some(msg_tap) = msg { match msg_tap { NetworkOut::MessageFromNode(from, msg_net) => { if let Ok(msg) = serde_json::from_str::(&msg_net) { - ret.emit_msg(PPMessage::FromNetwork(from, msg.clone()))?; + ret.emit_msg_in(PingPongIn::FromNetwork(from, msg.clone()))?; if msg == PPMessageNode::Ping { - net.emit_msg(NetworkMessage::Input(NetworkIn::MessageToNode( + net.emit_msg_in(NetworkIn::MessageToNode( from, serde_json::to_string(&PPMessageNode::Pong).unwrap(), - )))?; + ))?; } } } NetworkOut::NodeListFromWS(list) => { - ret.emit_msg(PPMessage::List(list.clone()))?; + ret.emit_msg_in(PingPongIn::List(list.clone()))?; return Ok(Some(list)); } _ => {} diff --git a/examples/ping-pong/shared/src/handler.rs b/examples/ping-pong/shared/src/handler.rs index 437db712..2b755f40 100644 --- a/examples/ping-pong/shared/src/handler.rs +++ b/examples/ping-pong/shared/src/handler.rs @@ -1,14 +1,15 @@ use flarch::{ - broker::{Broker, BrokerError, Subsystem, SubsystemHandler}, - nodeids::{NodeID, U256}, platform_async_trait, + broker::{Broker, BrokerError, SubsystemHandler}, + nodeids::{NodeID, U256}, + platform_async_trait, }; use flmodules::{ + network::broker::{BrokerNetwork, NetworkIn, NetworkOut}, nodeconfig::NodeInfo, - timer::{TimerBroker, TimerMessage}, + timer::Timer, }; -use flmodules::network::messages::{NetworkIn, NetworkMessage, NetworkOut}; -use crate::common::{PPMessage, PPMessageNode}; +use crate::common::{PPMessageNode, PingPongIn, PingPongOut}; /// This only runs on localhost. pub const URL: &str = "ws://localhost:8765"; @@ -20,7 +21,6 @@ pub const URL: &str = "ws://localhost:8765"; /// wasm library. pub struct PingPong { id: U256, - net: Broker, nodes: Vec, } @@ -30,30 +30,35 @@ impl PingPong { /// processed to interpret ping's and pong's. pub async fn new( id: U256, - mut net: Broker, - ) -> Result, BrokerError> { + net: BrokerNetwork, + ) -> Result, BrokerError> { let mut pp_broker = Broker::new(); // Interpret network messages and wrap relevant messages to ourselves. - net.forward(pp_broker.clone(), Box::new(Self::net_to_pp)) - .await; + pp_broker + .add_translator_link( + net.clone(), + Box::new(|msg| { + Some(match msg { + PingPongOut::ToNetwork(dst, pp_msg) => { + NetworkIn::MessageToNode(dst, serde_json::to_string(&pp_msg).unwrap()) + } + PingPongOut::WSUpdateListRequest => NetworkIn::WSUpdateListRequest, + }) + }), + Box::new(Self::net_to_pp), + ) + .await?; // Forward "second" ticks, but ignore minute ticks - TimerBroker::start() + Timer::start() .await? - .forward( - pp_broker.clone(), - Box::new(|msg| (msg == TimerMessage::Second).then(|| PPMessage::Tick)), - ) - .await; + .tick_second(pp_broker.clone(), PingPongIn::Tick) + .await?; // Add ourselves as a handler to the broker. // Because of rust's ownership protection, this means that this structure is not available // anymore to the caller. // So the only way to interact with this structure is by sending messages to the broker. pp_broker - .add_subsystem(Subsystem::Handler(Box::new(Self { - id, - net, - nodes: vec![], - }))) + .add_handler(Box::new(Self { id, nodes: vec![] })) .await .map(|_| ())?; Ok(pp_broker) @@ -64,39 +69,17 @@ impl PingPong { // For MessageFromNode, the enclosed message is interpreted as a PPMessageNode and sent to this // broker. // All other messages coming from Network are ignored. - fn net_to_pp(msg: NetworkMessage) -> Option { - if let NetworkMessage::Output(rep) = msg { - match rep { - NetworkOut::MessageFromNode(from, node_msg) => { - serde_json::from_str::(&node_msg) - .ok() - .map(|ppm| PPMessage::FromNetwork(from, ppm)) - } - NetworkOut::NodeListFromWS(nodes) => Some(PPMessage::List(nodes)), - _ => None, + fn net_to_pp(msg: NetworkOut) -> Option { + match msg { + NetworkOut::MessageFromNode(from, node_msg) => { + serde_json::from_str::(&node_msg) + .ok() + .map(|ppm| PingPongIn::FromNetwork(from, ppm)) } - } else { - None + NetworkOut::NodeListFromWS(nodes) => Some(PingPongIn::List(nodes)), + _ => None, } } - - // Sends a generic NetworkIn type message to the network-broker. - async fn send_net(&mut self, msg: NetworkIn) { - self.net - .emit_msg(NetworkMessage::Input(msg.clone())) - .err() - .map(|e| log::error!("While sending {:?} to net: {:?}", msg, e)); - } - - // Wraps a PPMessageNode into a json and sends it over the network to the - // dst address. - async fn send_net_ppm(&mut self, dst: U256, msg: &PPMessageNode) { - self.send_net(NetworkIn::MessageToNode( - dst, - serde_json::to_string(msg).unwrap(), - )) - .await; - } } // Process messages sent to the PPMessage broker: @@ -104,21 +87,19 @@ impl PingPong { // For PPMessageNode::Ping messages, a pong is replied, and an update list request is sent to // the signalling server. #[platform_async_trait()] -impl SubsystemHandler for PingPong { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for PingPong { + async fn messages(&mut self, msgs: Vec) -> Vec { + let mut out = vec![]; for msg in msgs { log::trace!("{}: got message {:?}", self.id, msg); match msg { - PPMessage::ToNetwork(from, ppm) => { - self.send_net_ppm(from, &ppm).await; - } - PPMessage::FromNetwork(from, PPMessageNode::Ping) => { - self.send_net_ppm(from, &PPMessageNode::Pong).await; - self.send_net(NetworkIn::WSUpdateListRequest).await; + PingPongIn::FromNetwork(from, PPMessageNode::Ping) => { + out.push(PingPongOut::ToNetwork(from, PPMessageNode::Pong)); + out.push(PingPongOut::WSUpdateListRequest); } - PPMessage::List(list) => self.nodes = list, - PPMessage::Tick => { + PingPongIn::List(list) => self.nodes = list, + PingPongIn::Tick => { let nodes = self .nodes .iter() @@ -126,15 +107,14 @@ impl SubsystemHandler for PingPong { .filter(|n| *n != self.id) .collect::>(); for node in nodes { - self.send_net_ppm(node, &PPMessageNode::Ping).await; + out.push(PingPongOut::ToNetwork(node, PPMessageNode::Ping)); } } _ => {} } } - // All messages are sent directly to the network broker. - vec![] + out } } @@ -143,8 +123,9 @@ mod test { use std::time::Duration; use flarch::{broker::Destination, start_logging}; + use flmodules::network::{broker::NetworkOut, NetworkSetupError}; use flmodules::nodeconfig::NodeConfig; - use flmodules::network::{messages::NetworkOut, NetworkSetupError}; + use flmodules::testing::network_simul::{NetworkSimul, RouterNode}; use super::*; @@ -162,17 +143,17 @@ mod test { let nc_src = NodeConfig::new(); let mut net = Broker::new(); - let (net_tap, _) = net.get_tap_sync().await?; + let (net_tap, _) = net.get_tap_in_sync().await?; let mut pp = PingPong::new(nc_src.info.get_id(), net.clone()).await?; - let (pp_tap, _) = pp.get_tap_sync().await?; + let (pp_tap, _) = pp.get_tap_in_sync().await?; let nc_dst = NodeConfig::new(); let dst_id = nc_dst.info.get_id(); // Send a Ping message from src to dst - pp.emit_msg_dest( + pp.emit_msg_out_dest( Destination::NoTap, - PPMessage::ToNetwork(dst_id.clone(), PPMessageNode::Ping), + PingPongOut::ToNetwork(dst_id.clone(), PPMessageNode::Ping), )?; assert_eq!( node_msg(&dst_id, &PPMessageNode::Ping), @@ -183,37 +164,30 @@ mod test { pp_tap.recv().unwrap(); // Receive a ping message through the network - net.emit_msg_dest( + net.emit_msg_out_dest( Destination::NoTap, - NetworkMessage::Output(NetworkOut::MessageFromNode( + NetworkOut::MessageFromNode( dst_id.clone(), serde_json::to_string(&PPMessageNode::Ping).unwrap(), - )), + ), )?; assert_eq!( - PPMessage::FromNetwork(dst_id.clone(), PPMessageNode::Ping), + PingPongIn::FromNetwork(dst_id.clone(), PPMessageNode::Ping), pp_tap.recv().unwrap() ); assert_eq!( node_msg(&dst_id, &PPMessageNode::Pong), net_tap.recv().unwrap() ); - assert_eq!( - NetworkMessage::Input(NetworkIn::WSUpdateListRequest), - net_tap.recv().unwrap() - ); + assert_eq!(NetworkIn::WSUpdateListRequest, net_tap.recv().unwrap()); Ok(()) } - fn node_msg(dst: &U256, msg: &PPMessageNode) -> NetworkMessage { - NetworkMessage::Input(NetworkIn::MessageToNode( - dst.clone(), - serde_json::to_string(msg).unwrap(), - )) + fn node_msg(dst: &U256, msg: &PPMessageNode) -> NetworkIn { + NetworkIn::MessageToNode(dst.clone(), serde_json::to_string(msg).unwrap()) } - use flmodules::network::testing::NetworkBrokerSimul; use tokio::time::sleep; // Test a simulation of two nodes with the NetworkBrokerSimul @@ -222,16 +196,24 @@ mod test { async fn test_network() -> Result<(), NetworkSetupError> { start_logging(); - let mut simul = NetworkBrokerSimul::new().await?; + let mut simul = NetworkSimul::new().await?; - let (nc1, net1) = simul.new_node().await?; + let RouterNode { + config: nc1, + net: net1, + .. + } = simul.new_node().await?; let mut pp1 = PingPong::new(nc1.info.get_id(), net1).await?; - let (pp1_tap, _) = pp1.get_tap_sync().await?; + let (pp1_tap, _) = pp1.get_tap_out_sync().await?; log::info!("PingPong1 is: {}", nc1.info.get_id()); - let (nc2, net2) = simul.new_node().await?; + let RouterNode { + config: nc2, + net: net2, + .. + } = simul.new_node().await?; let mut pp2 = PingPong::new(nc2.info.get_id(), net2).await?; - let (pp2_tap, _) = pp2.get_tap_sync().await?; + let (pp2_tap, _) = pp2.get_tap_out_sync().await?; log::info!("PingPong2 is: {}", nc2.info.get_id()); for _ in 0..3 { @@ -244,8 +226,14 @@ mod test { sleep(Duration::from_millis(1000)).await; - pp1.emit_msg(PPMessage::ToNetwork(nc2.info.get_id(), PPMessageNode::Ping))?; - pp2.emit_msg(PPMessage::ToNetwork(nc1.info.get_id(), PPMessageNode::Ping))?; + pp1.emit_msg_out(PingPongOut::ToNetwork( + nc2.info.get_id(), + PPMessageNode::Ping, + ))?; + pp2.emit_msg_out(PingPongOut::ToNetwork( + nc1.info.get_id(), + PPMessageNode::Ping, + ))?; } Ok(()) diff --git a/examples/ping-pong/wasm/Cargo.lock b/examples/ping-pong/wasm/Cargo.lock index 9c0769f7..2a095f85 100644 --- a/examples/ping-pong/wasm/Cargo.lock +++ b/examples/ping-pong/wasm/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -93,36 +93,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -149,7 +150,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -164,7 +165,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -188,7 +189,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -211,14 +212,25 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -227,24 +239,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -255,23 +267,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -321,9 +333,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" dependencies = [ "serde", ] @@ -352,11 +364,17 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfa8873f51c92e232f9bac4065cddef41b714152812bfc5f7672ba16d6ef8cd9" +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -366,9 +384,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -384,9 +402,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "shlex", ] @@ -415,11 +433,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -442,9 +466,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "console_error_panic_hook" @@ -480,9 +504,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -527,9 +551,9 @@ dependencies = [ [[package]] name = "ct-codecs" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" [[package]] name = "ctr" @@ -549,6 +573,7 @@ dependencies = [ "cfg-if 1.0.0", "cpufeatures", "curve25519-dalek-derive", + "digest", "fiat-crypto", "rustc_version", "subtle", @@ -563,7 +588,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -587,7 +612,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -598,14 +623,14 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -657,13 +682,13 @@ dependencies = [ [[package]] name = "derive_more" -version = "0.99.18" +version = "0.99.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +checksum = "3da29a38df43d6f156149c9b43ded5e018ddff2a855cf2cfd62e8cd7d079c69f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -686,7 +711,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -703,6 +728,17 @@ dependencies = [ "spki", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + [[package]] name = "ed25519-compact" version = "2.1.1" @@ -710,7 +746,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" dependencies = [ "ct-codecs", - "getrandom", + "ed25519", + "getrandom 0.2.15", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "serde", + "sha2", + "subtle", + "zeroize", ] [[package]] @@ -742,9 +794,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -752,9 +804,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "anstream", "anstyle", @@ -769,6 +821,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "ff" version = "0.13.0" @@ -787,23 +849,26 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "flarch" -version = "0.8.0" +version = "0.9.0" dependencies = [ "async-trait", + "btparse", + "bytes", "chrono", "env_logger", - "flarch_macro", + "flmacro", "futures", "js-sys", "log", "rand", + "rmp-serde", "serde", "serde-wasm-bindgen 0.6.5", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "wasm-bindgen", @@ -815,42 +880,69 @@ dependencies = [ ] [[package]] -name = "flarch_macro" -version = "0.8.0" +name = "flcrypto" +version = "0.9.0" +dependencies = [ + "bytes", + "ed25519-dalek", + "flarch", + "flmacro", + "log", + "rand", + "rmp-serde", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.11", + "typetag", +] + +[[package]] +name = "flmacro" +version = "0.9.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "flmodules" -version = "0.8.0" +version = "0.9.0" dependencies = [ + "async-recursion", "async-stream", "async-trait", "bimap", - "bitflags 2.6.0", + "bitflags 2.8.0", + "btparse", "bytes", "ed25519-compact", + "ed25519-dalek", "flarch", + "flcrypto", + "flmacro", "futures", - "getrandom", + "getrandom 0.2.15", "itertools", "log", "names", + "num-bigint", "rand", "reqwest", + "rmp-serde", "serde", "serde_derive", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "strum_macros", + "thiserror 1.0.69", "tokio", "tokio-stream", "toml", + "typetag", ] [[package]] @@ -870,9 +962,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -885,9 +977,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -895,15 +987,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -912,38 +1004,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -977,10 +1069,22 @@ dependencies = [ "cfg-if 1.0.0", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "ghash" version = "0.5.1" @@ -993,9 +1097,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "gloo" @@ -1073,7 +1177,7 @@ dependencies = [ "serde", "serde-wasm-bindgen 0.5.0", "serde_urlencoded", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", ] @@ -1093,7 +1197,7 @@ dependencies = [ "pin-project", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1119,7 +1223,7 @@ dependencies = [ "js-sys", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "wasm-bindgen", "web-sys", ] @@ -1202,9 +1306,15 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -1249,9 +1359,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1265,7 +1375,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -1276,16 +1386,16 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "pin-project-lite", ] [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "humantime" @@ -1295,14 +1405,14 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "httparse", "itoa", @@ -1314,12 +1424,12 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.1.0", + "http 1.2.0", "hyper", "hyper-util", "rustls", @@ -1332,29 +1442,28 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "hyper", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1373,6 +1482,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1381,12 +1608,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1411,12 +1649,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -1443,18 +1681,27 @@ dependencies = [ "rand", "rtcp", "rtp", - "thiserror", + "thiserror 1.0.69", "tokio", "waitgroup", "webrtc-srtp", "webrtc-util", ] +[[package]] +name = "inventory" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" +dependencies = [ + "rustversion", +] + [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -1473,16 +1720,17 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1494,9 +1742,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "linked-hash-map" @@ -1504,6 +1752,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -1516,9 +1770,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "md-5" @@ -1559,9 +1813,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -1575,22 +1829,21 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1634,6 +1887,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -1672,9 +1926,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1690,9 +1944,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1702,9 +1956,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "p256" @@ -1720,9 +1974,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -1753,6 +2007,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pem" version = "3.0.4" @@ -1780,29 +2040,29 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +checksum = "dfe2e71e1471fe07709406bf725f710b02927c9c54b2b5b2ec0e8087d97c327d" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.5" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1812,7 +2072,7 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "ping-pong-web" -version = "0.8.0" +version = "0.9.0" dependencies = [ "console_error_panic_hook", "flarch", @@ -1837,7 +2097,7 @@ checksum = "a829027bd95e54cfe13e3e258a1ae7b645960553fb82b75ff852c29688ee595b" dependencies = [ "futures", "rustversion", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -1864,9 +2124,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -1928,9 +2188,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -1954,9 +2214,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", @@ -1965,46 +2225,50 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror", + "thiserror 2.0.11", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom 0.2.15", "rand", "ring", "rustc-hash", "rustls", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.11", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -2036,14 +2300,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem", "ring", @@ -2055,18 +2319,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -2076,9 +2340,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -2087,21 +2351,21 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", "futures-core", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body", "http-body-util", "hyper", @@ -2125,6 +2389,7 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", + "tower", "tower-service", "url", "wasm-bindgen", @@ -2153,13 +2418,35 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if 1.0.0", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "route-recognizer" version = "0.3.1" @@ -2173,7 +2460,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc9f775ff89c5fe7f0cc0abafb7c57688ae25ce688f1a52dd88e277616c76ab2" dependencies = [ "bytes", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -2187,7 +2474,7 @@ dependencies = [ "portable-atomic", "rand", "serde", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -2199,9 +2486,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -2223,9 +2510,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -2250,25 +2537,27 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" -version = "0.102.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -2277,15 +2566,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.17" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -2298,19 +2587,13 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2325,7 +2608,7 @@ checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" dependencies = [ "rand", "substring", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -2349,7 +2632,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -2358,9 +2641,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2368,15 +2651,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -2405,20 +2688,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -2428,9 +2711,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2449,15 +2732,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -2467,14 +2750,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -2513,7 +2796,7 @@ dependencies = [ [[package]] name = "shared" -version = "0.8.0" +version = "0.9.0" dependencies = [ "async-trait", "flarch", @@ -2567,9 +2850,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2591,12 +2874,31 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + [[package]] name = "stun" version = "0.6.0" @@ -2610,7 +2912,7 @@ dependencies = [ "rand", "ring", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "url", "webrtc-util", @@ -2644,9 +2946,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2655,9 +2957,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -2682,34 +2984,54 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" +dependencies = [ + "thiserror-impl 2.0.11", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2728,19 +3050,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2753,9 +3085,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -2770,31 +3102,30 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2819,9 +3150,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2832,9 +3163,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -2853,11 +3184,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -2866,14 +3197,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -2893,9 +3224,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -2904,20 +3235,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -2937,14 +3268,14 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.1.0", + "http 1.2.0", "httparse", "log", "rand", "rustls", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.69", "utf-8", ] @@ -2963,12 +3294,18 @@ dependencies = [ "rand", "ring", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "webrtc-util", ] +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -2976,31 +3313,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "typetag" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "044fc3365ddd307c297fe0fe7b2e70588cdab4d0f62dc52055ca0d11b174cf0e" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] [[package]] -name = "unicode-ident" -version = "1.0.12" +name = "typetag-impl" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "d9d30226ac9cbd2d1ff775f74e8febdab985dab14fb14aa2582c29a92d5555dc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-ident" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -3020,9 +3366,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -3035,6 +3381,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -3043,11 +3401,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" dependencies = [ - "getrandom", + "getrandom 0.3.1", ] [[package]] @@ -3090,14 +3448,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if 1.0.0", "once_cell", + "rustversion", "serde", "serde_json", "wasm-bindgen-macro", @@ -3105,36 +3473,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if 1.0.0", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3142,33 +3510,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", "minicov", - "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -3176,13 +3545,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -3198,9 +3567,9 @@ dependencies = [ [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -3211,9 +3580,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" dependencies = [ "futures", "js-sys", @@ -3225,9 +3594,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -3235,9 +3614,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.5" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -3270,7 +3649,7 @@ dependencies = [ "sha2", "smol_str", "stun", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "turn", @@ -3295,7 +3674,7 @@ dependencies = [ "bytes", "log", "portable-atomic", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-sctp", "webrtc-util", @@ -3331,7 +3710,7 @@ dependencies = [ "sha1", "sha2", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", "x25519-dalek", @@ -3353,7 +3732,7 @@ dependencies = [ "serde", "serde_json", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "turn", "url", @@ -3371,7 +3750,7 @@ checksum = "c0804694f3b2acfdff48f6df217979b13cb0a00377c63b5effd111daaee7e8c4" dependencies = [ "log", "socket2", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3386,7 +3765,7 @@ dependencies = [ "bytes", "rand", "rtp", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3402,7 +3781,7 @@ dependencies = [ "log", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3425,7 +3804,7 @@ dependencies = [ "rtp", "sha1", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3446,7 +3825,7 @@ dependencies = [ "nix", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "winapi", ] @@ -3617,13 +3996,34 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x25519-dalek" version = "2.0.1" @@ -3650,7 +4050,7 @@ dependencies = [ "oid-registry", "ring", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -3703,7 +4103,7 @@ dependencies = [ "rustversion", "serde", "slab", - "thiserror", + "thiserror 1.0.69", "tokio", "tracing", "wasm-bindgen", @@ -3766,6 +4166,30 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -3784,7 +4208,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", ] [[package]] @@ -3804,5 +4249,27 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] diff --git a/examples/ping-pong/wasm/Cargo.toml b/examples/ping-pong/wasm/Cargo.toml index 0e20fd4c..e4a5088a 100644 --- a/examples/ping-pong/wasm/Cargo.toml +++ b/examples/ping-pong/wasm/Cargo.toml @@ -1,18 +1,18 @@ [package] name = "ping-pong-web" -version = "0.8.0" +version = "0.9.0" authors = ["Anthony Dodd "] edition = "2021" [dependencies] -shared = {path = "../shared", version = "0.8"} -flmodules = {path = "../../../flmodules", version = "0.8"} -flarch = {path = "../../../flarch", version = "0.8"} +shared = { path = "../shared", version = "0.9" } +flmodules = { path = "../../../flmodules", version = "0.9" } +flarch = { path = "../../../flarch", features = ["node"], version = "0.9" } console_error_panic_hook = "0.1.6" log = "0.4" wasm-logger = "0.2" -tokio = {version = "1", features = ["time"]} +tokio = { version = "1", features = ["time"] } wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" js-sys = "0.3" diff --git a/examples/ping-pong/wasm/src/main.rs b/examples/ping-pong/wasm/src/main.rs index 388c52f0..bc4a4273 100644 --- a/examples/ping-pong/wasm/src/main.rs +++ b/examples/ping-pong/wasm/src/main.rs @@ -5,13 +5,14 @@ static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; use console_error_panic_hook::set_once as set_panic_hook; use flmodules::nodeconfig::NodeConfig; +use tokio::select; use ybc::TileCtx::{Ancestor, Child, Parent}; use yew::prelude::*; use flarch::{broker::Broker, tasks::now, web_rtc::connection::ConnectionConfig}; use shared::{ - common::{NodeList, PPMessage}, + common::{NodeList, PingPongIn, PingPongOut}, handler::PingPong, }; @@ -23,7 +24,7 @@ struct App { enum AppMessage { Init, - NewPingPong(Broker), + NewPingPong(Broker), NewMessage(String), } @@ -49,12 +50,13 @@ impl Component for App { let pp_imp = self.pp_imp; wasm_bindgen_futures::spawn_local(async move { let id = config.info.get_id(); - let net = flmodules::network::network_broker_start( + let net = flmodules::network::network_start( config, ConnectionConfig::from_signal(shared::handler::URL), ) .await - .expect("Couldn't start network"); + .expect("Couldn't start network") + .broker; let pp = match pp_imp { true => PingPong::new(id, net) @@ -73,31 +75,39 @@ impl Component for App { let link = s.link().clone(); wasm_bindgen_futures::spawn_local(async move { let mut list = NodeList::new(vec![]); - let (mut tap, _) = pp.get_tap().await.expect("Couldn't get tap"); - loop { - match tap.recv().await.expect("Tap has been closed") { - PPMessage::FromNetwork(id, ppmsg) => { - link.send_message(AppMessage::NewMessage(format!( - "Received {ppmsg:?} from {}", - list.get_name(&id) - ))); - } - PPMessage::ToNetwork(id, ppmsg) => { - link.send_message(AppMessage::NewMessage(format!( - "Sending {ppmsg:?} to {}", - list.get_name(&id) - ))); + let mut tap_in = pp.get_tap_in().await.expect("Couldn't get tap").0; + let mut tap_out = pp.get_tap_out().await.expect("Couldn't get tap").0; + select! { + Some(msg) = tap_in.recv() => { + match msg{ + PingPongIn::FromNetwork(from, ppmsg) => { + link.send_message(AppMessage::NewMessage(format!( + "Received {ppmsg:?} from {}", + list.get_name(&from) + ))); + } + PingPongIn::List(new_list) => { + if list.update(new_list) { + link.send_message(AppMessage::NewMessage(format!( + "list: {}", + list.names() + ))); + } + } + _ => {} } - PPMessage::List(new_list) => { - if list.update(new_list) { + }, + Some(msg) = tap_out.recv() => { + match msg { + PingPongOut::ToNetwork(to, ppmsg) => { link.send_message(AppMessage::NewMessage(format!( - "list: {}", - list.names() + "Sending {ppmsg:?} to {}", + list.get_name(&to) ))); } + _ => {} } - _ => {} - } + }, } }) } diff --git a/examples/ping/Cargo.lock b/examples/ping/Cargo.lock index 4d019c66..d024a8d3 100644 --- a/examples/ping/Cargo.lock +++ b/examples/ping/Cargo.lock @@ -546,9 +546,9 @@ dependencies = [ [[package]] name = "ct-codecs" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3b7eb4404b8195a9abb6356f4ac07d8ba267045c8d6d220ac4dc992e6cc75df" +checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" [[package]] name = "ctr" @@ -800,7 +800,7 @@ dependencies = [ "async-trait", "chrono", "env_logger", - "flarch_macro", + "flmacro", "futures", "js-sys", "log", @@ -823,7 +823,7 @@ dependencies = [ ] [[package]] -name = "flarch_macro" +name = "flmacro" version = "0.8.0" dependencies = [ "proc-macro2", @@ -847,6 +847,7 @@ dependencies = [ "itertools", "log", "names", + "num-bigint", "rand", "reqwest", "serde", @@ -855,6 +856,7 @@ dependencies = [ "serde_with", "serde_yaml", "sha2", + "strum_macros", "thiserror", "tokio", "tokio-stream", @@ -1149,9 +1151,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -1426,6 +1428,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -1982,6 +1985,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + [[package]] name = "ryu" version = "1.0.18" @@ -2258,6 +2267,19 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.72", +] + [[package]] name = "stun" version = "0.6.0" @@ -2514,9 +2536,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "3b072cee73c449a636ffd6f32bd8de3a9f7119139aff882f44943ce2986dc5cf" dependencies = [ "indexmap 2.4.0", "serde", @@ -2861,9 +2883,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.5" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ "rustls-pki-types", ] diff --git a/examples/ping/Cargo.toml b/examples/ping/Cargo.toml index a6212f69..a33db9cd 100644 --- a/examples/ping/Cargo.toml +++ b/examples/ping/Cargo.toml @@ -6,8 +6,8 @@ version = "0.1.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -flarch = {path = "../../flarch", version = "0.8"} -flmodules = {path = "../../flmodules", version = "0.8"} +flarch = {path = "../../flarch", version = "0.9"} +flmodules = {path = "../../flmodules", version = "0.9"} clap = {version = "4", features = ["derive"]} log = "0.4" diff --git a/examples/ping/src/main.rs b/examples/ping/src/main.rs index 6c59fad5..757ce166 100644 --- a/examples/ping/src/main.rs +++ b/examples/ping/src/main.rs @@ -11,7 +11,7 @@ use flarch::{ web_rtc::connection::ConnectionConfig, }; use flmodules::nodeconfig::NodeConfig; -use flmodules::network::messages::NetworkOut; +use flmodules::network::broker::NetworkOut; #[derive(Parser, Debug)] struct Args { @@ -47,7 +47,7 @@ async fn ping() -> Result<(), BrokerError> { let nc = NodeConfig::new(); log::info!("Our node-ID is {:?}", nc.info.get_id()); // Connect to the signalling server and wait for connection requests. - let mut net = flmodules::network::network_start( + let mut net = flmodules::network::network_webrtc_start( nc.clone(), ConnectionConfig::from_signal("ws://localhost:8765"), ) @@ -82,7 +82,7 @@ async fn server() -> Result<(), BrokerError> { // Create a random node-configuration. It uses serde for easy serialization. let nc = NodeConfig::new(); // Connect to the signalling server and wait for connection requests. - let mut net = flmodules::network::network_start( + let mut net = flmodules::network::network_webrtc_start( nc.clone(), ConnectionConfig::from_signal("ws://localhost:8765"), ) @@ -101,7 +101,7 @@ async fn client(server_id: &str) -> Result<(), BrokerError> { // Create a random node-configuration. It uses serde for easy serialization. let nc = NodeConfig::new(); // Connect to the signalling server and wait for connection requests. - let mut net = flmodules::network::network_start( + let mut net = flmodules::network::network_webrtc_start( nc.clone(), ConnectionConfig::from_signal("ws://localhost:8765"), ) diff --git a/flarch/Cargo.lock b/flarch/Cargo.lock index 7f824003..de8b59ef 100644 --- a/flarch/Cargo.lock +++ b/flarch/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -93,36 +93,37 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] @@ -182,7 +183,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -205,18 +206,18 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -227,23 +228,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -287,9 +288,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" [[package]] name = "block-buffer" @@ -309,11 +310,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -323,9 +330,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" [[package]] name = "cbc" @@ -338,9 +345,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "shlex", ] @@ -365,9 +372,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -390,19 +397,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" - -[[package]] -name = "console_error_panic_hook" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" -dependencies = [ - "cfg-if", - "wasm-bindgen", -] +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "const-oid" @@ -428,9 +425,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.14" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -505,7 +502,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -529,7 +526,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -540,14 +537,14 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -617,7 +614,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -657,9 +654,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -667,9 +664,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "anstream", "anstyle", @@ -705,13 +702,16 @@ name = "flarch" version = "0.8.0" dependencies = [ "async-trait", + "btparse", + "bytes", "chrono", "env_logger", - "flarch_macro", + "flmacro", "futures", "js-sys", "log", "rand", + "rmp-serde", "serde", "serde-wasm-bindgen", "serde_json", @@ -730,12 +730,12 @@ dependencies = [ ] [[package]] -name = "flarch_macro" +name = "flmacro" version = "0.8.0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -755,9 +755,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -770,9 +770,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -780,15 +780,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -797,38 +797,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -861,7 +861,19 @@ checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", ] [[package]] @@ -876,9 +888,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "group" @@ -899,15 +911,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hermit-abi" -version = "0.3.9" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] name = "hex" @@ -935,9 +941,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -946,9 +952,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "humantime" @@ -958,9 +964,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -979,6 +985,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -987,12 +1111,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1008,12 +1143,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -1049,9 +1184,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.10.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -1061,16 +1196,17 @@ checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1082,9 +1218,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "linked-hash-map" @@ -1092,6 +1228,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -1104,9 +1246,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "md-5" @@ -1135,9 +1277,9 @@ dependencies = [ [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -1151,22 +1293,21 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1229,9 +1370,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1247,9 +1388,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1259,9 +1400,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "p256" @@ -1277,9 +1418,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -1310,6 +1451,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pem" version = "3.0.4" @@ -1337,9 +1484,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1371,9 +1518,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -1401,18 +1548,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1444,14 +1591,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem", "ring", @@ -1463,18 +1610,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1484,9 +1631,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1495,9 +1642,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rfc6979" @@ -1517,13 +1664,35 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "rtcp" version = "0.11.0" @@ -1575,9 +1744,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.13" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -1602,19 +1771,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" [[package]] name = "rustls-webpki" @@ -1627,11 +1795,17 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -1644,19 +1818,13 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -1695,7 +1863,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -1704,9 +1872,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -1714,15 +1882,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -1740,20 +1908,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -1763,15 +1931,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -1781,14 +1949,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -1867,9 +2035,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1891,6 +2059,12 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" @@ -1944,9 +2118,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -1973,34 +2147,34 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2019,34 +2193,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] [[package]] -name = "tinyvec" -version = "1.8.0" +name = "tinystr" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" dependencies = [ - "tinyvec_macros", + "displaydoc", + "zerovec", ] -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "tokio" -version = "1.40.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -2061,23 +2230,22 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] @@ -2099,9 +2267,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2157,32 +2325,17 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "unicode-bidi" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" - [[package]] name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "unicode-normalization" -version = "0.1.24" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -2202,9 +2355,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2217,6 +2370,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2225,11 +2390,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" dependencies = [ - "getrandom", + "getrandom 0.3.1", ] [[package]] @@ -2263,14 +2428,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "serde", "serde_json", "wasm-bindgen-macro", @@ -2278,36 +2453,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2315,33 +2490,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", "minicov", - "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -2349,20 +2525,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "wasmtimer" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" dependencies = [ "futures", "js-sys", @@ -2374,9 +2550,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", @@ -2713,6 +2889,27 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x25519-dalek" version = "2.0.1" @@ -2761,6 +2958,30 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -2779,7 +3000,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", ] [[package]] @@ -2799,5 +3041,27 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] diff --git a/flarch/Cargo.toml b/flarch/Cargo.toml index 43d6e18c..eb2b05d8 100644 --- a/flarch/Cargo.toml +++ b/flarch/Cargo.toml @@ -8,14 +8,15 @@ license = "MIT OR Apache-2.0" name = "flarch" readme = "README.md" repository = "https://github.com/ineiti/fledger" -version = "0.8.0" +version = "0.9.0" [features] -node = [] +node = ["flmacro/node"] [dependencies] -flarch_macro = { version = "0.8", path = "../flarch_macro" } +flmacro = { version = "0.9", path = "../flmacro" } +bytes = "1.9" chrono = "0.4" env_logger = "0.11" futures = "0.3" @@ -32,6 +33,8 @@ serde_yaml = "0.8" serde_json = "1" serde = { version = "1", features = ["derive"] } sha2 = "0.10" +rmp-serde = "1" +btparse = "0.2" # For libc [target.'cfg(target_family="unix")'.dependencies] diff --git a/flarch/README.md b/flarch/README.md index 34c55328..c415138c 100644 --- a/flarch/README.md +++ b/flarch/README.md @@ -11,9 +11,63 @@ The following methods / structures are available: - `interval(dur: Duration)` - creates a stream that will send the expected time of resolution every `dur` - `Interval` - a stream created by `interval` -By default the crate compiles for `libc`. - ## Features -- `wasm` compiles for the wasm target -- `node` compiles for the node target \ No newline at end of file +- `node` compiles for the node target + +# Broker + +I wanted to create a common code for both the libc- and wasm-implementation for +Fledger. +Unfortunately it is difficult by the fact that libc allows to use threads +(and sometimes needs them), so some structures need to have the `Send` and `Sync` +traits. +But these traits are not available for all necessary websys-modules! +So I came up with the idea of linking all modules using a `Broker` system. + +In short, all input and output for a module are defined as messages. +Then each module handles incoming messages and produces outgoing messages. +Modules can be linked together by defining `Translators` that take messages +from one module and translate them into messages for the other module. + +All message-passing is done asynchronously and doesn't need intervention by +the programmer. +However, this means that tests sometimes need to wait for all messages to be +transmitted, before the results are available. + +## Example + +Given the [router-broker](../flmodules/src/router/broker.rs) with its two message-types: +- input: `RouterIn` +- output: `RouterOut` + +The [webproxy-broker](../flmodules/src/web_proxy/broker.rs) has similar two message-types: +- input: `WebProxyIn` +- output: `WebProxyOut` + +For the webproxy to be able to use the router, it has to connect to the input and output +of the router. +This happens with the following line: + +```rust + web_proxy + .add_translator_link( + router, + Box::new(Self::link_proxy_router), + Box::new(Self::link_router_proxy), + ) + .await?; +``` + +The `link_proxy_router` and `link_router_proxy` translate between the two messages, outputting +`Option`s of the destination message. +This allows to connect the output of the webproxy with the input of the router, and the output +of the router with the input of the webproxy. + +Now every time the router receives a message from the web, it will output it with a `RouterOut` +message. +All connected brokers to the router will receive this `RouterOut` message, and translate it into +their internal messages. +The broker system will call the appropriate handlers to create output messages from the modules, +which will then be passed to `RouterIn`, and back to the network. +This all happens in the background, both for `libc` and `wasm` compilation. \ No newline at end of file diff --git a/flarch/src/broker.rs b/flarch/src/broker.rs index ab0fb9d2..c0a41c46 100644 --- a/flarch/src/broker.rs +++ b/flarch/src/broker.rs @@ -10,8 +10,8 @@ //! //! # Subsystems //! -//! Every broker has a certain number of subsystems. -//! A handler is a step in the passage of a message through the broker. +//! Every Broker has a certain number of subsystems. +//! A handler is a step in the passage of a message through the Broker. //! The following subsystems exist: //! //! @@ -41,12 +41,24 @@ use std::{ }, }; -use flarch_macro::platform_async_trait; -use futures::{future::BoxFuture, lock::Mutex}; +use futures::lock::Mutex; use thiserror::Error; use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender}; use crate::{nodeids::U256, tasks::spawn_local}; +use flmacro::{platform_async_trait, target_send}; + +#[cfg(any(target_family = "wasm", feature = "node"))] +pub mod asy { + pub trait Async {} + impl Async for T {} +} +#[cfg(all(target_family = "unix", not(feature="node")))] +pub mod asy { + pub trait Async: Sync + Send {} + impl Async for T {} +} +use asy::*; #[derive(Debug, Error)] /// The only error that can happen is that sending to another broker fails. @@ -55,6 +67,8 @@ pub enum BrokerError { #[error("While sending to {0}")] /// Couldn't send to this queue. SendQueue(String), + #[error("Translation error")] + Translation, } /// Identifies a broker for loop detection. @@ -64,7 +78,7 @@ pub type BrokerID = U256; /// to make sure no loop is created. #[derive(Debug, Clone, PartialEq, Eq)] pub enum Destination { - /// To all handlers in this broker + /// To all handlers in this Broker All, /// Only to handlers which represent no tap - useful for tests NoTap, @@ -74,12 +88,12 @@ pub enum Destination { Handled(usize), } -enum SubsystemAction { - Add(usize, Subsystem), +enum SubsystemAction { + Add(usize, Subsystem), Remove(usize), } -impl fmt::Debug for SubsystemAction { +impl fmt::Debug for SubsystemAction { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { match self { SubsystemAction::Add(id, ss) => write!(f, "Add({}, {ss:?})", id), @@ -88,63 +102,82 @@ impl fmt::Debug for SubsystemAction { } } -#[cfg(target_family = "wasm")] -mod asy { - pub trait Async {} - impl Async for T {} -} -#[cfg(target_family = "unix")] -mod asy { - pub trait Async: Sync + Send {} - impl Async for T {} -} -use asy::*; +pub trait Message: Async + Clone + fmt::Debug {} +impl Message for M {} -/// The broker connects the different subsystem together and offers +/// The Broker connects the different subsystem together and offers /// a pub/sub system. /// Every subsystem can subscribe to any number of messages. /// Every subsystem can emit any number of messages. /// Incoming messages are queued in a channel and are treated when /// the `process` method is called. -pub struct Broker { - intern_tx: UnboundedSender>, +pub struct Broker { + intern_tx: UnboundedSender>, + // Intern is in an always-locked state to make sure it's dropped last. + intern: Arc>>, subsystems: Arc>, id: BrokerID, } -impl Default for Broker { - /// Create a new broker. +impl std::fmt::Debug for Broker { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + f.debug_struct("Broker") + .field("intern_tx", &self.intern_tx) + .field("subsystems", &self.subsystems) + .field("id", &self.id) + .finish() + } +} + +impl Default for Broker { + /// Create a new Broker. fn default() -> Self { Self::new() } } -impl Clone for Broker { - /// Clone the broker. The new broker will communicate with the same "Intern" structure - /// and share all messages. However, each broker clone will have its own tap messages. +impl Clone for Broker { + /// Clone the Broker. The new Broker will communicate with the same "Intern" structure + /// and share all messages. However, each Broker clone will have its own tap messages. fn clone(&self) -> Self { + // log::warn!("{}/{}: Sending clone", self.id, self.type_str()); + self.intern_tx + .send(InternMessage::Cloned) + .expect("Couldn't inform broker::Intern of cloning"); Self { intern_tx: self.intern_tx.clone(), + intern: self.intern.clone(), subsystems: Arc::clone(&self.subsystems), id: self.id, } } } -impl Broker { - /// Creates a new broker of type and initializes it without any subsystems. +impl Drop for Broker { + fn drop(&mut self) { + // log::warn!("{}/{}: Sending Dropped", self.id, self.type_str()); + self.intern_tx + .send(InternMessage::Dropped) + .err() + .map(|e| log::warn!("{}: Couldn't send 'Dropped': {e:?}", self.type_str())); + } +} + +impl Broker { + /// Creates a new Broker of type and initializes it without any subsystems. pub fn new() -> Self { let id = BrokerID::rnd(); - let intern_tx = Intern::new(id); + let (intern_tx, intern) = Intern::new(id); Self { intern_tx, + intern, subsystems: Arc::new(Mutex::new(0)), id, } } /// Adds a new subsystem to send and/or receive messages. - pub async fn add_subsystem(&mut self, ss: Subsystem) -> Result { + pub async fn add_subsystem(&mut self, ss: Subsystem) -> Result { let subsystem = { let mut subsystems = self.subsystems.lock().await; *subsystems += 1; @@ -158,6 +191,86 @@ impl Broker { Ok(subsystem) } + pub async fn add_translator_link( + &mut self, + mut broker: Broker, + tr_o_ti: Translate, + tr_to_i: Translate, + ) -> Result { + broker.add_translator_o_ti(self.clone(), tr_to_i).await?; + self.add_translator_o_ti(broker, tr_o_ti).await + } + + pub async fn add_translator_direct( + &mut self, + mut broker: Broker, + tr_ti_i: Translate, + tr_o_to: Translate, + ) -> Result { + broker.add_translator_i_ti(self.clone(), tr_ti_i).await?; + self.add_translator_o_to(broker, tr_o_to).await + } + + pub async fn add_translator_i_ti( + &mut self, + broker: Broker, + i_ti: Translate, + ) -> Result { + self.add_translator(Box::new(Translator { + broker, + translate_fn_i_ti: Some(i_ti), + translate_fn_i_to: None, + translate_fn_o_ti: None, + translate_fn_o_to: None, + })) + .await + } + + pub async fn add_translator_i_to( + &mut self, + broker: Broker, + i_to: Translate, + ) -> Result { + self.add_translator(Box::new(Translator { + broker, + translate_fn_i_ti: None, + translate_fn_i_to: Some(i_to), + translate_fn_o_ti: None, + translate_fn_o_to: None, + })) + .await + } + + pub async fn add_translator_o_ti( + &mut self, + broker: Broker, + o_ti: Translate, + ) -> Result { + self.add_translator(Box::new(Translator { + broker, + translate_fn_i_ti: None, + translate_fn_i_to: None, + translate_fn_o_ti: Some(o_ti), + translate_fn_o_to: None, + })) + .await + } + + pub async fn add_translator_o_to( + &mut self, + broker: Broker, + o_to: Translate, + ) -> Result { + self.add_translator(Box::new(Translator { + broker, + translate_fn_i_ti: None, + translate_fn_i_to: None, + translate_fn_o_ti: None, + translate_fn_o_to: Some(o_to), + })) + .await + } + /// Removes a subsystem from the list that will be applied to new messages. pub async fn remove_subsystem(&mut self, ss: usize) -> Result<(), BrokerError> { self.intern_tx @@ -168,9 +281,9 @@ impl Broker { /// Adds an async tap to the subsystems that can be used to listen to messages. /// The async tap is returned. - pub async fn get_tap(&mut self) -> Result<(UnboundedReceiver, usize), BrokerError> { + pub async fn get_tap_out(&mut self) -> Result<(UnboundedReceiver, usize), BrokerError> { let (tx, rx) = unbounded_channel(); - let pos = self.add_subsystem(Subsystem::Tap(tx)).await?; + let pos = self.add_subsystem(Subsystem::TapOut(tx)).await?; Ok((rx, pos)) } @@ -179,79 +292,132 @@ impl Broker { /// waiting for a message! /// For this reason it is better to use the `get_tap` method. /// Returns the synchronous tap. - pub async fn get_tap_sync(&mut self) -> Result<(Receiver, usize), BrokerError> { + pub async fn get_tap_out_sync(&mut self) -> Result<(Receiver, usize), BrokerError> { let (tx, rx) = channel(); - let pos = self.add_subsystem(Subsystem::TapSync(tx)).await?; + let pos = self.add_subsystem(Subsystem::TapSyncOut(tx)).await?; Ok((rx, pos)) } + /// Adds an async tap to the subsystems that can be used to listen to messages. + /// The async tap is returned. + pub async fn get_tap_in(&mut self) -> Result<(UnboundedReceiver, usize), BrokerError> { + let (tx, rx) = unbounded_channel(); + let pos = self.add_subsystem(Subsystem::TapIn(tx)).await?; + Ok((rx, pos)) + } + + /// Adds a synchronous tap that can be used to listen to messages. + /// Care must be taken that the async handling will still continue while + /// waiting for a message! + /// For this reason it is better to use the `get_tap` method. + /// Returns the synchronous tap. + pub async fn get_tap_in_sync(&mut self) -> Result<(Receiver, usize), BrokerError> { + let (tx, rx) = channel(); + let pos = self.add_subsystem(Subsystem::TapSyncIn(tx)).await?; + Ok((rx, pos)) + } + + /// Emit a message to a given destination of other listeners. + /// The message will be processed asynchronously. + pub fn emit_msg_in_dest(&mut self, dst: Destination, msg: I) -> Result<(), BrokerError> { + self.intern_tx + .send(InternMessage::MessageIn(dst, msg)) + .map_err(|_| BrokerError::SendQueue("emit_msg_dest".into())) + } + + /// Emit a message to other listeners. + /// The message will be processed asynchronously. + pub fn emit_msg_in(&mut self, msg: I) -> Result<(), BrokerError> { + self.emit_msg_in_dest(Destination::All, msg) + } + /// Emit a message to a given destination of other listeners. /// The message will be processed asynchronously. - pub fn emit_msg_dest(&mut self, dst: Destination, msg: T) -> Result<(), BrokerError> { + pub fn emit_msg_out_dest(&mut self, dst: Destination, msg: O) -> Result<(), BrokerError> { self.intern_tx - .send(InternMessage::Message(dst, msg)) + .send(InternMessage::MessageOut(dst, msg)) .map_err(|_| BrokerError::SendQueue("emit_msg_dest".into())) } /// Emit a message to other listeners. /// The message will be processed asynchronously. - pub fn emit_msg(&mut self, msg: T) -> Result<(), BrokerError> { - self.emit_msg_dest(Destination::All, msg) + pub fn emit_msg_out(&mut self, msg: O) -> Result<(), BrokerError> { + self.emit_msg_out_dest(Destination::All, msg) } /// Emit a message to a given destination of other listeners and wait for all involved /// brokers to settle. - pub async fn settle_msg_dest(&mut self, dst: Destination, msg: T) -> Result<(), BrokerError> { + pub async fn settle_msg_in_dest( + &mut self, + dst: Destination, + msg: I, + ) -> Result<(), BrokerError> { self.intern_tx - .send(InternMessage::Message(dst, msg)) + .send(InternMessage::MessageIn(dst, msg)) .map_err(|_| BrokerError::SendQueue("settle_msg_dest".into()))?; self.settle(vec![]).await } /// Emit a message to other listeners and wait for all involved brokers to settle. - pub async fn settle_msg(&mut self, msg: T) -> Result<(), BrokerError> { - self.settle_msg_dest(Destination::All, msg).await + pub async fn settle_msg_in(&mut self, msg: I) -> Result<(), BrokerError> { + self.settle_msg_in_dest(Destination::All, msg).await } - /// Connects to another broker. The message type of the other broker - /// needs to implement the TryFrom and TryInto for this broker's message - /// type. - /// Any error in the TryInto and TryFrom are interpreted as a message - /// that cannot be translated and that is ignored. - pub async fn link_bi( + /// Emit a message to a given destination of other listeners and wait for all involved + /// brokers to settle. + pub async fn settle_msg_out_dest( &mut self, - mut broker: Broker, - link_rt: Translate, - link_tr: Translate, + dst: Destination, + msg: O, ) -> Result<(), BrokerError> { - self.forward(broker.clone(), link_tr).await; - broker.forward(self.clone(), link_rt).await; + self.intern_tx + .send(InternMessage::MessageOut(dst, msg)) + .map_err(|_| BrokerError::SendQueue("settle_msg_dest".into()))?; + self.settle(vec![]).await + } + + /// Emit a message to other listeners and wait for all involved brokers to settle. + pub async fn settle_msg_out(&mut self, msg: O) -> Result<(), BrokerError> { + self.settle_msg_out_dest(Destination::All, msg).await + } + + /// Connects to another Broker. + /// The translations are defined using TranslateFrom and TranslateInto. + /// If you only own the types TI and TO, then you can call link_bi on + /// the 'other' Broker. + pub async fn link_bi( + &mut self, + other: Broker, + ) -> Result<(), BrokerError> + where + I: TranslateFrom, + O: TranslateInto, + { + self.add_translator_link(other, Box::new(O::translate), Box::new(I::translate)) + .await?; Ok(()) } - /// Forwards all messages from this broker to another broker. - /// The link_tr method is used to translate messages from this - /// broker to the other broker. - /// If you need a bidirectional link, use the link_bi method. - pub async fn forward( + /// Connects to another Broker, but in a direct way: + /// I forwards to TI, O forwards to TO. + pub async fn link_direct( &mut self, - broker: Broker, - link_tr: Translate, - ) { - let translator_tr = Translator { - broker, - translate: link_tr, - }; - self.add_subsystem(Subsystem::Translator(Box::new(translator_tr))) - .await - .unwrap(); + other: Broker, + ) -> Result<(), BrokerError> + where + I: TranslateFrom, + O: TranslateInto, + { + self.add_translator_direct(other, Box::new(I::translate), Box::new(O::translate)) + .await?; + Ok(()) } /// Waits for all messages in the queue to be forwarded / handled, before returning. /// It also calls all brokers that are signed up as forwarding targets. /// The caller argument is to be used when recursively settling, to avoid /// endless loops. - async fn settle(&mut self, callers: Vec) -> Result<(), BrokerError> { + pub async fn settle(&mut self, callers: Vec) -> Result<(), BrokerError> { let (tx, mut rx) = unbounded_channel(); self.intern_tx .send(InternMessage::Settle(callers.clone(), tx)) @@ -259,105 +425,98 @@ impl Broker { rx.recv().await; Ok(()) } -} -#[cfg(target_family = "unix")] -/// Defines a method that translates from message type to message -/// type . -pub type Translate = Box Option + Send + 'static>; -#[cfg(target_family = "wasm")] -/// Defines a method that translates from message type to message -/// type . -pub type Translate = Box Option + 'static>; - -struct Translator { - broker: Broker, - translate: Translate, + fn type_str(&self) -> String { + format!( + "<{},{}>", + std::any::type_name::(), + std::any::type_name::() + ) + } } -#[platform_async_trait()] -impl SubsystemTranslator - for Translator -{ - async fn translate(&mut self, trail: Vec, msg: R) -> bool { - let msg_res = (self.translate)(msg.clone()); - if let Some(msg_tr) = msg_res { - log::trace!( - "Translated {} -> {}: {msg_tr:?}, sending to {}", - std::any::type_name::(), - std::any::type_name::(), - self.broker.id, - ); - self.broker - .emit_msg_dest(Destination::Forwarded(trail), msg_tr) - .err() - .map(|e| { - log::error!( - "{:p}: Translated message {} -> {} couldn't be queued: {e}", - self, - std::any::type_name::(), - std::any::type_name::() - ); - }); - return true; - } - false +impl Broker { + pub async fn add_handler( + &mut self, + handler: SubsystemHandlerBox, + ) -> Result { + self.add_subsystem(Subsystem::Handler(handler)).await } - async fn settle(&mut self, callers: Vec) -> Result<(), BrokerError> { - if !callers.contains(&self.broker.id) { - self.broker.settle(callers).await?; - } - Ok(()) + pub async fn add_translator( + &mut self, + translate: SubsystemTranslatorBox, + ) -> Result { + self.add_subsystem(Subsystem::Translator(translate)).await } } -enum InternMessage { - Subsystem(SubsystemAction), - Message(Destination, T), +enum InternMessage { + Subsystem(SubsystemAction), + MessageIn(Destination, I), + MessageOut(Destination, O), Settle(Vec, UnboundedSender), + Cloned, + Dropped, } -struct Intern { - main_rx: UnboundedReceiver>, - subsystems: HashMap>, - msg_queue: Vec<(Destination, T)>, +struct Intern { + main_rx: UnboundedReceiver>, + subsystems: HashMap>, + msg_queue_in: Vec<(Destination, I)>, + msg_queue_out: Vec<(Destination, O)>, id: BrokerID, + copies: usize, } -impl Intern { - fn new(id: BrokerID) -> UnboundedSender> { - log::trace!("Creating Broker {} for {}", id, std::any::type_name::()); - let (main_tx, main_rx) = unbounded_channel::>(); +impl Intern { + fn new( + id: BrokerID, + ) -> ( + UnboundedSender>, + Arc>>, + ) { + log::trace!( + "Creating Broker {} for {}->{}", + id, + std::any::type_name::(), + std::any::type_name::() + ); + let (main_tx, main_rx) = unbounded_channel::>(); + let intern = Arc::new(Mutex::new(Self { + main_rx, + subsystems: HashMap::new(), + msg_queue_in: vec![], + msg_queue_out: vec![], + id, + copies: 1, + })); + + let intern_arc = intern.clone(); spawn_local(async move { - let mut intern = Self { - main_rx, - subsystems: HashMap::new(), - msg_queue: vec![], - id, - }; + let mut intern = intern_arc.try_lock().expect("Getting global lock"); loop { if !intern.get_msg().await { - log::warn!( - "{}: Closed Intern.main_rx for {}", - intern.id, - intern.type_id() - ); + // log::warn!( + // "{}: Closed Intern_locked.main_rx for {}", + // intern.id, + // intern.type_str() + // ); return; } - if intern.msg_queue.len() > 0 { + if !intern.msg_queue_in.is_empty() || !intern.msg_queue_out.is_empty() { match intern.process().await { - Ok(nbr) => log::trace!("{}: Processed {nbr} messages", intern.type_id()), + Ok(nbr) => log::trace!("{}: Processed {nbr} messages", intern.type_str()), Err(e) => { - log::error!("{}: Couldn't process: {e:?}", intern.type_id()); + log::error!("{}: Couldn't process: {e:?}", intern.type_str()); } } } } }); - main_tx + (main_tx, intern) } // The process method goes through all incoming messages and treats them from the first @@ -367,11 +526,11 @@ impl Intern { async fn process(&mut self) -> Result { let mut msg_count: usize = 0; loop { + msg_count += self.msg_queue_in.len() + self.msg_queue_out.len(); self.process_once().await?; - if self.msg_queue.len() == 0 { + if self.msg_queue_in.is_empty() && self.msg_queue_out.is_empty() { break; } - msg_count += self.msg_queue.len(); } Ok(msg_count) } @@ -383,18 +542,24 @@ impl Intern { let msg_queue = match self.main_rx.recv().await { Some(msg) => msg, None => { + log::warn!( + "{}/{} Closed queue before Close arrived", + self.id, + self.type_str() + ); return false; } }; - let msg = match msg_queue { + match msg_queue { InternMessage::Subsystem(ss) => { - log::trace!("{self:p}/{} subsystem action {ss:?}", self.type_id()); + log::trace!("{self:p}/{} subsystem action {ss:?}", self.type_str()); self.subsystem_action(ss); return true; } - InternMessage::Message(dst, msg) => (dst, msg), + InternMessage::MessageIn(dst, msg) => self.msg_queue_in.push((dst, msg)), + InternMessage::MessageOut(dst, msg) => self.msg_queue_out.push((dst, msg)), InternMessage::Settle(list, reply) => { - let type_id = self.type_id(); + let type_str = self.type_str(); if !list.contains(&self.id) { let mut list = list.clone(); list.push(self.id); @@ -402,23 +567,46 @@ impl Intern { ss.settle(list.clone()) .await .err() - .map(|e| log::error!("{}: While settling: {e:?}", type_id)); + .map(|e| log::error!("{}: While settling: {e:?}", type_str)); } } reply .send(true) .err() - .map(|e| log::error!("{}: Couldn't send: {e:?}", type_id)); + .map(|e| log::error!("{}: Couldn't send: {e:?}", type_str)); return true; } + InternMessage::Dropped => { + self.copies -= 1; + // log::warn!( + // "{}/{}: Copies now: {}", + // self.id, + // self.type_str(), + // self.copies + // ); + if self.copies == 0 { + self.subsystems = HashMap::new(); + return false; + } else { + return true; + } + } + InternMessage::Cloned => { + self.copies += 1; + // log::warn!( + // "{}/{}: Copies now: {}", + // self.id, + // self.type_str(), + // self.copies + // ); + } }; - self.msg_queue.push(msg); true } /// Adds a SubsystemInit - fn subsystem_action(&mut self, ssa: SubsystemAction) { + fn subsystem_action(&mut self, ssa: SubsystemAction) { match ssa { SubsystemAction::Add(pos, s) => { self.subsystems.insert(pos, s); @@ -437,12 +625,18 @@ impl Intern { // Every tap returning an error is considered closed and removed from // the list of subsystems. async fn process_once(&mut self) -> Result<(), BrokerError> { - self.process_translate_messages().await; + self.process_translate_out_messages().await; + self.process_translate_in_messages().await; + + let mut subsystems_error = self.send_tap_out().await; + subsystems_error.extend(self.send_tap_in().await); - let mut subsystems_error = self.send_tap().await; + self.msg_queue_out.clear(); subsystems_error.extend(self.process_handle_messages().await); + self.msg_queue_in.clear(); + for index in subsystems_error.iter().rev() { self.subsystem_action(SubsystemAction::Remove(*index)); } @@ -450,69 +644,111 @@ impl Intern { Ok(()) } - // First run translators on the messages. For each message, if it has been - // translated by at least one translator, it will be deleted from the queue. - async fn process_translate_messages(&mut self) { - let mut i = 0; - while i < self.msg_queue.len() { - let (dst, msg) = &mut self.msg_queue[i]; - + // First run translators on the messages. + async fn process_translate_out_messages(&mut self) { + for (dst, msg) in &self.msg_queue_out { let mut trail = vec![]; if let Destination::Forwarded(t) = dst.clone() { trail.extend(t); } if trail.contains(&self.id) { - log::trace!( + log::warn!( "{}: Endless forward-loop detected, aborting", - self.type_id() + self.type_str() ); - i += 1; continue; } trail.push(self.id); - let mut translated = false; for (_, ss) in self .subsystems .iter_mut() .filter(|(_, ss)| ss.is_translator()) { - if match ss { + match ss { Subsystem::Translator(ref mut translator) => { - translator.translate(trail.clone(), msg.clone()).await + translator + .translate_output(trail.clone(), msg.clone()) + .await; } - Subsystem::TranslatorCallback(translator) => { - (translator)(trail.clone(), msg.clone()).await + _ => (), + } + } + } + } + + // First run translators on the messages. + async fn process_translate_in_messages(&mut self) { + for (dst, msg) in &self.msg_queue_in { + let mut trail = vec![]; + if let Destination::Forwarded(t) = dst.clone() { + trail.extend(t); + } + if trail.contains(&self.id) { + log::warn!( + "{}: Endless forward-loop detected, aborting", + self.type_str() + ); + continue; + } + trail.push(self.id); + + for (_, ss) in self + .subsystems + .iter_mut() + .filter(|(_, ss)| ss.is_translator()) + { + match ss { + Subsystem::Translator(ref mut translator) => { + translator.translate_input(trail.clone(), msg.clone()).await; } - _ => false, - } { - translated = true; + _ => (), } } - if translated { - self.msg_queue.remove(i); - } else { - i += 1; + } + } + + // Then send the messages to the taps, except Destination::NoTap. + async fn send_tap_out(&mut self) -> Vec { + let mut faulty = vec![]; + let msgs: Vec = self + .msg_queue_out + .iter() + .filter(|(dst, _)| dst != &Destination::NoTap) + .map(|(_, msg)| msg.clone()) + .collect(); + + let type_str = self.type_str(); + for (i, ss) in self.subsystems.iter_mut() { + if let Err(e) = ss.send_tap_out(msgs.clone()).await { + log::warn!( + "{}: Couldn't send to tap-out: {e:?}::{} - perhaps you should use 'remove_subsystem'?", + type_str, + i + ); + faulty.push(*i); } } + + faulty } // Then send the messages to the taps, except Destination::NoTap. - async fn send_tap(&mut self) -> Vec { + async fn send_tap_in(&mut self) -> Vec { let mut faulty = vec![]; - let msgs: Vec = self - .msg_queue + let msgs: Vec = self + .msg_queue_in .iter() .filter(|(dst, _)| dst != &Destination::NoTap) .map(|(_, msg)| msg.clone()) .collect(); - let type_id = self.type_id(); - for (i, ss) in self.subsystems.iter_mut().filter(|(_, ss)| ss.is_tap()) { - if let Err(e) = ss.put_messages(*i, msgs.clone()).await { + let type_str = self.type_str(); + for (i, ss) in self.subsystems.iter_mut() { + if let Err(e) = ss.send_tap_in(msgs.clone()).await { log::warn!( - "{}: Couldn't send to tap: {e:?} - perhaps you should use 'remove_subsystem'?", - type_id + "{}: Couldn't send to tap-in: {e:?} - perhaps you should use 'remove_subsystem'?", + type_str ); faulty.push(*i); } @@ -524,15 +760,15 @@ impl Intern { // Finally send messages to all other subsystems, and collect // new messages for next call to 'process'. async fn process_handle_messages(&mut self) -> Vec { - if self.msg_queue.len() == 0 { + if self.msg_queue_in.is_empty() { return vec![]; } let mut ss_remove = vec![]; let mut new_msg_queue = vec![]; - let type_id = self.type_id(); + let type_str = self.type_str(); for (index_ss, ss) in self.subsystems.iter_mut().filter(|(_, ss)| ss.is_handler()) { - let msgs: Vec = self - .msg_queue + let msgs: Vec = self + .msg_queue_in .iter() .filter(|nm| match nm.0 { Destination::Handled(i) => index_ss != &i, @@ -541,156 +777,265 @@ impl Intern { .map(|nm| &nm.1) .cloned() .collect(); - match ss.put_messages(*index_ss, msgs.clone()).await { + match ss.send_handler(*index_ss, msgs.clone()).await { Ok(mut new_msgs) => { new_msg_queue.append(&mut new_msgs); } Err(e) => { ss_remove.push(*index_ss); - log::error!("{}: While sending messages: {e}", type_id); + log::error!("{}: While sending messages: {e}", type_str); } } } - self.msg_queue = new_msg_queue; + self.msg_queue_out.append(&mut new_msg_queue); ss_remove } - fn type_id(&self) -> String { - std::any::type_name::().into() + fn type_str(&self) -> String { + format!( + "<{},{}>", + std::any::type_name::(), + std::any::type_name::() + ) } } -#[cfg(target_family = "wasm")] -/// Subsystems available in a broker. -/// Every subsystem can be added zero, one, or more times. -pub enum Subsystem { - Tap(UnboundedSender), - TapSync(Sender), - Handler(Box>), - Translator(Box>), - Callback(SubsystemCallback), - TranslatorCallback(SubsystemTranslatorCallback), +impl Drop for Intern { + fn drop(&mut self) { + // log::warn!( + // "{}/{}: Intern dropped at counter {}", + // self.id, + // self.type_str(), + // self.copies + // ); + } } -#[cfg(target_family = "unix")] -/// Subsystems available in a broker. + +/// Subsystems available in a Broker. /// Every subsystem can be added zero, one, or more times. -pub enum Subsystem { - Tap(UnboundedSender), - TapSync(Sender), - Handler(Box + Send>), - Translator(Box + Send>), - Callback(SubsystemCallback), - TranslatorCallback(SubsystemTranslatorCallback), +pub enum Subsystem { + TapIn(UnboundedSender), + TapOut(UnboundedSender), + TapSyncIn(Sender), + TapSyncOut(Sender), + Handler(SubsystemHandlerBox), + Translator(SubsystemTranslatorBox), } -impl Subsystem { - async fn put_messages( - &mut self, - index: usize, - msgs: Vec, - ) -> Result, BrokerError> { +impl Subsystem { + async fn send_tap_out(&mut self, msgs: Vec) -> Result<(), BrokerError> { + Ok(match self { + Self::TapSyncOut(s) => { + for msg in msgs { + s.send(msg.clone()) + .map_err(|_| BrokerError::SendQueue("send_tap".into()))?; + } + } + Self::TapOut(s) => { + for msg in msgs { + s.send(msg.clone()) + .map_err(|_| BrokerError::SendQueue("send_tap_async".into()))?; + } + } + _ => (), + }) + } + + async fn send_tap_in(&mut self, msgs: Vec) -> Result<(), BrokerError> { Ok(match self { - Self::TapSync(s) => { + Self::TapSyncIn(s) => { for msg in msgs { s.send(msg.clone()) .map_err(|_| BrokerError::SendQueue("send_tap".into()))?; } - vec![] } - Self::Tap(s) => { + Self::TapIn(s) => { for msg in msgs { s.send(msg.clone()) .map_err(|_| BrokerError::SendQueue("send_tap_async".into()))?; } - vec![] } + _ => (), + }) + } + + async fn send_handler( + &mut self, + index: usize, + msgs: Vec, + ) -> Result, BrokerError> { + Ok(match self { Self::Handler(h) => { let ret = h.messages(msgs).await; ret.into_iter() .map(|m| (Destination::Handled(index), m)) .collect() } - Self::Callback(h) => h(msgs).await, _ => vec![], }) } - fn is_tap(&self) -> bool { - matches!(self, Self::TapSync(_)) || matches!(self, Self::Tap(_)) - } - fn is_translator(&self) -> bool { - matches!(self, Self::Translator(_)) || matches!(self, Self::TranslatorCallback(_)) + matches!(self, Self::Translator(_)) } fn is_handler(&self) -> bool { - matches!(self, Self::Handler(_)) || matches!(self, Self::Callback(_)) + matches!(self, Self::Handler(_)) } async fn settle(&mut self, callers: Vec) -> Result<(), BrokerError> { - if let Self::Translator(tr) = self { - tr.settle(callers).await - } else { - Ok(()) + match self { + Subsystem::Translator(tr) => tr.settle(callers).await, + _ => Ok(()), } } } -impl fmt::Debug for Subsystem { +impl fmt::Debug for Subsystem { fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { match self { - Self::TapSync(_) => write!(f, "Tap"), - Self::Tap(_) => write!(f, "TapAsync"), + Self::TapSyncIn(_) => write!(f, "TapSyncIn"), + Self::TapSyncOut(_) => write!(f, "TapSyncOut"), + Self::TapIn(_) => write!(f, "TapAsyncIn"), + Self::TapOut(_) => write!(f, "TapAsyncOut"), Self::Handler(_) => write!(f, "Handler"), Self::Translator(_) => write!(f, "Translator"), - Self::TranslatorCallback(_) => write!(f, "TranslatorCallback"), - Self::Callback(_) => write!(f, "Callback"), } } } #[platform_async_trait()] -pub trait SubsystemHandler { - async fn messages(&mut self, from_broker: Vec) -> Vec; +#[target_send()] +pub trait SubsystemHandler { + async fn messages(&mut self, from_broker: Vec) -> Vec; } #[platform_async_trait()] -pub trait SubsystemTranslator { - async fn translate(&mut self, trail: Vec, from_broker: T) -> bool; +#[target_send()] +pub trait SubsystemTranslator { + async fn translate_input(&mut self, trail: Vec, from_broker: I); + async fn translate_output(&mut self, trail: Vec, from_broker: O); async fn settle(&mut self, callers: Vec) -> Result<(), BrokerError>; } -#[cfg(target_family = "wasm")] -type SubsystemCallback = Box) -> BoxFuture<'static, Vec<(Destination, T)>>>; -#[cfg(target_family = "unix")] -type SubsystemCallback = - Box) -> BoxFuture<'static, Vec<(Destination, T)>> + Send + Sync>; -#[cfg(target_family = "wasm")] -type SubsystemTranslatorCallback = Box, T) -> BoxFuture<'static, bool>>; -#[cfg(target_family = "unix")] -type SubsystemTranslatorCallback = - Box, T) -> BoxFuture<'static, bool> + Send + Sync>; +#[target_send()] +pub type Translate = Box Option + 'static>; + +pub struct Translator { + broker: Broker, + translate_fn_i_ti: Option>, + translate_fn_i_to: Option>, + translate_fn_o_ti: Option>, + translate_fn_o_to: Option>, +} + +impl + Translator +{ + async fn emit_ti_to(&mut self, trail: Vec, msg_ti: Option, msg_to: Option) { + if let Some(msg_tr) = msg_ti { + if let Err(e) = self + .broker + .emit_msg_in_dest(Destination::Forwarded(trail.clone()), msg_tr) + { + log::error!("Translated message couldn't be queued: {e}",); + }; + } + if let Some(msg_tr) = msg_to { + if let Err(e) = self + .broker + .emit_msg_out_dest(Destination::Forwarded(trail), msg_tr) + { + log::error!("Translated message couldn't be queued: {e}",); + }; + } + } +} + +#[platform_async_trait()] +impl SubsystemTranslator + for Translator +{ + async fn translate_input(&mut self, trail: Vec, msg: I) { + self.emit_ti_to( + trail, + self.translate_fn_i_ti + .as_ref() + .and_then(|tr| tr(msg.clone())), + self.translate_fn_i_to.as_ref().and_then(|tr| tr(msg)), + ) + .await; + } + + async fn translate_output(&mut self, trail: Vec, msg: O) { + self.emit_ti_to( + trail, + self.translate_fn_o_ti + .as_ref() + .and_then(|tr| tr(msg.clone())), + self.translate_fn_o_to.as_ref().and_then(|tr| tr(msg)), + ) + .await; + } + + async fn settle(&mut self, callers: Vec) -> Result<(), BrokerError> { + if !callers.contains(&self.broker.id) { + self.broker.settle(callers).await?; + } + Ok(()) + } +} + +#[platform_async_trait()] +pub trait TranslateFrom: Sized { + fn translate(msg: T) -> Option; +} + +#[platform_async_trait()] +pub trait TranslateInto { + fn translate(self) -> Option; +} + +#[platform_async_trait()] +pub trait TranslateLink: + Async + Clone +{ + fn translate_o_ti(&self, msg: O) -> Option; + fn translate_to_i(&self, msg: TO) -> Option; +} + +#[platform_async_trait()] +pub trait TranslateDirect { + fn translate_o_ti(msg: O) -> Option; + fn translate_to_i(msg: I) -> Option; +} #[cfg(test)] mod tests { + use thiserror::Error; + use crate::{start_logging, start_logging_filter_level}; use super::*; #[derive(Debug, Clone, PartialEq)] - pub enum BrokerTest { + pub enum BrokerTestIn { MsgA, + } + + #[derive(Debug, Clone, PartialEq)] + pub enum BrokerTestOut { MsgB, } pub struct Tps { - reply: Vec<(BrokerTest, BrokerTest)>, + reply: Vec<(BrokerTestIn, BrokerTestOut)>, } #[platform_async_trait()] - impl SubsystemHandler for Tps { - async fn messages(&mut self, msgs: Vec) -> Vec { + impl SubsystemHandler for Tps { + async fn messages(&mut self, msgs: Vec) -> Vec { let mut output = vec![]; log::debug!("Msgs are: {:?} - Replies are: {:?}", msgs, self.reply); @@ -704,13 +1049,13 @@ mod tests { } } - /// Test the broker with two subsystems. + /// Test the Broker with two subsystems. #[tokio::test] async fn test_broker_new() -> Result<(), BrokerError> { start_logging(); - let bm_a = BrokerTest::MsgA; - let bm_b = BrokerTest::MsgB; + let bm_a = BrokerTestIn::MsgA; + let bm_b = BrokerTestOut::MsgB; let broker = &mut Broker::new(); // Add a first subsystem that will reply 'msg_b' when it @@ -720,59 +1065,67 @@ mod tests { reply: vec![(bm_a.clone(), bm_b.clone())], }))) .await?; - let (tap_tx, tap) = channel::(); - broker.add_subsystem(Subsystem::TapSync(tap_tx)).await?; - - // Shouldn't reply to a msg_b, so only 1 message. - broker.settle_msg(bm_b.clone()).await?; - assert_eq!(tap.try_iter().count(), 1); + let (tap, _) = broker.get_tap_out_sync().await?; - // Should reply to msg_a, so the tap should have 2 messages - the original + // Should reply to msg_a, so the tap should have 1 message - the original // and the reply. - broker.settle_msg(bm_a.clone()).await?; - assert_eq!(tap.try_iter().count(), 2); + broker.settle_msg_in(bm_a.clone()).await?; + assert_eq!(tap.try_iter().count(), 1); - // Add the same subsystem, now it should get 3 messages - the original - // and two replies. + // Add the same subsystem, now it should get 2 messages - the two replies. broker .add_subsystem(Subsystem::Handler(Box::new(Tps { reply: vec![(bm_a.clone(), bm_b)], }))) .await?; - broker.settle_msg(bm_a).await?; - assert_eq!(tap.try_iter().count(), 3); + broker.settle_msg_in(bm_a).await?; + assert_eq!(tap.try_iter().count(), 2); Ok(()) } #[derive(Clone, PartialEq, Debug)] - enum MessageA { + enum MessageAI { One, + _Two, + _Three, + } + + #[derive(Clone, PartialEq, Debug)] + enum MessageAO { + _Un, + Deux, + Trois, + } + + #[derive(Clone, PartialEq, Debug)] + enum MessageBI { + _One, Two, - Four, + _Three, + } + + #[derive(Clone, PartialEq, Debug)] + enum MessageBO { + Un, + _Deux, + Trois, } - fn translate_ab(msg: MessageA) -> Option { + fn translate_ab(msg: MessageAO) -> Option { match msg { - MessageA::Two => Some(MessageB::Deux), + MessageAO::Deux => Some(MessageBI::Two), _ => None, } } - fn translate_ba(msg: MessageB) -> Option { + fn translate_ba(msg: MessageBO) -> Option { match msg { - MessageB::Un => Some(MessageA::One), + MessageBO::Un => Some(MessageAI::One), _ => None, } } - #[derive(Clone, PartialEq, Debug)] - enum MessageB { - Un, - Deux, - Trois, - } - #[derive(Error, Debug)] enum ConvertError { #[error("Wrong conversion")] @@ -783,114 +1136,102 @@ mod tests { #[tokio::test] async fn link() -> Result<(), ConvertError> { - start_logging_filter_level(vec![], log::LevelFilter::Trace); - - let mut broker_a: Broker = Broker::new(); - let (tap_a_tx, tap_a_rx) = channel::(); - broker_a.add_subsystem(Subsystem::TapSync(tap_a_tx)).await?; - let mut broker_b: Broker = Broker::new(); - let (tap_b_tx, tap_b_rx) = channel::(); - broker_b.add_subsystem(Subsystem::TapSync(tap_b_tx)).await?; - - broker_b - .link_bi( - broker_a.clone(), + start_logging_filter_level(vec![], log::LevelFilter::Info); + + let mut broker_a: Broker = Broker::new(); + let (tap_a_in, _) = broker_a.get_tap_in_sync().await?; + let mut broker_b: Broker = Broker::new(); + let (tap_b_in, _) = broker_b.get_tap_in_sync().await?; + + broker_a + .add_translator_link( + broker_b.clone(), Box::new(translate_ab), Box::new(translate_ba), ) .await?; - broker_a.settle_msg(MessageA::Two).await?; - if let Ok(msg) = tap_b_rx.try_recv() { - assert_eq!(MessageB::Deux, msg); + broker_a.settle_msg_out(MessageAO::Deux).await?; + if let Ok(msg) = tap_b_in.try_recv() { + assert_eq!(MessageBI::Two, msg); } else { return Err(ConvertError::Conversion("A to B".to_string())); } - broker_b.settle_msg(MessageB::Un).await?; - if let Ok(msg) = tap_a_rx.try_recv() { - assert_eq!(MessageA::One, msg); + broker_b.settle_msg_out(MessageBO::Un).await?; + if let Ok(msg) = tap_a_in.try_recv() { + assert_eq!(MessageAI::One, msg); } else { return Err(ConvertError::Conversion("B to A".to_string())); } - broker_a.settle_msg(MessageA::Four).await?; + broker_a.settle_msg_out(MessageAO::Trois).await?; // Remove the untranslated message - tap_a_rx.recv().unwrap(); - assert!(tap_b_rx.try_recv().is_err()); - broker_b.settle_msg(MessageB::Trois).await?; + assert!(tap_b_in.try_recv().is_err()); + broker_b.settle_msg_out(MessageBO::Trois).await?; // Remove the untranslated message - tap_b_rx.recv().unwrap(); - assert!(tap_a_rx.try_recv().is_err()); + assert!(tap_a_in.try_recv().is_err()); Ok(()) } - // Test that a forwarding-loop doesn't block the system. - #[tokio::test] - async fn link_infinite() -> Result<(), Box> { - start_logging_filter_level(vec![], log::LevelFilter::Trace); - - let mut a = Broker::::new(); - let mut b = Broker::::new(); - - a.link_bi( - b.clone(), - Box::new(|msg| Some(msg)), - Box::new(|msg| Some(msg)), - ) - .await?; - - let (tap_a, _) = a.get_tap_sync().await?; - let (tap_b, _) = b.get_tap_sync().await?; - a.settle_msg(MessageA::One).await?; - assert!(tap_a.try_recv().is_ok()); - assert!(tap_b.try_recv().is_err()); - - Ok(()) - } - - async fn do_something(from_broker: Vec) -> Vec<(Destination, MessageA)> { + async fn _do_something(from_broker: Vec) -> Vec<(Destination, MessageAO)> { from_broker .iter() - .filter(|msg| msg == &&MessageA::One) - .map(|_| (Destination::All, MessageA::Two)) + .filter(|msg| msg == &&MessageAI::One) + .map(|_| (Destination::All, MessageAO::_Un)) .collect() } - #[tokio::test] - async fn test_callback() -> Result<(), Box> { - start_logging_filter_level(vec![], log::LevelFilter::Trace); - - let mut b = Broker::new(); - b.add_subsystem(Subsystem::Callback(Box::new(|b_in| { - Box::pin(do_something(b_in)) - }))) - .await?; - let tap = b.get_tap_sync().await?; - b.settle_msg_dest(Destination::NoTap, MessageA::One).await?; - assert_eq!(MessageA::Two, tap.0.recv()?); - Ok(()) + #[derive(Clone, std::fmt::Debug, PartialEq)] + enum MessageAIO { + Input(MessageAI), + _Output(MessageAO), } - async fn test_translator_cb(msg: MessageA) -> bool { - matches!(msg, MessageA::One) + impl TranslateInto for MessageAO { + fn translate(self) -> Option { + Some(match self { + MessageAO::_Un => MessageAIO::Input(MessageAI::One), + MessageAO::Deux => MessageAIO::Input(MessageAI::_Two), + MessageAO::Trois => MessageAIO::Input(MessageAI::_Three), + }) + } } - #[tokio::test] - async fn test_translator_callback() -> Result<(), Box> { - start_logging_filter_level(vec![], log::LevelFilter::Trace); - - let mut b = Broker::new(); - b.add_subsystem(Subsystem::TranslatorCallback(Box::new(|_, b_in| { - Box::pin(test_translator_cb(b_in)) - }))) - .await?; - let tap = b.get_tap_sync().await?; - b.settle_msg(MessageA::One).await?; - assert!(tap.0.try_recv().is_err()); - b.settle_msg(MessageA::Two).await?; - assert_eq!(MessageA::Two, tap.0.recv()?); - Ok(()) + impl TranslateFrom for MessageAI { + fn translate(value: MessageAIO) -> Option { + if let MessageAIO::_Output(out) = value { + Some(match out { + MessageAO::_Un => MessageAI::One, + MessageAO::Deux => MessageAI::_Two, + MessageAO::Trois => MessageAI::_Three, + }) + } else { + None + } + } } + + // #[tokio::test] + // async fn test_broker() -> Result<(), BrokerError> { + // start_logging_filter_level(vec![], log::LevelFilter::Info); + + // let mut bio = Broker::::new(); + // let mut b = broker::Broker::::new(); + // bio.link_broker(b.clone()).await?; + + // let (bio_in, _) = bio.get_tap_in_sync().await?; + // let (b_tap, _) = b.get_tap_sync().await?; + + // bio.settle_msg_out(MessageAO::Un).await?; + // assert_eq!( + // MessageAIO::Input(MessageAI::One), + // b_tap.recv().expect("receive b_tap") + // ); + + // b.settle_msg(MessageAIO::Output(MessageAO::Deux)).await?; + // assert_eq!(MessageAI::_Two, bio_in.recv().expect("receive bio_out")); + // Ok(()) + // } } diff --git a/flarch/src/data_storage.rs b/flarch/src/data_storage.rs index a0366b3f..2631a485 100644 --- a/flarch/src/data_storage.rs +++ b/flarch/src/data_storage.rs @@ -1,21 +1,21 @@ +use async_trait::async_trait; use std::{ collections::HashMap, sync::{Arc, Mutex}, }; use thiserror::Error; -use async_trait::async_trait; -#[cfg(all(target_family="wasm", feature = "node"))] +#[cfg(all(target_family = "wasm", feature = "node"))] mod node; -#[cfg(all(target_family="wasm", feature = "node"))] +#[cfg(all(target_family = "wasm", feature = "node"))] pub use node::*; -#[cfg(all(target_family="wasm", not(feature = "node")))] +#[cfg(all(target_family = "wasm", not(feature = "node")))] mod wasm; -#[cfg(all(target_family="wasm", not(feature = "node")))] +#[cfg(all(target_family = "wasm", not(feature = "node")))] pub use wasm::*; -#[cfg(target_family="unix")] +#[cfg(target_family = "unix")] mod libc; -#[cfg(target_family="unix")] +#[cfg(target_family = "unix")] pub use libc::*; #[derive(Error, Debug)] @@ -33,7 +33,19 @@ pub trait DataStorage { fn remove(&mut self, key: &str) -> Result<(), StorageError>; - fn clone(&self) -> Box; + fn clone_box(&self) -> Box; +} + +impl Clone for Box { + fn clone(&self) -> Box { + self.clone_box() + } +} + +impl std::fmt::Debug for Box{ + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.debug_tuple("Box").finish() + } } /// A temporary DataStorage that keeps the data only during its lifetime. @@ -42,9 +54,16 @@ pub struct DataStorageTemp { } impl DataStorageTemp { - pub fn new( - ) -> Self { - Self { kvs: Arc::new(Mutex::new(HashMap::new()))} + pub fn new() -> Self { + Self { + kvs: Arc::new(Mutex::new(HashMap::new())), + } + } + + pub fn new_box() -> Box { + Box::new(Self { + kvs: Arc::new(Mutex::new(HashMap::new())), + }) } } @@ -79,8 +98,10 @@ impl DataStorage for DataStorageTemp { Ok(()) } - fn clone(&self) -> Box{ - Box::new(Self{kvs: Arc::clone(&self.kvs)}) + fn clone_box(&self) -> Box { + Box::new(Self { + kvs: Arc::clone(&self.kvs), + }) } } @@ -89,12 +110,12 @@ mod tests { use super::*; #[test] - fn test_storage() -> Result<(), Box>{ + fn test_storage() -> Result<(), Box> { let mut ds = DataStorageTemp::new(); ds.set("two", "three")?; - let ds2 = ds.clone(); + let ds2 = ds.clone_box(); assert_eq!("three", ds2.get("two")?); Ok(()) } -} \ No newline at end of file +} diff --git a/flarch/src/data_storage/libc.rs b/flarch/src/data_storage/libc.rs index 2494306c..6faa9171 100644 --- a/flarch/src/data_storage/libc.rs +++ b/flarch/src/data_storage/libc.rs @@ -76,7 +76,7 @@ impl DataStorage for DataStorageFile { Ok(()) } - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(DataStorageFile { dir: self.dir.clone(), base: self.base.clone(), diff --git a/flarch/src/data_storage/node.rs b/flarch/src/data_storage/node.rs index 400dcf14..d11a5e79 100644 --- a/flarch/src/data_storage/node.rs +++ b/flarch/src/data_storage/node.rs @@ -61,7 +61,7 @@ impl DataStorage for DataStorageNode { Ok(()) } - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(Self { base: self.base.clone(), }) diff --git a/flarch/src/data_storage/wasm.rs b/flarch/src/data_storage/wasm.rs index 305ff7e3..d1e5c3ec 100644 --- a/flarch/src/data_storage/wasm.rs +++ b/flarch/src/data_storage/wasm.rs @@ -54,7 +54,7 @@ impl DataStorage for DataStorageLocal { .map_err(|e| StorageError::Underlying(e.as_string().unwrap())) } - fn clone(&self) -> Box { + fn clone_box(&self) -> Box { Box::new(DataStorageLocal {base: self.base.clone()}) } } diff --git a/flarch/src/lib.rs b/flarch/src/lib.rs index edab40c6..27f2cdc9 100644 --- a/flarch/src/lib.rs +++ b/flarch/src/lib.rs @@ -1,3 +1,4 @@ +// pub mod broker; pub mod broker; pub mod data_storage; pub mod nodeids; @@ -9,7 +10,7 @@ pub fn start_logging() { } pub fn start_logging_filter(filters: Vec<&str>) { - start_logging_filter_level(filters, log::LevelFilter::Debug); + start_logging_filter_level(filters, log::LevelFilter::Info); } pub fn start_logging_filter_level(filters: Vec<&str>, level: log::LevelFilter) { @@ -27,5 +28,18 @@ pub fn start_logging_filter_level(filters: Vec<&str>, level: log::LevelFilter) { } } -pub use flarch_macro::platform_async_trait; -pub use rand::random; \ No newline at end of file +pub fn log_backtrace() -> String { + let backtrace = std::backtrace::Backtrace::force_capture(); + let backtrace = btparse::deserialize(&backtrace).unwrap(); + backtrace + .frames + .iter() + .skip(3) + .map(|f| format!("{f:?}")) + .take(9) + .collect::>() + .join("\n") +} + +pub use flmacro::platform_async_trait; +pub use rand::random; diff --git a/flarch/src/nodeids.rs b/flarch/src/nodeids.rs index cec79231..c61c8f74 100644 --- a/flarch/src/nodeids.rs +++ b/flarch/src/nodeids.rs @@ -1,7 +1,10 @@ +use bytes::Bytes; use rand::random; use serde::{Deserialize, Serialize}; use serde_with::{hex::Hex, serde_as}; use sha2::digest::{consts::U32, generic_array::GenericArray}; +use sha2::{Digest, Sha256}; +use std::collections::HashMap; use std::num::ParseIntError; use std::{fmt, str::FromStr}; use thiserror::Error; @@ -15,9 +18,8 @@ pub enum ParseError { } /// Nicely formatted 256 bit structure -// #[derive(Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] #[serde_as] -#[derive(Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[derive(Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Default)] pub struct U256(#[serde_as(as = "Hex")] [u8; 32]); impl fmt::Display for U256 { @@ -47,14 +49,73 @@ impl fmt::Debug for U256 { } } +fn to_varint(i: usize) -> Vec { + if i < 0x80 { + return vec![i as u8]; + } + let mut out = i.to_be_bytes().to_vec(); + out = out.into_iter().skip_while(|&x| x == 0).collect(); + let len = out.len(); + let mut result = vec![len as u8 | 0x80]; + result.extend(out); + result +} + impl U256 { pub fn rnd() -> U256 { U256 { 0: random() } } + pub fn hash_data(data: &[u8]) -> Self { + let mut hasher = Sha256::new(); + hasher.update(to_varint(data.len())); + hasher.update(data); + Self(hasher.finalize().into()) + } + + pub fn hash_domain_parts(domain: &str, parts: &[&[u8]]) -> Self { + let mut hasher = Sha256::new(); + hasher.update(to_varint(domain.len())); + hasher.update(domain); + hasher.update(to_varint(parts.len())); + for part in parts { + hasher.update(to_varint(part.len())); + hasher.update(part); + } + + Self(hasher.finalize().into()) + } + + pub fn hash_domain_hashmap(domain: &str, hm: &HashMap) -> Self { + let mut parts = vec![]; + for (k, v) in hm { + parts.push(rmp_serde::to_vec(k).unwrap()); + parts.push(rmp_serde::to_vec(v).unwrap()); + } + let slices: Vec<&[u8]> = parts.iter().map(|e| e.as_slice()).collect(); + Self::hash_domain_parts(domain, &slices) + } + + pub fn from_vec(domain: &str, vec: &Vec) -> Self { + let mut parts = vec![]; + for v in vec { + parts.push(rmp_serde::to_vec(v).unwrap()); + } + let slices: Vec<&[u8]> = parts.iter().map(|e| e.as_slice()).collect(); + Self::hash_domain_parts(domain, &slices) + } + pub fn to_bytes(self) -> [u8; 32] { self.0 } + + pub fn bytes(&self) -> Bytes { + Bytes::copy_from_slice(self.as_ref()) + } + + pub fn zero() -> U256 { + U256 { 0: [0; 32] } + } } impl FromStr for U256 { @@ -212,6 +273,20 @@ impl From<&Vec> for NodeIDs { } } +impl fmt::Display for NodeIDs { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_fmt(format_args!( + "[{}]", + &self + .0 + .iter() + .map(|id| id.to_string()) + .collect::>() + .join(","), + )) + } +} + #[cfg(test)] mod tests { use crate::start_logging; diff --git a/flarch/src/web_rtc/libc/web_rtc_setup.rs b/flarch/src/web_rtc/libc/web_rtc_setup.rs index 5216e8d8..0d974aa6 100644 --- a/flarch/src/web_rtc/libc/web_rtc_setup.rs +++ b/flarch/src/web_rtc/libc/web_rtc_setup.rs @@ -3,32 +3,40 @@ use std::sync::{ Arc, }; -use crate::broker::{Broker, Subsystem, SubsystemHandler}; use async_trait::async_trait; use futures::lock::Mutex; use webrtc::{ api::{ - interceptor_registry::register_default_interceptors, media_engine::MediaEngine, setting_engine::SettingEngine, APIBuilder - }, data_channel::{data_channel_message::DataChannelMessage, RTCDataChannel}, ice::mdns::MulticastDnsMode, ice_transport::{ + interceptor_registry::register_default_interceptors, media_engine::MediaEngine, + setting_engine::SettingEngine, APIBuilder, + }, + data_channel::{data_channel_message::DataChannelMessage, RTCDataChannel}, + ice::mdns::MulticastDnsMode, + ice_transport::{ ice_candidate::{RTCIceCandidate, RTCIceCandidateInit}, ice_connection_state::RTCIceConnectionState, ice_credential_type::RTCIceCredentialType, ice_server::RTCIceServer, - }, interceptor::registry::Registry, peer_connection::{ + }, + interceptor::registry::Registry, + peer_connection::{ configuration::RTCConfiguration, peer_connection_state::RTCPeerConnectionState, sdp::{sdp_type::RTCSdpType, session_description::RTCSessionDescription}, RTCPeerConnection, - } + }, }; -use crate::web_rtc::{ - connection::{ConnectionConfig, HostLogin}, - messages::{ - ConnType, ConnectionStateMap, DataChannelState, PeerMessage, SetupError, SignalingState, - WebRTCInput, WebRTCMessage, WebRTCOutput, WebRTCSpawner, +use crate::{ + broker::{Broker, SubsystemHandler}, + web_rtc::{ + connection::{ConnectionConfig, HostLogin}, + messages::{ + ConnType, ConnectionStateMap, DataChannelState, PeerMessage, SetupError, + SignalingState, WebRTCInput, WebRTCOutput, WebRTCSpawner, + }, + node_connection::Direction, }, - node_connection::Direction, }; fn get_ice_server(host: HostLogin) -> RTCIceServer { @@ -48,7 +56,7 @@ fn get_ice_server(host: HostLogin) -> RTCIceServer { pub struct WebRTCConnectionSetupLibc { connection: RTCPeerConnection, rtc_data: Arc>>>, - broker: Broker, + broker: Broker, // While the connection is not up, queue up messages in here. queue: Vec, direction: Option, @@ -59,7 +67,7 @@ pub struct WebRTCConnectionSetupLibc { impl WebRTCConnectionSetupLibc { pub async fn new_box( connection_cfg: ConnectionConfig, - ) -> Result, SetupError> { + ) -> Result, SetupError> { let mut web_rtc = Box::new(WebRTCConnectionSetupLibc { connection: Self::make_connection(connection_cfg.clone()).await?, rtc_data: Arc::new(Mutex::new(None)), @@ -73,7 +81,7 @@ impl WebRTCConnectionSetupLibc { web_rtc.setup_connection().await?; let mut broker = web_rtc.broker.clone(); - broker.add_subsystem(Subsystem::Handler(web_rtc)).await?; + broker.add_handler(web_rtc).await?; Ok(broker) } @@ -138,9 +146,7 @@ impl WebRTCConnectionSetupLibc { if let Some(ice) = ice_op { let ice_str = ice.to_json().unwrap().candidate; broker_cl - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Setup( - PeerMessage::IceCandidate(ice_str), - ))) + .emit_msg_out(WebRTCOutput::Setup(PeerMessage::IceCandidate(ice_str))) .err() .map(|e| log::warn!("Ice candidate queued but not processed: {:?}", e)); } @@ -159,18 +165,16 @@ impl WebRTCConnectionSetupLibc { let mut broker_cl = broker_cl.clone(); Box::pin(async move { - let msg = match s { + match s { RTCPeerConnectionState::Disconnected | RTCPeerConnectionState::Failed | RTCPeerConnectionState::Closed => { - WebRTCMessage::Output(WebRTCOutput::Disconnected) + broker_cl.emit_msg_out(WebRTCOutput::Disconnected) } - _ => WebRTCMessage::Input(WebRTCInput::UpdateState), - }; - broker_cl - .emit_msg(msg) - .err() - .map(|e| log::warn!("UpdateState queued but not processed: {:?}", e)); + _ => broker_cl.emit_msg_in(WebRTCInput::UpdateState), + } + .err() + .map(|e| log::warn!("UpdateState queued but not processed: {:?}", e)); }) }, )); @@ -367,7 +371,7 @@ impl WebRTCConnectionSetupLibc { async fn register_data_channel( rtc_data: Arc>>>, data_channel: Arc, - broker: Broker, + broker: Broker, resets: Arc, ) { let mut broker_cl = broker.clone(); @@ -382,11 +386,11 @@ impl WebRTCConnectionSetupLibc { log::trace!("DataChannel is opened"); Box::pin(async move { broker_cl - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Connected)) + .emit_msg_out(WebRTCOutput::Connected) .err() .map(|e| log::warn!("Connected queued but not processed: {:?}", e)); broker_cl - .emit_msg(WebRTCMessage::Input(WebRTCInput::Flush)) + .emit_msg_in(WebRTCInput::Flush) .err() .map(|e| log::warn!("Flush queued but not processed: {:?}", e)); }) @@ -400,7 +404,7 @@ impl WebRTCConnectionSetupLibc { let mut broker = broker.clone(); Box::pin(async move { broker - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Text(msg_str))) + .emit_msg_out(WebRTCOutput::Text(msg_str)) .err() .map(|e| log::warn!("Text queued but not processed: {:?}", e)); }) @@ -413,21 +417,19 @@ impl WebRTCConnectionSetupLibc { rtc_data.lock().await.replace(data_channel); } - async fn msg_in(&mut self, msg: WebRTCInput) -> Result, SetupError> { + async fn msg_in(&mut self, msg: WebRTCInput) -> Result, SetupError> { match msg { WebRTCInput::Text(s) => self.send(s).await?, WebRTCInput::Setup(s) => { if let Some(msg) = self.setup(s).await? { - return Ok(Some(WebRTCMessage::Output(WebRTCOutput::Setup(msg)))); + return Ok(Some(WebRTCOutput::Setup(msg))); } } WebRTCInput::Flush => { self.send_queue().await?; } WebRTCInput::UpdateState => { - return Ok(Some(WebRTCMessage::Output(WebRTCOutput::State( - self.get_state().await?, - )))); + return Ok(Some(WebRTCOutput::State(self.get_state().await?))); } WebRTCInput::Disconnect => { if let Err(e) = self.reset().await { @@ -477,17 +479,15 @@ impl WebRTCConnectionSetupLibc { } #[async_trait] -impl SubsystemHandler for WebRTCConnectionSetupLibc { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for WebRTCConnectionSetupLibc { + async fn messages(&mut self, msgs: Vec) -> Vec { let mut out = vec![]; for msg in msgs { - if let WebRTCMessage::Input(msg_in) = msg { - match self.msg_in(msg_in.clone()).await { - Ok(Some(msg)) => out.push(msg), - Ok(None) => {} - Err(e) => { - log::trace!("{:p} Error processing message {msg_in:?}: {:?}", self, e); - } + match self.msg_in(msg.clone()).await { + Ok(Some(msg)) => out.push(msg), + Ok(None) => {} + Err(e) => { + log::trace!("{:p} Error processing message {msg:?}: {:?}", self, e); } } } diff --git a/flarch/src/web_rtc/libc/web_socket_client.rs b/flarch/src/web_rtc/libc/web_socket_client.rs index e3e5fbf8..ef311bf6 100644 --- a/flarch/src/web_rtc/libc/web_socket_client.rs +++ b/flarch/src/web_rtc/libc/web_socket_client.rs @@ -5,20 +5,18 @@ use std::pin::Pin; use tokio::net::TcpStream; use tokio_tungstenite::{connect_async, tungstenite, MaybeTlsStream, WebSocketStream}; -use crate::broker::{Broker, Subsystem, SubsystemHandler}; +use crate::broker::{Broker, SubsystemHandler}; use crate::tasks::wait_ms; -use crate::web_rtc::websocket::{ - WSClientInput, WSClientMessage, WSClientOutput, WSError, WSSError, -}; +use crate::web_rtc::websocket::{BrokerWSClient, WSClientIn, WSClientOut, WSError, WSSError}; pub struct WebSocketClient { url: String, write: Option>, tungstenite::Message>>, - broker: Broker, + broker: BrokerWSClient, } impl WebSocketClient { - pub async fn connect(url: &str) -> Result, WSSError> { + pub async fn connect(url: &str) -> Result { let wsb = WebSocketClient { url: url.to_string(), write: None, @@ -26,9 +24,9 @@ impl WebSocketClient { }; let mut broker = wsb.broker.clone(); broker - .add_subsystem(Subsystem::Handler(Box::new(wsb))) + .add_handler(Box::new(wsb)) .await?; - broker.emit_msg(WSClientMessage::Input(WSClientInput::Connect))?; + broker.emit_msg_in(WSClientIn::Connect)?; Ok(broker) } @@ -42,7 +40,7 @@ impl WebSocketClient { Ok(msg) => { if msg.is_text() { broker_cl - .emit_msg(WSClientOutput::Message(msg.to_string()).into()) + .emit_msg_out(WSClientOut::Message(msg.to_string())) .expect("Failed to emit message"); } } @@ -50,7 +48,7 @@ impl WebSocketClient { log::warn!("Closing connection because of error: {:?}", e); log::warn!("Trying to reconnect"); broker_cl - .emit_msg(WSClientMessage::Input(WSClientInput::Connect)) + .emit_msg_in(WSClientIn::Connect) .expect("tried to reconnect"); return; } @@ -77,43 +75,41 @@ impl WebSocketClient { } #[async_trait] -impl SubsystemHandler for WebSocketClient { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for WebSocketClient { + async fn messages(&mut self, msgs: Vec) -> Vec { for msg in msgs { - if let WSClientMessage::Input(msg_in) = msg { - match msg_in { - WSClientInput::Message(msg) => { - if let Some(mut write) = self.write.as_mut() { - Pin::new(&mut write) - .start_send(tungstenite::Message::text(msg)) - .map_err(|e| WSError::Underlying(e.to_string())) - .expect("Error sending message"); - Pin::new(&mut write) - .flush() - .await - .map_err(|e| WSError::Underlying(e.to_string())) - .expect("msg flush error"); - } else { - log::warn!("Tried to write a message to a closed connection"); - if let Err(e) = self.connect_ws().await { - log::error!("Couldn't connect: {e}"); - } - } - } - WSClientInput::Disconnect => { - if let Some(mut write) = self.write.take() { - write.close().await.unwrap(); - } else { - log::warn!("Trying to disconnect a disconnected connection"); - } - return vec![WSClientOutput::Disconnect.into()]; - } - WSClientInput::Connect => { + match msg { + WSClientIn::Message(msg) => { + if let Some(mut write) = self.write.as_mut() { + Pin::new(&mut write) + .start_send(tungstenite::Message::text(msg)) + .map_err(|e| WSError::Underlying(e.to_string())) + .expect("Error sending message"); + Pin::new(&mut write) + .flush() + .await + .map_err(|e| WSError::Underlying(e.to_string())) + .expect("msg flush error"); + } else { + log::warn!("Tried to write a message to a closed connection"); if let Err(e) = self.connect_ws().await { log::error!("Couldn't connect: {e}"); } } } + WSClientIn::Disconnect => { + if let Some(mut write) = self.write.take() { + write.close().await.unwrap(); + } else { + log::warn!("Trying to disconnect a disconnected connection"); + } + return vec![WSClientOut::Disconnect]; + } + WSClientIn::Connect => { + if let Err(e) = self.connect_ws().await { + log::error!("Couldn't connect: {e}"); + } + } } } vec![] diff --git a/flarch/src/web_rtc/libc/web_socket_server.rs b/flarch/src/web_rtc/libc/web_socket_server.rs index ea69568b..f4e1bd90 100644 --- a/flarch/src/web_rtc/libc/web_socket_server.rs +++ b/flarch/src/web_rtc/libc/web_socket_server.rs @@ -13,9 +13,10 @@ use tokio::{ }; use tokio_tungstenite::{accept_async, tungstenite::Message, WebSocketStream}; -use crate::broker::{Broker, Subsystem, SubsystemHandler}; -use crate::web_rtc::websocket::{ - WSError, WSSError, WSServerInput, WSServerMessage, WSServerOutput, +use crate::web_rtc::websocket::{WSError, WSSError, WSServerIn, WSServerOut}; +use crate::{ + broker::{Broker, SubsystemHandler}, + web_rtc::websocket::BrokerWSServer, }; pub struct WebSocketServer { @@ -24,7 +25,7 @@ pub struct WebSocketServer { } impl WebSocketServer { - pub async fn new(port: u16) -> Result, WSSError> { + pub async fn new(port: u16) -> Result { let server = TcpListener::bind(format!("0.0.0.0:{}", port)).await?; let connections = Arc::new(Mutex::new(Vec::new())); let connections_cl = Arc::clone(&connections); @@ -40,9 +41,7 @@ impl WebSocketServer { log::trace!("Got new connection"); connections_cl.lock().await.push(conn); broker_cl - .emit_msg(WSServerMessage::Output(WSServerOutput::NewConnection( - connection_id, - ))) + .emit_msg_out(WSServerOut::NewConnection(connection_id)) .expect("Error sending connect message"); } Err(e) => log::error!("Error while getting connection: {:?}", e), @@ -53,10 +52,10 @@ impl WebSocketServer { }); broker - .add_subsystem(Subsystem::Handler(Box::new(WebSocketServer { + .add_handler(Box::new(WebSocketServer { connections, conn_thread, - }))) + })) .await?; Ok(broker) @@ -64,34 +63,32 @@ impl WebSocketServer { } #[async_trait] -impl SubsystemHandler for WebSocketServer { - async fn messages(&mut self, from_broker: Vec) -> Vec { +impl SubsystemHandler for WebSocketServer { + async fn messages(&mut self, from_broker: Vec) -> Vec { for msg in from_broker { - if let WSServerMessage::Input(msg_in) = msg { - match msg_in { - WSServerInput::Message(id, msg) => { - let mut connections = self.connections.lock().await; - if let Some(conn) = connections.get_mut(id) { - if let Err(e) = conn.send(msg).await { - log::error!("Error while sending: {e}"); - conn.close(); - connections.remove(id); - } - } - } - WSServerInput::Close(id) => { - let mut connections = self.connections.lock().await; - if let Some(conn) = connections.get_mut(id) { + match msg { + WSServerIn::Message(id, msg) => { + let mut connections = self.connections.lock().await; + if let Some(conn) = connections.get_mut(id) { + if let Err(e) = conn.send(msg).await { + log::error!("Error while sending: {e}"); conn.close(); connections.remove(id); } } - WSServerInput::Stop => { - log::warn!("Stopping thread"); - self.conn_thread.abort(); - return vec![WSServerMessage::Output(WSServerOutput::Stopped)]; + } + WSServerIn::Close(id) => { + let mut connections = self.connections.lock().await; + if let Some(conn) = connections.get_mut(id) { + conn.close(); + connections.remove(id); } } + WSServerIn::Stop => { + log::trace!("Stopping thread"); + self.conn_thread.abort(); + return vec![WSServerOut::Stopped]; + } } } vec![] @@ -106,7 +103,7 @@ pub struct WSConnection { impl WSConnection { async fn new( stream: TcpStream, - broker: Broker, + broker: BrokerWSServer, id: usize, ) -> Result { let websocket = accept_async(stream) @@ -124,7 +121,7 @@ impl WSConnection { } async fn loop_read( - mut broker: Broker, + mut broker: BrokerWSServer, mut ws: SplitStream>, mut rx: oneshot::Receiver, id: usize, @@ -134,7 +131,7 @@ impl WSConnection { select! { _ = (&mut rx) => { broker - .emit_msg(WSServerMessage::Output(WSServerOutput::Disconnection(id))) + .emit_msg_out(WSServerOut::Disconnection(id)) .expect("While sending message to broker."); return; }, @@ -143,24 +140,24 @@ impl WSConnection { if let Some(out) = match msg_ws { Ok(msg) => match msg { Message::Text(s) => { - Some(WSServerMessage::Output(WSServerOutput::Message(id, s))) + Some(WSServerOut::Message(id, s)) } Message::Close(_) => { - Some(WSServerMessage::Output(WSServerOutput::Disconnection(id))) + Some(WSServerOut::Disconnection(id)) } _ => None, }, Err(e) => { log::warn!("Closing connection because of error: {e:?}"); - Some(WSServerMessage::Output(WSServerOutput::Disconnection(id))) + Some(WSServerOut::Disconnection(id)) } } { broker - .emit_msg(out.clone()) + .emit_msg_out(out.clone()) .expect("While sending message to broker."); if matches!( out, - WSServerMessage::Output(WSServerOutput::Disconnection(_)) + WSServerOut::Disconnection(_) ) { return; } @@ -191,64 +188,70 @@ impl WSConnection { mod tests { use super::*; use crate::broker::Destination; - use crate::start_logging; + use crate::start_logging_filter_level; + use crate::tasks::wait_ms; use crate::web_rtc::web_socket_client::WebSocketClient; - use crate::web_rtc::websocket::{WSClientInput, WSClientMessage, WSClientOutput}; + use crate::web_rtc::websocket::{BrokerWSClient, WSClientIn, WSClientOut}; + use std::error::Error; use std::sync::mpsc::Receiver; async fn send_client_server( - client: &mut Broker, - server_tap: &Receiver, + client: &mut BrokerWSClient, + server_tap: &Receiver, ch_index: usize, txt: String, ) { client - .emit_msg_dest( - Destination::NoTap, - WSClientInput::Message(txt.clone()).into(), - ) + .settle_msg_in_dest(Destination::NoTap, WSClientIn::Message(txt.clone())) + .await .unwrap(); assert_eq!( server_tap.recv().unwrap(), - WSServerMessage::Output(WSServerOutput::Message(ch_index, txt)) + WSServerOut::Message(ch_index, txt) ); } async fn send_server_client( - server: &mut Broker, - client_tap: &Receiver, + server: &mut BrokerWSServer, + client_tap: &Receiver, ch_index: usize, txt: String, ) { server - .emit_msg_dest( + .settle_msg_in_dest( Destination::NoTap, - WSServerInput::Message(ch_index, txt.clone()).into(), + WSServerIn::Message(ch_index, txt.clone()), ) + .await .unwrap(); - assert_eq!( - client_tap.recv().unwrap(), - WSClientOutput::Message(txt).into() - ); + assert_eq!(client_tap.recv().unwrap(), WSClientOut::Message(txt)); } #[tokio::test(flavor = "multi_thread")] - async fn test_server() { - start_logging(); + async fn test_server() -> Result<(), Box> { + start_logging_filter_level(vec![], log::LevelFilter::Info); let mut server = WebSocketServer::new(8080).await.unwrap(); - let (server_tap, _) = server.get_tap_sync().await.unwrap(); + let (server_tap, tap0) = server.get_tap_out_sync().await.unwrap(); + + wait_ms(100).await; let mut client1 = WebSocketClient::connect("ws://localhost:8080") .await .unwrap(); - let (client1_tap, _) = client1.get_tap_sync().await.unwrap(); - log::debug!("Server reply from client 1: {:?}", server_tap.recv()); + let (client1_tap, tap1) = client1.get_tap_out_sync().await.unwrap(); + let reply = server_tap.recv(); + log::debug!("Server reply from client 1: {:?}", reply); + + wait_ms(100).await; let mut client2 = WebSocketClient::connect("ws://localhost:8080") .await .unwrap(); - let (client2_tap, _) = client2.get_tap_sync().await.unwrap(); - log::debug!("Server reply from client 2: {:?}", server_tap.recv()); + let (client2_tap, _) = client2.get_tap_out_sync().await.unwrap(); + let reply = server_tap.recv(); + log::debug!("Server reply from client 2: {:?}", reply); + + wait_ms(100).await; for _ in 1..=2 { send_client_server(&mut client1, &server_tap, 0, "Hello 1".to_string()).await; @@ -258,10 +261,13 @@ mod tests { send_server_client(&mut server, &client2_tap, 1, "there 2".to_string()).await; } - client1.emit_msg(WSClientInput::Disconnect.into()).unwrap(); - client2.emit_msg(WSClientInput::Disconnect.into()).unwrap(); - server - .emit_msg(WSServerMessage::Input(WSServerInput::Stop)) - .unwrap(); + client1.emit_msg_in(WSClientIn::Disconnect).unwrap(); + client2.emit_msg_in(WSClientIn::Disconnect).unwrap(); + server.emit_msg_in(WSServerIn::Stop).unwrap(); + + server.remove_subsystem(tap0).await?; + client1.remove_subsystem(tap1).await?; + + Ok(()) } } diff --git a/flarch/src/web_rtc/messages.rs b/flarch/src/web_rtc/messages.rs index 46b3ccf5..b4ace34a 100644 --- a/flarch/src/web_rtc/messages.rs +++ b/flarch/src/web_rtc/messages.rs @@ -3,14 +3,17 @@ //! This is a list of messages that are used by the [`crate::web_rtc::WebRTCConn`] and //! [`crate::web_rtc::node_connection::NodeConnection`] brokers to communicate with the libc and wasm implementations //! of the WebRTC subsystem. -//! Both the wasm and the libc implementation for the WebRTC system return a [`Broker`] +//! Both the wasm and the libc implementation for the WebRTC system return a [`Broker`] //! that is then given to the [`crate::web_rtc::WebRTCConn`]. use futures::{channel::oneshot::Canceled, Future}; use serde::{Deserialize, Serialize}; use std::sync::mpsc::RecvError; use thiserror::Error; -use crate::{broker::{Broker, BrokerError}, nodeids::NodeID}; +use crate::{ + broker::{BrokerError, Broker}, + nodeids::NodeID, +}; use super::node_connection::Direction; @@ -38,12 +41,20 @@ pub enum SetupError { } #[derive(Debug, Clone, PartialEq)] -/// Messages used in the WebRTC subsystem. -pub enum WebRTCMessage { - /// Sent from the WebRTC subsystem - Output(WebRTCOutput), - /// Commands for the WebRTC subsystem - Input(WebRTCInput), +/// Command for the WebRTC subsystem +pub enum WebRTCInput { + /// Send a text message + Text(String), + /// Treat a setup message + Setup(PeerMessage), + /// Flush all pending messages + Flush, + /// Send the current state of the connection + UpdateState, + /// Try to reconnect, or throw an error if incoming connection + Reset, + /// Disconnect this node + Disconnect, } #[derive(Debug, Clone, PartialEq)] @@ -63,36 +74,22 @@ pub enum WebRTCOutput { Error(String), } -#[derive(Debug, Clone, PartialEq)] -/// Command for the WebRTC subsystem -pub enum WebRTCInput { - /// Send a text message - Text(String), - /// Treat a setup message - Setup(PeerMessage), - /// Flush all pending messages - Flush, - /// Send the current state of the connection - UpdateState, - /// Try to reconnect, or throw an error if incoming connection - Reset, - /// Disconnect this node - Disconnect, -} - -#[cfg(target_family="unix")] -/// The spawner will create a new [`Broker`] ready to handle either an incoing +#[cfg(target_family = "unix")] +/// The spawner will create a new [`Broker`] ready to handle either an incoing /// or an outgoing connection. pub type WebRTCSpawner = Box< - dyn Fn() -> Box, SetupError>> + Unpin + Send> - + Send + dyn Fn() -> Box< + dyn Future, SetupError>> + + Unpin + + Send, + > + Send + Sync, >; -#[cfg(target_family="wasm")] -/// The spawner will create a new [`Broker`] ready to handle either an incoing +#[cfg(target_family = "wasm")] +/// The spawner will create a new [`Broker`] ready to handle either an incoing /// or an outgoing connection. pub type WebRTCSpawner = - Box Box, SetupError>> + Unpin>>; + Box Box, SetupError>> + Unpin>>; #[derive(PartialEq, Debug, Clone, Copy, Serialize, Deserialize)] /// How the current connection is being setup. diff --git a/flarch/src/web_rtc/mod.rs b/flarch/src/web_rtc/mod.rs index 40b3c5d6..2a908b08 100644 --- a/flarch/src/web_rtc/mod.rs +++ b/flarch/src/web_rtc/mod.rs @@ -17,16 +17,16 @@ use std::collections::HashMap; -use flarch_macro::platform_async_trait; +use flmacro::platform_async_trait; use crate::{ - broker::{Broker, BrokerError, Subsystem, SubsystemHandler, Translate}, + broker::{BrokerError, Broker, SubsystemHandler}, nodeids::NodeID, }; use self::{ messages::WebRTCSpawner, - node_connection::{NCError, NCInput, NCMessage, NCOutput, NodeConnection}, + node_connection::{NCError, NCInput, NCOutput, NodeConnection}, }; pub mod connection; @@ -47,47 +47,53 @@ mod libc; #[cfg(target_family = "unix")] pub use libc::*; +pub type BrokerWebRTCConn = Broker; + #[derive(Debug, Clone, PartialEq)] -/// All messages for the [`WebRTCConn`] broker. -pub enum WebRTCConnMessage { - /// Messages going to the WebRTC interface - InputNC(NodeID, NCInput), - /// Messages coming from the WebRTC interface - OutputNC(NodeID, NCOutput), - /// Connection request +pub enum WebRTCConnInput { + Message(NodeID, NCInput), Connect(NodeID), - /// Disconnect this node Disconnect(NodeID), } +#[derive(Debug, Clone, PartialEq)] +pub enum WebRTCConnOutput { + Message(NodeID, NCOutput), +} + /// The actual implementation of the WebRTC connection setup. pub struct WebRTCConn { web_rtc: WebRTCSpawner, - connections: HashMap>, - broker: Broker, + connections: HashMap>, + broker: BrokerWebRTCConn, } impl WebRTCConn { /// Creates a new [`Broker`] that will accept incoming connections and set up /// new outgoing connections. - pub async fn new(web_rtc: WebRTCSpawner) -> Result, BrokerError> { + pub async fn new( + web_rtc: WebRTCSpawner, + ) -> Result { let mut br = Broker::new(); - br.add_subsystem(Subsystem::Handler(Box::new(Self { + br.add_handler(Box::new(Self { web_rtc, connections: HashMap::new(), broker: br.clone(), - }))) + })) .await?; Ok(br) } /// Ensures that a given connection exists. - async fn ensure_connection(&mut self, id: &NodeID) -> Result<(), NCError> { - if !self.connections.contains_key(id) { + async fn ensure_connection(&mut self, id: NodeID) -> Result<(), NCError> { + if !self.connections.contains_key(&id) { let mut nc = NodeConnection::new(&self.web_rtc).await?; - nc.forward(self.broker.clone(), Self::from_nc(id.clone())) - .await; - self.connections.insert(*id, nc); + self.connections.insert(id.clone(), nc.clone()); + nc.add_translator_o_to( + self.broker.clone(), + Box::new(move |msg| Some(WebRTCConnOutput::Message(id.clone(), msg))), + ) + .await?; } Ok(()) @@ -95,37 +101,28 @@ impl WebRTCConn { fn try_send(&mut self, dst: NodeID, msg: NCInput) { if let Some(conn) = self.connections.get_mut(&dst) { - conn.emit_msg(NCMessage::Input(msg.clone())) + conn.emit_msg_in(msg.clone()) .err() .map(|e| log::error!("When sending message {msg:?} to webrtc: {e:?}")); } else { log::warn!("Dropping message {:?} to unconnected node {}", msg, dst); } } - - fn from_nc(id: NodeID) -> Translate { - Box::new(move |msg| { - if let NCMessage::Output(ncmsg) = msg { - return Some(WebRTCConnMessage::OutputNC(id, ncmsg)); - } - None - }) - } } #[platform_async_trait()] -impl SubsystemHandler for WebRTCConn { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for WebRTCConn { + async fn messages(&mut self, msgs: Vec) -> Vec { for msg in msgs { match msg { - WebRTCConnMessage::InputNC(dst, msg_in) => { + WebRTCConnInput::Message(dst, msg_in) => { self.try_send(dst, msg_in); } - WebRTCConnMessage::Disconnect(dst) => { + WebRTCConnInput::Disconnect(dst) => { self.try_send(dst, NCInput::Disconnect); } - WebRTCConnMessage::Connect(dst) => { - self.ensure_connection(&dst) + WebRTCConnInput::Connect(dst) => { + self.ensure_connection(dst.clone()) .await .err() .map(|e| log::error!("When starting webrtc-connection {e:?}")); @@ -137,7 +134,6 @@ impl SubsystemHandler for WebRTCConn { ), ); } - _ => {} }; } vec![] diff --git a/flarch/src/web_rtc/node_connection.rs b/flarch/src/web_rtc/node_connection.rs index 6f9b538a..757c9139 100644 --- a/flarch/src/web_rtc/node_connection.rs +++ b/flarch/src/web_rtc/node_connection.rs @@ -10,13 +10,12 @@ //! //! _If you come here, I hope you're not trying to debug something that doesn't work. //! This code is quite obscure, and should be rewritten for the 5th time or so._ -use crate::broker::{Broker, BrokerError, Subsystem, SubsystemHandler}; -use flarch_macro::platform_async_trait; +use crate::broker::{BrokerError, Broker, SubsystemHandler}; +use flmacro::platform_async_trait; use thiserror::Error; use crate::web_rtc::messages::{ - ConnectionStateMap, DataChannelState, PeerMessage, WebRTCInput, WebRTCMessage, WebRTCOutput, - WebRTCSpawner, + ConnectionStateMap, DataChannelState, PeerMessage, WebRTCInput, WebRTCOutput, WebRTCSpawner, }; #[derive(Error, Debug)] @@ -34,16 +33,21 @@ pub enum NCError { } #[derive(Debug, Clone, PartialEq)] -/// Messages for the [`NodeConnection`] broker. -pub enum NCMessage { - /// Messages to the [`crate::web_rtc::WebRTCConn`] broker - Output(NCOutput), - /// Messages from the [`crate::web_rtc::WebRTCConn`] broker - Input(NCInput), - /// Messages to/from the incoming connection - Incoming(WebRTCMessage), - /// Messages to/from the outgoing connection - Outgoing(WebRTCMessage), +/// Messages from the [`crate::web_rtc::WebRTCConn`] +pub enum NCInput { + /// Text to be sent over the first available connection + Text(String), + /// Disconnect all connections + Disconnect, + /// Return all states + GetStates, + /// Treat the [`PeerMessage`] to setup a new connection with the + /// given direction + Setup(Direction, PeerMessage), + /// Messages to the incoming connection + Incoming(WebRTCOutput), + /// Messages to the outgoing connection + Outgoing(WebRTCOutput), } #[derive(Debug, Clone, PartialEq)] @@ -59,20 +63,10 @@ pub enum NCOutput { State(Direction, ConnectionStateMap), /// Setup message for the connection in the given direction Setup(Direction, PeerMessage), -} - -#[derive(Debug, Clone, PartialEq)] -/// Messages from the [`crate::web_rtc::WebRTCConn`] -pub enum NCInput { - /// Text to be sent over the first available connection - Text(String), - /// Disconnect all connections - Disconnect, - /// Return all states - GetStates, - /// Treat the [`PeerMessage`] to setup a new connection with the - /// given direction - Setup(Direction, PeerMessage), + /// Messages from the incoming connection + Incoming(WebRTCInput), + /// Messages from the outgoing connection + Outgoing(WebRTCInput), } #[derive(Debug, Clone, PartialEq)] @@ -96,66 +90,52 @@ pub struct NodeConnection { impl NodeConnection { /// Create a new [`NodeConnection`] that will wait for a first message before /// setting up an outgoing connection. - pub async fn new(spawner: &WebRTCSpawner) -> Result, NCError> { + pub async fn new(spawner: &WebRTCSpawner) -> Result, NCError> { let mut broker = Broker::new(); broker - .link_bi( + .add_translator_link( spawner().await?, - Box::new(Self::to_incoming), - Box::new(Self::from_incoming), + Box::new(|msg| match msg { + NCOutput::Incoming(msg_webrtc) => Some(msg_webrtc), + _ => None, + }), + Box::new(|msg_webrtc| Some(NCInput::Incoming(msg_webrtc))), ) .await?; + broker - .link_bi( + .add_translator_link( spawner().await?, - Box::new(Self::to_outgoing), - Box::new(Self::from_outgoing), + Box::new(|msg| match msg { + NCOutput::Outgoing(msg_webrtc) => Some(msg_webrtc), + _ => None, + }), + Box::new(|msg_webrtc| Some(NCInput::Outgoing(msg_webrtc))), ) .await?; + let nc = NodeConnection { msg_queue: vec![], state_incoming: None, state_outgoing: None, }; broker - .add_subsystem(Subsystem::Handler(Box::new(nc))) + .add_handler(Box::new(nc)) .await?; Ok(broker) } - fn to_incoming(msg: WebRTCMessage) -> Option { - matches!(msg, WebRTCMessage::Output(_)).then(|| (NCMessage::Incoming(msg))) - } - - fn from_incoming(msg: NCMessage) -> Option { - match msg { - NCMessage::Incoming(msg) => matches!(msg, WebRTCMessage::Input(_)).then(|| (msg)), - _ => None, - } - } - - fn to_outgoing(msg: WebRTCMessage) -> Option { - matches!(msg, WebRTCMessage::Output(_)).then(|| (NCMessage::Outgoing(msg))) - } - - fn from_outgoing(msg: NCMessage) -> Option { - match msg { - NCMessage::Outgoing(msg) => matches!(msg, WebRTCMessage::Input(_)).then(|| (msg)), - _ => None, - } - } - - fn send(&mut self, dir: Direction, state: Option) -> Vec { + fn send(&mut self, dir: Direction, state: Option) -> Vec { if let Some(csm) = state { if let Some(dc) = csm.data_connection { if dc == DataChannelState::Open { return self .msg_queue .drain(..) - .map(|msg| WebRTCMessage::Input(WebRTCInput::Text(msg))) + .map(|msg| WebRTCInput::Text(msg)) .map(|msg| match dir { - Direction::Incoming => NCMessage::Incoming(msg), - Direction::Outgoing => NCMessage::Outgoing(msg), + Direction::Incoming => NCOutput::Incoming(msg), + Direction::Outgoing => NCOutput::Outgoing(msg), }) .collect(); } @@ -165,7 +145,7 @@ impl NodeConnection { } // First try to send through outgoing queue, if that fails, try incoming queue. - fn send_queue(&mut self) -> Vec { + fn send_queue(&mut self) -> Vec { let mut out = vec![]; if self.msg_queue.len() > 0 { out.extend(self.send(Direction::Outgoing, self.state_outgoing)); @@ -176,110 +156,93 @@ impl NodeConnection { out } - fn msg_in(&mut self, msg: NCInput) -> Vec { + fn msg_in(&mut self, msg: NCInput) -> Vec { match msg { NCInput::Text(msg_str) => { self.msg_queue.push(msg_str); let mut out = vec![]; out.extend(self.send_queue()); if self.state_outgoing.is_none() { - out.push(NCMessage::Outgoing(WebRTCMessage::Input( - WebRTCInput::Setup(PeerMessage::Init), - ))); + out.push(NCOutput::Outgoing(WebRTCInput::Setup(PeerMessage::Init))); self.state_outgoing = Some(ConnectionStateMap::default()); } out } NCInput::Disconnect => vec![ - NCMessage::Incoming(WebRTCMessage::Input(WebRTCInput::Disconnect)), - NCMessage::Outgoing(WebRTCMessage::Input(WebRTCInput::Disconnect)), + NCOutput::Incoming(WebRTCInput::Disconnect), + NCOutput::Outgoing(WebRTCInput::Disconnect), ], NCInput::GetStates => { let mut out = vec![]; if let Some(state) = self.state_incoming { - out.push(NCMessage::Output(NCOutput::State( - Direction::Incoming, - state.clone(), - ))); + out.push(NCOutput::State(Direction::Incoming, state.clone())); } if let Some(state) = self.state_outgoing { - out.push(NCMessage::Output(NCOutput::State( - Direction::Outgoing, - state.clone(), - ))); + out.push(NCOutput::State(Direction::Outgoing, state.clone())); } out } - NCInput::Setup(dir, pm) => { - match dir { - Direction::Incoming => vec![NCMessage::Incoming(WebRTCMessage::Input( - WebRTCInput::Setup(pm), - ))], - Direction::Outgoing => vec![NCMessage::Outgoing(WebRTCMessage::Input( - WebRTCInput::Setup(pm), - ))], - } - } + NCInput::Setup(dir, pm) => match dir { + Direction::Incoming => vec![NCOutput::Incoming(WebRTCInput::Setup(pm))], + Direction::Outgoing => vec![NCOutput::Outgoing(WebRTCInput::Setup(pm))], + }, + _ => vec![], } } - fn msg_conn(&mut self, dir: Direction, msg: WebRTCMessage) -> Vec { + fn msg_conn(&mut self, dir: Direction, msg: WebRTCOutput) -> Vec { match msg { - WebRTCMessage::Output(msg_out) => match msg_out { - WebRTCOutput::Connected => { - let state = Some(ConnectionStateMap { - data_connection: Some(DataChannelState::Open), - ..Default::default() - }); - match dir { - Direction::Incoming => self.state_incoming = state, - Direction::Outgoing => self.state_outgoing = state, - } - let mut out = vec![NCMessage::Output(NCOutput::Connected(dir))]; - out.extend(self.send_queue()); - out + WebRTCOutput::Connected => { + let state = Some(ConnectionStateMap { + data_connection: Some(DataChannelState::Open), + ..Default::default() + }); + match dir { + Direction::Incoming => self.state_incoming = state, + Direction::Outgoing => self.state_outgoing = state, } - WebRTCOutput::Setup(pm) => vec![NCMessage::Output(NCOutput::Setup(dir, pm))], - WebRTCOutput::Text(msg_str) => { - vec![NCMessage::Output(NCOutput::Text(msg_str))] + let mut out = vec![NCOutput::Connected(dir)]; + out.extend(self.send_queue()); + out + } + WebRTCOutput::Setup(pm) => vec![NCOutput::Setup(dir, pm)], + WebRTCOutput::Text(msg_str) => { + vec![NCOutput::Text(msg_str)] + } + WebRTCOutput::State(state) => { + match dir { + Direction::Incoming => self.state_incoming = Some(state), + Direction::Outgoing => self.state_outgoing = Some(state), } - WebRTCOutput::State(state) => { - match dir { - Direction::Incoming => self.state_incoming = Some(state), - Direction::Outgoing => self.state_outgoing = Some(state), + vec![NCOutput::State(dir, state)] + } + WebRTCOutput::Disconnected | WebRTCOutput::Error(_) => { + let msg = match dir { + Direction::Incoming => { + self.state_incoming = None; + NCOutput::Incoming(WebRTCInput::Reset) } - vec![NCMessage::Output(NCOutput::State(dir, state))] - } - WebRTCOutput::Disconnected | WebRTCOutput::Error(_) => { - let msg = match dir { - Direction::Incoming => { - self.state_incoming = None; - NCMessage::Incoming(WebRTCMessage::Input(WebRTCInput::Reset)) - } - Direction::Outgoing => { - self.state_outgoing = None; - NCMessage::Outgoing(WebRTCMessage::Input(WebRTCInput::Reset)) - } - }; - vec![msg, NCMessage::Output(NCOutput::Disconnected(dir))] - } - }, - _ => vec![], + Direction::Outgoing => { + self.state_outgoing = None; + NCOutput::Outgoing(WebRTCInput::Reset) + } + }; + vec![msg, NCOutput::Disconnected(dir)] + } } } } #[platform_async_trait()] -impl SubsystemHandler for NodeConnection { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for NodeConnection { + async fn messages(&mut self, msgs: Vec) -> Vec { let mut out = vec![]; for msg in msgs { out.extend(match msg { - NCMessage::Input(msg_in) => self.msg_in(msg_in), - NCMessage::Incoming(msg_conn) => self.msg_conn(Direction::Incoming, msg_conn), - NCMessage::Outgoing(msg_conn) => self.msg_conn(Direction::Outgoing, msg_conn), - _ => vec![], + NCInput::Incoming(msg_conn) => self.msg_conn(Direction::Incoming, msg_conn), + NCInput::Outgoing(msg_conn) => self.msg_conn(Direction::Outgoing, msg_conn), + _ => self.msg_in(msg), }); } @@ -287,14 +250,29 @@ impl SubsystemHandler for NodeConnection { } } -impl From for NCMessage { - fn from(msg: NCInput) -> NCMessage { - NCMessage::Input(msg) +/* + fn to_incoming(msg: WebRTCMessage) -> Option { + matches!(msg, WebRTCMessage::Output(_)).then(|| (NCMessage::Incoming(msg))) +} + +fn from_incoming(msg: NCMessage) -> Option { + match msg { + NCMessage::Incoming(msg) => matches!(msg, WebRTCMessage::Input(_)).then(|| (msg)), + _ => None, } } -impl From for NCMessage { - fn from(msg: NCOutput) -> NCMessage { - NCMessage::Output(msg) +fn to_outgoing(msg: WebRTCMessage) -> Option { + matches!(msg, WebRTCMessage::Output(_)).then(|| (NCMessage::Outgoing(msg))) +} + +fn from_outgoing(msg: NCMessage) -> Option { + match msg { + NCMessage::Outgoing(msg) => matches!(msg, WebRTCMessage::Input(_)).then(|| (msg)), + _ => None, } } + + I: TranslateFrom, + O: TranslateInto, +*/ diff --git a/flarch/src/web_rtc/wasm/web_rtc_setup.rs b/flarch/src/web_rtc/wasm/web_rtc_setup.rs index eb1e48e7..2eaee459 100644 --- a/flarch/src/web_rtc/wasm/web_rtc_setup.rs +++ b/flarch/src/web_rtc/wasm/web_rtc_setup.rs @@ -12,13 +12,12 @@ use web_sys::{ RtcSessionDescriptionInit, RtcSignalingState, }; -use crate::broker::{Broker, Subsystem, SubsystemHandler}; +use crate::broker::{Broker, SubsystemHandler}; use crate::web_rtc::{ connection::{ConnectionConfig, HostLogin}, messages::{ ConnType, ConnectionStateMap, DataChannelState, IceConnectionState, IceGatheringState, - PeerMessage, SetupError, SignalingState, WebRTCInput, WebRTCMessage, WebRTCOutput, - WebRTCSpawner, + PeerMessage, SetupError, SignalingState, WebRTCInput, WebRTCOutput, WebRTCSpawner, }, node_connection::Direction, }; @@ -26,7 +25,7 @@ use crate::web_rtc::{ pub struct WebRTCConnectionSetup { pub rp_conn: RtcPeerConnection, rtc_data: Arc>>, - broker: Broker, + broker: Broker, // While the connection is not up, queue up messages in here. queue: Vec, direction: Option, @@ -52,7 +51,7 @@ fn get_ice_server(host: HostLogin) -> IceServer { impl WebRTCConnectionSetup { pub async fn new( - broker: Broker, + broker: Broker, config: ConnectionConfig, ) -> Result { Ok(WebRTCConnectionSetup { @@ -119,7 +118,7 @@ impl WebRTCConnectionSetup { } } - pub fn ice_start(rp_conn: &RtcPeerConnection, broker: Broker) { + pub fn ice_start(rp_conn: &RtcPeerConnection, broker: Broker) { let broker_cl = broker.clone(); let onicecandidate_callback1 = Closure::wrap(Box::new(move |ev: RtcPeerConnectionIceEvent| { @@ -128,9 +127,7 @@ impl WebRTCConnectionSetup { let cand = format!("{}", candidate.candidate()); wasm_bindgen_futures::spawn_local(async move { broker - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Setup( - PeerMessage::IceCandidate(cand), - ))) + .emit_msg_out(WebRTCOutput::Setup(PeerMessage::IceCandidate(cand))) .err() .map(|e| log::error!("While sending ICE candidate: {:?}", e)); }); @@ -142,18 +139,17 @@ impl WebRTCConnectionSetup { let rp_conn_cl = rp_conn.clone(); let oniceconnectionstatechange = Closure::wrap(Box::new(move |_: RtcPeerConnectionIceEvent| { - let msg = match rp_conn_cl.ice_connection_state() { - RtcIceConnectionState::Failed | RtcIceConnectionState::Disconnected => { - WebRTCMessage::Output(WebRTCOutput::Disconnected) - } - _ => WebRTCMessage::Input(WebRTCInput::UpdateState), - }; let mut broker = broker_cl.clone(); + let rp_conn = rp_conn_cl.clone(); wasm_bindgen_futures::spawn_local(async move { - broker - .emit_msg(msg) - .err() - .map(|e| log::error!("While sending ICE candidate: {:?}", e)); + match rp_conn.ice_connection_state() { + RtcIceConnectionState::Failed | RtcIceConnectionState::Disconnected => { + broker.emit_msg_out(WebRTCOutput::Disconnected) + } + _ => broker.emit_msg_in(WebRTCInput::UpdateState), + } + .err() + .map(|e| log::error!("While sending ICE candidate: {:?}", e)); }); }) as Box); rp_conn.set_oniceconnectionstatechange(Some( @@ -297,7 +293,7 @@ impl WebRTCConnectionSetup { } fn dc_set_onopen( - broker: Broker, + broker: Broker, rtc_data: Arc>>, dc: RtcDataChannel, ) { @@ -310,7 +306,7 @@ impl WebRTCConnectionSetup { wasm_bindgen_futures::spawn_local(async move { rtc_data.lock().await.replace(dc_clone2.clone()); broker_clone - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Connected)) + .emit_msg_out(WebRTCOutput::Connected) .err() .map(|e| log::error!("While sending connection: {:?}", e)); }); @@ -321,7 +317,7 @@ impl WebRTCConnectionSetup { let mut broker = broker_cl.clone(); wasm_bindgen_futures::spawn_local(async move { broker - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Text(message))) + .emit_msg_out(WebRTCOutput::Text(message)) .err() .map(|e| log::error!("While sending message: {:?}", e)); }); @@ -335,7 +331,7 @@ impl WebRTCConnectionSetup { let mut broker = broker_cl.clone(); wasm_bindgen_futures::spawn_local(async move { broker - .emit_msg(WebRTCMessage::Output(WebRTCOutput::Disconnected)) + .emit_msg_out(WebRTCOutput::Disconnected) .err() .map(|e| log::error!("While sending message: {:?}", e)); }); @@ -437,17 +433,16 @@ pub struct WebRTCConnection { } impl WebRTCConnection { - pub async fn new_box(config: ConnectionConfig) -> Result, SetupError> { + pub async fn new_box( + config: ConnectionConfig, + ) -> Result, SetupError> { let broker = Broker::new(); let rn = WebRTCConnection { setup: WebRTCConnectionSetup::new(broker.clone(), config).await?, }; let rp_conn = rn.setup.rp_conn.clone(); - broker - .clone() - .add_subsystem(Subsystem::Handler(Box::new(rn))) - .await?; + broker.clone().add_handler(Box::new(rn)).await?; WebRTCConnectionSetup::ice_start(&rp_conn, broker.clone()); Ok(broker) } @@ -467,21 +462,19 @@ impl WebRTCConnection { }) } - async fn msg_in(&mut self, msg: WebRTCInput) -> Result, SetupError> { + async fn msg_in(&mut self, msg: WebRTCInput) -> Result, SetupError> { match msg { WebRTCInput::Text(s) => self.setup.send(s).await?, WebRTCInput::Setup(s) => { if let Some(msg) = self.setup(s).await? { - return Ok(Some(WebRTCMessage::Output(WebRTCOutput::Setup(msg)))); + return Ok(Some(WebRTCOutput::Setup(msg))); } } WebRTCInput::Flush => { self.setup.send_queue().await?; } WebRTCInput::UpdateState => { - return Ok(Some(WebRTCMessage::Output(WebRTCOutput::State( - self.setup.get_state().await?, - )))); + return Ok(Some(WebRTCOutput::State(self.setup.get_state().await?))); } WebRTCInput::Disconnect => self.setup.reset()?, WebRTCInput::Reset => self.setup.reset()?, @@ -491,17 +484,15 @@ impl WebRTCConnection { } #[async_trait(?Send)] -impl SubsystemHandler for WebRTCConnection { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for WebRTCConnection { + async fn messages(&mut self, msgs: Vec) -> Vec { let mut out = vec![]; for msg in msgs { - if let WebRTCMessage::Input(msg_in) = msg { - match self.msg_in(msg_in.clone()).await { - Ok(Some(msg)) => out.push(msg), - Ok(None) => {} - Err(e) => { - log::trace!("{:p} Error processing message {msg_in:?}: {:?}", self, e); - } + match self.msg_in(msg.clone()).await { + Ok(Some(msg)) => out.push(msg), + Ok(None) => {} + Err(e) => { + log::trace!("{:p} Error processing message {msg:?}: {:?}", self, e); } } } diff --git a/flarch/src/web_rtc/wasm/web_socket_client.rs b/flarch/src/web_rtc/wasm/web_socket_client.rs index 96ddda03..8ff3f7b9 100644 --- a/flarch/src/web_rtc/wasm/web_socket_client.rs +++ b/flarch/src/web_rtc/wasm/web_socket_client.rs @@ -2,20 +2,22 @@ use async_trait::async_trait; use wasm_bindgen::{prelude::Closure, JsCast, JsValue}; use web_sys::{ErrorEvent, MessageEvent, WebSocket}; -use crate::broker::{Broker, Subsystem, SubsystemHandler}; +use crate::broker::{Broker, SubsystemHandler}; use crate::tasks::{now, wait_ms}; -use crate::web_rtc::websocket::{WSClientError, WSClientInput, WSClientMessage, WSClientOutput}; +use crate::web_rtc::websocket::{WSClientError, WSClientIn, WSClientOut}; pub struct WebSocketClient { url: String, ws: Option, - broker: Broker, + broker: Broker, last_connection: i64, } impl WebSocketClient { - pub async fn connect(url: &str) -> Result, WSClientError> { + pub async fn connect( + url: &str, + ) -> Result, WSClientError> { let wsw = WebSocketClient { url: url.to_string(), ws: None, @@ -23,16 +25,14 @@ impl WebSocketClient { last_connection: 0, }; let mut broker = wsw.broker.clone(); - broker - .add_subsystem(Subsystem::Handler(Box::new(wsw))) - .await?; - broker.emit_msg(WSClientMessage::Input(WSClientInput::Connect))?; + broker.add_handler(Box::new(wsw)).await?; + broker.emit_msg_in(WSClientIn::Connect)?; Ok(broker) } async fn connect_ws(&mut self) -> Result<(), WSClientError> { if self.ws.is_some() && now() / 1000 < self.last_connection + 10 { - return Ok(()) + return Ok(()); } self.last_connection = now() / 1000; @@ -72,7 +72,7 @@ impl WebSocketClient { if let Ok(txt) = e.data().dyn_into::() { let txt_str = txt.as_string().unwrap(); broker_clone - .emit_msg(WSClientOutput::Message(txt_str).into()) + .emit_msg_out(WSClientOut::Message(txt_str)) .err() .map(|e| log::error!("On_message_callback error: {e:?}")); } else { @@ -87,9 +87,7 @@ impl WebSocketClient { let mut broker_clone = self.broker.clone(); let onerror_callback = Closure::wrap(Box::new(move |_: ErrorEvent| { broker_clone - .emit_msg(WSClientMessage::Output(WSClientOutput::Error( - "WS-error".into(), - ))) + .emit_msg_out(WSClientOut::Error("WS-error".into())) .err() .map(|e| log::error!("On_error_callback error: {e:?}")); }) as Box); @@ -99,7 +97,7 @@ impl WebSocketClient { let mut broker_clone = self.broker.clone(); let onopen_callback = Closure::wrap(Box::new(move |_| { broker_clone - .emit_msg(WSClientMessage::Output(WSClientOutput::Connected)) + .emit_msg_out(WSClientOut::Connected) .err() .map(|e| log::error!("On_open_callback error: {e:?}")); }) as Box); @@ -110,32 +108,30 @@ impl WebSocketClient { } #[async_trait(?Send)] -impl SubsystemHandler for WebSocketClient { - async fn messages(&mut self, msgs: Vec) -> Vec { +impl SubsystemHandler for WebSocketClient { + async fn messages(&mut self, msgs: Vec) -> Vec { for msg in msgs { - if let WSClientMessage::Input(msg_in) = msg { - match msg_in { - WSClientInput::Message(msg) => { - if let Some(ws) = self.ws.as_mut() { - if ws.ready_state() != WebSocket::OPEN { - log::debug!("WebSocket is not open for {msg:?}"); - if let Err(e) = self.connect_ws().await { - log::warn!("While reconnecting: {e}"); - } - return vec![]; + match msg { + WSClientIn::Message(msg) => { + if let Some(ws) = self.ws.as_mut() { + if ws.ready_state() != WebSocket::OPEN { + log::debug!("WebSocket is not open for {msg:?}"); + if let Err(e) = self.connect_ws().await { + log::warn!("While reconnecting: {e}"); } - ws.send_with_str(&msg) - .err() - .map(|e| log::error!("Error sending message: {:?}", e)); + return vec![]; } + ws.send_with_str(&msg) + .err() + .map(|e| log::error!("Error sending message: {:?}", e)); } - WSClientInput::Disconnect => { - // ws.disconnect(); - } - WSClientInput::Connect => { - if let Err(e) = self.connect_ws().await { - log::warn!("While reconnecting: {e}"); - } + } + WSClientIn::Disconnect => { + // ws.disconnect(); + } + WSClientIn::Connect => { + if let Err(e) = self.connect_ws().await { + log::warn!("While reconnecting: {e}"); } } } diff --git a/flarch/src/web_rtc/websocket.rs b/flarch/src/web_rtc/websocket.rs index 4fbe5c05..387ff474 100644 --- a/flarch/src/web_rtc/websocket.rs +++ b/flarch/src/web_rtc/websocket.rs @@ -1,7 +1,7 @@ //! # Websocket structures for the broker implementations //! -//! These are the structures used by the [`crate::broker::Broker`] and -//! [`crate::broker::Broker`]. +//! These are the structures used by the [`crate::broker::BrokerWSClient`] and +//! [`crate::broker::BrokerWSServer`]. //! The wasm and libc implementations will return one of these brokers and then //! interpret the messages received. //! This is similar to a trait that is implemented in either wasm or libc, but @@ -10,7 +10,7 @@ use serde::{Deserialize, Serialize}; use thiserror::Error; -use crate::broker::BrokerError; +use crate::broker::{Broker, BrokerError}; #[derive(Error, Debug)] /// Wrapper for an error in the websocket implementations @@ -49,19 +49,11 @@ pub enum WSSError { IO(#[from] std::io::Error), } -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] -/// The message to be implemented for the [`crate::broker::Broker`] in the -/// websocket client of wasm and libc. -pub enum WSClientMessage { - /// Message generated by the websocket client - Output(WSClientOutput), - /// Commands for the websocket client - Input(WSClientInput), -} +pub type BrokerWSClient = Broker; #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] /// Commands for the websocket client -pub enum WSClientInput { +pub enum WSClientIn { /// Send a text message over the websocket connection Message(String), /// Disconnect the websocket - no further messages will be sent after this message. @@ -72,7 +64,7 @@ pub enum WSClientInput { #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] /// Websocket client return messages -pub enum WSClientOutput { +pub enum WSClientOut { /// Text message received over the connection Message(String), /// The connection has been closed @@ -83,32 +75,11 @@ pub enum WSClientOutput { Error(String), } -impl From for WSClientMessage { - fn from(input: WSClientInput) -> Self { - WSClientMessage::Input(input) - } -} - -impl From for WSClientMessage { - fn from(output: WSClientOutput) -> Self { - WSClientMessage::Output(output) - } -} - -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] -/// The implementation for the websocket server, which only exists for the -/// libc implementation, as wasm in the browser cannot have a websocket server. -/// The libc implementation will return a [`crate::broker::Broker`]. -pub enum WSServerMessage { - /// Messages sent by the websocket server - Output(WSServerOutput), - /// Commands to the websocket server - Input(WSServerInput), -} +pub type BrokerWSServer = Broker; #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] /// Messages sent by the websocket server -pub enum WSServerOutput { +pub enum WSServerOut { /// A message has been received from the connection `usize` Message(usize, String), /// A new connection is available with index `usize` @@ -122,7 +93,7 @@ pub enum WSServerOutput { #[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] /// Commands for the websocket server -pub enum WSServerInput { +pub enum WSServerIn { /// Send a message to the connection with index `usize`. If the connection /// doesn't exist, or is closed, nothing happens. Message(usize, String), @@ -134,15 +105,3 @@ pub enum WSServerInput { /// Stop the websocket server Stop, } - -impl From for WSServerMessage { - fn from(msg: WSServerInput) -> Self { - WSServerMessage::Input(msg) - } -} - -impl From for WSServerMessage { - fn from(msg: WSServerOutput) -> Self { - WSServerMessage::Output(msg) - } -} \ No newline at end of file diff --git a/flarch_macro/README.md b/flarch_macro/README.md deleted file mode 100644 index e2f5eb31..00000000 --- a/flarch_macro/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# flarch_macro - -This holds the macro for defining an `async_trait` either with or without the -`Send` trait. -You can use it like this: - -```rust -#[platform_async_trait()] -impl SubsystemHandler for SomeBroker { - async fn messages(&mut self, _: Vec) -> Vec { - todo!(); - } -} -``` - -Depending on `wasm` or `unix`, it will either remove or keep the `Send` trait. \ No newline at end of file diff --git a/flarch_macro/src/lib.rs b/flarch_macro/src/lib.rs deleted file mode 100644 index df3d8894..00000000 --- a/flarch_macro/src/lib.rs +++ /dev/null @@ -1,28 +0,0 @@ -// Define a custom attribute macro for platform-specific async_trait -use proc_macro::TokenStream; -use quote::quote; -use syn::{ItemImpl, ItemTrait}; - -#[proc_macro_attribute] -pub fn platform_async_trait(_attr: TokenStream, input: TokenStream) -> TokenStream { - if let Ok(input_impl) = syn::parse::(input.clone()) { - let expanded = quote! { - #[cfg_attr(target_family = "wasm", async_trait::async_trait(?Send))] - #[cfg_attr(target_family = "unix", async_trait::async_trait)] - #input_impl - }; - return TokenStream::from(expanded); - } - - if let Ok(input_trait) = syn::parse::(input) { - let expanded = quote! { - #[cfg_attr(target_family = "wasm", async_trait::async_trait(?Send))] - #[cfg_attr(target_family = "unix", async_trait::async_trait)] - #input_trait - }; - return TokenStream::from(expanded); - } - - let error = syn::Error::new(proc_macro2::Span::call_site(), "Unsupported type"); - TokenStream::from(error.to_compile_error()) -} diff --git a/flbrowser/Cargo.lock b/flbrowser/Cargo.lock index 21e5a071..460ae1d0 100644 --- a/flbrowser/Cargo.lock +++ b/flbrowser/Cargo.lock @@ -1,21 +1,21 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] [[package]] -name = "adler" -version = "1.0.2" +name = "adler2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" [[package]] name = "aead" @@ -78,9 +78,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.15" +version = "0.6.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" dependencies = [ "anstyle", "anstyle-parse", @@ -93,43 +93,44 @@ dependencies = [ [[package]] name = "anstyle" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "anstyle-parse" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" dependencies = [ "utf8parse", ] [[package]] name = "anstyle-query" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "anstyle-wincon" -version = "3.0.4" +version = "3.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" dependencies = [ "anstyle", - "windows-sys 0.52.0", + "once_cell", + "windows-sys 0.59.0", ] [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "arc-swap" @@ -149,7 +150,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -164,7 +165,7 @@ dependencies = [ "nom", "num-traits", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -188,7 +189,7 @@ checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "synstructure 0.13.1", ] @@ -211,14 +212,25 @@ checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "async-recursion" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" dependencies = [ "async-stream-impl", "futures-core", @@ -227,24 +239,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -255,23 +267,23 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", "miniz_oxide", "object", "rustc-demangle", + "windows-targets", ] [[package]] @@ -321,9 +333,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" dependencies = [ "serde", ] @@ -346,11 +358,17 @@ dependencies = [ "generic-array", ] +[[package]] +name = "btparse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "387e80962b798815a2b5c4bcfdb6bf626fa922ffe9f74e373103b858738e9f31" + [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -360,9 +378,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "f61dac84819c6588b558454b194026eb1f09c293b9036ae9b159e74e73ab6cf9" dependencies = [ "serde", ] @@ -378,9 +396,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.15" +version = "1.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6" +checksum = "c7777341816418c02e033934a09f20dc0ccaf65a5201ef8a450ae0105a573fda" dependencies = [ "shlex", ] @@ -403,11 +421,17 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -430,9 +454,9 @@ dependencies = [ [[package]] name = "colorchoice" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" [[package]] name = "console_error_panic_hook" @@ -468,9 +492,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.13" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ "libc", ] @@ -515,9 +539,9 @@ dependencies = [ [[package]] name = "ct-codecs" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "026ac6ceace6298d2c557ef5ed798894962296469ec7842288ea64674201a2d1" +checksum = "b916ba8ce9e4182696896f015e8a5ae6081b305f74690baa8465e35f5a142ea4" [[package]] name = "ctr" @@ -537,6 +561,7 @@ dependencies = [ "cfg-if", "cpufeatures", "curve25519-dalek-derive", + "digest", "fiat-crypto", "rustc_version", "subtle", @@ -551,7 +576,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -575,7 +600,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -586,14 +611,14 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "data-encoding" -version = "2.6.0" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" +checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" [[package]] name = "der" @@ -663,7 +688,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -680,6 +705,17 @@ dependencies = [ "spki", ] +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "serde", + "signature", +] + [[package]] name = "ed25519-compact" version = "2.1.1" @@ -687,7 +723,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9b3460f44bea8cd47f45a0c70892f1eff856d97cd55358b2f73f663789f6190" dependencies = [ "ct-codecs", - "getrandom", + "ed25519", + "getrandom 0.2.15", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "rand_core", + "serde", + "sha2", + "subtle", + "zeroize", ] [[package]] @@ -719,9 +771,9 @@ dependencies = [ [[package]] name = "env_filter" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" dependencies = [ "log", "regex", @@ -729,9 +781,9 @@ dependencies = [ [[package]] name = "env_logger" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" +checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" dependencies = [ "anstream", "anstyle", @@ -746,6 +798,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +[[package]] +name = "erased-serde" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e2389d65ab4fab27dc2a5de7b191e1f6617d1f1c8855c0dc569c94a4cbb18d" +dependencies = [ + "serde", + "typeid", +] + [[package]] name = "ff" version = "0.13.0" @@ -764,23 +826,26 @@ checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" [[package]] name = "flarch" -version = "0.8.0" +version = "0.9.0" dependencies = [ "async-trait", + "btparse", + "bytes", "chrono", "env_logger", - "flarch_macro", + "flmacro", "futures", "js-sys", "log", "rand", + "rmp-serde", "serde", "serde-wasm-bindgen", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-tungstenite", "wasm-bindgen", @@ -791,18 +856,9 @@ dependencies = [ "webrtc", ] -[[package]] -name = "flarch_macro" -version = "0.8.0" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "flbrowser" -version = "0.8.0" +version = "0.9.0" dependencies = [ "anyhow", "chrono", @@ -822,39 +878,75 @@ dependencies = [ "web-sys", ] +[[package]] +name = "flcrypto" +version = "0.9.0" +dependencies = [ + "bytes", + "ed25519-dalek", + "flarch", + "flmacro", + "log", + "rand", + "rmp-serde", + "serde", + "serde_with", + "sha2", + "thiserror 2.0.11", + "typetag", +] + +[[package]] +name = "flmacro" +version = "0.9.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "flmodules" -version = "0.8.0" +version = "0.9.0" dependencies = [ + "async-recursion", "async-stream", "async-trait", "bimap", - "bitflags 2.6.0", + "bitflags 2.8.0", + "btparse", "bytes", "ed25519-compact", + "ed25519-dalek", "flarch", + "flcrypto", + "flmacro", "futures", - "getrandom", + "getrandom 0.2.15", "itertools", "log", "names", + "num-bigint", "rand", "reqwest", + "rmp-serde", "serde", "serde_derive", "serde_json", "serde_with", "serde_yaml", "sha2", - "thiserror", + "strum_macros", + "thiserror 1.0.69", "tokio", "tokio-stream", "toml", + "typetag", ] [[package]] name = "flnode" -version = "0.8.0" +version = "0.9.0" dependencies = [ "async-trait", "chrono", @@ -862,7 +954,7 @@ dependencies = [ "flarch", "flmodules", "futures", - "getrandom", + "getrandom 0.2.15", "itertools", "log", "names", @@ -872,7 +964,7 @@ dependencies = [ "serde_json", "serde_yaml", "sha2", - "thiserror", + "thiserror 1.0.69", "tokio", "toml", ] @@ -894,9 +986,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" dependencies = [ "futures-channel", "futures-core", @@ -909,9 +1001,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", "futures-sink", @@ -919,15 +1011,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] name = "futures-executor" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" dependencies = [ "futures-core", "futures-task", @@ -936,38 +1028,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-macro" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "futures-sink" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] name = "futures-task" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] name = "futures-util" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ "futures-channel", "futures-core", @@ -1001,10 +1093,22 @@ dependencies = [ "cfg-if", "js-sys", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "wasm-bindgen", ] +[[package]] +name = "getrandom" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a49c392881ce6d5c3b8cb70f98717b7c07aabbdff06687b9030dbfbe2725f8" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.13.3+wasi-0.2.2", + "windows-targets", +] + [[package]] name = "ghash" version = "0.5.1" @@ -1017,9 +1121,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "group" @@ -1040,15 +1144,15 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.5" +version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" [[package]] -name = "hermit-abi" -version = "0.3.9" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hex" @@ -1076,9 +1180,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1110,9 +1214,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.9.4" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" +checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" [[package]] name = "humantime" @@ -1122,9 +1226,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "1.4.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" dependencies = [ "bytes", "futures-channel", @@ -1141,9 +1245,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http", @@ -1159,9 +1263,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" dependencies = [ "bytes", "futures-channel", @@ -1172,16 +1276,15 @@ dependencies = [ "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1200,6 +1303,124 @@ dependencies = [ "cc", ] +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] + [[package]] name = "ident_case" version = "1.0.1" @@ -1208,12 +1429,23 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.5.0" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", ] [[package]] @@ -1229,12 +1461,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.5.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "serde", ] @@ -1261,18 +1493,27 @@ dependencies = [ "rand", "rtcp", "rtp", - "thiserror", + "thiserror 1.0.69", "tokio", "waitgroup", "webrtc-srtp", "webrtc-util", ] +[[package]] +name = "inventory" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54b12ebb6799019b044deaf431eadfe23245b259bba5a2c0796acec3943a3cdb" +dependencies = [ + "rustversion", +] + [[package]] name = "ipnet" -version = "2.9.0" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" [[package]] name = "is_terminal_polyfill" @@ -1291,16 +1532,17 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "js-sys" -version = "0.3.70" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -1312,9 +1554,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "linked-hash-map" @@ -1322,6 +1564,12 @@ version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + [[package]] name = "lock_api" version = "0.4.12" @@ -1334,9 +1582,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "md-5" @@ -1371,9 +1619,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minicov" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c71e683cd655513b99affab7d317deb690528255a0d5f717f1024093c12b169" +checksum = "f27fe9f1cc3c22e1687f9446c2083c4c5fc7f0bcf1c7a86bdbded14985895b4b" dependencies = [ "cc", "walkdir", @@ -1387,22 +1635,21 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.7.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ - "adler", + "adler2", ] [[package]] name = "mio" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" dependencies = [ - "hermit-abi", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", "windows-sys 0.52.0", ] @@ -1446,6 +1693,7 @@ checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", "num-traits", + "serde", ] [[package]] @@ -1474,9 +1722,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.4" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -1492,9 +1740,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.19.0" +version = "1.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] name = "opaque-debug" @@ -1504,9 +1752,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl-probe" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "p256" @@ -1522,9 +1770,9 @@ dependencies = [ [[package]] name = "p384" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" dependencies = [ "ecdsa", "elliptic-curve", @@ -1555,6 +1803,12 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + [[package]] name = "pem" version = "3.0.4" @@ -1580,31 +1834,11 @@ version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.77", -] - [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -1636,9 +1870,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.7.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265" +checksum = "280dc24453071f1b63954171985a0b0d30058d287960968b9b2aca264c8d4ee6" [[package]] name = "powerfmt" @@ -1666,18 +1900,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] [[package]] name = "quinn" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" dependencies = [ "bytes", "pin-project-lite", @@ -1686,46 +1920,50 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror", + "thiserror 2.0.11", "tokio", "tracing", ] [[package]] name = "quinn-proto" -version = "0.11.6" +version = "0.11.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" dependencies = [ "bytes", + "getrandom 0.2.15", "rand", "ring", "rustc-hash", "rustls", + "rustls-pki-types", "slab", - "thiserror", + "thiserror 2.0.11", "tinyvec", "tracing", + "web-time", ] [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" dependencies = [ + "cfg_aliases", "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -1757,14 +1995,14 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom", + "getrandom 0.2.15", ] [[package]] name = "rcgen" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54077e1872c46788540de1ea3d7f4ccb1983d12f9aa909b234468676c1a36779" +checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" dependencies = [ "pem", "ring", @@ -1776,18 +2014,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -1797,9 +2035,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -1808,15 +2046,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" -version = "0.12.7" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", @@ -1846,6 +2084,7 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", + "tower", "tower-service", "url", "wasm-bindgen", @@ -1874,13 +2113,35 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom", + "getrandom 0.2.15", "libc", "spin", "untrusted", "windows-sys 0.52.0", ] +[[package]] +name = "rmp" +version = "0.8.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "228ed7c16fa39782c3b3468e974aec2795e9089153cd08ee2e9aefb3613334c4" +dependencies = [ + "byteorder", + "num-traits", + "paste", +] + +[[package]] +name = "rmp-serde" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e599a477cf9840e92f2cde9a7189e67b42c57532749bf90aea6ec10facd4db" +dependencies = [ + "byteorder", + "rmp", + "serde", +] + [[package]] name = "rtcp" version = "0.11.0" @@ -1888,7 +2149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc9f775ff89c5fe7f0cc0abafb7c57688ae25ce688f1a52dd88e277616c76ab2" dependencies = [ "bytes", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -1902,7 +2163,7 @@ dependencies = [ "portable-atomic", "rand", "serde", - "thiserror", + "thiserror 1.0.69", "webrtc-util", ] @@ -1914,9 +2175,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustc_version" @@ -1938,9 +2199,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" dependencies = [ "once_cell", "ring", @@ -1965,36 +2226,44 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.3" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.22.1", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" +dependencies = [ + "web-time", +] [[package]] name = "rustls-webpki" -version = "0.102.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84678086bd54edf2b415183ed7a94d0efb049f1b646a33e22a36f3794be6ae56" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] name = "same-file" @@ -2007,19 +2276,13 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2034,7 +2297,7 @@ checksum = "13254db766b17451aced321e7397ebf0a446ef0c8d2942b6e67a95815421093f" dependencies = [ "rand", "substring", - "thiserror", + "thiserror 1.0.69", "url", ] @@ -2058,7 +2321,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags 2.8.0", "core-foundation", "core-foundation-sys", "libc", @@ -2067,9 +2330,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" dependencies = [ "core-foundation-sys", "libc", @@ -2077,15 +2340,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" [[package]] name = "serde" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] @@ -2103,20 +2366,20 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ "itoa", "memchr", @@ -2126,9 +2389,9 @@ dependencies = [ [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -2147,15 +2410,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -2165,14 +2428,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.9.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -2251,9 +2514,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" dependencies = [ "libc", "windows-sys 0.52.0", @@ -2275,12 +2538,31 @@ dependencies = [ "der", ] +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.98", +] + [[package]] name = "stun" version = "0.6.0" @@ -2294,7 +2576,7 @@ dependencies = [ "rand", "ring", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "url", "webrtc-util", @@ -2328,9 +2610,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" dependencies = [ "proc-macro2", "quote", @@ -2339,9 +2621,9 @@ dependencies = [ [[package]] name = "sync_wrapper" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" dependencies = [ "futures-core", ] @@ -2366,34 +2648,54 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", ] [[package]] name = "thiserror" -version = "1.0.63" +version = "2.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.11", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2412,19 +2714,29 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -2437,9 +2749,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.40.0" +version = "1.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" dependencies = [ "backtrace", "bytes", @@ -2454,31 +2766,30 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.15" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -2503,9 +2814,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -2516,9 +2827,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +checksum = "cd87a5cdd6ffab733b2f74bc4fd7ee5fff6634124999ac278c35fc78c6120148" dependencies = [ "serde", "serde_spanned", @@ -2537,11 +2848,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.20" +version = "0.22.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" +checksum = "02a8b472d1a3d7c18e2d61a489aee3453fd9031c33e4f55bd533f4a7adca1bee" dependencies = [ - "indexmap 2.5.0", + "indexmap 2.7.1", "serde", "serde_spanned", "toml_datetime", @@ -2550,14 +2861,14 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.13" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", - "pin-project", "pin-project-lite", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -2577,9 +2888,9 @@ checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-core", @@ -2587,9 +2898,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] @@ -2616,7 +2927,7 @@ dependencies = [ "rustls", "rustls-pki-types", "sha1", - "thiserror", + "thiserror 1.0.69", "utf-8", ] @@ -2635,12 +2946,18 @@ dependencies = [ "rand", "ring", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "tokio-util", "webrtc-util", ] +[[package]] +name = "typeid" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" + [[package]] name = "typenum" version = "1.17.0" @@ -2648,31 +2965,40 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] -name = "unicode-bidi" -version = "0.3.15" +name = "typetag" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" +checksum = "044fc3365ddd307c297fe0fe7b2e70588cdab4d0f62dc52055ca0d11b174cf0e" +dependencies = [ + "erased-serde", + "inventory", + "once_cell", + "serde", + "typetag-impl", +] [[package]] -name = "unicode-ident" -version = "1.0.12" +name = "typetag-impl" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "d9d30226ac9cbd2d1ff775f74e8febdab985dab14fb14aa2582c29a92d5555dc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", +] [[package]] -name = "unicode-normalization" -version = "0.1.23" +name = "unicode-ident" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" -dependencies = [ - "tinyvec", -] +checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" [[package]] name = "unicode-xid" -version = "0.2.5" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229730647fbc343e3a80e463c1db7f78f3855d3f3739bee0dda773c9a037c90a" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" [[package]] name = "universal-hash" @@ -2692,9 +3018,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.2" +version = "2.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" dependencies = [ "form_urlencoded", "idna", @@ -2713,6 +3039,18 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" @@ -2721,11 +3059,11 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" dependencies = [ - "getrandom", + "getrandom 0.3.1", ] [[package]] @@ -2768,14 +3106,24 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasi" +version = "0.13.3+wasi-0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26816d2e1a4a36a2940b96c5296ce403917633dff8f3440e9b236ed6f6bacad2" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "serde", "serde_json", "wasm-bindgen-macro", @@ -2783,36 +3131,36 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.43" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", + "once_cell", "wasm-bindgen", "web-sys", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2820,33 +3168,34 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.93" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "wasm-bindgen-test" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68497a05fb21143a08a7d24fc81763384a3072ee43c44e86aad1744d6adef9d9" +checksum = "66c8d5e33ca3b6d9fa3b4676d774c5778031d27a578c2b007f905acf816152c3" dependencies = [ - "console_error_panic_hook", "js-sys", "minicov", - "scoped-tls", "wasm-bindgen", "wasm-bindgen-futures", "wasm-bindgen-test-macro", @@ -2854,13 +3203,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.43" +version = "0.3.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8220be1fa9e4c889b30fd207d4906657e7e90b12e0e6b0c8b8d8709f5de021" +checksum = "17d5042cc5fa009658f9a7333ef24291b1291a25b6382dd68862a7f3b969f69b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", ] [[package]] @@ -2876,9 +3225,9 @@ dependencies = [ [[package]] name = "wasm-streams" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" +checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" dependencies = [ "futures-util", "js-sys", @@ -2889,9 +3238,9 @@ dependencies = [ [[package]] name = "wasmtimer" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f656cd8858a5164932d8a90f936700860976ec21eb00e0fe2aa8cab13f6b4cf" +checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" dependencies = [ "futures", "js-sys", @@ -2903,9 +3252,19 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.70" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ "js-sys", "wasm-bindgen", @@ -2913,9 +3272,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.5" +version = "0.26.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bd24728e5af82c6c4ec1b66ac4844bdf8156257fccda846ec58b42cd0cdbe6a" +checksum = "2210b291f7ea53617fbafcc4939f10914214ec15aace5ba62293a668f322c5c9" dependencies = [ "rustls-pki-types", ] @@ -2948,7 +3307,7 @@ dependencies = [ "sha2", "smol_str", "stun", - "thiserror", + "thiserror 1.0.69", "time", "tokio", "turn", @@ -2973,7 +3332,7 @@ dependencies = [ "bytes", "log", "portable-atomic", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-sctp", "webrtc-util", @@ -3009,7 +3368,7 @@ dependencies = [ "sha1", "sha2", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", "x25519-dalek", @@ -3031,7 +3390,7 @@ dependencies = [ "serde", "serde_json", "stun", - "thiserror", + "thiserror 1.0.69", "tokio", "turn", "url", @@ -3049,7 +3408,7 @@ checksum = "c0804694f3b2acfdff48f6df217979b13cb0a00377c63b5effd111daaee7e8c4" dependencies = [ "log", "socket2", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3064,7 +3423,7 @@ dependencies = [ "bytes", "rand", "rtp", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3080,7 +3439,7 @@ dependencies = [ "log", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3103,7 +3462,7 @@ dependencies = [ "rtp", "sha1", "subtle", - "thiserror", + "thiserror 1.0.69", "tokio", "webrtc-util", ] @@ -3124,7 +3483,7 @@ dependencies = [ "nix", "portable-atomic", "rand", - "thiserror", + "thiserror 1.0.69", "tokio", "winapi", ] @@ -3283,13 +3642,34 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "winnow" -version = "0.6.18" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" +checksum = "86e376c75f4f43f44db463cf729e0d3acbf954d13e22c51e26e4c264b4ab545f" dependencies = [ "memchr", ] +[[package]] +name = "wit-bindgen-rt" +version = "0.33.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" +dependencies = [ + "bitflags 2.8.0", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + [[package]] name = "x25519-dalek" version = "2.0.1" @@ -3316,7 +3696,7 @@ dependencies = [ "oid-registry", "ring", "rusticata-macros", - "thiserror", + "thiserror 1.0.69", "time", ] @@ -3338,6 +3718,30 @@ dependencies = [ "time", ] +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", +] + [[package]] name = "zerocopy" version = "0.7.35" @@ -3356,7 +3760,28 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", + "synstructure 0.13.1", ] [[package]] @@ -3376,5 +3801,27 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.98", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.98", ] diff --git a/flbrowser/Cargo.toml b/flbrowser/Cargo.toml index 09951471..e66ce738 100644 --- a/flbrowser/Cargo.toml +++ b/flbrowser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "flbrowser" -version = "0.8.0" +version = "0.9.0" authors = ["Linus Gasser "] edition = "2021" description = "Web interface for fledger" @@ -15,9 +15,9 @@ opt-level = 's' local = [] [dependencies] -flarch = {path="../flarch", version = "0.8"} -flmodules = {path="../flmodules", version = "0.8"} -flnode = {path = "../flnode", version = "0.8"} +flarch = {path="../flarch", version = "0.9"} +flmodules = {path="../flmodules", version = "0.9"} +flnode = {path = "../flnode", version = "0.9"} chrono = "0.4" anyhow = "1" diff --git a/flbrowser/index.html b/flbrowser/index.html index 9c66b7dc..72658470 100644 --- a/flbrowser/index.html +++ b/flbrowser/index.html @@ -15,13 +15,22 @@

Starting up

Nodes connected/online: / -

+ +