diff --git a/src/main/java/org/qortal/network/Network.java b/src/main/java/org/qortal/network/Network.java index f9e394ef..9114c869 100644 --- a/src/main/java/org/qortal/network/Network.java +++ b/src/main/java/org/qortal/network/Network.java @@ -522,14 +522,24 @@ public class Network { if (socketChannel == null) { return; } + PeerAddress address = PeerAddress.fromSocket(socketChannel.socket()); + List fixedNetwork = Settings.getInstance().getFixedNetwork(); + if (fixedNetwork != null && !fixedNetwork.isEmpty() && ipNotInFixedList(address, fixedNetwork)) { + try { + socketChannel.close(); + LOGGER.debug("Connection discarded from peer {} as not in the fixed network list", address); + } catch (IOException e) { + // IGNORE + } + return; + } final Long now = NTP.getTime(); Peer newPeer; try { if (now == null) { - LOGGER.debug("Connection discarded from peer {} due to lack of NTP sync", - PeerAddress.fromSocket(socketChannel.socket())); + LOGGER.debug("Connection discarded from peer {} due to lack of NTP sync", address); socketChannel.close(); return; } @@ -537,12 +547,12 @@ public class Network { synchronized (this.connectedPeers) { if (connectedPeers.size() >= maxPeers) { // We have enough peers - LOGGER.debug("Connection discarded from peer {}", PeerAddress.fromSocket(socketChannel.socket())); + LOGGER.debug("Connection discarded from peer {}", address); socketChannel.close(); return; } - LOGGER.debug("Connection accepted from peer {}", PeerAddress.fromSocket(socketChannel.socket())); + LOGGER.debug("Connection accepted from peer {}", address); newPeer = new Peer(socketChannel, channelSelector); this.connectedPeers.add(newPeer); @@ -561,6 +571,16 @@ public class Network { this.onPeerReady(newPeer); } + private boolean ipNotInFixedList(PeerAddress address, List fixedNetwork) { + for (String ipAddress : fixedNetwork) { + String[] bits = ipAddress.split(":"); + if (bits.length >= 1 && bits.length <= 2 && address.getHost().equals(bits[0])) { + return false; + } + } + return true; + } + private Peer getConnectablePeer(final Long now) throws InterruptedException { // We can't block here so use tryRepository(). We don't NEED to connect a new peer. try (Repository repository = RepositoryManager.tryRepository()) {