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");
let name = peer_query(&config.dyn_ip_server, number).await?;
info!(?name, "found client name");
#[cfg(feature = "debug_server")]
{
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 {
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 zerocopy::{AsBytes, FromBytes, LittleEndian, Unaligned};
use eyre::eyre;
use tracing::{debug, instrument};
use crate::packets::{Header, Packet, PacketKind};
use crate::packets::{Header, Packet};
use crate::ports::PortHandler;
use crate::spawn;
@ -53,12 +52,14 @@ type U32 = zerocopy::U32<LittleEndian>;
#[derive(AsBytes)]
#[repr(transparent)]
#[allow(dead_code)]
struct PeerQuery {
number: U32,
}
#[derive(FromBytes, Unaligned, Debug)]
#[repr(packed)]
#[allow(dead_code)]
struct PeerReply {
number: U32,
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();
packet.send(&mut writer).await?;
packet.recv_into(&mut reader).await?;
Ok(if packet.kind().raw() == 5 {

View File

@ -272,6 +272,11 @@ async fn connection_handler(
if let Some(port) = handler_metadata.port {
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) {
port_state.new_state(PortStatus::Disconnected);
port_handler.register_update();

View File

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