Skip to content

Commit beb872a

Browse files
committed
Refactor pcapng: move Unknown to its own file
1 parent 1043736 commit beb872a

File tree

2 files changed

+48
-40
lines changed

2 files changed

+48
-40
lines changed

src/pcapng.rs

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ mod process_information;
5858
mod section_header;
5959
mod simple_packet;
6060
mod systemd_journal_export;
61+
mod unknown;
6162

6263
pub use custom::*;
6364
pub use decryption_secrets::*;
@@ -69,6 +70,7 @@ pub use process_information::*;
6970
pub use section_header::*;
7071
pub use simple_packet::*;
7172
pub use systemd_journal_export::*;
73+
pub use unknown::*;
7274

7375
trait PcapNGBlockParser<'a, En: PcapEndianness, O: 'a> {
7476
/// Minimum header size, in bytes
@@ -295,36 +297,6 @@ pub fn build_ts_f64(ts_high: u32, ts_low: u32, ts_offset: u64, resolution: u64)
295297
ts_sec as f64 + ((ts_fractional as f64) / (resolution as f64))
296298
}
297299

298-
/// Unknown block (magic not recognized, or not yet implemented)
299-
#[derive(Debug)]
300-
pub struct UnknownBlock<'a> {
301-
/// Block type (little endian)
302-
pub block_type: u32,
303-
pub block_len1: u32,
304-
pub data: &'a [u8],
305-
pub block_len2: u32,
306-
}
307-
308-
impl<'a, En: PcapEndianness> PcapNGBlockParser<'a, En, UnknownBlock<'a>> for UnknownBlock<'a> {
309-
const HDR_SZ: usize = 12;
310-
const MAGIC: u32 = 0;
311-
312-
fn inner_parse<E: ParseError<&'a [u8]>>(
313-
block_type: u32,
314-
block_len1: u32,
315-
i: &'a [u8],
316-
block_len2: u32,
317-
) -> IResult<&'a [u8], UnknownBlock<'a>, E> {
318-
let block = UnknownBlock {
319-
block_type,
320-
block_len1,
321-
data: i,
322-
block_len2,
323-
};
324-
Ok((i, block))
325-
}
326-
}
327-
328300
#[derive(Debug)]
329301
pub struct PcapNGOption<'a> {
330302
pub code: OptionCode,
@@ -513,16 +485,6 @@ fn if_extract_tsoffset_and_tsresol(options: &[PcapNGOption]) -> (u8, i64) {
513485
(if_tsresol, if_tsoffset)
514486
}
515487

516-
/// Parse an unknown block (little-endian)
517-
pub fn parse_unknownblock_le(i: &[u8]) -> IResult<&[u8], UnknownBlock, PcapError<&[u8]>> {
518-
ng_block_parser::<UnknownBlock, PcapLE, _, _>()(i)
519-
}
520-
521-
/// Parse an unknown block (big-endian)
522-
pub fn parse_unknownblock_be(i: &[u8]) -> IResult<&[u8], UnknownBlock, PcapError<&[u8]>> {
523-
ng_block_parser::<UnknownBlock, PcapBE, _, _>()(i)
524-
}
525-
526488
/// Parse any block, as little-endian
527489
///
528490
/// To find which endianess to use, read the section header

src/pcapng/unknown.rs

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
use nom::error::ParseError;
2+
use nom::IResult;
3+
4+
use crate::PcapError;
5+
6+
use super::{ng_block_parser, PcapBE, PcapEndianness, PcapLE, PcapNGBlockParser};
7+
8+
/// Unknown block (magic not recognized, or not yet implemented)
9+
#[derive(Debug)]
10+
pub struct UnknownBlock<'a> {
11+
/// Block type (little endian)
12+
pub block_type: u32,
13+
pub block_len1: u32,
14+
pub data: &'a [u8],
15+
pub block_len2: u32,
16+
}
17+
18+
impl<'a, En: PcapEndianness> PcapNGBlockParser<'a, En, UnknownBlock<'a>> for UnknownBlock<'a> {
19+
const HDR_SZ: usize = 12;
20+
const MAGIC: u32 = 0;
21+
22+
fn inner_parse<E: ParseError<&'a [u8]>>(
23+
block_type: u32,
24+
block_len1: u32,
25+
i: &'a [u8],
26+
block_len2: u32,
27+
) -> IResult<&'a [u8], UnknownBlock<'a>, E> {
28+
let block = UnknownBlock {
29+
block_type,
30+
block_len1,
31+
data: i,
32+
block_len2,
33+
};
34+
Ok((i, block))
35+
}
36+
}
37+
38+
/// Parse an unknown block (little-endian)
39+
pub fn parse_unknownblock_le(i: &[u8]) -> IResult<&[u8], UnknownBlock, PcapError<&[u8]>> {
40+
ng_block_parser::<UnknownBlock, PcapLE, _, _>()(i)
41+
}
42+
43+
/// Parse an unknown block (big-endian)
44+
pub fn parse_unknownblock_be(i: &[u8]) -> IResult<&[u8], UnknownBlock, PcapError<&[u8]>> {
45+
ng_block_parser::<UnknownBlock, PcapBE, _, _>()(i)
46+
}

0 commit comments

Comments
 (0)