XTurn is a STUN/TURN relay server for real-time media (WebRTC, VoIP, and similar).
What problem this solves
Many devices sit behind NAT or firewalls and cannot receive inbound UDP/TCP directly. Interactive Connectivity Establishment (ICE) lets two peers find working paths; when direct paths fail, a TURN relay forwards media through a server the client can reach. STUN discovers reflexive addresses and tests NAT behavior; TURN allocates relay ports, permissions, and channels so peers can exchange packets via the server.
XTurn implements the server side: it listens for STUN/TURN, authenticates
clients, opens relay sockets, and forwards media on a fast path separate from
control requests. STUN message encoding and decoding use
xmedialib (XMediaLib.Stun).
Main modules
Xirsys.XTurn-- OTP application entry; starts stores andRootSupervisorXirsys.XTurn.RootSupervisor/Supervisor-- listener and worker treeXirsys.XTurn.Pipeline-- control-plane STUN/TURN request dispatchXirsys.XTurn.DataPlane-- relay media fast path (ChannelData, Send)Xirsys.XTurn.Conn/Response-- per-request context for action chainsXirsys.XTurn.Binding-- STUN Binding (address discovery)Xirsys.XTurn.Allocate.Client/Store-- per-allocation GenServer and indexXirsys.XTurn.ClientWorker.Pool-- sharded control workersXirsys.XTurn.ListenConfig/ListenRegistry-- bind ports and RFC 5780 socketsXirsys.XTurn.DualIp-- dual-homed NAT behavior discovery helpers
RFCs
- RFC 8489 / RFC 5389 (STUN)
- RFC 5766 (TURN)
- RFC 8656 (TURN extensions: address families, even-port)
- RFC 5780 (NAT behavior discovery: CHANGE-REQUEST, OTHER-ADDRESS)
- RFC 6062 (TURN over TCP / TCP relay)
- RFC 7635 (TURN REST API; optional access tokens)
- RFC 3489 (classic STUN interop when
:rfc3489_compatis enabled)
Summary
Functions
OTP application callback.