X-Git-Url: http://www.git.cypherpunks.ru/?p=govpn.git;a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fgovpn%2Fcmd%2Fgovpn-server%2Fmain.go;fp=src%2Fcypherpunks.ru%2Fgovpn%2Fcmd%2Fgovpn-server%2Fmain.go;h=0dfd8ab83198f449f7d4148f8e1e11c780eff189;hp=3e80975587fbe6df3abd8572d9ae23d7ddea9aa1;hb=f70a3aa49e188be843952738d8ad4eb3a6f1341a;hpb=8b1de1c28a4ef7b651d0196cac4d63eca35b93d1 diff --git a/src/cypherpunks.ru/govpn/cmd/govpn-server/main.go b/src/cypherpunks.ru/govpn/cmd/govpn-server/main.go index 3e80975..0dfd8ab 100644 --- a/src/cypherpunks.ru/govpn/cmd/govpn-server/main.go +++ b/src/cypherpunks.ru/govpn/cmd/govpn-server/main.go @@ -58,7 +58,6 @@ func main() { log.Println(govpn.VersionGet()) confInit() - knownPeers = govpn.KnownPeers(make(map[string]**govpn.Peer)) if *egdPath != "" { log.Println("Using", *egdPath, "EGD") @@ -106,28 +105,33 @@ MainCycle: 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() @@ -137,9 +141,9 @@ MainCycle: *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, @@ -147,11 +151,8 @@ MainCycle: ) ps.terminator <- struct{}{} } - } - hsLock.Unlock() - peersLock.Unlock() - peersByIDLock.Unlock() - kpLock.Unlock() + return true + }) } } }