SEDSnet 4.2.6

A memory safe, no_std-capable networking stack with routing, discovery, reliability, and Rust/C/Python bindings.
Documentation
#![cfg(feature = "discovery")]
#[cfg(not(feature = "std"))]
#[unsafe(no_mangle)]
extern "C" fn telemetry_lock() {}
#[cfg(not(feature = "std"))]
#[unsafe(no_mangle)]
extern "C" fn telemetry_unlock() {}

#[test]
#[ignore = "orchestrated across independently compiled codec profiles"]
fn isolated_router_codec_node() {
    use sedsnet::config::*;
    use sedsnet::packet::Packet;
    use sedsnet::router::{Router, RouterConfig, RouterSideOptions};
    use sedsnet::{MessageClass, MessageDataType, MessageElement, ReliableMode};
    use std::sync::{Arc, Mutex};
    if std::env::var_os("CODEC_PROCESS_ROLE").is_none() {
        let directory = std::env::temp_dir().join(format!(
            "sedsnet-codec-{}-{}",
            std::process::id(),
            std::time::SystemTime::now()
                .duration_since(std::time::UNIX_EPOCH)
                .unwrap()
                .as_nanos()
        ));
        std::fs::create_dir(&directory).unwrap();
        for role in ["produce", "receive"] {
            let result = std::process::Command::new(std::env::current_exe().unwrap())
                .args(["--ignored", "--exact", "isolated_router_codec_node"])
                .env("CODEC_PROCESS_ROLE", role)
                .env("CODEC_PROCESS_DIR", &directory)
                .output()
                .unwrap();
            assert!(
                result.status.success(),
                "{}",
                String::from_utf8_lossy(&result.stdout)
            );
        }
        std::fs::remove_dir_all(directory).unwrap();
        return;
    }
    let directory = std::path::PathBuf::from(std::env::var_os("CODEC_PROCESS_DIR").unwrap());
    let endpoint = register_endpoint("ISOLATED_CODEC_DATA", false).unwrap();
    let ty = register_data_type(
        "ISOLATED_CODEC_BYTES",
        MessageElement::Dynamic(MessageDataType::Binary, MessageClass::Data),
        &[endpoint],
        ReliableMode::None,
        10,
    )
    .unwrap();
    let expected = vec![b'A'; 4096];
    if std::env::var("CODEC_PROCESS_ROLE").unwrap() == "produce" {
        let captured = Arc::new(Mutex::new(Vec::new()));
        let output = captured.clone();
        let node =
            Router::new_with_clock(RouterConfig::new([]).with_sender("HOST"), Box::new(|| 100));
        let side = node.add_side_packed_with_options(
            "unknown-or-legacy",
            move |frame| {
                if sedsnet::wire_format::peek_frame_info(frame)?.envelope.ty == ty {
                    *output.lock().unwrap() = frame.to_vec();
                }
                Ok(())
            },
            RouterSideOptions::default(),
        );
        node.set_route(None, side, true).unwrap();
        let packet = Packet::new(ty, &[endpoint], "HOST", 123, Arc::from(expected)).unwrap();
        let receipt = packet.packet_id();
        node.tx(packet).unwrap();
        let frame = captured.lock().unwrap();
        assert!(!frame.is_empty(), "router did not emit ordinary data");
        std::fs::write(directory.join("data.packet"), &*frame).unwrap();
        std::fs::write(directory.join("receipt"), receipt.to_le_bytes()).unwrap();
    } else {
        let frame = std::fs::read(directory.join("data.packet")).unwrap();
        let packet = sedsnet::wire_format::unpack_packet(&frame).unwrap();
        assert_eq!(packet.payload(), expected);
        assert_eq!(packet.data_type(), ty);
        let receipt = u64::from_le_bytes(
            std::fs::read(directory.join("receipt"))
                .unwrap()
                .try_into()
                .unwrap(),
        );
        assert_eq!(
            packet.packet_id(),
            receipt,
            "transcoding must preserve delivery identity"
        );
    }
}