From 96fd3457e86544d6094a86bacdbc73e795325802 Mon Sep 17 00:00:00 2001
From: bontric <benjohnwie@gmail.com>
Date: Tue, 25 Sep 2018 13:07:42 +0200
Subject: [PATCH] Update Sessions

---
 .../mailbox/AbstractMailboxSession.java       | 26 +++++++++----------
 .../mailbox/ContactMailboxSession.java        |  3 +--
 .../mailbox/MailboxContactSession.java        |  2 +-
 .../bramble/mailbox/MailboxManagerImpl.java   |  2 +-
 .../bramble/mailbox/MailboxOwnerSession.java  |  8 +++---
 .../mailbox/MailboxSessionFactory.java        |  2 +-
 .../mailbox/PrivateMailboxSession.java        |  6 ++---
 7 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/AbstractMailboxSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/AbstractMailboxSession.java
index 76dc6cae8..16166e5ba 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/AbstractMailboxSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/AbstractMailboxSession.java
@@ -82,20 +82,18 @@ public abstract class AbstractMailboxSession implements MailboxSession {
 		mailboxProtocol.registerRequestHandler(new ENDHandler());
 	}
 
-	/**
-	 * Must be called once at the end of a AbstractMailboxSession to signal the end of
-	 * the session to the peer. This call blocks until the remote session
-	 * signals that it was ended.
-	 */
-	protected void endSession()
-			throws InterruptedException, IOException {
-
-		mailboxProtocol.writeRequest(new MailboxRequestEnd());
+	public void endSession()
+			throws IOException {
 
-		synchronized (remoteSessionFinished) {
-			while (!remoteSessionFinished.get()) {
-				remoteSessionFinished.wait();
+		try {
+			mailboxProtocol.writeRequest(new MailboxRequestEnd());
+			synchronized (remoteSessionFinished) {
+				while (!remoteSessionFinished.get()) {
+					remoteSessionFinished.wait();
+				}
 			}
+		} catch (InterruptedException e) {
+			throw new IOException(e.toString());
 		}
 	}
 
@@ -239,7 +237,7 @@ public abstract class AbstractMailboxSession implements MailboxSession {
 		boolean hasMessages;
 
 		try {
-			txn  = db.startTransaction(true);
+			txn = db.startTransaction(true);
 			hasMessages = db.hasMessagesOrAcksToSend(txn, c);
 			db.commitTransaction(txn);
 		} finally {
@@ -264,7 +262,7 @@ public abstract class AbstractMailboxSession implements MailboxSession {
 
 		syncSessionFactory.createSimplexOutgoingSession(c,
 				MailboxConstants.MAX_LATENCY, streamWriter).run();
-		byte [] buf = os.toByteArray();
+		byte[] buf = os.toByteArray();
 
 		if (buf.length <= 0)
 			return null;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/ContactMailboxSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/ContactMailboxSession.java
index 78b5da37e..bf5d916ff 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/ContactMailboxSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/ContactMailboxSession.java
@@ -57,7 +57,6 @@ public class ContactMailboxSession extends AbstractMailboxSession {
 		this.contactId = contactId;
 
 		mailboxProtocol.registerRequestHandler(new TAKEHandler());
-		mailboxProtocol.enableRequestHandling();
 	}
 
 	@Override
@@ -92,7 +91,7 @@ public class ContactMailboxSession extends AbstractMailboxSession {
 		// to send END request
 		try {
 			endSession();
-		} catch (InterruptedException | IOException e) {
+		} catch (IOException e) {
 			if (LOG.isLoggable(INFO))
 				LOG.info(e.toString());
 		}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxContactSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxContactSession.java
index e40b14579..ed5ba0050 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxContactSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxContactSession.java
@@ -68,7 +68,7 @@ public class MailboxContactSession extends AbstractMailboxSession {
 		// to send END request
 		try {
 			endSession();
-		} catch (InterruptedException | IOException e) {
+		} catch (IOException e) {
 			if (LOG.isLoggable(INFO))
 				LOG.info(e.toString());
 		}
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 77d16fbc6..c6257d418 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
@@ -189,7 +189,7 @@ public class MailboxManagerImpl implements MailboxManager {
 					new MailboxProtocol(ioExecutor, mailboxBdfWriter,
 							mailboxBdfReader);
 
-			AbstractMailboxSession mailboxSession = mailboxSessionFactory
+			MailboxSession mailboxSession = mailboxSessionFactory
 					.createMailboxSession(mailboxProtocol, contactId,
 							contactType, writer.getMaxLatency(),
 							writer.getMaxIdleTime());
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java
index b3c99d3e5..58977cffa 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java
@@ -47,11 +47,8 @@ public class MailboxOwnerSession extends AbstractMailboxSession {
 		this.mailboxProtocol = mailboxProtocol;
 		this.mailboxStorage = mailboxStorage;
 
-
 		enableSYNCHandling();
 		mailboxProtocol.registerRequestHandler(new STOREHandler());
-		mailboxProtocol.enableRequestHandling();
-
 	}
 
 	@Override
@@ -59,6 +56,9 @@ public class MailboxOwnerSession extends AbstractMailboxSession {
 		try {
 			sendStoredStreams();
 			awaitSYNCHandlerFinished();
+			// NOTE: SYNC handler only terminates if the connection is closed
+			// so it  is not required to end the session manually by
+			// sending an END request
 		} catch (InterruptedException | IOException e) {
 			if (LOG.isLoggable(INFO))
 				LOG.info(e.toString());
@@ -70,6 +70,8 @@ public class MailboxOwnerSession extends AbstractMailboxSession {
 		MailboxStorage.MailboxStorageStream nextStream =
 				mailboxStorage.getStreamForOwner();
 
+		// FIXME: If there are no more streams to send at this time, we should
+		// wait
 		while (nextStream != null) {
 			// Send TAKE request and delete stream if request was successfull
 			MailboxRequestTake req =
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSessionFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSessionFactory.java
index 43db7c4f5..33fc3f44d 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSessionFactory.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSessionFactory.java
@@ -5,7 +5,7 @@ import org.briarproject.bramble.api.contact.ContactType;
 import org.briarproject.bramble.mailbox.protocol.MailboxProtocol;
 
 public interface MailboxSessionFactory {
-	AbstractMailboxSession createMailboxSession(MailboxProtocol mailboxProtocol,
+	MailboxSession createMailboxSession(MailboxProtocol mailboxProtocol,
 			ContactId contactId, ContactType contactType,
 			int transportMaxLatency,
 			int transportMaxIdleTime);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java
index 731f1fea9..1d24dd3f3 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java
@@ -35,7 +35,6 @@ import static org.briarproject.bramble.util.LogUtils.logException;
 public class PrivateMailboxSession extends AbstractMailboxSession {
 	private static final Logger LOG =
 			Logger.getLogger(PrivateMailboxSession.class.getName());
-	private final KeyManager keyManager;
 	private final SyncSessionFactory syncSessionFactory;
 	private final StreamReaderFactory streamReaderFactory;
 	private MailboxProtocol mailboxProtocol;
@@ -51,7 +50,6 @@ public class PrivateMailboxSession extends AbstractMailboxSession {
 		super(ioExecutor, db, keyManager, syncSessionFactory, streamWriterFactory,
 				streamReaderFactory, mailboxProtocol, transportMaxLatency,
 				transportMaxIdleTime, contactId);
-		this.keyManager = keyManager;
 		this.syncSessionFactory = syncSessionFactory;
 		this.streamReaderFactory = streamReaderFactory;
 		this.mailboxProtocol = mailboxProtocol;
@@ -59,7 +57,6 @@ public class PrivateMailboxSession extends AbstractMailboxSession {
 		mailboxProtocol.registerRequestHandler(new TAKEHandler());
 		// Register SYNC handler and run outgoing SYNC session
 		enableSYNCHandling();
-		mailboxProtocol.enableRequestHandling();
 	}
 
 	/**
@@ -96,6 +93,9 @@ public class PrivateMailboxSession extends AbstractMailboxSession {
 	public void run() {
 		try {
 			awaitSYNCHandlerFinished();
+			// NOTE: SYNC handler only terminates if the connection is closed
+			// so it  is not required to end the session manually by
+			// sending an END request
 		} catch (InterruptedException e) {
 			logException(LOG, WARNING, e);
 		}
-- 
GitLab