#[cfg(feature = "http-p0f-request")]
use huginn_net_http::output::HttpRequestOutput;
#[cfg(feature = "http-p0f-response")]
use huginn_net_http::output::HttpResponseOutput;
#[cfg(feature = "tcp-mtu")]
use huginn_net_tcp::output::MTUOutput;
#[cfg(feature = "tcp-syn-ack")]
use huginn_net_tcp::output::SynAckTCPOutput;
#[cfg(feature = "tcp-syn")]
use huginn_net_tcp::output::SynTCPOutput;
#[cfg(feature = "tcp-uptime")]
use huginn_net_tcp::output::UptimeOutput;
use huginn_net_tls::output::TlsClientOutput;
#[derive(Debug)]
#[cfg_attr(feature = "json", derive(serde::Serialize))]
pub struct FingerprintResult {
#[cfg(feature = "tcp-syn")]
pub tcp_syn: Option<SynTCPOutput>,
#[cfg(feature = "tcp-syn-ack")]
pub tcp_syn_ack: Option<SynAckTCPOutput>,
#[cfg(feature = "tcp-mtu")]
pub tcp_mtu: Option<MTUOutput>,
#[cfg(feature = "tcp-uptime")]
pub tcp_client_uptime: Option<UptimeOutput>,
#[cfg(feature = "tcp-uptime")]
pub tcp_server_uptime: Option<UptimeOutput>,
#[cfg(feature = "http-p0f-request")]
pub http_request: Option<HttpRequestOutput>,
#[cfg(feature = "http-p0f-response")]
pub http_response: Option<HttpResponseOutput>,
pub tls_client: Option<TlsClientOutput>,
}
impl FingerprintResult {
#[must_use]
pub fn is_empty(&self) -> bool {
#[cfg(feature = "tcp-syn")]
if self.tcp_syn.is_some() {
return false;
}
#[cfg(feature = "tcp-syn-ack")]
if self.tcp_syn_ack.is_some() {
return false;
}
#[cfg(feature = "tcp-mtu")]
if self.tcp_mtu.is_some() {
return false;
}
#[cfg(feature = "tcp-uptime")]
if self.tcp_client_uptime.is_some() {
return false;
}
#[cfg(feature = "tcp-uptime")]
if self.tcp_server_uptime.is_some() {
return false;
}
#[cfg(feature = "http-p0f-request")]
if self.http_request.is_some() {
return false;
}
#[cfg(feature = "http-p0f-response")]
if self.http_response.is_some() {
return false;
}
if self.tls_client.is_some() {
return false;
}
true
}
}