forked from Qortal/qortal
Merge branch 'networking' into v2.0-beta
# Conflicts: # src/main/java/org/qortal/settings/Settings.java
This commit is contained in:
commit
33b715eb4e
@ -155,9 +155,23 @@ public class Network {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Load all known peers from repository
|
// Load all known peers from repository
|
||||||
try (Repository repository = RepositoryManager.getRepository()) {
|
synchronized (this.allKnownPeers) { List<String> fixedNetwork = Settings.getInstance().getFixedNetwork();
|
||||||
synchronized (this.allKnownPeers) {
|
if (fixedNetwork != null && !fixedNetwork.isEmpty()) {
|
||||||
this.allKnownPeers.addAll(repository.getNetworkRepository().getAllPeers());
|
Long addedWhen = NTP.getTime();
|
||||||
|
String addedBy = "fixedNetwork";
|
||||||
|
List<PeerAddress> peerAddresses = new ArrayList<>();
|
||||||
|
for (String address : fixedNetwork) {
|
||||||
|
PeerAddress peerAddress = PeerAddress.fromString(address);
|
||||||
|
peerAddresses.add(peerAddress);
|
||||||
|
}
|
||||||
|
List<PeerData> peers = peerAddresses.stream()
|
||||||
|
.map(peerAddress -> new PeerData(peerAddress, addedWhen, addedBy))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
this.allKnownPeers.addAll(peers);
|
||||||
|
} else {
|
||||||
|
try (Repository repository = RepositoryManager.getRepository()) {
|
||||||
|
this.allKnownPeers.addAll(repository.getNetworkRepository().getAllPeers());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -513,14 +527,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 {
|
||||||
|
LOGGER.debug("Connection discarded from peer {} as not in the fixed network list", address);
|
||||||
|
socketChannel.close();
|
||||||
|
} 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;
|
||||||
}
|
}
|
||||||
@ -528,12 +552,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 {} because the server is full", 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);
|
||||||
@ -541,6 +565,7 @@ public class Network {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (socketChannel.isOpen()) {
|
if (socketChannel.isOpen()) {
|
||||||
try {
|
try {
|
||||||
|
LOGGER.debug("Connection failed from peer {} while connecting/closing", address);
|
||||||
socketChannel.close();
|
socketChannel.close();
|
||||||
} catch (IOException ce) {
|
} catch (IOException ce) {
|
||||||
// Couldn't close?
|
// Couldn't close?
|
||||||
@ -552,6 +577,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()) {
|
||||||
@ -1145,6 +1180,10 @@ public class Network {
|
|||||||
|
|
||||||
private boolean mergePeers(Repository repository, String addedBy, long addedWhen, List<PeerAddress> peerAddresses)
|
private boolean mergePeers(Repository repository, String addedBy, long addedWhen, List<PeerAddress> peerAddresses)
|
||||||
throws DataException {
|
throws DataException {
|
||||||
|
List<String> fixedNetwork = Settings.getInstance().getFixedNetwork();
|
||||||
|
if (fixedNetwork != null && !fixedNetwork.isEmpty()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
List<PeerData> newPeers;
|
List<PeerData> newPeers;
|
||||||
synchronized (this.allKnownPeers) {
|
synchronized (this.allKnownPeers) {
|
||||||
for (PeerData knownPeerData : this.allKnownPeers) {
|
for (PeerData knownPeerData : this.allKnownPeers) {
|
||||||
|
@ -5,6 +5,7 @@ import java.io.FileNotFoundException;
|
|||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
@ -193,6 +194,7 @@ public class Settings {
|
|||||||
private String repositoryPath = "db";
|
private String repositoryPath = "db";
|
||||||
/** Repository connection pool size. Needs to be a bit bigger than maxNetworkThreadPoolSize */
|
/** Repository connection pool size. Needs to be a bit bigger than maxNetworkThreadPoolSize */
|
||||||
private int repositoryConnectionPoolSize = 100;
|
private int repositoryConnectionPoolSize = 100;
|
||||||
|
private List<String> fixedNetwork;
|
||||||
|
|
||||||
// Export/import
|
// Export/import
|
||||||
private String exportPath = "qortal-backup";
|
private String exportPath = "qortal-backup";
|
||||||
@ -584,6 +586,10 @@ public class Settings {
|
|||||||
return this.showCheckpointNotification;
|
return this.showCheckpointNotification;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String> getFixedNetwork() {
|
||||||
|
return fixedNetwork;
|
||||||
|
}
|
||||||
|
|
||||||
public long getAtStatesMaxLifetime() {
|
public long getAtStatesMaxLifetime() {
|
||||||
return this.atStatesMaxLifetime;
|
return this.atStatesMaxLifetime;
|
||||||
}
|
}
|
||||||
@ -608,7 +614,6 @@ public class Settings {
|
|||||||
return this.onlineSignaturesTrimBatchSize;
|
return this.onlineSignaturesTrimBatchSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean isTopOnly() {
|
public boolean isTopOnly() {
|
||||||
return this.topOnly;
|
return this.topOnly;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user