Skip to main content

openconnect_core/
stats.rs

1use crate::VpnClient;
2use openconnect_sys::oc_stats;
3
4#[derive(Debug)]
5pub struct Stats {
6    pub rx_bytes: u64,
7    pub tx_bytes: u64,
8    pub rx_pkts: u64,
9    pub tx_pkts: u64,
10}
11
12pub(crate) extern "C" fn stats_fn(privdata: *mut ::std::os::raw::c_void, stats: *const oc_stats) {
13    println!("stats_fn");
14    let client = unsafe { VpnClient::ref_from_raw(privdata) };
15    let dlts = client.get_dlts_cipher();
16
17    let stats: Option<Stats> = if !stats.is_null() {
18        let stats = unsafe { &*stats };
19        Some(Stats {
20            rx_bytes: stats.rx_bytes,
21            tx_bytes: stats.tx_bytes,
22            rx_pkts: stats.rx_pkts,
23            tx_pkts: stats.tx_pkts,
24        })
25    } else {
26        None
27    };
28
29    client.handle_stats((dlts, stats));
30}