rscamper 0.2.2

Rust interface to scamper network measurement tool
Documentation
// rscamper - Rust FFI bindings for scamper_udpprobe.h
//
// Copyright (C) 2026 Dimitrios Giakatos
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3.

use libc::{c_char, size_t, timeval};
use super::scamper_addr::ScamperAddrT;
use super::scamper_list::{ScamperListT, ScamperCycleT};

#[repr(C)]
pub struct ScamperUdpprobeT {
    _opaque: [u8; 0],
}

#[repr(C)]
pub struct ScamperUdpprobeProbeT {
    _opaque: [u8; 0],
}

#[repr(C)]
pub struct ScamperUdpprobeReplyT {
    _opaque: [u8; 0],
}

pub const SCAMPER_UDPPROBE_STOP_NONE:   u8 = 0;
pub const SCAMPER_UDPPROBE_STOP_DONE:   u8 = 1;
pub const SCAMPER_UDPPROBE_STOP_HALTED: u8 = 2;
pub const SCAMPER_UDPPROBE_STOP_ERROR:  u8 = 3;

unsafe extern "C" {
    pub fn scamper_udpprobe_tojson(
        up: *const ScamperUdpprobeT,
        l: *mut size_t,
    ) -> *mut c_char;
    pub fn scamper_udpprobe_free(up: *mut ScamperUdpprobeT);

    pub fn scamper_udpprobe_list_get(up: *const ScamperUdpprobeT) -> *mut ScamperListT;
    pub fn scamper_udpprobe_cycle_get(up: *const ScamperUdpprobeT) -> *mut ScamperCycleT;
    pub fn scamper_udpprobe_userid_get(up: *const ScamperUdpprobeT) -> u32;
    pub fn scamper_udpprobe_src_get(up: *const ScamperUdpprobeT) -> *mut ScamperAddrT;
    pub fn scamper_udpprobe_dst_get(up: *const ScamperUdpprobeT) -> *mut ScamperAddrT;
    pub fn scamper_udpprobe_sport_get(up: *const ScamperUdpprobeT) -> u16;
    pub fn scamper_udpprobe_dport_get(up: *const ScamperUdpprobeT) -> u16;
    pub fn scamper_udpprobe_start_get(up: *const ScamperUdpprobeT) -> *const timeval;
    pub fn scamper_udpprobe_wait_timeout_get(up: *const ScamperUdpprobeT) -> *const timeval;
    pub fn scamper_udpprobe_wait_probe_get(up: *const ScamperUdpprobeT) -> *const timeval;
    pub fn scamper_udpprobe_flag_is_exitfirst(up: *const ScamperUdpprobeT) -> libc::c_int;
    pub fn scamper_udpprobe_data_get(up: *const ScamperUdpprobeT) -> *const u8;
    pub fn scamper_udpprobe_len_get(up: *const ScamperUdpprobeT) -> u16;
    pub fn scamper_udpprobe_probe_count_get(up: *const ScamperUdpprobeT) -> u8;
    pub fn scamper_udpprobe_probe_sent_get(up: *const ScamperUdpprobeT) -> u8;
    pub fn scamper_udpprobe_stop_count_get(up: *const ScamperUdpprobeT) -> u8;
    pub fn scamper_udpprobe_probe_get(
        up: *const ScamperUdpprobeT,
        i: u8,
    ) -> *mut ScamperUdpprobeProbeT;
    pub fn scamper_udpprobe_stop_reason_get(up: *const ScamperUdpprobeT) -> u8;
    pub fn scamper_udpprobe_stop_tostr(
        up: *const ScamperUdpprobeT,
        buf: *mut c_char,
        l: size_t,
    ) -> *mut c_char;
    pub fn scamper_udpprobe_errmsg_get(up: *const ScamperUdpprobeT) -> *const c_char;

    pub fn scamper_udpprobe_probe_free(probe: *mut ScamperUdpprobeProbeT);
    pub fn scamper_udpprobe_probe_use(
        probe: *mut ScamperUdpprobeProbeT,
    ) -> *mut ScamperUdpprobeProbeT;
    pub fn scamper_udpprobe_probe_tx_get(
        probe: *const ScamperUdpprobeProbeT,
    ) -> *const timeval;
    pub fn scamper_udpprobe_probe_sport_get(probe: *const ScamperUdpprobeProbeT) -> u16;
    pub fn scamper_udpprobe_probe_reply_get(
        probe: *const ScamperUdpprobeProbeT,
        i: u8,
    ) -> *mut ScamperUdpprobeReplyT;
    pub fn scamper_udpprobe_probe_replyc_get(probe: *const ScamperUdpprobeProbeT) -> u8;

    pub fn scamper_udpprobe_reply_free(ur: *mut ScamperUdpprobeReplyT);
    pub fn scamper_udpprobe_reply_use(
        ur: *mut ScamperUdpprobeReplyT,
    ) -> *mut ScamperUdpprobeReplyT;
    pub fn scamper_udpprobe_reply_data_get(ur: *const ScamperUdpprobeReplyT) -> *const u8;
    pub fn scamper_udpprobe_reply_len_get(ur: *const ScamperUdpprobeReplyT) -> u16;
    pub fn scamper_udpprobe_reply_rx_get(ur: *const ScamperUdpprobeReplyT) -> *const timeval;
    pub fn scamper_udpprobe_reply_ifname_get(ur: *const ScamperUdpprobeReplyT) -> *const c_char;
}