use std::net::SocketAddr;
use std::sync::Arc;
use std::time::SystemTime;
use bytes::Bytes;
pub(crate) use crate::decode::frame::{FrameSummary, Framing};
pub(crate) mod filter;
#[cfg(feature = "pcap")]
pub(crate) mod libpcap;
pub(crate) mod pcap;
pub(crate) mod ring;
pub(crate) mod worker;
pub(crate) const DEFAULT_RING: usize = 50_000;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum Direction {
In,
Out,
Wire,
}
impl Direction {
pub(crate) fn label(self) -> &'static str {
match self {
Self::In => "in",
Self::Out => "out",
Self::Wire => "--",
}
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct CaptureFrame {
pub(crate) time: SystemTime,
pub(crate) framing: Framing,
pub(crate) direction: Direction,
pub(crate) udp: Option<(SocketAddr, SocketAddr)>,
pub(crate) source: String,
pub(crate) destination: String,
pub(crate) via: Option<String>,
pub(crate) bytes: Bytes,
pub(crate) summary: FrameSummary,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum CaptureCommand {
Start,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct ExportJob {
pub(crate) frames: Vec<Arc<CaptureFrame>>,
pub(crate) raw_ipv4: bool,
pub(crate) stem: String,
}
#[derive(Debug, Clone, PartialEq)]
pub(crate) enum CaptureEvent {
Started {
what: String,
session: bool,
},
Frames(Box<Batch>),
Ended {
what: String,
why: String,
},
Exported(pcap::Exported),
}
#[derive(Debug, Clone, PartialEq)]
pub(crate) struct Batch {
pub(crate) frames: Vec<CaptureFrame>,
pub(crate) lost: u64,
}