forked from Qortal/qortal
Dropped support of ARBITRARY_SIGNATURES message handling, as this feature has been superseded by the peerAddress in file list requests.
This commit is contained in:
parent
6f0a0ef324
commit
5d7e5e8e59
@ -1169,7 +1169,7 @@ public class Controller extends Thread {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ARBITRARY_SIGNATURES:
|
case ARBITRARY_SIGNATURES:
|
||||||
ArbitraryDataManager.getInstance().onNetworkArbitrarySignaturesMessage(peer, message);
|
// Not currently supported
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GET_ARBITRARY_METADATA:
|
case GET_ARBITRARY_METADATA:
|
||||||
|
@ -531,76 +531,6 @@ public class ArbitraryDataManager extends Thread {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Handle incoming arbitrary signatures messages
|
|
||||||
|
|
||||||
public void onNetworkArbitrarySignaturesMessage(Peer peer, Message message) {
|
|
||||||
// Don't process if QDN is disabled
|
|
||||||
if (!Settings.getInstance().isQdnEnabled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGGER.debug("Received arbitrary signature list from peer {}", peer);
|
|
||||||
|
|
||||||
ArbitrarySignaturesMessage arbitrarySignaturesMessage = (ArbitrarySignaturesMessage) message;
|
|
||||||
List<byte[]> signatures = arbitrarySignaturesMessage.getSignatures();
|
|
||||||
|
|
||||||
String peerAddress = peer.getPeerData().getAddress().toString();
|
|
||||||
if (arbitrarySignaturesMessage.getPeerAddress() != null && !arbitrarySignaturesMessage.getPeerAddress().isEmpty()) {
|
|
||||||
// This message is about a different peer than the one that sent it
|
|
||||||
peerAddress = arbitrarySignaturesMessage.getPeerAddress();
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean containsNewEntry = false;
|
|
||||||
|
|
||||||
// Synchronize peer data lookups to make this process thread safe. Otherwise we could broadcast
|
|
||||||
// the same data multiple times, due to more than one thread processing the same message from different peers
|
|
||||||
synchronized (this.peerDataLock) {
|
|
||||||
try (final Repository repository = RepositoryManager.getRepository()) {
|
|
||||||
for (byte[] signature : signatures) {
|
|
||||||
|
|
||||||
// Check if a record already exists for this hash/host combination
|
|
||||||
// The port is not checked here - only the host/ip - in order to avoid duplicates
|
|
||||||
// from filling up the db due to dynamic/ephemeral ports
|
|
||||||
ArbitraryPeerData existingEntry = repository.getArbitraryRepository()
|
|
||||||
.getArbitraryPeerDataForSignatureAndHost(signature, peer.getPeerData().getAddress().getHost());
|
|
||||||
|
|
||||||
if (existingEntry == null) {
|
|
||||||
// We haven't got a record of this mapping yet, so add it
|
|
||||||
ArbitraryPeerData arbitraryPeerData = new ArbitraryPeerData(signature, peerAddress);
|
|
||||||
repository.discardChanges();
|
|
||||||
if (arbitraryPeerData.isPeerAddressValid()) {
|
|
||||||
LOGGER.debug("Adding arbitrary peer: {} for signature {}", peerAddress, Base58.encode(signature));
|
|
||||||
repository.getArbitraryRepository().save(arbitraryPeerData);
|
|
||||||
repository.saveChanges();
|
|
||||||
|
|
||||||
// Remember that this data is new, so that it can be rebroadcast later
|
|
||||||
containsNewEntry = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If at least one signature in this batch was new to us, we should rebroadcast the message to the
|
|
||||||
// network in case some peers haven't received it yet
|
|
||||||
if (containsNewEntry) {
|
|
||||||
int requestHops = arbitrarySignaturesMessage.getRequestHops();
|
|
||||||
arbitrarySignaturesMessage.setRequestHops(++requestHops);
|
|
||||||
if (requestHops < ARBITRARY_SIGNATURES_REQUEST_MAX_HOPS) {
|
|
||||||
LOGGER.debug("Rebroadcasting arbitrary signature list for peer {}. requestHops: {}", peerAddress, requestHops);
|
|
||||||
Network.getInstance().broadcast(broadcastPeer -> broadcastPeer == peer ? null : arbitrarySignaturesMessage);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Don't rebroadcast as otherwise we could get into a loop
|
|
||||||
}
|
|
||||||
|
|
||||||
// If anything needed saving, it would already have called saveChanges() above
|
|
||||||
repository.discardChanges();
|
|
||||||
} catch (DataException e) {
|
|
||||||
LOGGER.error(String.format("Repository issue while processing arbitrary transaction signature list from peer %s", peer), e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public int getPowDifficulty() {
|
public int getPowDifficulty() {
|
||||||
return this.powDifficulty;
|
return this.powDifficulty;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user