mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-18 05:39:53 +01:00
Renamed VerificationExecutor, as it may be used for any crypto task.
This commit is contained in:
@@ -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.ElementType.PARAMETER;
|
||||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
@@ -8,8 +8,8 @@ import java.lang.annotation.Target;
|
|||||||
|
|
||||||
import com.google.inject.BindingAnnotation;
|
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
|
@BindingAnnotation
|
||||||
@Target({ PARAMETER })
|
@Target({ PARAMETER })
|
||||||
@Retention(RUNTIME)
|
@Retention(RUNTIME)
|
||||||
public @interface VerificationExecutor {}
|
public @interface CryptoExecutor {}
|
||||||
@@ -1,15 +1,38 @@
|
|||||||
package net.sf.briar.crypto;
|
package net.sf.briar.crypto;
|
||||||
|
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
import net.sf.briar.api.crypto.CryptoComponent;
|
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.AbstractModule;
|
||||||
import com.google.inject.Singleton;
|
import com.google.inject.Singleton;
|
||||||
|
|
||||||
public class CryptoModule extends AbstractModule {
|
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
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(CryptoComponent.class).to(
|
bind(CryptoComponent.class).to(
|
||||||
CryptoComponentImpl.class).in(Singleton.class);
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package net.sf.briar.messaging;
|
package net.sf.briar.messaging;
|
||||||
|
|
||||||
import java.util.concurrent.Executor;
|
|
||||||
|
|
||||||
import net.sf.briar.api.crypto.CryptoComponent;
|
import net.sf.briar.api.crypto.CryptoComponent;
|
||||||
import net.sf.briar.api.messaging.Author;
|
import net.sf.briar.api.messaging.Author;
|
||||||
import net.sf.briar.api.messaging.AuthorFactory;
|
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.PacketWriterFactory;
|
||||||
import net.sf.briar.api.messaging.SubscriptionUpdate;
|
import net.sf.briar.api.messaging.SubscriptionUpdate;
|
||||||
import net.sf.briar.api.messaging.UnverifiedMessage;
|
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.api.serial.StructReader;
|
||||||
import net.sf.briar.util.BoundedExecutor;
|
|
||||||
|
|
||||||
import com.google.inject.AbstractModule;
|
import com.google.inject.AbstractModule;
|
||||||
import com.google.inject.Provides;
|
import com.google.inject.Provides;
|
||||||
|
|
||||||
public class MessagingModule extends AbstractModule {
|
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
|
@Override
|
||||||
protected void configure() {
|
protected void configure() {
|
||||||
bind(AuthorFactory.class).to(AuthorFactoryImpl.class);
|
bind(AuthorFactory.class).to(AuthorFactoryImpl.class);
|
||||||
@@ -45,11 +26,6 @@ public class MessagingModule extends AbstractModule {
|
|||||||
bind(MessageVerifier.class).to(MessageVerifierImpl.class);
|
bind(MessageVerifier.class).to(MessageVerifierImpl.class);
|
||||||
bind(PacketReaderFactory.class).to(PacketReaderFactoryImpl.class);
|
bind(PacketReaderFactory.class).to(PacketReaderFactoryImpl.class);
|
||||||
bind(PacketWriterFactory.class).to(PacketWriterFactoryImpl.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
|
@Provides
|
||||||
|
|||||||
@@ -23,16 +23,17 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import net.sf.briar.api.ContactId;
|
import net.sf.briar.api.ContactId;
|
||||||
import net.sf.briar.api.FormatException;
|
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.DatabaseComponent;
|
||||||
import net.sf.briar.api.db.DatabaseExecutor;
|
import net.sf.briar.api.db.DatabaseExecutor;
|
||||||
import net.sf.briar.api.db.DbException;
|
import net.sf.briar.api.db.DbException;
|
||||||
import net.sf.briar.api.db.event.ContactRemovedEvent;
|
import net.sf.briar.api.db.event.ContactRemovedEvent;
|
||||||
import net.sf.briar.api.db.event.DatabaseEvent;
|
import net.sf.briar.api.db.event.DatabaseEvent;
|
||||||
import net.sf.briar.api.db.event.DatabaseListener;
|
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.LocalSubscriptionsUpdatedEvent;
|
||||||
import net.sf.briar.api.db.event.LocalTransportsUpdatedEvent;
|
import net.sf.briar.api.db.event.LocalTransportsUpdatedEvent;
|
||||||
import net.sf.briar.api.db.event.MessageAddedEvent;
|
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.MessageReceivedEvent;
|
||||||
import net.sf.briar.api.db.event.RatingChangedEvent;
|
import net.sf.briar.api.db.event.RatingChangedEvent;
|
||||||
import net.sf.briar.api.db.event.RemoteRetentionTimeUpdatedEvent;
|
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.TransportId;
|
||||||
import net.sf.briar.api.messaging.TransportUpdate;
|
import net.sf.briar.api.messaging.TransportUpdate;
|
||||||
import net.sf.briar.api.messaging.UnverifiedMessage;
|
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.plugins.duplex.DuplexTransportConnection;
|
||||||
import net.sf.briar.api.transport.ConnectionContext;
|
import net.sf.briar.api.transport.ConnectionContext;
|
||||||
import net.sf.briar.api.transport.ConnectionReader;
|
import net.sf.briar.api.transport.ConnectionReader;
|
||||||
@@ -97,7 +97,7 @@ abstract class DuplexConnection implements DatabaseListener {
|
|||||||
private volatile PacketWriter writer = null;
|
private volatile PacketWriter writer = null;
|
||||||
|
|
||||||
DuplexConnection(@DatabaseExecutor Executor dbExecutor,
|
DuplexConnection(@DatabaseExecutor Executor dbExecutor,
|
||||||
@VerificationExecutor Executor verificationExecutor,
|
@CryptoExecutor Executor verificationExecutor,
|
||||||
MessageVerifier messageVerifier, DatabaseComponent db,
|
MessageVerifier messageVerifier, DatabaseComponent db,
|
||||||
ConnectionRegistry connRegistry,
|
ConnectionRegistry connRegistry,
|
||||||
ConnectionReaderFactory connReaderFactory,
|
ConnectionReaderFactory connReaderFactory,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.concurrent.Executor;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import net.sf.briar.api.ContactId;
|
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.crypto.KeyManager;
|
||||||
import net.sf.briar.api.db.DatabaseComponent;
|
import net.sf.briar.api.db.DatabaseComponent;
|
||||||
import net.sf.briar.api.db.DatabaseExecutor;
|
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.PacketReaderFactory;
|
||||||
import net.sf.briar.api.messaging.PacketWriterFactory;
|
import net.sf.briar.api.messaging.PacketWriterFactory;
|
||||||
import net.sf.briar.api.messaging.TransportId;
|
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.messaging.duplex.DuplexConnectionFactory;
|
||||||
import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
|
import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
|
||||||
import net.sf.briar.api.transport.ConnectionContext;
|
import net.sf.briar.api.transport.ConnectionContext;
|
||||||
@@ -40,7 +40,7 @@ class DuplexConnectionFactoryImpl implements DuplexConnectionFactory {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
DuplexConnectionFactoryImpl(@DatabaseExecutor Executor dbExecutor,
|
DuplexConnectionFactoryImpl(@DatabaseExecutor Executor dbExecutor,
|
||||||
@VerificationExecutor Executor verificationExecutor,
|
@CryptoExecutor Executor verificationExecutor,
|
||||||
MessageVerifier messageVerifier, DatabaseComponent db,
|
MessageVerifier messageVerifier, DatabaseComponent db,
|
||||||
KeyManager keyManager, ConnectionRegistry connRegistry,
|
KeyManager keyManager, ConnectionRegistry connRegistry,
|
||||||
ConnectionReaderFactory connReaderFactory,
|
ConnectionReaderFactory connReaderFactory,
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ package net.sf.briar.messaging.duplex;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.Executor;
|
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.DatabaseComponent;
|
||||||
import net.sf.briar.api.db.DatabaseExecutor;
|
import net.sf.briar.api.db.DatabaseExecutor;
|
||||||
import net.sf.briar.api.messaging.MessageVerifier;
|
import net.sf.briar.api.messaging.MessageVerifier;
|
||||||
import net.sf.briar.api.messaging.PacketReaderFactory;
|
import net.sf.briar.api.messaging.PacketReaderFactory;
|
||||||
import net.sf.briar.api.messaging.PacketWriterFactory;
|
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.plugins.duplex.DuplexTransportConnection;
|
||||||
import net.sf.briar.api.transport.ConnectionContext;
|
import net.sf.briar.api.transport.ConnectionContext;
|
||||||
import net.sf.briar.api.transport.ConnectionReader;
|
import net.sf.briar.api.transport.ConnectionReader;
|
||||||
@@ -20,7 +20,7 @@ import net.sf.briar.api.transport.ConnectionWriterFactory;
|
|||||||
class IncomingDuplexConnection extends DuplexConnection {
|
class IncomingDuplexConnection extends DuplexConnection {
|
||||||
|
|
||||||
IncomingDuplexConnection(@DatabaseExecutor Executor dbExecutor,
|
IncomingDuplexConnection(@DatabaseExecutor Executor dbExecutor,
|
||||||
@VerificationExecutor Executor verificationExecutor,
|
@CryptoExecutor Executor verificationExecutor,
|
||||||
MessageVerifier messageVerifier, DatabaseComponent db,
|
MessageVerifier messageVerifier, DatabaseComponent db,
|
||||||
ConnectionRegistry connRegistry,
|
ConnectionRegistry connRegistry,
|
||||||
ConnectionReaderFactory connReaderFactory,
|
ConnectionReaderFactory connReaderFactory,
|
||||||
|
|||||||
@@ -3,12 +3,12 @@ package net.sf.briar.messaging.duplex;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.concurrent.Executor;
|
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.DatabaseComponent;
|
||||||
import net.sf.briar.api.db.DatabaseExecutor;
|
import net.sf.briar.api.db.DatabaseExecutor;
|
||||||
import net.sf.briar.api.messaging.MessageVerifier;
|
import net.sf.briar.api.messaging.MessageVerifier;
|
||||||
import net.sf.briar.api.messaging.PacketReaderFactory;
|
import net.sf.briar.api.messaging.PacketReaderFactory;
|
||||||
import net.sf.briar.api.messaging.PacketWriterFactory;
|
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.plugins.duplex.DuplexTransportConnection;
|
||||||
import net.sf.briar.api.transport.ConnectionContext;
|
import net.sf.briar.api.transport.ConnectionContext;
|
||||||
import net.sf.briar.api.transport.ConnectionReader;
|
import net.sf.briar.api.transport.ConnectionReader;
|
||||||
@@ -20,7 +20,7 @@ import net.sf.briar.api.transport.ConnectionWriterFactory;
|
|||||||
class OutgoingDuplexConnection extends DuplexConnection {
|
class OutgoingDuplexConnection extends DuplexConnection {
|
||||||
|
|
||||||
OutgoingDuplexConnection(@DatabaseExecutor Executor dbExecutor,
|
OutgoingDuplexConnection(@DatabaseExecutor Executor dbExecutor,
|
||||||
@VerificationExecutor Executor verificationExecutor,
|
@CryptoExecutor Executor verificationExecutor,
|
||||||
MessageVerifier messageVerifier, DatabaseComponent db,
|
MessageVerifier messageVerifier, DatabaseComponent db,
|
||||||
ConnectionRegistry connRegistry,
|
ConnectionRegistry connRegistry,
|
||||||
ConnectionReaderFactory connReaderFactory,
|
ConnectionReaderFactory connReaderFactory,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import java.util.logging.Logger;
|
|||||||
|
|
||||||
import net.sf.briar.api.ContactId;
|
import net.sf.briar.api.ContactId;
|
||||||
import net.sf.briar.api.FormatException;
|
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.DatabaseComponent;
|
||||||
import net.sf.briar.api.db.DatabaseExecutor;
|
import net.sf.briar.api.db.DatabaseExecutor;
|
||||||
import net.sf.briar.api.db.DbException;
|
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.TransportId;
|
||||||
import net.sf.briar.api.messaging.TransportUpdate;
|
import net.sf.briar.api.messaging.TransportUpdate;
|
||||||
import net.sf.briar.api.messaging.UnverifiedMessage;
|
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.plugins.simplex.SimplexTransportReader;
|
||||||
import net.sf.briar.api.transport.ConnectionContext;
|
import net.sf.briar.api.transport.ConnectionContext;
|
||||||
import net.sf.briar.api.transport.ConnectionReader;
|
import net.sf.briar.api.transport.ConnectionReader;
|
||||||
@@ -51,7 +51,7 @@ class IncomingSimplexConnection {
|
|||||||
private final TransportId transportId;
|
private final TransportId transportId;
|
||||||
|
|
||||||
IncomingSimplexConnection(@DatabaseExecutor Executor dbExecutor,
|
IncomingSimplexConnection(@DatabaseExecutor Executor dbExecutor,
|
||||||
@VerificationExecutor Executor verificationExecutor,
|
@CryptoExecutor Executor verificationExecutor,
|
||||||
MessageVerifier messageVerifier, DatabaseComponent db,
|
MessageVerifier messageVerifier, DatabaseComponent db,
|
||||||
ConnectionRegistry connRegistry,
|
ConnectionRegistry connRegistry,
|
||||||
ConnectionReaderFactory connReaderFactory,
|
ConnectionReaderFactory connReaderFactory,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.concurrent.Executor;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import net.sf.briar.api.ContactId;
|
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.crypto.KeyManager;
|
||||||
import net.sf.briar.api.db.DatabaseComponent;
|
import net.sf.briar.api.db.DatabaseComponent;
|
||||||
import net.sf.briar.api.db.DatabaseExecutor;
|
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.PacketReaderFactory;
|
||||||
import net.sf.briar.api.messaging.PacketWriterFactory;
|
import net.sf.briar.api.messaging.PacketWriterFactory;
|
||||||
import net.sf.briar.api.messaging.TransportId;
|
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.messaging.simplex.SimplexConnectionFactory;
|
||||||
import net.sf.briar.api.plugins.simplex.SimplexTransportReader;
|
import net.sf.briar.api.plugins.simplex.SimplexTransportReader;
|
||||||
import net.sf.briar.api.plugins.simplex.SimplexTransportWriter;
|
import net.sf.briar.api.plugins.simplex.SimplexTransportWriter;
|
||||||
@@ -41,7 +41,7 @@ class SimplexConnectionFactoryImpl implements SimplexConnectionFactory {
|
|||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
SimplexConnectionFactoryImpl(@DatabaseExecutor Executor dbExecutor,
|
SimplexConnectionFactoryImpl(@DatabaseExecutor Executor dbExecutor,
|
||||||
@VerificationExecutor Executor verificationExecutor,
|
@CryptoExecutor Executor verificationExecutor,
|
||||||
MessageVerifier messageVerifier, DatabaseComponent db,
|
MessageVerifier messageVerifier, DatabaseComponent db,
|
||||||
KeyManager keyManager, ConnectionRegistry connRegistry,
|
KeyManager keyManager, ConnectionRegistry connRegistry,
|
||||||
ConnectionReaderFactory connReaderFactory,
|
ConnectionReaderFactory connReaderFactory,
|
||||||
|
|||||||
Reference in New Issue
Block a user