Cfg.java
| Index Score | ||
|---|---|---|
![]() |
![]() |
org.furthurnet.furi |
![]() |
![]() |
Furthurnet |
View: Reasons, Metrics, Source Code
These are the metrics that contribute to the Enerjy Score for this file, ranked by impact. So the metrics listed at the top influence the score to a greater extent that the metrics listed at the bottom.
/*
* FURI - A distributed peer-to-peer file sharing system.
* Copyright (C) 2000-2002 William W. Wong, Furthur Network
* williamw@jps.net
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.furthurnet.furi;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.ServerSocket;
import java.util.Properties;
import java.util.Random;
import java.util.StringTokenizer;
import java.util.Vector;
import org.furthurnet.datastructures.supporting.Constants;
import org.furthurnet.tray.TrayHandler;
public class Cfg
{
/* constants (these do not live in the config file) */
public static final int MIN_VALID_PORT = 1;
public static final int MAX_VALID_PORT = 9999;
public static final int MIN_RAND_PORT = 1024;
public static final int MAX_RAND_PORT = MAX_VALID_PORT;
public static final int mNetTTL = 4;
public static final int mNetMaxTTL = 7;
public static final int mSearchTTL = 6;
public static final int mNetMaxHostToCatch = 300;
public static final int mNetMaxSendQueue = 600;
public static final int mPingFrequency = 45000;
public static final int mPingTimeout = 20000;
public static final int mSearchMaxSearch = 10000;
public static final int mSearchMaxConcurrent = 20;
public static final int mNetMaxRate = 50000;
public static final int mNetConnectionTimeout = 15000;
public static final boolean mDownloadAutoRemoveCompleted = false;
public static final boolean mAutoSearchCandidate = true;
public static final boolean mAutoCleanup = true;
public static final boolean mApplyFilterdHosts = false;
public static final int mChatMax = 100;
public static final boolean mDisconnectApplyPolicy = true;
public static final int mDisconnectDropRatio = 50;
public static final int mDisconnectLatency = 60000;
public static final int mMaxDeprecatedTime = 60000;
public static final String mIrcUserName = "Furthr";
public static final String mIrcFilterString = "***";
public static final String mIrcTopicString = "*** Topic is";
public static final String mIrcNickIdentifier = "-";
public static final long mRegistrationTimeout = 15000;
public static final String mRegistrationServer = "nickserv2.furthurnet.org";
public static final boolean mUIDisplayTooltip = true;
public static final boolean mAutoJoin = true;
public static final String mUrlBase = "http://jamspace.furthurnet.org/furthurclient/";
public static final String mUrlBaseBackup = "http://jamspace.furthurnet.org:4200/furthurclient/";
public static final String mCfgDir = System.getProperty("user.home") + File.separator + ".furthur";
/* runtime config parameters (also do not live in the config file) */
public transient boolean mIsWindows;
/* this is a hack to rewrite mListeningPort at shutdown time */
public transient int changedListeningPort = -1;
/* config file variables with platform-specific defaults */
public String mPlayerLocation;
public String mFlacLocation;
public String mMetaflacLocation;
public String mDefaultSaveLocation;
public String mDefaultTempLocation;
/* config file variables with platform independent defaults */
// originally from Cfg.java
public GUID mProgramClientID = new GUID();
public String mMyIP = "";
public int mListeningPort = -1;
public int mMaxDownload = 4;
public int mNetMaxConnection = 7;
public int mNetMySpeed = 28;
public int mNetMinConn = 4;
public Vector mNetIgnoredHosts = new Vector();
public Vector mNetInvalidHosts = new Vector();
public Vector mFilteredSearchHosts = new Vector();
public Font mFontMenu;
public Font mFontLabel;
public Font mFontTable;
public String mIrcNickname = "";
public String mIrcKey = "";
public String mIrcChannels = "#furthur";
public boolean mIrcConsolePopup = true; // fixidn: dead code?
// these live in the "Additional Options" menu
// Used for systray/taskbar settings
public int mMinimizeMethod = TrayHandler.minimizeBoth;
public int mSpeedDisplayType = Constants.SPEED_DISPLAY_K_BYTES;
public boolean mAutoChooseVersions = false;
public boolean mSuppressDups = false;
public boolean mDisableCompression = false;
public int mMaxUpstream = -1;
// these used to live in PcpSettings
public boolean mFirstRun = true;
public int mUserSelectedSpeedIndex = 4;
public int mMaxUploadConnections = 1;
public boolean mDefaultSavingEnabled = true;
public boolean mAutoConnectIrc = true;
public String mLastNetworkType = Constants.DEFAULT_NETWORK;
public double mSpeedIndex = 0.0;
// these used to live in MainFrame
public int mMaxDownloads = 3;
public int mAutoRetryTime = 15;
public String mLastDir = System.getProperty("user.home");
// Proxy configuration
public static final String[] sProxyTypes = {"None", "HTTP", "Socks4/5", "Other"};
public int mProxyType = 0;
public int mProxyPort = 0;
public String mProxyHost = "";
public String mProxyUser = "";
public String mProxyPassword = "";
// GUI Preferences
public int frameWidth = -1;
public int frameHeight = -1;
public int frameLocationX = 0;
public int frameLocationY = 0;
public boolean frameMaximized = false;
// Chat Preferences
public String mChatFontType = "Lucida Sans";
public String mChatFontSize = "14";
public int mChatFontRGBColor = 0xffffff; // white
public int mChatTextPaneRGBColor = 0x000000; // black
public boolean mChatSetBold = false;
// public boolean mChatSetItalic = false;
// public boolean mChatSetUnderline = false;
public boolean mChatPing = false;
// max message history size
public int mMaxMessageHistorySize = 100;
/* private variables (used to load public ones) */
private File mCfgFile;
private Properties mSetting;
// add anything popular to these arrays
final String players[] = {
"C:\\Program Files\\Winamp\\winamp.exe",
"/usr/bin/xmms",
"/usr/local/bin/xmms"
};
final String flacs[] = {
"C:\\Program Files\\flac\\flac.exe",
"C:\\Windows\\flac\\flac.exe",
"C:\\WINNT\\flac\\flac.exe",
"D:\\Program Files\\flac\\flac.exe",
"D:\\Windows\\flac\\flac.exe",
"D:\\WINNT\\flac\\flac.exe",
"/usr/bin/flac",
"/usr/local/bin/flac"
};
final String metaflacs[] = {
"C:\\Program Files\\flac\\metaflac.exe",
"C:\\Windows\\flac\\metaflac.exe",
"C:\\WINNT\\flac\\metaflac.exe",
"D:\\Program Files\\flac\\metaflac.exe",
"D:\\Windows\\flac\\metaflac.exe",
"D:\\WINNT\\flac\\metaflac.exe",
"/usr/bin/metaflac",
"/usr/local/bin/metaflac"
};
// disable
private Cfg() {}
public Cfg(File cfgFile, boolean newCfg, boolean serverInstance) {
mSetting = new Properties();
mCfgFile = cfgFile;
if (serverInstance == false) {
mFontMenu = new Font("Dialog", Font.PLAIN, 12);
mFontLabel = new Font("Dialog", Font.PLAIN, 12);
mFontTable = new Font("Dialog", Font.PLAIN, 12);
}
else {
mFontMenu = mFontLabel = mFontTable = null;
}
load(newCfg, serverInstance);
}
private void loadRuntimeVariables() {
mIsWindows = System.getProperty("os.name").startsWith("Windows");
}
private void setPlatformSpecificDefaults() {
mPlayerLocation = findFile(players);
mFlacLocation = findFile(flacs);
mMetaflacLocation = findFile(metaflacs);
mDefaultSaveLocation = System.getProperty("user.home") + File.separator +
".furthur" + File.separator + "downloads";
mDefaultTempLocation = System.getProperty("user.home") + File.separator +
".furthur" + File.separator + "temp";
// Check for OS X and set preferred save location
if (System.getProperty("mrj.version") != null) {
mDefaultSaveLocation = System.getProperty("user.home") + File.separator + "Music" +
File.separator + "Furthur";
mDefaultTempLocation = System.getProperty("user.home") + File.separator + "Music"
+ File.separator + "Furthur" + File.separator + "temp";
}
}
private static String findFile(String[] paths) {
for (int i = 0; i < paths.length; i++) {
File f = new File(paths[i]);
if (f.isFile() && f.canRead()) {
return paths[i];
}
}
return "";
}
private void checkConstraints() {
if (mSpeedDisplayType != Constants.SPEED_DISPLAY_K_BITS)
mSpeedDisplayType = Constants.SPEED_DISPLAY_K_BYTES;
if (mUserSelectedSpeedIndex < 0 || mUserSelectedSpeedIndex > 5)
mUserSelectedSpeedIndex = 4;
if (mMaxUploadConnections < 0)
mMaxUploadConnections = 1;
if (mMinimizeMethod != TrayHandler.minimizeSystrayOnly &&
mMinimizeMethod != TrayHandler.minimizeTaskbarOnly)
mMinimizeMethod = TrayHandler.minimizeBoth;
if (mProxyPort < 0 || mProxyPort > 65535)
mProxyPort = 0;
if (mProxyType < 0 || mProxyType >= sProxyTypes.length)
mProxyType = 0;
}
private synchronized void load(boolean newCfg, boolean serverInstance) {
mSetting.clear();
loadRuntimeVariables();
setPlatformSpecificDefaults();
if (!newCfg) {
try {
FileInputStream is = new FileInputStream(mCfgFile);
mSetting.load(is);
is.close();
}
catch (IOException e) {
System.err.println(e);
System.exit(1);
}
}
deserializeSimpleFields();
deserializeComplexFields(serverInstance);
// generate a random listening port if we don't have a valid one
// (like when we first run for example)
if (mListeningPort < MIN_VALID_PORT ||
mListeningPort > MAX_VALID_PORT) {
mListeningPort = getAvailablePort();
}
// always override furthur.cfg for these fields
mIrcChannels = "#furthur";
mIrcConsolePopup = false;
// Furthur versions prior to 1.7.2 had a separate pcpsettings file
// (and did not have the mFirstRun member). If mFirstRun is true,
// this is the first time we have run as 1.7.2, so we attempt to
// load the old pcpsettings just this once.
if (mFirstRun) {
try {
loadOldPcpSettings();
}
catch(IOException e) {}
}
// if flac is not setup, try to find it
checkConstraints();
if ( mFlacLocation.equals("")){
mFlacLocation = findFile(flacs);
}
if (mMetaflacLocation.equals("")){
mMetaflacLocation = findFile(metaflacs);
}
}
public void generateRandomListeningPort() {
mListeningPort = getAvailablePort();
}
public synchronized void save() {
mSetting.clear();
serializeSimpleFields();
serializeComplexField();
try {
FileOutputStream os = new FileOutputStream(mCfgFile);
mSetting.store(os, "Furthur Config Values");
os.close();
}
catch (IOException e) {
System.err.println(e);
}
}
private String get(String key) {
String value = (String)mSetting.get(key);
if (value != null)
value = value.trim();
return value;
}
private String get(String key, String defaultVal) {
String value = get(key);
if (value == null)
return defaultVal;
return value;
}
private int getInt(String key, int defaultVal) {
try {
String value = get(key);
if (value == null)
return defaultVal;
else
return Integer.parseInt(value);
}
catch (Exception e) {
return defaultVal;
}
}
private boolean getBool(String key, boolean defaultVal) {
return get(key, defaultVal ? "true" : "false").equals("true");
}
private double getDouble(String key, double defaultVal) {
try {
String value = get(key);
if (value == null)
return defaultVal;
else
return Double.parseDouble(value);
}
catch (Exception e) {
return defaultVal;
}
}
private void set(String key, String value) {
mSetting.put(key, value);
}
private void set(String key, int value) {
mSetting.put(key, String.valueOf(value));
}
private void set(String key, boolean value) {
mSetting.put(key, String.valueOf(value));
}
private void set(String key, double value) {
mSetting.put(key, String.valueOf(value));
}
private void serializeSimpleFields() {
Field[] fields = this.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
int modifiers = fields[i].getModifiers();
Class type = fields[i].getType();
if (!Modifier.isPublic(modifiers) ||
Modifier.isTransient(modifiers) ||
Modifier.isStatic(modifiers) ||
Modifier.isFinal(modifiers)) {
continue;
}
try {
if (type.getName().equals("int")) {
set(name, fields[i].getInt(this));
}
else if (type.getName().equals("boolean")) {
set(name, fields[i].getBoolean(this));
}
else if (type.getName().equals("double")) {
set(name, fields[i].getDouble(this));
}
else if (type.getName().equals("java.lang.String")) {
set(name, (String)fields[i].get(this));
}
}
catch (Exception e) {
System.err.println(name + " " + e);
}
}
}
private void serializeComplexField() {
try {
set("mProgramClientID", mProgramClientID.toHexString());
String ignoredHosts = "";
for (int i = 0; i < mNetIgnoredHosts.size(); i++) {
String[] parts = (String[])mNetIgnoredHosts.elementAt(i);
ignoredHosts += (parts[0] + "." + parts[1] + "." + parts[2] + "." + parts[3] + " ");
}
set("mNetIgnoredHosts", ignoredHosts);
String filteredSearchHosts = "";
for (int i = 0; i < mFilteredSearchHosts.size(); i++) {
String[] parts = (String[])mFilteredSearchHosts.elementAt(i);
filteredSearchHosts += (parts[0] + "." + parts[1] + "." + parts[2] + "." + parts[3] + " ");
}
set("mFilteredSearchHosts", filteredSearchHosts);
String invalidHosts = "";
for (int i = 0; i < mNetInvalidHosts.size(); i++) {
String[] parts = (String[])mNetInvalidHosts.elementAt(i);
invalidHosts += (parts[0] + "." + parts[1] + "." + parts[2] + "." + parts[3] + " ");
}
set("mNetInvalidHosts", invalidHosts);
set("mFontMenu", mFontMenu.getName() + ";" + mFontMenu.getStyle() + ";" + mFontMenu.getSize());
set("mFontLabel", mFontLabel.getName() + ";" + mFontLabel.getStyle() + ";" + mFontLabel.getSize());
set("mFontTable", mFontTable.getName() + ";" + mFontTable.getStyle() + ";" + mFontTable.getSize());
}
catch (Exception e) {
System.err.println(e);
}
}
private void deserializeSimpleFields() {
Field[] fields = this.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
String name = fields[i].getName();
int modifiers = fields[i].getModifiers();
Class type = fields[i].getType();
String value;
if (!Modifier.isPublic(modifiers) ||
Modifier.isTransient(modifiers) ||
Modifier.isStatic(modifiers) ||
Modifier.isFinal(modifiers)) {
continue;
}
try {
// Load value by field name.
value = get(name);
if (value == null) {
// Use default.
continue;
}
if (type.getName().equals("int")) {
fields[i].setInt(this, Integer.parseInt(value));
}
else if (type.getName().equals("boolean")) {
fields[i].setBoolean(this, value.equals("true"));
}
else if (type.getName().equals("double")) {
fields[i].setDouble(this, Double.parseDouble(value));
}
else if (type.getName().equals("java.lang.String")) {
fields[i].set(this, value);
}
}
catch (Exception e) {
System.err.println(name + " " + e);
}
}
}
private void deserializeComplexFields(boolean serverInstance) {
try {
try {
mProgramClientID.fromHexString(get("mProgramClientID"));
}
catch (Exception e) {
// ignore. take the default created value as new client ID.
}
String ignoredHosts = get("mNetIgnoredHosts", "");
{
StringTokenizer tokens = new StringTokenizer(ignoredHosts);
while (tokens.hasMoreTokens()) {
mNetIgnoredHosts.addElement(ip2parts(tokens.nextToken()));
}
}
String filteredSearchHosts = get("mFilteredSearchHosts", "");
if (filteredSearchHosts == null) {
mFilteredSearchHosts = getDefaultFilteredHosts();
}
else {
StringTokenizer tokens = new StringTokenizer(filteredSearchHosts);
while (tokens.hasMoreTokens()) {
mFilteredSearchHosts.addElement(ip2parts(tokens.nextToken()));
}
}
String invalidHosts = get("mNetInvalidHosts");
if (invalidHosts == null) {
mNetInvalidHosts = getDefaultInvalidHosts();
}
else {
StringTokenizer tokens = new StringTokenizer(invalidHosts);
while (tokens.hasMoreTokens()) {
mNetInvalidHosts.addElement(ip2parts(tokens.nextToken()));
}
}
if (!serverInstance) {
String font;
font = get("mFontMenu");
if (font != null) {
try {
StringTokenizer tokens =
new StringTokenizer(font, ";");
mFontMenu =
new Font(tokens.nextToken(),
Integer.parseInt(tokens.nextToken()),
Integer.parseInt(tokens.nextToken()));
}
catch (Exception e) {
// ignore
}
}
font = get("mFontLabel");
if (font != null) {
try {
StringTokenizer tokens =
new StringTokenizer(font, ";");
mFontLabel =
new Font(tokens.nextToken(),
Integer.parseInt(tokens.nextToken()),
Integer.parseInt(tokens.nextToken()));
}
catch (Exception e) {
// ignore
}
}
font = get("mFontTable");
if (font != null) {
try {
StringTokenizer tokens =
new StringTokenizer(font, ";");
mFontTable =
new Font(tokens.nextToken(),
Integer.parseInt(tokens.nextToken()),
Integer.parseInt(tokens.nextToken()));
}
catch (Exception e) {
// ignore
}
}
}
}
catch (Exception e) {
// System.err.println(e);
}
}
public static Vector getDefaultInvalidHosts() {
Vector hosts = new Vector();
hosts.addElement(ip2parts("0.0.0.0"));
hosts.addElement(ip2parts("255.*.*.*"));
hosts.addElement(ip2parts("10.*.*.*"));
hosts.addElement(ip2parts("172.16.*.*"));
hosts.addElement(ip2parts("172.17.*.*"));
hosts.addElement(ip2parts("172.18.*.*"));
hosts.addElement(ip2parts("172.19.*.*"));
hosts.addElement(ip2parts("172.20.*.*"));
hosts.addElement(ip2parts("172.21.*.*"));
hosts.addElement(ip2parts("172.22.*.*"));
hosts.addElement(ip2parts("172.23.*.*"));
hosts.addElement(ip2parts("172.24.*.*"));
hosts.addElement(ip2parts("172.25.*.*"));
hosts.addElement(ip2parts("172.26.*.*"));
hosts.addElement(ip2parts("172.27.*.*"));
hosts.addElement(ip2parts("172.28.*.*"));
hosts.addElement(ip2parts("172.29.*.*"));
hosts.addElement(ip2parts("172.30.*.*"));
hosts.addElement(ip2parts("172.31.*.*"));
hosts.addElement(ip2parts("192.168.*.*"));
hosts.addElement(ip2parts("169.254.*.*"));
hosts.addElement(ip2parts("127.0.0.*"));
return hosts;
}
public static Vector getDefaultFilteredHosts() {
Vector hosts = new Vector();
hosts.addElement(ip2parts("0.0.0.0"));
hosts.addElement(ip2parts("255.*.*.*"));
hosts.addElement(ip2parts("10.*.*.*"));
hosts.addElement(ip2parts("172.16.*.*"));
hosts.addElement(ip2parts("172.17.*.*"));
hosts.addElement(ip2parts("172.18.*.*"));
hosts.addElement(ip2parts("172.19.*.*"));
hosts.addElement(ip2parts("172.20.*.*"));
hosts.addElement(ip2parts("172.21.*.*"));
hosts.addElement(ip2parts("172.22.*.*"));
hosts.addElement(ip2parts("172.23.*.*"));
hosts.addElement(ip2parts("172.24.*.*"));
hosts.addElement(ip2parts("172.25.*.*"));
hosts.addElement(ip2parts("172.26.*.*"));
hosts.addElement(ip2parts("172.27.*.*"));
hosts.addElement(ip2parts("172.28.*.*"));
hosts.addElement(ip2parts("172.29.*.*"));
hosts.addElement(ip2parts("172.30.*.*"));
hosts.addElement(ip2parts("172.31.*.*"));
hosts.addElement(ip2parts("192.168.*.*"));
hosts.addElement(ip2parts("169.254.*.*"));
hosts.addElement(ip2parts("127.0.0.*"));
return hosts;
}
public static String[] ip2parts(String ip) {
int i = ip.indexOf(":");
if (i != -1) {
ip = ip.substring(0, i);
}
StringTokenizer tokens = new StringTokenizer(ip, ".");
String[] parts = new String[4];
parts[0] = tokens.nextToken();
parts[1] = tokens.nextToken();
parts[2] = tokens.nextToken();
parts[3] = tokens.nextToken();
return parts;
}
private int getAvailablePort() {
Random rand = new Random();
// generate a random port in the legal interval
int port = rand.nextInt(MAX_RAND_PORT - MIN_RAND_PORT + 1);
port += MIN_RAND_PORT;
int firstPort = port;
while (true) {
try {
ServerSocket server = new ServerSocket(port);
server.close();
return port;
}
catch (IOException e) {}
port++;
if (port > MAX_RAND_PORT)
port = MIN_RAND_PORT;
// don't do this forever
if (port == firstPort)
break;
}
return MIN_RAND_PORT;
}
private void loadOldPcpSettings() throws IOException {
BufferedReader in = null;
try {
// the upgrading installer should put it here
in = new BufferedReader(
new FileReader(
new File(mCfgDir + File.separator +
"pcpsettings.cfg")));
}
catch (FileNotFoundException e) {
// if not, try to use the old cwd-sensitive location
final String oldResourcesDir = new File("").getAbsolutePath() +
File.separator + "resources";
in = new BufferedReader(
new FileReader(
new File(oldResourcesDir + File.separator +
"pcpsettings.cfg")));
}
try {
in.readLine(); // startPortRange
in.readLine(); // endPortRange
mUserSelectedSpeedIndex = Integer.parseInt(in.readLine());
mMaxUploadConnections = Integer.parseInt(in.readLine());
in.readLine(); // partials
mSpeedIndex = Double.parseDouble(in.readLine());
mDefaultSavingEnabled = (Integer.parseInt(in.readLine()) == 1);
mDefaultSaveLocation = in.readLine();
mDefaultTempLocation = in.readLine();
mLastNetworkType = in.readLine();
mSpeedDisplayType = Integer.parseInt(in.readLine());
mMaxDownloads = Integer.parseInt(in.readLine());
mAutoRetryTime = Integer.parseInt(in.readLine());
in.readLine(); // column widths
in.readLine(); // column widths
in.readLine(); // column positions
in.readLine(); // column positions
mMaxUpstream = Integer.parseInt(in.readLine());
in.readLine(); // throttle delay
in.readLine(); // currentFolder
in.readLine(); // autoUpgrade
mAutoChooseVersions = (Integer.parseInt(in.readLine()) == 1);
mSuppressDups = (Integer.parseInt(in.readLine()) == 1);
in.readLine(); // settingsVersion
mAutoConnectIrc = (Integer.parseInt(in.readLine()) == 1);
in.close();
return;
}
catch (NullPointerException e) {}
catch (NumberFormatException e) {}
if (in != null)
in.close();
throw new IOException();
}
}
The table below shows all metrics for Cfg.java.




