diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java index cc87e1ab08eac9968cb83dd404f1e94d0b1f925f..77d16fbc6dc33a6ddfc66d6949f66bd0e58b716b 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java @@ -112,7 +112,6 @@ public class MailboxManagerImpl implements MailboxManager { public void handleOwnerContactWithoutMailbox(MailboxInfo mailboxInfo) { if (null == privateMailboxSession) return; - ioExecutor.execute( () -> privateMailboxSession.handleContactWithoutPrivateMailbox(mailboxInfo)); } @@ -254,7 +253,6 @@ public class MailboxManagerImpl implements MailboxManager { } private void handleIncomingStream() throws IOException { - InputStream mailboxInputStream = streamReaderFactory.createStreamReader( reader.getInputStream(), incomingCtx); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSyncRequestWriter.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSyncRequestWriter.java index 647b03c683af14748c4bc86d9f535586f3e36600..5e8c57fda57c8342d7eea8f8992429d99ae83f21 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSyncRequestWriter.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSyncRequestWriter.java @@ -29,9 +29,7 @@ class MailboxSyncRequestWriter extends OutputStream implements StreamWriter { if (endOfStream) throw new IOException("End of stream was already written"); - endOfStream = true; - - MailboxRequestSync req = new MailboxRequestSync(new byte[] {}, true); + MailboxRequestSync req = new MailboxRequestSync(); try { mailboxProtocol.writeRequest(req); } catch (InterruptedException e) { @@ -59,7 +57,7 @@ class MailboxSyncRequestWriter extends OutputStream implements StreamWriter { byte[] syncStream = bufferOS.toByteArray(); bufferOS.reset(); - MailboxRequestSync req = new MailboxRequestSync(syncStream, false); + MailboxRequestSync req = new MailboxRequestSync(syncStream); try { mailboxProtocol.writeRequest(req); } catch (InterruptedException e) { diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxMessage.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxMessage.java index 96396e17537333b11c45724760484863580fd87e..21de3d151c52c90b2f02c0eaf311e3c389903164 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxMessage.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxMessage.java @@ -15,11 +15,11 @@ import java.net.ProtocolException; * <p> * Error Responses: * [TYPE, MESSAGE_ID, [false, ERROR_MSG]] - * [long, long, [boolean, string]] + * [long, long, [string]] * <p> * Successful Responses (BODY depending on TYPE): * [TYPE, MESSAGE_ID, [true, [BODY]]] - * [long, long, [boolean, [BdfList]]] + * [long, long, [null]] */ public interface MailboxMessage { static MailboxMessage parse(BdfList msg) throws ProtocolException { @@ -55,11 +55,6 @@ public interface MailboxMessage { */ long getId(); - /** - * @return true if the message expects a response - */ - boolean hasResponse(); - /** * @return Message TYPE */ diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java index 940b6db9bd596bbf5070266451ea627feea4adc5..089526ef206a9cca642300febc02a42cdb579d41 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java @@ -65,7 +65,7 @@ public class MailboxProtocol implements Runnable { } } - public void writeRequest(MailboxMessage req) + public void writeRequest(MailboxRequest req) throws InterruptedException, IOException { if (req.hasResponse()) pendingRequests.put(req.getId(), (MailboxRequest) req); @@ -259,7 +259,7 @@ public class MailboxProtocol implements Runnable { // Signal the error to anyone waiting for a response for (Entry<Long, MailboxRequest> entry : pendingRequests.entrySet()) { - MailboxResponse r = new MailboxResponse(entry.getKey(), false, + MailboxResponse r = new MailboxResponse(entry.getKey(), "Connection closed"); entry.getValue().signalError(r.getErrorMessage()); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequest.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequest.java index c0b02470758712fa9df44daf644017a3d9c00865..928bd379b46e93acee98c3d2dc2b30fd48a77ea2 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequest.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequest.java @@ -61,6 +61,11 @@ public abstract class MailboxRequest implements MailboxMessage { } } + /** + * @return true if the message expects a response + */ + abstract boolean hasResponse(); + /** * Blocks until a response for this request has been received * @@ -89,11 +94,11 @@ public abstract class MailboxRequest implements MailboxMessage { } public MailboxResponse createSuccessResponse() { - return new MailboxResponse(msgId, true, null); + return new MailboxResponse(msgId, null); } public MailboxResponse createErrorResponse(String error) { - return new MailboxResponse(msgId, false, error); + return new MailboxResponse(msgId, error); } protected abstract BdfList getRequestBody(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestEnd.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestEnd.java index 3add906944de60b6b3fc2fff4f04358a9b330fb2..2fc1a53da8ba39a2602aff5bd17b837035f66206 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestEnd.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestEnd.java @@ -27,6 +27,7 @@ public class MailboxRequestEnd extends MailboxRequest { @Override public void parseBody(BdfList list) throws FormatException { - return; + if(list.size() != 0) + throw new FormatException(); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestStore.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestStore.java index 362119f3d3eb912c3614e69d960e222b3da2dd0a..6c7113ec39092c24534671dadb5873420f0988ab 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestStore.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestStore.java @@ -43,6 +43,9 @@ public class MailboxRequestStore extends MailboxRequest { @Override public void parseBody(BdfList msg) throws FormatException { + if(msg.size() > 2) + throw new FormatException(); + Long cId = msg.getOptionalLong(0); if (cId != null) { if (cId > Integer.MAX_VALUE || cId < Integer.MIN_VALUE) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestSync.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestSync.java index 9d5fa51c5c2265fee545817990910108e6b89453..28894111313e35324a268d5199442bde3bf4adb6 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestSync.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestSync.java @@ -3,14 +3,19 @@ package org.briarproject.bramble.mailbox.protocol; import org.briarproject.bramble.api.FormatException; import org.briarproject.bramble.api.data.BdfList; +import javax.annotation.Nullable; + public class MailboxRequestSync extends MailboxRequest { - private byte[] encryptedStream; - private boolean endOfStream; + @Nullable + private byte[] syncStream; - public MailboxRequestSync(byte[] encryptedStream, boolean endOfStream) { + public MailboxRequestSync(byte[] syncStream) { + super(TYPE.SYNC); + this.syncStream = syncStream; + } + public MailboxRequestSync() { super(TYPE.SYNC); - this.encryptedStream = encryptedStream; - this.endOfStream = endOfStream; + this.syncStream = null; } public MailboxRequestSync(BdfList lst) throws FormatException { @@ -19,7 +24,7 @@ public class MailboxRequestSync extends MailboxRequest { @Override protected BdfList getRequestBody() { - return BdfList.of(encryptedStream, endOfStream); + return BdfList.of(syncStream); } @Override @@ -29,15 +34,16 @@ public class MailboxRequestSync extends MailboxRequest { @Override public void parseBody(BdfList list) throws FormatException { - this.encryptedStream = list.getRaw(0); - this.endOfStream = list.getBoolean(1); + if(list.size() != 1) + throw new FormatException(); + this.syncStream = list.getOptionalRaw(0); } public byte[] getSyncStream() { - return encryptedStream; + return syncStream; } public boolean isEndOfStream() { - return endOfStream; + return syncStream == null; } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestTake.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestTake.java index 9919f0c85571e214396483d1bc44a53d8daecb88..a0409538d13a9b5f9f8c7a37b8f78706850435c7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestTake.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxRequestTake.java @@ -28,6 +28,8 @@ public class MailboxRequestTake extends MailboxRequest { @Override public void parseBody(BdfList msg) throws FormatException { + if(msg.size() != 1) + throw new FormatException(); this.encryptedSyncStream = msg.getRaw(0); } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxResponse.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxResponse.java index 0febf4634f14ae0fdcf8868713fd84d00ebcd7bd..873c16d0ff15a21146ab4cd315a47d123046b7af 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxResponse.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxResponse.java @@ -8,16 +8,12 @@ import javax.annotation.Nullable; import static org.briarproject.bramble.mailbox.protocol.MailboxMessage.TYPE.RESPONSE; public class MailboxResponse implements MailboxMessage { - - - private boolean success; + @Nullable private String errorMessage; private long msgId; - public MailboxResponse(long msgId, boolean success, - @Nullable String errorMessage) { + public MailboxResponse(long msgId, @Nullable String errorMessage) { this.msgId = msgId; - this.success = success; this.errorMessage = errorMessage; } @@ -31,11 +27,6 @@ public class MailboxResponse implements MailboxMessage { return msgId; } - @Override - public boolean hasResponse() { - return false; - } - @Override public TYPE getType() { return RESPONSE; @@ -43,21 +34,15 @@ public class MailboxResponse implements MailboxMessage { @Override public BdfList toBdfList() { - BdfList body; - if (!success) - body = BdfList.of(success, errorMessage); - else - body = BdfList.of(success); - - return BdfList.of(RESPONSE.getValue(), msgId, body); + return BdfList.of(RESPONSE.getValue(), msgId, BdfList.of(errorMessage)); } @Override public void parseBody(BdfList list) throws FormatException { - success = list.getBoolean(0); - if (!success) - errorMessage = list.getString(1); + if(list.size() != 1) + throw new FormatException(); + errorMessage = list.getOptionalString(0); } public String getErrorMessage() { @@ -65,6 +50,6 @@ public class MailboxResponse implements MailboxMessage { } public boolean isSuccess() { - return success; + return errorMessage == null; } } \ No newline at end of file diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java index 66e7d4b9c727ad22ef55c3e71e27906c6c7e5ef1..f9de586ba03f86fc103f881fd00bab34a70b7c0e 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java @@ -297,7 +297,7 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { @Test public void syncRequest() throws IOException, InterruptedException { MailboxRequestSync req = - new MailboxRequestSync("Test".getBytes(), false); + new MailboxRequestSync("Test".getBytes()); mailboxProtocol.registerRequestHandler(new MailboxRequestHandler() { @Override