aha_misc/observers/
packet.rs1use std::borrow::Cow;
4
5use libafl::{Error, observers::Observer};
6use libafl_bolts::Named;
7use serde::{Deserialize, Serialize};
8
9#[derive(Debug, Serialize, Deserialize)]
11pub struct PacketObserver {
12 name: Cow<'static, str>,
14 last_packet: Option<Vec<u8>>,
16}
17
18impl PacketObserver {
19 pub fn new<S>(name: S) -> Self
21 where
22 S: Into<Cow<'static, str>>,
23 {
24 Self {
25 name: name.into(),
26 last_packet: None,
27 }
28 }
29
30 pub fn clear(&mut self) {
32 self.last_packet = None;
33 }
34
35 pub fn set_packet(&mut self, packet: Vec<u8>) {
37 self.last_packet = Some(packet);
38 }
39
40 pub fn last_packet(&self) -> Option<&Vec<u8>> {
42 self.last_packet.as_ref()
43 }
44}
45
46impl Named for PacketObserver {
47 fn name(&self) -> &Cow<'static, str> {
48 &self.name
49 }
50}
51
52impl<I, S> Observer<I, S> for PacketObserver {
53 fn post_exec(
54 &mut self,
55 _state: &mut S,
56 _input: &I,
57 _exit_kind: &libafl::executors::ExitKind,
58 ) -> Result<(), Error> {
59 Ok(())
60 }
61}