diff options
| author | Kapten Z∅∅m <55669224+default-username-852@users.noreply.github.com> | 2021-01-04 22:46:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-04 22:46:58 +0100 |
| commit | 50b322f4ef974765a2948dfb08b1c9e8128b1bed (patch) | |
| tree | 88d41a434b3a0c242ac7b35c6afefff0f75ee656 /mumd/src/network/udp.rs | |
| parent | 1af9b90133a8d6102a09102bbd6f726f598c24fc (diff) | |
| parent | be7748be2f1e9d1e88ebd093da9eec16d1ad4049 (diff) | |
| download | mum-50b322f4ef974765a2948dfb08b1c9e8128b1bed.tar.gz | |
Merge branch 'main' into noise-gate
Diffstat (limited to 'mumd/src/network/udp.rs')
| -rw-r--r-- | mumd/src/network/udp.rs | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/mumd/src/network/udp.rs b/mumd/src/network/udp.rs index 4dde268..0c00029 100644 --- a/mumd/src/network/udp.rs +++ b/mumd/src/network/udp.rs @@ -1,10 +1,10 @@ use crate::network::ConnectionInfo; use crate::state::{State, StatePhase}; -use log::*; use bytes::Bytes; use futures::{join, pin_mut, select, FutureExt, SinkExt, StreamExt, Stream}; use futures_util::stream::{SplitSink, SplitStream}; +use log::*; use mumble_protocol::crypt::ClientCryptState; use mumble_protocol::ping::{PingPacket, PongPacket}; use mumble_protocol::voice::{VoicePacket, VoicePacketPayload}; @@ -18,6 +18,8 @@ use tokio::net::UdpSocket; use tokio::sync::{mpsc, oneshot, watch}; use tokio_util::udp::UdpFramed; +pub type PingRequest = (u64, SocketAddr, Box<dyn FnOnce(PongPacket)>); + type UdpSender = SplitSink<UdpFramed<ClientCryptState>, (VoicePacket<Serverbound>, SocketAddr)>; type UdpReceiver = SplitStream<UdpFramed<ClientCryptState>>; @@ -90,17 +92,14 @@ async fn new_crypt_state( source: Arc<Mutex<UdpReceiver>>, ) { loop { - match crypt_state.recv().await { - Some(crypt_state) => { - info!("Received new crypt state"); - let udp_socket = UdpSocket::bind((Ipv6Addr::from(0u128), 0u16)) - .await - .expect("Failed to bind UDP socket"); - let (new_sink, new_source) = UdpFramed::new(udp_socket, crypt_state).split(); - *sink.lock().unwrap() = new_sink; - *source.lock().unwrap() = new_source; - }, - None => {}, + if let Some(crypt_state) = crypt_state.recv().await { + info!("Received new crypt state"); + let udp_socket = UdpSocket::bind((Ipv6Addr::from(0u128), 0u16)) + .await + .expect("Failed to bind UDP socket"); + let (new_sink, new_source) = UdpFramed::new(udp_socket, crypt_state).split(); + *sink.lock().unwrap() = new_sink; + *source.lock().unwrap() = new_source; } } } @@ -248,11 +247,7 @@ async fn send_voice( } pub async fn handle_pings( - mut ping_request_receiver: mpsc::UnboundedReceiver<( - u64, - SocketAddr, - Box<dyn FnOnce(PongPacket)>, - )>, + mut ping_request_receiver: mpsc::UnboundedReceiver<PingRequest>, ) { let udp_socket = UdpSocket::bind((Ipv6Addr::from(0u128), 0u16)) .await |
