diff --git a/src/main/java/org/qortal/network/message/GetArbitraryDataFileListMessage.java b/src/main/java/org/qortal/network/message/GetArbitraryDataFileListMessage.java index e19bbb25..af19eec1 100644 --- a/src/main/java/org/qortal/network/message/GetArbitraryDataFileListMessage.java +++ b/src/main/java/org/qortal/network/message/GetArbitraryDataFileListMessage.java @@ -3,11 +3,14 @@ package org.qortal.network.message; import com.google.common.primitives.Ints; import com.google.common.primitives.Longs; import org.qortal.transform.Transformer; +import org.qortal.transform.transaction.TransactionTransformer; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; import static org.qortal.transform.Transformer.INT_LENGTH; import static org.qortal.transform.Transformer.LONG_LENGTH; @@ -15,19 +18,22 @@ import static org.qortal.transform.Transformer.LONG_LENGTH; public class GetArbitraryDataFileListMessage extends Message { private static final int SIGNATURE_LENGTH = Transformer.SIGNATURE_LENGTH; + private static final int HASH_LENGTH = TransactionTransformer.SHA256_LENGTH; private final byte[] signature; + private List hashes; private final long requestTime; private int requestHops; - public GetArbitraryDataFileListMessage(byte[] signature, long requestTime, int requestHops) { - this(-1, signature, requestTime, requestHops); + public GetArbitraryDataFileListMessage(byte[] signature, List hashes, long requestTime, int requestHops) { + this(-1, signature, hashes, requestTime, requestHops); } - private GetArbitraryDataFileListMessage(int id, byte[] signature, long requestTime, int requestHops) { + private GetArbitraryDataFileListMessage(int id, byte[] signature, List hashes, long requestTime, int requestHops) { super(id, MessageType.GET_ARBITRARY_DATA_FILE_LIST); this.signature = signature; + this.hashes = hashes; this.requestTime = requestTime; this.requestHops = requestHops; } @@ -36,10 +42,11 @@ public class GetArbitraryDataFileListMessage extends Message { return this.signature; } - public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException { - if (bytes.remaining() != SIGNATURE_LENGTH + LONG_LENGTH + INT_LENGTH) - return null; + public List getHashes() { + return this.hashes; + } + public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException { byte[] signature = new byte[SIGNATURE_LENGTH]; bytes.get(signature); @@ -48,7 +55,23 @@ public class GetArbitraryDataFileListMessage extends Message { int requestHops = bytes.getInt(); - return new GetArbitraryDataFileListMessage(id, signature, requestTime, requestHops); + List hashes = null; + if (bytes.hasRemaining()) { + int hashCount = bytes.getInt(); + + if (bytes.remaining() != hashCount * HASH_LENGTH) { + return null; + } + + hashes = new ArrayList<>(); + for (int i = 0; i < hashCount; ++i) { + byte[] hash = new byte[HASH_LENGTH]; + bytes.get(hash); + hashes.add(hash); + } + } + + return new GetArbitraryDataFileListMessage(id, signature, hashes, requestTime, requestHops); } @Override @@ -62,6 +85,14 @@ public class GetArbitraryDataFileListMessage extends Message { bytes.write(Ints.toByteArray(this.requestHops)); + if (this.hashes != null) { + bytes.write(Ints.toByteArray(this.hashes.size())); + + for (byte[] hash : this.hashes) { + bytes.write(hash); + } + } + return bytes.toByteArray(); } catch (IOException e) { return null;