2 stable releases

1.1.0 Jan 7, 2023
1.0.1 Jan 1, 2023

#738 in Network programming


Used in turn-server

GPL-2.0-or-later

195KB
2.5K SLoC

TURN-RS


TURN Server implemented by ❤️ Rust


A pure rust-implemented turn server, different from coturn, provides a more flexible external control API and provides the same performance and memory footprint.

Who uses it?

Table of contents

Features

  • You can use the HTTP protocol to control the turn-server or obtain the running status from the outside.
  • Webhooks allow subscription to certain events on the server. When one of these events is fired, we will send an HTTP PUT payload to the URL configured by the webhook.
  • The key pair used when defining the authentication in the configuration file.
  • Authenticating requests through webhooks.

Crates

  • stun, fast and zero-cost stun message decoder and encoder. (crate).
  • turn, a library for handling turn sessions. (crate).
  • turn-server, implementation of turn server based on turn library. (api)

Usage

cargo install turn-server

Start with configuration file:

turn-server --config=/etc/turn_server/config.toml

Please check the example configuration file for details: turn_server.toml

Building

Prerequisites

You need to install the Rust toolchain, if you have already installed it, you can skip it, Install Rust, then get the source code:

git clone https://github.com/colourful-rtc/turn-rs

Build workspace

Compile the entire workspace in release mode:

cd turn-rs
cargo build --release

After the compilation is complete, you can find the binary file in the "target/release" directory.

Benchmark

stun_decoder/channel_bind ...[time: 20.606 ns] ...[thrpt: 4.8812 GiB/s]
stun_decoder/binding_request ...[time: 20.862 ns] ...[thrpt: 4.2856 GiB/s]

License

GPL Copyright (c) 2022 Mr.Panda.

Dependencies

~3.5–8MB
~131K SLoC