diff --git a/core/src/main/java/org/bitcoinj/core/BitcoinSerializer.java b/core/src/main/java/org/bitcoinj/core/BitcoinSerializer.java index 72f10cbc140..542fda65eb5 100644 --- a/core/src/main/java/org/bitcoinj/core/BitcoinSerializer.java +++ b/core/src/main/java/org/bitcoinj/core/BitcoinSerializer.java @@ -229,6 +229,8 @@ private Message makeMessage(String command, int length, byte[] payloadBytes, byt return new UTXOsMessage(params, payloadBytes); } else if (command.equals("getutxos")) { return new GetUTXOsMessage(params, payloadBytes); + } else if(params.allowMoreMessages()) { + return new IgnoreThisMessage(params); } else { log.warn("No support for deserializing message with name {}", command); return new UnknownMessage(params, command, payloadBytes); diff --git a/core/src/main/java/org/bitcoinj/core/IgnoreThisMessage.java b/core/src/main/java/org/bitcoinj/core/IgnoreThisMessage.java new file mode 100644 index 00000000000..7d66213f5a0 --- /dev/null +++ b/core/src/main/java/org/bitcoinj/core/IgnoreThisMessage.java @@ -0,0 +1,15 @@ +package org.bitcoinj.core; + +/** + * Created by Hash Engineering on 6/26/2017. + * + * This is a wrapper to allow a message to be ignored that bitcoinj + * will not process. This will prevent the peer from being rejected. + */ +public class IgnoreThisMessage extends EmptyMessage { + + public IgnoreThisMessage(NetworkParameters params) { + super(params); + length = 0; + } +} diff --git a/core/src/main/java/org/bitcoinj/core/ListMessage.java b/core/src/main/java/org/bitcoinj/core/ListMessage.java index 0a7dafe8037..1bf21f703bb 100644 --- a/core/src/main/java/org/bitcoinj/core/ListMessage.java +++ b/core/src/main/java/org/bitcoinj/core/ListMessage.java @@ -17,6 +17,9 @@ package org.bitcoinj.core; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; @@ -30,6 +33,7 @@ */ public abstract class ListMessage extends Message { + private static final Logger log = LoggerFactory.getLogger(PeerGroup.class); private long arrayLen; // For some reason the compiler complains if this is inside InventoryItem protected List items; @@ -99,7 +103,13 @@ protected void parse() throws ProtocolException { type = InventoryItem.Type.FilteredBlock; break; default: - throw new ProtocolException("Unknown CInv type: " + typeCode); + // + // Allow other inventory types for some coins. + // + if (!params.allowMoreInventoryTypes()) + throw new ProtocolException("Unknown CInv type: " + typeCode); + //log.info("Unknown CInv type: " + typeCode); + continue; } InventoryItem item = new InventoryItem(type, readHash()); items.add(item); diff --git a/core/src/main/java/org/bitcoinj/core/NetworkParameters.java b/core/src/main/java/org/bitcoinj/core/NetworkParameters.java index 0e51278f33a..f25b84fd1d2 100644 --- a/core/src/main/java/org/bitcoinj/core/NetworkParameters.java +++ b/core/src/main/java/org/bitcoinj/core/NetworkParameters.java @@ -539,4 +539,7 @@ public int getBitcoinProtocolVersion() { return bitcoinProtocol; } } + + public boolean allowMoreInventoryTypes() { return false; } + public boolean allowMoreMessages() { return false;} }