netscan_pcap/
listener.rs

1use crate::capture::start_capture;
2use crate::PacketCaptureOptions;
3use crate::PacketFrame;
4use std::sync::mpsc::{channel, Receiver, Sender};
5use std::sync::{Arc, Mutex};
6
7/// Listner
8#[derive(Debug)]
9pub struct Listner {
10    /// Packet capture options
11    pub options: PacketCaptureOptions,
12    /// Message Sender
13    pub tx: Arc<Mutex<Sender<PacketFrame>>>,
14    /// Message Receiver
15    #[allow(dead_code)]
16    pub rx: Arc<Mutex<Receiver<PacketFrame>>>,
17    /// Stop handle
18    pub stop: Arc<Mutex<bool>>,
19}
20
21impl Listner {
22    /// Create new Listner
23    pub fn new(options: PacketCaptureOptions) -> Listner {
24        let (tx, rx) = channel();
25        let listener: Listner = Listner {
26            options: options,
27            tx: Arc::new(Mutex::new(tx)),
28            rx: Arc::new(Mutex::new(rx)),
29            stop: Arc::new(Mutex::new(false)),
30        };
31        listener
32    }
33
34    /// Get progress receiver
35    #[allow(dead_code)]
36    pub fn get_receiver(&self) -> Arc<Mutex<Receiver<PacketFrame>>> {
37        self.rx.clone()
38    }
39
40    /// Get stop handle
41    pub fn get_stop_handle(&self) -> Arc<Mutex<bool>> {
42        self.stop.clone()
43    }
44
45    /// Start capture and return captured packets
46    pub fn start(&self) -> Vec<PacketFrame> {
47        let options = self.options.clone();
48        start_capture(options, &self.tx, &self.stop)
49    }
50}