From c9f1f94751a73daf457a7119bec5913b1d89a542 Mon Sep 17 00:00:00 2001 From: bontric <benjohnwie@gmail.com> Date: Thu, 20 Sep 2018 18:33:58 +0200 Subject: [PATCH] Update MailboxOwnerSession --- .../bramble/mailbox/MailboxOwnerSession.java | 47 +++++++++++++++++-- 1 file changed, 42 insertions(+), 5 deletions(-) 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 8aeb2a7c1..8101f4c0c 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 @@ -7,16 +7,25 @@ import org.briarproject.bramble.api.transport.StreamReaderFactory; import org.briarproject.bramble.api.transport.StreamWriterFactory; import org.briarproject.bramble.mailbox.protocol.MailboxMessage; import org.briarproject.bramble.mailbox.protocol.MailboxProtocol; +import org.briarproject.bramble.mailbox.protocol.MailboxRequest; +import org.briarproject.bramble.mailbox.protocol.MailboxRequestHandler; +import org.briarproject.bramble.mailbox.protocol.MailboxRequestStore; +import java.net.ProtocolException; import java.util.concurrent.Executor; import java.util.logging.Logger; import static java.util.logging.Level.INFO; +import static org.briarproject.bramble.mailbox.protocol.MailboxMessage.TYPE.STORE; -class MailboxOwnerSession extends AbstractMailboxSession { +/** + * This session represents a connection from the mailbox owner to their own mailbox + */ +public class MailboxOwnerSession extends AbstractMailboxSession { private static final Logger LOG = Logger.getLogger(MailboxOwnerSession.class.getName()); + private final MailboxStorage mailboxStorage; public MailboxOwnerSession(ContactId contactId, Executor ioExecutor, KeyManager keyManager, @@ -24,25 +33,53 @@ class MailboxOwnerSession extends AbstractMailboxSession { StreamWriterFactory streamWriterFactory, StreamReaderFactory streamReaderFactory, MailboxProtocol mailboxProtocol, int transportMaxLatency, - int transportMaxIdleTime) { + int transportMaxIdleTime, MailboxStorage mailboxStorage) { super(ioExecutor, keyManager, syncSessionFactory, streamWriterFactory, streamReaderFactory, mailboxProtocol, transportMaxLatency, transportMaxIdleTime, contactId); + this.mailboxStorage = mailboxStorage; + + + enableSYNCHandling(); + mailboxProtocol.registerRequestHandler(new STOREHandler()); + mailboxProtocol.enableRequestHandling(); - registerSupportedRequest(MailboxMessage.TYPE.SYNC); - registerSupportedRequest(MailboxMessage.TYPE.TAKE); } @Override public void run() { try { - waitForHandlersToFinish(); + awaitSYNCHandlerFinished(); } catch (InterruptedException e) { if (LOG.isLoggable(INFO)) LOG.info(e.toString()); } } + private class STOREHandler implements MailboxRequestHandler { + @Override + public void handleRequest(MailboxRequest request) + throws ProtocolException { + MailboxRequestStore storeReq = (MailboxRequestStore) request; + + if (!storeReq.hasContactId()) + throw new ProtocolException( + "Contact Id must be set for owner to mailbox STORE requests"); + + mailboxStorage + .storeStream(storeReq.getContactId(), + storeReq.getEncryptedSyncStream()); + } + @Override + public MailboxMessage.TYPE getType() { + return STORE; + } + + @Override + public void protocolFinished() { + mailboxStorage.close(); + } + } } -- GitLab