[][src]Struct pcap_parser::LegacyPcapReader

pub struct LegacyPcapReader<R> where
    R: Read
{ /* fields omitted */ }

Parsing iterator over legacy pcap data (streaming version)

This iterator a streaming parser based on a circular buffer, so any input providing the Read trait can be used.

The first call to next will return the file header. Some information of this header must be stored (for ex. the data link type) to be able to parse following block contents. Following calls to next will always return legacy data blocks.

The size of the circular buffer has to be big enough for at least one complete block. Using a larger value (at least 65k) is advised to avoid frequent reads and buffer shifts.

There are precautions to take when reading multiple blocks before consuming data. See PcapReaderIterator for details.

use pcap_parser::*;
use pcap_parser::traits::PcapReaderIterator;
use std::fs::File;
use std::io::Read;

let mut file = File::open(path).unwrap();
let mut num_blocks = 0;
let mut reader = LegacyPcapReader::new(65536, file).expect("LegacyPcapReader");
loop {
    match reader.next() {
        Ok((offset, block)) => {
            println!("got new block");
            num_blocks += 1;
            match block {
                PcapBlockOwned::LegacyHeader(_hdr) => {
                    // save hdr.network (linktype)
                },
                PcapBlockOwned::Legacy(_b) => {
                    // use linktype to parse b.data()
                },
                PcapBlockOwned::NG(_) => unreachable!(),
            }
            reader.consume(offset);
        },
        Err(PcapError::Eof) => break,
        Err(PcapError::Incomplete) => {
            reader.refill().unwrap();
        },
        Err(e) => panic!("error while reading: {:?}", e),
    }
}
println!("num_blocks: {}", num_blocks);

Implementations

impl<R> LegacyPcapReader<R> where
    R: Read
[src]

pub fn new(
    capacity: usize,
    mut reader: R
) -> Result<LegacyPcapReader<R>, PcapError>
[src]

pub fn from_buffer(
    mut buffer: Buffer,
    mut reader: R
) -> Result<LegacyPcapReader<R>, PcapError>
[src]

Trait Implementations

impl<R> PcapReaderIterator<R> for LegacyPcapReader<R> where
    R: Read
[src]

Auto Trait Implementations

impl<R> RefUnwindSafe for LegacyPcapReader<R> where
    R: RefUnwindSafe
[src]

impl<R> Send for LegacyPcapReader<R> where
    R: Send
[src]

impl<R> Sync for LegacyPcapReader<R> where
    R: Sync
[src]

impl<R> Unpin for LegacyPcapReader<R> where
    R: Unpin
[src]

impl<R> UnwindSafe for LegacyPcapReader<R> where
    R: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Conv for T

impl<T> Conv for T

impl<T> FmtForward for T

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Pipe for T where
    T: ?Sized

impl<T> Pipe for T

impl<T> PipeAsRef for T

impl<T> PipeBorrow for T

impl<T> PipeDeref for T

impl<T> PipeRef for T

impl<T> Tap for T

impl<T> Tap for T

impl<T, U> TapAsRef<U> for T where
    U: ?Sized

impl<T, U> TapBorrow<U> for T where
    U: ?Sized

impl<T> TapDeref for T

impl<T> TryConv for T

impl<T> TryConv for T

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.