diff --git a/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java index b5adf450d..a508c2e83 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/transport/KeyManagerImpl.java @@ -29,6 +29,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; +import javax.annotation.Nullable; import javax.annotation.concurrent.ThreadSafe; import javax.inject.Inject; @@ -132,13 +133,10 @@ class KeyManagerImpl implements KeyManager, Service, EventListener { public void activateKeys(Transaction txn, Map keys) throws DbException { for (Entry e : keys.entrySet()) { - TransportId t = e.getKey(); - TransportKeyManager m = managers.get(t); - if (m == null) { - if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); - } else { + withManager(e.getKey(), m -> { m.activateKeys(txn, e.getValue()); - } + return null; + }); } } @@ -157,37 +155,25 @@ class KeyManagerImpl implements KeyManager, Service, EventListener { @Override public StreamContext getStreamContext(ContactId c, TransportId t) throws DbException { - TransportKeyManager m = managers.get(t); - if (m == null) { - if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); - return null; - } - return db.transactionWithNullableResult(false, txn -> - m.getStreamContext(txn, c)); + return withManager(t, m -> + db.transactionWithNullableResult(false, txn -> + m.getStreamContext(txn, c))); } @Override public StreamContext getStreamContext(PendingContactId p, TransportId t) throws DbException { - TransportKeyManager m = managers.get(t); - if (m == null) { - if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); - return null; - } - return db.transactionWithNullableResult(false, txn -> - m.getStreamContext(txn, p)); + return withManager(t, m -> + db.transactionWithNullableResult(false, txn -> + m.getStreamContext(txn, p))); } @Override public StreamContext getStreamContext(TransportId t, byte[] tag) throws DbException { - TransportKeyManager m = managers.get(t); - if (m == null) { - if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); - return null; - } - return db.transactionWithNullableResult(false, txn -> - m.getStreamContext(txn, tag)); + return withManager(t, m -> + db.transactionWithNullableResult(false, txn -> + m.getStreamContext(txn, tag))); } @Override @@ -202,4 +188,20 @@ class KeyManagerImpl implements KeyManager, Service, EventListener { for (TransportKeyManager m : managers.values()) m.removeContact(c); }); } + + @Nullable + private T withManager(TransportId t, ManagerTask task) + throws DbException { + TransportKeyManager m = managers.get(t); + if (m == null) { + if (LOG.isLoggable(INFO)) LOG.info("No key manager for " + t); + return null; + } + return task.run(m); + } + + private interface ManagerTask { + @Nullable + T run(TransportKeyManager m) throws DbException; + } }