README.md and STATUS.md advertised RFC 5389, RFC 5766 and RFC 6156 without mentioning the RFCs that obsolete them, so the docs simultaneously claimed conformance to dead specs and understated what the code actually does: dual allocation, ADDRESS-ERROR-CODE, the 440/443/508 error codes and the RFC 8656 channel-number range are all implemented and none were mentioned. Both files now name RFC 8489 and RFC 8656, annotate the obsoleted specs as such, and state the two gaps explicitly rather than leaving them implied - the RFC 8489 authentication additions and RFC 8656 ICMP relaying are absent. The transport and relay-protocol lists cite RFC 8656 rather than RFC 5766. Drops the TURN-bis draft-04 line: that draft was published as RFC 8656, now listed above it. Merge order: the RFC 8489 entry credits first-wins handling of repeated attributes, which is only complete once the Send DATA and ChannelBind XOR-PEER-ADDRESS fixes have landed.
4.4 KiB
Currently implemented functionality:
-
RFC5389 (new STUN protocol) full server and client implementations. RFC 8489 obsoletes RFC 5389: its message-processing rules are implemented, but its authentication additions (MESSAGE-INTEGRITY-SHA256, PASSWORD-ALGORITHMS, USERHASH, the nonce cookie) are not, so RFC 8489 clients use that spec's backward-compatible MD5/SHA-1 path. We do not maintain strict compatibility with the obsolete RFC 3489 "old STUN" protocol.
-
RFC5766 TURN protocol full server and client implementations, updated to RFC 8656, which obsoletes RFC 5766. ICMP relaying (RFC 8656 Section 11.5) is not implemented. We support file-based long term user credentials, for now. We added experimental DTLS protocol, too.
-
RFC6156 TURN IPv6 extension, folded into RFC 8656 and implemented including dual allocation.
-
We support the following client-to-server network transports for TURN messages: a) UDP b) TCP c) TLS d) DTLS
-
Performance tested.
-
Torture and stability tests.
-
Multiple *NIX platforms tested and supported.
-
TTL field handling implemented for all platforms, preferred behavior in RFC5766.
-
TOS (DiffServ and ECN) field handling (preferred behavior of RFC 5766) implemented, for Linux. Other platforms support the alternative behavior of RFC 5766.
-
DF field alternative behavior of RFC 5766 implemented.
-
Bandwidth limitation per session implemented.
-
RFC 5769 test vectors implemented (where applicable).
-
RFC 5780 STUN extension: NAT behavior discovery.
-
C++ mapping implemented.
-
RFC 6062 TCP relaying implemented.
-
Users can be stored in PostgreSQL database.
-
Users can be stored in MySQL database.
-
TURN Server REST API implemented.
-
Short-term credentials mechanism implemented.
-
Simple load-balancing with ALTERNATE-SERVER implemented.
-
Redis database support added.
-
RFC3489 backward compatibility (DEPRECATED, opt-in via --rfc3489-compatibility; scheduled for removal in the next major release - see docs/rfc3489-deprecation.md).
-
Multithreaded TCP relay processing (UDP relay has been multithreaded from the beginning).
-
Networking engine 2.0 implemented, with more scalable approach to the UDP sockets handling.
-
DOS attack prevention logic added to the server; DOS attack client emulation implemented.
-
Linux UDP sockets workaround added to counter RFC 1122 behavior.
-
DTLS sockets re-implemented for better scalability and for Cygwin compatibility.
-
A number of TLS/DTLS improvements added: multiple protocols support, certificate check option.
-
SHA256 support added (experimental).
-
UDP/TCP network engine (
NEV_UDP_SOCKET_PER_THREAD) optimized for modern kernels; all previous engine variants removed. -
ICE Mobility draft implemented (experimental).
-
CLI implemented.
-
DH and EC TLS ciphers added.
-
HTTP "keep alive" request supported.
-
Optimized (for thousands and more sessions) timers implementation.
-
TCP network engine consolidated into
NEV_UDP_SOCKET_PER_THREAD(see item 30). -
telnet-based monitor implemented.
-
Package memory copy eliminated in traffic routing.
-
Congestion avoidance implemented, for all protocols.
-
Coturn project forked from rfc5766-turn-server.
-
Multi-tenant server implemented (ORIGIN support).
-
Bandwidth draft support added.
-
MongoDB support added.
-
Double (dual) allocation added (SSODA draft).
-
Secure MySQL connection implemented.
-
Third-party security mechanism (through oAuth) implemented.
-
SQLite support added as default database.
-
DTLS1.2 supported.
-
ALPN stun.turn and stun.nat-discovery supported.
-
SSLv2 support cancelled.
-
The short-term credentials server-side support cancelled (still supported in the client library).
-
Web HTTPS admin interface implemented.
-
SHA384 and SHA512 support added (experimental).
-
native SCTP experimental support.
-
Multi-tenant implementation based upon third-party authorization (oAuth).
-
TLS1.3 support (with openssl-1.1.1+)
-
openssl-3.0 support
-
Windows build support, MSVC and MinGW
-
Add support to Prometheus as metrics interface
-
Sanitize DB connection strings before printing to log
-
Syslog facility support as an additional logging mechanism provider
-
Support LibreSSL
-
CMake as an alternative build system
Things to be implemented in future (the development roadmap) are described in the TODO file.