Commit c103d1cf authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Rework configuration of built-in TURN server.

The default configuration is now defined by an explicit value
"auto", which is easier to check and to explain.
parent c1b689bc
...@@ -242,24 +242,27 @@ user entry with a hashed password looks like this: ...@@ -242,24 +242,27 @@ user entry with a hashed password looks like this:
ICE is the NAT and firewall traversal protocol used by WebRTC. ICE can ICE is the NAT and firewall traversal protocol used by WebRTC. ICE can
make use of two kinds of servers to help with NAT traversal: STUN servers, make use of two kinds of servers to help with NAT traversal: STUN servers,
that simply help punching holes in NATs, and TURN servers, that serve as that simply help punching holes in NATs, and TURN servers, that serve as
relays for traffic. TURN is a superset of NAT: no STUN server is relays for traffic. TURN is a superset of STUN: no STUN server is
necessary if a TURN server is available. necessary if a TURN server is available.
Galène includes a simple IPv4-only TURN server, which is controlled by the Galène includes a simple IPv4-only TURN server, which is controlled by the
`-turn` command-line option. If the value of this option is the empty `-turn` command-line option. If its value is set to the empty string
string `""`, then the built-in server is disabled. If the value of this `""`, then the built-in server is disabled. If its value is a colon
option is a colon followed with a port number `:1194`, then the TURN followed with a port number, for example `:1194`, then the TURN server
server will listen on all public IPv4 addresses of the local host, over will listen on all public IPv4 addresses of the local host, over UDP and
UDP and TCP. If the value of this option is a socket address, such as TCP. If the value of this option is a socket address, such as
`192.0.2.1:1194`, then the TURN server will listen on all addresses of the `192.0.2.1:1194`, then the TURN server will listen on all addresses of the
local host but assume that the address seen by the clients is the one local host but assume that the address seen by the clients is the one
given in the option; this is the recommended configuration when running given in the option; this is the recommended configuration when running
behind NAT with port forwarding. behind NAT with port forwarding. The default value is `-turn auto`, which
enables the TURN server on port 1194 if there is no
Some users may prefer to disable Galène's built in TURN server (`-turn ""`) `data/ice-servers.json` file.
and configure an external ICE server. In that case, the ICE configuration
should appear in the file `data/ice-servers.json`. In the case of a STUN Some users may prefer to use an external ICE server. In that case, the
server, it should look like this: built-in TURN server should be disabled (`-turn ""` or the default
`-turn auto`), and a working ICE configuration should appear in the file
`data/ice-servers.json`. In the case of a single STUN server, it should
look like this:
[ [
{ {
...@@ -283,8 +286,8 @@ look like this: ...@@ -283,8 +286,8 @@ look like this:
} }
] ]
If you prefer to use coturn's `use-auth-secret` option, then your If you prefer to use coturn's `use-auth-secret` option, then the
`ice-servers.json` should look like this: `ice-servers.json` file should look like this:
[ [
{ {
......
...@@ -43,16 +43,10 @@ func main() { ...@@ -43,16 +43,10 @@ func main() {
flag.BoolVar(&group.UseMDNS, "mdns", false, "gather mDNS addresses") flag.BoolVar(&group.UseMDNS, "mdns", false, "gather mDNS addresses")
flag.BoolVar(&ice.ICERelayOnly, "relay-only", false, flag.BoolVar(&ice.ICERelayOnly, "relay-only", false,
"require use of TURN relays for all media traffic") "require use of TURN relays for all media traffic")
flag.StringVar(&turnserver.Address, "turn", ":1194", flag.StringVar(&turnserver.Address, "turn", "auto",
"built-in TURN server `address` (\"\" to disable)") "built-in TURN server `address` (\"\" to disable)")
flag.Parse() flag.Parse()
flag.Visit(func(f *flag.Flag) {
if f.Name == "turn" {
turnserver.Force = true
}
})
if cpuprofile != "" { if cpuprofile != "" {
f, err := os.Create(cpuprofile) f, err := os.Create(cpuprofile)
if err != nil { if err != nil {
......
...@@ -107,7 +107,7 @@ func Update() *configuration { ...@@ -107,7 +107,7 @@ func Update() *configuration {
} }
} }
err := turnserver.StartStop(found) err := turnserver.StartStop(!found)
if err != nil { if err != nil {
log.Printf("TURN: %v", err) log.Printf("TURN: %v", err)
} }
......
...@@ -16,7 +16,6 @@ import ( ...@@ -16,7 +16,6 @@ import (
var username string var username string
var password string var password string
var Address string var Address string
var Force bool
var mu sync.Mutex var mu sync.Mutex
var addresses []net.Addr var addresses []net.Addr
...@@ -96,7 +95,12 @@ func Start() error { ...@@ -96,7 +95,12 @@ func Start() error {
if Address == "" { if Address == "" {
return errors.New("built-in TURN server disabled") return errors.New("built-in TURN server disabled")
} }
addr, err := net.ResolveUDPAddr("udp4", Address)
ad := Address
if Address == "auto" {
ad = ":1194"
}
addr, err := net.ResolveUDPAddr("udp4", ad)
if err != nil { if err != nil {
return err return err
} }
...@@ -234,13 +238,14 @@ func Stop() error { ...@@ -234,13 +238,14 @@ func Stop() error {
return err return err
} }
func StartStop(found bool) error { func StartStop(start bool) error {
if Force && Address != "" { if Address == "auto" {
return Start() if start {
} else if found { return Start()
}
return Stop()
} else if Address == "" {
return Stop() return Stop()
} else if Address != "" {
return Start()
} }
return nil return Start()
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment