diff --git a/crates/vmi-core/src/handler.rs b/crates/vmi-core/src/handler.rs index 4c02f5a..8d153b0 100644 --- a/crates/vmi-core/src/handler.rs +++ b/crates/vmi-core/src/handler.rs @@ -1,4 +1,4 @@ -use crate::{VmiContext, VmiDriver, VmiEventResponse, VmiOs}; +use crate::{VmiContext, VmiDriver, VmiEventResponse, VmiOs, VmiSession}; /// A trait for handling VMI events. /// @@ -17,6 +17,12 @@ where event: VmiContext, ) -> VmiEventResponse; + /// Handles a timeout event. + fn handle_timeout(&mut self, _session: &VmiSession) {} + + /// Handles an interrupted event. + fn handle_interrupted(&mut self, _session: &VmiSession) {} + /// Returns whether the handler has finished processing events. fn finished(&self) -> bool { false diff --git a/crates/vmi-core/src/session.rs b/crates/vmi-core/src/session.rs index d1ac687..0201ac2 100644 --- a/crates/vmi-core/src/session.rs +++ b/crates/vmi-core/src/session.rs @@ -113,9 +113,11 @@ where match self.wait_for_event(timeout, &mut handler) { Err(VmiError::Timeout) => { tracing::trace!("timeout"); + handler.handle_timeout(self); } Err(VmiError::Io(err)) if err.kind() == ErrorKind::Interrupted => { - tracing::info!("interrupted"); + tracing::trace!("interrupted"); + handler.handle_interrupted(self); break; } Err(err) => return Err(err),