show client names in debug server
This commit is contained in:
parent
82838e46dd
commit
f22cafa96e
@ -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");
|
||||||
|
@ -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 {
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user