From aef83df55f09a1498d30b51b49c26f6f10d676a5 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Wed, 24 Oct 2012 20:32:55 +0100 Subject: [PATCH] The connection recogniser doesn't need to store newly added windows. --- .../api/transport/ConnectionRecogniser.java | 2 +- .../transport/ConnectionRecogniserImpl.java | 2 +- .../sf/briar/transport/KeyManagerImpl.java | 30 +++++++++---------- .../TransportConnectionRecogniser.java | 6 ++-- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/api/net/sf/briar/api/transport/ConnectionRecogniser.java b/api/net/sf/briar/api/transport/ConnectionRecogniser.java index 4c7fa20fd8..83ac8e36ab 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 7fb1c9b722..8f39204ef2 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 03cfb58cdf..b6afd7d5b1 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 3ff70470dd..fd588f95ac 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); } -- GitLab