use of com.radixdlt.network.p2p.PeerEvent.PeerBanned in project radixdlt by radixdlt.
the class AddressBook method banPeer.
void banPeer(NodeId nodeId, Duration banDuration) {
synchronized (lock) {
final var banUntil = Instant.now().plus(banDuration);
final var maybeExistingEntry = findById(nodeId);
if (maybeExistingEntry.isPresent()) {
final var existingEntry = maybeExistingEntry.get();
final var alreadyBanned = existingEntry.bannedUntil().filter(bu -> bu.isAfter(banUntil)).isPresent();
if (!alreadyBanned) {
final var updatedEntry = existingEntry.cleanupExpiredBlacklsitedUris().withBanUntil(banUntil);
this.knownPeers.put(nodeId, updatedEntry);
this.persistEntry(updatedEntry);
this.peerEventDispatcher.dispatch(new PeerBanned(nodeId));
}
} else {
final var newEntry = AddressBookEntry.createBanned(nodeId, banUntil);
this.knownPeers.put(nodeId, newEntry);
this.persistEntry(newEntry);
this.peerEventDispatcher.dispatch(new PeerBanned(nodeId));
}
}
}
Aggregations