![JAR search and dependency download from the Maven repository](/logo.png)
org.jivesoftware.openfire.spi.ConnectionConfiguration Maven / Gradle / Ivy
The newest version!
package org.jivesoftware.openfire.spi;
import org.jivesoftware.openfire.Connection;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.keystore.*;
import java.net.InetAddress;
import java.util.*;
/**
* Configuration for a socket connection.
*
* Instances of this class are thread-safe, with the exception of the internal state of the #bindAddress property.
*
* @author Guus der Kinderen, [email protected]
*/
public class ConnectionConfiguration
{
private final boolean enabled;
private final ConnectionType type;
private final int maxThreadPoolSize;
private final int maxBufferSize;
private final Connection.ClientAuth clientAuth;
private final InetAddress bindAddress;
private final int port;
private final Connection.TLSPolicy tlsPolicy;
private final CertificateStoreConfiguration identityStoreConfiguration;
private final CertificateStoreConfiguration trustStoreConfiguration;
private final boolean acceptSelfSignedCertificates;
private final boolean verifyCertificateValidity;
private final Set encryptionProtocols;
private final Set encryptionCipherSuites;
private final Connection.CompressionPolicy compressionPolicy;
// derived
private final IdentityStore identityStore;
private final TrustStore trustStore;
/**
* @param type
* @param enabled
* @param maxThreadPoolSize The maximum number of threads that are to be used to processing network activity. Must be equal to or larger than one.
* @param maxBufferSize The maximum amount of bytes of the read buffer that I/O processor allocates per each read, or a non-positive value to configure no maximum.
* @param clientAuth specification if peers should be authenticated ('mutual authentication') (cannot be null).
* @param bindAddress The network address on which connections are accepted, or null when any local address can be used.
* @param port The TCP port number on which connections are accepted (must be a valid TCP port number).
* @param tlsPolicy The TLS policy that is applied to connections (cannot be null).
*/
// TODO input validation
public ConnectionConfiguration( ConnectionType type, boolean enabled, int maxThreadPoolSize, int maxBufferSize, Connection.ClientAuth clientAuth, InetAddress bindAddress, int port, Connection.TLSPolicy tlsPolicy, CertificateStoreConfiguration identityStoreConfiguration, CertificateStoreConfiguration trustStoreConfiguration, boolean acceptSelfSignedCertificates, boolean verifyCertificateValidity, Set encryptionProtocols, Set encryptionCipherSuites, Connection.CompressionPolicy compressionPolicy )
{
if ( maxThreadPoolSize <= 0 ) {
throw new IllegalArgumentException( "Argument 'maxThreadPoolSize' must be equal to or greater than one." );
}
if ( clientAuth == null ) {
throw new IllegalArgumentException( "Argument 'clientAuth' cannot be null." );
}
this.enabled = enabled;
this.tlsPolicy = tlsPolicy;
this.type = type;
this.maxThreadPoolSize = maxThreadPoolSize;
this.maxBufferSize = maxBufferSize;
this.clientAuth = clientAuth;
this.bindAddress = bindAddress;
this.port = port;
this.identityStoreConfiguration = identityStoreConfiguration;
this.trustStoreConfiguration = trustStoreConfiguration;
this.acceptSelfSignedCertificates = acceptSelfSignedCertificates;
this.verifyCertificateValidity = verifyCertificateValidity;
this.encryptionProtocols = Collections.unmodifiableSet( encryptionProtocols );
this.encryptionCipherSuites = Collections.unmodifiableSet( encryptionCipherSuites );
this.compressionPolicy = compressionPolicy;
final CertificateStoreManager certificateStoreManager = XMPPServer.getInstance().getCertificateStoreManager();
this.identityStore = certificateStoreManager.getIdentityStore( type );
this.trustStore = certificateStoreManager.getTrustStore( type );
}
public Connection.TLSPolicy getTlsPolicy()
{
return tlsPolicy;
}
public Connection.CompressionPolicy getCompressionPolicy()
{
return compressionPolicy;
}
public ConnectionType getType()
{
return type;
}
public int getMaxThreadPoolSize()
{
return maxThreadPoolSize;
}
public int getMaxBufferSize()
{
return maxBufferSize;
}
public Connection.ClientAuth getClientAuth()
{
return clientAuth;
}
public InetAddress getBindAddress()
{
return bindAddress;
}
public int getPort()
{
return port;
}
public CertificateStoreConfiguration getIdentityStoreConfiguration()
{
return identityStoreConfiguration;
}
public CertificateStoreConfiguration getTrustStoreConfiguration()
{
return trustStoreConfiguration;
}
/**
* A boolean that indicates if self-signed peer certificates can be used to establish an encrypted connection.
*
* @return true when self-signed certificates are accepted, otherwise false.
*/
public boolean isAcceptSelfSignedCertificates()
{
return acceptSelfSignedCertificates;
}
/**
* A boolean that indicates if the current validity of certificates (based on their 'notBefore' and 'notAfter'
* property values) is used when they are used to establish an encrypted connection..
*
* @return true when certificates are required to be valid to establish a secured connection, otherwise false.
*/
public boolean isVerifyCertificateValidity()
{
return verifyCertificateValidity;
}
/**
* A collection of protocol names that can be used for encryption of connections.
*
* When non-empty, the list is intended to specify those protocols (from a larger collection of implementation-
* supported protocols) that can be used to establish encryption.
*
* The order over which values are iterated in the result is equal to the order of values in the comma-separated
* configuration string. This can, but is not guaranteed to, indicate preference.
*
* @return An (ordered) set of protocols, never null but possibly empty.
*/
public Set getEncryptionProtocols()
{
return encryptionProtocols;
}
/**
* A collection of cipher suite names that can be used for encryption of connections.
*
* When non-empty, the list is intended to specify those cipher suites (from a larger collection of implementation-
* supported cipher suites) that can be used to establish encryption.
*
* The order over which values are iterated in the result is equal to the order of values in the comma-separated
* configuration string. This can, but is not guaranteed to, indicate preference.
*
* @return An (ordered) set of cipher suites, never null but possibly empty.
*/
public Set getEncryptionCipherSuites()
{
return encryptionCipherSuites;
}
public IdentityStore getIdentityStore()
{
return identityStore;
}
public TrustStore getTrustStore()
{
return trustStore;
}
public boolean isEnabled()
{
return enabled;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy