blob: 953387fbc909b47f31d3992ed7a13757817e5fcb [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 org.apache.synapse.transport.nhttp;
import org.apache.synapse.transport.utils.config.HttpTransportConfiguration;
import java.util.ArrayList;
import java.util.List;
/**
* Store and manage properties that tune the nhttp transport
*/
public final class NHttpConfiguration extends HttpTransportConfiguration {
// defaults
private static final int WORKERS_CORE_THREADS = 20;
private static final int WORKERS_MAX_THREADS = 100;
private static final int WORKER_KEEP_ALIVE = 5;
private static final int BLOCKING_QUEUE_LENGTH = -1;
private static final int IO_WORKER_COUNT = Runtime.getRuntime().availableProcessors();
private static final int BUFFER_SIZE = 8192;
// server listener
private static final String S_T_CORE = "snd_t_core";
private static final String S_T_MAX = "snd_t_max";
private static final String S_T_ALIVE = "snd_alive_sec";
private static final String S_T_QLEN = "snd_qlen";
// client sender
private static final String C_T_CORE = "lst_t_core";
private static final String C_T_MAX = "lst_t_max";
private static final String C_T_ALIVE = "lst_alive_sec";
private static final String C_T_QLEN = "lst_qlen";
private static final String IO_WORKERS = "io_threads_per_reactor";
// general
private static final String G_BUFFER_SIZE = "nhttp_buffer_size";
private static final String G_DISABLED_HTTP_METHODS = "nhttp_disabled_methods";
private static NHttpConfiguration _instance = new NHttpConfiguration();
private List<String> methods;
/** Comma separated list of blocked uris*/
public static final String BLOCK_SERVICE_LIST = "http.block_service_list";
/** Default value for BLOCK_SERVICE_LIST*/
public static final String BLOCK_SERVICE_LIST_DEFAULT = "false";
private NHttpConfiguration() {
super("nhttp");
}
@Override
protected int getThreadsPerReactor() {
return getIntProperty(IO_WORKERS, IO_WORKER_COUNT);
}
public static NHttpConfiguration getInstance() {
return _instance;
}
public int getServerCoreThreads() {
return getIntProperty(S_T_CORE, WORKERS_CORE_THREADS);
}
public int getServerMaxThreads() {
return getIntProperty(S_T_MAX, WORKERS_MAX_THREADS);
}
public int getServerKeepalive() {
return getIntProperty(S_T_ALIVE, WORKER_KEEP_ALIVE);
}
public int getServerQueueLen() {
return getIntProperty(S_T_QLEN, BLOCKING_QUEUE_LENGTH);
}
public int getClientCoreThreads() {
return getIntProperty(C_T_CORE, WORKERS_CORE_THREADS);
}
public int getClientMaxThreads() {
return getIntProperty(C_T_MAX, WORKERS_MAX_THREADS);
}
public int getClientKeepalive() {
return getIntProperty(C_T_ALIVE, WORKER_KEEP_ALIVE);
}
public int getClientQueueLen() {
return getIntProperty(C_T_QLEN, BLOCKING_QUEUE_LENGTH);
}
public int getBufferSize() {
return getIntProperty(G_BUFFER_SIZE, BUFFER_SIZE);
}
public boolean isKeepAliveDisabled() {
return getIntProperty(NhttpConstants.DISABLE_KEEPALIVE, 0) == 1;
}
public boolean isPreserveUserAgentHeader() {
return getBooleanProperty(NhttpConstants.USER_AGENT_HEADER_PRESERVE, false);
}
public boolean isPreserveServerHeader() {
return getBooleanProperty(NhttpConstants.SERVER_HEADER_PRESERVE, true);
}
public boolean isCountConnections() {
return getBooleanProperty(NhttpConstants.COUNT_CONNECTIONS, false);
}
public String isServiceListBlocked() {
return getStringProperty(BLOCK_SERVICE_LIST, BLOCK_SERVICE_LIST_DEFAULT);
}
public boolean isHttpMethodDisabled(String method) {
if (methods == null) {
methods = new ArrayList<String>();
String methodsString = getStringProperty(G_DISABLED_HTTP_METHODS, "");
for (String methodStr : methodsString.split(",")) {
methods.add(methodStr.trim().toUpperCase());
}
}
return methods.contains(method);
}
}