X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=src%2Fcypherpunks.ru%2Fgovpn%2Fcmd%2Fgovpn-server%2Ftcp.go;h=61eb1e07395fcc8b10ddf690d43b706b0f28300b;hb=8cdc4548bc7b6c8b774c2be3b7cd350756df25b6;hp=ad7bcc6a02bde0f9b3ba2ea48e3f9a6a7b90cf8c;hpb=572cac17bde738055312f7a468a0bde0e760a262;p=govpn.git diff --git a/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go b/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go index ad7bcc6..61eb1e0 100644 --- a/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go +++ b/src/cypherpunks.ru/govpn/cmd/govpn-server/tcp.go @@ -71,16 +71,16 @@ func handleTCP(conn net.Conn) { break } prev += n - peerId := idsCache.Find(buf[:prev]) - if peerId == nil { + peerID := idsCache.Find(buf[:prev]) + if peerID == nil { continue } if hs == nil { - conf = confs[*peerId] + conf = confs[*peerID] if conf == nil { govpn.Printf( `[conf-get-failed bind="%s" peer="%s"]`, - *bindAddr, peerId.String(), + *bindAddr, peerID.String(), ) break } @@ -94,37 +94,45 @@ func handleTCP(conn net.Conn) { hs.Zero() govpn.Printf( `[handshake-completed bind="%s" addr="%s" peer="%s"]`, - *bindAddr, addr, peerId.String(), + *bindAddr, addr, peerID.String(), ) - peersByIdLock.RLock() - addrPrev, exists := peersById[*peer.Id] - peersByIdLock.RUnlock() + peersByIDLock.RLock() + addrPrev, exists := peersByID[*peer.ID] + peersByIDLock.RUnlock() + var peerPrev *PeerState if exists { peersLock.Lock() - peers[addrPrev].terminator <- struct{}{} - tap = peers[addrPrev].tap + peerPrev = peers[addrPrev] + if peerPrev == nil { + exists = false + peersLock.Unlock() + } + } + if exists { + peerPrev.terminator <- struct{}{} + tap = peerPrev.tap ps = &PeerState{ peer: peer, tap: tap, terminator: make(chan struct{}), } go govpn.PeerTapProcessor(ps.peer, ps.tap, ps.terminator) - peersByIdLock.Lock() + peersByIDLock.Lock() kpLock.Lock() delete(peers, addrPrev) delete(knownPeers, addrPrev) peers[addr] = ps knownPeers[addr] = &peer - peersById[*peer.Id] = addr + peersByID[*peer.ID] = addr peersLock.Unlock() - peersByIdLock.Unlock() + peersByIDLock.Unlock() kpLock.Unlock() govpn.Printf( `[rehandshake-completed bind="%s" peer="%s"]`, - *bindAddr, peerId.String(), + *bindAddr, peerID.String(), ) } else { - ifaceName, err := callUp(peer.Id, peer.Addr) + ifaceName, err := callUp(peer.ID, peer.Addr) if err != nil { peer = nil break @@ -133,7 +141,7 @@ func handleTCP(conn net.Conn) { if err != nil { govpn.Printf( `[tap-failed bind="%s" peer="%s" err="%s"]`, - *bindAddr, peerId.String(), err, + *bindAddr, peerID.String(), err, ) peer = nil break @@ -145,15 +153,15 @@ func handleTCP(conn net.Conn) { } go govpn.PeerTapProcessor(ps.peer, ps.tap, ps.terminator) peersLock.Lock() - peersByIdLock.Lock() + peersByIDLock.Lock() kpLock.Lock() peers[addr] = ps - peersById[*peer.Id] = addr + peersByID[*peer.ID] = addr knownPeers[addr] = &peer peersLock.Unlock() - peersByIdLock.Unlock() + peersByIDLock.Unlock() kpLock.Unlock() - govpn.Printf(`[peer-created bind="%s" peer="%s"]`, *bindAddr, peerId.String()) + govpn.Printf(`[peer-created bind="%s" peer="%s"]`, *bindAddr, peerID.String()) } break } @@ -188,7 +196,7 @@ func handleTCP(conn net.Conn) { if !peer.PktProcess(buf[:i+govpn.NonceSize], tap, false) { govpn.Printf( `[packet-unauthenticated bind="%s" addr="%s" peer="%s"]`, - *bindAddr, addr, peer.Id.String(), + *bindAddr, addr, peer.ID.String(), ) break }