/*
* Mojito Distributed Hash Table (Mojito DHT)
* Copyright (C) 2006-2007 LimeWire LLC
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
package org.limewire.mojito.settings;
import org.limewire.mojito.routing.Vendor;
import org.limewire.mojito.routing.Version;
import org.limewire.mojito.util.ArrayUtils;
import org.limewire.setting.BooleanSetting;
import org.limewire.setting.IntSetting;
import org.limewire.setting.LongSetting;
import org.limewire.setting.StringSetting;
/**
* Miscellaneous context settings.
*/
public class ContextSettings extends MojitoProps {
private ContextSettings() {}
/**
* A multiplier that is used to determinate the number
* of Nodes to where we're sending shutdown messages.
*/
public static final IntSetting SHUTDOWN_MESSAGES_MULTIPLIER
= FACTORY.createRemoteIntSetting("SHUTDOWN_MESSAGES_MULTIPLIER", 2,
"Mojito.ShutdownMessagesMultiplier", 0, 20);
/**
* The time interval to compute the locally estimated Network size.
*/
public static final LongSetting ESTIMATE_NETWORK_SIZE_EVERY
= FACTORY.createRemoteLongSetting("ESTIMATE_NETWORK_SIZE_EVERY", 60L*1000L,
"Mojito.EstimateNetworkSizeEvery", 1000L, 5L*60L*1000L);
/**
* The time interval in which the estimated Network size can be updated.
*/
public static final LongSetting UPDATE_NETWORK_SIZE_EVERY
= FACTORY.createRemoteLongSetting("UPDATE_NETWORK_SIZE_EVERY", 5L*1000L,
"Mojito.UpdateNetworkSizeEvery", 5L*1000L, 5L*60L*1000L);
/**
* The maximum number of locally estimated Network sizes to
* keep in Memory and to use as basis for the local estimation.
*/
public static final IntSetting MAX_LOCAL_HISTORY_SIZE
= FACTORY.createRemoteIntSetting("MAX_LOCAL_HISTORY_SIZE", 20,
"Mojito.MaxLocalHistorySize", 1, 100);
/**
* Whether or not only live Nodes should be used to estimate the
* DHT size.
*/
public static final BooleanSetting ESTIMATE_WITH_LIVE_NODES_ONLY
= FACTORY.createRemoteBooleanSetting("ESTIMATE_WITH_LIVE_NODES_ONLY", true,
"Mojito.EstimateWithLiveNodesOnly");
/**
* The maximum number of remotely estimated Network sizes to
* keep in Memory and to use as basis for the local estimation.
*/
public static final IntSetting MAX_REMOTE_HISTORY_SIZE
= FACTORY.createRemoteIntSetting("MAX_REMOTE_HISTORY_SIZE", 10,
"Mojito.MaxRemoteHistorySize", 0, 100);
/**
* Whether or not to estimate the Network size.
*/
public static final BooleanSetting COUNT_REMOTE_SIZE
= FACTORY.createRemoteBooleanSetting("COUNT_REMOTE_SIZE",
true, "Mojito.CountRemoteSize");
/**
* The number smallest and biggest DHT size estimates to skip.
*/
public static final IntSetting SKIP_REMOTE_ESTIMATES
= FACTORY.createRemoteIntSetting("SKIP_REMOTE_ESTIMATES", 1,
"Mojito.SkipRemoteEstimates", 0, Integer.MAX_VALUE);
/**
* The name of the master key file.
*/
public static final StringSetting MASTER_KEY
= FACTORY.createStringSetting("MASTER_KEY", "public.key");
/**
* The maximum time to wait on an Object.
*/
public static final LongSetting WAIT_ON_LOCK
= FACTORY.createLongSetting("WAIT_ON_LOCK", 3L*60L*1000L);
/**
* Whether or not assertion is enabled for collision pings.
* This is used for testing! Default should be always true!
*/
public static final BooleanSetting ASSERT_COLLISION_PING
= FACTORY.createBooleanSetting("ASSERT_COLLISION_PING", true);
/**
* This Node's Vendor code.
*/
public static final IntSetting VENDOR
= FACTORY.createIntSetting("VENDOR", ArrayUtils.toInteger("LIME"));
/**
* This Node's Version.
*/
public static final IntSetting VERSION
= FACTORY.createIntSetting("VERSION", 0);
/**
* Returns the local Node's Vendor ID.
*/
public static Vendor getVendor() {
return Vendor.valueOf(ContextSettings.VENDOR.getValue());
}
/**
* Returns the local Node's Version number.
*/
public static Version getVersion() {
return Version.valueOf(ContextSettings.VERSION.getValue());
}
/**
* Whether or not we're sending a shutdown message.
*/
public static final BooleanSetting SEND_SHUTDOWN_MESSAGE
= FACTORY.createBooleanSetting("SEND_SHUTDOWN_MESSAGE", true);
/**
* Whether or not certain operations throw a NotBootstrappedException
* if Mojito is not bootstrapped. This setting is meant for testing!
* Do not change w/o having a good reason!
*/
public static final BooleanSetting THROW_EXCEPTION_IF_NOT_BOOTSTRAPPED
= FACTORY.createBooleanSetting("THROW_EXCEPTION_IF_NOT_BOOTSTRAPPED", true);
/**
* Returns the lock timeout.
*/
public static long getWaitOnLock(long timeout) {
return Math.max((long)(timeout * 1.5f),
ContextSettings.WAIT_ON_LOCK.getValue());
}
}