/*
* Copyright 2016, 2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.vertx.proton;

import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import io.vertx.codegen.annotations.DataObject;

import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import io.vertx.core.net.JdkSSLEngineOptions;
import io.vertx.core.net.JksOptions;
import io.vertx.core.net.KeyCertOptions;
import io.vertx.core.net.NetClientOptions;
import io.vertx.core.net.OpenSSLEngineOptions;
import io.vertx.core.net.PemKeyCertOptions;
import io.vertx.core.net.PemTrustOptions;
import io.vertx.core.net.PfxOptions;
import io.vertx.core.net.ProxyOptions;
import io.vertx.core.net.SSLEngineOptions;
import io.vertx.core.net.TrustOptions;

Options for configuring ProtonClient connect operations.
/** * Options for configuring {@link io.vertx.proton.ProtonClient} connect operations. */
@DataObject(generateConverter = true, publicConverter = false) public class ProtonClientOptions extends NetClientOptions { private Set<String> enabledSaslMechanisms = new LinkedHashSet<>(); private int heartbeat; private int maxFrameSize; private String virtualHost; private String sniServerName; public ProtonClientOptions() { super(); setHostnameVerificationAlgorithm("HTTPS"); }
Copy constructor
Params:
  • other – the options to copy
/** * Copy constructor * * @param other the options to copy */
public ProtonClientOptions(ProtonClientOptions other) { super(other); this.enabledSaslMechanisms = new LinkedHashSet<String>(other.enabledSaslMechanisms); this.heartbeat = other.heartbeat; this.maxFrameSize = other.maxFrameSize; this.virtualHost = other.virtualHost; this.sniServerName = other.sniServerName; }
Create options from JSON
Params:
  • json – the JSON
/** * Create options from JSON * * @param json the JSON */
public ProtonClientOptions(JsonObject json) { super(json); ProtonClientOptionsConverter.fromJson(json, this); }
Convert to JSON
Returns:the JSON
/** * Convert to JSON * * @return the JSON */
@Override public JsonObject toJson() { JsonObject json = super.toJson(); ProtonClientOptionsConverter.toJson(this, json); return json; }
Get the mechanisms the client should be restricted to use.
Returns:the mechanisms, or null/empty set if there is no restriction in place
/** * Get the mechanisms the client should be restricted to use. * * @return the mechanisms, or null/empty set if there is no restriction in place */
public Set<String> getEnabledSaslMechanisms() { return enabledSaslMechanisms; }
Adds a mechanism name that the client may use during SASL negotiation.
Params:
  • saslMechanism – the sasl mechanism name .
Returns:a reference to this, so the API can be used fluently
/** * Adds a mechanism name that the client may use during SASL negotiation. * * @param saslMechanism * the sasl mechanism name . * @return a reference to this, so the API can be used fluently */
public ProtonClientOptions addEnabledSaslMechanism(String saslMechanism) { Objects.requireNonNull(saslMechanism, "Mechanism must not be null"); enabledSaslMechanisms.add(saslMechanism); return this; } @Override public ProtonClientOptions setSendBufferSize(int sendBufferSize) { super.setSendBufferSize(sendBufferSize); return this; } @Override public ProtonClientOptions setReceiveBufferSize(int receiveBufferSize) { super.setReceiveBufferSize(receiveBufferSize); return this; } @Override public ProtonClientOptions setReuseAddress(boolean reuseAddress) { super.setReuseAddress(reuseAddress); return this; } @Override public ProtonClientOptions setTrafficClass(int trafficClass) { super.setTrafficClass(trafficClass); return this; } @Override public ProtonClientOptions setTcpNoDelay(boolean tcpNoDelay) { super.setTcpNoDelay(tcpNoDelay); return this; } @Override public ProtonClientOptions setTcpKeepAlive(boolean tcpKeepAlive) { super.setTcpKeepAlive(tcpKeepAlive); return this; } @Override public ProtonClientOptions setSoLinger(int soLinger) { super.setSoLinger(soLinger); return this; } @Override public ProtonClientOptions setIdleTimeout(int idleTimeout) { super.setIdleTimeout(idleTimeout); return this; } @Override public ProtonClientOptions setIdleTimeoutUnit(TimeUnit idleTimeoutUnit) { super.setIdleTimeoutUnit(idleTimeoutUnit); return this; } @Override public ProtonClientOptions setSsl(boolean ssl) { super.setSsl(ssl); return this; } @Override public ProtonClientOptions setKeyStoreOptions(JksOptions options) { super.setKeyStoreOptions(options); return this; } @Override public ProtonClientOptions setPfxKeyCertOptions(PfxOptions options) { super.setPfxKeyCertOptions(options); return this; } @Override public ProtonClientOptions setPemKeyCertOptions(PemKeyCertOptions options) { super.setPemKeyCertOptions(options); return this; } @Override public ProtonClientOptions setTrustStoreOptions(JksOptions options) { super.setTrustStoreOptions(options); return this; } @Override public ProtonClientOptions setPemTrustOptions(PemTrustOptions options) { super.setPemTrustOptions(options); return this; } @Override public ProtonClientOptions setPfxTrustOptions(PfxOptions options) { super.setPfxTrustOptions(options); return this; } @Override public ProtonClientOptions addEnabledCipherSuite(String suite) { super.addEnabledCipherSuite(suite); return this; } @Override public ProtonClientOptions addCrlPath(String crlPath) throws NullPointerException { super.addCrlPath(crlPath); return this; } @Override public ProtonClientOptions addCrlValue(Buffer crlValue) throws NullPointerException { super.addCrlValue(crlValue); return this; } @Override public ProtonClientOptions setTrustAll(boolean trustAll) { super.setTrustAll(trustAll); return this; } @Override public ProtonClientOptions setConnectTimeout(int connectTimeout) { super.setConnectTimeout(connectTimeout); return this; } @Override public ProtonClientOptions setReconnectAttempts(int attempts) { super.setReconnectAttempts(attempts); return this; } @Override public ProtonClientOptions setReconnectInterval(long interval) { super.setReconnectInterval(interval); return this; } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); result = prime * result + Objects.hashCode(enabledSaslMechanisms); result = prime * result + this.heartbeat; result = prime * result + this.maxFrameSize; result = prime * result + (this.virtualHost != null ? this.virtualHost.hashCode() : 0); result = prime * result + (this.sniServerName != null ? this.sniServerName.hashCode() : 0); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null || getClass() != obj.getClass()){ return false; } if (!super.equals(obj)) { return false; } ProtonClientOptions other = (ProtonClientOptions) obj; if (!Objects.equals(enabledSaslMechanisms, other.enabledSaslMechanisms)){ return false; } if (this.heartbeat != other.heartbeat) { return false; } if (this.maxFrameSize != other.maxFrameSize) { return false; } if (!Objects.equals(this.virtualHost, other.virtualHost)) { return false; } if (!Objects.equals(this.sniServerName, other.sniServerName)) { return false; } return true; } @Override public ProtonClientOptions setUseAlpn(boolean useAlpn) { throw new UnsupportedOperationException(); } @Override public ProtonClientOptions addEnabledSecureTransportProtocol(String protocol) { super.addEnabledSecureTransportProtocol(protocol); return this; } @Override public ProtonClientOptions setHostnameVerificationAlgorithm(String hostnameVerificationAlgorithm) { super.setHostnameVerificationAlgorithm(hostnameVerificationAlgorithm); return this; } @Override public ProtonClientOptions setKeyCertOptions(KeyCertOptions options) { super.setKeyCertOptions(options); return this; } @Override public ProtonClientOptions setLogActivity(boolean logEnabled) { super.setLogActivity(logEnabled); return this; } @Override public ProtonClientOptions setMetricsName(String metricsName) { super.setMetricsName(metricsName); return this; } @Override public ProtonClientOptions setProxyOptions(ProxyOptions proxyOptions) { super.setProxyOptions(proxyOptions); return this; } @Override public ProtonClientOptions setTrustOptions(TrustOptions options) { super.setTrustOptions(options); return this; } @Override public ProtonClientOptions setJdkSslEngineOptions(JdkSSLEngineOptions sslEngineOptions) { super.setJdkSslEngineOptions(sslEngineOptions); return this; } @Override public ProtonClientOptions setOpenSslEngineOptions(OpenSSLEngineOptions sslEngineOptions) { super.setOpenSslEngineOptions(sslEngineOptions); return this; } @Override public ProtonClientOptions setSslEngineOptions(SSLEngineOptions sslEngineOptions) { super.setSslEngineOptions(sslEngineOptions); return this; } @Override public ProtonClientOptions setSslHandshakeTimeout(long sslHandshakeTimeout) { super.setSslHandshakeTimeout(sslHandshakeTimeout); return this; } @Override public ProtonClientOptions setSslHandshakeTimeoutUnit(TimeUnit sslHandshakeTimeoutUnit) { super.setSslHandshakeTimeoutUnit(sslHandshakeTimeoutUnit); return this; } @Override public ProtonClientOptions setLocalAddress(String localAddress) { super.setLocalAddress(localAddress); return this; } @Override public ProtonClientOptions setReusePort(boolean reusePort) { super.setReusePort(reusePort); return this; } @Override public ProtonClientOptions setTcpCork(boolean tcpCork) { super.setTcpCork(tcpCork); return this; } @Override public ProtonClientOptions setTcpFastOpen(boolean tcpFastOpen) { super.setTcpFastOpen(tcpFastOpen); return this; } @Override public ProtonClientOptions setTcpQuickAck(boolean tcpQuickAck) { super.setTcpQuickAck(tcpQuickAck); return this; } @Override public ProtonClientOptions removeEnabledSecureTransportProtocol(String protocol) { super.removeEnabledSecureTransportProtocol(protocol); return this; } @Override public ProtonClientOptions setEnabledSecureTransportProtocols(Set<String> enabledSecureTransportProtocols) { super.setEnabledSecureTransportProtocols(enabledSecureTransportProtocols); return this; }
Override the hostname value used in the connection AMQP Open frame and TLS SNI server name (if TLS is in use). By default, the hostname specified in ProtonClient.connect will be used for both, with SNI performed implicit where a FQDN was specified. The SNI server name can also be overridden explicitly using setSniServerName(String).
Params:
  • virtualHost – hostname to set
