From f915eb4d3676a0a981213fd3d9b9b13a7154b757 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Thu, 6 Dec 2018 16:06:50 +0000 Subject: [PATCH] Add BlockSink interface, using temporary message ID. --- .../bramble/api/io/BlockSink.java | 27 +++++++++++++++++++ .../bramble/api/io/HashingId.java | 27 +++++++++++++++++++ .../bramble/api/sync/SyncConstants.java | 5 ++++ 3 files changed, 59 insertions(+) create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/io/BlockSink.java create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/io/HashingId.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/io/BlockSink.java b/bramble-api/src/main/java/org/briarproject/bramble/api/io/BlockSink.java new file mode 100644 index 000000000..388311ec9 --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/io/BlockSink.java @@ -0,0 +1,27 @@ +package org.briarproject.bramble.api.io; + +import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.sync.MessageId; +import org.briarproject.bramble.api.sync.tree.TreeHash; + +import java.util.List; + +public interface BlockSink { + + /** + * Stores a block of the message with the given temporary ID. + */ + void putBlock(HashingId h, int blockNumber, byte[] data) throws DbException; + + /** + * Sets the hash tree path of a previously stored block. + */ + void setPath(HashingId h, int blockNumber, List path) + throws DbException; + + /** + * Sets the permanent ID of the message with the given temporary ID. The + * temporary ID is no longer valid once this method has been called. + */ + void setMessageId(HashingId h, MessageId m) throws DbException; +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/io/HashingId.java b/bramble-api/src/main/java/org/briarproject/bramble/api/io/HashingId.java new file mode 100644 index 000000000..d5ca66dbe --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/io/HashingId.java @@ -0,0 +1,27 @@ +package org.briarproject.bramble.api.io; + +import org.briarproject.bramble.api.UniqueId; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.sync.Message; +import org.briarproject.bramble.api.sync.MessageId; + +import javax.annotation.concurrent.ThreadSafe; + +/** + * Type-safe wrapper for a byte array that uniquely identifies a + * {@link Message} while it's being hashed and the {@link MessageId} is not + * yet known. + */ +@ThreadSafe +@NotNullByDefault +public class HashingId extends UniqueId { + + public HashingId(byte[] id) { + super(id); + } + + @Override + public boolean equals(Object o) { + return o instanceof HashingId && super.equals(o); + } +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java index a6e3474f3..4a4200872 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncConstants.java @@ -35,4 +35,9 @@ public interface SyncConstants { * The maximum number of message IDs in an ack, offer or request record. */ int MAX_MESSAGE_IDS = MAX_RECORD_PAYLOAD_BYTES / UniqueId.LENGTH; + + /** + * The maximum length of a message block in bytes. + */ + int MAX_BLOCK_LENGTH = 32 * 2014; // 32 KiB }