pub trait AsyncEventPlugin: Plugin + AsyncPluginExported {
const ASYNC_EVENTS: &'static [&'static str];
const EVENT_SOURCES: &'static [&'static str];
// Required methods
fn start_async(&mut self, handler: AsyncHandler) -> Result<(), Error>;
fn stop_async(&mut self) -> Result<(), Error>;
// Provided methods
fn dump_state(&mut self, _handler: AsyncHandler) -> Result<(), Error> { ... }
fn async_event<'a>(name: &'a CStr, data: &'a [u8]) -> Event<AsyncEvent<'a>> { ... }
}
Expand description
§Support for asynchronous event plugins
Required Associated Constants§
Sourceconst ASYNC_EVENTS: &'static [&'static str]
const ASYNC_EVENTS: &'static [&'static str]
§Event names coming from this plugin
This constant contains a list describing the name list of all asynchronous events that this plugin is capable of pushing into a live event stream. The framework rejects async events produced by a plugin if their name is not on the name list returned by this function.
Sourceconst EVENT_SOURCES: &'static [&'static str]
const EVENT_SOURCES: &'static [&'static str]
§Event sources to attach asynchronous events to
This constant contains a list describing the event sources for which this plugin is capable of injecting async events in the event stream of a capture.
This is optional–if NULL or an empty array, then async events produced by this plugin will be injected in the event stream of any data source.
Note: one notable event source is called syscall
Required Methods§
Sourcefn start_async(&mut self, handler: AsyncHandler) -> Result<(), Error>
fn start_async(&mut self, handler: AsyncHandler) -> Result<(), Error>
§Start asynchronous event generation
When this method is called, your plugin should start whatever background mechanism
is necessary (e.g. spawn a separate thread) and use the AsyncHandler::emit
method
to inject events to the main event loop.
Note: you must provide a mechanism to shut down the thread upon a call to AsyncEventPlugin::stop_async
.
This may involve e.g. a std::sync::Condvar
that’s checked via std::sync::Condvar::wait_timeout
by the thread.
Note: one notable event source is called syscall
Sourcefn stop_async(&mut self) -> Result<(), Error>
fn stop_async(&mut self) -> Result<(), Error>
§Stop asynchronous event generation
When this method is called, your plugin must stop the background mechanism started by
AsyncEventPlugin::start_async
and wait for it to finish (no calls to AsyncHandler::emit
are permitted after this method returns).
Note: AsyncEventPlugin::start_async
can be called again, with a different AsyncHandler
.
Provided Methods§
Sourcefn dump_state(&mut self, _handler: AsyncHandler) -> Result<(), Error>
fn dump_state(&mut self, _handler: AsyncHandler) -> Result<(), Error>
§Dump the plugin state as a series of async events
When this method is called, your plugin may save its state via a series of async events that will be replayed when a capture file is loaded.
The default implementation does nothing.
Sourcefn async_event<'a>(name: &'a CStr, data: &'a [u8]) -> Event<AsyncEvent<'a>>
fn async_event<'a>(name: &'a CStr, data: &'a [u8]) -> Event<AsyncEvent<'a>>
§A helper method to create an asynchronous event
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.