mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Add a DB method for checking whether transport keys exist.
This commit is contained in:
@@ -150,6 +150,16 @@ public interface DatabaseComponent extends TransactionManager {
|
||||
boolean containsPendingContact(Transaction txn, PendingContactId p)
|
||||
throws DbException;
|
||||
|
||||
/**
|
||||
* Returns true if the database contains keys for communicating with the
|
||||
* given contact over the given transport. Handshake mode and rotation mode
|
||||
* keys are included, whether activated or not.
|
||||
* <p/>
|
||||
* Read-only.
|
||||
*/
|
||||
boolean containsTransportKeys(Transaction txn, ContactId c, TransportId t)
|
||||
throws DbException;
|
||||
|
||||
/**
|
||||
* Deletes the message with the given ID. Unlike
|
||||
* {@link #removeMessage(Transaction, MessageId)}, the message ID,
|
||||
|
||||
@@ -215,6 +215,16 @@ interface Database<T> {
|
||||
*/
|
||||
boolean containsTransport(T txn, TransportId t) throws DbException;
|
||||
|
||||
/**
|
||||
* Returns true if the database contains keys for communicating with the
|
||||
* given contact over the given transport. Handshake mode and rotation mode
|
||||
* keys are included, whether activated or not.
|
||||
* <p/>
|
||||
* Read-only.
|
||||
*/
|
||||
boolean containsTransportKeys(T txn, ContactId c, TransportId t)
|
||||
throws DbException;
|
||||
|
||||
/**
|
||||
* Returns true if the database contains the given message, the message is
|
||||
* shared, and the visibility of the message's group to the given contact
|
||||
|
||||
@@ -371,6 +371,13 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
|
||||
return db.containsPendingContact(txn, p);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsTransportKeys(Transaction transaction, ContactId c,
|
||||
TransportId t) throws DbException {
|
||||
T txn = unbox(transaction);
|
||||
return db.containsTransportKeys(txn, c, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteMessage(Transaction transaction, MessageId m)
|
||||
throws DbException {
|
||||
|
||||
@@ -1277,6 +1277,29 @@ abstract class JdbcDatabase implements Database<Connection> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsTransportKeys(Connection txn, ContactId c,
|
||||
TransportId t) throws DbException {
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "SELECT NULL FROM outgoingKeys"
|
||||
+ " WHERE contactId = ? AND transportId = ?";
|
||||
ps = txn.prepareStatement(sql);
|
||||
ps.setInt(1, c.getInt());
|
||||
ps.setString(2, t.getString());
|
||||
rs = ps.executeQuery();
|
||||
boolean found = rs.next();
|
||||
rs.close();
|
||||
ps.close();
|
||||
return found;
|
||||
} catch (SQLException e) {
|
||||
tryToClose(rs, LOG, WARNING);
|
||||
tryToClose(ps, LOG, WARNING);
|
||||
throw new DbException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsVisibleMessage(Connection txn, ContactId c,
|
||||
MessageId m) throws DbException {
|
||||
|
||||
@@ -698,6 +698,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
Connection txn = db.startTransaction();
|
||||
|
||||
// Initially there should be no transport keys in the database
|
||||
assertFalse(db.containsTransportKeys(txn, contactId, transportId));
|
||||
assertEquals(emptyList(), db.getTransportKeys(txn, transportId));
|
||||
assertTrue(db.getTransportsWithKeys(txn).isEmpty());
|
||||
|
||||
@@ -710,6 +711,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
assertEquals(keySetId1, db.addTransportKeys(txn, contactId, keys1));
|
||||
|
||||
// Retrieve the transport keys
|
||||
assertTrue(db.containsTransportKeys(txn, contactId, transportId));
|
||||
Collection<TransportKeySet> allKeys =
|
||||
db.getTransportKeys(txn, transportId);
|
||||
assertEquals(2, allKeys.size());
|
||||
@@ -735,6 +737,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
null, updated1));
|
||||
|
||||
// Retrieve the transport keys again
|
||||
assertTrue(db.containsTransportKeys(txn, contactId, transportId));
|
||||
allKeys = db.getTransportKeys(txn, transportId);
|
||||
assertEquals(2, allKeys.size());
|
||||
for (TransportKeySet ks : allKeys) {
|
||||
@@ -751,6 +754,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
|
||||
// Removing the contact should remove the transport keys
|
||||
db.removeContact(txn, contactId);
|
||||
assertFalse(db.containsTransportKeys(txn, contactId, transportId));
|
||||
assertEquals(emptyList(), db.getTransportKeys(txn, transportId));
|
||||
assertTrue(db.getTransportsWithKeys(txn).isEmpty());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user