use crate::capture::start_capture;
use crate::PacketCaptureOptions;
use crate::PacketFrame;
use std::sync::mpsc::{channel, Receiver, Sender};
use std::sync::{Arc, Mutex};
#[derive(Debug)]
pub struct Listner {
pub options: PacketCaptureOptions,
pub tx: Arc<Mutex<Sender<PacketFrame>>>,
#[allow(dead_code)]
pub rx: Arc<Mutex<Receiver<PacketFrame>>>,
pub stop: Arc<Mutex<bool>>,
}
impl Listner {
pub fn new(options: PacketCaptureOptions) -> Listner {
let (tx, rx) = channel();
let listener: Listner = Listner {
options: options,
tx: Arc::new(Mutex::new(tx)),
rx: Arc::new(Mutex::new(rx)),
stop: Arc::new(Mutex::new(false)),
};
listener
}
#[allow(dead_code)]
pub fn get_receiver(&self) -> Arc<Mutex<Receiver<PacketFrame>>> {
self.rx.clone()
}
pub fn get_stop_handle(&self) -> Arc<Mutex<bool>> {
self.stop.clone()
}
pub fn start(&self) -> Vec<PacketFrame> {
let options = self.options.clone();
start_capture(options, &self.tx, &self.stop)
}
}