use std::time::Instant;
use windivert::layer::NetworkLayer;
use windivert::packet::WinDivertPacket;
#[derive(Clone)]
pub struct PacketData<'a> {
pub packet: WinDivertPacket<'a, NetworkLayer>,
pub arrival_time: Instant,
}
impl<'a> From<WinDivertPacket<'a, NetworkLayer>> for PacketData<'a> {
fn from(packet: WinDivertPacket<'a, NetworkLayer>) -> Self {
PacketData {
packet,
arrival_time: Instant::now(),
}
}
}
#[cfg(test)]
mod tests {
use crate::network::core::packet_data::PacketData;
use windivert::layer::NetworkLayer;
use windivert::packet::WinDivertPacket;
#[test]
fn test_packet_data_creation() {
unsafe {
let dummy_packet = WinDivertPacket::<NetworkLayer>::new(vec![1, 2, 3, 4]);
let packet_data = PacketData::from(dummy_packet);
assert_eq!(packet_data.packet.data.len(), 4);
assert_eq!(packet_data.packet.data[..], [1, 2, 3, 4]);
assert!(packet_data.arrival_time.elapsed().as_secs() < 1);
}
}
}