package com.limegroup.gnutella.settings; import com.limegroup.gnutella.SpeedConstants; /** * Settings for Gnutella TCP connections. */ public final class ConnectionSettings extends LimeProps { private ConnectionSettings() {} /** * Constants for proxy settings */ public static final int C_NO_PROXY = 0; public static final int C_SOCKS4_PROXY = 4; public static final int C_SOCKS5_PROXY = 5; public static final int C_HTTP_PROXY = 1; /** * Settings for whether or not an incoming connection has ever been * accepted. */ public static final BooleanSetting EVER_ACCEPTED_INCOMING = FACTORY.createBooleanSetting("EVER_ACCEPTED_INCOMING", false); /** * Setting for whether we have ever determined that we are not able to * do Firewall-to-firewall transfers in the past based on information * received in pongs. */ public static final BooleanSetting LAST_FWT_STATE = FACTORY.createExpirableBooleanSetting("LAST_FWT_STATE", false); /** * Settings for whether or not to automatically connect to the network * on startup. */ public static final BooleanSetting CONNECT_ON_STARTUP = FACTORY.createBooleanSetting("CONNECT_ON_STARTUP", true); /** * Settings for the number of connections to maintain. */ public static final IntSetting NUM_CONNECTIONS = FACTORY.createSettableIntSetting("NUM_CONNECTIONS", 32, "ConnectionSettings.numConnections",16,96); /** The maximum ratio of non-limewire peers to allow */ public static final FloatSetting MAX_NON_LIME_PEERS = FACTORY.createSettableFloatSetting("MAX_NON_LIME_PEERS",0.2f,"ConnectionSettings.maxLimePeers",0.0f, 0.5f); /** The minimum ratio of non-limewire peers to allow */ public static final FloatSetting MIN_NON_LIME_PEERS = FACTORY.createSettableFloatSetting("MIN_NON_LIME_PEERS",0.1f,"ConnectionSettings.minLimePeers",0.0f, 0.2f); /** * Setting for the "soft max" ttl. This is the limit for hops+ttl * on incoming messages. The soft max is invoked if the following is * true:<p> * * ttl + hops > SOFT_MAX<p> * * If this is the case, the TTL is set to SOFT_MAX - hops. */ public static final ByteSetting SOFT_MAX = FACTORY.createByteSetting("SOFT_MAX", (byte)3); /** * Settings for whether or not to local addresses should be considered * private, and therefore ignored when connecting */ public static final BooleanSetting LOCAL_IS_PRIVATE = FACTORY.createBooleanSetting("LOCAL_IS_PRIVATE", true); /** * Setting for whether or not to connect using GWebCache. */ public static final BooleanSetting USE_GWEBCACHE = FACTORY.createBooleanSetting("USE_GWEBCACHE", true); /** * Setting for the last time (in msecs since epoch) that we * connected to retrieve more gWebCache bootstrap servers */ public static final LongSetting LAST_GWEBCACHE_FETCH_TIME = FACTORY.createLongSetting("LAST_GWEBCACHE_FETCH_TIME", 0); /** * Setting for whether or not to activate the connection watchdog * thread. Particularly useful in testing. */ public static final BooleanSetting WATCHDOG_ACTIVE = FACTORY.createBooleanSetting("WATCHDOG_ACTIVE", true); /** * Setting for the multicast address. */ public static final StringSetting MULTICAST_ADDRESS = FACTORY.createStringSetting("MULTICAST_ADDRESS", "234.21.81.1"); /** * Setting for the multicast port. */ public static final IntSetting MULTICAST_PORT = FACTORY.createIntSetting("MULTICAST_PORT", 6347); /** * Setting for whether or not to allow multicast message loopback. */ public static final BooleanSetting ALLOW_MULTICAST_LOOPBACK = FACTORY.createBooleanSetting("ALLOW_MULTICAST_LOOPBACK", false); /** * Setting for whether or not to use connection preferencing -- used * primarily for testing. */ public static final BooleanSetting PREFERENCING_ACTIVE = FACTORY.createBooleanSetting("PREFERENCING_ACTIVE", true); /** * Setting for whether or not connections should be allowed to be made * while we're disconnected. */ public static final BooleanSetting ALLOW_WHILE_DISCONNECTED = FACTORY.createBooleanSetting("ALLOW_WHILE_DISCONNECTED", false); /** * Setting for whether or not the removal of connections should * be allowed -- used for testing. */ public static final BooleanSetting REMOVE_ENABLED = FACTORY.createBooleanSetting("REMOVE_ENABLED", true); /** * Setting for whether or not hosts should exchange QRP tables. This is * particularly useful for testing. */ public static BooleanSetting SEND_QRP = FACTORY.createBooleanSetting("SEND_QRP", true); /** * Setting for whether or not we'll accept incoming connections * that are compressed via deflate. */ public static final BooleanSetting ACCEPT_DEFLATE = FACTORY.createBooleanSetting("ACCEPT_GNUTELLA_DEFLATE", true); /** * Setting for whether or not we'll encode outgoing connections * via deflate. */ public static final BooleanSetting ENCODE_DEFLATE = FACTORY.createBooleanSetting("ENCODE_GNUTELLA_DEFLATE", true); /** * The time to live. */ public static final ByteSetting TTL = FACTORY.createByteSetting("TTL", (byte)4); /** * The connection speed in kbyte/s */ public static final IntSetting CONNECTION_SPEED = FACTORY.createIntSetting("CONNECTION_SPEED", SpeedConstants.MODEM_SPEED_INT); /** * The port to connect on */ public static final IntSetting PORT = FACTORY.createIntSetting("PORT", 6346); /** * Sets whether or not the users ip address should be forced to * the value they have entered. */ public static final BooleanSetting FORCE_IP_ADDRESS = FACTORY.createBooleanSetting("FORCE_IP_ADDRESS", false); /** * Forces IP address to the given address. */ public static final StringSetting FORCED_IP_ADDRESS_STRING = (StringSetting)FACTORY.createStringSetting("FORCED_IP_ADDRESS_STRING", "0.0.0.0"). setPrivate(true); /** * The port to use when forcing the ip address. */ public static final IntSetting FORCED_PORT = FACTORY.createIntSetting("FORCED_PORT", 6346); /** * Whether we should not try to use UPnP to open ports. */ public static final BooleanSetting DISABLE_UPNP = FACTORY.createBooleanSetting("DISABLE_UPNP", false); /** * Whether we are currently using UPNP - used to detect whether clearing * of the mappings on shutdown was definitely not successful. Since the * shutdown hooks may fail, this cannot guarantee if it was successful. */ public static final BooleanSetting UPNP_IN_USE = FACTORY.createBooleanSetting("UPNP_IN_USE", false); public static final String CONNECT_STRING_FIRST_WORD = "GNUTELLA"; public static final StringSetting CONNECT_STRING = FACTORY.createStringSetting("CONNECT_STRING", "GNUTELLA CONNECT/0.4"); public static final StringSetting CONNECT_OK_STRING = FACTORY.createStringSetting("CONNECT_OK_STRING", "GNUTELLA OK"); /** * Setting for whether or not to use NIO for network IO. This is useful, * for example, for testing the old blocking IO code without switching * JVMs. */ public static final BooleanSetting USE_NIO = FACTORY.createBooleanSetting("USE_NIO", true); /** * Setting for the address of the proxy */ public static final StringSetting PROXY_HOST = FACTORY.createStringSetting("PROXY_HOST", ""); /** * Setting for the port of the proxy */ public static final IntSetting PROXY_PORT = FACTORY.createIntSetting("PROXY_PORT", 0); /** * Setting for whether to use the proxy for private ip addresses */ public static final BooleanSetting USE_PROXY_FOR_PRIVATE = FACTORY.createBooleanSetting("USE_PROXY_FOR_PRIVATE", false); /** * Setting for which proxy type to use or if any at all */ public static final IntSetting CONNECTION_METHOD = FACTORY.createIntSetting("CONNECTION_TYPE", C_NO_PROXY); /** * Setting for whether or not to authenticate at the remote proxy */ public static final BooleanSetting PROXY_AUTHENTICATE = FACTORY.createBooleanSetting("PROXY_AUTHENTICATE", false); /** * Setting for the username to use for the proxy */ public static final StringSetting PROXY_USERNAME = FACTORY.createStringSetting("PROXY_USERNAME", ""); /** * Setting for the password to use for the proxy */ public static final StringSetting PROXY_PASS = FACTORY.createStringSetting("PROXY_PASS", ""); /** * setting for locale preferencing */ public static final BooleanSetting USE_LOCALE_PREF = FACTORY.createBooleanSetting("USE_LOCALE_PREF", true); /** * number of slots to reserve for those connections that * match the local locale */ public static final IntSetting NUM_LOCALE_PREF = FACTORY.createIntSetting("NUMBER_LOCALE_PREF", 2); /** * how many attempts to connect to a remote host must elapse * before we start accepting non-LW vendors as UPs */ public static final IntSetting LIME_ATTEMPTS = FACTORY.createIntSetting("LIME_ATTEMPTS",50); /** * how long we believe firewalls will let us send solicited udp * traffic. Field tests show at least a minute with most firewalls, so lets * try 55 seconds. */ public static final LongSetting SOLICITED_GRACE_PERIOD = FACTORY.createLongSetting("SOLICITED_GRACE_PERIOD",85000l); /** * How many pongs to send back for each ping. */ public static final IntSetting NUM_RETURN_PONGS = FACTORY.createSettableIntSetting("NUM_RETURN_PONGS",10,"pings",5,25); /** * Setting to disable bootstrapping.. used only in tests. */ public static final BooleanSetting DO_NOT_BOOTSTRAP = FACTORY.createBooleanSetting("DO_NOT_BOOTSTRAP",false); /** * Setting to not send a multicast bootstrap ping. */ public static final BooleanSetting DO_NOT_MULTICAST_BOOTSTRAP = FACTORY.createBooleanSetting("DO_NOT_MULTICAST_BOOTSTRAP", false); /** * Setting for whether or not firewalled checking is done from any * incoming connection or just connectbacks. */ public static final BooleanSetting UNSET_FIREWALLED_FROM_CONNECTBACK = FACTORY.createSettableBooleanSetting("UNSET_FIREWALLED_FROM_CONNECTBACK", false, "connectbackfirewall"); /** * Time in milliseconds to delay prior to flushing data on peer -> peer connections */ public static final LongSetting FLUSH_DELAY_TIME = FACTORY.createSettableLongSetting("FLUSH_DELAY_TIME", 0, "flushdelay", 0, 300); /** * Lowercase hosts that are evil. */ public static final StringArraySetting EVIL_HOSTS = FACTORY.createSettableStringArraySetting("EVIL_HOSTS", new String[0], "evil_hosts"); /** * How many connections to maintain as a leaf when idle */ public static final IntSetting IDLE_CONNECTIONS = FACTORY.createSettableIntSetting("IDLE_CONNECTIONS",1,"ConnectionSettings.IdleConnections",1,3); /** * The maximum line length we'll try to parse while reading a header. */ public static final IntSetting MAX_HANDSHAKE_LINE_SIZE = FACTORY.createSettableIntSetting("MAX_HANDSHAKE_LINE_SIZE", 1024, "handshake.maxLineSize", 512, 4096); /** * The maximum number of headers to try and parse. */ public static final IntSetting MAX_HANDSHAKE_HEADERS = FACTORY.createSettableIntSetting("MAX_HANDSHAKZE_LIMIT", 30, "handshake.maxHeaderLimit", 15, 100); /** * The size of our Querry Routing Tables, in multiples of 1024 entries. * (In 1998, the IEC standardized "kibi" as the prefix denoting 1024, or "kilo binary".) */ public static final PowerOfTwoSetting QRT_SIZE_IN_KIBI_ENTRIES = FACTORY.createSettablePowerOfTwoSetting("QRT_SIZE_IN_KIBI_ENTRIES", 64, "ConnectionSettings.QRTSizeInKibiEntries", 64, 256); /** * Helper method left from Settings Manager * * Returns the maximum number of connections for the given connection * speed. */ public static final int getMaxConnections() { int speed = CONNECTION_SPEED.getValue(); if (speed <= SpeedConstants.MODEM_SPEED_INT) { return 3; } else if (speed <= SpeedConstants.CABLE_SPEED_INT) { return 6; } else if (speed <= SpeedConstants.T1_SPEED_INT) { return 10; } else { //T3: no limit return 12; } } }