mirror of
https://github.com/Qortal/qortal.git
synced 2025-06-08 01:06:59 +00:00
Loop through all available direct peer connections and try each one in turn.
Also added some extra conditionals to avoid repeated attempts with the same port.
This commit is contained in:
parent
76b8ba91dd
commit
c185d79672
@ -317,10 +317,19 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
public boolean fetchDataFilesFromPeersForSignature(byte[] signature) {
|
public boolean fetchDataFilesFromPeersForSignature(byte[] signature) {
|
||||||
String signature58 = Base58.encode(signature);
|
String signature58 = Base58.encode(signature);
|
||||||
|
|
||||||
|
boolean success = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
while (!success) {
|
||||||
|
if (isStopping) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Thread.sleep(500L);
|
||||||
|
|
||||||
// Firstly fetch peers that claim to be hosting files for this signature
|
// Firstly fetch peers that claim to be hosting files for this signature
|
||||||
List<ArbitraryDirectConnectionInfo> connectionInfoList = getDirectConnectionInfoForSignature(signature);
|
List<ArbitraryDirectConnectionInfo> connectionInfoList = getDirectConnectionInfoForSignature(signature);
|
||||||
if (connectionInfoList == null || connectionInfoList.isEmpty()) {
|
if (connectionInfoList == null || connectionInfoList.isEmpty()) {
|
||||||
LOGGER.debug("No direct connection peers found for signature {}", signature58);
|
LOGGER.debug("No remaining direct connection peers found for signature {}", signature58);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +349,6 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
removeDirectConnectionInfo(directConnectionInfo);
|
removeDirectConnectionInfo(directConnectionInfo);
|
||||||
|
|
||||||
String peerAddressString = directConnectionInfo.getPeerAddress();
|
String peerAddressString = directConnectionInfo.getPeerAddress();
|
||||||
boolean success = Network.getInstance().requestDataFromPeer(peerAddressString, signature);
|
|
||||||
|
|
||||||
// Parse the peer address to find the host and port
|
// Parse the peer address to find the host and port
|
||||||
String host = null;
|
String host = null;
|
||||||
@ -349,18 +357,23 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
if (parts.length > 1) {
|
if (parts.length > 1) {
|
||||||
host = parts[0];
|
host = parts[0];
|
||||||
port = Integer.parseInt(parts[1]);
|
port = Integer.parseInt(parts[1]);
|
||||||
}
|
} else {
|
||||||
else {
|
// Assume no port included
|
||||||
|
host = peerAddressString;
|
||||||
// Use default listen port
|
// Use default listen port
|
||||||
port = Settings.getInstance().getDefaultListenPort();
|
port = Settings.getInstance().getDefaultListenPort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String peerAddressStringWithPort = String.format("%s:%d", host, port);
|
||||||
|
success = Network.getInstance().requestDataFromPeer(peerAddressStringWithPort, signature);
|
||||||
|
|
||||||
|
int defaultPort = Settings.getInstance().getDefaultListenPort();
|
||||||
|
|
||||||
// If unsuccessful, and using a non-standard port, try a second connection with the default listen port,
|
// If unsuccessful, and using a non-standard port, try a second connection with the default listen port,
|
||||||
// since almost all nodes use that. This is a workaround to account for any ephemeral ports that may
|
// since almost all nodes use that. This is a workaround to account for any ephemeral ports that may
|
||||||
// have made it into the dataset.
|
// have made it into the dataset.
|
||||||
if (!success) {
|
if (!success) {
|
||||||
if (host != null && port > 0) {
|
if (host != null && port > 0) {
|
||||||
int defaultPort = Settings.getInstance().getDefaultListenPort();
|
|
||||||
if (port != defaultPort) {
|
if (port != defaultPort) {
|
||||||
String newPeerAddressString = String.format("%s:%d", host, defaultPort);
|
String newPeerAddressString = String.format("%s:%d", host, defaultPort);
|
||||||
success = Network.getInstance().requestDataFromPeer(newPeerAddressString, signature);
|
success = Network.getInstance().requestDataFromPeer(newPeerAddressString, signature);
|
||||||
@ -379,6 +392,9 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
// Loop through each match and attempt a connection
|
// Loop through each match and attempt a connection
|
||||||
for (PeerData matchingPeer : knownPeers) {
|
for (PeerData matchingPeer : knownPeers) {
|
||||||
String matchingPeerAddress = matchingPeer.getAddress().toString();
|
String matchingPeerAddress = matchingPeer.getAddress().toString();
|
||||||
|
int matchingPeerPort = matchingPeer.getAddress().getPort();
|
||||||
|
// Make sure that it's not a port we've already tried
|
||||||
|
if (matchingPeerPort != port && matchingPeerPort != defaultPort) {
|
||||||
success = Network.getInstance().requestDataFromPeer(matchingPeerAddress, signature);
|
success = Network.getInstance().requestDataFromPeer(matchingPeerAddress, signature);
|
||||||
if (success) {
|
if (success) {
|
||||||
// Successfully connected, so stop making connections
|
// Successfully connected, so stop making connections
|
||||||
@ -387,12 +403,18 @@ public class ArbitraryDataFileManager extends Thread {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
// We were able to connect with a peer, so track the request
|
// We were able to connect with a peer, so track the request
|
||||||
ArbitraryDataFileListManager.getInstance().addToSignatureRequests(signature58, false, true);
|
ArbitraryDataFileListManager.getInstance().addToSignatureRequests(signature58, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user