Signaling Protocol
Signaling carries SDP / ICE exchange and a set of control messages over WebSocket. The shared protocol models live in signal-facade/, and the signaling server itself is in signal/.
Message Types
Signaling messages are modeled as the SignalingType enum in signal-facade/src/model/signal.rs. Each variant has a unique integer value and is handled exhaustively in handle_message in signal/src/service.rs — there is intentionally no _ => catch-all, so the compiler enforces that every type is handled.
Authentication
Signaling endpoints authenticate differently depending on who connects — see Signaling Authentication. In short:
- Desk Server → Signaling uses a token in the WebSocket URL query string.
- Browser → Signaling uses the Actix-Session cookie, with no token parameter.
Adding a New Signaling Type
- Add a variant (with a unique integer value) to
SignalingType. - Handle it in
handle_message— add a forwarding branch or a dedicated match arm. - Update the frontend: regenerate the client and add an
onMessagehandler in the frontend RTC hook.
See the Module Map for the cross-cutting checklist.