diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java index b12c19c9927b4ff4b00668daaa047cde8d0a9e4f..ab3eb6eaeb29cb95f7ae4036c9f758bf3849e0e9 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactFactory.java @@ -19,6 +19,9 @@ public interface ContactFactory { case MAILBOX_OWNER: return new MailboxOwner(c, author, localAuthorId, verified, active); + case CONTACT_MAILBOX: + return new ContactMailbox(c, author, localAuthorId, verified, + active); default: throw new IllegalArgumentException("Unknown contact type"); } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactMailbox.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactMailbox.java new file mode 100644 index 0000000000000000000000000000000000000000..6a044b94b79f3ce1648ab62ff91064308832176c --- /dev/null +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactMailbox.java @@ -0,0 +1,26 @@ +package org.briarproject.bramble.api.contact; + +import org.briarproject.bramble.api.identity.Author; +import org.briarproject.bramble.api.identity.AuthorId; +import org.briarproject.bramble.api.nullsafety.NotNullByDefault; + +import javax.annotation.concurrent.Immutable; + +import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX; + +@Immutable +@NotNullByDefault +public class ContactMailbox extends Contact { + + public ContactMailbox(ContactId id, + Author author, + AuthorId localAuthorId, + boolean verified, boolean active) { + super(id, author, localAuthorId, verified, active); + } + + @Override + public ContactType getType() { + return CONTACT_MAILBOX; + } +} diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java index e2b3299e14543292eee42dd6e88db22e4a240bf5..b2b40209d2060d400ea1241897000abcb3d9c117 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactManager.java @@ -66,6 +66,10 @@ public interface ContactManager { SecretKey secretKey, long currentTimeMillis, boolean alice) throws DbException; + ContactId addContactMailbox(Transaction txn, Author remote, + AuthorId local, SecretKey master, long timestamp, boolean alice) + throws DbException; + /** * Returns the contact with the given ID. */ diff --git a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java index f6b8fb515f21a14be862866ba15b6f0ca5d32a30..55e327bf1563c4b103cb52610ee091cb0815e2c8 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/contact/ContactManagerImpl.java @@ -24,6 +24,7 @@ import javax.annotation.concurrent.ThreadSafe; import javax.inject.Inject; import static org.briarproject.bramble.api.contact.ContactType.CONTACT; +import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX; import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_OWNER; import static org.briarproject.bramble.api.contact.ContactType.PRIVATE_MAILBOX; @@ -153,6 +154,21 @@ class ContactManagerImpl implements ContactManager { return c; } + @Override + public ContactId addContactMailbox(Transaction txn, Author remote, + AuthorId local, SecretKey master, long timestamp, boolean alice) + throws DbException { + ContactId c = db.addContact(txn, remote, local, false, true, + CONTACT_MAILBOX); + keyManager.addContact(txn, c, master, timestamp, alice, true); + Contact contact = db.getContact(txn, c); + for (ContactHook hook : hooks) { + if (hook.getApplicableContactTypes().contains(contact.getType())) + hook.addingContact(txn, contact); + } + return c; + } + @Override public Contact getContact(ContactId c) throws DbException { Contact contact; diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java index 132f3b8de0c1a42aaad7f4257d26643236c9027f..a185633c75f8b76bc800050846075aab4f022122 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/JdbcDatabase.java @@ -996,7 +996,7 @@ abstract class JdbcDatabase implements Database<Connection> { ps = txn.prepareStatement(sql); ps.setInt(1, contactId.getInt()); if (mailboxId == null) ps.setNull(2, INTEGER); - else ps.setInt(1, mailboxId.getInt()); + else ps.setInt(2, mailboxId.getInt()); if (aliasId == null) ps.setNull(3, INTEGER); else ps.setInt(3, aliasId.getInt()); int affected = ps.executeUpdate(); diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java index 8b140969c714b4d85c2b1333f3cfa1440493f14c..38422eb9af88a467d5ff6f3749d1f2da873b40ce 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java @@ -111,10 +111,12 @@ class Poller implements EventListener { } private void connectToContact(ContactId c) { + /* for (SimplexPlugin s : pluginManager.getSimplexPlugins()) if (s.shouldPoll()) connectToContact(c, s); for (DuplexPlugin d : pluginManager.getDuplexPlugins()) if (d.shouldPoll()) connectToContact(c, d); + */ } private void connectToContact(ContactId c, TransportId t) { diff --git a/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java index 39c5d6302ca4f9042f326e80b6d1441a44f81e50..e970b6f0dc033e0236065c2ffffbbbb7b32e0e6a 100644 --- a/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java +++ b/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java @@ -33,7 +33,6 @@ import javax.annotation.Nullable; import javax.inject.Inject; import static java.util.logging.Level.WARNING; -import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX; import static org.briarproject.bramble.util.LogUtils.logException; import static org.briarproject.briar.mailbox.IntroduceeState.AWAIT_AUTH; import static org.briarproject.briar.mailbox.IntroduceeState.LOCAL_ACCEPTED; @@ -209,8 +208,9 @@ class IntroduceeProtocolEngine long timestamp = Math.min(s.getLocal().acceptTimestamp, s.getRemote().acceptTimestamp); if (timestamp == -1) throw new AssertionError(); - db.addContact(txn, s.getRemote().author, localAuthor.getId(), false, - true, CONTACT_MAILBOX); + contactManager.addContactMailbox(txn, s.getRemote().author, + localAuthor.getId(), new SecretKey(s.masterKey), timestamp, + true); // Only add transport properties and keys when the contact was added // This will be changed once we have a way to reset state for peers // that were contacts already at some point in the past. @@ -226,6 +226,10 @@ class IntroduceeProtocolEngine //noinspection ConstantConditions transportPropertyManager.addRemoteProperties(txn, c.getId(), m.getTransportProperties()); + Contact owner = contactManager + .getContact(txn, s.getIntroducer().getId(), + localAuthor.getId()); + db.setMailboxForContact(txn, owner.getId(), c.getId(), null); // Broadcast MailboxIntroductionSucceededEvent, because contact got added MailboxIntroductionSucceededEvent e = new MailboxIntroductionSucceededEvent(c);