diff --git a/briar-api/src/net/sf/briar/api/messaging/VerificationExecutor.java b/briar-api/src/net/sf/briar/api/crypto/CryptoExecutor.java similarity index 66% rename from briar-api/src/net/sf/briar/api/messaging/VerificationExecutor.java rename to briar-api/src/net/sf/briar/api/crypto/CryptoExecutor.java index 18e7da9661fda51b47e9e4198dfbd99a732ac30b..346ed893873589647d31d04d1e78085016433883 100644 --- a/briar-api/src/net/sf/briar/api/messaging/VerificationExecutor.java +++ b/briar-api/src/net/sf/briar/api/crypto/CryptoExecutor.java @@ -1,4 +1,4 @@ -package net.sf.briar.api.messaging; +package net.sf.briar.api.crypto; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -8,8 +8,8 @@ import java.lang.annotation.Target; import com.google.inject.BindingAnnotation; -/** Annotation for injecting the executor for message verification tasks. */ +/** Annotation for injecting the executor for long-running crypto tasks. */ @BindingAnnotation @Target({ PARAMETER }) @Retention(RUNTIME) -public @interface VerificationExecutor {} +public @interface CryptoExecutor {} diff --git a/briar-core/src/net/sf/briar/crypto/CryptoModule.java b/briar-core/src/net/sf/briar/crypto/CryptoModule.java index 517111b601dbc49bb54e725919f95df32950ca06..d006d07c8ca4627acd035eba6fa119c1b3f67500 100644 --- a/briar-core/src/net/sf/briar/crypto/CryptoModule.java +++ b/briar-core/src/net/sf/briar/crypto/CryptoModule.java @@ -1,15 +1,38 @@ package net.sf.briar.crypto; +import java.util.concurrent.Executor; + import net.sf.briar.api.crypto.CryptoComponent; +import net.sf.briar.api.crypto.CryptoExecutor; +import net.sf.briar.util.BoundedExecutor; import com.google.inject.AbstractModule; import com.google.inject.Singleton; public class CryptoModule extends AbstractModule { + // FIXME: Determine suitable values for these constants empirically + + /** + * The maximum number of tasks that can be queued for execution before + * submitting another task will block. + */ + private static final int MAX_QUEUED_EXECUTOR_TASKS = 10; + + /** The minimum number of executor threads to keep in the pool. */ + private static final int MIN_EXECUTOR_THREADS = 1; + + /** The maximum number of executor threads. */ + private static final int MAX_EXECUTOR_THREADS = + Runtime.getRuntime().availableProcessors(); + @Override protected void configure() { bind(CryptoComponent.class).to( CryptoComponentImpl.class).in(Singleton.class); + // The executor is bounded, so tasks must be independent and short-lived + bind(Executor.class).annotatedWith(CryptoExecutor.class).toInstance( + new BoundedExecutor(MAX_QUEUED_EXECUTOR_TASKS, + MIN_EXECUTOR_THREADS, MAX_EXECUTOR_THREADS)); } } diff --git a/briar-core/src/net/sf/briar/messaging/MessagingModule.java b/briar-core/src/net/sf/briar/messaging/MessagingModule.java index 573a3f32b39b548b7f791c74c266f4314732b7a7..c98dd04675ef925d8646987cf149d5646871ffc8 100644 --- a/briar-core/src/net/sf/briar/messaging/MessagingModule.java +++ b/briar-core/src/net/sf/briar/messaging/MessagingModule.java @@ -1,7 +1,5 @@ package net.sf.briar.messaging; -import java.util.concurrent.Executor; - import net.sf.briar.api.crypto.CryptoComponent; import net.sf.briar.api.messaging.Author; import net.sf.briar.api.messaging.AuthorFactory; @@ -13,30 +11,13 @@ import net.sf.briar.api.messaging.PacketReaderFactory; import net.sf.briar.api.messaging.PacketWriterFactory; import net.sf.briar.api.messaging.SubscriptionUpdate; import net.sf.briar.api.messaging.UnverifiedMessage; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.serial.StructReader; -import net.sf.briar.util.BoundedExecutor; import com.google.inject.AbstractModule; import com.google.inject.Provides; public class MessagingModule extends AbstractModule { - // FIXME: Determine suitable values for these constants empirically - - /** - * The maximum number of verification tasks that can be queued for - * execution before submitting another task will block. - */ - private static final int MAX_QUEUED_VERIFIER_TASKS = 10; - - /** The minimum number of verification threads to keep in the pool. */ - private static final int MIN_VERIFIER_THREADS = 1; - - /** The maximum number of verification threads. */ - private static final int MAX_VERIFIER_THREADS = - Runtime.getRuntime().availableProcessors(); - @Override protected void configure() { bind(AuthorFactory.class).to(AuthorFactoryImpl.class); @@ -45,11 +26,6 @@ public class MessagingModule extends AbstractModule { bind(MessageVerifier.class).to(MessageVerifierImpl.class); bind(PacketReaderFactory.class).to(PacketReaderFactoryImpl.class); bind(PacketWriterFactory.class).to(PacketWriterFactoryImpl.class); - // The executor is bounded, so tasks must be independent and short-lived - bind(Executor.class).annotatedWith( - VerificationExecutor.class).toInstance( - new BoundedExecutor(MAX_QUEUED_VERIFIER_TASKS, - MIN_VERIFIER_THREADS, MAX_VERIFIER_THREADS)); } @Provides diff --git a/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java b/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java index 310c4d304c9d14ae9e42fc354f52bebf2827a252..9b56a720bff76a68937105d613f304699ed65431 100644 --- a/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java +++ b/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java @@ -23,16 +23,17 @@ import java.util.logging.Logger; import net.sf.briar.api.ContactId; import net.sf.briar.api.FormatException; +import net.sf.briar.api.crypto.CryptoExecutor; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseExecutor; import net.sf.briar.api.db.DbException; import net.sf.briar.api.db.event.ContactRemovedEvent; import net.sf.briar.api.db.event.DatabaseEvent; import net.sf.briar.api.db.event.DatabaseListener; -import net.sf.briar.api.db.event.MessageExpiredEvent; import net.sf.briar.api.db.event.LocalSubscriptionsUpdatedEvent; import net.sf.briar.api.db.event.LocalTransportsUpdatedEvent; import net.sf.briar.api.db.event.MessageAddedEvent; +import net.sf.briar.api.db.event.MessageExpiredEvent; import net.sf.briar.api.db.event.MessageReceivedEvent; import net.sf.briar.api.db.event.RatingChangedEvent; import net.sf.briar.api.db.event.RemoteRetentionTimeUpdatedEvent; @@ -56,7 +57,6 @@ import net.sf.briar.api.messaging.TransportAck; import net.sf.briar.api.messaging.TransportId; import net.sf.briar.api.messaging.TransportUpdate; import net.sf.briar.api.messaging.UnverifiedMessage; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.plugins.duplex.DuplexTransportConnection; import net.sf.briar.api.transport.ConnectionContext; import net.sf.briar.api.transport.ConnectionReader; @@ -97,7 +97,7 @@ abstract class DuplexConnection implements DatabaseListener { private volatile PacketWriter writer = null; DuplexConnection(@DatabaseExecutor Executor dbExecutor, - @VerificationExecutor Executor verificationExecutor, + @CryptoExecutor Executor verificationExecutor, MessageVerifier messageVerifier, DatabaseComponent db, ConnectionRegistry connRegistry, ConnectionReaderFactory connReaderFactory, diff --git a/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnectionFactoryImpl.java b/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnectionFactoryImpl.java index b23476890a2f2b725092de44e766d776c738630a..2c98cbf690327c548a1629b04932aa8df3a6f020 100644 --- a/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnectionFactoryImpl.java +++ b/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnectionFactoryImpl.java @@ -6,6 +6,7 @@ import java.util.concurrent.Executor; import java.util.logging.Logger; import net.sf.briar.api.ContactId; +import net.sf.briar.api.crypto.CryptoExecutor; import net.sf.briar.api.crypto.KeyManager; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseExecutor; @@ -13,7 +14,6 @@ import net.sf.briar.api.messaging.MessageVerifier; import net.sf.briar.api.messaging.PacketReaderFactory; import net.sf.briar.api.messaging.PacketWriterFactory; import net.sf.briar.api.messaging.TransportId; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.messaging.duplex.DuplexConnectionFactory; import net.sf.briar.api.plugins.duplex.DuplexTransportConnection; import net.sf.briar.api.transport.ConnectionContext; @@ -40,7 +40,7 @@ class DuplexConnectionFactoryImpl implements DuplexConnectionFactory { @Inject DuplexConnectionFactoryImpl(@DatabaseExecutor Executor dbExecutor, - @VerificationExecutor Executor verificationExecutor, + @CryptoExecutor Executor verificationExecutor, MessageVerifier messageVerifier, DatabaseComponent db, KeyManager keyManager, ConnectionRegistry connRegistry, ConnectionReaderFactory connReaderFactory, diff --git a/briar-core/src/net/sf/briar/messaging/duplex/IncomingDuplexConnection.java b/briar-core/src/net/sf/briar/messaging/duplex/IncomingDuplexConnection.java index 64314943b395e0b1ba21d64b9f82c3d26874b2e4..08e955af9b4f4e9111ab1a4d3dbc10aef70043c4 100644 --- a/briar-core/src/net/sf/briar/messaging/duplex/IncomingDuplexConnection.java +++ b/briar-core/src/net/sf/briar/messaging/duplex/IncomingDuplexConnection.java @@ -3,12 +3,12 @@ package net.sf.briar.messaging.duplex; import java.io.IOException; import java.util.concurrent.Executor; +import net.sf.briar.api.crypto.CryptoExecutor; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseExecutor; import net.sf.briar.api.messaging.MessageVerifier; import net.sf.briar.api.messaging.PacketReaderFactory; import net.sf.briar.api.messaging.PacketWriterFactory; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.plugins.duplex.DuplexTransportConnection; import net.sf.briar.api.transport.ConnectionContext; import net.sf.briar.api.transport.ConnectionReader; @@ -20,7 +20,7 @@ import net.sf.briar.api.transport.ConnectionWriterFactory; class IncomingDuplexConnection extends DuplexConnection { IncomingDuplexConnection(@DatabaseExecutor Executor dbExecutor, - @VerificationExecutor Executor verificationExecutor, + @CryptoExecutor Executor verificationExecutor, MessageVerifier messageVerifier, DatabaseComponent db, ConnectionRegistry connRegistry, ConnectionReaderFactory connReaderFactory, diff --git a/briar-core/src/net/sf/briar/messaging/duplex/OutgoingDuplexConnection.java b/briar-core/src/net/sf/briar/messaging/duplex/OutgoingDuplexConnection.java index dd24410e6f55d0b5c028c7b2e3d2befa25a57772..2a852a45c14ce4b78a6daf361c0e8b7684d9988a 100644 --- a/briar-core/src/net/sf/briar/messaging/duplex/OutgoingDuplexConnection.java +++ b/briar-core/src/net/sf/briar/messaging/duplex/OutgoingDuplexConnection.java @@ -3,12 +3,12 @@ package net.sf.briar.messaging.duplex; import java.io.IOException; import java.util.concurrent.Executor; +import net.sf.briar.api.crypto.CryptoExecutor; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseExecutor; import net.sf.briar.api.messaging.MessageVerifier; import net.sf.briar.api.messaging.PacketReaderFactory; import net.sf.briar.api.messaging.PacketWriterFactory; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.plugins.duplex.DuplexTransportConnection; import net.sf.briar.api.transport.ConnectionContext; import net.sf.briar.api.transport.ConnectionReader; @@ -20,7 +20,7 @@ import net.sf.briar.api.transport.ConnectionWriterFactory; class OutgoingDuplexConnection extends DuplexConnection { OutgoingDuplexConnection(@DatabaseExecutor Executor dbExecutor, - @VerificationExecutor Executor verificationExecutor, + @CryptoExecutor Executor verificationExecutor, MessageVerifier messageVerifier, DatabaseComponent db, ConnectionRegistry connRegistry, ConnectionReaderFactory connReaderFactory, diff --git a/briar-core/src/net/sf/briar/messaging/simplex/IncomingSimplexConnection.java b/briar-core/src/net/sf/briar/messaging/simplex/IncomingSimplexConnection.java index 9339616c36dd0c0738e67e6d487c9f6e71ea5a6c..bac3930cabc0cfca536f688a8b7f40e23e38c766 100644 --- a/briar-core/src/net/sf/briar/messaging/simplex/IncomingSimplexConnection.java +++ b/briar-core/src/net/sf/briar/messaging/simplex/IncomingSimplexConnection.java @@ -10,6 +10,7 @@ import java.util.logging.Logger; import net.sf.briar.api.ContactId; import net.sf.briar.api.FormatException; +import net.sf.briar.api.crypto.CryptoExecutor; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseExecutor; import net.sf.briar.api.db.DbException; @@ -26,7 +27,6 @@ import net.sf.briar.api.messaging.TransportAck; import net.sf.briar.api.messaging.TransportId; import net.sf.briar.api.messaging.TransportUpdate; import net.sf.briar.api.messaging.UnverifiedMessage; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.plugins.simplex.SimplexTransportReader; import net.sf.briar.api.transport.ConnectionContext; import net.sf.briar.api.transport.ConnectionReader; @@ -51,7 +51,7 @@ class IncomingSimplexConnection { private final TransportId transportId; IncomingSimplexConnection(@DatabaseExecutor Executor dbExecutor, - @VerificationExecutor Executor verificationExecutor, + @CryptoExecutor Executor verificationExecutor, MessageVerifier messageVerifier, DatabaseComponent db, ConnectionRegistry connRegistry, ConnectionReaderFactory connReaderFactory, diff --git a/briar-core/src/net/sf/briar/messaging/simplex/SimplexConnectionFactoryImpl.java b/briar-core/src/net/sf/briar/messaging/simplex/SimplexConnectionFactoryImpl.java index 7a3f1c33722cf150680618279f450234dbd299c6..5764c512b3a47610988bcf12fc4d5d80d872e633 100644 --- a/briar-core/src/net/sf/briar/messaging/simplex/SimplexConnectionFactoryImpl.java +++ b/briar-core/src/net/sf/briar/messaging/simplex/SimplexConnectionFactoryImpl.java @@ -6,6 +6,7 @@ import java.util.concurrent.Executor; import java.util.logging.Logger; import net.sf.briar.api.ContactId; +import net.sf.briar.api.crypto.CryptoExecutor; import net.sf.briar.api.crypto.KeyManager; import net.sf.briar.api.db.DatabaseComponent; import net.sf.briar.api.db.DatabaseExecutor; @@ -13,7 +14,6 @@ import net.sf.briar.api.messaging.MessageVerifier; import net.sf.briar.api.messaging.PacketReaderFactory; import net.sf.briar.api.messaging.PacketWriterFactory; import net.sf.briar.api.messaging.TransportId; -import net.sf.briar.api.messaging.VerificationExecutor; import net.sf.briar.api.messaging.simplex.SimplexConnectionFactory; import net.sf.briar.api.plugins.simplex.SimplexTransportReader; import net.sf.briar.api.plugins.simplex.SimplexTransportWriter; @@ -41,7 +41,7 @@ class SimplexConnectionFactoryImpl implements SimplexConnectionFactory { @Inject SimplexConnectionFactoryImpl(@DatabaseExecutor Executor dbExecutor, - @VerificationExecutor Executor verificationExecutor, + @CryptoExecutor Executor verificationExecutor, MessageVerifier messageVerifier, DatabaseComponent db, KeyManager keyManager, ConnectionRegistry connRegistry, ConnectionReaderFactory connReaderFactory,