Filter out on demand connections when using fixed network

This commit is contained in:
Istvan Szabo 2021-05-28 14:37:28 +01:00
parent 58a7203ede
commit 9027cd290c

View File

@ -522,14 +522,24 @@ public class Network {
if (socketChannel == null) { if (socketChannel == null) {
return; return;
} }
PeerAddress address = PeerAddress.fromSocket(socketChannel.socket());
List<String> 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(); final Long now = NTP.getTime();
Peer newPeer; Peer newPeer;
try { try {
if (now == null) { if (now == null) {
LOGGER.debug("Connection discarded from peer {} due to lack of NTP sync", LOGGER.debug("Connection discarded from peer {} due to lack of NTP sync", address);
PeerAddress.fromSocket(socketChannel.socket()));
socketChannel.close(); socketChannel.close();
return; return;
} }
@ -537,12 +547,12 @@ public class Network {
synchronized (this.connectedPeers) { synchronized (this.connectedPeers) {
if (connectedPeers.size() >= maxPeers) { if (connectedPeers.size() >= maxPeers) {
// We have enough peers // We have enough peers
LOGGER.debug("Connection discarded from peer {}", PeerAddress.fromSocket(socketChannel.socket())); LOGGER.debug("Connection discarded from peer {}", address);
socketChannel.close(); socketChannel.close();
return; return;
} }
LOGGER.debug("Connection accepted from peer {}", PeerAddress.fromSocket(socketChannel.socket())); LOGGER.debug("Connection accepted from peer {}", address);
newPeer = new Peer(socketChannel, channelSelector); newPeer = new Peer(socketChannel, channelSelector);
this.connectedPeers.add(newPeer); this.connectedPeers.add(newPeer);
@ -561,6 +571,16 @@ public class Network {
this.onPeerReady(newPeer); this.onPeerReady(newPeer);
} }
private boolean ipNotInFixedList(PeerAddress address, List<String> 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 { 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. // We can't block here so use tryRepository(). We don't NEED to connect a new peer.
try (Repository repository = RepositoryManager.tryRepository()) { try (Repository repository = RepositoryManager.tryRepository()) {