summaryrefslogtreecommitdiff
path: root/src/main.rs
blob: b29122c4b503082e4d5944cb8e9be16ae0df22dd (plain)
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);
}