diff --git a/Cargo.lock b/Cargo.lock index 5f677ec..8ad96ed 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -15,7 +15,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ "generic-array", - "rand_core 0.6.3", + "rand_core", ] [[package]] @@ -53,12 +53,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.4.12" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9" -dependencies = [ - "nodrop", -] +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "async-trait" @@ -73,51 +70,36 @@ dependencies = [ [[package]] name = "async-tungstenite" -version = "0.11.0" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7cc5408453d37e2b1c6f01d8078af1da58b6cfa6a80fa2ede3bd2b9a6ada9c4" -dependencies = [ - "futures-io", - "futures-util", - "log", - "pin-project", - "tokio", - "tokio-rustls 0.22.0", - "tungstenite 0.11.1", - "webpki-roots 0.20.0", -] - -[[package]] -name = "async-tungstenite" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8645e929ec7964448a901db9da30cd2ae8c7fecf4d6176af427837531dbbb63b" +checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb" dependencies = [ "futures-io", "futures-util", "log", "pin-project-lite", "tokio", - "tokio-rustls 0.22.0", - "tungstenite 0.13.0", - "webpki-roots 0.21.1", + "tokio-rustls", + "tungstenite", + "webpki-roots", ] [[package]] name = "audiopus" -version = "0.2.0" +version = "0.3.0-rc.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3743519567e9135cf6f9f1a509851cb0c8e4cb9d66feb286668afb1923bec458" +checksum = "ab55eb0e56d7c6de3d59f544e5db122d7725ec33be6a276ee8241f3be6473955" dependencies = [ "audiopus_sys", ] [[package]] name = "audiopus_sys" -version = "0.1.8" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927791de46f70facea982dbfaf19719a41ce6064443403be631a85de6a58fff9" +checksum = "62314a1546a2064e033665d658e88c620a62904be945f8147e6b16c3db9f8651" dependencies = [ + "cmake", "log", "pkg-config", ] @@ -128,12 +110,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "base64" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff" - [[package]] name = "base64" version = "0.13.0" @@ -202,18 +178,18 @@ version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +[[package]] +name = "bytemuck" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c53dfa917ec274df8ed3c572698f381a24eef2efba9492d797301b72b6db408a" + [[package]] name = "byteorder" version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "bytes" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" - [[package]] name = "bytes" version = "1.1.0" @@ -226,12 +202,6 @@ version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - [[package]] name = "cfg-if" version = "1.0.0" @@ -247,7 +217,6 @@ dependencies = [ "libc", "num-integer", "num-traits 0.2.15", - "serde", "time 0.1.44", "winapi", ] @@ -261,6 +230,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "cmake" +version = "0.1.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a" +dependencies = [ + "cc", +] + [[package]] name = "core-foundation" version = "0.9.3" @@ -292,7 +270,7 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -301,7 +279,7 @@ version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d82ee10ce34d7bc12c2122495e7593a9c41347ecdd64185af4ecf72cb1a7f83" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] @@ -351,12 +329,25 @@ dependencies = [ [[package]] name = "dashmap" -version = "4.0.2" +version = "5.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f" dependencies = [ - "cfg-if 1.0.0", - "num_cpus", + "cfg-if", + "hashbrown", + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -392,9 +383,9 @@ dependencies = [ name = "discosip" version = "0.1.0" dependencies = [ - "bytes 1.1.0", + "bytes", "futures", - "rand 0.8.5", + "rand", "rsip", "rtp", "sdp-rs", @@ -410,15 +401,6 @@ dependencies = [ "webrtc-util", ] -[[package]] -name = "encoding_rs" -version = "0.8.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "enum_primitive" version = "0.1.1" @@ -559,15 +541,15 @@ dependencies = [ [[package]] name = "generator" -version = "0.6.25" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061d3be1afec479d56fa3bd182bf966c7999ec175fcfdb87ac14d417241366c6" +checksum = "cc184cace1cea8335047a471cc1da80f18acf8a76f3bab2028d499e328948ec7" dependencies = [ "cc", "libc", "log", "rustversion", - "winapi", + "windows", ] [[package]] @@ -580,24 +562,13 @@ dependencies = [ "version_check", ] -[[package]] -name = "getrandom" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", -] - [[package]] name = "getrandom" version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -610,7 +581,7 @@ version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" dependencies = [ - "bytes 1.1.0", + "bytes", "fnv", "futures-core", "futures-sink", @@ -644,7 +615,7 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ - "bytes 1.1.0", + "bytes", "fnv", "itoa", ] @@ -655,7 +626,7 @@ version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ - "bytes 1.1.0", + "bytes", "http", "pin-project-lite", ] @@ -678,7 +649,7 @@ version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ - "bytes 1.1.0", + "bytes", "futures-channel", "futures-core", "futures-util", @@ -704,10 +675,10 @@ checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" dependencies = [ "http", "hyper", - "rustls 0.20.6", + "rustls", "rustls-native-certs", "tokio", - "tokio-rustls 0.23.4", + "tokio-rustls", ] [[package]] @@ -737,33 +708,6 @@ dependencies = [ "hashbrown", ] -[[package]] -name = "input_buffer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19a8a95243d5a0398cae618ec29477c6e3cb631152be5c19481f80bc71559754" -dependencies = [ - "bytes 0.5.6", -] - -[[package]] -name = "input_buffer" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f97967975f448f1a7ddb12b0bc41069d09ed6a1c161a92687e057325db35d413" -dependencies = [ - "bytes 1.1.0", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if 1.0.0", -] - [[package]] name = "ipnet" version = "2.5.0" @@ -833,20 +777,31 @@ version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", ] [[package]] name = "loom" -version = "0.3.6" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0e8460f2f2121162705187214720353c517b97bdfb3494c0b1e33d83ebe4bed" +checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" dependencies = [ - "cfg-if 0.1.10", + "cfg-if", "generator", "scoped-tls", "serde", "serde_json", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", ] [[package]] @@ -881,22 +836,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -930,7 +869,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" dependencies = [ - "getrandom 0.2.7", + "getrandom", ] [[package]] @@ -940,17 +879,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f17df307904acd05aa8e32e97bb20f2a0df1728bbc2d771ae8f9a90463441e9" dependencies = [ "bitflags", - "cfg-if 1.0.0", + "cfg-if", "libc", "memoffset", ] -[[package]] -name = "nodrop" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" - [[package]] name = "nom" version = "7.1.1" @@ -1035,17 +968,6 @@ dependencies = [ "num-traits 0.2.15", ] -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -1053,21 +975,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", + "parking_lot_core", ] [[package]] @@ -1076,7 +984,7 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "libc", "redox_syscall", "smallvec", @@ -1189,19 +1097,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "rand" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" -dependencies = [ - "getrandom 0.1.16", - "libc", - "rand_chacha 0.2.2", - "rand_core 0.5.1", - "rand_hc", -] - [[package]] name = "rand" version = "0.8.5" @@ -1209,18 +1104,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_chacha" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" -dependencies = [ - "ppv-lite86", - "rand_core 0.5.1", + "rand_chacha", + "rand_core", ] [[package]] @@ -1230,16 +1115,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.3", -] - -[[package]] -name = "rand_core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" -dependencies = [ - "getrandom 0.1.16", + "rand_core", ] [[package]] @@ -1248,16 +1124,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" dependencies = [ - "getrandom 0.2.7", -] - -[[package]] -name = "rand_hc" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" -dependencies = [ - "rand_core 0.5.1", + "getrandom", ] [[package]] @@ -1285,6 +1152,9 @@ name = "regex-automata" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] [[package]] name = "regex-syntax" @@ -1292,47 +1162,6 @@ version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" -[[package]] -name = "reqwest" -version = "0.11.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92" -dependencies = [ - "base64 0.13.0", - "bytes 1.1.0", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "rustls 0.20.6", - "rustls-pemfile", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-rustls 0.23.4", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.22.4", - "winreg", -] - [[package]] name = "ring" version = "0.16.20" @@ -1355,7 +1184,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1690d2cc1b13c9ff67f48f59bd2b0bb9bb57e157b5cce2d0b27ccf8e11964c3" dependencies = [ "bstr", - "bytes 1.1.0", + "bytes", "md-5", "nom", "rsip-derives", @@ -1382,25 +1211,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5110c12c9f7d1e76eba80076cce4ccb82ee085bd10a62472468de0663240f8b5" dependencies = [ "async-trait", - "bytes 1.1.0", - "rand 0.8.5", + "bytes", + "rand", "thiserror", "webrtc-util", ] -[[package]] -name = "rustls" -version = "0.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" -dependencies = [ - "base64 0.13.0", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", -] - [[package]] name = "rustls" version = "0.20.6" @@ -1409,8 +1225,8 @@ checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" dependencies = [ "log", "ring", - "sct 0.7.0", - "webpki 0.22.0", + "sct", + "webpki", ] [[package]] @@ -1431,7 +1247,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9" dependencies = [ - "base64 0.13.0", + "base64", ] [[package]] @@ -1448,9 +1264,9 @@ checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "salsa20" -version = "0.8.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecbd2eb639fd7cab5804a0837fe373cc2172d15437e804c054a9fb885cb923b0" +checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" dependencies = [ "cipher", "zeroize", @@ -1478,16 +1294,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" -[[package]] -name = "sct" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "sct" version = "0.7.0" @@ -1584,47 +1390,10 @@ dependencies = [ "syn", ] -[[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 = "serenity" -version = "0.10.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde86919535c6047e055d512641c5241320c01cb8fee54f1e5ba77c939a0ec23" -dependencies = [ - "async-trait", - "async-tungstenite 0.11.0", - "base64 0.13.0", - "bitflags", - "bytes 1.1.0", - "chrono", - "flate2", - "futures", - "percent-encoding", - "reqwest", - "serde", - "serde_json", - "tokio", - "tracing", - "typemap_rev", - "url", -] - [[package]] name = "serenity-voice-model" version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8be3aec8849ca2fde1e8a5dfbed96fbd68e9b5f4283fbe277d8694ce811d4952" +source = "git+https://github.com/serenity-rs/serenity?branch=next#18ebc5ca418603d4a2d48293c768b4b2711ea282" dependencies = [ "bitflags", "enum_primitive", @@ -1633,26 +1402,13 @@ dependencies = [ "serde_repr", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug", -] - [[package]] name = "sha-1" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.10.3", ] @@ -1664,7 +1420,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", - "cfg-if 1.0.0", + "cfg-if", "cpufeatures", "digest 0.9.0", "opaque-debug", @@ -1713,30 +1469,30 @@ dependencies = [ [[package]] name = "songbird" version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324223cec5772b4374bf82579c884ae3269fb53eb101aca25f8bf41312ab19fc" +source = "git+https://github.com/serenity-rs/songbird?branch=next#49c33461029f5c3a22e12e3d251319237d73b4a4" dependencies = [ "async-trait", - "async-tungstenite 0.14.0", + "async-tungstenite", "audiopus", "byteorder", "dashmap", + "derivative", "discortp", "flume", "futures", - "parking_lot 0.11.2", + "parking_lot", "pin-project", - "rand 0.8.5", + "rand", "serde", "serde_json", - "serenity", "serenity-voice-model", - "spin_sleep", "streamcatcher", "symphonia-core", "tokio", "tracing", "tracing-futures", + "twilight-gateway", + "twilight-model", "typemap_rev", "url", "uuid", @@ -1758,21 +1514,11 @@ dependencies = [ "lock_api", ] -[[package]] -name = "spin_sleep" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cafa7900db085f4354dbc7025e25d7a839a14360ea13b5fc4fd717f2d3b23134" -dependencies = [ - "once_cell", - "winapi", -] - [[package]] name = "streamcatcher" -version = "0.1.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9501b1be04455a53f782940f7ca17050482de0a6e322c1ff606afc0ebbc62674" +checksum = "71664755c349abb0758fda6218fb2d2391ca2a73f9302c03b145491db4fcea29" dependencies = [ "crossbeam-utils", "futures-util", @@ -1793,13 +1539,13 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "symphonia-core" -version = "0.2.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e32b956473d98c601dac257fab8a7700d42e49fdd7a33432dd5dc7fdd2448dd" +checksum = "1edcb254d25e02b688b6f8a290a778153fa5f29674ac50773d03e0a16060391d" dependencies = [ "arrayvec", "bitflags", - "byteorder", + "bytemuck", "lazy_static", "log", ] @@ -1886,13 +1632,13 @@ version = "1.19.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c51a52ed6686dd62c320f9b89299e9dfb46f730c7a48e635c19f21d116cb1439" dependencies = [ - "bytes 1.1.0", + "bytes", "libc", "memchr", "mio", "num_cpus", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", @@ -1911,26 +1657,15 @@ dependencies = [ "syn", ] -[[package]] -name = "tokio-rustls" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" -dependencies = [ - "rustls 0.19.1", - "tokio", - "webpki 0.21.4", -] - [[package]] name = "tokio-rustls" version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ - "rustls 0.20.6", + "rustls", "tokio", - "webpki 0.22.0", + "webpki", ] [[package]] @@ -1952,12 +1687,12 @@ checksum = "f714dd15bead90401d77e04243611caec13726c2408afd5b31901dfcdcb3b181" dependencies = [ "futures-util", "log", - "rustls 0.20.6", + "rustls", "rustls-native-certs", "tokio", - "tokio-rustls 0.23.4", - "tungstenite 0.17.3", - "webpki 0.22.0", + "tokio-rustls", + "tungstenite", + "webpki", ] [[package]] @@ -1966,7 +1701,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc463cd8deddc3770d20f9852143d50bf6094e640b485cb2e189a2099085ff45" dependencies = [ - "bytes 1.1.0", + "bytes", "futures-core", "futures-sink", "pin-project-lite", @@ -1986,7 +1721,7 @@ version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -2042,9 +1777,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a713421342a5a666b7577783721d3117f1b69a393df803ee17bb73b1e122a59" dependencies = [ "ansi_term", + "matchers", + "once_cell", + "regex", "sharded-slab", "smallvec", "thread_local", + "tracing", "tracing-core", "tracing-log", ] @@ -2055,67 +1794,25 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "tungstenite" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0308d80d86700c5878b9ef6321f020f29b1bb9d5ff3cab25e75e23f3a492a23" -dependencies = [ - "base64 0.12.3", - "byteorder", - "bytes 0.5.6", - "http", - "httparse", - "input_buffer 0.3.1", - "log", - "rand 0.7.3", - "sha-1 0.9.8", - "url", - "utf-8", -] - -[[package]] -name = "tungstenite" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe8dada8c1a3aeca77d6b51a4f1314e0f4b8e438b7b1b71e3ddaca8080e4093" -dependencies = [ - "base64 0.13.0", - "byteorder", - "bytes 1.1.0", - "http", - "httparse", - "input_buffer 0.4.0", - "log", - "rand 0.8.5", - "rustls 0.19.1", - "sha-1 0.9.8", - "thiserror", - "url", - "utf-8", - "webpki 0.21.4", - "webpki-roots 0.21.1", -] - [[package]] name = "tungstenite" version = "0.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e27992fd6a8c29ee7eef28fc78349aa244134e10ad447ce3b9f0ac0ed0fa4ce0" dependencies = [ - "base64 0.13.0", + "base64", "byteorder", - "bytes 1.1.0", + "bytes", "http", "httparse", "log", - "rand 0.8.5", - "rustls 0.20.6", - "sha-1 0.10.0", + "rand", + "rustls", + "sha-1", "thiserror", "url", "utf-8", - "webpki 0.22.0", + "webpki", ] [[package]] @@ -2128,7 +1825,7 @@ dependencies = [ "flate2", "futures-util", "leaky-bucket-lite", - "rustls 0.20.6", + "rustls", "rustls-native-certs", "serde", "serde_json", @@ -2162,7 +1859,7 @@ dependencies = [ "hyper", "hyper-rustls", "percent-encoding", - "rand 0.8.5", + "rand", "serde", "serde_json", "tokio", @@ -2219,15 +1916,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.8" @@ -2289,7 +1977,7 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" dependencies = [ - "getrandom 0.2.7", + "getrandom", ] [[package]] @@ -2326,12 +2014,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" - [[package]] name = "wasi" version = "0.10.0+wasi-snapshot-preview1" @@ -2350,7 +2032,7 @@ version = "0.2.81" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" dependencies = [ - "cfg-if 1.0.0", + "cfg-if", "wasm-bindgen-macro", ] @@ -2369,18 +2051,6 @@ dependencies = [ "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de9a9cec1733468a8c657e57fa2413d2ae2c0129b95e87c5b72b8ace4d13f31f" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.81" @@ -2420,16 +2090,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "webpki" -version = "0.21.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "webpki" version = "0.22.0" @@ -2440,31 +2100,13 @@ dependencies = [ "untrusted", ] -[[package]] -name = "webpki-roots" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f20dea7535251981a9670857150d571846545088359b28e4951d350bdaf179f" -dependencies = [ - "webpki 0.21.4", -] - -[[package]] -name = "webpki-roots" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" -dependencies = [ - "webpki 0.21.4", -] - [[package]] name = "webpki-roots" version = "0.22.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1c760f0d366a6c24a02ed7816e23e691f5d92291f94d15e836006fd11b04daf" dependencies = [ - "webpki 0.22.0", + "webpki", ] [[package]] @@ -2475,15 +2117,15 @@ checksum = "8b3050262ce1f70599ca1a12f446a2e73bae80a3152baae7fca4a9a26b8f0c0f" dependencies = [ "async-trait", "bitflags", - "bytes 1.1.0", + "bytes", "cc", "ipnet", "lazy_static", "libc", "log", "nix", - "parking_lot 0.12.1", - "rand 0.8.5", + "parking_lot", + "rand", "thiserror", "tokio", "winapi", @@ -2511,67 +2153,101 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbedf6db9096bc2364adce0ae0aa636dcd89f3c3f2cd67947062aaf0ca2a10ec" +dependencies = [ + "windows_aarch64_msvc 0.32.0", + "windows_i686_gnu 0.32.0", + "windows_i686_msvc 0.32.0", + "windows_x86_64_gnu 0.32.0", + "windows_x86_64_msvc 0.32.0", +] + [[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", + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", ] +[[package]] +name = "windows_aarch64_msvc" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" + [[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.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" + [[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.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" + [[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.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" + [[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.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" + [[package]] name = "windows_x86_64_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - [[package]] name = "xsalsa20poly1305" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0f69b133860e3614a4d4fdd6f0d7fe3219e9d67a7e8cd537676a4ebc8313db" +checksum = "e68bcb965d6c650091450b95cea12f07dcd299a01c15e2f9433b0813ea3c0886" dependencies = [ "aead", "poly1305", - "rand_core 0.6.3", + "rand_core", "salsa20", "subtle", "zeroize", diff --git a/Cargo.toml b/Cargo.toml index dc3a5d9..04312d5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,13 +10,13 @@ rand = "0.8.5" rsip = "0.4.0" rtp = "0.6.5" sdp-rs = "0.2.1" -songbird = { version = "0.2.2", features = ["builtin-queue"]} +songbird = { git = "https://github.com/serenity-rs/songbird", branch = "next", default_features = false, features = ["driver", "twilight-rustls", "zlib-stock"] } tokio = { version = "1.19.2", features = ["full"] } tokio-stream = "0.1.9" tokio-util = { version = "0.7.3", features = ["net", "codec"] } tracing = "0.1.35" tracing-subscriber = "0.3.14" twilight-gateway = "0.11.1" -twilight-http = "0.11.1" +twilight-http = { version = "0.11.1"} twilight-model = "0.11.3" webrtc-util = "0.5.4" diff --git a/src/discord.rs b/src/discord.rs index 9005804..34c5bd7 100644 --- a/src/discord.rs +++ b/src/discord.rs @@ -2,6 +2,7 @@ use crate::StdErr; use futures::stream::StreamExt; use rand::seq::SliceRandom; use rand::{prelude::ThreadRng, thread_rng}; +use songbird::Songbird; use std::cell::RefCell; use std::sync::Arc; use tokio::select; @@ -21,18 +22,37 @@ use twilight_model::{ thread_local!(static RNG: RefCell = RefCell::new(thread_rng())); -const GREETINGS: &'static [&'static str] = - &["You rung?", "Hello there", "Right back atcha", "Yes?"]; +const GREETINGS: &'static [&'static str] = &[ + "You rung?", + "Hello there", + "Right back atcha", + "Yes?", + "Wow, rude", + "Go stick your head in a pig", +]; + +#[derive(Debug)] +pub struct Call { + pub guild_id: u64, + pub channel_id: u64, + pub done: mpsc::Receiver<()>, +} + +struct State { + songbird: Songbird, + client: Client, +} pub async fn run_discord( token: &str, + mut calls: mpsc::Receiver, mut shutdown: broadcast::Receiver<()>, _done: mpsc::Sender<()>, ) -> StdErr<()> { event!(Level::INFO, "Starting..."); let (cluster, mut events) = Cluster::builder( token.to_owned(), - Intents::GUILD_MESSAGES | Intents::MESSAGE_CONTENT, + Intents::GUILD_MESSAGES | Intents::MESSAGE_CONTENT | Intents::GUILD_VOICE_STATES, ) .presence(UpdatePresencePayload::new( vec![MinimalActivity { @@ -47,21 +67,32 @@ pub async fn run_discord( )?) .build() .await?; - let cluster = Arc::new(cluster); - let cluster_spawn = Arc::clone(&cluster); + let client = Client::new(token.to_owned()); + let me = client.current_user().exec().await?.model().await?.id; + let sb = Songbird::twilight(cluster.clone(), me); + let state = Arc::new(State { + songbird: sb, + client, + }); + let cluster_spawn = cluster.clone(); tokio::spawn(async move { cluster_spawn.up().await }); - let client = Arc::new(Client::new(token.to_owned())); + loop { select!( Some((shard_id, ev)) = events.next() => { - let client = client.clone(); + state.songbird.process(&ev).await; + let state_ = state.clone(); tokio::spawn(async move { - if let Err(e) = handle_event(ev, shard_id, client).await { + if let Err(e) = handle_event(ev, shard_id, state_, me).await { event!(Level::ERROR, err=?e, "Error handling discord event"); } }); }, + Some(call) = calls.recv() => { + let state_ = state.clone(); + tokio::spawn(handle_call(call, state_)); + }, _ = shutdown.recv() => { event!(Level::INFO, "Shutting down..."); cluster.down(); @@ -74,18 +105,41 @@ pub async fn run_discord( Ok(()) } +#[instrument(skip(call, state))] +async fn handle_call(mut call: Call, state: Arc) { + let (_handle, success) = state.songbird.join(call.guild_id, call.channel_id).await; + match success { + Ok(()) => event!(Level::INFO, %call.guild_id, %call.channel_id, "Joined channel"), + Err(err) => { + event!(Level::ERROR, %call.guild_id, %call.channel_id, %err, "Error joining channel") + } + } + let _ = call.done.recv().await; + match state.songbird.leave(call.guild_id).await { + Ok(()) => event!(Level::INFO, %call.guild_id, %call.channel_id, "Left channel"), + Err(err) => { + event!(Level::INFO, %call.guild_id, %call.channel_id, %err, "Error leaving channel") + } + } +} + fn mentions(msg: &Message, us: Id) -> bool { msg.mentions.iter().filter(|m| m.id == us).next().is_some() } -#[instrument(skip(client))] -async fn handle_event(ev: Event, shard_id: u64, client: Arc) -> StdErr<()> { - let me = client.current_user().exec().await?.model().await?; +#[instrument(skip(state))] +async fn handle_event( + ev: Event, + shard_id: u64, + state: Arc, + me: Id, +) -> StdErr<()> { match ev { Event::MessageCreate(msg) => { - if mentions(&msg.0, me.id) { + if mentions(&msg.0, me) { let greet = RNG.with(|rng| GREETINGS.choose(&mut *rng.borrow_mut()).unwrap()); - client + state + .client .create_message(msg.channel_id) .content(greet)? .exec() diff --git a/src/main.rs b/src/main.rs index 53b62c5..e899a04 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,18 @@ use futures::{sink::Sink, SinkExt}; -use tokio::sync::{broadcast, mpsc}; -use tokio::signal; use rsip::common::method::Method as SipMethod; use rsip::headers::header::Header as SipHeader; use rsip::message::{request::Request, response::Response, SipMessage}; use sdp_rs::lines::media::{MediaType, ProtoType}; use sdp_rs::lines::{attribute::Rtpmap, Attribute, Media}; use sdp_rs::{MediaDescription, SessionDescription}; -use std::net::SocketAddr; -use std::str; use std::env; use std::net::IpAddr; +use std::net::SocketAddr; +use std::str; use std::time::Duration; use tokio::net::UdpSocket; +use tokio::signal; +use tokio::sync::{broadcast, mpsc}; use tokio::time::sleep; use tokio_stream::StreamExt; use tokio_util::{ @@ -20,17 +20,15 @@ use tokio_util::{ udp::UdpFramed, }; use tracing::{event, instrument, Level}; -use songbird::driver::Driver; mod codecs; -use codecs::{SipCodec, RtpCodec}; +use codecs::{RtpCodec, SipCodec}; mod discord; const SIP_PORT: u16 = 5060; const BIND_ADDR: &str = "0.0.0.0"; // for now - type StdErr = Result>; struct Server {} @@ -42,8 +40,12 @@ struct CurrentCall { } impl Server { - #[instrument(skip(shutdown, _done))] - async fn run_sip(mut shutdown: broadcast::Receiver<()>, _done: mpsc::Sender<()>) -> StdErr<()> { + #[instrument(skip(call_tx, shutdown, _done))] + async fn run_sip( + call_tx: mpsc::Sender, + mut shutdown: broadcast::Receiver<()>, + _done: mpsc::Sender<()>, + ) -> StdErr<()> { event!(Level::INFO, "Starting..."); let socket = UdpSocket::bind(format!("{}:{}", BIND_ADDR, SIP_PORT)).await?; let mut framed = UdpFramed::new(socket, SipCodec {}); @@ -89,9 +91,10 @@ impl Server { // remote's address. This means that `handle_call` // doesn't need to be aware of the remote at all. let res_tx = response_tx.clone(); + let call_tx = call_tx.clone(); tokio::spawn(async move { let res_tx = PollSender::new(res_tx).with::<_, _, _, PollSendError<_>>(|res| {futures::future::ready(Ok((res, remote)))}); - Self::handle_call(&req, res_tx, req_rx).await.unwrap(); + Self::handle_call(&req, res_tx, req_rx, call_tx).await.unwrap(); }); } Some(call) => { @@ -158,12 +161,16 @@ impl Server { if r.encoding_name == "opus" { let prefix = format!("{} ", r.payload_type); // Find the matching fmtp if there is one - let fmtp = md.attributes.iter().filter_map(|a| match a{ - Attribute::Other(fmt, Some(params)) if fmt == "fmtp" => { - params.strip_prefix(&prefix) - }, - _ => None - }).next(); + let fmtp = md + .attributes + .iter() + .filter_map(|a| match a { + Attribute::Other(fmt, Some(params)) if fmt == "fmtp" => { + params.strip_prefix(&prefix) + } + _ => None, + }) + .next(); Some((r.clone(), fmtp)) } else { None @@ -178,13 +185,14 @@ impl Server { // Handle a call #[instrument( level = "info", - skip(invite, responses, requests) + skip(invite, responses, requests, call_tx) fields() )] async fn handle_call + std::marker::Unpin>( invite: &Request, mut responses: T, mut requests: mpsc::Receiver, + call_tx: mpsc::Sender, ) -> StdErr<()> { let mut base_res = Response::default(); // Copy headers from the invite @@ -216,7 +224,7 @@ impl Server { .media_descriptions .iter() .filter_map(|md| match Self::select_format(md) { - Ok((rtpmap, fmtp)) => Some((md, rtpmap, fmtp)), + Ok((rtpmap, fmtp)) => Some((md, rtpmap, fmtp)), Err(e) => { event!(Level::INFO, why=e, media_description=%md, "Rejected media description."); None @@ -230,7 +238,7 @@ impl Server { let socket = UdpSocket::bind(format!("{}:0", BIND_ADDR)).await?; let rtp_port = socket.local_addr()?.port(); event!(Level::INFO, rtp_port, "Bound RTP port"); - let mut rtp_framed = UdpFramed::new(socket, RtpCodec{}); + let mut rtp_framed = UdpFramed::new(socket, RtpCodec {}); let mut res = base_res.clone(); res.status_code = 180.into(); responses.send(res).await; @@ -240,8 +248,11 @@ impl Server { res.status_code = 200.into(); // TODO: fix this lmao let ip: IpAddr = "10.23.2.134".parse()?; - res.headers.push(SipHeader::Contact(format!("sip:{}:{}", ip, SIP_PORT).into())); - res.headers.push(SipHeader::ContentType("application/sdp".into())); + res.headers.push(SipHeader::Contact( + format!("sip:{}:{}", ip, SIP_PORT).into(), + )); + res.headers + .push(SipHeader::ContentType("application/sdp".into())); let md = MediaDescription { media: Media { media: MediaType::Audio, @@ -250,19 +261,26 @@ impl Server { proto: ProtoType::RtpAvp, fmt: "101".into(), }, - connections: vec!(sdp_rs::lines::Connection{ + connections: vec![sdp_rs::lines::Connection { nettype: "IN".into(), addrtype: "IP4".into(), connection_address: ip.into(), - }), - bandwidths: vec!(sdp_rs::lines::Bandwidth{bwtype:"TIAS".into(), bandwidth: 64000}), - attributes: vec!(sdp_rs::lines::Attribute::Other("rtpmap".into(), Some("101 opus/48000/2".into()))), + }], + bandwidths: vec![sdp_rs::lines::Bandwidth { + bwtype: "TIAS".into(), + bandwidth: 64000, + }], + attributes: vec![sdp_rs::lines::Attribute::Other( + "rtpmap".into(), + Some("101 opus/48000/2".into()), + )], info: None, key: None, - }.into(); + } + .into(); let sd: String = SessionDescription { version: sdp_rs::lines::Version::V0, - origin: sdp_rs::lines::Origin{ + origin: sdp_rs::lines::Origin { username: "-".into(), sess_id: "foobar".into(), sess_version: "foobar".into(), @@ -273,26 +291,37 @@ impl Server { session_name: "discosip".to_owned().into(), session_info: None, uri: None, - emails: vec!(), - phones: vec!(), + emails: vec![], + phones: vec![], connection: None, - bandwidths: vec!(sdp_rs::lines::Bandwidth{bwtype:"AS".into(), bandwidth: 84}), - times: vec!(sdp_rs::Time{ - active: sdp_rs::lines::Active{ - start: 0, - stop: 0, - }, - repeat: vec!(), + bandwidths: vec![sdp_rs::lines::Bandwidth { + bwtype: "AS".into(), + bandwidth: 84, + }], + times: vec![sdp_rs::Time { + active: sdp_rs::lines::Active { start: 0, stop: 0 }, + repeat: vec![], zone: None, - }).try_into()?, + }] + .try_into()?, key: None, - attributes: vec!(), - media_descriptions: vec!(md), - }.to_string(); + attributes: vec![], + media_descriptions: vec![md], + } + .to_string(); res.body = sd.as_bytes().into(); - res.headers.push(SipHeader::ContentLength((res.body.len() as u32).into())); + res.headers + .push(SipHeader::ContentLength((res.body.len() as u32).into())); responses.send(res).await; + // Discord + let (disc_done, disc_done_rx) = mpsc::channel(1); + let disc_call = discord::Call { + guild_id: env::var("DISCORD_GUILD")?.parse()?, + channel_id: env::var("DISCORD_CHANNEL")?.parse()?, + done: disc_done_rx, + }; + call_tx.send(disc_call).await?; loop { tokio::select! { @@ -308,12 +337,12 @@ impl Server { } }, - Some(rtp_frame) = rtp_framed.next() => { - event!(Level::INFO, "Got RTP Packet!"); + Some(_) = rtp_framed.next() => { + //event!(Level::INFO, "Got RTP Packet!"); }, } } - + disc_done.send(()).await?; event!(Level::INFO, "Call handler loop done."); Ok(()) @@ -327,12 +356,13 @@ async fn main() -> Result<(), Box> { let (shutdown_tx, shutdown_rx_1) = broadcast::channel(1); let (done_tx, mut done_rx) = mpsc::channel(1); let done_2 = done_tx.clone(); - tokio::spawn( async move { - discord::run_discord(&discord_token, shutdown_rx_1, done_tx.clone()).await; + let (call_tx, call_rx) = mpsc::channel(1); + tokio::spawn(async move { + discord::run_discord(&discord_token, call_rx, shutdown_rx_1, done_tx.clone()).await; }); let sd_2 = shutdown_tx.subscribe(); tokio::spawn(async move { - Server::run_sip(sd_2, done_2).await; + Server::run_sip(call_tx, sd_2, done_2).await; }); signal::ctrl_c().await?;