#[macro_use]
extern crate trackable;
use clap::Parser;
use rusturn::auth::AuthParams;
use rusturn::server::UdpServer;
use std::net::SocketAddr;
#[derive(Debug, Parser)]
#[clap(name = "turnsrv")]
struct Opt {
#[clap(long, default_value = "127.0.0.1:3478")]
server: SocketAddr,
#[clap(long, default_value = "foo")]
username: String,
#[clap(long, default_value = "bar")]
password: String,
#[clap(long, default_value = "baz")]
realm: String,
#[clap(long, default_value = "qux")]
nonce: String,
}
fn main() -> Result<(), trackable::error::MainError> {
env_logger::init_from_env(
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
);
let opt = Opt::parse();
let server_addr = opt.server;
let auth_params = track!(AuthParams::with_realm_and_nonce(
&opt.username,
&opt.password,
&opt.realm,
&opt.nonce
))?;
let turn_server = track!(fibers_global::execute(UdpServer::start(
server_addr,
auth_params,
)))?;
track!(fibers_global::execute(turn_server))?;
Ok(())
}