diff --git a/src/main/java/org/qortal/network/message/DataFileMessage.java b/src/main/java/org/qortal/network/message/DataFileMessage.java new file mode 100644 index 00000000..6ea7e05c --- /dev/null +++ b/src/main/java/org/qortal/network/message/DataFileMessage.java @@ -0,0 +1,44 @@ +package org.qortal.network.message; + +import org.qortal.storage.DataFile; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +public class DataFileMessage extends Message { + + private final DataFile dataFile; + + public DataFileMessage(DataFile dataFile) { + super(MessageType.DATA_FILE); + + this.dataFile = dataFile; + } + + public DataFile getDataFile() { + return this.dataFile; + } + + public static Message fromByteBuffer(int id, ByteBuffer byteBuffer) throws UnsupportedEncodingException { + byte[] bytes = new byte[byteBuffer.remaining()]; + byteBuffer.get(bytes); + DataFile dataFile = new DataFile(bytes); + + return new DataFileMessage(dataFile); + } + + @Override + protected byte[] toData() { + if (this.dataFile == null) + return null; + + return this.dataFile.getBytes(); + } + + public DataFileMessage cloneWithNewId(int newId) { + DataFileMessage clone = new DataFileMessage(this.dataFile); + clone.setId(newId); + return clone; + } + +} diff --git a/src/main/java/org/qortal/network/message/GetDataFileMessage.java b/src/main/java/org/qortal/network/message/GetDataFileMessage.java new file mode 100644 index 00000000..d4171b42 --- /dev/null +++ b/src/main/java/org/qortal/network/message/GetDataFileMessage.java @@ -0,0 +1,52 @@ +package org.qortal.network.message; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; + +public class GetDataFileMessage extends Message { + + private static final int DIGEST_LENGTH = 32; + + private final byte[] digest; + + public GetDataFileMessage(byte[] digest) { + this(-1, digest); + } + + private GetDataFileMessage(int id, byte[] digest) { + super(id, MessageType.GET_DATA_FILE); + + this.digest = digest; + } + + public byte[] getDigest() { + return this.digest; + } + + public static Message fromByteBuffer(int id, ByteBuffer bytes) throws UnsupportedEncodingException { + if (bytes.remaining() != DIGEST_LENGTH) + return null; + + byte[] digest = new byte[DIGEST_LENGTH]; + + bytes.get(digest); + + return new GetDataFileMessage(id, digest); + } + + @Override + protected byte[] toData() { + try { + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + + bytes.write(this.digest); + + return bytes.toByteArray(); + } catch (IOException e) { + return null; + } + } + +}