From 32af882b9930b620028cdf79b2f3bf01a8c14f7d Mon Sep 17 00:00:00 2001 From: David Zhao Date: Thu, 8 Oct 2020 00:12:57 -0700 Subject: [PATCH] support multiple STUN servers --- pkg/config/config.go | 8 +++++--- pkg/node/node.go | 7 ++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/config/config.go b/pkg/config/config.go index 4eb2dfe40..44a4deaa8 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -15,8 +15,8 @@ type Config struct { MultiNode bool `yaml:"multi_node"` Development bool `yaml:"development"` - // Stun server - StunServer string `yaml:"stun_server"` + // STUN + StunServers []string `yaml:"stun_servers"` } func NewConfig(confString string) (*Config, error) { @@ -26,7 +26,9 @@ func NewConfig(confString string) (*Config, error) { RTCPort: 7881, UDPRangeStart: 10000, UDPRangeEnd: 11000, - StunServer: "stun.l.google.com:19302", + StunServers: []string{ + "stun.l.google.com:19302", + }, } if confString != "" { yaml.Unmarshal([]byte(confString), conf) diff --git a/pkg/node/node.go b/pkg/node/node.go index 05b1fc94d..9adf4c5b3 100644 --- a/pkg/node/node.go +++ b/pkg/node/node.go @@ -1,6 +1,8 @@ package node import ( + "errors" + "github.com/google/uuid" "github.com/google/wire" "github.com/pion/stun" @@ -45,7 +47,10 @@ func NewLocalNode(conf *config.Config) (*Node, error) { } func (n *Node) DiscoverNetworkInfo() error { - c, err := stun.Dial("udp", n.config.StunServer) + if len(n.config.StunServers) == 0 { + return errors.New("STUN servers are required but not defined") + } + c, err := stun.Dial("udp", n.config.StunServers[0]) if err != nil { return err }