1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
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<RefCell<ThreadContex>>) {
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);
}
|