event methods
This commit is contained in:
parent
2e40ecd660
commit
19c7ae43e5
@ -10,7 +10,7 @@ pub use crate::events::llmp::LLMP;
|
|||||||
|
|
||||||
use alloc::rc::Rc;
|
use alloc::rc::Rc;
|
||||||
use core::cell::RefCell;
|
use core::cell::RefCell;
|
||||||
//use core::any::TypeId;
|
use core::fmt::Formatter;
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
@ -21,8 +21,43 @@ use crate::inputs::Input;
|
|||||||
use crate::utils::Rand;
|
use crate::utils::Rand;
|
||||||
use crate::AflError;
|
use crate::AflError;
|
||||||
|
|
||||||
|
pub enum EventDestination {
|
||||||
|
Main,
|
||||||
|
Broker,
|
||||||
|
Clients,
|
||||||
|
}
|
||||||
|
|
||||||
pub trait Event {
|
pub trait Event {
|
||||||
fn name(&self) -> &'static str;
|
fn name() -> &'static str;
|
||||||
|
|
||||||
|
fn destination() -> EventDestination;
|
||||||
|
|
||||||
|
fn log<S, C, E, I, R>(&self, formatter: &mut Formatter, _state: &S) -> Result<(), AflError>
|
||||||
|
where
|
||||||
|
S: State<C, E, I, R>,
|
||||||
|
C: Corpus<I, R>,
|
||||||
|
E: Executor<I>,
|
||||||
|
I: Input,
|
||||||
|
R: Rand,
|
||||||
|
{
|
||||||
|
match write!(formatter, "[{}]", Self::name()) {
|
||||||
|
Ok(_) => Ok(()),
|
||||||
|
Err(_) => Err(AflError::Unknown("write error".to_string())),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_recv<S, C, E, I, R>(&self, _state: &mut S) -> Result<(), AflError>
|
||||||
|
where
|
||||||
|
S: State<C, E, I, R>,
|
||||||
|
C: Corpus<I, R>,
|
||||||
|
E: Executor<I>,
|
||||||
|
I: Input,
|
||||||
|
R: Rand,
|
||||||
|
{
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO serialize and deserialize, defaults to serde
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait EventManager<S, C, E, I, R>
|
pub trait EventManager<S, C, E, I, R>
|
||||||
@ -34,6 +69,7 @@ where
|
|||||||
R: Rand,
|
R: Rand,
|
||||||
{
|
{
|
||||||
/// Check if this EventaManager support a given Event type
|
/// Check if this EventaManager support a given Event type
|
||||||
|
/// To compare events, use Event::name().as_ptr()
|
||||||
fn enabled<T>(&self) -> bool
|
fn enabled<T>(&self) -> bool
|
||||||
where
|
where
|
||||||
T: Event;
|
T: Event;
|
||||||
@ -73,9 +109,13 @@ macro_rules! fire_event {
|
|||||||
|
|
||||||
pub struct LoadInitialEvent {}
|
pub struct LoadInitialEvent {}
|
||||||
impl Event for LoadInitialEvent {
|
impl Event for LoadInitialEvent {
|
||||||
fn name(&self) -> &'static str {
|
fn name() -> &'static str {
|
||||||
"LOAD"
|
"LOAD"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn destination() -> EventDestination {
|
||||||
|
EventDestination::Broker
|
||||||
|
}
|
||||||
}
|
}
|
||||||
impl LoadInitialEvent {
|
impl LoadInitialEvent {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
@ -94,9 +134,13 @@ impl<I> Event for NewTestcaseEvent<I>
|
|||||||
where
|
where
|
||||||
I: Input,
|
I: Input,
|
||||||
{
|
{
|
||||||
fn name(&self) -> &'static str {
|
fn name() -> &'static str {
|
||||||
"NEW"
|
"NEW"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn destination() -> EventDestination {
|
||||||
|
EventDestination::Clients
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<I> NewTestcaseEvent<I>
|
impl<I> NewTestcaseEvent<I>
|
||||||
@ -114,9 +158,13 @@ where
|
|||||||
|
|
||||||
pub struct UpdateStatsEvent {}
|
pub struct UpdateStatsEvent {}
|
||||||
impl Event for UpdateStatsEvent {
|
impl Event for UpdateStatsEvent {
|
||||||
fn name(&self) -> &'static str {
|
fn name() -> &'static str {
|
||||||
"STATS"
|
"STATS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn destination() -> EventDestination {
|
||||||
|
EventDestination::Broker
|
||||||
|
}
|
||||||
}
|
}
|
||||||
impl UpdateStatsEvent {
|
impl UpdateStatsEvent {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
@ -124,6 +172,22 @@ impl UpdateStatsEvent {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct CrashEvent {}
|
||||||
|
impl Event for CrashEvent {
|
||||||
|
fn name() -> &'static str {
|
||||||
|
"CRASH"
|
||||||
|
}
|
||||||
|
|
||||||
|
fn destination() -> EventDestination {
|
||||||
|
EventDestination::Broker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl CrashEvent {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
CrashEvent {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
pub struct LoggerEventManager<W>
|
pub struct LoggerEventManager<W>
|
||||||
where
|
where
|
||||||
@ -148,20 +212,13 @@ where
|
|||||||
T: Event,
|
T: Event,
|
||||||
{
|
{
|
||||||
true
|
true
|
||||||
/*let _load = TypeId::of::<LoadInitialEvent>();
|
|
||||||
let _new = TypeId::of::<NewTestcaseEvent>();
|
|
||||||
match TypeId::of::<T>() {
|
|
||||||
_load => true,
|
|
||||||
_new => true,
|
|
||||||
_ => false,
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fire<T>(&mut self, event: T) -> Result<(), AflError>
|
fn fire<T>(&mut self, _event: T) -> Result<(), AflError>
|
||||||
where
|
where
|
||||||
T: Event,
|
T: Event,
|
||||||
{
|
{
|
||||||
self.events.push(event.name().to_string());
|
self.events.push(T::name().to_string());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user