mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 10:49:06 +01:00
Add database method for getting transports with keys.
This commit is contained in:
@@ -493,6 +493,16 @@ public interface DatabaseComponent extends TransactionManager {
|
||||
Collection<TransportKeySet> getTransportKeys(Transaction txn, TransportId t)
|
||||
throws DbException;
|
||||
|
||||
/**
|
||||
* Returns the contact IDs and transport IDs for which the DB contains
|
||||
* at least one set of transport keys. Handshake mode and rotation mode
|
||||
* keys are included, whether activated or not.
|
||||
* <p/>
|
||||
* Read-only.
|
||||
*/
|
||||
Map<ContactId, Collection<TransportId>> getTransportsWithKeys(
|
||||
Transaction txn) throws DbException;
|
||||
|
||||
/**
|
||||
* Increments the outgoing stream counter for the given transport keys.
|
||||
*/
|
||||
|
||||
@@ -590,6 +590,16 @@ interface Database<T> {
|
||||
Collection<TransportKeySet> getTransportKeys(T txn, TransportId t)
|
||||
throws DbException;
|
||||
|
||||
/**
|
||||
* Returns the contact IDs and transport IDs for which the DB contains
|
||||
* at least one set of transport keys. Handshake mode and rotation mode
|
||||
* keys are included, whether activated or not.
|
||||
* <p/>
|
||||
* Read-only.
|
||||
*/
|
||||
Map<ContactId, Collection<TransportId>> getTransportsWithKeys(T txn)
|
||||
throws DbException;
|
||||
|
||||
/**
|
||||
* Increments the outgoing stream counter for the given transport keys.
|
||||
*/
|
||||
|
||||
@@ -780,6 +780,13 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
|
||||
return db.getTransportKeys(txn, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ContactId, Collection<TransportId>> getTransportsWithKeys(
|
||||
Transaction transaction) throws DbException {
|
||||
T txn = unbox(transaction);
|
||||
return db.getTransportsWithKeys(txn);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementStreamCounter(Transaction transaction, TransportId t,
|
||||
KeySetId k) throws DbException {
|
||||
|
||||
@@ -2605,6 +2605,38 @@ abstract class JdbcDatabase implements Database<Connection> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<ContactId, Collection<TransportId>> getTransportsWithKeys(
|
||||
Connection txn) throws DbException {
|
||||
Statement s = null;
|
||||
ResultSet rs = null;
|
||||
try {
|
||||
String sql = "SELECT DISTINCT contactId, transportId"
|
||||
+ " FROM outgoingKeys";
|
||||
s = txn.createStatement();
|
||||
rs = s.executeQuery(sql);
|
||||
Map<ContactId, Collection<TransportId>> ids = new HashMap<>();
|
||||
while (rs.next()) {
|
||||
ContactId c = new ContactId(rs.getInt(1));
|
||||
TransportId t = new TransportId(rs.getString(2));
|
||||
Collection<TransportId> transportIds = ids.get(c);
|
||||
if (transportIds == null) {
|
||||
transportIds = new ArrayList<>();
|
||||
ids.put(c, transportIds);
|
||||
}
|
||||
transportIds.add(t);
|
||||
}
|
||||
rs.close();
|
||||
s.close();
|
||||
return ids;
|
||||
} catch (SQLException e) {
|
||||
tryToClose(rs, LOG, WARNING);
|
||||
tryToClose(s, LOG, WARNING);
|
||||
tryToClose(s, LOG, WARNING);
|
||||
throw new DbException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void incrementStreamCounter(Connection txn, TransportId t,
|
||||
KeySetId k) throws DbException {
|
||||
|
||||
@@ -699,6 +699,7 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
|
||||
// Initially there should be no transport keys in the database
|
||||
assertEquals(emptyList(), db.getTransportKeys(txn, transportId));
|
||||
assertTrue(db.getTransportsWithKeys(txn).isEmpty());
|
||||
|
||||
// Add the contact, the transport and the transport keys
|
||||
db.addIdentity(txn, identity);
|
||||
@@ -721,6 +722,8 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
assertKeysEquals(keys1, ks.getKeys());
|
||||
}
|
||||
}
|
||||
assertEquals(singletonMap(contactId, singletonList(transportId)),
|
||||
db.getTransportsWithKeys(txn));
|
||||
|
||||
// Update the transport keys
|
||||
TransportKeys updated = createTransportKeys(timePeriod + 1, active);
|
||||
@@ -743,10 +746,13 @@ public abstract class JdbcDatabaseTest extends BrambleTestCase {
|
||||
assertKeysEquals(updated1, ks.getKeys());
|
||||
}
|
||||
}
|
||||
assertEquals(singletonMap(contactId, singletonList(transportId)),
|
||||
db.getTransportsWithKeys(txn));
|
||||
|
||||
// Removing the contact should remove the transport keys
|
||||
db.removeContact(txn, contactId);
|
||||
assertEquals(emptyList(), db.getTransportKeys(txn, transportId));
|
||||
assertTrue(db.getTransportsWithKeys(txn).isEmpty());
|
||||
|
||||
db.commitTransaction(txn);
|
||||
db.close();
|
||||
|
||||
Reference in New Issue
Block a user