more intelligent handling of ip whitelist check

This commit is contained in:
vyzo 2021-02-12 20:16:19 +02:00
parent 69868db8cf
commit 6c1addf493

View File

@ -27,6 +27,9 @@ type peerStats struct {
// IP tracking; store as string for easy processing
ips []string
// IP whitelisting cache
ipWhitelist map[string]bool
// behavioural pattern penalties (applied by the router)
behaviourPenalty float64
}
@ -339,11 +342,25 @@ func (ps *peerScore) ipColocationFactor(p peer.ID) float64 {
loop:
for _, ip := range pstats.ips {
if len(ps.params.IPColocationFactorWhitelist) > 0 {
ipObj := net.ParseIP(ip)
for _, ipNet := range ps.params.IPColocationFactorWhitelist {
if ipNet.Contains(ipObj) {
continue loop
if pstats.ipWhitelist == nil {
pstats.ipWhitelist = make(map[string]bool)
}
whitelisted, ok := pstats.ipWhitelist[ip]
if !ok {
ipObj := net.ParseIP(ip)
for _, ipNet := range ps.params.IPColocationFactorWhitelist {
if ipNet.Contains(ipObj) {
pstats.ipWhitelist[ip] = true
continue loop
}
}
pstats.ipWhitelist[ip] = false
}
if whitelisted {
continue loop
}
}