1use crate::gui::types::filters::Filters;
2use crate::location;
3use crate::networking::parse_packets::{get_sniffable_headers, packet_stream};
4use crate::networking::types::capture_context::{CaptureContext, CaptureSource};
5use crate::networking::types::my_device::MyDevice;
6use crate::networking::types::my_link_type::MyLinkType;
7use crate::utils::error_logger::{ErrorLogger, Location};
8use async_channel::Sender;
9use pcap::Device;
10use std::collections::{HashMap, VecDeque};
11use std::thread;
12use std::time::{Duration, Instant};
13use tokio::sync::broadcast::Receiver;
14
15#[derive(Default, Debug, Clone)]
16pub struct TrafficPreview {
17 pub data: HashMap<String, u128>,
18}
19
20#[derive(Default, Debug, Clone)]
21pub struct TrafficPreviews {
22 pub data: HashMap<String, VecDeque<u128>>,
23}
24
25impl TrafficPreviews {
26 pub fn refresh(&mut self, msg: TrafficPreview) {
27 for (dev, pkts) in msg.data {
28 self.data
29 .entry(dev)
30 .and_modify(|v| v.push_back(pkts))
31 .or_insert(VecDeque::from([pkts]));
32 }
33 }
34}
35
36pub fn traffic_preview(tx: &Sender<TrafficPreview>, freeze_rxs: (Receiver<()>, Receiver<()>)) {
37 let (freeze_tx, mut freeze_rx) = tokio::sync::broadcast::channel(1_048_575);
38 let (pcap_tx, pcap_rx) = std::sync::mpsc::sync_channel(10_000);
39 for dev in Device::list().unwrap_or_default() {
40 let mut freeze_rx = freeze_tx.subscribe();
…lines 41–126 unchanged (86 lines)