vppn/peer/router-managemediator.go
2024-12-13 21:30:06 +01:00

43 lines
755 B
Go

package peer
import (
"log"
"math/rand"
"time"
)
func (r *Router) manageMediator() {
var (
ip = byte(0)
mediators = make([]*route, 0, 32)
)
for range time.Tick(8 * time.Second) {
// If the current mediator is up, keep it.
route := r.routes[ip].Load()
if route != nil && route.Up {
continue
}
// If the current mediator is up, keep it.
mediators = mediators[:0]
for i := range r.routes {
route := r.routes[i].Load()
if route == nil || !route.Mediator {
continue
}
mediators = append(mediators, route)
}
if len(mediators) == 0 {
r.mediatorIP.Store(nil)
} else {
ip = mediators[rand.Intn(len(mediators))].PeerIP
log.Printf("Got mediator IP: %d", ip)
r.mediatorIP.Store(&ip)
}
}
}