use crate::block::opts::*;
use crate::block::util::*;
use bytes::{Buf, Bytes};
#[derive(Clone, PartialEq, Eq, Debug)]
pub struct ObsoletePacket {
pub interface_id: u16,
pub drops_count: Option<u16>,
pub timestamp: Timestamp,
pub captured_len: u32,
pub packet_len: u32,
pub packet_data: Bytes,
pub options: Vec<(u16, Bytes)>,
}
impl FromBytes for ObsoletePacket {
fn parse<T: Buf>(mut buf: T, endianness: Endianness) -> Result<ObsoletePacket, BlockError> {
ensure_remaining!(buf, 20);
let interface_id = read_u16(&mut buf, endianness);
let drops_count = match read_u16(&mut buf, endianness) {
0xFFFF => None,
x => Some(x),
};
let timestamp = read_ts(&mut buf, endianness);
let captured_len = read_u32(&mut buf, endianness);
let packet_len = read_u32(&mut buf, endianness);
let packet_data = read_bytes(&mut buf, captured_len)?;
let mut options = vec![];
parse_options(buf, endianness, |option_type, option_bytes| {
options.push((option_type, option_bytes));
});
Ok(ObsoletePacket {
interface_id,
drops_count,
timestamp,
captured_len,
packet_len,
packet_data,
options,
})
}
}