forked from Qortal/qortal
Add support for v1-protocol BLOCK message
This commit is contained in:
parent
84e812484b
commit
ea3528015a
@ -670,6 +670,47 @@ public class Controller extends Thread {
|
|||||||
LOGGER.trace(() -> String.format("Processing %s message from %s", message.getType().name(), peer));
|
LOGGER.trace(() -> String.format("Processing %s message from %s", message.getType().name(), peer));
|
||||||
|
|
||||||
switch (message.getType()) {
|
switch (message.getType()) {
|
||||||
|
case BLOCK: {
|
||||||
|
// From a v1 peer, with no message ID, this is a broadcast of peer's latest block
|
||||||
|
|
||||||
|
// Not version 1?
|
||||||
|
if (peer.getVersion() == null || peer.getVersion() > 1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Message ID present?
|
||||||
|
if (message.hasId())
|
||||||
|
break;
|
||||||
|
|
||||||
|
BlockMessage blockMessage = (BlockMessage) message;
|
||||||
|
BlockData blockData = blockMessage.getBlockData();
|
||||||
|
|
||||||
|
// Update all peers with same ID
|
||||||
|
|
||||||
|
List<Peer> connectedPeers = Network.getInstance().getHandshakedPeers();
|
||||||
|
for (Peer connectedPeer : connectedPeers) {
|
||||||
|
// Skip connectedPeer if they have no ID or their ID doesn't match sender's ID
|
||||||
|
if (connectedPeer.getPeerId() == null || !Arrays.equals(connectedPeer.getPeerId(), peer.getPeerId()))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// We want to update atomically so use lock
|
||||||
|
ReentrantLock peerLock = connectedPeer.getPeerDataLock();
|
||||||
|
peerLock.lock();
|
||||||
|
try {
|
||||||
|
connectedPeer.setLastHeight(blockData.getHeight());
|
||||||
|
connectedPeer.setLastBlockSignature(blockData.getSignature());
|
||||||
|
connectedPeer.setLastBlockTimestamp(blockData.getTimestamp());
|
||||||
|
connectedPeer.setLastBlockGenerator(blockData.getGeneratorPublicKey());
|
||||||
|
} finally {
|
||||||
|
peerLock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Potentially synchronize
|
||||||
|
requestSync = true;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case HEIGHT: {
|
case HEIGHT: {
|
||||||
HeightMessage heightMessage = (HeightMessage) message;
|
HeightMessage heightMessage = (HeightMessage) message;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user