Browse Source

Improve connection error logging

Frans Bergman 2 years ago
parent
commit
de1a654957
3 changed files with 39 additions and 9 deletions
  1. 33 0
      src/server/client/handler.rs
  2. 4 7
      src/server/connection_worker.rs
  3. 2 2
      src/server/mod.rs

+ 33 - 0
src/server/client/handler.rs

@@ -8,6 +8,7 @@ use crate::server::client::client_worker::{ClientEvent, ServerEvent};
 use crate::storage::{Guest, SessionData, Storage};
 use log::error;
 use ring::pbkdf2;
+use std::fmt;
 use std::num::NonZeroU32;
 use std::sync::Arc;
 use tokio::sync::mpsc::error::SendError;
@@ -61,6 +62,25 @@ pub enum ConnectionSetupError {
     WrongPacket,
 }
 
+impl fmt::Display for ConnectionSetupError {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match &self {
+            ConnectionSetupError::IO(e) => {
+                write!(f, "{}", e)
+            }
+            ConnectionSetupError::PacketParsing(e) => {
+                write!(f, "{:?}", e)
+            }
+            ConnectionSetupError::Reject(r) => {
+                write!(f, "Reject: {}", r)
+            }
+            ConnectionSetupError::WrongPacket => {
+                write!(f, "Wrong packet")
+            }
+        }
+    }
+}
+
 pub enum Reject {
     InvalidUsername,
     UsernameInUse,
@@ -70,6 +90,19 @@ pub enum Reject {
     _NoCertificate,
 }
 
+impl fmt::Display for Reject {
+    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+        match self {
+            Reject::InvalidUsername => write!(f, "Invalid username"),
+            Reject::UsernameInUse => write!(f, "Username already in use"),
+            Reject::_WrongVersion => write!(f, "Wrong version"),
+            Reject::WrongUserPassword => write!(f, "Wrong user password"),
+            Reject::_WrongServerPassword => write!(f, "Wrong server password"),
+            Reject::_NoCertificate => write!(f, "No TLS certificate"),
+        }
+    }
+}
+
 impl<C: ControlChannel, A: AudioChannel> Handler<C, A> {
     pub fn new(
         storage: Arc<Storage>,

+ 4 - 7
src/server/connection_worker.rs

@@ -6,7 +6,7 @@ use crate::server::tcp_control_channel::TcpControlChannel;
 use crate::server::udp_worker::{UdpAudioChannel, UdpWorker};
 use crate::storage::Storage;
 use dashmap::DashMap;
-use log::info;
+use log::{error, info};
 use std::sync::Arc;
 use tokio::net::TcpStream;
 use tokio::sync::mpsc::Receiver;
@@ -36,12 +36,9 @@ impl ConnectionWorker {
     pub async fn start(self, stream: TlsStream<TcpStream>, config: Config, worker: Arc<UdpWorker>) {
         tokio::spawn(async move {
             let address = stream.get_ref().0.peer_addr().unwrap();
-            if self
-                .process_new_connection(stream, config, worker)
-                .await
-                .is_err()
-            {
-                info!("Failed to establish connection {}", address)
+            match self.process_new_connection(stream, config, worker).await {
+                Ok(_) => {}
+                Err(e) => error!("Failed to establish connection {}: {}", address, e),
             }
         });
     }

+ 2 - 2
src/server/mod.rs

@@ -92,14 +92,14 @@ impl Server {
             let (tcp_stream, _) = match tcp_listener.accept().await {
                 Ok(stream) => stream,
                 Err(err) => {
-                    info!("Tcp error: {}", err);
+                    error!("Tcp error: {}", err);
                     continue;
                 }
             };
             let tls_stream = match tls_acceptor.accept(tcp_stream).await {
                 Ok(stream) => stream,
                 Err(err) => {
-                    info!("Tls error: {}", err);
+                    error!("Tls error: {}", err);
                     continue;
                 }
             };