use std::cell::RefCell; use std::rc::Rc; use stellar_rs::event::manager::EventHandle; use stellar_rs::packet::capture::PacketCapture; use stellar_rs::packet::packet::Packet; use stellar_rs::plugin::example::ExamplePulgin; use stellar_rs::thread::thread::ThreadContex; fn packet_callback(data: &[u8], len: u32, ctx: Rc>) { let event_mgr = ctx.borrow_mut().get_event_mgr(); let session_mgr = ctx.borrow_mut().get_session_mgr(); let empty = Packet::new(b"", 0); let mut packet = Packet::new(data, len); let result = packet.handle(ctx); match result { Ok(_left) => { // println!("SUCCESS: {:?}, {:?}", packet, left); // println!("SUCCESS: {:#?}, {:?}", packet, left); // dbg!(packet); } Err(e) => { // println!("ERROR Data: {:?}", packet); // println!("ERROR Code: {:?}", e); println!("ERROR Desc: {}", e); } } // Hanlde Packet Event event_mgr.borrow_mut().dispatch(&packet); // Hanlde Expire Event session_mgr.borrow_mut().expire_sessions(); event_mgr.borrow_mut().dispatch(&empty); } fn main() { let thread_ctx = Rc::new(RefCell::new(ThreadContex::new())); let mut plugin = ExamplePulgin::new("Example Plugin", thread_ctx.clone()); plugin.init(); PacketCapture::show_devices(); let mut cap = PacketCapture::new("eth0"); cap.poll_packet(packet_callback, thread_ctx); }