mirror of https://github.com/poanetwork/gecko.git
wip
This commit is contained in:
parent
6bcedf1d64
commit
3c9187fc7b
|
@ -187,18 +187,26 @@ func (nm *Handshake) Initialize(
|
||||||
net.RegHandler(PeerList, salticidae.MsgNetworkMsgCallback(C.peerList), nil)
|
net.RegHandler(PeerList, salticidae.MsgNetworkMsgCallback(C.peerList), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConnectTo add the peer as a connection and connects to them. Will free peer
|
// ConnectTo add the peer as a connection and connects to them.
|
||||||
func (nm *Handshake) ConnectTo(peer salticidae.PeerID, addr salticidae.NetAddr) {
|
func (nm *Handshake) ConnectTo(peer salticidae.PeerID, stakerID ids.ShortID, addr salticidae.NetAddr) {
|
||||||
if !nm.pending.ContainsPeerID(peer) && !nm.connections.ContainsPeerID(peer) {
|
if nm.pending.ContainsPeerID(peer) || nm.connections.ContainsPeerID(peer) {
|
||||||
HandshakeNet.net.AddPeer(peer)
|
return
|
||||||
HandshakeNet.net.SetPeerAddr(peer, addr)
|
|
||||||
HandshakeNet.net.ConnPeer(peer, 600, 1)
|
|
||||||
|
|
||||||
// TODO: Should add the peer to the pending set, register a timeout to
|
|
||||||
// remove the peer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
peer.Free()
|
nm.net.AddPeer(peer)
|
||||||
|
nm.net.SetPeerAddr(peer, addr)
|
||||||
|
nm.net.ConnPeer(peer, 600, 1)
|
||||||
|
|
||||||
|
ip := toIPDesc(addr)
|
||||||
|
nm.pending.Add(peer, stakerID, ip)
|
||||||
|
|
||||||
|
peerBytes := toID(peer)
|
||||||
|
peerID := ids.NewID(peerBytes)
|
||||||
|
|
||||||
|
nm.reconnectTimeout.Put(peerID, func() {
|
||||||
|
nm.pending.Remove(peer, stakerID)
|
||||||
|
nm.net.DelPeer(peer)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Connect ...
|
// Connect ...
|
||||||
|
@ -211,19 +219,37 @@ func (nm *Handshake) Connect(addr salticidae.NetAddr) {
|
||||||
|
|
||||||
nm.log.Debug("Adding peer %s", ip)
|
nm.log.Debug("Adding peer %s", ip)
|
||||||
|
|
||||||
//TODO:
|
|
||||||
|
|
||||||
if !nm.enableStaking {
|
if !nm.enableStaking {
|
||||||
peer := salticidae.NewPeerIDFromNetAddr(addr, false)
|
peer := salticidae.NewPeerIDFromNetAddr(addr, true)
|
||||||
nm.ConnectTo(peer, addr)
|
nm.ConnectTo(peer, addr)
|
||||||
} else {
|
return
|
||||||
nm.requestedConnections[ipStr] = struct{}{}
|
}
|
||||||
|
|
||||||
|
count := new(int)
|
||||||
|
*count = 600
|
||||||
|
handler := new(func())
|
||||||
|
*handler = func() {
|
||||||
|
nm.requestedLock.Lock()
|
||||||
|
defer nm.requestedLock.Unlock()
|
||||||
|
|
||||||
|
if *count <= 0 {
|
||||||
|
delete(nm.requested, ipStr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
*count--
|
||||||
|
|
||||||
|
if nm.pending.ContainsIP(ip) || nm.connections.ContainsIP(ip) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
nm.log.Verbo("Attempting to discover peer at %s", ipStr)
|
nm.log.Verbo("Attempting to discover peer at %s", ipStr)
|
||||||
|
|
||||||
|
nm.requested[ipStr] = struct{}{}
|
||||||
|
|
||||||
msgNet := nm.net.AsMsgNetwork()
|
msgNet := nm.net.AsMsgNetwork()
|
||||||
msgNet.Connect(addr)
|
msgNet.Connect(addr)
|
||||||
}
|
}
|
||||||
|
(*handler)()
|
||||||
}
|
}
|
||||||
|
|
||||||
// AwaitConnections ...
|
// AwaitConnections ...
|
||||||
|
@ -383,7 +409,8 @@ func connHandler(_conn *C.struct_msgnetwork_conn_t, connected C.bool, _ unsafe.P
|
||||||
delete(HandshakeNet.requestedConnections, ipStr)
|
delete(HandshakeNet.requestedConnections, ipStr)
|
||||||
|
|
||||||
cert := conn.GetPeerCert()
|
cert := conn.GetPeerCert()
|
||||||
peer := salticidae.NewPeerIDFromX509(cert, false)
|
peer := salticidae.NewPeerIDFromX509(cert, true)
|
||||||
|
|
||||||
HandshakeNet.ConnectTo(peer, addr)
|
HandshakeNet.ConnectTo(peer, addr)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue