Search in sources :

Example 1 with PeerBanned

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));
        }
    }
}
Also used : InetUtils(com.radixdlt.utils.InetUtils) Inject(com.google.inject.Inject) HashMap(java.util.HashMap) InetAddress(java.net.InetAddress) ImmutableList(com.google.common.collect.ImmutableList) Duration(java.time.Duration) Map(java.util.Map) PeerAddressEntry(com.radixdlt.network.p2p.addressbook.AddressBookEntry.PeerAddressEntry) ImmutableSet(com.google.common.collect.ImmutableSet) ImmutableMap(com.google.common.collect.ImmutableMap) EventDispatcher(com.radixdlt.environment.EventDispatcher) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) RadixNodeUri(com.radixdlt.network.p2p.RadixNodeUri) LatestConnectionStatus(com.radixdlt.network.p2p.addressbook.AddressBookEntry.PeerAddressEntry.LatestConnectionStatus) Instant(java.time.Instant) UnknownHostException(java.net.UnknownHostException) Objects(java.util.Objects) P2PConfig(com.radixdlt.network.p2p.P2PConfig) PeerEvent(com.radixdlt.network.p2p.PeerEvent) PeerBanned(com.radixdlt.network.p2p.PeerEvent.PeerBanned) Stream(java.util.stream.Stream) NodeId(com.radixdlt.network.p2p.NodeId) Self(com.radixdlt.hotstuff.bft.Self) Optional(java.util.Optional) Predicate.not(java.util.function.Predicate.not) Comparator(java.util.Comparator) PeerBanned(com.radixdlt.network.p2p.PeerEvent.PeerBanned)

Aggregations

ImmutableList (com.google.common.collect.ImmutableList)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 ImmutableSet (com.google.common.collect.ImmutableSet)1 Inject (com.google.inject.Inject)1 EventDispatcher (com.radixdlt.environment.EventDispatcher)1 Self (com.radixdlt.hotstuff.bft.Self)1 NodeId (com.radixdlt.network.p2p.NodeId)1 P2PConfig (com.radixdlt.network.p2p.P2PConfig)1 PeerEvent (com.radixdlt.network.p2p.PeerEvent)1 PeerBanned (com.radixdlt.network.p2p.PeerEvent.PeerBanned)1 RadixNodeUri (com.radixdlt.network.p2p.RadixNodeUri)1 PeerAddressEntry (com.radixdlt.network.p2p.addressbook.AddressBookEntry.PeerAddressEntry)1 LatestConnectionStatus (com.radixdlt.network.p2p.addressbook.AddressBookEntry.PeerAddressEntry.LatestConnectionStatus)1 InetUtils (com.radixdlt.utils.InetUtils)1 InetAddress (java.net.InetAddress)1 UnknownHostException (java.net.UnknownHostException)1 Duration (java.time.Duration)1 Instant (java.time.Instant)1 Comparator (java.util.Comparator)1 HashMap (java.util.HashMap)1