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