derp/derpmap: add World.ForeachServer, check STUN server validity earlier

pull/352/head
Brad Fitzpatrick 5 years ago
parent 108237798d
commit 495796fff1

@ -7,6 +7,7 @@ package derpmap
import ( import (
"fmt" "fmt"
"net"
"tailscale.com/types/structs" "tailscale.com/types/structs"
) )
@ -43,6 +44,13 @@ func (w *World) NodeIDOfSTUNServer(server string) int {
return 0 return 0
} }
// ForeachServer calls fn for each DERP server, in an unspecified order.
func (w *World) ForeachServer(fn func(*Server)) {
for _, s := range w.byID {
fn(s)
}
}
// Prod returns the production DERP nodes. // Prod returns the production DERP nodes.
func Prod() *World { func Prod() *World {
return prod return prod
@ -95,9 +103,15 @@ func (w *World) add(s *Server) {
w.servers = append(w.servers, s) w.servers = append(w.servers, s)
if s.STUN4 != "" { if s.STUN4 != "" {
w.stun4 = append(w.stun4, s.STUN4) w.stun4 = append(w.stun4, s.STUN4)
if _, _, err := net.SplitHostPort(s.STUN4); err != nil {
panic("not a host:port: " + s.STUN4)
}
} }
if s.STUN6 != "" { if s.STUN6 != "" {
w.stun6 = append(w.stun6, s.STUN6) w.stun6 = append(w.stun6, s.STUN6)
if _, _, err := net.SplitHostPort(s.STUN6); err != nil {
panic("not a host:port: " + s.STUN6)
}
} }
} }

@ -102,22 +102,22 @@ func TestAddReportHistoryAndSetPreferredDERP(t *testing.T) {
derps := derpmap.NewTestWorldWith( derps := derpmap.NewTestWorldWith(
&derpmap.Server{ &derpmap.Server{
ID: 1, ID: 1,
STUN4: "d1", STUN4: "d1:1",
}, },
&derpmap.Server{ &derpmap.Server{
ID: 2, ID: 2,
STUN4: "d2", STUN4: "d2:1",
}, },
&derpmap.Server{ &derpmap.Server{
ID: 3, ID: 3,
STUN4: "d3", STUN4: "d3:1",
}, },
) )
// report returns a *Report from (DERP host, time.Duration)+ pairs. // report returns a *Report from (DERP host, time.Duration)+ pairs.
report := func(a ...interface{}) *Report { report := func(a ...interface{}) *Report {
r := &Report{DERPLatency: map[string]time.Duration{}} r := &Report{DERPLatency: map[string]time.Duration{}}
for i := 0; i < len(a); i += 2 { for i := 0; i < len(a); i += 2 {
k := a[i].(string) k := a[i].(string) + ":1"
switch v := a[i+1].(type) { switch v := a[i+1].(type) {
case time.Duration: case time.Duration:
r.DERPLatency[k] = v r.DERPLatency[k] = v

Loading…
Cancel
Save