net_parser_rs/
file.rs

1use crate::{Error, GlobalHeader, PcapRecords};
2use log::*;
3
4#[derive(Clone, Debug)]
5pub struct CaptureFile<'a> {
6    pub global_header: GlobalHeader,
7    pub records: PcapRecords<'a>,
8}
9
10impl<'a> CaptureFile<'a> {
11    ///
12    /// Parse a slice of bytes that start with libpcap file format header (https://wiki.wireshark.org/Development/LibpcapFileFormat)
13    ///
14    pub fn parse<'b>(
15        input: &'b [u8],
16    ) -> Result<(&'b [u8], CaptureFile<'b>), Error>
17    {
18        let (rem, header) = GlobalHeader::parse(input)?;
19
20        debug!(
21            "Global header version {}.{}, with endianness {:?}",
22            header.version_major,
23            header.version_minor,
24            header.endianness
25        );
26
27        let (records_rem, records) = PcapRecords::parse(rem, header.endianness)?;
28
29        trace!("{} bytes left for record parsing", records_rem.len());
30
31        Ok( (records_rem, CaptureFile {
32            global_header: header,
33            records: records,
34        }) )
35    }
36}