diff --git a/briar-api/src/org/briarproject/api/sync/ValidationManager.java b/briar-api/src/org/briarproject/api/sync/ValidationManager.java index 88be9d4c82de2b427fce92f1f55264785f5c0841..ff1e854c33447f06a4826d2f03fe82a0cdc691ae 100644 --- a/briar-api/src/org/briarproject/api/sync/ValidationManager.java +++ b/briar-api/src/org/briarproject/api/sync/ValidationManager.java @@ -1,5 +1,7 @@ package org.briarproject.api.sync; +import org.briarproject.api.db.Metadata; + /** * Responsible for managing message validators and passing them messages to * validate. @@ -28,4 +30,11 @@ public interface ValidationManager { /** Sets the message validator for the given client. */ void registerMessageValidator(ClientId c, MessageValidator v); + + /** Registers a hook to be called whenever a message is validated. */ + void registerValidationHook(ValidationHook hook); + + interface ValidationHook { + void validatingMessage(Message m, ClientId c, Metadata meta); + } } diff --git a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java index 3dcd616e047e03324f8be610a36e411330c3f33b..7a5202c293ed6c98ce04068f4204f41d4401a7f9 100644 --- a/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java +++ b/briar-core/src/org/briarproject/sync/ValidationManagerImpl.java @@ -22,8 +22,10 @@ import org.briarproject.api.sync.MessageValidator; import org.briarproject.api.sync.ValidationManager; import org.briarproject.util.ByteUtils; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.Executor; import java.util.logging.Logger; @@ -40,6 +42,7 @@ class ValidationManagerImpl implements ValidationManager, Service, private final Executor dbExecutor; private final Executor cryptoExecutor; private final Map<ClientId, MessageValidator> validators; + private final List<ValidationHook> hooks; @Inject ValidationManagerImpl(DatabaseComponent db, @@ -49,6 +52,7 @@ class ValidationManagerImpl implements ValidationManager, Service, this.dbExecutor = dbExecutor; this.cryptoExecutor = cryptoExecutor; validators = new ConcurrentHashMap<ClientId, MessageValidator>(); + hooks = new CopyOnWriteArrayList<ValidationHook>(); } @Override @@ -67,6 +71,11 @@ class ValidationManagerImpl implements ValidationManager, Service, validators.put(c, v); } + @Override + public void registerValidationHook(ValidationHook hook) { + hooks.add(hook); + } + private void getMessagesToValidate(final ClientId c) { dbExecutor.execute(new Runnable() { public void run() { @@ -119,6 +128,8 @@ class ValidationManagerImpl implements ValidationManager, Service, if (meta == null) { db.setMessageValid(m, c, false); } else { + for (ValidationHook hook : hooks) + hook.validatingMessage(m, c, meta); db.mergeMessageMetadata(m.getId(), meta); db.setMessageValid(m, c, true); } diff --git a/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java b/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java new file mode 100644 index 0000000000000000000000000000000000000000..4863c85c9abe5ab41d2ec08226c2a417e1e88b9c --- /dev/null +++ b/briar-tests/src/org/briarproject/sync/ValidationManagerImplTest.java @@ -0,0 +1,14 @@ +package org.briarproject.sync; + +import org.briarproject.BriarTestCase; +import org.junit.Test; + +import static org.junit.Assert.fail; + +public class ValidationManagerImplTest extends BriarTestCase { + + @Test + public void testUnitTestsExist() { + fail(); // FIXME: Write tests + } +}