Returns: current ProtonClientOptions instance
/** * Override the hostname value used in the connection AMQP Open frame and TLS SNI server name (if TLS is in use). * By default, the hostname specified in {@link ProtonClient#connect} will be used for both, with SNI performed * implicit where a FQDN was specified. * * The SNI server name can also be overridden explicitly using {@link #setSniServerName(String)}. * * @param virtualHost hostname to set * @return current ProtonClientOptions instance */
public ProtonClientOptions setVirtualHost(String virtualHost) { this.virtualHost = virtualHost; return this; }
Get the virtual host name override for the connection AMQP Open frame and TLS SNI server name (if TLS is in use) set by setVirtualHost(String).
Returns: the hostname
/** * Get the virtual host name override for the connection AMQP Open frame and TLS SNI server name (if TLS is in use) * set by {@link #setVirtualHost(String)}. * * @return the hostname */
public String getVirtualHost() { return this.virtualHost; }
Explicitly override the hostname to use for the TLS SNI server name. If neither the virtualhost or SNI server name is explicitly overridden, the hostname specified in ProtonClient.connect will be used, with SNI performed implicitly where a FQDN was specified. This method should typically only be needed to set different values for the [virtual] hostname and SNI server name.
Params:
  • sniServerName – hostname to set as SNI server name
