/** * Returns all peers that are not locked. * @return */ public synchronized List<Destination> getAllUnlockedPeers() { List<Destination> allPeers = new ArrayList<Destination>(); for (KBucket bucket: kBuckets) for (KademliaPeer peer: bucket.getPeers()) if (!peer.isLocked()) allPeers.add(peer); for (KademliaPeer peer: sBucket.getPeers()) if (!peer.isLocked()) allPeers.add(peer); return allPeers; }
/** * Adds a peer to the tail of the bucket if it is locked, or to the * head of the bucket if it isn't locked. * The bucket cannot be full when calling this method. * @param peer */ private void add(KademliaPeer peer) { if (isFull()) log.error("Error: adding a node to a full k-bucket. Bucket needs to be split first. Size=" + size() + ", capacity=" + capacity); if (peer.isLocked()) peers.add(peer); else peers.add(0, peer); }
private void addPeerData(DhtPeerStatsRenderer renderer, AbstractBucket bucket, Hash localDestinationHash) { for (KademliaPeer peer: bucket) { BigInteger distance = KademliaUtil.getDistance(localDestinationHash, peer.calculateHash()); data.add(new KademliaPeerStatsRow( renderer, data.size() + 1, peer, getBucketPrefix(renderer, bucket), distance, peer.isLocked(), peer.getConsecTimeouts(), peer.getFirstSeen() )); } }