use crate::event::event::Event; use crate::event::manager::EventHandle; use crate::event::manager::EventManager; use crate::event::manager::EventQueue; use crate::packet::packet::Packet; use crate::session::session::Session; use std::cell::RefCell; use std::rc::Rc; #[derive(Clone)] pub struct ExamplePulgin { plugin_name: &'static str, plugin_ctx: Rc>, } impl ExamplePulgin { pub fn new(plugin_name: &'static str) -> ExamplePulgin { ExamplePulgin { plugin_name, plugin_ctx: Rc::new(RefCell::new(String::new())), } } } impl EventHandle for ExamplePulgin { fn init(&mut self, event_mgr: &mut EventManager) { event_mgr.register(Event::TCPOpeningEvent, Box::new(self.clone())); event_mgr.register(Event::TCPActiveEvent, Box::new(self.clone())); event_mgr.register(Event::TCPExpireEvent, Box::new(self.clone())); event_mgr.register(Event::TCPClosedEvent, Box::new(self.clone())); event_mgr.register(Event::HTTPRequestEvent, Box::new(self.clone())); } fn handle( &mut self, event: Event, queue: &mut EventQueue, packet: Option<&Packet>, session: Option>>, ) { self.plugin_ctx.borrow_mut().push_str("1"); if session.is_none() { return; } if packet.is_none() { println!("{} handle Packet: None", self.plugin_name); } let session = session.unwrap(); session.borrow_mut().inc_session_c2s_metrics(0, 0, 1, 1); match event { Event::TCPOpeningEvent => { println!("{} handle TCPOpeningEvent: {:?}", self.plugin_name, session); let (src_port, dst_port) = packet.unwrap().get_innermost_port().unwrap(); if src_port == 80 || dst_port == 80 { println!("{} add HTTPRequestEvent", self.plugin_name); queue.add(Event::HTTPRequestEvent, Some(session)); } } Event::TCPActiveEvent => { println!("{} handle TCPActiveEvent: {:?}", self.plugin_name, session); } Event::TCPExpireEvent => { println!("{} handle TCPExpireEvent: {:?}", self.plugin_name, session); } Event::TCPClosedEvent => { println!("{} handle TCPClosedEvent: {:?}", self.plugin_name, session); } Event::HTTPRequestEvent => { println!( "{} handle HTTPRequestEvent: {:?}", self.plugin_name, session ); } _ => { println!("{} handle UnknownEvent: {:?}", self.plugin_name, session); } } } }