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 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}