show client names in debug server

This commit is contained in:
soruh 2023-03-28 14:05:43 +02:00
parent 82838e46dd
commit f22cafa96e
4 changed files with 23 additions and 7 deletions

View File

@ -329,9 +329,13 @@ pub async fn handler(
info!(%addr, number, port, "authenticated"); info!(%addr, number, port, "authenticated");
let name = peer_query(&config.dyn_ip_server, number).await?; #[cfg(feature = "debug_server")]
{
info!(?name, "found client name"); if let Some(name) = peer_query(&config.dyn_ip_server, number).await? {
info!(%name, "found client name");
port_handler.lock().await.names.insert(number, name);
}
}
let Some(listener) = handler_metadata.listener.as_mut() else { let Some(listener) = handler_metadata.listener.as_mut() else {
unreachable!("client sucessfully authenticated but did not set handler_metadata.listener"); unreachable!("client sucessfully authenticated but did not set handler_metadata.listener");

View File

@ -9,10 +9,9 @@ use tokio::sync::Mutex;
use tracing::error; use tracing::error;
use zerocopy::{AsBytes, FromBytes, LittleEndian, Unaligned}; use zerocopy::{AsBytes, FromBytes, LittleEndian, Unaligned};
use eyre::eyre;
use tracing::{debug, instrument}; use tracing::{debug, instrument};
use crate::packets::{Header, Packet, PacketKind}; use crate::packets::{Header, Packet};
use crate::ports::PortHandler; use crate::ports::PortHandler;
use crate::spawn; use crate::spawn;
@ -53,12 +52,14 @@ type U32 = zerocopy::U32<LittleEndian>;
#[derive(AsBytes)] #[derive(AsBytes)]
#[repr(transparent)] #[repr(transparent)]
#[allow(dead_code)]
struct PeerQuery { struct PeerQuery {
number: U32, number: U32,
} }
#[derive(FromBytes, Unaligned, Debug)] #[derive(FromBytes, Unaligned, Debug)]
#[repr(packed)] #[repr(packed)]
#[allow(dead_code)]
struct PeerReply { struct PeerReply {
number: U32, number: U32,
name: [u8; 40], name: [u8; 40],
@ -98,7 +99,6 @@ pub async fn peer_query(server: &SocketAddr, number: u32) -> eyre::Result<Option
let (mut reader, mut writer) = socket.split(); let (mut reader, mut writer) = socket.split();
packet.send(&mut writer).await?; packet.send(&mut writer).await?;
packet.recv_into(&mut reader).await?; packet.recv_into(&mut reader).await?;
Ok(if packet.kind().raw() == 5 { Ok(if packet.kind().raw() == 5 {

View File

@ -272,6 +272,11 @@ async fn connection_handler(
if let Some(port) = handler_metadata.port { if let Some(port) = handler_metadata.port {
let mut port_handler = port_handler.lock().await; let mut port_handler = port_handler.lock().await;
#[cfg(feature = "debug_server")]
if let Some(number) = handler_metadata.number {
port_handler.names.remove(&number);
}
if let Some(port_state) = port_handler.port_state.get_mut(&port) { if let Some(port_state) = port_handler.port_state.get_mut(&port) {
port_state.new_state(PortStatus::Disconnected); port_state.new_state(PortStatus::Disconnected);
port_handler.register_update(); port_handler.register_update();

View File

@ -45,6 +45,10 @@ pub struct PortHandler {
allocated_ports: HashMap<Number, Port>, allocated_ports: HashMap<Number, Port>,
pub port_state: HashMap<Port, PortState>, pub port_state: HashMap<Port, PortState>,
#[serde(skip)]
#[cfg(feature = "debug_server")]
pub names: HashMap<Number, String>,
} }
#[instrument(skip(port_handler, change_receiver))] #[instrument(skip(port_handler, change_receiver))]
@ -122,6 +126,7 @@ fn instant_from_timestamp(timestamp: UnixTimestamp) -> Instant {
Instant::now() - UNIX_EPOCH.elapsed().unwrap() + Duration::from_secs(timestamp) Instant::now() - UNIX_EPOCH.elapsed().unwrap() + Duration::from_secs(timestamp)
} }
#[cfg(feature = "debug_server")]
impl Debug for PortHandler { impl Debug for PortHandler {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
const SHOW_N_FREE_PORTS: usize = 10; const SHOW_N_FREE_PORTS: usize = 10;
@ -165,7 +170,8 @@ impl Debug for PortHandler {
.map(|(&number, &port)| { .map(|(&number, &port)| {
#[derive(Debug)] #[derive(Debug)]
#[allow(dead_code)] #[allow(dead_code)]
struct State { struct State<'n> {
name: &'n str,
state: PortStatus, state: PortStatus,
number: u32, number: u32,
port: u16, port: u16,
@ -175,6 +181,7 @@ impl Debug for PortHandler {
let state = &self.port_state[&port]; let state = &self.port_state[&port];
State { State {
name: self.names.get(&number).map_or("?", |x| x.as_str()),
state: state.status, state: state.status,
number, number,
port, port,