/*
 * Copyright (c) 2011-2017 Contributors to the Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
 * which is available at https://www.apache.org/licenses/LICENSE-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
 */

package io.vertx.core.net;

import io.vertx.codegen.annotations.DataObject;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;

import java.util.*;
import java.util.concurrent.TimeUnit;

Base class. TCP and SSL related options
Author:Tim Fox
/** * Base class. TCP and SSL related options * * @author <a href="http://tfox.org">Tim Fox</a> */
@DataObject(generateConverter = true, publicConverter = false) public abstract class TCPSSLOptions extends NetworkOptions {
The default value of TCP-no-delay = true (Nagle disabled)
/** * The default value of TCP-no-delay = true (Nagle disabled) */
public static final boolean DEFAULT_TCP_NO_DELAY = true;
The default value of TCP keep alive = false
/** * The default value of TCP keep alive = false */
public static final boolean DEFAULT_TCP_KEEP_ALIVE = false;
The default value of SO_linger = -1
/** * The default value of SO_linger = -1 */
public static final int DEFAULT_SO_LINGER = -1;
The default value of Netty use pooled buffers = false
/** * The default value of Netty use pooled buffers = false */
public static final boolean DEFAULT_USE_POOLED_BUFFERS = false;
SSL enable by default = false
/** * SSL enable by default = false */
public static final boolean DEFAULT_SSL = false;
Default idle timeout = 0
/** * Default idle timeout = 0 */
public static final int DEFAULT_IDLE_TIMEOUT = 0;
Default idle time unit = SECONDS
/** * Default idle time unit = SECONDS */
public static final TimeUnit DEFAULT_IDLE_TIMEOUT_TIME_UNIT = TimeUnit.SECONDS;
Default use alpn = false
/** * Default use alpn = false */
public static final boolean DEFAULT_USE_ALPN = false;
The default SSL engine options = null (autoguess)
/** * The default SSL engine options = null (autoguess) */
public static final SSLEngineOptions DEFAULT_SSL_ENGINE = null;
The default ENABLED_SECURE_TRANSPORT_PROTOCOLS value = { "SSLv2Hello", "TLSv1", "TLSv1.1", "TLSv1.2" }

SSLv3 is NOT enabled due to POODLE vulnerability http://en.wikipedia.org/wiki/POODLE

"SSLv2Hello" is NOT enabled since it's disabled by default since JDK7
/** * The default ENABLED_SECURE_TRANSPORT_PROTOCOLS value = { "SSLv2Hello", "TLSv1", "TLSv1.1", "TLSv1.2" } * <p/> * SSLv3 is NOT enabled due to POODLE vulnerability http://en.wikipedia.org/wiki/POODLE * <p/> * "SSLv2Hello" is NOT enabled since it's disabled by default since JDK7 */
public static final List<String> DEFAULT_ENABLED_SECURE_TRANSPORT_PROTOCOLS = Collections.unmodifiableList(Arrays.asList("TLSv1", "TLSv1.1", "TLSv1.2"));
The default TCP_FASTOPEN value = false
/** * The default TCP_FASTOPEN value = false */
public static final boolean DEFAULT_TCP_FAST_OPEN = false;
The default TCP_CORK value = false
/** * The default TCP_CORK value = false */
public static final boolean DEFAULT_TCP_CORK = false;
The default TCP_QUICKACK value = false
/** * The default TCP_QUICKACK value = false */
public static final boolean DEFAULT_TCP_QUICKACK = false;
The default value of SSL handshake timeout = 10
/** * The default value of SSL handshake timeout = 10 */
public static final long DEFAULT_SSL_HANDSHAKE_TIMEOUT = 10L;
Default SSL handshake time unit = SECONDS
/** * Default SSL handshake time unit = SECONDS */
public static final TimeUnit DEFAULT_SSL_HANDSHAKE_TIMEOUT_TIME_UNIT = TimeUnit.SECONDS; private boolean tcpNoDelay; private boolean tcpKeepAlive; private int soLinger; private boolean usePooledBuffers; private int idleTimeout; private TimeUnit idleTimeoutUnit; private boolean ssl; private long sslHandshakeTimeout; private TimeUnit sslHandshakeTimeoutUnit; private KeyCertOptions keyCertOptions; private TrustOptions trustOptions; private Set<String> enabledCipherSuites; private ArrayList<String> crlPaths; private ArrayList<Buffer> crlValues; private boolean useAlpn; private SSLEngineOptions sslEngineOptions; private Set<String> enabledSecureTransportProtocols; private boolean tcpFastOpen; private boolean tcpCork; private boolean tcpQuickAck;
Default constructor
/** * Default constructor */
public TCPSSLOptions() { super(); init(); }
Copy constructor
Params:
  • other – the options to copy
/** * Copy constructor * * @param other the options to copy */
public TCPSSLOptions(TCPSSLOptions other) { super(other); this.tcpNoDelay = other.isTcpNoDelay(); this.tcpKeepAlive = other.isTcpKeepAlive(); this.soLinger = other.getSoLinger(); this.usePooledBuffers = other.isUsePooledBuffers(); this.idleTimeout = other.getIdleTimeout(); this.idleTimeoutUnit = other.getIdleTimeoutUnit() != null ? other.getIdleTimeoutUnit() : DEFAULT_IDLE_TIMEOUT_TIME_UNIT; this.ssl = other.isSsl(); this.sslHandshakeTimeout = other.sslHandshakeTimeout; this.sslHandshakeTimeoutUnit = other.getSslHandshakeTimeoutUnit() != null ? other.getSslHandshakeTimeoutUnit() : DEFAULT_SSL_HANDSHAKE_TIMEOUT_TIME_UNIT; this.keyCertOptions = other.getKeyCertOptions() != null ? other.getKeyCertOptions().copy() : null; this.trustOptions = other.getTrustOptions() != null ? other.getTrustOptions().copy() : null; this.enabledCipherSuites = other.getEnabledCipherSuites() == null ? new LinkedHashSet<>() : new LinkedHashSet<>(other.getEnabledCipherSuites()); this.crlPaths = new ArrayList<>(other.getCrlPaths()); this.crlValues = new ArrayList<>(other.getCrlValues()); this.useAlpn = other.useAlpn; this.sslEngineOptions = other.sslEngineOptions != null ? other.sslEngineOptions.copy() : null; this.enabledSecureTransportProtocols = other.getEnabledSecureTransportProtocols() == null ? new LinkedHashSet<>() : new LinkedHashSet<>(other.getEnabledSecureTransportProtocols()); this.tcpFastOpen = other.isTcpFastOpen(); this.tcpCork = other.isTcpCork(); this.tcpQuickAck = other.isTcpQuickAck(); }
Create options from JSON
Params:
  • json – the JSON
/** * Create options from JSON * * @param json the JSON */
public TCPSSLOptions(JsonObject json) { super(json); init(); TCPSSLOptionsConverter.fromJson(json ,this); }
Convert to JSON
Returns:the JSON
/** * Convert to JSON * * @return the JSON */
public JsonObject toJson() { JsonObject json = super.toJson(); TCPSSLOptionsConverter.toJson(this, json); return json; } private void init() { tcpNoDelay = DEFAULT_TCP_NO_DELAY; tcpKeepAlive = DEFAULT_TCP_KEEP_ALIVE; soLinger = DEFAULT_SO_LINGER; usePooledBuffers = DEFAULT_USE_POOLED_BUFFERS; idleTimeout = DEFAULT_IDLE_TIMEOUT; idleTimeoutUnit = DEFAULT_IDLE_TIMEOUT_TIME_UNIT; ssl = DEFAULT_SSL; sslHandshakeTimeout = DEFAULT_SSL_HANDSHAKE_TIMEOUT; sslHandshakeTimeoutUnit = DEFAULT_SSL_HANDSHAKE_TIMEOUT_TIME_UNIT; enabledCipherSuites = new LinkedHashSet<>(); crlPaths = new ArrayList<>(); crlValues = new ArrayList<>(); useAlpn = DEFAULT_USE_ALPN; sslEngineOptions = DEFAULT_SSL_ENGINE; enabledSecureTransportProtocols = new LinkedHashSet<>(DEFAULT_ENABLED_SECURE_TRANSPORT_PROTOCOLS); tcpFastOpen = DEFAULT_TCP_FAST_OPEN; tcpCork = DEFAULT_TCP_CORK; tcpQuickAck = DEFAULT_TCP_QUICKACK; }
Returns:TCP no delay enabled ?
/** * @return TCP no delay enabled ? */
public boolean isTcpNoDelay() { return tcpNoDelay; }
Set whether TCP no delay is enabled
Params:
  • tcpNoDelay – true if TCP no delay is enabled (Nagle disabled)
Returns:a reference to this, so the API can be used fluently
/** * Set whether TCP no delay is enabled * * @param tcpNoDelay true if TCP no delay is enabled (Nagle disabled) * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setTcpNoDelay(boolean tcpNoDelay) { this.tcpNoDelay = tcpNoDelay; return this; }
Returns:is TCP keep alive enabled?
/** * @return is TCP keep alive enabled? */
public boolean isTcpKeepAlive() { return tcpKeepAlive; }
Set whether TCP keep alive is enabled
Params:
  • tcpKeepAlive – true if TCP keep alive is enabled
Returns:a reference to this, so the API can be used fluently
/** * Set whether TCP keep alive is enabled * * @param tcpKeepAlive true if TCP keep alive is enabled * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setTcpKeepAlive(boolean tcpKeepAlive) { this.tcpKeepAlive = tcpKeepAlive; return this; }
Returns:is SO_linger enabled
/** * * @return is SO_linger enabled */
public int getSoLinger() { return soLinger; }
Set whether SO_linger keep alive is enabled
Params:
  • soLinger – true if SO_linger is enabled
Returns:a reference to this, so the API can be used fluently
/** * Set whether SO_linger keep alive is enabled * * @param soLinger true if SO_linger is enabled * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setSoLinger(int soLinger) { if (soLinger < 0 && soLinger != DEFAULT_SO_LINGER) { throw new IllegalArgumentException("soLinger must be >= 0"); } this.soLinger = soLinger; return this; }
Returns:are Netty pooled buffers enabled?
Deprecated:this has no effect, just don't use it
/** * @return are Netty pooled buffers enabled? * @deprecated this has no effect, just don't use it */
@Deprecated public boolean isUsePooledBuffers() { return usePooledBuffers; }
Set whether Netty pooled buffers are enabled
Params:
  • usePooledBuffers – true if pooled buffers enabled
Returns:a reference to this, so the API can be used fluently
Deprecated:this has no effect, just don't use it
/** * Set whether Netty pooled buffers are enabled * * @param usePooledBuffers true if pooled buffers enabled * @return a reference to this, so the API can be used fluently * @deprecated this has no effect, just don't use it */
@Deprecated public TCPSSLOptions setUsePooledBuffers(boolean usePooledBuffers) { this.usePooledBuffers = usePooledBuffers; return this; }
Set the idle timeout, default time unit is seconds. Zero means don't timeout. This determines if a connection will timeout and be closed if no data is received within the timeout. If you want change default time unit, use setIdleTimeoutUnit(TimeUnit)
Params:
  • idleTimeout – the timeout, in seconds
Returns:a reference to this, so the API can be used fluently
/** * Set the idle timeout, default time unit is seconds. Zero means don't timeout. * This determines if a connection will timeout and be closed if no data is received within the timeout. * * If you want change default time unit, use {@link #setIdleTimeoutUnit(TimeUnit)} * * @param idleTimeout the timeout, in seconds * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setIdleTimeout(int idleTimeout) { if (idleTimeout < 0) { throw new IllegalArgumentException("idleTimeout must be >= 0"); } this.idleTimeout = idleTimeout; return this; }
Returns:the idle timeout, in time unit specified by getIdleTimeoutUnit().
/** * @return the idle timeout, in time unit specified by {@link #getIdleTimeoutUnit()}. */
public int getIdleTimeout() { return idleTimeout; }
Set the idle timeout unit. If not specified, default is seconds.
Params:
  • idleTimeoutUnit – specify time unit.
Returns:a reference to this, so the API can be used fluently
/** * Set the idle timeout unit. If not specified, default is seconds. * * @param idleTimeoutUnit specify time unit. * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setIdleTimeoutUnit(TimeUnit idleTimeoutUnit) { this.idleTimeoutUnit = idleTimeoutUnit; return this; }
Returns:the idle timeout unit.
/** * @return the idle timeout unit. */
public TimeUnit getIdleTimeoutUnit() { return idleTimeoutUnit; }
Returns:is SSL/TLS enabled?
/** * * @return is SSL/TLS enabled? */
public boolean isSsl() { return ssl; }
Set whether SSL/TLS is enabled
Params:
  • ssl – true if enabled
Returns:a reference to this, so the API can be used fluently
/** * Set whether SSL/TLS is enabled * * @param ssl true if enabled * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setSsl(boolean ssl) { this.ssl = ssl; return this; }
Returns:the key/cert options
/** * @return the key/cert options */
@GenIgnore public KeyCertOptions getKeyCertOptions() { return keyCertOptions; }
Set the key/cert options.
Params:
  • options – the key store options
Returns:a reference to this, so the API can be used fluently
/** * Set the key/cert options. * * @param options the key store options * @return a reference to this, so the API can be used fluently */
@GenIgnore public TCPSSLOptions setKeyCertOptions(KeyCertOptions options) { this.keyCertOptions = options; return this; }
Get the key/cert options in jks format, aka Java keystore.
Returns:the key/cert options in jks format, aka Java keystore.
/** * Get the key/cert options in jks format, aka Java keystore. * * @return the key/cert options in jks format, aka Java keystore. */
public JksOptions getKeyStoreOptions() { return keyCertOptions instanceof JksOptions ? (JksOptions) keyCertOptions : null; }
Set the key/cert options in jks format, aka Java keystore.
Params:
  • options – the key store in jks format
Returns:a reference to this, so the API can be used fluently
/** * Set the key/cert options in jks format, aka Java keystore. * @param options the key store in jks format * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setKeyStoreOptions(JksOptions options) { this.keyCertOptions = options; return this; }
Get the key/cert options in pfx format.
Returns:the key/cert options in pfx format.
/** * Get the key/cert options in pfx format. * * @return the key/cert options in pfx format. */
public PfxOptions getPfxKeyCertOptions() { return keyCertOptions instanceof PfxOptions ? (PfxOptions) keyCertOptions : null; }
Set the key/cert options in pfx format.
Params:
  • options – the key cert options in pfx format
Returns:a reference to this, so the API can be used fluently
/** * Set the key/cert options in pfx format. * @param options the key cert options in pfx format * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setPfxKeyCertOptions(PfxOptions options) { this.keyCertOptions = options; return this; }
Get the key/cert store options in pem format.
Returns:the key/cert store options in pem format.
/** * Get the key/cert store options in pem format. * * @return the key/cert store options in pem format. */
public PemKeyCertOptions getPemKeyCertOptions() { return keyCertOptions instanceof PemKeyCertOptions ? (PemKeyCertOptions) keyCertOptions : null; }
Set the key/cert store options in pem format.
Params:
  • options – the options in pem format
Returns:a reference to this, so the API can be used fluently
/** * Set the key/cert store options in pem format. * @param options the options in pem format * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setPemKeyCertOptions(PemKeyCertOptions options) { this.keyCertOptions = options; return this; }
Returns:the trust options
/** * @return the trust options */
public TrustOptions getTrustOptions() { return trustOptions; }
Set the trust options.
Params:
  • options – the trust options
Returns:a reference to this, so the API can be used fluently
/** * Set the trust options. * @param options the trust options * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setTrustOptions(TrustOptions options) { this.trustOptions = options; return this; }
Get the trust options in jks format, aka Java truststore
Returns:the trust options in jks format, aka Java truststore
/** * Get the trust options in jks format, aka Java truststore * * @return the trust options in jks format, aka Java truststore */
public JksOptions getTrustStoreOptions() { return trustOptions instanceof JksOptions ? (JksOptions) trustOptions : null; }
Set the trust options in jks format, aka Java truststore
Params:
  • options – the trust options in jks format
Returns:a reference to this, so the API can be used fluently
/** * Set the trust options in jks format, aka Java truststore * @param options the trust options in jks format * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setTrustStoreOptions(JksOptions options) { this.trustOptions = options; return this; }
Get the trust options in pfx format
Returns:the trust options in pfx format
/** * Get the trust options in pfx format * * @return the trust options in pfx format */
public PfxOptions getPfxTrustOptions() { return trustOptions instanceof PfxOptions ? (PfxOptions) trustOptions : null; }
Set the trust options in pfx format
Params:
  • options – the trust options in pfx format
Returns:a reference to this, so the API can be used fluently
/** * Set the trust options in pfx format * @param options the trust options in pfx format * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setPfxTrustOptions(PfxOptions options) { this.trustOptions = options; return this; }
Get the trust options in pem format
Returns:the trust options in pem format
/** * Get the trust options in pem format * * @return the trust options in pem format */
public PemTrustOptions getPemTrustOptions() { return trustOptions instanceof PemTrustOptions ? (PemTrustOptions) trustOptions : null; }
Set the trust options in pem format
Params:
  • options – the trust options in pem format
Returns:a reference to this, so the API can be used fluently
/** * Set the trust options in pem format * @param options the trust options in pem format * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setPemTrustOptions(PemTrustOptions options) { this.trustOptions = options; return this; }
Add an enabled cipher suite, appended to the ordered suites.
Params:
  • suite – the suite
Returns:a reference to this, so the API can be used fluently
/** * Add an enabled cipher suite, appended to the ordered suites. * * @param suite the suite * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions addEnabledCipherSuite(String suite) { enabledCipherSuites.add(suite); return this; }
Returns:the enabled cipher suites
/** * * @return the enabled cipher suites */
public Set<String> getEnabledCipherSuites() { return enabledCipherSuites; }
Returns:the CRL (Certificate revocation list) paths
/** * * @return the CRL (Certificate revocation list) paths */
public List<String> getCrlPaths() { return crlPaths; }
Add a CRL path
Params:
  • crlPath – the path
Throws:
Returns:a reference to this, so the API can be used fluently
/** * Add a CRL path * @param crlPath the path * @return a reference to this, so the API can be used fluently * @throws NullPointerException */
public TCPSSLOptions addCrlPath(String crlPath) throws NullPointerException { Objects.requireNonNull(crlPath, "No null crl accepted"); crlPaths.add(crlPath); return this; }
Get the CRL values
Returns:the list of values
/** * Get the CRL values * * @return the list of values */
public List<Buffer> getCrlValues() { return crlValues; }
Add a CRL value
Params:
  • crlValue – the value
Throws:
Returns:a reference to this, so the API can be used fluently
/** * Add a CRL value * * @param crlValue the value * @return a reference to this, so the API can be used fluently * @throws NullPointerException */
public TCPSSLOptions addCrlValue(Buffer crlValue) throws NullPointerException { Objects.requireNonNull(crlValue, "No null crl accepted"); crlValues.add(crlValue); return this; }
Returns:whether to use or not Application-Layer Protocol Negotiation
/** * @return whether to use or not Application-Layer Protocol Negotiation */
public boolean isUseAlpn() { return useAlpn; }
Set the ALPN usage.
Params:
  • useAlpn – true when Application-Layer Protocol Negotiation should be used
/** * Set the ALPN usage. * * @param useAlpn true when Application-Layer Protocol Negotiation should be used */
public TCPSSLOptions setUseAlpn(boolean useAlpn) { this.useAlpn = useAlpn; return this; }
Returns:the SSL engine implementation to use
/** * @return the SSL engine implementation to use */
public SSLEngineOptions getSslEngineOptions() { return sslEngineOptions; }
Set to use SSL engine implementation to use.
Params:
  • sslEngineOptions – the ssl engine to use
Returns:a reference to this, so the API can be used fluently
/** * Set to use SSL engine implementation to use. * * @param sslEngineOptions the ssl engine to use * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setSslEngineOptions(SSLEngineOptions sslEngineOptions) { this.sslEngineOptions = sslEngineOptions; return this; } public JdkSSLEngineOptions getJdkSslEngineOptions() { return sslEngineOptions instanceof JdkSSLEngineOptions ? (JdkSSLEngineOptions) sslEngineOptions : null; } public TCPSSLOptions setJdkSslEngineOptions(JdkSSLEngineOptions sslEngineOptions) { return setSslEngineOptions(sslEngineOptions); } public OpenSSLEngineOptions getOpenSslEngineOptions() { return sslEngineOptions instanceof OpenSSLEngineOptions ? (OpenSSLEngineOptions) sslEngineOptions : null; } public TCPSSLOptions setOpenSslEngineOptions(OpenSSLEngineOptions sslEngineOptions) { return setSslEngineOptions(sslEngineOptions); }
Sets the list of enabled SSL/TLS protocols.
Params:
  • enabledSecureTransportProtocols – the SSL/TLS protocols to enable
Returns:a reference to this, so the API can be used fluently
/** * Sets the list of enabled SSL/TLS protocols. * * @param enabledSecureTransportProtocols the SSL/TLS protocols to enable * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setEnabledSecureTransportProtocols(Set<String> enabledSecureTransportProtocols) { this.enabledSecureTransportProtocols = enabledSecureTransportProtocols; return this; }
Add an enabled SSL/TLS protocols, appended to the ordered protocols.
Params:
  • protocol – the SSL/TLS protocol to enable
Returns:a reference to this, so the API can be used fluently
/** * Add an enabled SSL/TLS protocols, appended to the ordered protocols. * * @param protocol the SSL/TLS protocol to enable * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions addEnabledSecureTransportProtocol(String protocol) { enabledSecureTransportProtocols.add(protocol); return this; }
Removes an enabled SSL/TLS protocol from the ordered protocols.
Params:
  • protocol – the SSL/TLS protocol to disable
Returns:a reference to this, so the API can be used fluently
/** * Removes an enabled SSL/TLS protocol from the ordered protocols. * * @param protocol the SSL/TLS protocol to disable * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions removeEnabledSecureTransportProtocol(String protocol) { enabledSecureTransportProtocols.remove(protocol); return this; }
Returns:wether TCP_FASTOPEN option is enabled
/** * @return wether {@code TCP_FASTOPEN} option is enabled */
public boolean isTcpFastOpen() { return tcpFastOpen; }
Enable the TCP_FASTOPEN option - only with linux native transport.
Params:
  • tcpFastOpen – the fast open value
/** * Enable the {@code TCP_FASTOPEN} option - only with linux native transport. * * @param tcpFastOpen the fast open value */
public TCPSSLOptions setTcpFastOpen(boolean tcpFastOpen) { this.tcpFastOpen = tcpFastOpen; return this; }
Returns:wether TCP_CORK option is enabled
/** * @return wether {@code TCP_CORK} option is enabled */
public boolean isTcpCork() { return tcpCork; }
Enable the TCP_CORK option - only with linux native transport.
Params:
  • tcpCork – the cork value
/** * Enable the {@code TCP_CORK} option - only with linux native transport. * * @param tcpCork the cork value */
public TCPSSLOptions setTcpCork(boolean tcpCork) { this.tcpCork = tcpCork; return this; }
Returns:wether TCP_QUICKACK option is enabled
/** * @return wether {@code TCP_QUICKACK} option is enabled */
public boolean isTcpQuickAck() { return tcpQuickAck; }
Enable the TCP_QUICKACK option - only with linux native transport.
Params:
  • tcpQuickAck – the quick ack value
/** * Enable the {@code TCP_QUICKACK} option - only with linux native transport. * * @param tcpQuickAck the quick ack value */
public TCPSSLOptions setTcpQuickAck(boolean tcpQuickAck) { this.tcpQuickAck = tcpQuickAck; return this; }
Returns the enabled SSL/TLS protocols
Returns:the enabled protocols
/** * Returns the enabled SSL/TLS protocols * @return the enabled protocols */
public Set<String> getEnabledSecureTransportProtocols() { return new LinkedHashSet<>(enabledSecureTransportProtocols); }
Returns:the SSL handshake timeout, in time unit specified by getSslHandshakeTimeoutUnit().
/** * @return the SSL handshake timeout, in time unit specified by {@link #getSslHandshakeTimeoutUnit()}. */
public long getSslHandshakeTimeout() { return sslHandshakeTimeout; }
Set the SSL handshake timeout, default time unit is seconds.
Params:
  • sslHandshakeTimeout – the SSL handshake timeout to set, in milliseconds
Returns:a reference to this, so the API can be used fluently
/** * Set the SSL handshake timeout, default time unit is seconds. * * @param sslHandshakeTimeout the SSL handshake timeout to set, in milliseconds * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setSslHandshakeTimeout(long sslHandshakeTimeout) { if (sslHandshakeTimeout < 0) { throw new IllegalArgumentException("sslHandshakeTimeout must be >= 0"); } this.sslHandshakeTimeout = sslHandshakeTimeout; return this; }
Set the SSL handshake timeout unit. If not specified, default is seconds.
Params:
  • sslHandshakeTimeoutUnit – specify time unit.
Returns:a reference to this, so the API can be used fluently
/** * Set the SSL handshake timeout unit. If not specified, default is seconds. * * @param sslHandshakeTimeoutUnit specify time unit. * @return a reference to this, so the API can be used fluently */
public TCPSSLOptions setSslHandshakeTimeoutUnit(TimeUnit sslHandshakeTimeoutUnit) { this.sslHandshakeTimeoutUnit = sslHandshakeTimeoutUnit; return this; }
Returns:the SSL handshake timeout unit.
/** * @return the SSL handshake timeout unit. */
public TimeUnit getSslHandshakeTimeoutUnit() { return sslHandshakeTimeoutUnit; } @Override public TCPSSLOptions setLogActivity(boolean logEnabled) { return (TCPSSLOptions) super.setLogActivity(logEnabled); } @Override public TCPSSLOptions setSendBufferSize(int sendBufferSize) { return (TCPSSLOptions) super.setSendBufferSize(sendBufferSize); } @Override public TCPSSLOptions setReceiveBufferSize(int receiveBufferSize) { return (TCPSSLOptions) super.setReceiveBufferSize(receiveBufferSize); } @Override public TCPSSLOptions setReuseAddress(boolean reuseAddress) { return (TCPSSLOptions) super.setReuseAddress(reuseAddress); } @Override public TCPSSLOptions setTrafficClass(int trafficClass) { return (TCPSSLOptions) super.setTrafficClass(trafficClass); } @Override public TCPSSLOptions setReusePort(boolean reusePort) { return (TCPSSLOptions) super.setReusePort(reusePort); } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof TCPSSLOptions)) return false; if (!super.equals(o)) return false; TCPSSLOptions that = (TCPSSLOptions) o; if (idleTimeout != that.idleTimeout) return false; if (idleTimeoutUnit != null ? !idleTimeoutUnit.equals(that.idleTimeoutUnit) : that.idleTimeoutUnit != null) return false; if (soLinger != that.soLinger) return false; if (ssl != that.ssl) return false; if (tcpKeepAlive != that.tcpKeepAlive) return false; if (tcpNoDelay != that.tcpNoDelay) return false; if (tcpFastOpen != that.tcpFastOpen) return false; if (tcpQuickAck != that.tcpQuickAck) return false; if (tcpCork != that.tcpCork) return false; if (usePooledBuffers != that.usePooledBuffers) return false; if (crlPaths != null ? !crlPaths.equals(that.crlPaths) : that.crlPaths != null) return false; if (crlValues != null ? !crlValues.equals(that.crlValues) : that.crlValues != null) return false; if (enabledCipherSuites != null ? !enabledCipherSuites.equals(that.enabledCipherSuites) : that.enabledCipherSuites != null) return false; if (keyCertOptions != null ? !keyCertOptions.equals(that.keyCertOptions) : that.keyCertOptions != null) return false; if (trustOptions != null ? !trustOptions.equals(that.trustOptions) : that.trustOptions != null) return false; if (useAlpn != that.useAlpn) return false; if (sslEngineOptions != null ? !sslEngineOptions.equals(that.sslEngineOptions) : that.sslEngineOptions != null) return false; if (!enabledSecureTransportProtocols.equals(that.enabledSecureTransportProtocols)) return false; return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (tcpNoDelay ? 1 : 0); result = 31 * result + (tcpFastOpen ? 1 : 0); result = 31 * result + (tcpCork ? 1 : 0); result = 31 * result + (tcpQuickAck ? 1 : 0); result = 31 * result + (tcpKeepAlive ? 1 : 0); result = 31 * result + soLinger; result = 31 * result + (usePooledBuffers ? 1 : 0); result = 31 * result + idleTimeout; result = 31 * result + (idleTimeoutUnit != null ? idleTimeoutUnit.hashCode() : 0); result = 31 * result + (ssl ? 1 : 0); result = 31 * result + (keyCertOptions != null ? keyCertOptions.hashCode() : 0); result = 31 * result + (trustOptions != null ? trustOptions.hashCode() : 0); result = 31 * result + (enabledCipherSuites != null ? enabledCipherSuites.hashCode() : 0); result = 31 * result + (crlPaths != null ? crlPaths.hashCode() : 0); result = 31 * result + (crlValues != null ? crlValues.hashCode() : 0); result = 31 * result + (useAlpn ? 1 : 0); result = 31 * result + (sslEngineOptions != null ? sslEngineOptions.hashCode() : 0); result = 31 * result + (enabledSecureTransportProtocols != null ? enabledSecureTransportProtocols .hashCode() : 0); return result; } }