From 1e89dda38194809b717fc05c55e0c771120dab1f Mon Sep 17 00:00:00 2001 From: Julian Dehm <goapunk@riseup.net> Date: Thu, 4 Oct 2018 13:24:27 +0200 Subject: [PATCH] Handover connections to the mailbox manager if running as mailbox --- .../bramble/api/mailbox/MailboxManager.java | 22 +++----- .../bramble/mailbox/MailboxManagerImpl.java | 50 +++++++++++++++++-- .../bramble/plugin/ConnectionManagerImpl.java | 34 ++++--------- 3 files changed, 60 insertions(+), 46 deletions(-) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java index 14480c3f6..2a1bf7807 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java @@ -7,8 +7,6 @@ import org.briarproject.bramble.api.plugin.TransportId; import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection; import org.briarproject.bramble.api.transport.StreamContext; -import javax.annotation.Nullable; - public interface MailboxManager { /** * Connection to a contact's mailbox @@ -23,24 +21,16 @@ public interface MailboxManager { void handleOutgoingPrivateMailboxConnection(ContactId contactId, DuplexTransportConnection connection, TransportId transportId); - /** - * Connection from Owner to mailbox - */ - void handleIncomingMailboxOwnerConnection(StreamContext ctx, - TransportId transportId, TransportConnectionReader reader, - TransportConnectionWriter writer); - - /** - * Connection from contact (of owner) to mailbox - */ - void handleInomingOwnerContactConnection(StreamContext ctx, - TransportId transportId, TransportConnectionReader reader, - TransportConnectionWriter writer); - /** * Contacts without private mailbox which have been introduced * to private mailbox */ void handleContactWithoutMailbox(MailboxInfo mailboxInfo); + + /** + * Handle incoming connections from owner or contacts + */ + void handleIncomingConnection(StreamContext ctx, TransportId transportId, + TransportConnectionReader reader, TransportConnectionWriter writer); } 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 f5b3da2f6..0b719a292 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 @@ -6,7 +6,9 @@ import org.briarproject.bramble.api.data.BdfReader; import org.briarproject.bramble.api.data.BdfReaderFactory; import org.briarproject.bramble.api.data.BdfWriter; import org.briarproject.bramble.api.data.BdfWriterFactory; +import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; +import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.mailbox.MailboxInfo; import org.briarproject.bramble.api.mailbox.MailboxManager; @@ -36,7 +38,10 @@ import java.util.logging.Logger; import javax.inject.Inject; import static java.util.logging.Level.WARNING; -import static org.briarproject.bramble.api.contact.ContactType.*; +import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX; +import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_CONTACT; +import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_OWNER; +import static org.briarproject.bramble.api.contact.ContactType.PRIVATE_MAILBOX; import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH; import static org.briarproject.bramble.util.LogUtils.logException; @@ -44,6 +49,7 @@ public class MailboxManagerImpl implements MailboxManager { private static final Logger LOG = Logger.getLogger(MailboxManagerImpl.class.getName()); private Executor ioExecutor; + private final DatabaseComponent db; private MailboxSessionFactory mailboxSessionFactory; private ConnectionRegistry connectionRegistry; private StreamWriterFactory streamWriterFactory; @@ -57,6 +63,7 @@ public class MailboxManagerImpl implements MailboxManager { @Inject public MailboxManagerImpl(@IoExecutor Executor ioExecutor, + DatabaseComponent db, KeyManager keyManager, MailboxSessionFactory mailboxSessionFactory, ConnectionRegistry connectionRegistry, StreamWriterFactory streamWriterFactory, @@ -64,6 +71,7 @@ public class MailboxManagerImpl implements MailboxManager { BdfReaderFactory bdfReaderFactory, BdfWriterFactory bdfWriterFactory) { this.ioExecutor = ioExecutor; + this.db = db; this.keyManager = keyManager; this.mailboxSessionFactory = mailboxSessionFactory; this.connectionRegistry = connectionRegistry; @@ -90,8 +98,7 @@ public class MailboxManagerImpl implements MailboxManager { PRIVATE_MAILBOX, contactId)); } - @Override - public void handleIncomingMailboxOwnerConnection(StreamContext ctx, + private void handleIncomingMailboxOwnerConnection(StreamContext ctx, TransportId transportId, TransportConnectionReader reader, TransportConnectionWriter writer) { @@ -100,8 +107,7 @@ public class MailboxManagerImpl implements MailboxManager { MAILBOX_OWNER)); } - @Override - public void handleInomingOwnerContactConnection(StreamContext ctx, + private void handleIncomingOwnerContactConnection(StreamContext ctx, TransportId transportId, TransportConnectionReader reader, TransportConnectionWriter writer) { ioExecutor.execute( @@ -121,6 +127,40 @@ public class MailboxManagerImpl implements MailboxManager { .handleContactWithoutPrivateMailbox(mailboxInfo)); } + @Override + public void handleIncomingConnection(StreamContext ctx, + TransportId transportId, TransportConnectionReader reader, + TransportConnectionWriter writer) { + Transaction txn = null; + try { + txn = db.startTransaction(true); + ContactType type = db.getContactType(txn, ctx.getContactId()); + switch (type) { + case MAILBOX_OWNER: + handleIncomingMailboxOwnerConnection(ctx, + transportId, reader, writer); + return; + case CONTACT: + handleIncomingOwnerContactConnection(ctx, + transportId, reader, writer); + return; + } + db.commitTransaction(txn); + } catch (DbException e) { + logException(LOG, WARNING, e); + try { + reader.dispose(true, true); + } catch (IOException ioException) { + logException(LOG, WARNING, ioException); + } + return; + } finally { + if (txn != null) + db.endTransaction(txn); + } + + } + private class ManageMailboxConnection implements Runnable { private boolean incoming; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java index 91847693c..bfd3d5912 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java @@ -1,10 +1,9 @@ package org.briarproject.bramble.plugin; +import org.briarproject.bramble.api.BrambleConfig; import org.briarproject.bramble.api.contact.ContactId; -import org.briarproject.bramble.api.contact.ContactType; import org.briarproject.bramble.api.db.DatabaseComponent; import org.briarproject.bramble.api.db.DbException; -import org.briarproject.bramble.api.db.Transaction; import org.briarproject.bramble.api.lifecycle.IoExecutor; import org.briarproject.bramble.api.mailbox.MailboxManager; import org.briarproject.bramble.api.plugin.ConnectionManager; @@ -42,6 +41,7 @@ class ConnectionManagerImpl implements ConnectionManager { private final KeyManager keyManager; private final MailboxManager mailboxManager; private final DatabaseComponent db; + private final BrambleConfig brambleConfig; private final StreamReaderFactory streamReaderFactory; private final StreamWriterFactory streamWriterFactory; private final SyncSessionFactory syncSessionFactory; @@ -52,6 +52,7 @@ class ConnectionManagerImpl implements ConnectionManager { KeyManager keyManager, MailboxManager mailboxManager, DatabaseComponent db, + BrambleConfig brambleConfig, StreamReaderFactory streamReaderFactory, StreamWriterFactory streamWriterFactory, SyncSessionFactory syncSessionFactory, @@ -60,6 +61,7 @@ class ConnectionManagerImpl implements ConnectionManager { this.keyManager = keyManager; this.mailboxManager = mailboxManager; this.db = db; + this.brambleConfig = brambleConfig; this.streamReaderFactory = streamReaderFactory; this.streamWriterFactory = streamWriterFactory; this.syncSessionFactory = syncSessionFactory; @@ -267,31 +269,13 @@ class ConnectionManagerImpl implements ConnectionManager { disposeReader(false, false); return; } - contactId = ctx.getContactId(); - Transaction txn = null; - try { - txn = db.startTransaction(true); - ContactType type = db.getContactType(txn, contactId); - switch (type) { - case MAILBOX_OWNER: - mailboxManager.handleIncomingMailboxOwnerConnection(ctx, - transportId, reader, writer); - return; - case MAILBOX_CONTACT: - mailboxManager.handleInomingOwnerContactConnection(ctx, - transportId, reader, writer); - return; - } - db.commitTransaction(txn); - } catch (DbException e) { - logException(LOG, WARNING, e); - disposeReader(true, true); + if (brambleConfig.isMailbox()) { + mailboxManager + .handleIncomingConnection(ctx, transportId, reader, + writer); return; - }finally { - if (txn != null) - db.endTransaction(txn); } - + contactId = ctx.getContactId(); connectionRegistry.registerConnection(contactId, transportId, true); // Start the outgoing session on another thread ioExecutor.execute(this::runOutgoingSession); -- GitLab