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#[derive(Debug)]
9pub struct Listner {
10 pub options: PacketCaptureOptions,
12 pub tx: Arc<Mutex<Sender<PacketFrame>>>,
14 #[allow(dead_code)]
16 pub rx: Arc<Mutex<Receiver<PacketFrame>>>,
17 pub stop: Arc<Mutex<bool>>,
19}
20
21impl Listner {
22 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 #[allow(dead_code)]
36 pub fn get_receiver(&self) -> Arc<Mutex<Receiver<PacketFrame>>> {
37 self.rx.clone()
38 }
39
40 pub fn get_stop_handle(&self) -> Arc<Mutex<bool>> {
42 self.stop.clone()
43 }
44
45 pub fn start(&self) -> Vec<PacketFrame> {
47 let options = self.options.clone();
48 start_capture(options, &self.tx, &self.stop)
49 }
50}