From 213a3bfd6db663a3a6ded8afd6cdaf92d6f456e8 Mon Sep 17 00:00:00 2001
From: bontric <benjohnwie@gmail.com>
Date: Fri, 28 Sep 2018 15:36:14 +0200
Subject: [PATCH] Fix/refactor mailbox message parsing

---
 .../mailbox/protocol/MailboxMessage.java      |  6 ----
 .../mailbox/protocol/MailboxRequest.java      |  7 ++---
 .../mailbox/protocol/MailboxRequestEnd.java   | 10 +++---
 .../mailbox/protocol/MailboxRequestStore.java | 31 +++++++++----------
 .../mailbox/protocol/MailboxRequestSync.java  | 16 +++++-----
 .../mailbox/protocol/MailboxRequestTake.java  | 14 ++++-----
 .../mailbox/protocol/MailboxResponse.java     | 15 ++++-----
 7 files changed, 42 insertions(+), 57 deletions(-)

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 21de3d151..cf497c249 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
@@ -67,12 +67,6 @@ public interface MailboxMessage {
 	 */
 	BdfList toBdfList();
 
-	/**
-	 * @param list
-	 * @throws FormatException
-	 */
-	void parseBody(BdfList list) throws FormatException;
-
 	enum TYPE {
 		RESPONSE(0),
 		END(1),
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 928bd379b..f913cf7b4 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
@@ -22,10 +22,9 @@ public abstract class MailboxRequest implements MailboxMessage {
 		this.msgId = msgIdCounter.getAndIncrement();
 	}
 
-	public MailboxRequest(BdfList lst) throws FormatException {
-		this.type = TYPE.fromLong(lst.getLong(0));
-		this.msgId = lst.getLong(1);
-		parseBody(lst.getList(2));
+	public MailboxRequest(TYPE type, long msgId) throws FormatException {
+		this.type = type;
+		this.msgId = msgId;
 	}
 
 	@Override
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 2fc1a53da..f64f48bb4 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
@@ -11,8 +11,11 @@ public class MailboxRequestEnd extends MailboxRequest {
 		super(TYPE.END);
 	}
 
+	// Parse END request from bdfList
 	public MailboxRequestEnd(BdfList msg) throws FormatException {
-		super(msg);
+		super(TYPE.END, msg.getLong(1));
+		if(msg.getList(2).size() != 0)
+			throw new FormatException();
 	}
 
 	@Override
@@ -25,9 +28,4 @@ public class MailboxRequestEnd extends MailboxRequest {
 		return false;
 	}
 
-	@Override
-	public void parseBody(BdfList list) throws FormatException {
-		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 6c7113ec3..60074e1c3 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
@@ -26,7 +26,21 @@ public class MailboxRequestStore extends MailboxRequest {
 	}
 
 	public MailboxRequestStore(BdfList msg) throws FormatException {
-		super(msg);
+		super(TYPE.STORE, msg.getLong(1));
+
+		BdfList body = msg.getList(2);
+
+		if(body.size() > 2)
+			throw new FormatException();
+
+		Long cId = body.getOptionalLong(0);
+		if (cId != null) {
+			if (cId > Integer.MAX_VALUE || cId < Integer.MIN_VALUE)
+				throw new FormatException();
+			contactId = new ContactId(cId.intValue());
+		}
+
+		encryptedSyncStream = body.getRaw(1);
 	}
 
 	public BdfList getRequestBody() {
@@ -41,21 +55,6 @@ public class MailboxRequestStore extends MailboxRequest {
 		return true;
 	}
 
-	@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)
-				throw new FormatException();
-			contactId = new ContactId(cId.intValue());
-		}
-
-		encryptedSyncStream = msg.getRaw(1);
-	}
-
 	public byte[] getEncryptedSyncStream() {
 		return encryptedSyncStream;
 	}
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 288941113..9d171b77d 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
@@ -18,8 +18,14 @@ public class MailboxRequestSync extends MailboxRequest {
 		this.syncStream = null;
 	}
 
-	public MailboxRequestSync(BdfList lst) throws FormatException {
-		super(lst);
+	public MailboxRequestSync(BdfList msg) throws FormatException {
+		super(TYPE.SYNC, msg.getLong(1));
+
+		BdfList body = msg.getList(2);
+
+		if(body.size() != 1)
+			throw new FormatException();
+		this.syncStream = body.getOptionalRaw(0);
 	}
 
 	@Override
@@ -32,12 +38,6 @@ public class MailboxRequestSync extends MailboxRequest {
 		return false;
 	}
 
-	@Override
-	public void parseBody(BdfList list) throws FormatException {
-		if(list.size() != 1)
-			throw new FormatException();
-		this.syncStream = list.getOptionalRaw(0);
-	}
 
 	public byte[] getSyncStream() {
 		return syncStream;
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 c9fad63b4..5f7720d7f 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
@@ -13,7 +13,12 @@ public class MailboxRequestTake extends MailboxRequest {
 	}
 
 	public MailboxRequestTake(BdfList msg) throws FormatException {
-		super(msg);
+		super(TYPE.TAKE, msg.getLong(1));
+
+		BdfList body = msg.getList(2);
+		if(body.size() != 1)
+			throw new FormatException();
+		this.encryptedSyncStream = body.getRaw(0);
 	}
 
 	@Override
@@ -26,13 +31,6 @@ public class MailboxRequestTake extends MailboxRequest {
 		return true;
 	}
 
-	@Override
-	public void parseBody(BdfList msg) throws FormatException {
-		if(msg.size() != 1)
-			throw new FormatException();
-		this.encryptedSyncStream = msg.getRaw(0);
-	}
-
 	public byte[] getEncryptedSyncStream() {
 		return encryptedSyncStream;
 	}
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 873c16d0f..60837bfdb 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
@@ -19,7 +19,12 @@ public class MailboxResponse implements MailboxMessage {
 
 	public MailboxResponse(BdfList msg) throws FormatException {
 		this.msgId = msg.getLong(1);
-		parseBody(msg.getList(2));
+		BdfList body = msg.getList(2);
+
+		if(body.size() != 1)
+			throw new FormatException();
+
+		errorMessage = body.getOptionalString(0);
 	}
 
 	@Override
@@ -37,14 +42,6 @@ public class MailboxResponse implements MailboxMessage {
 		return BdfList.of(RESPONSE.getValue(), msgId, BdfList.of(errorMessage));
 	}
 
-
-	@Override
-	public void parseBody(BdfList list) throws FormatException {
-		if(list.size() != 1)
-			throw new FormatException();
-		errorMessage = list.getOptionalString(0);
-	}
-
 	public String getErrorMessage() {
 		return errorMessage;
 	}
-- 
GitLab