mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-18 02:48:40 +00:00
derp/derpmap: add World.ForeachServer, check STUN server validity earlier
This commit is contained in:
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…
x
Reference in New Issue
Block a user