if (properties == null || properties.size() == 0)
return;
// Connection Manager
ConfigMap conn = properties.getPropertyAsMap(HTTPConnectionManagerSettings.CONNECTION_MANAGER, null);
if (conn != null)
{
// Cookie policy.
if (conn.getProperty(HTTPConnectionManagerSettings.COOKIE_POLICY) != null)
{
connectionManagerSettings.setCookiePolicy(conn.getPropertyAsString(HTTPConnectionManagerSettings.COOKIE_POLICY,
CookiePolicy.DEFAULT));
}
// Max Connections Total
if (conn.getProperty(HTTPConnectionManagerSettings.MAX_TOTAL_CONNECTIONS) != null)
{
int maxTotal = conn.getPropertyAsInt(HTTPConnectionManagerSettings.MAX_TOTAL_CONNECTIONS,
MultiThreadedHttpConnectionManager.DEFAULT_MAX_TOTAL_CONNECTIONS);
connectionManagerSettings.setMaxTotalConnections(maxTotal);
}
// Default Max Connections Per Host
int defaultMaxConnsPerHost = MultiThreadedHttpConnectionManager.DEFAULT_MAX_HOST_CONNECTIONS;
if (conn.getProperty(HTTPConnectionManagerSettings.DEFAULT_MAX_CONNECTIONS_PER_HOST) != null)
{
defaultMaxConnsPerHost = conn.getPropertyAsInt(HTTPConnectionManagerSettings.DEFAULT_MAX_CONNECTIONS_PER_HOST,
MultiThreadedHttpConnectionManager.DEFAULT_MAX_HOST_CONNECTIONS);
connectionManagerSettings.setDefaultMaxConnectionsPerHost(defaultMaxConnsPerHost);
}
// Connection Timeout
if (conn.getProperty(HTTPConnectionManagerSettings.CONNECTION_TIMEOUT) != null)
{
int timeout = conn.getPropertyAsInt(HTTPConnectionManagerSettings.CONNECTION_TIMEOUT, 0);
if (timeout >= 0)
connectionManagerSettings.setConnectionTimeout(timeout);
}
// Socket Timeout
if (conn.getProperty(HTTPConnectionManagerSettings.SOCKET_TIMEOUT) != null)
{
int timeout = conn.getPropertyAsInt(HTTPConnectionManagerSettings.SOCKET_TIMEOUT, 0);
if (timeout >= 0)
connectionManagerSettings.setSocketTimeout(timeout);
}
// Stale Checking
if (conn.getProperty(HTTPConnectionManagerSettings.STALE_CHECKING_ENABLED) != null)
{
boolean staleCheck = conn.getPropertyAsBoolean(HTTPConnectionManagerSettings.STALE_CHECKING_ENABLED, true);
connectionManagerSettings.setStaleCheckingEnabled(staleCheck);
}
// Send Buffer Size
if (conn.getProperty(HTTPConnectionManagerSettings.SEND_BUFFER_SIZE) != null)
{
int bufferSize = conn.getPropertyAsInt(HTTPConnectionManagerSettings.SEND_BUFFER_SIZE, 0);
if (bufferSize > 0)
connectionManagerSettings.setSendBufferSize(bufferSize);
}
// Send Receive Size
if (conn.getProperty(HTTPConnectionManagerSettings.RECEIVE_BUFFER_SIZE) != null)
{
int bufferSize = conn.getPropertyAsInt(HTTPConnectionManagerSettings.RECEIVE_BUFFER_SIZE, 0);
if (bufferSize > 0)
connectionManagerSettings.setReceiveBufferSize(bufferSize);
}
// TCP No Delay (Nagel's Algorithm)
if (conn.getProperty(HTTPConnectionManagerSettings.TCP_NO_DELAY) != null)
{
boolean noNagel = conn.getPropertyAsBoolean(HTTPConnectionManagerSettings.TCP_NO_DELAY, true);
connectionManagerSettings.setTcpNoDelay(noNagel);
}
// Linger
if (conn.getProperty(HTTPConnectionManagerSettings.LINGER) != null)
{
int linger = conn.getPropertyAsInt(HTTPConnectionManagerSettings.LINGER, -1);
connectionManagerSettings.setLinger(linger);
}
// Max Connections Per Host
List hosts = conn.getPropertyAsList(HTTPConnectionManagerSettings.MAX_PER_HOST, null);
if (hosts != null)
{
List hostSettings = new ArrayList();
Iterator it = hosts.iterator();
while (it.hasNext())
{
ConfigMap maxPerHost = (ConfigMap) it.next();
HostConfigurationSettings hostConfig = new HostConfigurationSettings();
// max-connections
if (maxPerHost.getProperty(HostConfigurationSettings.MAX_CONNECTIONS) != null)
{
int maxConn = maxPerHost.getPropertyAsInt(HostConfigurationSettings.MAX_CONNECTIONS,
defaultMaxConnsPerHost);
hostConfig.setMaximumConnections(maxConn);
}
// host
if (maxPerHost.getProperty(HostConfigurationSettings.HOST) != null)
{
String host = maxPerHost.getPropertyAsString(HostConfigurationSettings.HOST, null);
hostConfig.setHost(host);
if (host != null)
{
// port
int port = maxPerHost.getPropertyAsInt(HostConfigurationSettings.PORT, 0);
hostConfig.setPort(port);
// protocol-factory
ConfigMap factoryMap = maxPerHost.getPropertyAsMap(HostConfigurationSettings.PROTOCOL_FACFORY, null);
if (factoryMap != null)
{
String className = factoryMap.getPropertyAsString(CLASS, null);
if (className != null)
{
Class factoryClass = ClassUtil.createClass(className);
ProtocolFactory protocolFactory = (ProtocolFactory)ClassUtil.createDefaultInstance(factoryClass, ProtocolFactory.class);
String factoryId = factoryMap.getPropertyAsString(ID, host + "_protocol_factory");
ConfigMap protocolProperties = factoryMap.getPropertyAsMap(PROPERTIES, null);
protocolFactory.initialize(factoryId, protocolProperties);
}
}
// protocol
else
{
String protocol = maxPerHost.getPropertyAsString(HostConfigurationSettings.PROTOCOL, null);
hostConfig.setProtocol(protocol);
}
}
}
// proxy
ConfigMap proxy = maxPerHost.getPropertyAsMap(HostConfigurationSettings.PROXY, null);
if (proxy != null)
{
// host
String proxyHost = proxy.getPropertyAsString(HostConfigurationSettings.HOST, null);
hostConfig.setProxyHost(proxyHost);
if (proxyHost != null)
{
// port
int port = proxy.getPropertyAsInt(HostConfigurationSettings.PORT, 0);
hostConfig.setProxyPort(port);
}
}
// local-address
if (maxPerHost.getProperty(HostConfigurationSettings.LOCAL_ADDRESS) != null)
{
String localAddress = maxPerHost.getPropertyAsString(HostConfigurationSettings.LOCAL_ADDRESS, null);
hostConfig.setLocalAddress(localAddress);
}
// virtual-host
if (maxPerHost.getProperty(HostConfigurationSettings.VIRTUAL_HOST) != null)
{
String virtualHost = maxPerHost.getPropertyAsString(HostConfigurationSettings.VIRTUAL_HOST, null);
hostConfig.setVirtualHost(virtualHost);
}
hostSettings.add(hostConfig);
}
if (hostSettings.size() > 0)
connectionManagerSettings.setMaxConnectionsPerHost(hostSettings);
}
setConnectionManagerSettings(connectionManagerSettings);
}
// Cookie Limit
if (properties.getProperty(COOKIE_LIMIT) != null)
{
int cl = properties.getPropertyAsInt(COOKIE_LIMIT, DEFAULT_COOKIE_LIMIT);
setCookieLimit(cl);
}
// Allow Lax SSL
if (properties.getProperty(ALLOW_LAX_SSL) != null)
{
boolean lax = properties.getPropertyAsBoolean(ALLOW_LAX_SSL, false);
setAllowLaxSSL(lax);
}
// Content Chunked
if (properties.getProperty(CONTENT_CHUNKED) != null)
{
boolean ch = properties.getPropertyAsBoolean(CONTENT_CHUNKED, false);
setContentChunked(ch);
}
// External Proxy
ConfigMap extern = properties.getPropertyAsMap(ExternalProxySettings.EXTERNAL_PROXY, null);
if (extern != null)
{
ExternalProxySettings proxy = new ExternalProxySettings();
String proxyServer = extern.getPropertyAsString(ExternalProxySettings.SERVER, null);
proxy.setProxyServer(proxyServer);
int proxyPort = extern.getPropertyAsInt(ExternalProxySettings.PORT, ExternalProxySettings.DEFAULT_PROXY_PORT);
proxy.setProxyPort(proxyPort);
String ntdomain = extern.getPropertyAsString(ExternalProxySettings.NT_DOMAIN, null);
proxy.setNTDomain(ntdomain);
String username = extern.getPropertyAsString(ExternalProxySettings.USERNAME, null);
proxy.setUsername(username);
String password = extern.getPropertyAsString(ExternalProxySettings.PASSWORD, null);
proxy.setPassword(password);
setExternalProxySettings(proxy);
}
}