mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* [NOD-1313] Refactor AddressManager (#918) * [NOD-1313] Refactor AddressManager. * [NOD-1313]Remove old tests.Minor improvements,fixes. * [NOD-1313] After merge fixes. Fix import cycle. * [NOD-1313] Integration tests fixes. * [NOD-1313] Allocate new slice for the returned key. * [NOD-1313] AddressManager improvements and fixes. * Move local and banned addresses to separate lists. * Move AddressManager config to the separate file. * Add LocalAddressManager. * Remove redundant KnownAddress structure. * Restore local addresses functionality. * Call initListeners from the LocalAddressManager. * AddressManager minor improvements and fixes. * [NOD-1313] Minor fixes. * [NOD-1313] Implement HandleGetPeerAddresses. Refactoring. * [NOD-1313] After-merge fixes. * [NOD-1313] Minor improvements. * AddressManager: added BannedAddresses() method. * AddressManager: HandleGetPeerAddresses() add banned addresses separately. * AddressManager: remove addressEntry redundant struct. * ConnectionManager: checkOutgoingConnections() minor improvements and fixes. * Minor refactoring. * Minor fixes. * [NOD-1313] GetPeerAddresses RPC message update * GetPeerAddresses RPC: add BannedAddresses in the separate field. * Update protobuf. * [NOD-1534] Update messages.pb.go Co-authored-by: Kirill <gammerxpower@gmail.com>
52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
package connmanager
|
|
|
|
import "github.com/kaspanet/kaspad/app/appmessage"
|
|
|
|
// checkOutgoingConnections goes over all activeOutgoing and makes sure they are still active.
|
|
// Then it opens connections so that we have targetOutgoing active connections
|
|
func (c *ConnectionManager) checkOutgoingConnections(connSet connectionSet) {
|
|
for address := range c.activeOutgoing {
|
|
connection, ok := connSet.get(address)
|
|
if ok { // connection is still connected
|
|
connSet.remove(connection)
|
|
continue
|
|
}
|
|
|
|
// if connection is dead - remove from list of active ones
|
|
delete(c.activeOutgoing, address)
|
|
}
|
|
|
|
connections := c.netAdapter.P2PConnections()
|
|
connectedAddresses := make([]*appmessage.NetAddress, len(connections))
|
|
for i, connection := range connections {
|
|
connectedAddresses[i] = connection.NetAddress()
|
|
}
|
|
|
|
liveConnections := len(c.activeOutgoing)
|
|
if c.targetOutgoing == liveConnections {
|
|
return
|
|
}
|
|
|
|
log.Debugf("Have got %d outgoing connections out of target %d, adding %d more",
|
|
liveConnections, c.targetOutgoing, c.targetOutgoing-liveConnections)
|
|
|
|
connectionsNeededCount := c.targetOutgoing - len(c.activeOutgoing)
|
|
netAddresses := c.addressManager.RandomAddresses(connectionsNeededCount, connectedAddresses)
|
|
|
|
for _, netAddress := range netAddresses {
|
|
addressString := netAddress.TCPAddress().String()
|
|
|
|
log.Debugf("Connecting to %s because we have %d outgoing connections and the target is "+
|
|
"%d", addressString, len(c.activeOutgoing), c.targetOutgoing)
|
|
|
|
err := c.initiateConnection(addressString)
|
|
if err != nil {
|
|
log.Infof("Couldn't connect to %s: %s", addressString, err)
|
|
c.addressManager.RemoveAddress(netAddress)
|
|
continue
|
|
}
|
|
|
|
c.activeOutgoing[addressString] = struct{}{}
|
|
}
|
|
}
|