From 67db8166ef63b1aa3da341c9bada1197655f26fd Mon Sep 17 00:00:00 2001
From: Julian Dehm <goapunk@riseup.net>
Date: Wed, 26 Sep 2018 18:05:23 +0200
Subject: [PATCH] test

---
 .../bramble/api/contact/ContactFactory.java   |  3 +++
 .../bramble/api/contact/ContactMailbox.java   | 26 +++++++++++++++++++
 .../bramble/api/contact/ContactManager.java   |  4 +++
 .../bramble/contact/ContactManagerImpl.java   | 16 ++++++++++++
 .../briarproject/bramble/db/JdbcDatabase.java |  2 +-
 .../briarproject/bramble/plugin/Poller.java   |  2 ++
 .../mailbox/IntroduceeProtocolEngine.java     | 10 ++++---
 7 files changed, 59 insertions(+), 4 deletions(-)
 create mode 100644 bramble-api/src/main/java/org/briarproject/bramble/api/contact/ContactMailbox.java

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 b12c19c99..ab3eb6eae 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 000000000..6a044b94b
--- /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 e2b3299e1..b2b40209d 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 f6b8fb515..55e327bf1 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 132f3b8de..a185633c7 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 8b140969c..38422eb9a 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 39c5d6302..e970b6f0d 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);
-- 
GitLab