/* Written and copyright 2001-2003 Tobias Minich. * * ConfigurationDefaults.java * * Created on 31. Juli 2003, 21:31 * Copyright (C) 2003, 2004, 2005, 2006 Aelitis, All Rights Reserved. * * 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. * * AELITIS, SAS au capital de 46,603.30 euros * 8 Allee Lenotre, La Grille Royale, 78600 Le Mesnil le Roi, France. * */ package org.gudy.azureus2.core3.config.impl; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import org.gudy.azureus2.core3.config.COConfigurationManager; import org.gudy.azureus2.core3.stats.StatsWriterPeriodic; import org.gudy.azureus2.core3.torrent.TOTorrent; import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer; import org.gudy.azureus2.core3.tracker.host.TRHost; import org.gudy.azureus2.core3.tracker.server.TRTrackerServer; import org.gudy.azureus2.core3.util.AEMonitor; import org.gudy.azureus2.core3.util.Constants; import org.gudy.azureus2.core3.util.Debug; import org.gudy.azureus2.core3.util.SystemProperties; import com.aelitis.azureus.core.speedmanager.impl.SpeedManagerImpl; import com.aelitis.azureus.core.speedmanager.impl.v2.SMConst; import com.aelitis.azureus.core.speedmanager.impl.v2.SpeedLimitConfidence; import com.aelitis.azureus.core.speedmanager.impl.v2.SpeedLimitMonitor; import com.aelitis.azureus.core.speedmanager.impl.v2.SpeedManagerAlgorithmProviderV2; /** * * @author Tobias Minich */ /** * Some (proposed) option naming conventions: * - Starts with a general identifier * General_ for, well, general things =) * Server_ for webinterface specific things * GUI_ (eventually) for GUI specific things * Core_ (eventually) for core specific things * - Second is some identifing term. It starts with a small letter denoting * the variable type. * b Boolean * i Integer * s String * - Directory options should end with _Directory. This activates some * special validity checks in the webinterface option parsing code. * (Namely they are created if they don't exist and the option isn't changed * with a logged error if a normal file of the same name exists) */ public class ConfigurationDefaults { private static final Long ZERO = new Long(0); private static final Long ONE = new Long(1); private static final Long FALSE = ZERO; private static final Long TRUE = ONE; private static ConfigurationDefaults configdefaults; private static AEMonitor class_mon = new AEMonitor("ConfigDef"); private Map def = null; public static final int def_int = 0; public static final long def_long = 0; public static final float def_float = 0; public static final int def_boolean = 0; public static final String def_String = ""; public static final byte[] def_bytes = null; private final Hashtable parameter_verifiers = new Hashtable(); public static ConfigurationDefaults getInstance() { try { class_mon.enter(); if (configdefaults == null) { try { configdefaults = new ConfigurationDefaults(); } catch (Throwable e) { // this is here for when we are just using a few of the // Azureus classes and // we can live with no defaults (e.g. swing webui). If we // initialise // the normal config-defaults fully this pulls in all sorts // of unwanted // classes (platform manager for example). Also, don't using // Debug/Logging // to record this fact! System.out .println("Falling back to default defaults as environment is restricted"); configdefaults = new ConfigurationDefaults(new HashMap()); } } return configdefaults; } finally { class_mon.exit(); } } /** Creates a new instance of Defaults */ protected ConfigurationDefaults() { def = new HashMap(); /** OneSwarm **/ def.put("oneswarm.disallow.ratio.less.than.one", FALSE); def.put("Open URL on startup", TRUE); def.put("OneSwarm.ui.double.click", ZERO); def.put("oneswarm.beta.updates", FALSE); def.put("oneswarm.show.tags", TRUE); def.put("oneswarm.add.id3.tags", TRUE); def.put("oneswarm.directory.tags", TRUE); def.put("oneswarm.max.ui.tags", new Long(300)); def.put("oneswarm.max.ui.search.results", new Long(500)); def.put("oneswarm.max.sha1.hash.rate.kbps", new Long(10 * 1024)); // def.put("oneswarm.v06.firstrun", TRUE); def.put("oneswarm.multi.torrent.enabled", TRUE); def.put("oneswarm.max.multi.torrent.auto.disk.space", new Float(0.5f)); def.put("oneswarm.watchdir.refresh.interval", new Long(0)); /** Core settings **/ def.put("Override Ip", ""); def.put("Enable incremental file creation", TRUE); // PIAMOD -- great // for encrypted // partitions. speeds // up everything // generally /** * PIAMODS */ def.put("Show Splash", TRUE); // PIAMOD def.put("GUI_SWT_DisableAlertSliding", TRUE); def.put("File.Decoder.Prompt", FALSE); def.put("File.Decoder.Default", "UTF-8"); def.put("Add URL Silently", TRUE); /** * END PIAMODS */ def.put("TCP.Listen.Port", new Long(6881)); def.put("TCP.Listen.Port.Enable", TRUE); def.put("TCP.Listen.Port.Override", ""); def.put("UDP.Listen.Port", new Long(6881)); def.put("UDP.Listen.Port.Enable", TRUE); def.put("UDP.NonData.Listen.Port", new Long(6881)); // two effective // enablers for // this, dht + // tracker udp // client def.put("UDP.NonData.Listen.Port.Same", TRUE); // control over whether // non-data and data udp // port are the same def.put("HTTP.Data.Listen.Port", new Long(Constants.isWindows ? 80 : 8080)); def.put("HTTP.Data.Listen.Port.Override", ZERO); def.put("HTTP.Data.Listen.Port.Enable", FALSE); def.put("IPV6 Prefer Addresses", FALSE); def.put("max active torrents", new Long(0)); // PIAMOD -- was 4 def.put("max downloads", new Long(0)); // PIAMOD -- was 4 def.put("min downloads", ONE); def.put("Newly Seeding Torrents Get First Priority", TRUE); def.put("Max.Peer.Connections.Per.Torrent", new Long( COConfigurationManager.CONFIG_DEFAULT_MAX_CONNECTIONS_PER_TORRENT)); def.put("Max.Peer.Connections.Per.Torrent.When.Seeding", new Long( COConfigurationManager.CONFIG_DEFAULT_MAX_CONNECTIONS_PER_TORRENT)); def.put("Max.Peer.Connections.Per.Torrent.When.Seeding.Enable", FALSE); def.put("Max.Peer.Connections.Total", new Long( COConfigurationManager.CONFIG_DEFAULT_MAX_CONNECTIONS_GLOBAL)); def.put("Peer.Fast.Initial.Unchoke.Enabled", FALSE); def.put("File Max Open", new Long(100)); // PIAMOD -- was 50 def.put("Use Config File Backups", TRUE); def.put("Max Uploads", new Long(6)); // PIAMOD -- was 4 def.put("Max Uploads Seeding", new Long(4)); def.put("enable.seedingonly.maxuploads", FALSE); def.put("max.uploads.when.busy.inc.min.secs", new Long(30)); def.put("Max Download Speed KBs", ZERO); def.put("Use Request Limiting", TRUE); def.put("Use Request Limiting Priorities", TRUE); def.put("Max Upload Speed KBs", ZERO); def.put("Max Upload Speed Seeding KBs", ZERO); def.put("enable.seedingonly.upload.rate", FALSE); def.put("Max Seeds Per Torrent", ZERO); // def.put( "Auto Upload Speed Enabled", FALSE ); def.put(TransferSpeedValidator.AUTO_UPLOAD_ENABLED_CONFIGKEY, FALSE); // "Auto Upload Speed Enabled" def.put("Auto Upload Speed Seeding Enabled", FALSE); def.put("AutoSpeed Available", FALSE); // informative read-only // parameter def.put("AutoSpeed Min Upload KBs", ZERO); def.put("AutoSpeed Max Upload KBs", ZERO); def.put("AutoSpeed Max Increment KBs", ONE); def.put("AutoSpeed Max Decrement KBs", new Long(4)); def.put("AutoSpeed Choking Ping Millis", new Long(200)); def.put("AutoSpeed Download Adj Enable", FALSE); def.put("AutoSpeed Download Adj Ratio", "1.0"); def.put("AutoSpeed Latency Factor", new Long(50)); def.put("AutoSpeed Forced Min KBs", new Long(4)); def.put("Auto Upload Speed Debug Enabled", FALSE); def.put("ASN Autocheck Performed Time", ZERO); def.put("LAN Speed Enabled", TRUE); def.put("Max LAN Download Speed KBs", ZERO); def.put("Max LAN Upload Speed KBs", ZERO); def.put("Use Resume", TRUE); def.put("On Resume Recheck All", FALSE); def.put("Save Resume Interval", new Long(5)); def.put("Check Pieces on Completion", FALSE); // PIAMOD def.put("Stop Ratio", new Float(0)); def.put("Stop Peers Ratio", ZERO); def.put("Disconnect Seed", TRUE); def.put("Seeding Piece Check Recheck Enable", FALSE); // PIAMOD def.put("priorityExtensions", ""); def.put("priorityExtensionsIgnoreCase", FALSE); def.put("Ip Filter Enabled", TRUE); def.put("Ip Filter Allow", FALSE); def.put("Ip Filter Enable Banning", TRUE); def.put("Ip Filter Ban Block Limit", new Long(4)); def.put("Ip Filter Ban Discard Ratio", "5.0"); def.put("Ip Filter Ban Discard Min KB", new Long(128)); def.put("Ip Filter Banning Persistent", TRUE); def.put("Ip Filter Enable Description Cache", TRUE); def.put("Ip Filter Autoload File", ""); def.put("Allow Same IP Peers", FALSE); def.put("Use Super Seeding", FALSE); def.put("Pause Downloads On Exit", FALSE); def.put("Resume Downloads On Start", FALSE); // SWT GUI Settings // EDIT, by isdal, set default to advanced // def.put("User Mode", ZERO); def.put("User Mode", new Long(2)); // default data location options def.put("Use default data dir", FALSE); String docPath = SystemProperties.getDocPath(); File f = new File(docPath, "OneSwarm Downloads"); def.put("Default save path", f.getAbsolutePath()); // Disable update checking if we're running integration tests. long DEFAULT_UPDATE_CHECK = System.getProperty("oneswarm.integration.test") == null ? TRUE : FALSE; def.put("update.start", DEFAULT_UPDATE_CHECK); def.put("update.periodic", DEFAULT_UPDATE_CHECK); def.put("update.opendialog", TRUE); def.put("update.autodownload", FALSE); // ********************************* def.put("Send Version Info", TRUE); // Logging def.put("Logger.Enabled", FALSE); // logging in general def.put("Logging Enable", FALSE); // file logging def.put("Logging Dir", ""); def.put("Logging Timestamp", "HH:mm:ss.SSS"); def.put("Logging Max Size", new Long(5)); int[] logComponents = { 0, 1, 2, 4 }; for (int i = 0; i < logComponents.length; i++) for (int j = 0; j <= 3; j++) def.put("bLog" + logComponents[i] + "-" + j, TRUE); def.put("Logger.DebugFiles.Enabled", TRUE); def.put("Logging Enable UDP Transport", FALSE); // tracker proxy defaults def.put("Enable.Proxy", FALSE); def.put("Enable.SOCKS", FALSE); def.put("Proxy.Host", ""); def.put("Proxy.Port", ""); def.put("Proxy.Username", "<none>"); // default is explicit "none", as // opposed to "not defined" def.put("Proxy.Password", ""); def.put("Proxy.Check.On.Start", TRUE); // data proxy defaults def.put("Proxy.Data.Enable", FALSE); def.put("Proxy.Data.SOCKS.version", "V4"); def.put("Proxy.Data.SOCKS.inform", TRUE); def.put("Proxy.Data.Same", TRUE); def.put("Proxy.Data.Host", ""); def.put("Proxy.Data.Port", ""); def.put("Proxy.Data.Username", "<none>"); def.put("Proxy.Data.Password", ""); // old def.put("Start Num Peers", new Long(-1)); def.put("Max Upload Speed", new Long(-1)); def.put("Max Clients", new Long(-1)); def.put("Server.shared.port", TRUE); def.put("Low Port", new Long(6881)); def.put("Already_Migrated", FALSE); // misc def.put("ID", ""); def.put("Play Download Finished", FALSE); def.put("Play Download Finished File", ""); def.put("Watch Torrent Folder", FALSE); def.put("Watch Torrent Folder Interval", ONE); def.put("Start Watched Torrents Stopped", FALSE); def.put("Watch Torrent Folder Path", ""); def.put("Prioritize First Piece", TRUE); // PIAMOD -- this needs to be // true for streaming DL def.put("Prioritize Most Completed Files", FALSE); def.put("Piece Picker Request Hint Enabled", TRUE); def.put("Use Lazy Bitfield", FALSE); def.put("Zero New", FALSE); def.put("XFS Allocation", FALSE); def.put("Copy And Delete Data Rather Than Move", FALSE); def.put("File.save.peers.enable", TRUE); def.put("File.strict.locking", TRUE); def.put("Move Deleted Data To Recycle Bin", TRUE); def.put("Popup Download Finished", FALSE); def.put("Popup File Finished", FALSE); def.put("Popup Download Added", FALSE); def.put("Show Timestamp For Alerts", FALSE); def.put("Use Message Box For Popups", FALSE); def.put("Suppress Alerts", FALSE); // default torrent directory option def.put("Save Torrent Files", TRUE); def.put("General_sDefaultTorrent_Directory", SystemProperties.getUserPath() + "torrents"); def.put("Bind IP", ""); def.put("Enforce Bind IP", FALSE); def.put("Stats Export Peer Details", FALSE); def.put("Stats Export File Details", FALSE); def.put("Stats XSL File", ""); def.put("Stats Enable", FALSE); def.put("Stats Period", new Long(StatsWriterPeriodic.DEFAULT_SLEEP_PERIOD)); def.put("Stats Dir", ""); def.put("Stats File", StatsWriterPeriodic.DEFAULT_STATS_FILE_NAME); def.put("File.Torrent.IgnoreFiles", TOTorrent.DEFAULT_IGNORE_FILES); def.put("File.save.peers.max", new Long(TRTrackerAnnouncer.DEFAULT_PEERS_TO_CACHE)); // tracker def.put("Tracker Compact Enable", TRUE); def.put("Tracker Key Enable Client", TRUE); def.put("Tracker Key Enable Server", TRUE); def.put("Tracker Separate Peer IDs", FALSE); def.put("Tracker Client Connect Timeout", new Long(120)); def.put("Tracker Client Read Timeout", new Long(60)); def.put("Tracker Client Send OS and Java Version", FALSE); // PIAMOD -- // um, no! def.put("Tracker Client Show Warnings", TRUE); def.put("Tracker Client Min Announce Interval", ZERO); def.put("Tracker Client Numwant Limit", new Long(100)); def.put("Tracker Client No Port Announce", FALSE); def.put("Tracker Public Enable", FALSE); def.put("Tracker Log Enable", FALSE); def.put("Tracker Port Enable", FALSE); def.put("Tracker Port", new Long(TRHost.DEFAULT_PORT)); def.put("Tracker Port Backups", ""); def.put("Tracker Port SSL Enable", FALSE); def.put("Tracker Port SSL", new Long(TRHost.DEFAULT_PORT_SSL)); def.put("Tracker Port SSL Backups", ""); def.put("Tracker Port Force External", FALSE); def.put("Tracker Host Add Our Announce URLs", TRUE); def_put("Tracker IP", "", new IPVerifier()); def.put("Tracker Port UDP Enable", FALSE); def.put("Tracker Port UDP Version", new Long(2)); def.put("Tracker Send Peer IDs", TRUE); def.put("Tracker Max Peers Returned", new Long(100)); def.put("Tracker Scrape Cache", new Long(TRTrackerServer.DEFAULT_SCRAPE_CACHE_PERIOD)); def.put("Tracker Announce Cache", new Long(TRTrackerServer.DEFAULT_ANNOUNCE_CACHE_PERIOD)); def.put("Tracker Announce Cache Min Peers", new Long( TRTrackerServer.DEFAULT_ANNOUNCE_CACHE_PEER_THRESHOLD)); def.put("Tracker Poll Interval Min", new Long(TRTrackerServer.DEFAULT_MIN_RETRY_DELAY)); def.put("Tracker Poll Interval Max", new Long(TRTrackerServer.DEFAULT_MAX_RETRY_DELAY)); def.put("Tracker Poll Seed Interval Mult", new Long(1)); def.put("Tracker Scrape Retry Percentage", new Long( TRTrackerServer.DEFAULT_SCRAPE_RETRY_PERCENTAGE)); def.put("Tracker Password Enable Web", FALSE); def.put("Tracker Password Web HTTPS Only", FALSE); def.put("Tracker Password Enable Torrent", FALSE); def.put("Tracker Username", ""); def.put("Tracker Password", null); def.put("Tracker Poll Inc By", new Long(TRTrackerServer.DEFAULT_INC_BY)); def.put("Tracker Poll Inc Per", new Long(TRTrackerServer.DEFAULT_INC_PER)); def.put("Tracker NAT Check Enable", TRUE); def.put("Tracker NAT Check Timeout", new Long(TRTrackerServer.DEFAULT_NAT_CHECK_SECS)); def.put("Tracker Max Seeds Retained", ZERO); def.put("Tracker Max Seeds", ZERO); def.put("Tracker Max GET Time", new Long(20)); def.put("Tracker Max POST Time Multiplier", ONE); def.put("Tracker Max Threads", new Long(48)); def.put("Tracker TCP NonBlocking", FALSE); def.put("Tracker TCP NonBlocking Restrict Request Types", TRUE); def.put("Tracker TCP NonBlocking Conc Max", new Long(2048)); def.put("Tracker Client Scrape Enable", TRUE); // ********************************************* // EDIT by: isdal // not scraping stopped torrents // def.put( "Tracker Client Scrape Stopped Enable", TRUE); def.put("Tracker Client Scrape Stopped Enable", FALSE); // ********************************************* def.put("Tracker Client Scrape Single Only", FALSE); def.put("Tracker Server Full Scrape Enable", TRUE); def.put("Tracker Server Not Found Redirect", ""); def.put("Tracker Server Support Experimental Extensions", FALSE); def.put("Network Selection Prompt", FALSE); def.put("Network Selection Default.Public", TRUE); def.put("Network Selection Default.I2P", TRUE); def.put("Network Selection Default.Tor", TRUE); // ******************************************************* def.put("Network Selection Default.OSFriendNetwork", TRUE); def.put("Network Selection Default.WebSeed", TRUE); // ******************************************************* def.put("Tracker Network Selection Default.Public", TRUE); def.put("Tracker Network Selection Default.I2P", TRUE); def.put("Tracker Network Selection Default.Tor", TRUE); // ******************************************************* def.put("Tracker Network Selection Default.OSFriendNetwork", TRUE); // ******************************************************* def.put("Peer Source Selection Default.Tracker", TRUE); def.put("Peer Source Selection Default.DHT", TRUE); def.put("Peer Source Selection Default.PeerExchange", TRUE); def.put("Peer Source Selection Default.Plugin", TRUE); def.put("Peer Source Selection Default.Incoming", TRUE); // ******************************************************* def.put("Peer Source Selection Default.OSFriendNetwork", TRUE); // ******************************************************* def.put("config.style.useSIUnits", FALSE); def.put("config.style.useUnitsRateBits", FALSE); def.put("config.style.separateProtDataStats", FALSE); def.put("config.style.dataStatsOnly", FALSE); def.put("config.style.doNotUseGB", FALSE); def.put("Save Torrent Backup", FALSE); def.put("Sharing Protocol", "DHT"); def.put("Sharing Add Hashes", FALSE); def.put("Sharing Rescan Enable", FALSE); def.put("Sharing Rescan Period", new Long(60)); def.put("Sharing Torrent Comment", ""); def.put("Sharing Permit DHT", TRUE); def.put("Sharing Torrent Private", FALSE); /** * PIAMOD -- we've overridden these previously */ // def.put( "File.Decoder.Prompt", FALSE ); // def.put( "File.Decoder.Default", "" ); def.put("File.Decoder.ShowLax", FALSE); def.put("File.Decoder.ShowAll", FALSE); def.put("Password enabled", FALSE); def.put("Password", null); def.put("config.interface.checkassoc", TRUE); def.put("confirmationOnExit", FALSE); def.put("locale", Locale.getDefault().toString()); def.put("locale.set.complete.count", ZERO); def.put("Confirm Data Delete", TRUE); def.put("Password Confirm", null); def.put("Auto Update", TRUE); def.put("Alert on close", FALSE); def.put("diskmanager.friendly.hashchecking", TRUE); // PIAMOD def.put("diskmanager.hashchecking.smallestfirst", TRUE); def.put("Default Start Torrents Stopped", FALSE); def.put("Server Enable UDP", TRUE); def.put("diskmanager.perf.cache.enable", TRUE); def.put("diskmanager.perf.cache.enable.read", FALSE); def.put("diskmanager.perf.cache.enable.write", TRUE); def.put("diskmanager.perf.cache.size", new Long(4)); // 4 MB def.put("diskmanager.perf.cache.notsmallerthan", new Long(1024)); // 1024 // K def.put("diskmanager.perf.read.maxthreads", new Long(32)); def.put("diskmanager.perf.read.maxmb", new Long(5)); def.put("diskmanager.perf.write.maxthreads", new Long(32)); def.put("diskmanager.perf.write.maxmb", new Long(5)); def.put("diskmanager.perf.cache.trace", FALSE); def.put("diskmanager.perf.cache.flushpieces", TRUE); def.put("diskmanager.perf.read.aggregate.enable", FALSE); def.put("diskmanager.perf.read.aggregate.request.limit", ZERO); def.put("diskmanager.perf.read.aggregate.byte.limit", ZERO); def.put("diskmanager.perf.write.aggregate.enable", FALSE); def.put("diskmanager.perf.write.aggregate.request.limit", ZERO); def.put("diskmanager.perf.write.aggregate.byte.limit", ZERO); def.put("diskmanager.perf.checking.read.priority", FALSE); def.put("diskmanager.perf.checking.fully.async", FALSE); def.put("diskmanager.perf.queue.torrent.bias", TRUE); // Peer control def.put("peercontrol.udp.fallback.connect.fail", TRUE); def.put("peercontrol.udp.fallback.connect.drop", TRUE); def.put("peercontrol.udp.probe.enable", FALSE); def.put("peercontrol.hide.piece", FALSE); def.put("peercontrol.scheduler.use.priorities", TRUE); def.put("File.truncate.if.too.large", FALSE); // isdal: if false close window will close oneswarm on windows and linux if (Constants.isOSX) { def.put("Enable System Tray", FALSE); // PIAMOD -- was true? default // to off for OS X, all other // platforms ignore this.. } else { def.put("Enable System Tray", TRUE); } def.put("config.style.table.defaultSortOrder", ZERO); def.put("Ignore.peer.ports", "0"); def.put("Security.JAR.tools.dir", ""); def.put("network.max.simultaneous.connect.attempts", new Long(8)); def.put("network.tcp.mtu.size", new Long(1500)); def.put("network.udp.mtu.size", new Long(1500)); def.put("network.tcp.socket.SO_SNDBUF", ZERO); def.put("network.tcp.socket.SO_RCVBUF", ZERO); def.put("network.tcp.socket.IPTOS", ""); def.put("network.tcp.read.select.time", new Long(25)); def.put("network.tcp.write.select.time", new Long(25)); def.put("network.control.write.idle.time", new Long(50)); def.put("network.control.write.aggressive", FALSE); def.put("network.control.read.idle.time", new Long(50)); def.put("network.control.read.aggressive", FALSE); def.put("peermanager.schedule.time", new Long(100)); def.put("confirm_torrent_removal", FALSE); def.put("add_torrents_silently", TRUE); // PIAMOD -- so we don't keep // reopening the web UI over and // over def.put("enable_small_osx_fonts", TRUE); def.put("Play Download Finished Announcement", FALSE); def.put("Play Download Finished Announcement Text", "Download Complete"); def.put("Play File Finished", FALSE); def.put("Play File Finished File", ""); def.put("Play File Finished Announcement", FALSE); def.put("Play File Finished Announcement Text", "File Complete"); def.put("filechannel.rt.buffer.millis", new Long(60 * 1000)); def.put("filechannel.rt.buffer.pieces", new Long(5)); def.put("BT Request Max Block Size", new Long(65536)); def.put("network.tcp.enable_safe_selector_mode", FALSE); def.put("network.tcp.safe_selector_mode.chunk_size", new Long(60)); def.put("network.transport.encrypted.require", FALSE); def.put("network.transport.encrypted.min_level", "RC4"); def.put("network.transport.encrypted.fallback.outgoing", FALSE); def.put("network.transport.encrypted.fallback.incoming", FALSE); def.put("network.transport.encrypted.use.crypto.port", FALSE); def.put("network.bind.local.port", ZERO); def.put("peer.nat.traversal.request.conc.max", new Long(3)); // Memory settings def.put("memory.slice.limit.multiplier", new Long(1)); // Move on completion settings. def.put("Move Completed When Done", FALSE); def.put("Completed Files Directory", ""); def.put("Move Only When In Default Save Dir", TRUE); def.put("Move Torrent When Done", FALSE); // PIAMOD def.put("File.move.subdir_is_default", FALSE); // This gets permanently set by GlobalManagerImpl to false once Azureus // has initialised. // This is intended to be used once as part of an upgrade. def.put("Set Completion Flag For Completed Downloads On Start", TRUE); // Move on removal settings. def.put("File.move.download.removed.enabled", FALSE); def.put("File.move.download.removed.path", ""); def.put("File.move.download.removed.only_in_default", TRUE); def.put("File.move.download.removed.move_torrent", TRUE); def.put("File.move.download.removed.move_partial", FALSE); def.put("FilesView.show.full.path", FALSE); def.put("MyTorrentsView.menu.show_parent_folder_enabled", FALSE); def.put("FileBrowse.usePathFinder", FALSE); // temp section for SpeedManagerAlgorithmProviderV2 def.put(SpeedManagerAlgorithmProviderV2.SETTING_DOWNLOAD_MAX_LIMIT, new Long( SMConst.START_DOWNLOAD_RATE_MAX)); def.put(SpeedManagerAlgorithmProviderV2.SETTING_UPLOAD_MAX_LIMIT, new Long( SMConst.START_UPLOAD_RATE_MAX)); def.put(SpeedManagerAlgorithmProviderV2.SETTING_DHT_GOOD_SET_POINT, new Long(50)); def.put(SpeedManagerAlgorithmProviderV2.SETTING_DHT_GOOD_TOLERANCE, new Long(100)); def.put(SpeedManagerAlgorithmProviderV2.SETTING_DHT_BAD_SET_POINT, new Long(900)); def.put(SpeedManagerAlgorithmProviderV2.SETTING_DHT_BAD_TOLERANCE, new Long(500)); // **** NOTE! This default can be overriden in ConfigurationChecker def.put(SpeedManagerImpl.CONFIG_VERSION, new Long(2)); // 1 == classic, // 2 == beta def.put(SpeedLimitMonitor.DOWNLOAD_CONF_LIMIT_SETTING, SpeedLimitConfidence.NONE.getString()); def.put(SpeedLimitMonitor.UPLOAD_CONF_LIMIT_SETTING, SpeedLimitConfidence.NONE.getString()); def.put(SpeedLimitMonitor.UPLOAD_CHOKE_PING_COUNT, new Long(1)); // default V2 algorithm seeding and download mode useage, stored as an // Int def.put(SpeedLimitMonitor.USED_UPLOAD_CAPACITY_SEEDING_MODE, new Long(90)); def.put(SpeedLimitMonitor.USED_UPLOAD_CAPACITY_DOWNLOAD_MODE, new Long(60)); def.put(SpeedManagerAlgorithmProviderV2.SETTING_WAIT_AFTER_ADJUST, TRUE); def.put(SpeedManagerAlgorithmProviderV2.SETTING_INTERVALS_BETWEEN_ADJUST, new Long(2)); // ********************************************************************* /* * Edit, by isdal * added default oneswarm privacy parameters */ def.put("OSF2F.FriendNotifications", TRUE); def.put("OSF2F.LanFriendFinder", TRUE); def.put("OSF2F.Use DHT Proxy", TRUE); def.put("OSGWTUI.RemoteAccess", FALSE); def.put("Perform.NAT.Check", TRUE); def.put("Allow.Incoming.Speed.Check", FALSE); def.put("dht.enabled", TRUE); // fwd prob def.put("f2f_forward_search_probability", new Float(0.50)); // search forward delay def.put("f2f_search_forward_delay", new Long(150)); def.put("f2f_search_max_paths", new Long(40)); // max/min search hops to emulate def.put("f2f_search_emulate_hops_min", new Long(1)); def.put("f2f_search_emulate_hops_max", new Long(2)); // for a value of 20, the added delay for overlay transports connections // will be 20-40ms def.put("f2f_overlay_emulate_link_latency_max", new Long(20)); // Allow users to clear upload and download ratios on torrents on close def.put("privacy.clear.seed.ratio.on.close", FALSE); // ********************************************************************* // NOTE(willscott): service sharing network settings. def.put("SERVICE_CLIENT_channels", new Long(4)); def.put("SERVICE_CLIENT_window", new Long(4)); def.put("SERVICE_CLIENT_flow", new Long(10)); def.put("SERVICE_CLIENT_udp", TRUE); def.put("SERVICE_CLIENT_duplication", TRUE); def.put("SERVICE_CLIENT_adaptive", TRUE); } protected ConfigurationDefaults(Map _def) { def = _def; } protected void def_put(String key, String key_def, COConfigurationManager.ParameterVerifier verifier) { def.put(key, key_def); List l = (List) parameter_verifiers.get(key); if (l == null) { l = new ArrayList(1); parameter_verifiers.put(key, l); } l.add(verifier); } private void checkParameterExists(String p) throws ConfigurationParameterNotFoundException { if (!def.containsKey(p)) { ConfigurationParameterNotFoundException cpnfe = new ConfigurationParameterNotFoundException( p); // cpnfe.fillInStackTrace(); // Debug.out(cpnfe); throw cpnfe; } } public String getStringParameter(String p) throws ConfigurationParameterNotFoundException { checkParameterExists(p); Object o = def.get(p); if (o instanceof Number) return ((Number) o).toString(); return (String) o; } public int getIntParameter(String p) throws ConfigurationParameterNotFoundException { checkParameterExists(p); return ((Long) def.get(p)).intValue(); } public long getLongParameter(String p) throws ConfigurationParameterNotFoundException { checkParameterExists(p); return ((Long) def.get(p)).longValue(); } public float getFloatParameter(String p) throws ConfigurationParameterNotFoundException { checkParameterExists(p); return ((Float) def.get(p)).floatValue(); } public byte[] getByteParameter(String p) throws ConfigurationParameterNotFoundException { checkParameterExists(p); return (byte[]) def.get(p); } public boolean getBooleanParameter(String p) throws ConfigurationParameterNotFoundException { checkParameterExists(p); return ((Long) def.get(p)).equals(TRUE); } public boolean hasParameter(String p) { return def.containsKey(p); } /** * Returns the default value as an object (String, Long, Float, Boolean) * * @param key * @return default value */ public Object getDefaultValueAsObject(String key) { return def.get(key); } public Set getAllowedParameters() { return def.keySet(); } public void addParameter(String sKey, String sParameter) { def.put(sKey, sParameter); } public void addParameter(String sKey, int iParameter) { def.put(sKey, new Long(iParameter)); } public void addParameter(String sKey, byte[] bParameter) { def.put(sKey, bParameter); } public void addParameter(String sKey, boolean bParameter) { Long lParameter = new Long(bParameter ? 1 : 0); def.put(sKey, lParameter); } public void addParameter(String sKey, long lParameter) { def.put(sKey, new Long(lParameter)); } public void addParameter(String sKey, float fParameter) { def.put(sKey, new Float(fParameter)); } public void registerExternalDefaults(Map addmap) { def.putAll(addmap); } public boolean doesParameterDefaultExist(String p) { return def.containsKey(p); } public Object getParameter(String key) { return (def.get(key)); } public List getVerifiers(String key) { return ((List) parameter_verifiers.get(key)); } protected void runVerifiers() { Iterator it = parameter_verifiers.entrySet().iterator(); while (it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); String key = (String) entry.getKey(); List verifiers = (List) entry.getValue(); for (int i = 0; i < verifiers.size(); i++) { COConfigurationManager.ParameterVerifier verifier = (COConfigurationManager.ParameterVerifier) verifiers .get(i); Object val_def = getDefaultValueAsObject(key); Object val; if (val_def == null) { continue; } if (val_def instanceof String) { val = COConfigurationManager.getStringParameter(key); } else { Debug.out("Unsupported verifier type for parameter '" + key + "' - " + val_def); continue; } if (val == null) { continue; } if (!verifier.verify(key, val)) { Debug.out("Parameter '" + key + "', value '" + val + "' failed verification - setting back to default '" + val_def + "'"); COConfigurationManager.removeParameter(key); } } } } protected class IPVerifier implements COConfigurationManager.ParameterVerifier { @Override public boolean verify(String parameter, Object _value) { String value = (String) _value; // see http://www.faqs.org/rfcs/rfc3696.html // we need to include "~" here for I2P generated 'URLs' for (int i = 0; i < value.length(); i++) { char c = value.charAt(i); // : for IPv6 if (Character.isLetterOrDigit(c) || c == '.' || c == '-' || c == ':' || c == '~') { } else { return (false); } } return (true); } } }