summaryrefslogtreecommitdiff
path: root/src/plugin/example.rs
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2023-08-29 18:43:04 +0800
committerluwenpeng <[email protected]>2023-08-31 18:42:25 +0800
commitccf658df8cd062fedb66bb64d3c5a25b2d847f25 (patch)
tree182d74d33ba8ad914be2772620f073e62262ae55 /src/plugin/example.rs
parentab66a023549901674110176256df5564ae039ce6 (diff)
[feature] Integration Test Passed
1.Receive packets through pcap 2.Packet decapsulate 3.Trigger events 4.Dispatch event management 5.Call plugin handle 6.Plugin manipulate session
Diffstat (limited to 'src/plugin/example.rs')
-rw-r--r--src/plugin/example.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/plugin/example.rs b/src/plugin/example.rs
new file mode 100644
index 0000000..68fd542
--- /dev/null
+++ b/src/plugin/example.rs
@@ -0,0 +1,50 @@
+use crate::event::manager::EventHandle;
+use crate::packet::packet::Packet;
+use crate::session::session::Session;
+use std::cell::RefCell;
+use std::rc::Rc;
+
+#[derive(Debug, Clone)]
+pub struct ExamplePulgin {
+ plugin_name: &'static str,
+ plugin_ctx: Rc<RefCell<String>>,
+ called_times: u64,
+}
+
+impl ExamplePulgin {
+ pub fn new(plugin_name: &'static str, plugin_ctx: Rc<RefCell<String>>) -> ExamplePulgin {
+ ExamplePulgin {
+ plugin_name,
+ plugin_ctx,
+ called_times: 0,
+ }
+ }
+}
+
+impl EventHandle for ExamplePulgin {
+ fn handle(&mut self, index: usize, packet: &Packet, session: Option<Rc<RefCell<Session>>>) {
+ self.called_times += 1;
+ self.plugin_ctx.borrow_mut().clear();
+ self.plugin_ctx.borrow_mut().push_str("1");
+
+ println!("{} handle event : {:?}", self.plugin_name, index);
+ println!(
+ "{} handle times : {:?}",
+ self.plugin_name, self.called_times
+ );
+ println!(
+ "{} handle tuple : {:?}",
+ self.plugin_name,
+ packet.get_outer_tuple()
+ );
+
+ if session.is_none() {
+ return;
+ }
+ let session = session.unwrap();
+ println!("{} handle session : {:?}", self.plugin_name, session);
+ session
+ .borrow_mut()
+ .set_session_exdata("example pulgin".to_string(), "success".to_string());
+ }
+}