pcap_parser/pcapng/
systemd_journal_export.rs

1use nom::error::ParseError;
2use nom::IResult;
3
4use crate::endianness::{PcapBE, PcapEndianness, PcapLE};
5use crate::{PcapError, SJE_MAGIC};
6
7use super::*;
8
9#[derive(Debug)]
10pub struct SystemdJournalExportBlock<'a> {
11    pub block_type: u32,
12    pub block_len1: u32,
13    pub data: &'a [u8],
14    pub block_len2: u32,
15}
16
17impl<'a, En: PcapEndianness> PcapNGBlockParser<'a, En, SystemdJournalExportBlock<'a>>
18    for SystemdJournalExportBlock<'a>
19{
20    const HDR_SZ: usize = 12;
21    const MAGIC: u32 = SJE_MAGIC;
22
23    fn inner_parse<E: ParseError<&'a [u8]>>(
24        block_type: u32,
25        block_len1: u32,
26        i: &'a [u8],
27        block_len2: u32,
28    ) -> IResult<&'a [u8], SystemdJournalExportBlock<'a>, E> {
29        let block = SystemdJournalExportBlock {
30            block_type,
31            block_len1,
32            data: i,
33            block_len2,
34        };
35        Ok((i, block))
36    }
37}
38
39/// Parse a SystemdJournalExport Block (little-endian)
40#[inline]
41pub fn parse_systemdjournalexportblock_le(
42    i: &[u8],
43) -> IResult<&[u8], SystemdJournalExportBlock<'_>, PcapError<&[u8]>> {
44    ng_block_parser::<SystemdJournalExportBlock, PcapLE, _, _>()(i)
45}
46
47/// Parse a SystemdJournalExport Block (big-endian)
48#[inline]
49pub fn parse_systemdjournalexportblock_be(
50    i: &[u8],
51) -> IResult<&[u8], SystemdJournalExportBlock<'_>, PcapError<&[u8]>> {
52    ng_block_parser::<SystemdJournalExportBlock, PcapBE, _, _>()(i)
53}