/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.service.http.api.tcp;
/**
* Builder of {@link TcpClientSocketProperties}. Instances can only be obtained using {@link TcpClientSocketProperties#builder()}.
* Default values will be used unless specified.
*
* @since 4.0
*/
public final class TcpClientSocketPropertiesBuilder {
protected Integer sendBufferSize;
protected Integer receiveBufferSize;
protected Integer clientTimeout;
protected Boolean sendTcpNoDelay = true;
protected Integer linger;
protected Boolean keepAlive = false;
private Integer connectionTimeout = 30000;
TcpClientSocketPropertiesBuilder() {}
/**
* Defines the size of the buffer to use when sending data. See {@link TcpSocketProperties#getSendBufferSize()}.
* If not set, transport defaults will be used.
*
* @param sendBufferSize size of the buffer (in bytes).
* @return this builder
*/
public TcpClientSocketPropertiesBuilder setSendBufferSize(Integer sendBufferSize) {
this.sendBufferSize = sendBufferSize;
return this;
}
/**
* Defines the size of the buffer to use when receiving data. See {@link TcpSocketProperties#getReceiveBufferSize()}.
* If not set, transport defaults will be used.
*
* @param receiveBufferSize size of the buffer (in bytes).
* @return this builder
*/
public TcpClientSocketPropertiesBuilder setReceiveBufferSize(Integer receiveBufferSize) {
this.receiveBufferSize = receiveBufferSize;
return this;
}
/**
* Defines the SO_TIMEOUT value for client sockets. See {@link TcpSocketProperties#getClientTimeout()}.
* If not set, transport defaults will be used.
*
* @param clientTimeout the timeout (in milliseconds).
* @return this builder
*/
public TcpClientSocketPropertiesBuilder setClientTimeout(Integer clientTimeout) {
this.clientTimeout = clientTimeout;
return this;
}
/**
* Defines whether data should be collected or not before sending. See {@link TcpSocketProperties#getSendTcpNoDelay()}.
* Default value is true.
*
* @param sendTcpNoDelay whether to send everything or collect data
* @return this builder
*/
public TcpClientSocketPropertiesBuilder setSendTcpNoDelay(Boolean sendTcpNoDelay) {
this.sendTcpNoDelay = sendTcpNoDelay;
return this;
}
/**
* Defines the SO_LINGER value, related to how long the socket will take to close. See {@link TcpSocketProperties#getLinger()}.
* If not set, transport defaults will be used.
*
* @param linger timeout (in milliseconds)
* @return this builder
*/
public TcpClientSocketPropertiesBuilder setLinger(Integer linger) {
this.linger = linger;
return this;
}
/**
* Defines the SO_KEEPALIVE behaviour for open sockets. See {@link TcpSocketProperties#getKeepAlive()}.
* Default value is true.
*
* @param keepAlive
* @return
*/
public TcpClientSocketPropertiesBuilder setKeepAlive(Boolean keepAlive) {
this.keepAlive = keepAlive;
return this;
}
/**
* Defines how long to wait for the outbound connection to be created. See {@link TcpClientSocketProperties#getConnectionTimeout()}.
* Default value is 30000.
*
* @param connectionTimeout timeout (in milliseconds)
* @return this builder
*/
public TcpClientSocketPropertiesBuilder setConnectionTimeout(Integer connectionTimeout) {
this.connectionTimeout = connectionTimeout;
return this;
}
/**
* @return a {@link TcpClientSocketProperties} instance as specified.
*/
public TcpClientSocketProperties build() {
return new DefaultTcpClientSocketProperties(sendBufferSize, receiveBufferSize, clientTimeout, sendTcpNoDelay, linger,
keepAlive, connectionTimeout);
}
}