mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-23 07:16:47 +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>
44 lines
1.1 KiB
Go
44 lines
1.1 KiB
Go
package addressmanager
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
|
|
"github.com/kaspanet/kaspad/app/appmessage"
|
|
)
|
|
|
|
// AddressRandomize implement AddressRandomizer interface
|
|
type AddressRandomize struct {
|
|
random *rand.Rand
|
|
}
|
|
|
|
// NewAddressRandomize returns a new RandomizeAddress.
|
|
func NewAddressRandomize() *AddressRandomize {
|
|
return &AddressRandomize{
|
|
random: rand.New(rand.NewSource(time.Now().UnixNano())),
|
|
}
|
|
}
|
|
|
|
// RandomAddress returns a random address from input list
|
|
func (amc *AddressRandomize) RandomAddress(addresses []*appmessage.NetAddress) *appmessage.NetAddress {
|
|
if len(addresses) > 0 {
|
|
randomIndex := rand.Intn(len(addresses))
|
|
return addresses[randomIndex]
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// RandomAddresses returns count addresses at random from input list
|
|
func (amc *AddressRandomize) RandomAddresses(addresses []*appmessage.NetAddress, count int) []*appmessage.NetAddress {
|
|
result := make([]*appmessage.NetAddress, 0, count)
|
|
if len(addresses) > 0 {
|
|
randomIndexes := rand.Perm(len(addresses))
|
|
for i := 0; i < count; i++ {
|
|
result = append(result, addresses[randomIndexes[i]])
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|