blob: 7149da971db760e4d03c52ef32f0c11f528a3b24 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 flex.messaging.services.http;
import java.util.List;
import org.apache.commons.httpclient.cookie.CookiePolicy;
/**
* Establishes the settings used to construct an Apache Commons HTTPClient
* HttpConnectionManager for the Proxy Service.
*/
public class HTTPConnectionManagerSettings {
public static final String COOKIE_POLICY = "cookie-policy";
public static final String CONNECTION_MANAGER = "connection-manager";
public static final String CONNECTION_TIMEOUT = "connection-timeout";
public static final String DEFAULT_MAX_CONNECTIONS_PER_HOST = "default-max-connections-per-host";
public static final String LINGER = "linger";
public static final String MAX_PER_HOST = "max-per-host";
public static final String MAX_TOTAL_CONNECTIONS = "max-total-connections";
public static final String RECEIVE_BUFFER_SIZE = "receive-buffer-size";
public static final String SEND_BUFFER_SIZE = "send-buffer-size";
public static final String SOCKET_TIMEOUT = "socket-timeout";
public static final String STALE_CHECKING_ENABLED = "stale-checking-enabled";
public static final String TCP_NO_DELAY = "tcp-no-delay";
/**
* The default maximum number of connections allowed per host.
*/
public static final int DEFAULT_MAX_CONNECTIONS_HOST = 2; // Per RFC 2616 sec 8.1.4
/**
* The default maximum number of connections allowed overall.
*/
public static final int DEFAULT_MAX_TOTAL_CONNECTIONS = 20;
private String cookiePolicy;
private int connectionTimeout;
private int defaultMaxConnectionsPerHost;
private int linger;
private int maxTotalConnections;
private List maxConnectionsPerHost;
private int receiveBufferSize;
private int sendBufferSize;
private int socketTimeout;
private boolean staleCheckingEnabled;
private boolean tcpNoDelay;
/**
* Creates a default <code>HTTPConnectionManagerSettings</code> instance.
*/
public HTTPConnectionManagerSettings() {
cookiePolicy = CookiePolicy.DEFAULT;
defaultMaxConnectionsPerHost = DEFAULT_MAX_CONNECTIONS_HOST;
maxTotalConnections = DEFAULT_MAX_TOTAL_CONNECTIONS;
linger = -1;
staleCheckingEnabled = true;
tcpNoDelay = true;
}
/**
* Returns the cookie policy.
*
* @return The cookie policy.
*/
public String getCookiePolicy() {
return cookiePolicy;
}
/**
* Sets the cookie policy.
*
* @param cookiePolicy The cookie policy.
*/
public void setCookiePolicy(String cookiePolicy) {
this.cookiePolicy = cookiePolicy;
}
/**
* Returns the number of milliseconds to wait before a connection will
* timeout.
*
* @return The number of milliseconds to wait until a connection is
* established. The default value is 0 which means a timeout is not used.
*/
public int getConnectionTimeout() {
return connectionTimeout;
}
/**
* Sets the number of milliseconds to wait before a connection will
* timeout.
*
* @param value - timeout in milliseconds
*/
public void setConnectionTimeout(int value) {
connectionTimeout = value;
}
/**
* Returns the default maximum number of connections allowed per host.
*
* @return The default maximum number of connections allowed per host.
* The default is 2 as per RFC 2616 section 8.1.4.
*/
public int getDefaultMaxConnectionsPerHost() {
return defaultMaxConnectionsPerHost;
}
/**
* Sets the default maximum number of connections allowed per host.
*
* @param value - the maximum number of connections
*/
public void setDefaultMaxConnectionsPerHost(int value) {
defaultMaxConnectionsPerHost = value;
}
/**
* Returns linger-on-close timeout in seconds.
*
* @return int - A value of <code>0</code> implies that the option is
* disabled. A value of <code>-1</code> implies that the JRE default is
* used.
*/
public int getLinger() {
return linger;
}
/**
* Sets the linger-on-close timeout (in seconds).
*
* @param linger An int. Use <code>0</code> to disable. Use <code>-1</code>
* to rely on the JRE default.
*/
public void setLinger(int linger) {
this.linger = linger;
}
/**
* Returns a collection of HostConfigurationSettings which specify
* connection options on a host-by-host basis.
*
* @return A List of HostConfigurationSettings.
* @see flex.messaging.services.http.HostConfigurationSettings
*/
public List getMaxConnectionsPerHost() {
return maxConnectionsPerHost;
}
/**
* Sets the list of HostConfigurationSettings specifying connection
* options on a host-by-host basis.
*
* @param value The list of HostConfigurationSettings.
* @see flex.messaging.services.http.HostConfigurationSettings
*/
public void setMaxConnectionsPerHost(List value) {
maxConnectionsPerHost = value;
}
/**
* Returns the maximum number of connections allowed.
*
* @return The maximum number of connections allowed.
*/
public int getMaxTotalConnections() {
return maxTotalConnections;
}
/**
* Sets the maximum number of connections allowed.
*
* @param value - the maximum number of connections
*/
public void setMaxTotalConnections(int value) {
maxTotalConnections = value;
}
/**
* Returns The size of the underlying receive buffers.
*
* @return The hint given to the kernel about the size of the underlying
* buffers used by the platform for incoming network I/O.
*/
public int getReceiveBufferSize() {
return receiveBufferSize;
}
/**
* Sets a suggestion for kernel from the application about the size of
* buffers to use for the data to be received over the socket.
*
* @param value - the suggested receive buffer size
*/
public void setReceiveBufferSize(int value) {
receiveBufferSize = value;
}
/**
* Return the size of the underlying send buffers.
*
* @return The hint given to the kernel about the size of the underlying
* buffers used by the platform for outgoing network I/O.
*/
public int getSendBufferSize() {
return sendBufferSize;
}
/**
* Sets a suggestion for kernel from the application about the size of
* buffers to use for the data to be sent over the socket.
*
* @param sendBufferSize the suggested send buffer size
*/
public void setSendBufferSize(int sendBufferSize) {
this.sendBufferSize = sendBufferSize;
}
/**
* Return the default socket timeout in milliseconds for waiting for data.
*
* @return The default socket timeout in milliseconds for waiting for data.
* The default is 0 which is interpreted as an infinite timeout.
*/
public int getSocketTimeout() {
return socketTimeout;
}
/**
* Sets the socket timeout in milliseconds for waiting for data.
*
* @param value - the timeout in milliseconds
*/
public void setSocketTimeout(int value) {
socketTimeout = value;
}
/**
* Returns whether a check for stale connections is to be performed.
*
* @return Whether a check for stale connections is to be performed.
* The default is true.
*/
public boolean isStaleCheckingEnabled() {
return staleCheckingEnabled;
}
/**
* Sets whether a check should be performed for stale connections.
* Disabling the check may result in a slight performance improvement at
* the risk of getting an I/O error when executing a request over a
* connection that has been closed at the server side.
*
* @param value - whether stale connection checking should be performed
*/
public void setStaleCheckingEnabled(boolean value) {
staleCheckingEnabled = value;
}
/**
* Return whether Nagle's algorithm should be used for this connection.
*
* @return Determines whether Nagle's algorithm is to be used with this
* connection. The default is true and Nagle's algorithm is NOT to be used
* (i.e. TCP_NODELAY is enabled).
*/
public boolean isTcpNoDelay() {
return tcpNoDelay;
}
/**
* Sets whether Nagle's algorithm should be used for this connection. If
* set to true, Nagle's algorithm is to NOT be used (i.e. TCP_NODELAY
* is enabled).
*
* @param value - whether Nagle's algorithm should be used
*/
public void setTcpNoDelay(boolean value) {
tcpNoDelay = value;
}
}