/* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package org.jboss.sun.net.httpserver; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.Map; import java.util.logging.Logger; /** * Parameters that users will not likely need to set but are useful for debugging */ class ServerConfig { static int clockTick; static final int DEFAULT_CLOCK_TICK = 10000; // 10 sec. /* These values must be a reasonable multiple of clockTick */ static final long DEFAULT_IDLE_INTERVAL = 300; // 5 min i.e. 300 seconds. static final int DEFAULT_MAX_IDLE_CONNECTIONS = 200; static final long DEFAULT_MAX_REQ_TIME = -1; // default: forever static final long DEFAULT_MAX_RSP_TIME = -1; // default: forever static final long DEFAULT_TIMER_MILLIS = 1000; static final long DEFAULT_DRAIN_AMOUNT = 64 * 1024; static final long DEFAULT_MAX_REQ_HEADER_SIZE = 1024 * 1024; static final int DEFAULT_MAX_REQ_HEADERS = 200; final long idleInterval; final long drainAmount; // max # of bytes to drain from an inputstream final int maxIdleConnections; // The maximum size of request header allowable private static long maxReqHeaderSize; // The maximum number of request headers allowable private static long maxReqHeaders; // max time a request or response is allowed to take final long maxReqTime; final long maxRspTime; final long timerMillis; final boolean debug; public ServerConfig() { this(null); } public ServerConfig(Map<String, String> configuration) { idleInterval = getLongProperty(configuration, "sun.net.httpserver.idleInterval", DEFAULT_IDLE_INTERVAL) * 1000; clockTick = getIntegerProperty(configuration, "sun.net.httpserver.clockTick", DEFAULT_CLOCK_TICK); maxIdleConnections = getIntegerProperty(configuration, "sun.net.httpserver.maxIdleConnections", DEFAULT_MAX_IDLE_CONNECTIONS); drainAmount = getLongProperty(configuration, "sun.net.httpserver.drainAmount", DEFAULT_DRAIN_AMOUNT); maxReqHeaderSize = getLongProperty(configuration, "sun.net.httpserver.maxReqHeaderSize", DEFAULT_MAX_REQ_HEADER_SIZE); maxReqHeaders = getLongProperty(configuration, "sun.net.httpserver.maxReqHeaders", DEFAULT_MAX_REQ_HEADERS); maxReqTime = getLongProperty(configuration, "sun.net.httpserver.maxReqTime", DEFAULT_MAX_REQ_TIME); maxRspTime = getLongProperty(configuration, "sun.net.httpserver.maxRspTime", DEFAULT_MAX_RSP_TIME); timerMillis = getLongProperty(configuration, "sun.net.httpserver.timerMillis", DEFAULT_TIMER_MILLIS); debug = getBooleanProperty(configuration, "sun.net.httpserver.debug"); } void checkLegacyProperties(final Logger logger) { // legacy properties that are no longer used // print a warning to logger if they are set. java.security.AccessController.doPrivileged(new PrivilegedAction<Void>() { public Void run() { if (System.getProperty("sun.net.httpserver.readTimeout") != null) { logger.warning("sun.net.httpserver.readTimeout " + "property is no longer used. " + "Use sun.net.httpserver.maxReqTime instead."); } if (System.getProperty("sun.net.httpserver.writeTimeout") != null) { logger.warning("sun.net.httpserver.writeTimeout " + "property is no longer used. Use " + "sun.net.httpserver.maxRspTime instead."); } if (System.getProperty("sun.net.httpserver.selCacheTimeout") != null) { logger.warning("sun.net.httpserver.selCacheTimeout " + "property is no longer used."); } return null; } }); } boolean debugEnabled() { return debug; } long getIdleInterval() { return idleInterval; } int getClockTick() { return clockTick; } int getMaxIdleConnections() { return maxIdleConnections; } long getDrainAmount() { return drainAmount; } static long getMaxReqHeaderSize() { return maxReqHeaderSize; } static long getMaxReqHeaders() { return maxReqHeaders; } long getMaxReqTime() { return maxReqTime; } long getMaxRspTime() { return maxRspTime; } long getTimerMillis() { return timerMillis; } private long getLongProperty(final Map<String, String> configuration, final String property, final long defaultVal) { if (configuration != null && configuration.containsKey(property)) { return Long.parseLong(configuration.get(property)); } return AccessController.doPrivileged(new PrivilegedAction<Long>() { public Long run() { return Long.getLong(property, defaultVal); } }).longValue(); } private int getIntegerProperty(final Map<String, String> configuration, final String property, final int defaultVal) { if (configuration != null && configuration.containsKey(property)) { return Integer.parseInt(configuration.get(property)); } return AccessController.doPrivileged(new PrivilegedAction<Integer>() { public Integer run() { return Integer.getInteger(property, defaultVal); } }).intValue(); } private boolean getBooleanProperty(final Map<String, String> configuration, final String property) { if (configuration != null && configuration.containsKey(property)) { return Boolean.parseBoolean(configuration.get(property)); } return AccessController.doPrivileged(new PrivilegedAction<Boolean>() { public Boolean run() { return Boolean.valueOf(Boolean.getBoolean(property)); } }).booleanValue(); } }