diff --git a/crates/.cargo/config b/.cargo/config similarity index 100% rename from crates/.cargo/config rename to .cargo/config diff --git a/Cargo.lock b/Cargo.lock index 8a3191f..050b261 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,18 +4,18 @@ version = 3 [[package]] name = "aho-corasick" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e" dependencies = [ "memchr", ] [[package]] name = "anyhow" -version = "1.0.63" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26fa4d7e3f2eebadf743988fc8aec9fa9a9e82611acafd77c1462ed6262440a" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" [[package]] name = "atty" @@ -48,9 +48,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "block-buffer" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" dependencies = [ "generic-array", ] @@ -82,15 +82,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cmake" -version = "0.1.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" -dependencies = [ - "cc", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -119,9 +110,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "cpufeatures" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc948ebb96241bb40ab73effeb80d9f93afaad49359d159a5e61be51619fe813" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -138,9 +129,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.75" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b7df2292959b7e22a5cb39d37b7e72b2c748b12f956cc409b529fddcdc8857b" +checksum = "19f39818dcfc97d45b03953c1292efc4e80954e1583c4aa770bac1383e2310a4" dependencies = [ "cc", "cxxbridge-flags", @@ -150,9 +141,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.75" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0806e5c64f74bd64b94d857b1c28cc3d493579a65f5f31e7d3451706d4025405" +checksum = "3e580d70777c116df50c390d1211993f62d40302881e54d4b79727acb83d0199" dependencies = [ "cc", "codespan-reporting", @@ -165,15 +156,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.75" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2069b1573efd6e5901004e8fdca2e28bc6f47f86dc24da81182851e71cf3208" +checksum = "56a46460b88d1cec95112c8c363f0e2c39afdb237f60583b0b36343bf627ea9c" [[package]] name = "cxxbridge-macro" -version = "1.0.75" +version = "1.0.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d980827d1ec28ea6e0db545fceaa611eb8e43f70eff8c1c33cc2c96ffa0f0476" +checksum = "747b608fecf06b0d72d440f27acc99288207324b793be2c17991839f3d4995ea" dependencies = [ "proc-macro2", "quote", @@ -182,9 +173,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c" dependencies = [ "block-buffer", "crypto-common", @@ -198,9 +189,9 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "env_logger" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272" dependencies = [ "atty", "humantime", @@ -247,20 +238,61 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" dependencies = [ - "matches", "percent-encoding", ] +[[package]] +name = "futures" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" +dependencies = [ + "futures-core", + "futures-sink", +] + [[package]] name = "futures-core" version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" +[[package]] +name = "futures-executor" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" + [[package]] name = "futures-macro" version = "0.3.24" @@ -290,10 +322,13 @@ version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ + "futures-channel", "futures-core", + "futures-io", "futures-macro", "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", @@ -360,9 +395,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.7.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "humantime" @@ -372,11 +407,10 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "idna" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" dependencies = [ - "matches", "unicode-bidi", "unicode-normalization", ] @@ -402,9 +436,9 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] @@ -417,9 +451,9 @@ checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "jobserver" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b" dependencies = [ "libc", ] @@ -432,9 +466,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.132" +version = "0.2.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" [[package]] name = "libwebrtc-sys" @@ -467,19 +501,19 @@ name = "livekit-core" version = "0.1.0" dependencies = [ "anyhow", - "env_logger", + "futures", "futures-util", "lazy_static", "livekit-webrtc", - "log", - "prost 0.11.0", + "prost", "prost-build", - "prost-types 0.11.1", + "prost-types", "serde", "serde_json", "thiserror", "tokio", "tokio-tungstenite", + "tracing", "url", ] @@ -497,9 +531,9 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", @@ -514,12 +548,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - [[package]] name = "memchr" version = "2.5.0" @@ -574,15 +602,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.13.1" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "openssl" -version = "0.10.41" +version = "0.10.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "618febf65336490dfcf20b73f885f5651a0c89c64c2d4a8c3662585a70bf5bd0" +checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13" dependencies = [ "bitflags", "cfg-if", @@ -612,9 +640,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.75" +version = "0.9.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f9bd0c2710541a3cda73d6f9ac4f1b240de4ae261065d309dbe73d9dceb42f" +checksum = "5230151e44c0f05157effb743e8d517472843121cf9243e8b81393edb5acd9ce" dependencies = [ "autocfg", "cc", @@ -648,9 +676,9 @@ dependencies = [ [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "petgraph" @@ -688,23 +716,13 @@ checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] -[[package]] -name = "prost" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" -dependencies = [ - "bytes", - "prost-derive 0.10.1", -] - [[package]] name = "prost" version = "0.11.0" @@ -712,44 +730,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" dependencies = [ "bytes", - "prost-derive 0.11.0", + "prost-derive", ] [[package]] name = "prost-build" -version = "0.10.4" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab" +checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb" dependencies = [ "bytes", - "cfg-if", - "cmake", "heck", "itertools", "lazy_static", "log", "multimap", "petgraph", - "prost 0.10.4", - "prost-types 0.10.1", + "prost", + "prost-types", "regex", "tempfile", "which", ] -[[package]] -name = "prost-derive" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "prost-derive" version = "0.11.0" @@ -763,16 +766,6 @@ dependencies = [ "syn", ] -[[package]] -name = "prost-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" -dependencies = [ - "bytes", - "prost 0.10.4", -] - [[package]] name = "prost-types" version = "0.11.1" @@ -780,7 +773,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" dependencies = [ "bytes", - "prost 0.11.0", + "prost", ] [[package]] @@ -815,9 +808,9 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] @@ -976,9 +969,9 @@ checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" [[package]] name = "socket2" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c98bba371b9b22a71a9414e420f92ddeb2369239af08200816169d5e2dd7aa" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -986,9 +979,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.99" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" dependencies = [ "proc-macro2", "quote", @@ -1020,18 +1013,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.32" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.32" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", @@ -1055,9 +1048,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.20.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ "autocfg", "bytes", @@ -1065,12 +1058,12 @@ dependencies = [ "memchr", "mio", "num_cpus", - "once_cell", "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", "tokio-macros", + "tracing", "winapi", ] @@ -1109,6 +1102,38 @@ dependencies = [ "tungstenite", ] +[[package]] +name = "tracing" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +dependencies = [ + "cfg-if", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +dependencies = [ + "once_cell", +] + [[package]] name = "tungstenite" version = "0.17.3" @@ -1143,34 +1168,33 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "unicode-normalization" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" dependencies = [ "tinyvec", ] [[package]] name = "unicode-width" -version = "0.1.9" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" [[package]] name = "url" -version = "2.2.2" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" dependencies = [ "form_urlencoded", "idna", - "matches", "percent-encoding", ] @@ -1200,13 +1224,13 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "which" -version = "4.2.5" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" dependencies = [ "either", - "lazy_static", "libc", + "once_cell", ] [[package]] diff --git a/crates/livekit-core/Cargo.lock b/crates/livekit-core/Cargo.lock deleted file mode 100644 index ad165bf..0000000 --- a/crates/livekit-core/Cargo.lock +++ /dev/null @@ -1,935 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "anyhow" -version = "1.0.62" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1485d4d2cc45e7b201ee3767015c96faa5904387c9d87c6efdd0fb511f12d305" - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block-buffer" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" -dependencies = [ - "generic-array", -] - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "bytes" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "cmake" -version = "0.1.48" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" -dependencies = [ - "cc", -] - -[[package]] -name = "cpufeatures" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" -dependencies = [ - "libc", -] - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "digest" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "either" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" - -[[package]] -name = "env_logger" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" -dependencies = [ - "atty", - "humantime", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "fastrand" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[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.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" -dependencies = [ - "matches", - "percent-encoding", -] - -[[package]] -name = "futures-core" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" - -[[package]] -name = "futures-macro" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0db9cce532b0eae2ccf2766ab246f114b56b9cf6d445e00c2549fbc100ca045d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca0bae1fe9752cf7fd9b0064c674ae63f97b37bc714d745cbde0afb7ec4e6765" - -[[package]] -name = "futures-task" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "842fc63b931f4056a24d59de13fb1272134ce261816e063e634ad0c15cdc5306" - -[[package]] -name = "futures-util" -version = "0.3.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0828a5471e340229c11c77ca80017937ce3c58cb788a17e5f1c2d5c485a9577" -dependencies = [ - "futures-core", - "futures-macro", - "futures-sink", - "futures-task", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" -dependencies = [ - "cfg-if", - "libc", - "wasi", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "http" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "httparse" -version = "1.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c" - -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "itertools" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.132" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" - -[[package]] -name = "livekit" -version = "0.1.0" -dependencies = [ - "env_logger", - "futures-util", - "log", - "prost", - "prost-build", - "prost-types", - "thiserror", - "tokio", - "tokio-tungstenite", - "url", -] - -[[package]] -name = "lock_api" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "matches" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "mio" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys", -] - -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys", -] - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "petgraph" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "ppv-lite86" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "proc-macro2" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "prost" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e" -dependencies = [ - "bytes", - "prost-derive", -] - -[[package]] -name = "prost-build" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab" -dependencies = [ - "bytes", - "cfg-if", - "cmake", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost", - "prost-types", - "regex", - "tempfile", - "which", -] - -[[package]] -name = "prost-derive" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "prost-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" -dependencies = [ - "bytes", - "prost", -] - -[[package]] -name = "quote" -version = "1.0.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rand" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" -dependencies = [ - "libc", - "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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "remove_dir_all" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" -dependencies = [ - "winapi", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "sha-1" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" -dependencies = [ - "libc", -] - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" - -[[package]] -name = "socket2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "syn" -version = "1.0.99" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "tempfile" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" -dependencies = [ - "cfg-if", - "fastrand", - "libc", - "redox_syscall", - "remove_dir_all", - "winapi", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" - -[[package]] -name = "tokio" -version = "1.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "once_cell", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "winapi", -] - -[[package]] -name = "tokio-macros" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.17.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - -[[package]] -name = "tungstenite" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" -dependencies = [ - "base64", - "byteorder", - "bytes", - "http", - "httparse", - "log", - "rand", - "sha-1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "unicode-bidi" -version = "0.3.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" - -[[package]] -name = "unicode-ident" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" - -[[package]] -name = "unicode-normalization" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "url" -version = "2.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" -dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", -] - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "which" -version = "4.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" -dependencies = [ - "either", - "lazy_static", - "libc", -] - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[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-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" diff --git a/crates/livekit-core/Cargo.toml b/crates/livekit-core/Cargo.toml index 893c954..4483e7d 100644 --- a/crates/livekit-core/Cargo.toml +++ b/crates/livekit-core/Cargo.toml @@ -6,9 +6,9 @@ edition = "2021" [dependencies] serde = { version = "1", features = ["derive"] } serde_json = "1.0" -log = "0.4" tokio-tungstenite = { version = "0.17.2", features = ["native-tls"] } -tokio = { version = "1.20.1", features = ["full"] } +tokio = { version = "1", features = ["full", "tracing"] } +futures = "0.3" url = "2.2.2" futures-util = "0.3.23" thiserror = "1.0" @@ -17,9 +17,7 @@ prost-types = "0.11.1" anyhow = "1.0.63" livekit-webrtc = { path = "../livekit-webrtc" } lazy_static = "1.4.0" +tracing = "0.1" [build-dependencies] -prost-build = { version = "0.10" } - -[dev-dependencies] -env_logger = "0.9" +prost-build = { version = "0.11.1" } \ No newline at end of file diff --git a/crates/livekit-core/protocol b/crates/livekit-core/protocol index 6ec04e9..dc2a7bc 160000 --- a/crates/livekit-core/protocol +++ b/crates/livekit-core/protocol @@ -1 +1 @@ -Subproject commit 6ec04e9ca47ebad2f3426be543fb6cbeef58c2b5 +Subproject commit dc2a7bc3a05fe37f5c64cdb83ac36aeb00672778 diff --git a/crates/livekit-core/src/lk_runtime.rs b/crates/livekit-core/src/lk_runtime.rs index 269dce0..8858598 100644 --- a/crates/livekit-core/src/lk_runtime.rs +++ b/crates/livekit-core/src/lk_runtime.rs @@ -1,4 +1,5 @@ -use log::trace; +use std::fmt::{Debug, Formatter}; +use tracing::{event, Level}; use livekit_webrtc::peer_connection_factory::PeerConnectionFactory; use livekit_webrtc::webrtc::RTCRuntime; @@ -11,9 +12,15 @@ pub struct LKRuntime { pub rtc_runtime: RTCRuntime, } +impl Debug for LKRuntime { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + write!(f, "LKRuntime") + } +} + impl LKRuntime { pub fn new() -> Self { - trace!("LKRuntime::new()"); + event!(Level::TRACE, "LKRuntime::new()"); let rtc_runtime = RTCRuntime::new(); Self { pc_factory: PeerConnectionFactory::new(rtc_runtime.clone()), @@ -24,6 +31,6 @@ impl LKRuntime { impl Drop for LKRuntime { fn drop(&mut self) { - trace!("LKRuntime::drop()"); + event!(Level::TRACE, "LKRuntime::drop()"); } } diff --git a/crates/livekit-core/src/pc_transport.rs b/crates/livekit-core/src/pc_transport.rs index 2431e78..0c65e3f 100644 --- a/crates/livekit-core/src/pc_transport.rs +++ b/crates/livekit-core/src/pc_transport.rs @@ -1,9 +1,7 @@ use std::future::Future; use std::pin::Pin; use std::time::Duration; - -use log::{error, trace}; - +use tracing::{Level, event}; use livekit_webrtc::jsep::{IceCandidate, SessionDescription}; use livekit_webrtc::peer_connection::{ IceConnectionState, PeerConnection, RTCOfferAnswerOptions, SignalingState, @@ -96,7 +94,7 @@ impl PCTransport { } if options.ice_restart { - trace!("restarting ICE"); + event!(Level::TRACE, "restarting ICE"); self.restarting_ice = true; } @@ -107,7 +105,7 @@ impl PCTransport { .set_remote_description(remote_description) .await?; } else { - error!("trying to ice restart when the pc doesn't have remote description"); + event!(Level::ERROR, "trying to restart ICE when the pc doesn't have remote description"); } } else { self.renegotiate = true; @@ -116,7 +114,6 @@ impl PCTransport { } let offer = self.peer_connection.create_offer(options).await?; - trace!("created offer {:?}", offer); self.peer_connection .set_local_description(offer.clone()) .await?; diff --git a/crates/livekit-core/src/room.rs b/crates/livekit-core/src/room.rs index b044574..e061a91 100644 --- a/crates/livekit-core/src/room.rs +++ b/crates/livekit-core/src/room.rs @@ -1,6 +1,5 @@ use std::sync::Arc; use std::time::Duration; -use log::trace; use thiserror::Error; use tokio::sync::Mutex; @@ -8,7 +7,6 @@ use tokio::time::sleep; use crate::local_participant::LocalParticipant; use crate::proto::data_packet; -use crate::proto::signal_request::Message::Mute; use crate::rtc_engine; use crate::rtc_engine::{EngineError, RTCEngine}; @@ -25,15 +23,13 @@ pub struct Room { engine: Arc>, } +#[tracing::instrument] pub async fn connect(url: &str, token: &str) -> Result { let engine = rtc_engine::connect(url, token).await?; engine.on_data(Box::new(|packet| { - trace!("This is a test"); - Box::pin(async move { - trace!("Another test"); - }) + Box::pin(async move {}) })).await; let join = engine.join_response().await; @@ -64,10 +60,13 @@ impl Room { } +// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjgxMzc0NDgsImlzcyI6IkFQSXpLYkFTaUNWYWtnSiIsIm5hbWUiOiJ3ZWIiLCJuYmYiOjE2NjQ1Mzc0NDgsInN1YiI6IndlYiIsInZpZGVvIjp7InJvb21DcmVhdGUiOnRydWUsInJvb21Kb2luIjp0cnVlfX0.6VMDdXJYrW3KWrEzxx4hzbmMQnjQIRILQ48Qrbx5j44 #[tokio::test] async fn test_test() { - env_logger::init(); + // console_subscriber::init(); + let mut room = connect("ws://localhost:7880", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzEyMzk4NjAsImlzcyI6IkFQSXpLYkFTaUNWYWtnSiIsIm5hbWUiOiJ0ZXN0IiwibmJmIjoxNjY0MDM5ODYwLCJzdWIiOiJ0ZXN0IiwidmlkZW8iOnsicm9vbUFkbWluIjp0cnVlLCJyb29tQ3JlYXRlIjp0cnVlLCJyb29tSm9pbiI6dHJ1ZX19.0Bee2jI2cSZveAbZ8MLc-ADoMYQ4l8IRxcAxpXAS6a8").await.unwrap(); room.local_participant().publish_data(b"This is a test", data_packet::Kind::Reliable).await.unwrap(); - //sleep(Duration::from_secs(60)).await; + + sleep(Duration::from_secs(60)).await; } diff --git a/crates/livekit-core/src/rtc_engine.rs b/crates/livekit-core/src/rtc_engine.rs index 1156e30..76de28f 100644 --- a/crates/livekit-core/src/rtc_engine.rs +++ b/crates/livekit-core/src/rtc_engine.rs @@ -1,15 +1,17 @@ +use std::fmt::{Debug, Formatter}; use std::future::Future; use std::pin::Pin; -use std::sync::{Arc, Weak}; use std::sync::atomic::{AtomicBool, AtomicU8, Ordering}; +use std::sync::{Arc, Weak}; use std::time::Duration; use lazy_static::lazy_static; -use log::{error, trace}; use prost::Message; +use serde::{Deserialize, Serialize}; use thiserror::Error; use tokio::sync::{mpsc, Mutex}; use tokio::time; +use tracing::{event, Level}; use livekit_webrtc::data_channel::{DataChannel, DataChannelInit, DataSendError, DataState}; use livekit_webrtc::jsep::{IceCandidate, SdpParseError, SessionDescription}; @@ -21,16 +23,15 @@ use livekit_webrtc::peer_connection_factory::{ }; use livekit_webrtc::rtc_error::RTCError; -use crate::{proto, signal_client}; use crate::lk_runtime::LKRuntime; use crate::pc_transport::PCTransport; +use crate::proto::data_packet::Value; use crate::proto::{ - data_packet, DataPacket, JoinResponse, signal_request, signal_response, SignalTarget, + data_packet, signal_request, signal_response, DataPacket, JoinResponse, SignalTarget, TrickleRequest, UserPacket, }; -use crate::proto::data_packet::Value; use crate::signal_client::{SignalClient, SignalError}; -use serde::{Deserialize, Serialize}; +use crate::{proto, signal_client}; const LOSSY_DC_LABEL: &str = "_lossy"; const RELIABLE_DC_LABEL: &str = "_reliable"; @@ -42,6 +43,7 @@ lazy_static! { } #[derive(Serialize, Deserialize)] +#[allow(non_snake_case)] struct IceCandidateJSON { sdpMid: String, sdpMLineIndex: i32, @@ -101,18 +103,19 @@ pub enum EngineMessage { Data { data: Vec, binary: bool, - reliable: bool, }, } pub type OnDataHandler = -Box Pin + Send + 'static>>) + Send + Sync>; + Box Pin + Send + 'static>>) + Send + Sync>; struct EngineInternal { publisher_pc: Arc>, subscriber_pc: Arc>, lossy_dc: Arc>, reliable_dc: Arc>, + lossy_dc_sub: Arc>>, + reliable_dc_sub: Arc>>, msg_sender: mpsc::Sender, join_response: Mutex, @@ -124,6 +127,13 @@ struct EngineInternal { on_data_handler: Arc>>, } +impl Debug for EngineInternal { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + write!(f, "EngineInternal") + } +} + +#[derive(Debug)] pub struct RTCEngine { signal_client: Arc, internal: Arc, @@ -132,6 +142,7 @@ pub struct RTCEngine { lk_runtime: Arc, // Keep a reference while we're using the RTCEngine } +#[tracing::instrument] pub async fn connect(url: &str, token: &str) -> Result { // Acquire an existing/a new LKRuntime let mut lk_runtime_ref = LK_RUNTIME.lock().await; @@ -145,8 +156,8 @@ pub async fn connect(url: &str, token: &str) -> Result { let lk_runtime = lk_runtime.unwrap(); let signal_client = Arc::new(signal_client::connect(url, token).await?); - if let signal_response::Message::Join(join_response) = signal_client.recv().await? { - trace!("received join_response: {:?}", join_response); + if let Some(signal_response::Message::Join(join_response)) = signal_client.recv().await { + event!(Level::DEBUG, "received JoinResponse: {:?}", join_response); let (sender, receiver) = mpsc::channel(8); let internal = Arc::new(RTCEngine::configure( lk_runtime.clone(), @@ -179,6 +190,7 @@ pub async fn connect(url: &str, token: &str) -> Result { impl RTCEngine { /// Send data to other participants in the Room + #[tracing::instrument] pub async fn publish_data( &mut self, data: &DataPacket, @@ -210,6 +222,7 @@ impl RTCEngine { } } + #[tracing::instrument] async fn ensure_publisher_connected( &mut self, kind: data_packet::Kind, @@ -218,11 +231,12 @@ impl RTCEngine { return Ok(()); } + let publisher = &self.internal.publisher_pc; { - let mut publisher = self.internal.publisher_pc.lock().await; + let mut publisher = publisher.lock().await; if !publisher.is_connected() && publisher.peer_connection().ice_connection_state() - != IceConnectionState::IceConnectionChecking + != IceConnectionState::IceConnectionChecking { tokio::spawn({ let rtc_internal = self.internal.clone(); @@ -234,55 +248,44 @@ impl RTCEngine { } let dc = self.data_channel(kind); - { - let dc = self.data_channel(kind).lock().await; - if dc.state() == DataState::Open { - return Ok(()); - } + if dc.lock().await.state() == DataState::Open { + return Ok(()); } - let res = time::timeout(MAX_ICE_CONNECT_TIMEOUT, { - let internal = self.internal.clone(); + let res = time::timeout(MAX_ICE_CONNECT_TIMEOUT, async move { + let mut interval = time::interval(Duration::from_millis(50)); - async move { - let mut interval = time::interval(Duration::from_millis(50)); - - loop { - if internal.publisher_pc.lock().await.is_connected() && dc.lock().await.state() == DataState::Open { - break; - } - - interval.tick().await; + loop { + if publisher.lock().await.is_connected() + && dc.lock().await.state() == DataState::Open + { + break; } + + interval.tick().await; } }) - .await; + .await; if res.is_err() { - Err(EngineError::Connection( - "could not establish publisher connection".to_string(), - )) + let err = + EngineError::Connection("could not establish publisher connection".to_string()); + event!(Level::ERROR, error = ?err); + Err(err) } else { Ok(()) } } - fn send_request(msg: signal_request::Message, signal_client: Arc) { - tokio::spawn(async move { - if let Err(err) = signal_client.send(msg).await { - error!("failed to send signal: {:?}", err); - } - }); - } - + #[tracing::instrument] async fn handle_signal( signal: signal_response::Message, - signal_client: &Arc, - rtc_internal: &Arc, + signal_client: Arc, + rtc_internal: Arc, ) -> Result<(), EngineError> { match signal { signal_response::Message::Answer(answer) => { - trace!("received answer for publisher: {:?}", answer); + event!(Level::TRACE, "received answer for publisher: {:?}", answer); let sdp = SessionDescription::from(answer.r#type.parse().unwrap(), &answer.sdp)?; rtc_internal .publisher_pc @@ -292,35 +295,46 @@ impl RTCEngine { .await?; } signal_response::Message::Offer(offer) => { + event!(Level::TRACE, "received offer for subscriber: {:?}", offer); let sdp = SessionDescription::from(offer.r#type.parse().unwrap(), &offer.sdp)?; - let mut subscriber_pc = rtc_internal.subscriber_pc.lock().await; + let subscriber_pc = &rtc_internal.subscriber_pc; - subscriber_pc.set_remote_description(sdp).await?; + subscriber_pc + .lock() + .await + .set_remote_description(sdp) + .await?; let answer = subscriber_pc + .lock() + .await .peer_connection() .create_answer(RTCOfferAnswerOptions::default()) .await?; subscriber_pc + .lock() + .await .peer_connection() .set_local_description(answer.clone()) .await?; - Self::send_request( - signal_request::Message::Answer(proto::SessionDescription { - r#type: "answer".to_string(), - sdp: answer.to_string(), - }), - signal_client.clone(), - ); + tokio::spawn(async move { + let _ = signal_client.send(signal_request::Message::Answer( + proto::SessionDescription { + r#type: "answer".to_string(), + sdp: answer.to_string(), + }, + )).await; + }); } signal_response::Message::Trickle(trickle) => { let json: IceCandidateJSON = serde_json::from_str(&trickle.candidate_init)?; let ice = IceCandidate::from(&json.sdpMid, json.sdpMLineIndex, &json.candidate)?; - trace!( - "received ice_candidate: {:?} (publisher: {:?})", - ice, - trickle.target + event!( + Level::TRACE, + "received ice_candidate ({:?}) - {:?}", + SignalTarget::from_i32(trickle.target).unwrap(), + ice ); if trickle.target == SignalTarget::Publisher as i32 { @@ -345,40 +359,45 @@ impl RTCEngine { Ok(()) } + #[tracing::instrument] async fn handle_message( msg: EngineMessage, - signal_client: &Arc, - rtc_internal: &Arc, + signal_client: Arc, + rtc_internal: Arc, ) -> Result<(), EngineError> { match msg { EngineMessage::IceCandidate { ice_candidate, publisher, } => { - trace!( - "sending ice_candidate: {:?} (publisher: {:?})", - ice_candidate, - publisher + let target = if publisher { + SignalTarget::Publisher + } else { + SignalTarget::Subscriber + }; + + event!( + Level::TRACE, + "sending ice_candidate ({:?}) - {:?}", + target, + ice_candidate ); let json = serde_json::to_string(&IceCandidateJSON { sdpMid: ice_candidate.sdp_mid(), sdpMLineIndex: ice_candidate.sdp_mline_index(), - candidate: ice_candidate.candidate() + candidate: ice_candidate.candidate(), })?; // Send the ice_candidate to the server - Self::send_request( - signal_request::Message::Trickle(TrickleRequest { - candidate_init: json, - target: if publisher { - SignalTarget::Publisher - } else { - SignalTarget::Subscriber - } as i32, - }), - signal_client.clone(), - ); + tokio::spawn(async move { + let _ = signal_client.send(signal_request::Message::Trickle( + TrickleRequest { + candidate_init: json, + target: target as i32 + }, + )).await; + }); } EngineMessage::ConnectionChange { state, primary } => { if primary && state == PeerConnectionState::Connected { @@ -400,37 +419,44 @@ impl RTCEngine { } EngineMessage::PrimaryDataChannel { mut data_channel } => { let reliable = data_channel.label() == RELIABLE_DC_LABEL; - Self::configure_dc(&mut data_channel, reliable, rtc_internal.msg_sender.clone()); + Self::configure_dc(&mut data_channel, rtc_internal.msg_sender.clone()); - trace!( - "received and using subscriber datachannel (reliable: {:?})", - reliable + event!( + Level::TRACE, + "received subscriber data_channel - {:?}", + data_channel ); + if reliable { - *rtc_internal.reliable_dc.lock().await = data_channel; + *rtc_internal.reliable_dc_sub.lock().await = Some(data_channel); } else { - *rtc_internal.lossy_dc.lock().await = data_channel; + *rtc_internal.lossy_dc_sub.lock().await = Some(data_channel); } } EngineMessage::PublisherOffer { offer } => { - trace!("received publisher offer: {:?}", offer); - // Send the offer to the server - Self::send_request( - signal_request::Message::Offer(proto::SessionDescription { - r#type: "offer".to_string(), - sdp: offer.to_string(), - }), - signal_client.clone(), + event!( + Level::TRACE, + "sending publisher offer - {:?}", + offer ); + + // Send the offer to the server + tokio::spawn(async move { + let _ = signal_client.send(signal_request::Message::Offer( + proto::SessionDescription { + r#type: "offer".to_string(), + sdp: offer.to_string(), + }, + )).await; + }); } EngineMessage::Data { data, binary, - reliable: _, } => { if !binary { return Err(EngineError::Internal( - "text message aren't supported by LiveKit".to_string(), + "text messages aren't supported by LiveKit".to_string(), )); } @@ -442,7 +468,8 @@ impl RTCEngine { f(Packet { data: user, kind: data_packet::Kind::from_i32(data.kind).unwrap(), - }).await; + }) + .await; } } Value::Speaker(_) => { @@ -455,6 +482,7 @@ impl RTCEngine { Ok(()) } + #[tracing::instrument] async fn handle_loop( mut receiver: mpsc::Receiver, signal_client: Arc, @@ -462,25 +490,44 @@ impl RTCEngine { ) { loop { tokio::select! { - Ok(signal) = signal_client.recv() => { - trace!("received signal: {:?}", signal); - if let Err(err) = Self::handle_signal(signal, &signal_client, &rtc_internal).await { - error!("failed to handle signal: {:?}", err); + signal = signal_client.recv() => { + match signal { + Some(signal) => { + if let Err(err) = Self::handle_signal(signal, signal_client.clone(), rtc_internal.clone()).await { + event!( + Level::ERROR, + "failed to handle signal: {:?}", + err, + ); + } + } + None => { + // TODO{theomonnom) Trigger reconnect + } } }, Some(msg) = receiver.recv() => { - if let Err(err) = Self::handle_message(msg, &signal_client, &rtc_internal).await { - error!("failed to handle engine message: {:?}", err); + if let Err(err) = Self::handle_message(msg, signal_client.clone(), rtc_internal.clone()).await { + event!( + Level::ERROR, + "failed to handle engine message: {:?}", + err, + ); } - } + }, } } } + #[tracing::instrument] async fn negotiate_publisher(rtc_internal: Arc) -> Result<(), EngineError> { rtc_internal.has_published.store(true, Ordering::SeqCst); if let Err(err) = rtc_internal.publisher_pc.lock().await.negotiate().await { - error!("failed to negotiate the publisher: {:?}", err); + event!( + Level::ERROR, + "failed to negotiate the publisher: {:?}", + err, + ); Err(EngineError::Rtc(err)) } else { Ok(()) @@ -488,7 +535,8 @@ impl RTCEngine { } /// This function is called on connect & on reconnect - /// It creates the PeerConnections, the DataChannels & the libwebrtc listeners + /// It creates the PeerConnections, the DataChannels and the libwebrtc listeners + #[tracing::instrument] fn configure( lk_runtime: Arc, sender: mpsc::Sender, @@ -543,9 +591,11 @@ impl RTCEngine { Box::new(move |offer| { let sender = sender.clone(); - Box::pin(async move { + tokio::spawn(async move { let _ = sender.send(EngineMessage::PublisherOffer { offer }).await; - }) + }); + + Box::pin(async move {}) }) }); @@ -605,14 +655,16 @@ impl RTCEngine { }, )?; - Self::configure_dc(&mut lossy_dc, true, sender.clone()); - Self::configure_dc(&mut reliable_dc, false, sender.clone()); + Self::configure_dc(&mut lossy_dc, sender.clone()); + Self::configure_dc(&mut reliable_dc, sender.clone()); Ok(EngineInternal { publisher_pc: Arc::new(Mutex::new(publisher_pc)), subscriber_pc: Arc::new(Mutex::new(subscriber_pc)), lossy_dc: Arc::new(Mutex::new(lossy_dc)), reliable_dc: Arc::new(Mutex::new(reliable_dc)), + lossy_dc_sub: Default::default(), + reliable_dc_sub: Default::default(), msg_sender: sender, join_response: Mutex::new(join), pc_state: AtomicU8::new(PCState::New as u8), @@ -622,15 +674,14 @@ impl RTCEngine { } /// Map the libwebrtc listeners to a mpsc channel + #[tracing::instrument] fn configure_dc( data_channel: &mut DataChannel, - reliable: bool, sender: mpsc::Sender, ) { data_channel.on_message(Box::new(move |data, binary| { let _ = sender.blocking_send(EngineMessage::Data { data: data.to_vec(), - reliable, binary, }); })); diff --git a/crates/livekit-core/src/signal_client.rs b/crates/livekit-core/src/signal_client.rs index 5fa8715..c86ed60 100644 --- a/crates/livekit-core/src/signal_client.rs +++ b/crates/livekit-core/src/signal_client.rs @@ -1,16 +1,18 @@ -use futures_util::{SinkExt, StreamExt}; +use futures::future::poll_fn; use futures_util::stream::{SplitSink, SplitStream}; -use log::{error, info}; +use futures_util::{SinkExt, StreamExt}; use prost::Message as ProstMessage; +use std::fmt::{Debug, Formatter}; use thiserror::Error; use tokio::net::TcpStream; use tokio::sync::{mpsc, oneshot}; use tokio::task::JoinHandle; -use tokio_tungstenite::{connect_async, MaybeTlsStream, WebSocketStream}; use tokio_tungstenite::tungstenite::{ - Error as WsError, - Message, protocol::frame::{CloseFrame, coding::CloseCode}, + protocol::frame::{coding::CloseCode, CloseFrame}, + Error as WsError, Message, }; +use tokio_tungstenite::{connect_async, MaybeTlsStream, WebSocketStream}; +use tracing::{event, span, Level}; use crate::proto::{signal_request, signal_response, SignalRequest, SignalResponse}; @@ -31,7 +33,7 @@ type WebSocket = WebSocketStream>; #[derive(Debug)] struct RecvMessage { - response_chn: oneshot::Sender>, + response_chn: oneshot::Sender>, } #[derive(Debug)] @@ -49,6 +51,13 @@ pub struct SignalClient { write_handle: JoinHandle<()>, } +impl Debug for SignalClient { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + write!(f, "SignalClient") + } +} + +#[tracing::instrument] pub async fn connect(url: &str, token: &str) -> SignalResult { let mut lk_url = url::Url::parse(url)?; lk_url.set_path("/rtc"); @@ -57,11 +66,14 @@ pub async fn connect(url: &str, token: &str) -> SignalResult { .append_pair("access_token", token) .append_pair("protocol", PROTOCOL_VERSION.to_string().as_str()); - let (ws_stream, _) = connect_async(lk_url).await?; + event!(Level::DEBUG, "connecting to websocket: {}", lk_url); + let (ws_stream, _) = connect_async(lk_url.clone()).await?; + event!(Level::DEBUG, "connected to SignalClient"); + let (ws_writer, ws_reader) = ws_stream.split(); - let (read_tx, read_rx) = mpsc::channel::(1); - let (write_tx, write_rx) = mpsc::channel::(1); + let (read_tx, read_rx) = mpsc::channel::(8); + let (write_tx, write_rx) = mpsc::channel::(8); let (read_shutdown_tx, read_shutdown_rx) = oneshot::channel(); let (write_shutdown_tx, write_shutdown_rx) = oneshot::channel(); @@ -90,7 +102,7 @@ impl SignalClient { let _ = self.read_handle.await; } - pub async fn recv(&self) -> SignalResult { + pub async fn recv(&self) -> Option { let (send, recv) = oneshot::channel(); let msg = RecvMessage { response_chn: send }; let _ = self.read_sender.send(msg).await; @@ -107,6 +119,7 @@ impl SignalClient { recv.await.expect("channel closed") } + #[tracing::instrument] async fn ws_write( mut write_receiver: mpsc::Receiver, mut ws_writer: SplitSink, @@ -115,13 +128,15 @@ impl SignalClient { loop { tokio::select! { Some(msg) = write_receiver.recv() => { + event!(Level::TRACE, "sending: {:?}", msg.signal); + let req = SignalRequest { message: Some(msg.signal), }; let write_res = ws_writer.send(Message::Binary(req.encode_to_vec())).await; if let Err(err) = write_res { - error!("failed to send message to ws: {:?}", err); + event!(Level::ERROR, "failed to send message to ws: {:?}", err); let _ = msg.response_chn.send(Err(err.into())); break; } @@ -140,32 +155,35 @@ impl SignalClient { } } + #[tracing::instrument] async fn ws_read( - mut write_receiver: mpsc::Receiver, + mut read_receiver: mpsc::Receiver, mut ws_reader: SplitStream, mut shutdown_receiver: oneshot::Receiver<()>, ) { loop { tokio::select! { - Some(msg) = write_receiver.recv() => { - let read = ws_reader.next().await; - if read.is_none() { - let _ = msg.response_chn.send(Err(SignalError::WsError(WsError::ConnectionClosed))); - break; - } - let read = read.unwrap(); - match read { - Ok(Message::Binary(data)) => { - let res = SignalResponse::decode(data.as_slice()).expect("failed to decode incoming SignalResponse"); - - // TODO(theomonnon) Handle Message::Pong - let res = res.message.unwrap(); - let _ = msg.response_chn.send(Ok(res)); - } - _ => { - error!("unhandled websocket message: {:?}", read); - let _ = msg.response_chn.send(Err(SignalError::WsError(WsError::ConnectionClosed))); - break; + Some(mut msg) = read_receiver.recv() => { + tokio::select! { + Some(read) = ws_reader.next() => { + match read { + Ok(Message::Binary(data)) => { + let res = SignalResponse::decode(data.as_slice()).expect("failed to decode SignalResponse"); + let signal = res.message.unwrap(); + event!(Level::TRACE, "received: {:?}", signal); + let _ = msg.response_chn.send(Some(signal)); + } + _ => { + event!(Level::ERROR, "unhandled websocket message {:?}", read); + let _ = msg.response_chn.send(None); + } + } + }, + _ = poll_fn(|cx| msg.response_chn.poll_closed(cx)) => { + continue; // Cancelled + }, + else => { + break; // Connection closed } } }, @@ -174,13 +192,3 @@ impl SignalClient { } } } - -#[tokio::test] -async fn test_test() { - env_logger::init(); - let client = connect("ws://localhost:7880", "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NzEyMzk4NjAsImlzcyI6IkFQSXpLYkFTaUNWYWtnSiIsIm5hbWUiOiJ0ZXN0IiwibmJmIjoxNjY0MDM5ODYwLCJzdWIiOiJ0ZXN0IiwidmlkZW8iOnsicm9vbUFkbWluIjp0cnVlLCJyb29tQ3JlYXRlIjp0cnVlLCJyb29tSm9pbiI6dHJ1ZX19.0Bee2jI2cSZveAbZ8MLc-ADoMYQ4l8IRxcAxpXAS6a8").await.unwrap(); - let msg = client.recv().await.unwrap(); - - client.close().await; - info!("Received message {:?}", msg); -} diff --git a/crates/livekit-webrtc/Cargo.toml b/crates/livekit-webrtc/Cargo.toml index 26acf10..c9264ff 100644 --- a/crates/livekit-webrtc/Cargo.toml +++ b/crates/livekit-webrtc/Cargo.toml @@ -6,7 +6,7 @@ homepage = "https://livekit.io" [dependencies] libwebrtc-sys = { path = "./libwebrtc-sys" } -tokio = { version = "1.20.1", features = ["full"] } +tokio = { version = "1", features = ["full"] } cxx = "1.0" log = "0.4" thiserror = "1.0" diff --git a/crates/livekit-webrtc/libwebrtc-sys/Cargo.lock b/crates/livekit-webrtc/libwebrtc-sys/Cargo.lock deleted file mode 100644 index 12e9ece..0000000 --- a/crates/livekit-webrtc/libwebrtc-sys/Cargo.lock +++ /dev/null @@ -1,213 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "cxx" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "873c2e83af70859af2aaecd1f5d862f3790b747b1f4f50fb45a931d000ac0422" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49edea7163bbc7a39e3d829b4b0b66a9d30486973152842b7413f2c7b5632bf" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46b787c15af80277db5c88c6ac6c502ae545e622f010e06f95e540d34931acf" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ba3f3a7efa46626878fb5d324fabca4d19d2956b6ae97ce43044ef4515f5abc" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "glob" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" - -[[package]] -name = "link-cplusplus" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cae2cd7ba2f3f63938b9c724475dfb7b9861b545a90324476324ed21dbc8c8" -dependencies = [ - "cc", -] - -[[package]] -name = "livekit-native" -version = "0.1.0" -dependencies = [ - "cxx", - "cxx-build", - "glob", - "regex", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "once_cell" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" - -[[package]] -name = "proc-macro2" -version = "1.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "scratch" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96311ef4a16462c757bb6a39152c40f58f31cd2602a40fceb937e2bc34e6cbab" - -[[package]] -name = "syn" -version = "1.0.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "unicode-ident" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" - -[[package]] -name = "unicode-width" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/crates/livekit-webrtc/libwebrtc-sys/src/data_channel.rs b/crates/livekit-webrtc/libwebrtc-sys/src/data_channel.rs index b41c1e7..a96e2d2 100644 --- a/crates/livekit-webrtc/libwebrtc-sys/src/data_channel.rs +++ b/crates/livekit-webrtc/libwebrtc-sys/src/data_channel.rs @@ -1,3 +1,4 @@ +use std::fmt::{Debug, Formatter}; use std::slice; #[cxx::bridge(namespace = "livekit")] diff --git a/crates/livekit-webrtc/libwebrtc-sys/src/jsep.rs b/crates/livekit-webrtc/libwebrtc-sys/src/jsep.rs index 4c6c0be..1a3fadb 100644 --- a/crates/livekit-webrtc/libwebrtc-sys/src/jsep.rs +++ b/crates/livekit-webrtc/libwebrtc-sys/src/jsep.rs @@ -83,21 +83,9 @@ impl Display for ffi::SdpParseError { } } -impl Debug for ffi::SessionDescription { - fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { - write!(f, "{}", self.stringify()) - } -} - unsafe impl Send for ffi::SessionDescription {} unsafe impl Sync for ffi::SessionDescription {} -impl Debug for ffi::IceCandidate { - fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { - write!(f, "{}", self.stringify()) - } -} - unsafe impl Send for ffi::IceCandidate {} unsafe impl Sync for ffi::IceCandidate {} diff --git a/crates/livekit-webrtc/libwebrtc-sys/src/peer_connection.rs b/crates/livekit-webrtc/libwebrtc-sys/src/peer_connection.rs index 93860df..a3b245d 100644 --- a/crates/livekit-webrtc/libwebrtc-sys/src/peer_connection.rs +++ b/crates/livekit-webrtc/libwebrtc-sys/src/peer_connection.rs @@ -1,3 +1,4 @@ +use std::fmt::{Debug, Formatter}; use cxx::UniquePtr; use crate::candidate::ffi::Candidate; diff --git a/crates/livekit-webrtc/libwebrtc-sys/src/rtc_error.rs b/crates/livekit-webrtc/libwebrtc-sys/src/rtc_error.rs index c3839e3..0e79f13 100644 --- a/crates/livekit-webrtc/libwebrtc-sys/src/rtc_error.rs +++ b/crates/livekit-webrtc/libwebrtc-sys/src/rtc_error.rs @@ -59,8 +59,8 @@ impl ffi::RTCError { let message = String::from(&value[22..]); // msg isn't encoded Self { - error_type: unsafe { std::mem::transmute(error_type) }, - error_detail: unsafe { std::mem::transmute(error_detail) }, + error_type: std::mem::transmute(error_type), + error_detail: std::mem::transmute(error_detail), sctp_cause_code, has_sctp_cause_code: has_scp_cause_code == 1, message, @@ -68,7 +68,7 @@ impl ffi::RTCError { } pub fn ok(&self) -> bool { - return self.error_type == RTCErrorType::None; + self.error_type == RTCErrorType::None } } diff --git a/crates/livekit-webrtc/libwebrtc-sys/src/webrtc.cpp b/crates/livekit-webrtc/libwebrtc-sys/src/webrtc.cpp index 0afc9d9..44c6436 100644 --- a/crates/livekit-webrtc/libwebrtc-sys/src/webrtc.cpp +++ b/crates/livekit-webrtc/libwebrtc-sys/src/webrtc.cpp @@ -8,7 +8,7 @@ namespace livekit { RTCRuntime::RTCRuntime() { - rtc::LogMessage::LogToDebug(rtc::LS_INFO); + //rtc::LogMessage::LogToDebug(rtc::LS_INFO); RTC_LOG(LS_INFO) << "RTCRuntime()"; RTC_CHECK(rtc::InitializeSSL()) << "Failed to InitializeSSL()"; diff --git a/crates/livekit-webrtc/src/data_channel.rs b/crates/livekit-webrtc/src/data_channel.rs index 95efa7c..4056053 100644 --- a/crates/livekit-webrtc/src/data_channel.rs +++ b/crates/livekit-webrtc/src/data_channel.rs @@ -18,7 +18,7 @@ pub struct DataChannel { impl Debug for DataChannel { fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { - write!(f, "DataChannel [{:?}]", self.label()) + write!(f, "DataChannel[{}]", self.label()) } } @@ -100,8 +100,7 @@ impl DataChannel { } pub type OnStateChangeHandler = Box; -pub type OnMessageHandler = Box; -// data, is_binary +pub type OnMessageHandler = Box; // data, is_binary pub type OnBufferedAmountChangeHandler = Box; struct InternalDataChannelObserver { diff --git a/crates/livekit-webrtc/src/jsep.rs b/crates/livekit-webrtc/src/jsep.rs index bf2d40a..88ddcf5 100644 --- a/crates/livekit-webrtc/src/jsep.rs +++ b/crates/livekit-webrtc/src/jsep.rs @@ -1,14 +1,20 @@ +use std::fmt::{Debug, Display, Formatter, write}; use cxx::UniquePtr; use libwebrtc_sys::jsep as sys_jsep; pub use sys_jsep::ffi::{SdpType, SdpParseError}; // TODO Maybe we can replace that by a serialized IceCandidateInit -#[derive(Debug)] pub struct IceCandidate { cxx_handle: UniquePtr, } +impl Debug for IceCandidate { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + write!(f, "IceCandidate[{}]", self.to_string()) + } +} + impl IceCandidate { pub fn from(sdp_mid: &str, sdp_mline_index: i32, sdp: &str) -> Result { let res = sys_jsep::ffi::create_ice_candidate(sdp_mid.to_string(), sdp_mline_index, sdp.to_string()); @@ -46,11 +52,16 @@ impl ToString for IceCandidate { } } -#[derive(Debug)] pub struct SessionDescription { cxx_handle: UniquePtr, } +impl Debug for SessionDescription { + fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { + write!(f, "SessionDescription[{}]", self.to_string()) + } +} + impl SessionDescription { pub fn from(sdp_type: SdpType, description: &str) -> Result { let res = sys_jsep::ffi::create_session_description(sdp_type, description.to_string());