use crate::event::event::*; use crate::event::manager::EventHandle; use crate::packet::packet::Packet; use crate::session::session::Session; use crate::thread::thread::ThreadContex; use std::cell::RefCell; use std::rc::Rc; #[derive(Clone)] pub struct ExamplePulgin { plugin_name: &'static str, plugin_ctx: Rc>, thread_ctx: Rc>, tcp_opening_event: usize, tcp_active_event: usize, tcp_expire_event: usize, tcp_closed_event: usize, http_opening_event: usize, } impl ExamplePulgin { pub fn new(plugin_name: &'static str, thread_ctx: Rc>) -> ExamplePulgin { ExamplePulgin { plugin_name, plugin_ctx: Rc::new(RefCell::new(String::new())), thread_ctx: thread_ctx, tcp_opening_event: 0, tcp_active_event: 0, tcp_expire_event: 0, tcp_closed_event: 0, http_opening_event: 0, } } pub fn get_thread_ctx(&self) -> Rc> { self.thread_ctx.clone() } } impl EventHandle for ExamplePulgin { fn init(&mut self) { let thread_ctx = self.get_thread_ctx(); let event_mgr = thread_ctx.borrow().get_event_mgr(); self.tcp_opening_event = event_mgr .borrow_mut() .event2index(BUILDIN_TCP_OPENING_EVENT); event_mgr .borrow_mut() .register(self.tcp_opening_event, Box::new(self.clone())); self.tcp_active_event = event_mgr.borrow_mut().event2index(BUILDIN_TCP_ACTIVE_EVENT); event_mgr .borrow_mut() .register(self.tcp_active_event, Box::new(self.clone())); self.tcp_expire_event = event_mgr.borrow_mut().event2index(BUILDIN_TCP_EXPIRE_EVENT); event_mgr .borrow_mut() .register(self.tcp_expire_event, Box::new(self.clone())); self.tcp_closed_event = event_mgr.borrow_mut().event2index(BUILDIN_TCP_CLOSED_EVENT); event_mgr .borrow_mut() .register(self.tcp_closed_event, Box::new(self.clone())); self.http_opening_event = event_mgr .borrow_mut() .event2index("USERDEF_HTTP_OPENING_EVENT"); event_mgr .borrow_mut() .register(self.http_opening_event, Box::new(self.clone())); } fn handle(&mut self, index: usize, packet: &Packet, session: Option>>) { if session.is_none() { return; } self.plugin_ctx.borrow_mut().clear(); self.plugin_ctx.borrow_mut().push_str("1"); let session = session.unwrap(); if index == self.tcp_opening_event { println!( "{} handle BUILDIN_TCP_OPENING_EVENT: {:?}", self.plugin_name, session ); } else if index == self.tcp_active_event { println!( "{} handle BUILDIN_TCP_ACTIVE_EVENT: {:?}", self.plugin_name, session ); } else if index == self.tcp_expire_event { println!( "{} handle BUILDIN_TCP_EXPIRE_EVENT: {:?}", self.plugin_name, session ); } else if index == self.tcp_closed_event { println!( "{} handle BUILDIN_TCP_CLOSED_EVENT: {:?}", self.plugin_name, session ); } else if index == self.http_opening_event { println!( "{} handle USERDEF_HTTP_OPENING_EVENT: {:?}", self.plugin_name, session ); } else { println!("{} handle UNKNOWN_EVENT: {:?}", self.plugin_name, session); } } }