diff --git a/api/net/sf/briar/api/transport/ConnectionRecogniser.java b/api/net/sf/briar/api/transport/ConnectionRecogniser.java index 4c7fa20fd822896efa3465eceb524befe4c57b04..83ac8e36abccc6a16f51b44fa7ce70e4af512ec4 100644 --- a/api/net/sf/briar/api/transport/ConnectionRecogniser.java +++ b/api/net/sf/briar/api/transport/ConnectionRecogniser.java @@ -18,7 +18,7 @@ public interface ConnectionRecogniser { ConnectionContext acceptConnection(TransportId t, byte[] tag) throws DbException; - void addSecret(TemporarySecret s) throws DbException; + void addSecret(TemporarySecret s); void removeSecret(ContactId c, TransportId t, long period); diff --git a/components/net/sf/briar/transport/ConnectionRecogniserImpl.java b/components/net/sf/briar/transport/ConnectionRecogniserImpl.java index 7fb1c9b72291cefc15f7c9ca60a884602f22d8bc..8f39204ef29b86868a8278097a91daf9fa1e9b13 100644 --- a/components/net/sf/briar/transport/ConnectionRecogniserImpl.java +++ b/components/net/sf/briar/transport/ConnectionRecogniserImpl.java @@ -38,7 +38,7 @@ class ConnectionRecogniserImpl implements ConnectionRecogniser { return r.acceptConnection(tag); } - public void addSecret(TemporarySecret s) throws DbException { + public void addSecret(TemporarySecret s) { TransportId t = s.getTransportId(); TransportConnectionRecogniser r; synchronized(this) { diff --git a/components/net/sf/briar/transport/KeyManagerImpl.java b/components/net/sf/briar/transport/KeyManagerImpl.java index 03cfb58cdf56af6e2f5671b4c54c87b431dfb1d7..b6afd7d5b1d4a0783e6c0fc57101e66b64141c38 100644 --- a/components/net/sf/briar/transport/KeyManagerImpl.java +++ b/components/net/sf/briar/transport/KeyManagerImpl.java @@ -26,6 +26,8 @@ import net.sf.briar.util.ByteUtils; import com.google.inject.Inject; +// FIXME: When a contact transport is added we need to load its secrets + class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener { private static final int MS_BETWEEN_CHECKS = 60 * 1000; @@ -73,19 +75,18 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener { Collection<TemporarySecret> dead = assignSecretsToMaps(now, secrets); // Replace any dead secrets Collection<TemporarySecret> created = replaceDeadSecrets(now, dead); - try { + if(!created.isEmpty()) { // Store any secrets that have been created - if(!created.isEmpty()) db.addSecrets(created); - // Pass the current incoming secrets to the recogniser - // FIXME: This uses a separate database transaction per secret - for(TemporarySecret s : incomingOld.values()) - recogniser.addSecret(s); - for(TemporarySecret s : incomingNew.values()) - recogniser.addSecret(s); - } catch(DbException e) { - if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); - return false; + try { + db.addSecrets(created); + } catch(DbException e) { + if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); + return false; + } } + // Pass the current incoming secrets to the recogniser + for(TemporarySecret s : incomingOld.values()) recogniser.addSecret(s); + for(TemporarySecret s : incomingNew.values()) recogniser.addSecret(s); // Schedule periodic key rotation timer.scheduleAtFixedRate(this, MS_BETWEEN_CHECKS, MS_BETWEEN_CHECKS); running = true; @@ -247,15 +248,14 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener { // Replace any dead secrets Collection<TemporarySecret> created = replaceDeadSecrets(now, dead); if(!created.isEmpty()) { + // Store any secrets that have been created try { - // Store any secrets that have been created db.addSecrets(created); - // Pass any secrets that have been created to the recogniser - // FIXME: This uses a separate database transaction per secret - for(TemporarySecret s : created) recogniser.addSecret(s); } catch(DbException e) { if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); } + // Pass any secrets that have been created to the recogniser + for(TemporarySecret s : created) recogniser.addSecret(s); } } diff --git a/components/net/sf/briar/transport/TransportConnectionRecogniser.java b/components/net/sf/briar/transport/TransportConnectionRecogniser.java index 3ff70470ddd0b8c2c6db6fbedf9c3b94129860aa..fd588f95ac2eef5a573f6e6c7691187b3ca15c95 100644 --- a/components/net/sf/briar/transport/TransportConnectionRecogniser.java +++ b/components/net/sf/briar/transport/TransportConnectionRecogniser.java @@ -75,7 +75,7 @@ class TransportConnectionRecogniser { return ctx; } - synchronized void addSecret(TemporarySecret s) throws DbException { + synchronized void addSecret(TemporarySecret s) { ContactId contactId = s.getContactId(); long period = s.getPeriod(); byte[] secret = s.getSecret(); @@ -95,9 +95,7 @@ class TransportConnectionRecogniser { WindowContext old = tagMap.put(new Bytes(tag), wctx); assert old == null; } - // Store the new connection window in the DB - db.setConnectionWindow(contactId, transportId, period, centre, bitmap); - // Create a removal context to remove the window when the key expires + // Create a removal context to remove the window later RemovalContext rctx = new RemovalContext(window, secret, alice); removalMap.put(new RemovalKey(contactId, period), rctx); }