aboutsummaryrefslogtreecommitdiffstats
path: root/mumd/src/network/udp.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-30 14:40:46 +0200
committerGustav Sörnäs <gustav@sornas.net>2021-03-30 15:25:56 +0200
commit79702d18bbd23df2faf0c00b0d9537ce26508f6b (patch)
treecb0ae21df0b436336b30cb6c914eda820f999a43 /mumd/src/network/udp.rs
parent80dba403ed968982ec23ab7416d48dc5b69329f6 (diff)
downloadmum-79702d18bbd23df2faf0c00b0d9537ce26508f6b.tar.gz
udp error
Diffstat (limited to 'mumd/src/network/udp.rs')
-rw-r--r--mumd/src/network/udp.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/mumd/src/network/udp.rs b/mumd/src/network/udp.rs
index da92dcb..5996e43 100644
--- a/mumd/src/network/udp.rs
+++ b/mumd/src/network/udp.rs
@@ -1,3 +1,4 @@
+use crate::error::UdpError;
use crate::network::ConnectionInfo;
use crate::state::{State, StatePhase};
@@ -31,7 +32,7 @@ pub async fn handle(
state: Arc<Mutex<State>>,
mut connection_info_receiver: watch::Receiver<Option<ConnectionInfo>>,
mut crypt_state_receiver: mpsc::Receiver<ClientCryptState>,
-) {
+) -> Result<(), UdpError> {
let receiver = state.lock().await.audio().input_receiver();
loop {
@@ -41,9 +42,9 @@ pub async fn handle(
break 'data data;
}
}
- return;
+ return Err(UdpError::NoConnectionInfoReceived);
};
- let (sink, source) = connect(&mut crypt_state_receiver).await;
+ let (sink, source) = connect(&mut crypt_state_receiver).await?;
let sink = Arc::new(Mutex::new(sink));
let source = Arc::new(Mutex::new(source));
@@ -82,22 +83,21 @@ pub async fn handle(
async fn connect(
crypt_state: &mut mpsc::Receiver<ClientCryptState>,
-) -> (UdpSender, UdpReceiver) {
+) -> Result<(UdpSender, UdpReceiver), UdpError> {
// Bind UDP socket
let udp_socket = UdpSocket::bind((Ipv6Addr::from(0u128), 0u16))
- .await
- .expect("Failed to bind UDP socket");
+ .await?;
// Wait for initial CryptState
let crypt_state = match crypt_state.recv().await {
Some(crypt_state) => crypt_state,
// disconnected before we received the CryptSetup packet, oh well
- None => panic!("Disconnect before crypt packet received"), //TODO exit gracefully
+ None => return Err(UdpError::DisconnectBeforeCryptSetup),
};
debug!("UDP connected");
// Wrap the raw UDP packets in Mumble's crypto and voice codec (CryptState does both)
- UdpFramed::new(udp_socket, crypt_state).split()
+ Ok(UdpFramed::new(udp_socket, crypt_state).split())
}
async fn new_crypt_state(