]> Cypherpunks.ru repositories - govpn.git/blobdiff - src/cypherpunks.ru/govpn/cmd/govpn-server/main.go
Merge branch 'develop'
[govpn.git] / src / cypherpunks.ru / govpn / cmd / govpn-server / main.go
index 3e80975587fbe6df3abd8572d9ae23d7ddea9aa1..0dfd8ab83198f449f7d4148f8e1e11c780eff189 100644 (file)
@@ -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
+                       })
                }
        }
 }