import (
"bytes"
- "encoding/binary"
"log"
"net"
"time"
break
}
prev += n
- peerId := govpn.IDsCache.Find(buf[:prev])
+ peerId := idsCache.Find(buf[:prev])
if peerId == nil {
continue
}
if hs == nil {
- conf = peerId.Conf()
+ conf = confs[*peerId]
if conf == nil {
log.Println("Can not get peer configuration:", peerId.String())
break
addrPrev, exists := peersById[*peer.Id]
peersByIdLock.RUnlock()
if exists {
- peersLock.RLock()
+ peersLock.Lock()
+ peers[addrPrev].terminator <- struct{}{}
tap = peers[addrPrev].tap
ps = &PeerState{
peer: peer,
tap: tap,
- terminator: peers[addrPrev].terminator,
+ terminator: make(chan struct{}),
}
- peersLock.RUnlock()
- ps.terminator <- struct{}{}
- peersLock.Lock()
+ go peerReady(*ps)
peersByIdLock.Lock()
kpLock.Lock()
delete(peers, addrPrev)
delete(knownPeers, addrPrev)
- delete(peersById, *peer.Id)
peers[addr] = ps
knownPeers[addr] = &peer
peersById[*peer.Id] = addr
peersLock.Unlock()
peersByIdLock.Unlock()
kpLock.Unlock()
- go peerReady(*ps)
log.Println("Rehandshake processed:", peer.Id.String())
} else {
ifaceName, err := callUp(peer.Id)
}
nonceExpectation := make([]byte, govpn.NonceSize)
- binary.BigEndian.PutUint64(nonceExpectation, peer.NonceExpect)
- peer.NonceCipher.Encrypt(nonceExpectation, nonceExpectation)
+ peer.NonceExpectation(nonceExpectation)
prev = 0
var i int
for {
)
break
}
- binary.BigEndian.PutUint64(nonceExpectation, peer.NonceExpect)
- peer.NonceCipher.Encrypt(nonceExpectation, nonceExpectation)
+ peer.NonceExpectation(nonceExpectation)
copy(buf, buf[i+govpn.NonceSize:prev])
prev = prev - i - govpn.NonceSize
goto CheckMore