Returns: current ProtonClientOptions instance
/** * Explicitly override the hostname to use for the TLS SNI server name. * * If neither the {@link ProtonClientOptions#setVirtualHost(String) virtualhost} or SNI server name is explicitly * overridden, the hostname specified in {@link ProtonClient#connect} will be used, with SNI performed implicitly * where a FQDN was specified. * * This method should typically only be needed to set different values for the [virtual] hostname and SNI server name. * * @param sniServerName hostname to set as SNI server name * @return current ProtonClientOptions instance */
public ProtonClientOptions setSniServerName(String sniServerName) { this.sniServerName = sniServerName; return this; }
Get the hostname override for TLS SNI Server Name set by setSniServerName(String).
Returns: the hostname
/** * Get the hostname override for TLS SNI Server Name set by {@link #setSniServerName(String)}. * * @return the hostname */
public String getSniServerName() { return this.sniServerName; }
Set the heartbeat (in milliseconds) as maximum delay between sending frames for the remote peers. If no frames are received within 2*heartbeat, the connection is closed
Params:
  • heartbeat – hearthbeat maximum delay
Returns: current ProtonClientOptions instance
/** * Set the heartbeat (in milliseconds) as maximum delay between sending frames for the remote peers. * If no frames are received within 2*heartbeat, the connection is closed * * @param heartbeat hearthbeat maximum delay * @return current ProtonClientOptions instance */
public ProtonClientOptions setHeartbeat(int heartbeat) { this.heartbeat = heartbeat; return this; }
Return the heartbeat (in milliseconds) as maximum delay between sending frames for the remote peers.
Returns: hearthbeat maximum delay
/** * Return the heartbeat (in milliseconds) as maximum delay between sending frames for the remote peers. * * @return hearthbeat maximum delay */
public int getHeartbeat() { return this.heartbeat; }
Sets the maximum frame size for the connection.

If this property is not set explicitly, a reasonable default value is used.

Setting this property to a negative value will result in no maximum frame size being announced at all.

Params:
  • maxFrameSize – The frame size in bytes.
Returns:This instance for setter chaining.
/** * Sets the maximum frame size for the connection. * <p> * If this property is not set explicitly, a reasonable default value is used. * <p> * Setting this property to a negative value will result in no maximum frame size being announced at all. * * @param maxFrameSize The frame size in bytes. * @return This instance for setter chaining. */
public ProtonClientOptions setMaxFrameSize(int maxFrameSize) { if (maxFrameSize < 0) { this.maxFrameSize = -1; } else { this.maxFrameSize = maxFrameSize; } return this; }
Gets the maximum frame size for the connection.

If this property is not set explicitly, a reasonable default value is used.

Returns:The frame size in bytes or -1 if no limit is set.
/** * Gets the maximum frame size for the connection. * <p> * If this property is not set explicitly, a reasonable default value is used. * * @return The frame size in bytes or -1 if no limit is set. */
public int getMaxFrameSize() { return maxFrameSize; } }