log.Println(govpn.VersionGet())
confInit()
- knownPeers = govpn.KnownPeers(make(map[string]**govpn.Peer))
if *egdPath != "" {
log.Println("Using", *egdPath, "EGD")
select {
case <-termSignal:
govpn.BothPrintf(`[terminating bind="%s"]`, *bindAddr)
- for _, ps := range peers {
+ peers.Range(func(_, psI interface{}) bool {
+ ps := psI.(*PeerState)
govpn.ScriptCall(
confs[*ps.peer.ID].Down,
ps.tap.Name,
ps.peer.Addr,
)
- }
+ return true
+ })
break MainCycle
case <-hsHeartbeat:
now := time.Now()
- hsLock.Lock()
- for addr, hs := range handshakes {
+
+ handshakes.Range(func(addrI, hsI interface{}) bool {
+ addr := addrI.(string)
+ hs := hsI.(*govpn.Handshake)
if hs.LastPing.Add(timeout).Before(now) {
govpn.Printf(`[handshake-delete bind="%s" addr="%s"]`, *bindAddr, addr)
hs.Zero()
- delete(handshakes, addr)
+ handshakes.Delete(addr)
}
- }
- peersLock.Lock()
- peersByIDLock.Lock()
- kpLock.Lock()
- for addr, ps := range peers {
+ return true
+ })
+
+ peers.Range(func(addrI, psI interface{}) bool {
+ addr := addrI.(string)
+ ps := psI.(*PeerState)
ps.peer.BusyR.Lock()
needsDeletion = ps.peer.LastPing.Add(timeout).Before(now)
ps.peer.BusyR.Unlock()
*bindAddr,
ps.peer.ID.String(),
)
- delete(peers, addr)
- delete(knownPeers, addr)
- delete(peersByID, *ps.peer.ID)
+ peers.Delete(addr)
+ knownPeers.Delete(addr)
+ peersByID.Delete(*ps.peer.ID)
go govpn.ScriptCall(
confs[*ps.peer.ID].Down,
ps.tap.Name,
)
ps.terminator <- struct{}{}
}
- }
- hsLock.Unlock()
- peersLock.Unlock()
- peersByIDLock.Unlock()
- kpLock.Unlock()
+ return true
+ })
}
}
}