enigma-rtc
Lightweight Rust crate providing deterministic signaling, a guarded call session state machine, and a pluggable WebRTC engine wrapper for Enigma Messenger and other applications.
Scope and Non-Goals
- Handles SDP offer/answer creation, ICE candidate validation, and state tracking for incoming/outgoing calls.
- Emits events through an async queue so app code can forward ICE candidates or react to lifecycle changes.
- Supplies a mockable
RtcEnginetrait plus a defaultWebRtcEngineimplementation built on webrtc-rs. - Does not include media encryption, signaling transport, or persistence of call logs.
- Does not handle messaging payloads; it focuses purely on media session orchestration.
Quickstart
use ;
use task;
let session = new.unwrap;
let offer = session.create_offer.unwrap;
let payload = match offer ;
send_to_remote; // signaling transport defined by the host app
// in parallel, forward local events over signaling
let forwarder = spawn;
// when an answer arrives from the remote peer
session.accept_answer.unwrap;
State Machine Overview
Idle– no call in progress.CreatingOffer– generating an SDP offer locally.WaitingAnswer– outbound call waiting for remote answer.IncomingOffer– inbound call accepted locally, awaiting confirmation.Connected– both peers share negotiated media parameters.Ending– hangup initiated locally or remotely.Ended– resources released; further actions require a new session.
State transitions are validated at every API boundary to ensure deterministic behavior even when the signaling layer retries messages or receives out-of-order events.