Created
May 30, 2018 14:50
-
-
Save adatta02/ad5bed8ae187ef99f8f5ec66ecfb3199 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (c) 2011-2014 The original author or authors | |
* ------------------------------------------------------ | |
* All rights reserved. This program and the accompanying materials | |
* are made available under the terms of the Eclipse Public License v1.0 | |
* and Apache License v2.0 which accompanies this distribution. | |
* | |
* The Eclipse Public License is available at | |
* http://www.eclipse.org/legal/epl-v10.html | |
* | |
* The Apache License v2.0 is available at | |
* http://www.opensource.org/licenses/apache2.0.php | |
* | |
* You may elect to redistribute this code under either of these licenses. | |
*/ | |
package io.vertx.core.http; | |
import io.vertx.codegen.annotations.DataObject; | |
import io.vertx.core.buffer.Buffer; | |
import io.vertx.core.impl.Arguments; | |
import io.vertx.core.json.JsonObject; | |
import io.vertx.core.net.*; | |
import java.util.ArrayList; | |
import java.util.Collections; | |
import java.util.List; | |
/** | |
* Options describing how an {@link HttpClient} will make connections. | |
* | |
* @author <a href="http://tfox.org">Tim Fox</a> | |
*/ | |
@DataObject(generateConverter = true, publicConverter = false) | |
public class HttpClientOptions extends ClientOptionsBase { | |
/** | |
* The default maximum number of HTTP/1 connections a client will pool = 5 | |
*/ | |
public static final int DEFAULT_MAX_POOL_SIZE = 5; | |
/** | |
* The default maximum number of connections an HTTP/2 client will pool = 1 | |
*/ | |
public static final int DEFAULT_HTTP2_MAX_POOL_SIZE = 1; | |
/** | |
* The default maximum number of concurrent streams per connection for HTTP/2 = -1 | |
*/ | |
public static final int DEFAULT_HTTP2_MULTIPLEXING_LIMIT = -1; | |
/** | |
* The default connection window size for HTTP/2 = -1 | |
*/ | |
public static final int DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE = -1; | |
/** | |
* Default value of whether keep-alive is enabled = true | |
*/ | |
public static final boolean DEFAULT_KEEP_ALIVE = true; | |
/** | |
* Default value of whether pipe-lining is enabled = false | |
*/ | |
public static final boolean DEFAULT_PIPELINING = false; | |
/** | |
* The default maximum number of requests an HTTP/1.1 pipe-lined connection can send = 10 | |
*/ | |
public static final int DEFAULT_PIPELINING_LIMIT = 10; | |
/** | |
* Default value of whether the client will attempt to use compression = false | |
*/ | |
public static final boolean DEFAULT_TRY_USE_COMPRESSION = false; | |
/** | |
* Default value of whether hostname verification (for SSL/TLS) is enabled = true | |
*/ | |
public static final boolean DEFAULT_VERIFY_HOST = true; | |
/** | |
* The default value for maximum websocket frame size = 65536 bytes | |
*/ | |
public static final int DEFAULT_MAX_WEBSOCKET_FRAME_SIZE = 65536; | |
/** | |
* The default value for maximum websocket messages (could be assembled from multiple frames) is 4 full frames | |
* worth of data | |
*/ | |
public static final int DEFAULT_MAX_WEBSOCKET_MESSAGE_SIZE = 65536 * 4; | |
/** | |
* The default value for host name = "localhost" | |
*/ | |
public static final String DEFAULT_DEFAULT_HOST = "localhost"; | |
/** | |
* The default value for port = 80 | |
*/ | |
public static final int DEFAULT_DEFAULT_PORT = 80; | |
/** | |
* The default protocol version = HTTP/1.1 | |
*/ | |
public static final HttpVersion DEFAULT_PROTOCOL_VERSION = HttpVersion.HTTP_1_1; | |
/** | |
* Default max HTTP chunk size = 8192 | |
*/ | |
public static final int DEFAULT_MAX_CHUNK_SIZE = 8192; | |
/** | |
* Default max length of the initial line (e.g. {@code "HTTP/1.1 200 OK"}) = 4096 | |
*/ | |
public static final int DEFAULT_MAX_INITIAL_LINE_LENGTH = 4096; | |
/** | |
* Default max length of all headers = 8192 | |
*/ | |
public static final int DEFAULT_MAX_HEADER_SIZE = 8192; | |
/** | |
* Default max wait queue size = -1 (unbounded) | |
*/ | |
public static final int DEFAULT_MAX_WAIT_QUEUE_SIZE = -1; | |
/** | |
* Default Application-Layer Protocol Negotiation versions = [] (automatic according to protocol version) | |
*/ | |
public static final List<HttpVersion> DEFAULT_ALPN_VERSIONS = Collections.emptyList(); | |
/** | |
* Default using HTTP/1.1 upgrade for establishing an <i>h2C</i> connection = true | |
*/ | |
public static final boolean DEFAULT_HTTP2_CLEAR_TEXT_UPGRADE = true; | |
/** | |
* Default WebSocket Masked bit is true as depicted by RFC. PerformingUnMasking will be false | |
*/ | |
public static final boolean DEFAULT_SEND_UNMASKED_FRAMES = false; | |
/* | |
* Default max redirect = 16 | |
*/ | |
public static final int DEFAULT_MAX_REDIRECTS = 16; | |
/* | |
* Default force SNI = false | |
*/ | |
public static final boolean DEFAULT_FORCE_SNI = false; | |
/** | |
* Default initial buffer size for HttpObjectDecoder = 128 bytes | |
*/ | |
public static final int DEFAULT_DECODER_INITIAL_BUFFER_SIZE = 128; | |
private boolean verifyHost = true; | |
private int maxPoolSize; | |
private boolean keepAlive; | |
private int pipeliningLimit; | |
private boolean pipelining; | |
private int http2MaxPoolSize; | |
private int http2MultiplexingLimit; | |
private int http2ConnectionWindowSize; | |
private boolean tryUseCompression; | |
private int maxWebsocketFrameSize; | |
private int maxWebsocketMessageSize; | |
private String defaultHost; | |
private int defaultPort; | |
private HttpVersion protocolVersion; | |
private int maxChunkSize; | |
private int maxInitialLineLength; | |
private int maxHeaderSize; | |
private int maxWaitQueueSize; | |
private Http2Settings initialSettings; | |
private List<HttpVersion> alpnVersions; | |
private boolean http2ClearTextUpgrade; | |
private boolean sendUnmaskedFrames; | |
private int maxRedirects; | |
private boolean forceSni; | |
private int decoderInitialBufferSize; | |
/** | |
* Default constructor | |
*/ | |
public HttpClientOptions() { | |
super(); | |
init(); | |
} | |
/** | |
* Copy constructor | |
* | |
* @param other the options to copy | |
*/ | |
public HttpClientOptions(HttpClientOptions other) { | |
super(other); | |
this.verifyHost = other.isVerifyHost(); | |
this.maxPoolSize = other.getMaxPoolSize(); | |
this.keepAlive = other.isKeepAlive(); | |
this.pipelining = other.isPipelining(); | |
this.pipeliningLimit = other.getPipeliningLimit(); | |
this.http2MaxPoolSize = other.getHttp2MaxPoolSize(); | |
this.http2MultiplexingLimit = other.http2MultiplexingLimit; | |
this.http2ConnectionWindowSize = other.http2ConnectionWindowSize; | |
this.tryUseCompression = other.isTryUseCompression(); | |
this.maxWebsocketFrameSize = other.maxWebsocketFrameSize; | |
this.maxWebsocketMessageSize = other.maxWebsocketMessageSize; | |
this.defaultHost = other.defaultHost; | |
this.defaultPort = other.defaultPort; | |
this.protocolVersion = other.protocolVersion; | |
this.maxChunkSize = other.maxChunkSize; | |
this.maxInitialLineLength = other.getMaxInitialLineLength(); | |
this.maxHeaderSize = other.getMaxHeaderSize(); | |
this.maxWaitQueueSize = other.maxWaitQueueSize; | |
this.initialSettings = other.initialSettings != null ? new Http2Settings(other.initialSettings) : null; | |
this.alpnVersions = other.alpnVersions != null ? new ArrayList<>(other.alpnVersions) : null; | |
this.http2ClearTextUpgrade = other.http2ClearTextUpgrade; | |
this.sendUnmaskedFrames = other.isSendUnmaskedFrames(); | |
this.maxRedirects = other.maxRedirects; | |
this.forceSni = other.forceSni; | |
this.decoderInitialBufferSize = other.getDecoderInitialBufferSize(); | |
} | |
/** | |
* Constructor to create an options from JSON | |
* | |
* @param json the JSON | |
*/ | |
public HttpClientOptions(JsonObject json) { | |
super(json); | |
init(); | |
HttpClientOptionsConverter.fromJson(json, this); | |
} | |
/** | |
* Convert to JSON | |
* | |
* @return the JSON | |
*/ | |
public JsonObject toJson() { | |
JsonObject json = super.toJson(); | |
HttpClientOptionsConverter.toJson(this, json); | |
return json; | |
} | |
private void init() { | |
verifyHost = DEFAULT_VERIFY_HOST; | |
maxPoolSize = DEFAULT_MAX_POOL_SIZE; | |
keepAlive = DEFAULT_KEEP_ALIVE; | |
pipelining = DEFAULT_PIPELINING; | |
pipeliningLimit = DEFAULT_PIPELINING_LIMIT; | |
http2MultiplexingLimit = DEFAULT_HTTP2_MULTIPLEXING_LIMIT; | |
http2MaxPoolSize = DEFAULT_HTTP2_MAX_POOL_SIZE; | |
http2ConnectionWindowSize = DEFAULT_HTTP2_CONNECTION_WINDOW_SIZE; | |
tryUseCompression = DEFAULT_TRY_USE_COMPRESSION; | |
maxWebsocketFrameSize = DEFAULT_MAX_WEBSOCKET_FRAME_SIZE; | |
maxWebsocketMessageSize = DEFAULT_MAX_WEBSOCKET_MESSAGE_SIZE; | |
defaultHost = DEFAULT_DEFAULT_HOST; | |
defaultPort = DEFAULT_DEFAULT_PORT; | |
protocolVersion = DEFAULT_PROTOCOL_VERSION; | |
maxChunkSize = DEFAULT_MAX_CHUNK_SIZE; | |
maxInitialLineLength = DEFAULT_MAX_INITIAL_LINE_LENGTH; | |
maxHeaderSize = DEFAULT_MAX_HEADER_SIZE; | |
maxWaitQueueSize = DEFAULT_MAX_WAIT_QUEUE_SIZE; | |
initialSettings = new Http2Settings(); | |
alpnVersions = new ArrayList<>(DEFAULT_ALPN_VERSIONS); | |
http2ClearTextUpgrade = DEFAULT_HTTP2_CLEAR_TEXT_UPGRADE; | |
sendUnmaskedFrames = DEFAULT_SEND_UNMASKED_FRAMES; | |
maxRedirects = DEFAULT_MAX_REDIRECTS; | |
forceSni = DEFAULT_FORCE_SNI; | |
decoderInitialBufferSize = DEFAULT_DECODER_INITIAL_BUFFER_SIZE; | |
} | |
@Override | |
public HttpClientOptions setSendBufferSize(int sendBufferSize) { | |
super.setSendBufferSize(sendBufferSize); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setReceiveBufferSize(int receiveBufferSize) { | |
super.setReceiveBufferSize(receiveBufferSize); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setReuseAddress(boolean reuseAddress) { | |
super.setReuseAddress(reuseAddress); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setReusePort(boolean reusePort) { | |
super.setReusePort(reusePort); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setTrafficClass(int trafficClass) { | |
super.setTrafficClass(trafficClass); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setTcpNoDelay(boolean tcpNoDelay) { | |
super.setTcpNoDelay(tcpNoDelay); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setTcpKeepAlive(boolean tcpKeepAlive) { | |
super.setTcpKeepAlive(tcpKeepAlive); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setSoLinger(int soLinger) { | |
super.setSoLinger(soLinger); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setUsePooledBuffers(boolean usePooledBuffers) { | |
super.setUsePooledBuffers(usePooledBuffers); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setIdleTimeout(int idleTimeout) { | |
super.setIdleTimeout(idleTimeout); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setSsl(boolean ssl) { | |
super.setSsl(ssl); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setKeyCertOptions(KeyCertOptions options) { | |
super.setKeyCertOptions(options); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setKeyStoreOptions(JksOptions options) { | |
super.setKeyStoreOptions(options); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setPfxKeyCertOptions(PfxOptions options) { | |
return (HttpClientOptions) super.setPfxKeyCertOptions(options); | |
} | |
@Override | |
public HttpClientOptions setTrustOptions(TrustOptions options) { | |
super.setTrustOptions(options); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setPemKeyCertOptions(PemKeyCertOptions options) { | |
return (HttpClientOptions) super.setPemKeyCertOptions(options); | |
} | |
@Override | |
public HttpClientOptions setTrustStoreOptions(JksOptions options) { | |
super.setTrustStoreOptions(options); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setPfxTrustOptions(PfxOptions options) { | |
return (HttpClientOptions) super.setPfxTrustOptions(options); | |
} | |
@Override | |
public HttpClientOptions setPemTrustOptions(PemTrustOptions options) { | |
return (HttpClientOptions) super.setPemTrustOptions(options); | |
} | |
@Override | |
public HttpClientOptions addEnabledCipherSuite(String suite) { | |
super.addEnabledCipherSuite(suite); | |
return this; | |
} | |
@Override | |
public HttpClientOptions addEnabledSecureTransportProtocol(final String protocol) { | |
super.addEnabledSecureTransportProtocol(protocol); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setTcpFastOpen(boolean tcpFastOpen) { | |
return (HttpClientOptions) super.setTcpFastOpen(tcpFastOpen); | |
} | |
@Override | |
public HttpClientOptions setTcpCork(boolean tcpCork) { | |
return (HttpClientOptions) super.setTcpCork(tcpCork); | |
} | |
@Override | |
public HttpClientOptions setTcpQuickAck(boolean tcpQuickAck) { | |
return (HttpClientOptions) super.setTcpQuickAck(tcpQuickAck); | |
} | |
@Override | |
public HttpClientOptions addCrlPath(String crlPath) throws NullPointerException { | |
return (HttpClientOptions) super.addCrlPath(crlPath); | |
} | |
@Override | |
public HttpClientOptions addCrlValue(Buffer crlValue) throws NullPointerException { | |
return (HttpClientOptions) super.addCrlValue(crlValue); | |
} | |
@Override | |
public HttpClientOptions setConnectTimeout(int connectTimeout) { | |
super.setConnectTimeout(connectTimeout); | |
return this; | |
} | |
@Override | |
public HttpClientOptions setTrustAll(boolean trustAll) { | |
super.setTrustAll(trustAll); | |
return this; | |
} | |
/** | |
* Get the maximum pool size for connections | |
* | |
* @return the maximum pool size | |
*/ | |
public int getMaxPoolSize() { | |
return maxPoolSize; | |
} | |
/** | |
* Set the maximum pool size for connections | |
* | |
* @param maxPoolSize the maximum pool size | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxPoolSize(int maxPoolSize) { | |
if (maxPoolSize < 1) { | |
throw new IllegalArgumentException("maxPoolSize must be > 0"); | |
} | |
this.maxPoolSize = maxPoolSize; | |
return this; | |
} | |
/** | |
* @return the maximum number of concurrent streams for an HTTP/2 connection, {@code -1} means | |
* the value sent by the server | |
*/ | |
public int getHttp2MultiplexingLimit() { | |
return http2MultiplexingLimit; | |
} | |
/** | |
* Set a client limit of the number concurrent streams for each HTTP/2 connection, this limits the number | |
* of streams the client can create for a connection. The effective number of streams for a | |
* connection is the min of this value and the server's initial settings. | |
* <p/> | |
* Setting the value to {@code -1} means to use the value sent by the server's initial settings. | |
* {@code -1} is the default value. | |
* | |
* @param limit the maximum concurrent for an HTTP/2 connection | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setHttp2MultiplexingLimit(int limit) { | |
if (limit == 0 || limit < -1) { | |
throw new IllegalArgumentException("maxPoolSize must be > 0 or -1 (disabled)"); | |
} | |
this.http2MultiplexingLimit = limit; | |
return this; | |
} | |
/** | |
* Get the maximum pool size for HTTP/2 connections | |
* | |
* @return the maximum pool size | |
*/ | |
public int getHttp2MaxPoolSize() { | |
return http2MaxPoolSize; | |
} | |
/** | |
* Set the maximum pool size for HTTP/2 connections | |
* | |
* @param max the maximum pool size | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setHttp2MaxPoolSize(int max) { | |
if (max < 1) { | |
throw new IllegalArgumentException("http2MaxPoolSize must be > 0"); | |
} | |
this.http2MaxPoolSize = max; | |
return this; | |
} | |
/** | |
* @return the default HTTP/2 connection window size | |
*/ | |
public int getHttp2ConnectionWindowSize() { | |
return http2ConnectionWindowSize; | |
} | |
/** | |
* Set the default HTTP/2 connection window size. It overrides the initial window | |
* size set by {@link Http2Settings#getInitialWindowSize}, so the connection window size | |
* is greater than for its streams, in order the data throughput. | |
* <p/> | |
* A value of {@code -1} reuses the initial window size setting. | |
* | |
* @param http2ConnectionWindowSize the window size applied to the connection | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setHttp2ConnectionWindowSize(int http2ConnectionWindowSize) { | |
this.http2ConnectionWindowSize = http2ConnectionWindowSize; | |
return this; | |
} | |
/** | |
* Is keep alive enabled on the client? | |
* | |
* @return true if enabled | |
*/ | |
public boolean isKeepAlive() { | |
return keepAlive; | |
} | |
/** | |
* Set whether keep alive is enabled on the client | |
* | |
* @param keepAlive true if enabled | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setKeepAlive(boolean keepAlive) { | |
this.keepAlive = keepAlive; | |
return this; | |
} | |
/** | |
* Is pipe-lining enabled on the client | |
* | |
* @return true if pipe-lining is enabled | |
*/ | |
public boolean isPipelining() { | |
return pipelining; | |
} | |
/** | |
* Set whether pipe-lining is enabled on the client | |
* | |
* @param pipelining true if enabled | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setPipelining(boolean pipelining) { | |
this.pipelining = pipelining; | |
return this; | |
} | |
/** | |
* @return the limit of pending requests a pipe-lined HTTP/1 connection can send | |
*/ | |
public int getPipeliningLimit() { | |
return pipeliningLimit; | |
} | |
/** | |
* Set the limit of pending requests a pipe-lined HTTP/1 connection can send. | |
* | |
* @param limit the limit of pending requests | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setPipeliningLimit(int limit) { | |
if (limit < 1) { | |
throw new IllegalArgumentException("pipeliningLimit must be > 0"); | |
} | |
this.pipeliningLimit = limit; | |
return this; | |
} | |
/** | |
* Is hostname verification (for SSL/TLS) enabled? | |
* | |
* @return true if enabled | |
*/ | |
public boolean isVerifyHost() { | |
return verifyHost; | |
} | |
/** | |
* Set whether hostname verification is enabled | |
* | |
* @param verifyHost true if enabled | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setVerifyHost(boolean verifyHost) { | |
this.verifyHost = verifyHost; | |
return this; | |
} | |
/** | |
* Is compression enabled on the client? | |
* | |
* @return true if enabled | |
*/ | |
public boolean isTryUseCompression() { | |
return tryUseCompression; | |
} | |
/** | |
* Set whether compression is enabled | |
* | |
* @param tryUseCompression true if enabled | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setTryUseCompression(boolean tryUseCompression) { | |
this.tryUseCompression = tryUseCompression; | |
return this; | |
} | |
/** | |
* is masking frame skipped ? | |
* @return | |
*/ | |
public boolean isSendUnmaskedFrames() { | |
return sendUnmaskedFrames; | |
} | |
/** | |
* Set true when the client wants to skip frame masking. | |
* You may want to set it true on server by server websocket communication: In this case you are by passing RFC6455 protocol. | |
* It's false as default. | |
* | |
* @param sendUnmaskedFrames true if enabled | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setSendUnmaskedFrames(boolean sendUnmaskedFrames) { | |
this.sendUnmaskedFrames = sendUnmaskedFrames; | |
return this; | |
} | |
/** | |
* Get the maximum websocket framesize to use | |
* | |
* @return the max websocket framesize | |
*/ | |
public int getMaxWebsocketFrameSize() { | |
return maxWebsocketFrameSize; | |
} | |
/** | |
* Set the max websocket frame size | |
* | |
* @param maxWebsocketFrameSize the max frame size, in bytes | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxWebsocketFrameSize(int maxWebsocketFrameSize) { | |
this.maxWebsocketFrameSize = maxWebsocketFrameSize; | |
return this; | |
} | |
/** | |
* Get the maximum websocket message size to use | |
* | |
* @return the max websocket message size | |
*/ | |
public int getMaxWebsocketMessageSize() { | |
return maxWebsocketMessageSize; | |
} | |
/** | |
* Set the max websocket message size | |
* | |
* @param maxWebsocketMessageSize the max message size, in bytes | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxWebsocketMessageSize(int maxWebsocketMessageSize) { | |
this.maxWebsocketMessageSize = maxWebsocketMessageSize; | |
return this; | |
} | |
/** | |
* Get the default host name to be used by this client in requests if none is provided when making the request. | |
* | |
* @return the default host name | |
*/ | |
public String getDefaultHost() { | |
return defaultHost; | |
} | |
/** | |
* Set the default host name to be used by this client in requests if none is provided when making the request. | |
* | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setDefaultHost(String defaultHost) { | |
this.defaultHost = defaultHost; | |
return this; | |
} | |
/** | |
* Get the default port to be used by this client in requests if none is provided when making the request. | |
* | |
* @return the default port | |
*/ | |
public int getDefaultPort() { | |
return defaultPort; | |
} | |
/** | |
* Set the default port to be used by this client in requests if none is provided when making the request. | |
* | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setDefaultPort(int defaultPort) { | |
this.defaultPort = defaultPort; | |
return this; | |
} | |
/** | |
* Get the protocol version. | |
* | |
* @return the protocol version | |
*/ | |
public HttpVersion getProtocolVersion() { | |
return protocolVersion; | |
} | |
/** | |
* Set the protocol version. | |
* | |
* @param protocolVersion the protocol version | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setProtocolVersion(HttpVersion protocolVersion) { | |
if (protocolVersion == null) { | |
throw new IllegalArgumentException("protocolVersion must not be null"); | |
} | |
this.protocolVersion = protocolVersion; | |
return this; | |
} | |
/** | |
* Set the maximum HTTP chunk size | |
* @param maxChunkSize the maximum chunk size | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxChunkSize(int maxChunkSize) { | |
this.maxChunkSize = maxChunkSize; | |
return this; | |
} | |
/** | |
* Returns the maximum HTTP chunk size | |
* @return the maximum HTTP chunk size | |
*/ | |
public int getMaxChunkSize() { | |
return maxChunkSize; | |
} | |
/** | |
* @return the maximum length of the initial line for HTTP/1.x (e.g. {@code "GET / HTTP/1.0"}) | |
*/ | |
public int getMaxInitialLineLength() { | |
return maxInitialLineLength; | |
} | |
/** | |
* Set the maximum length of the initial line for HTTP/1.x (e.g. {@code "HTTP/1.1 200 OK"}) | |
* | |
* @param maxInitialLineLength the new maximum initial length | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxInitialLineLength(int maxInitialLineLength) { | |
this.maxInitialLineLength = maxInitialLineLength; | |
return this; | |
} | |
/** | |
* @return Returns the maximum length of all headers for HTTP/1.x | |
*/ | |
public int getMaxHeaderSize() { | |
return maxHeaderSize; | |
} | |
/** | |
* Set the maximum length of all headers for HTTP/1.x . | |
* | |
* @param maxHeaderSize the new maximum length | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxHeaderSize(int maxHeaderSize) { | |
this.maxHeaderSize = maxHeaderSize; | |
return this; | |
} | |
/** | |
* Set the maximum requests allowed in the wait queue, any requests beyond the max size will result in | |
* a ConnectionPoolTooBusyException. If the value is set to a negative number then the queue will be unbounded. | |
* @param maxWaitQueueSize the maximum number of waiting requests | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxWaitQueueSize(int maxWaitQueueSize) { | |
this.maxWaitQueueSize = maxWaitQueueSize; | |
return this; | |
} | |
/** | |
* Returns the maximum wait queue size | |
* @return the maximum wait queue size | |
*/ | |
public int getMaxWaitQueueSize() { | |
return maxWaitQueueSize; | |
} | |
/** | |
* @return the initial HTTP/2 connection settings | |
*/ | |
public Http2Settings getInitialSettings() { | |
return initialSettings; | |
} | |
/** | |
* Set the HTTP/2 connection settings immediately sent by to the server when the client connects. | |
* | |
* @param settings the settings value | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setInitialSettings(Http2Settings settings) { | |
this.initialSettings = settings; | |
return this; | |
} | |
@Override | |
public HttpClientOptions setUseAlpn(boolean useAlpn) { | |
return (HttpClientOptions) super.setUseAlpn(useAlpn); | |
} | |
@Override | |
public HttpClientOptions setSslEngineOptions(SSLEngineOptions sslEngineOptions) { | |
return (HttpClientOptions) super.setSslEngineOptions(sslEngineOptions); | |
} | |
@Override | |
public HttpClientOptions setJdkSslEngineOptions(JdkSSLEngineOptions sslEngineOptions) { | |
return (HttpClientOptions) super.setSslEngineOptions(sslEngineOptions); | |
} | |
@Override | |
public HttpClientOptions setOpenSslEngineOptions(OpenSSLEngineOptions sslEngineOptions) { | |
return (HttpClientOptions) super.setSslEngineOptions(sslEngineOptions); | |
} | |
/** | |
* @return the list of protocol versions to provide during the Application-Layer Protocol Negotiation. When | |
* the list is empty, the client provides a best effort list according to {@link #setProtocolVersion} | |
*/ | |
public List<HttpVersion> getAlpnVersions() { | |
return alpnVersions; | |
} | |
/** | |
* Set the list of protocol versions to provide to the server during the Application-Layer Protocol Negotiation. | |
* When the list is empty, the client provides a best effort list according to {@link #setProtocolVersion}: | |
* | |
* <ul> | |
* <li>{@link HttpVersion#HTTP_2}: [ "h2", "http/1.1" ]</li> | |
* <li>otherwise: [{@link #getProtocolVersion()}]</li> | |
* </ul> | |
* | |
* @param alpnVersions the versions | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setAlpnVersions(List<HttpVersion> alpnVersions) { | |
this.alpnVersions = alpnVersions; | |
return this; | |
} | |
/** | |
* @return true when an <i>h2c</i> connection is established using an HTTP/1.1 upgrade request, false when directly | |
*/ | |
public boolean isHttp2ClearTextUpgrade() { | |
return http2ClearTextUpgrade; | |
} | |
/** | |
* Set to {@code true} when an <i>h2c</i> connection is established using an HTTP/1.1 upgrade request, and {@code false} | |
* when an <i>h2c</i> connection is established directly (with prior knowledge). | |
* | |
* @param value the upgrade value | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setHttp2ClearTextUpgrade(boolean value) { | |
this.http2ClearTextUpgrade = value; | |
return this; | |
} | |
/** | |
* @return the maximum number of redirection a request can follow | |
*/ | |
public int getMaxRedirects() { | |
return maxRedirects; | |
} | |
/** | |
* Set to {@code maxRedirects} the maximum number of redirection a request can follow. | |
* | |
* @param maxRedirects the maximum number of redirection | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setMaxRedirects(int maxRedirects) { | |
this.maxRedirects = maxRedirects; | |
return this; | |
} | |
/** | |
* @return whether the client should always use SNI on TLS/SSL connections | |
*/ | |
public boolean isForceSni() { | |
return forceSni; | |
} | |
/** | |
* By default, the server name is only sent for Fully Qualified Domain Name (FQDN), setting | |
* this property to {@code true} forces the server name to be always sent. | |
* | |
* @param forceSni true when the client should always use SNI on TLS/SSL connections | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setForceSni(boolean forceSni) { | |
this.forceSni = forceSni; | |
return this; | |
} | |
public HttpClientOptions setMetricsName(String metricsName) { | |
return (HttpClientOptions) super.setMetricsName(metricsName); | |
} | |
public HttpClientOptions setProxyOptions(ProxyOptions proxyOptions) { | |
return (HttpClientOptions) super.setProxyOptions(proxyOptions); | |
} | |
@Override | |
public HttpClientOptions setLocalAddress(String localAddress) { | |
return (HttpClientOptions) super.setLocalAddress(localAddress); | |
} | |
@Override | |
public HttpClientOptions setLogActivity(boolean logEnabled) { | |
return (HttpClientOptions) super.setLogActivity(logEnabled); | |
} | |
/** | |
* @return the initial buffer size for the HTTP decoder | |
*/ | |
public int getDecoderInitialBufferSize() { return decoderInitialBufferSize; } | |
/** | |
* set to {@code initialBufferSizeHttpDecoder} the initial buffer of the HttpDecoder. | |
* @param decoderInitialBufferSize the initial buffer size | |
* @return a reference to this, so the API can be used fluently | |
*/ | |
public HttpClientOptions setDecoderInitialBufferSize(int decoderInitialBufferSize) { | |
Arguments.require(decoderInitialBufferSize > 0, "initialBufferSizeHttpDecoder must be > 0"); | |
this.decoderInitialBufferSize = decoderInitialBufferSize; | |
return this; | |
} | |
@Override | |
public boolean equals(Object o) { | |
if (this == o) return true; | |
if (!(o instanceof HttpClientOptions)) return false; | |
if (!super.equals(o)) return false; | |
HttpClientOptions that = (HttpClientOptions) o; | |
if (defaultPort != that.defaultPort) return false; | |
if (keepAlive != that.keepAlive) return false; | |
if (maxPoolSize != that.maxPoolSize) return false; | |
if (http2MultiplexingLimit != that.http2MultiplexingLimit) return false; | |
if (maxWebsocketFrameSize != that.maxWebsocketFrameSize) return false; | |
if (maxWebsocketMessageSize != that.maxWebsocketMessageSize) return false; | |
if (pipelining != that.pipelining) return false; | |
if (pipeliningLimit != that.pipeliningLimit) return false; | |
if (tryUseCompression != that.tryUseCompression) return false; | |
if (verifyHost != that.verifyHost) return false; | |
if (!defaultHost.equals(that.defaultHost)) return false; | |
if (protocolVersion != that.protocolVersion) return false; | |
if (maxChunkSize != that.maxChunkSize) return false; | |
if (maxWaitQueueSize != that.maxWaitQueueSize) return false; | |
if (initialSettings == null ? that.initialSettings != null : !initialSettings.equals(that.initialSettings)) return false; | |
if (alpnVersions == null ? that.alpnVersions != null : !alpnVersions.equals(that.alpnVersions)) return false; | |
if (http2ClearTextUpgrade != that.http2ClearTextUpgrade) return false; | |
if (http2ConnectionWindowSize != that.http2ConnectionWindowSize) return false; | |
if (sendUnmaskedFrames != that.sendUnmaskedFrames) return false; | |
if (maxRedirects != that.maxRedirects) return false; | |
if (decoderInitialBufferSize != that.decoderInitialBufferSize) return false; | |
return true; | |
} | |
@Override | |
public int hashCode() { | |
int result = super.hashCode(); | |
result = 31 * result + (verifyHost ? 1 : 0); | |
result = 31 * result + maxPoolSize; | |
result = 31 * result + http2MultiplexingLimit; | |
result = 31 * result + (keepAlive ? 1 : 0); | |
result = 31 * result + (pipelining ? 1 : 0); | |
result = 31 * result + pipeliningLimit; | |
result = 31 * result + (tryUseCompression ? 1 : 0); | |
result = 31 * result + maxWebsocketFrameSize; | |
result = 31 * result + maxWebsocketMessageSize; | |
result = 31 * result + defaultHost.hashCode(); | |
result = 31 * result + defaultPort; | |
result = 31 * result + protocolVersion.hashCode(); | |
result = 31 * result + maxChunkSize; | |
result = 31 * result + maxWaitQueueSize; | |
result = 31 * result + (initialSettings != null ? initialSettings.hashCode() : 0); | |
result = 31 * result + (alpnVersions != null ? alpnVersions.hashCode() : 0); | |
result = 31 * result + (http2ClearTextUpgrade ? 1 : 0); | |
result = 31 * result + http2ConnectionWindowSize; | |
result = 31 * result + (sendUnmaskedFrames ? 1 : 0); | |
result = 31 * result + maxRedirects; | |
result = 31 * result + decoderInitialBufferSize; | |
return result; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment