Ori Newman 669a9ab4c3
Ban by IP (#1471)
* Ban by IP

* Fix panic

* Fix error format

* Remove failed addresses

Co-authored-by: stasatdaglabs <39559713+stasatdaglabs@users.noreply.github.com>
2021-02-01 10:51:18 +02:00

47 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 {
if len(addresses) < count {
count = len(addresses)
}
result := make([]*appmessage.NetAddress, 0, count)
randomIndexes := rand.Perm(len(addresses))
for i := 0; i < count; i++ {
result = append(result, addresses[randomIndexes[i]])
}
return result
}