| Crates.io | enigma-rtc |
| lib.rs | enigma-rtc |
| version | 0.1.0 |
| created_at | 2025-12-15 12:42:35.940316+00 |
| updated_at | 2025-12-15 12:42:35.940316+00 |
| description | WebRTC signaling and session management for Enigma Messenger |
| homepage | https://github.com/Gladius33/enigma-rtc |
| repository | https://github.com/Gladius33/enigma-rtc |
| max_upload_size | |
| id | 1985963 |
| size | 100,887 |
Lightweight Rust crate providing deterministic signaling, a guarded call session state machine, and a pluggable WebRTC engine wrapper for Enigma Messenger and other applications.
RtcEngine trait plus a default WebRtcEngine implementation built on webrtc-rs.use enigma_rtc::{CallSession, RtcConfig, SignalingMessage};
use tokio::task;
let session = CallSession::new(RtcConfig::default()).unwrap();
let offer = session.create_offer().unwrap();
let payload = match offer { SignalingMessage::Offer { sdp } => sdp, _ => unreachable!() };
send_to_remote(payload); // signaling transport defined by the host app
// in parallel, forward local events over signaling
let forwarder = task::spawn(async move {
loop {
let event = session.next_event().await?;
handle_local_event(event);
}
});
// when an answer arrives from the remote peer
session.accept_answer(remote_answer_sdp).unwrap();
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.