diff --git a/briar-api/src/org/briarproject/api/contact/ContactManager.java b/briar-api/src/org/briarproject/api/contact/ContactManager.java index 183378060f0a74d6d3731ff8e842067eb87b01ea..f18bd1dc3b620a22d0a8b7cd205ba21f59888cf7 100644 --- a/briar-api/src/org/briarproject/api/contact/ContactManager.java +++ b/briar-api/src/org/briarproject/api/contact/ContactManager.java @@ -5,6 +5,7 @@ import org.briarproject.api.db.DbException; import org.briarproject.api.db.Transaction; import org.briarproject.api.identity.Author; import org.briarproject.api.identity.AuthorId; +import org.briarproject.api.identity.LocalAuthor; import java.util.Collection; @@ -44,6 +45,14 @@ public interface ContactManager { /** Marks a contact as active or inactive. */ void setContactActive(ContactId c, boolean active) throws DbException; + /** Return true if a contact with this name and public key already exists */ + boolean contactExists(Transaction txn, AuthorId remoteAuthorID, + AuthorId localAuthorId) throws DbException; + + /** Return true if a contact with this name and public key already exists */ + boolean contactExists(AuthorId remoteAuthorID, AuthorId localAuthorId) + throws DbException; + interface AddContactHook { void addingContact(Transaction txn, Contact c) throws DbException; } diff --git a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java index 2292bc0ba258a674251de8cdb5b6ebee64750251..a360fa98b61bb104e754a7bd42c6463a8e0918e0 100644 --- a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java +++ b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java @@ -162,6 +162,13 @@ public interface DatabaseComponent { Collection<ContactId> getContacts(Transaction txn, AuthorId a) throws DbException; + /** + * Returns true if the database contains the given contact for the given + * local pseudonym. + */ + boolean containsContact(Transaction txn, AuthorId remote, AuthorId local) + throws DbException; + /** * Returns the unique ID for this device. * <p/> diff --git a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java b/briar-core/src/org/briarproject/contact/ContactManagerImpl.java index e04878d43f4bb6d70ba2bfcca0f63aa781f99c67..23ec838802d8ad75c512e970720a185b566e254c 100644 --- a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java +++ b/briar-core/src/org/briarproject/contact/ContactManagerImpl.java @@ -125,6 +125,26 @@ class ContactManagerImpl implements ContactManager, RemoveIdentityHook { } } + @Override + public boolean contactExists(Transaction txn, AuthorId remoteAuthorID, + AuthorId localAuthorId) throws DbException { + return db.containsContact(txn, remoteAuthorID, localAuthorId); + } + + @Override + public boolean contactExists(AuthorId remoteAuthorID, + AuthorId localAuthorId) throws DbException { + boolean exists = false; + Transaction txn = db.startTransaction(true); + try { + exists = contactExists(txn, remoteAuthorID, localAuthorId); + txn.setComplete(); + } finally { + db.endTransaction(txn); + } + return exists; + } + private void removeContact(Transaction txn, ContactId c) throws DbException { Contact contact = db.getContact(txn, c); diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java index d00159903596c83da6d3750dc115571dcab6215e..150d0a43a2c7422716cdc01c858e026e3e7fe1d1 100644 --- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java +++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java @@ -342,6 +342,14 @@ class DatabaseComponentImpl<T> implements DatabaseComponent { return db.getContacts(txn, a); } + public boolean containsContact(Transaction transaction, AuthorId remote, + AuthorId local) throws DbException { + T txn = unbox(transaction); + if (!db.containsLocalAuthor(txn, local)) + throw new NoSuchLocalAuthorException(); + return db.containsContact(txn, remote, local); + } + public DeviceId getDeviceId(Transaction transaction) throws DbException { T txn = unbox(transaction); return db.getDeviceId(txn);