propagate from branch 'i2p.i2p.zzz.i2psnark' (head 738b0ee2a3e938f83c8524d7ee1cbd66c83d7d56)
to branch 'i2p.i2p' (head 7bc276bf13158ca72d687031fdf5e9921efc5050)
This commit is contained in:
@ -2,6 +2,11 @@
|
||||
<!-- You may freely edit this file. See commented blocks below for -->
|
||||
<!-- some examples of how to customize the build. -->
|
||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
||||
<!-- By default, only the Clean and Build commands use this build script. -->
|
||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
|
||||
<!-- the Compile on Save feature is turned off for the project. -->
|
||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
|
||||
<!-- in the project's Project Properties dialog box.-->
|
||||
<project name="BOB" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project BOB.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
|
@ -218,13 +218,13 @@ is divided into following sections:
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-nbjpda">
|
||||
<target depends="-init-debug-args" name="-init-macrodef-nbjpda">
|
||||
<macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute default="${main.class}" name="name"/>
|
||||
<attribute default="${debug.classpath}" name="classpath"/>
|
||||
<attribute default="" name="stopclassname"/>
|
||||
<sequential>
|
||||
<nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="dt_socket">
|
||||
<nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
@ -255,6 +255,12 @@ is divided into following sections:
|
||||
<condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
|
||||
<istrue value="${have-jdk-older-than-1.4}"/>
|
||||
</condition>
|
||||
<condition else="dt_socket" property="debug-transport-by-os" value="dt_shmem">
|
||||
<os family="windows"/>
|
||||
</condition>
|
||||
<condition else="${debug-transport-by-os}" property="debug-transport" value="${debug.transport}">
|
||||
<isset property="debug.transport"/>
|
||||
</condition>
|
||||
</target>
|
||||
<target depends="-init-debug-args" name="-init-macrodef-debug">
|
||||
<macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
@ -264,7 +270,7 @@ is divided into following sections:
|
||||
<sequential>
|
||||
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
||||
<jvmarg line="${debug-args-line}"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=${debug-transport},address=${jpda.address}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
@ -311,6 +317,13 @@ is divided into following sections:
|
||||
===================
|
||||
-->
|
||||
<target depends="init" name="deps-jar" unless="no.deps"/>
|
||||
<target depends="init,-check-automatic-build,-clean-after-automatic-build" name="-verify-automatic-build"/>
|
||||
<target depends="init" name="-check-automatic-build">
|
||||
<available file="${build.classes.dir}/.netbeans_automatic_build" property="netbeans.automatic.build"/>
|
||||
</target>
|
||||
<target depends="init" if="netbeans.automatic.build" name="-clean-after-automatic-build">
|
||||
<antcall target="clean"/>
|
||||
</target>
|
||||
<target depends="init,deps-jar" name="-pre-pre-compile">
|
||||
<mkdir dir="${build.classes.dir}"/>
|
||||
</target>
|
||||
@ -331,7 +344,7 @@ is divided into following sections:
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
|
||||
<target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project." name="compile"/>
|
||||
<target name="-pre-compile-single">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
@ -345,7 +358,7 @@ is divided into following sections:
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
|
||||
<target depends="init,deps-jar,-verify-automatic-build,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single" name="compile-single"/>
|
||||
<!--
|
||||
====================
|
||||
JAR BUILDING SECTION
|
||||
|
@ -1,8 +1,8 @@
|
||||
build.xml.data.CRC32=209349b6
|
||||
build.xml.script.CRC32=05a1ffd9
|
||||
build.xml.stylesheet.CRC32=be360661
|
||||
build.xml.script.CRC32=403e69e6
|
||||
build.xml.stylesheet.CRC32=958a1d3e
|
||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
|
||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
|
||||
nbproject/build-impl.xml.data.CRC32=209349b6
|
||||
nbproject/build-impl.xml.script.CRC32=eeeca375
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=487672f9
|
||||
nbproject/build-impl.xml.script.CRC32=75fac64c
|
||||
nbproject/build-impl.xml.stylesheet.CRC32=e55b27f5
|
||||
|
@ -2,5 +2,5 @@ do.depend=false
|
||||
do.jar=true
|
||||
javac.debug=true
|
||||
javadoc.preview=true
|
||||
jaxws.endorsed.dir=/usr/local/netbeans-6.1/java2/modules/ext/jaxws21/api
|
||||
user.properties.file=/root/.netbeans/6.1/build.properties
|
||||
jaxws.endorsed.dir=/usr/local/netbeans-6.5/java2/modules/ext/jaxws21/api:/usr/local/netbeans-6.5/ide10/modules/ext/jaxb/api
|
||||
user.properties.file=/root/.netbeans/6.5/build.properties
|
||||
|
@ -46,7 +46,7 @@ public class DoCMDS implements Runnable {
|
||||
|
||||
// FIX ME
|
||||
// I need a better way to do versioning, but this will do for now.
|
||||
public static final String BMAJ = "00", BMIN = "00", BREV = "01", BEXT = "-C";
|
||||
public static final String BMAJ = "00", BMIN = "00", BREV = "01", BEXT = "-D";
|
||||
public static final String BOBversion = BMAJ + "." + BMIN + "." + BREV + BEXT;
|
||||
private Socket server;
|
||||
private Properties props;
|
||||
@ -92,6 +92,7 @@ public class DoCMDS implements Runnable {
|
||||
private static final String C_start = "start";
|
||||
private static final String C_status = "status";
|
||||
private static final String C_stop = "stop";
|
||||
private static final String C_verify = "verify";
|
||||
|
||||
/* all the coomands available, plus description */
|
||||
private static final String C_ALL[][] = {
|
||||
@ -115,6 +116,7 @@ public class DoCMDS implements Runnable {
|
||||
{C_start, C_start + " * Start the current nickname tunnel."},
|
||||
{C_status, C_status + " nickname * Display status of a nicknamed tunnel."},
|
||||
{C_stop, C_stop + " * Stops the current nicknamed tunnel."},
|
||||
{C_verify, C_verify + " BASE64_key * Verifies BASE64 destination."},
|
||||
{"", "COMMANDS: " + // this is ugly, but...
|
||||
C_help + " " +
|
||||
C_clear + " " +
|
||||
@ -135,7 +137,8 @@ public class DoCMDS implements Runnable {
|
||||
C_show + " " +
|
||||
C_start + " " +
|
||||
C_status + " " +
|
||||
C_stop
|
||||
C_stop + " " +
|
||||
C_verify
|
||||
},
|
||||
{" ", " "} // end of list
|
||||
};
|
||||
@ -346,12 +349,12 @@ public class DoCMDS implements Runnable {
|
||||
* @return
|
||||
*/
|
||||
private boolean is64ok(String data) {
|
||||
String dest = new String(data);
|
||||
if(dest.replaceAll("[a-zA-Z0-9~-]", "").length() == 0) {
|
||||
try {
|
||||
Destination x = new Destination(data);
|
||||
return true;
|
||||
} catch(Exception e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -619,6 +622,12 @@ die: {
|
||||
}
|
||||
}
|
||||
|
||||
}else if(Command.equals(C_verify)) {
|
||||
if(is64ok(Arg)) {
|
||||
out.println("OK");
|
||||
} else {
|
||||
out.println("ERROR not in BASE64 format");
|
||||
}
|
||||
} else if(Command.equals(C_setkeys)) {
|
||||
// Set the NamedDB to a privatekey in BASE64 format
|
||||
if(ns) {
|
||||
|
@ -90,14 +90,14 @@ public class ConfigTunnelsHelper {
|
||||
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
||||
if (now > MAX_LENGTH)
|
||||
renderOptions(buf, now, now, now, "", "hop");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td><select name=\"").append(index).append(".depthOutbound\">\n");
|
||||
now = out.getLength();
|
||||
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
||||
if (now > MAX_LENGTH)
|
||||
renderOptions(buf, now, now, now, "", "hop");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
// tunnel depth variance
|
||||
@ -111,7 +111,7 @@ public class ConfigTunnelsHelper {
|
||||
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
||||
else if (now < MIN_NEG_VARIANCE)
|
||||
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td><select name=\"").append(index).append(".varianceOutbound\">\n");
|
||||
now = out.getLengthVariance();
|
||||
@ -122,7 +122,7 @@ public class ConfigTunnelsHelper {
|
||||
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
||||
else if (now < MIN_NEG_VARIANCE)
|
||||
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
// tunnel quantity
|
||||
buf.append("<tr><td>Quantity</td>\n");
|
||||
@ -131,14 +131,14 @@ public class ConfigTunnelsHelper {
|
||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
||||
if (now > MAX_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td><select name=\"").append(index).append(".quantityOutbound\">\n");
|
||||
now = out.getQuantity();
|
||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
||||
if (now > MAX_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
// tunnel backup quantity
|
||||
@ -148,14 +148,14 @@ public class ConfigTunnelsHelper {
|
||||
renderOptions(buf, 0, MAX_QUANTITY, now, "", "tunnel");
|
||||
if (now > MAX_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
|
||||
buf.append("<td><select name=\"").append(index).append(".backupOutbound\">\n");
|
||||
now = in.getBackupQuantity();
|
||||
renderOptions(buf, 0, MAX_QUANTITY, now, "", "tunnel");
|
||||
if (now > MAX_QUANTITY)
|
||||
renderOptions(buf, now, now, now, "", "tunnel");
|
||||
buf.append("</td>\n");
|
||||
buf.append("</select></td>\n");
|
||||
buf.append("</tr>\n");
|
||||
|
||||
// custom options
|
||||
|
@ -34,7 +34,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
||||
public static final String PROP_UPDATE_URL = "router.updateURL";
|
||||
// public static final String DEFAULT_UPDATE_URL = "http://dev.i2p.net/i2p/i2pupdate.sud";
|
||||
public static final String DEFAULT_UPDATE_URL =
|
||||
"http://amiga.i2p/i2p/i2pupdate.sud\r\n" +
|
||||
"http://echelon.i2p/i2p/i2pupdate.sud\r\n" +
|
||||
"http://stats.i2p/i2p/i2pupdate.sud\r\n" +
|
||||
"http://complication.i2p/i2p/i2pupdate.sud\r\n" +
|
||||
"http://www.i2p2.i2p/_static/i2pupdate.sud\r\n" +
|
||||
|
@ -28,11 +28,16 @@ class ConnectionDataReceiver implements MessageOutputStream.DataReceiver {
|
||||
/**
|
||||
* This tells the flusher in MessageOutputStream whether to flush.
|
||||
* It won't flush if this returns true.
|
||||
* It was: return con.getUnackedPacketsSent() > 0;
|
||||
*
|
||||
* It was: return con.getUnackedPacketsSent() > 0 (i.e. Nagle)
|
||||
* But then, for data that fills more than one packet, the last part of
|
||||
* the data isn't sent until all the previous packets are acked. Which is very slow.
|
||||
* The poor interaction of Nagle and Delayed Acknowledgements is well-documented.
|
||||
*
|
||||
* So let's send data along unless the outbound window is full.
|
||||
* (i.e. no-Nagle or TCP_NODELAY)
|
||||
*
|
||||
* Probably should have a configuration option for this.
|
||||
*
|
||||
* @return !flush
|
||||
*/
|
||||
|
@ -56,7 +56,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
private static final int TREND_COUNT = 3;
|
||||
static final int INITIAL_WINDOW_SIZE = 12;
|
||||
static final int DEFAULT_MAX_SENDS = 8;
|
||||
|
||||
public static final int DEFAULT_INITIAL_RTT = 10*1000;
|
||||
static final int MIN_WINDOW_SIZE = 1;
|
||||
|
||||
/**
|
||||
@ -208,7 +208,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
setConnectDelay(getInt(opts, PROP_CONNECT_DELAY, -1));
|
||||
setProfile(getInt(opts, PROP_PROFILE, PROFILE_BULK));
|
||||
setMaxMessageSize(getInt(opts, PROP_MAX_MESSAGE_SIZE, DEFAULT_MAX_MESSAGE_SIZE));
|
||||
setRTT(getInt(opts, PROP_INITIAL_RTT, 10*1000));
|
||||
setRTT(getInt(opts, PROP_INITIAL_RTT, DEFAULT_INITIAL_RTT));
|
||||
setReceiveWindow(getInt(opts, PROP_INITIAL_RECEIVE_WINDOW, 1));
|
||||
setResendDelay(getInt(opts, PROP_INITIAL_RESEND_DELAY, 1000));
|
||||
setSendAckDelay(getInt(opts, PROP_INITIAL_ACK_DELAY, 2000));
|
||||
@ -237,7 +237,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
if (opts.containsKey(PROP_MAX_MESSAGE_SIZE))
|
||||
setMaxMessageSize(getInt(opts, PROP_MAX_MESSAGE_SIZE, Packet.MAX_PAYLOAD_SIZE));
|
||||
if (opts.containsKey(PROP_INITIAL_RTT))
|
||||
setRTT(getInt(opts, PROP_INITIAL_RTT, 10*1000));
|
||||
setRTT(getInt(opts, PROP_INITIAL_RTT, DEFAULT_INITIAL_RTT));
|
||||
if (opts.containsKey(PROP_INITIAL_RECEIVE_WINDOW))
|
||||
setReceiveWindow(getInt(opts, PROP_INITIAL_RECEIVE_WINDOW, 1));
|
||||
if (opts.containsKey(PROP_INITIAL_RESEND_DELAY))
|
||||
@ -306,6 +306,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
}
|
||||
|
||||
/** after how many consecutive messages should we ack?
|
||||
* This doesn't appear to be used.
|
||||
* @return receive window size.
|
||||
*/
|
||||
public int getReceiveWindow() { return _receiveWindow; }
|
||||
@ -420,7 +421,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
||||
* @return Maximum retrys before failing a sent message.
|
||||
*/
|
||||
public int getMaxResends() { return _maxResends; }
|
||||
public void setMaxResends(int numSends) { _maxResends = numSends; }
|
||||
public void setMaxResends(int numSends) { _maxResends = Math.max(numSends, 0); }
|
||||
|
||||
/**
|
||||
* What period of inactivity qualifies as "too long"?
|
||||
|
@ -38,7 +38,7 @@ import net.i2p.util.Log;
|
||||
* <li>{@link #FLAG_SIGNATURE_INCLUDED}: {@link net.i2p.data.Signature}</li>
|
||||
* <li>{@link #FLAG_SIGNATURE_REQUESTED}: no option data</li>
|
||||
* <li>{@link #FLAG_FROM_INCLUDED}: {@link net.i2p.data.Destination}</li>
|
||||
* <li>{@link #FLAG_DELAY_REQUESTED}: 1 byte integer</li>
|
||||
* <li>{@link #FLAG_DELAY_REQUESTED}: 2 byte integer</li>
|
||||
* <li>{@link #FLAG_MAX_PACKET_SIZE_INCLUDED}: 2 byte integer</li>
|
||||
* <li>{@link #FLAG_PROFILE_INTERACTIVE}: no option data</li>
|
||||
* </ol>
|
||||
|
@ -74,7 +74,11 @@ public class UrlLauncher {
|
||||
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("browser.reg"), "UTF-16"));
|
||||
for (String line; (line = bufferedReader.readLine()) != null; ) {
|
||||
if (line.startsWith("@=")) {
|
||||
browserString = "\"" + line.substring(3, line.toLowerCase().indexOf(".exe") + 4) + "\"";
|
||||
// we should really use the whole line and replace %1 with the url
|
||||
browserString = line.substring(3, line.toLowerCase().indexOf(".exe") + 4);
|
||||
if (browserString.startsWith("\\\""))
|
||||
browserString = browserString.substring(2);
|
||||
browserString = "\"" + browserString + "\"";
|
||||
}
|
||||
}
|
||||
try {
|
||||
|
@ -332,6 +332,8 @@
|
||||
<copy file="build/BOB.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/sam.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/i2psnark.jar" todir="pkg-temp/lib" />
|
||||
<!-- include systray fixes in 0.6.5 -->
|
||||
<copy file="build/systray.jar" todir="pkg-temp/lib/" />
|
||||
<copy file="build/susimail.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/susidns.war" todir="pkg-temp/webapps/" />
|
||||
<copy file="build/i2psnark.war" todir="pkg-temp/webapps/" />
|
||||
|
@ -15,7 +15,7 @@ package net.i2p;
|
||||
*/
|
||||
public class CoreVersion {
|
||||
public final static String ID = "$Revision: 1.72 $ $Date: 2008-08-24 12:00:00 $";
|
||||
public final static String VERSION = "0.6.4";
|
||||
public final static String VERSION = "0.6.5";
|
||||
|
||||
public static void main(String args[]) {
|
||||
System.out.println("I2P Core version: " + VERSION);
|
||||
|
@ -92,6 +92,7 @@ public class I2PAppContext {
|
||||
private volatile boolean _randomInitialized;
|
||||
private volatile boolean _keyGeneratorInitialized;
|
||||
|
||||
|
||||
/**
|
||||
* Pull the default context, creating a new one if necessary, else using
|
||||
* the first one created.
|
||||
@ -113,6 +114,7 @@ public class I2PAppContext {
|
||||
public I2PAppContext() {
|
||||
this(true, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Lets root a brand new context
|
||||
*
|
||||
@ -120,6 +122,7 @@ public class I2PAppContext {
|
||||
public I2PAppContext(Properties envProps) {
|
||||
this(true, envProps);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param doInit should this context be used as the global one (if necessary)?
|
||||
*/
|
||||
@ -175,6 +178,7 @@ public class I2PAppContext {
|
||||
}
|
||||
return System.getProperty(propName, defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Access the configuration attributes of this context, listing the properties
|
||||
* provided during the context construction, as well as the ones included in
|
||||
@ -194,9 +198,11 @@ public class I2PAppContext {
|
||||
* over time.
|
||||
*/
|
||||
public StatManager statManager() {
|
||||
if (!_statManagerInitialized) initializeStatManager();
|
||||
if (!_statManagerInitialized)
|
||||
initializeStatManager();
|
||||
return _statManager;
|
||||
}
|
||||
|
||||
private void initializeStatManager() {
|
||||
synchronized (this) {
|
||||
if (_statManager == null)
|
||||
@ -215,9 +221,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public SessionKeyManager sessionKeyManager() {
|
||||
if (!_sessionKeyManagerInitialized) initializeSessionKeyManager();
|
||||
if (!_sessionKeyManagerInitialized)
|
||||
initializeSessionKeyManager();
|
||||
return _sessionKeyManager;
|
||||
}
|
||||
|
||||
private void initializeSessionKeyManager() {
|
||||
synchronized (this) {
|
||||
if (_sessionKeyManager == null)
|
||||
@ -232,9 +240,11 @@ public class I2PAppContext {
|
||||
* specified to customize the naming service exposed.
|
||||
*/
|
||||
public NamingService namingService() {
|
||||
if (!_namingServiceInitialized) initializeNamingService();
|
||||
if (!_namingServiceInitialized)
|
||||
initializeNamingService();
|
||||
return _namingService;
|
||||
}
|
||||
|
||||
private void initializeNamingService() {
|
||||
synchronized (this) {
|
||||
if (_namingService == null) {
|
||||
@ -245,9 +255,11 @@ public class I2PAppContext {
|
||||
}
|
||||
|
||||
public PetNameDB petnameDb() {
|
||||
if (!_petnameDbInitialized) initializePetnameDb();
|
||||
if (!_petnameDbInitialized)
|
||||
initializePetnameDb();
|
||||
return _petnameDb;
|
||||
}
|
||||
|
||||
private void initializePetnameDb() {
|
||||
synchronized (this) {
|
||||
if (_petnameDb == null) {
|
||||
@ -266,9 +278,11 @@ public class I2PAppContext {
|
||||
* it ;)
|
||||
*/
|
||||
public ElGamalEngine elGamalEngine() {
|
||||
if (!_elGamalEngineInitialized) initializeElGamalEngine();
|
||||
if (!_elGamalEngineInitialized)
|
||||
initializeElGamalEngine();
|
||||
return _elGamalEngine;
|
||||
}
|
||||
|
||||
private void initializeElGamalEngine() {
|
||||
synchronized (this) {
|
||||
if (_elGamalEngine == null) {
|
||||
@ -289,9 +303,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public ElGamalAESEngine elGamalAESEngine() {
|
||||
if (!_elGamalAESEngineInitialized) initializeElGamalAESEngine();
|
||||
if (!_elGamalAESEngineInitialized)
|
||||
initializeElGamalAESEngine();
|
||||
return _elGamalAESEngine;
|
||||
}
|
||||
|
||||
private void initializeElGamalAESEngine() {
|
||||
synchronized (this) {
|
||||
if (_elGamalAESEngine == null)
|
||||
@ -307,9 +323,11 @@ public class I2PAppContext {
|
||||
* disable it.
|
||||
*/
|
||||
public AESEngine aes() {
|
||||
if (!_AESEngineInitialized) initializeAESEngine();
|
||||
if (!_AESEngineInitialized)
|
||||
initializeAESEngine();
|
||||
return _AESEngine;
|
||||
}
|
||||
|
||||
private void initializeAESEngine() {
|
||||
synchronized (this) {
|
||||
if (_AESEngine == null) {
|
||||
@ -329,9 +347,11 @@ public class I2PAppContext {
|
||||
* their own log levels, output locations, and rotation configuration.
|
||||
*/
|
||||
public LogManager logManager() {
|
||||
if (!_logManagerInitialized) initializeLogManager();
|
||||
if (!_logManagerInitialized)
|
||||
initializeLogManager();
|
||||
return _logManager;
|
||||
}
|
||||
|
||||
private void initializeLogManager() {
|
||||
synchronized (this) {
|
||||
if (_logManager == null)
|
||||
@ -339,15 +359,18 @@ public class I2PAppContext {
|
||||
_logManagerInitialized = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* There is absolutely no good reason to make this context specific,
|
||||
* other than for consistency, and perhaps later we'll want to
|
||||
* include some stats.
|
||||
*/
|
||||
public HMACGenerator hmac() {
|
||||
if (!_hmacInitialized) initializeHMAC();
|
||||
if (!_hmacInitialized)
|
||||
initializeHMAC();
|
||||
return _hmac;
|
||||
}
|
||||
|
||||
private void initializeHMAC() {
|
||||
synchronized (this) {
|
||||
if (_hmac == null) {
|
||||
@ -358,9 +381,11 @@ public class I2PAppContext {
|
||||
}
|
||||
|
||||
public HMAC256Generator hmac256() {
|
||||
if (!_hmac256Initialized) initializeHMAC256();
|
||||
if (!_hmac256Initialized)
|
||||
initializeHMAC256();
|
||||
return _hmac256;
|
||||
}
|
||||
|
||||
private void initializeHMAC256() {
|
||||
synchronized (this) {
|
||||
if (_hmac256 == null) {
|
||||
@ -375,9 +400,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public SHA256Generator sha() {
|
||||
if (!_shaInitialized) initializeSHA();
|
||||
if (!_shaInitialized)
|
||||
initializeSHA();
|
||||
return _sha;
|
||||
}
|
||||
|
||||
private void initializeSHA() {
|
||||
synchronized (this) {
|
||||
if (_sha == null)
|
||||
@ -391,9 +418,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public DSAEngine dsa() {
|
||||
if (!_dsaInitialized) initializeDSA();
|
||||
if (!_dsaInitialized)
|
||||
initializeDSA();
|
||||
return _dsa;
|
||||
}
|
||||
|
||||
private void initializeDSA() {
|
||||
synchronized (this) {
|
||||
if (_dsa == null) {
|
||||
@ -411,9 +440,11 @@ public class I2PAppContext {
|
||||
* the appContext, see the DSA, HMAC, and SHA comments above.
|
||||
*/
|
||||
public KeyGenerator keyGenerator() {
|
||||
if (!_keyGeneratorInitialized) initializeKeyGenerator();
|
||||
if (!_keyGeneratorInitialized)
|
||||
initializeKeyGenerator();
|
||||
return _keyGenerator;
|
||||
}
|
||||
|
||||
private void initializeKeyGenerator() {
|
||||
synchronized (this) {
|
||||
if (_keyGenerator == null)
|
||||
@ -428,9 +459,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public Clock clock() { // overridden in RouterContext
|
||||
if (!_clockInitialized) initializeClock();
|
||||
if (!_clockInitialized)
|
||||
initializeClock();
|
||||
return _clock;
|
||||
}
|
||||
|
||||
protected void initializeClock() { // overridden in RouterContext
|
||||
synchronized (this) {
|
||||
if (_clock == null)
|
||||
@ -447,9 +480,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public RoutingKeyGenerator routingKeyGenerator() {
|
||||
if (!_routingKeyGeneratorInitialized) initializeRoutingKeyGenerator();
|
||||
if (!_routingKeyGeneratorInitialized)
|
||||
initializeRoutingKeyGenerator();
|
||||
return _routingKeyGenerator;
|
||||
}
|
||||
|
||||
private void initializeRoutingKeyGenerator() {
|
||||
synchronized (this) {
|
||||
if (_routingKeyGenerator == null)
|
||||
@ -463,9 +498,11 @@ public class I2PAppContext {
|
||||
*
|
||||
*/
|
||||
public RandomSource random() {
|
||||
if (!_randomInitialized) initializeRandom();
|
||||
if (!_randomInitialized)
|
||||
initializeRandom();
|
||||
return _random;
|
||||
}
|
||||
|
||||
private void initializeRandom() {
|
||||
synchronized (this) {
|
||||
if (_random == null) {
|
||||
|
@ -41,24 +41,34 @@ import net.i2p.util.Log;
|
||||
public class ATalk implements I2PSessionListener, Runnable {
|
||||
/** logging hook - status messages are piped to this */
|
||||
private final static Log _log = new Log(ATalk.class);
|
||||
|
||||
/** platform independent newline */
|
||||
private final static String NL = System.getProperty("line.separator");
|
||||
|
||||
/** the current session */
|
||||
private I2PSession _session;
|
||||
|
||||
/** who am i */
|
||||
private Destination _myDestination;
|
||||
|
||||
/** who are you? */
|
||||
private Destination _peerDestination;
|
||||
|
||||
/** location of my secret key file */
|
||||
private String _myKeyFile;
|
||||
|
||||
/** location of their public key */
|
||||
private String _theirDestinationFile;
|
||||
|
||||
/** where the application reads input from. currently set to standard input */
|
||||
private BufferedReader _in;
|
||||
|
||||
/** where the application sends output to. currently set to standard output */
|
||||
private BufferedWriter _out;
|
||||
|
||||
/** string that messages must begin with to be treated as files */
|
||||
private final static String FILE_COMMAND = ".file: ";
|
||||
|
||||
/** the, erm, manual */
|
||||
private final static String MANUAL = "ATalk: Anonymous Talk, a demo program for the Invisible Internet Project SDK"
|
||||
+ NL
|
||||
@ -84,7 +94,9 @@ public class ATalk implements I2PSessionListener, Runnable {
|
||||
+ NL
|
||||
+ "To end the talk session, enter a period on a line by itself and hit return"
|
||||
+ NL;
|
||||
|
||||
public final static String PROP_CONFIG_LOCATION = "configFile";
|
||||
|
||||
private static final SimpleDateFormat _fmt = new SimpleDateFormat("hh:mm:ss.SSS");
|
||||
|
||||
/** Construct the talk engine, but don't connect yet */
|
||||
@ -111,11 +123,12 @@ public class ATalk implements I2PSessionListener, Runnable {
|
||||
_log.warn("Unable to load up the ATalk config file " + configLocation);
|
||||
}
|
||||
// Provide any router or client API configuration here.
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_HOST)) props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_HOST))
|
||||
props.setProperty(I2PClient.PROP_TCP_HOST, "localhost");
|
||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT))
|
||||
props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
||||
if (!props.containsKey(I2PClient.PROP_RELIABILITY))
|
||||
props.setProperty(I2PClient.PROP_RELIABILITY,
|
||||
I2PClient.PROP_RELIABILITY_BEST_EFFORT);
|
||||
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_BEST_EFFORT);
|
||||
_session = client.createSession(new FileInputStream(myFile), props);
|
||||
_session.setSessionListener(this);
|
||||
_session.connect();
|
||||
@ -365,3 +378,4 @@ public class ATalk implements I2PSessionListener, Runnable {
|
||||
_log.debug("Abuse reported of severity " + severity);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,18 +171,14 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa
|
||||
for (Iterator iter = options.keySet().iterator(); iter.hasNext();) {
|
||||
String key = (String) iter.next();
|
||||
String val = options.getProperty(key);
|
||||
if (key.startsWith("java")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping java.* property: " + key);
|
||||
} else if (key.startsWith("user")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping user.* property: " + key);
|
||||
} else if (key.startsWith("os")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping os.* property: " + key);
|
||||
} else if (key.startsWith("sun")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping sun.* property: " + key);
|
||||
} else if (key.startsWith("file")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping file.* property: " + key);
|
||||
} else if (key.startsWith("line")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping line.* property: " + key);
|
||||
if (key.startsWith("java") ||
|
||||
key.startsWith("user") ||
|
||||
key.startsWith("os") ||
|
||||
key.startsWith("sun") ||
|
||||
key.startsWith("file") ||
|
||||
key.startsWith("line") ||
|
||||
key.startsWith("wrapper")) {
|
||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping property: " + key);
|
||||
} else if ((key.length() > 255) || (val.length() > 255)) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn(getPrefix() + "Not passing on property ["
|
||||
|
@ -39,6 +39,8 @@ public class Certificate extends DataStructureImpl {
|
||||
/** Signed with 40-byte Signature and (optional) 32-byte hash */
|
||||
public final static int CERTIFICATE_TYPE_SIGNED = 3;
|
||||
public final static int CERTIFICATE_LENGTH_SIGNED_WITH_HASH = Signature.SIGNATURE_BYTES + Hash.HASH_LENGTH;
|
||||
/** Contains multiple certs */
|
||||
public final static int CERTIFICATE_TYPE_MULTIPLE = 4;
|
||||
|
||||
public Certificate() {
|
||||
_type = 0;
|
||||
|
@ -164,7 +164,7 @@ public class PrivateKeyFile {
|
||||
}
|
||||
|
||||
|
||||
/** Also reads in the file to get the privKay and signingPrivKey,
|
||||
/** Also reads in the file to get the privKey and signingPrivKey,
|
||||
* which aren't available from I2PClient.
|
||||
*/
|
||||
public Destination createIfAbsent() throws I2PException, IOException, DataFormatException {
|
||||
|
@ -132,6 +132,7 @@ public class EepGet {
|
||||
int numRetries = 5;
|
||||
int markSize = 1024;
|
||||
int lineLen = 40;
|
||||
int inactivityTimeout = 60*1000;
|
||||
String etag = null;
|
||||
String saveAs = null;
|
||||
String url = null;
|
||||
@ -145,6 +146,9 @@ public class EepGet {
|
||||
} else if (args[i].equals("-n")) {
|
||||
numRetries = Integer.parseInt(args[i+1]);
|
||||
i++;
|
||||
} else if (args[i].equals("-t")) {
|
||||
inactivityTimeout = 1000 * Integer.parseInt(args[i+1]);
|
||||
i++;
|
||||
} else if (args[i].equals("-e")) {
|
||||
etag = "\"" + args[i+1] + "\"";
|
||||
i++;
|
||||
@ -174,7 +178,7 @@ public class EepGet {
|
||||
|
||||
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true, proxyHost, proxyPort, numRetries, saveAs, url, true, etag);
|
||||
get.addStatusListener(get.new CLIStatusListener(markSize, lineLen));
|
||||
get.fetch();
|
||||
get.fetch(45*1000, -1, inactivityTimeout);
|
||||
}
|
||||
|
||||
public static String suggestName(String url) {
|
||||
@ -208,7 +212,7 @@ public class EepGet {
|
||||
}
|
||||
|
||||
private static void usage() {
|
||||
System.err.println("EepGet [-p localhost:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] url");
|
||||
System.err.println("EepGet [-p localhost:4444] [-n #retries] [-o outputFile] [-m markSize lineLen] [-t timeout] url");
|
||||
}
|
||||
|
||||
public static interface StatusListener {
|
||||
@ -416,7 +420,7 @@ public class EepGet {
|
||||
SocketTimeout timeout = null;
|
||||
if (_fetchHeaderTimeout > 0)
|
||||
timeout = new SocketTimeout(_fetchHeaderTimeout);
|
||||
final SocketTimeout stimeout = timeout; // ugly
|
||||
final SocketTimeout stimeout = timeout; // ugly - why not use sotimeout?
|
||||
timeout.setTimeoutCommand(new Runnable() {
|
||||
public void run() {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
@ -457,7 +461,7 @@ public class EepGet {
|
||||
}
|
||||
|
||||
_currentAttempt++;
|
||||
if (_currentAttempt > _numRetries)
|
||||
if (_currentAttempt > _numRetries || !_keepFetching)
|
||||
break;
|
||||
try {
|
||||
long delay = _context.random().nextInt(60*1000);
|
||||
@ -629,8 +633,6 @@ public class EepGet {
|
||||
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("rc: " + responseCode + " for " + _actualURL);
|
||||
if(_transferFailed)
|
||||
_log.error("Already failed for " + _actualURL);
|
||||
boolean rcOk = false;
|
||||
switch (responseCode) {
|
||||
case 200: // full
|
||||
@ -661,16 +663,24 @@ public class EepGet {
|
||||
_keepFetching = false;
|
||||
_notModified = true;
|
||||
return;
|
||||
case 403: // bad req
|
||||
case 404: // not found
|
||||
case 409: // bad addr helper
|
||||
case 503: // no outproxy
|
||||
_keepFetching = false;
|
||||
_transferFailed = true;
|
||||
// maybe we should throw instead of return to get the return code back to the user
|
||||
return;
|
||||
case 416: // completed (or range out of reach)
|
||||
_bytesRemaining = 0;
|
||||
_keepFetching = false;
|
||||
return;
|
||||
case 504: // gateway timeout
|
||||
// throw out of doFetch() to fetch() and try again
|
||||
throw new IOException("HTTP Proxy timeout");
|
||||
default:
|
||||
rcOk = false;
|
||||
_keepFetching = false;
|
||||
_transferFailed = true;
|
||||
}
|
||||
|
||||
|
41
deploy.xml
Normal file
41
deploy.xml
Normal file
@ -0,0 +1,41 @@
|
||||
<? xml version="1.0" encoding="UTF-8" ?>
|
||||
<project basedir="." default="help" name="deploy">
|
||||
<property name="deploy.google.script" value="http://ant-googlecode.googlecode.com/files/ant-googlecode-0.0.1.jar" />
|
||||
<property name="dir" value="tmp-deploy" />
|
||||
|
||||
<property file="deploy.properties" />
|
||||
|
||||
<target name="help">
|
||||
<echo message="Useful targets: " />
|
||||
<echo message=" fetch: Fetch the files from the gatekeeper's site" />
|
||||
<echo message=" deploy: Deploy the files to the remote sites(currently google code only)" />
|
||||
</target>
|
||||
<target name="init">
|
||||
<mkdir dir="${dir}" />
|
||||
</target>
|
||||
<target name="fetch">
|
||||
<!-- TODO: write this(using eepget?) -->
|
||||
</target>
|
||||
<target name="pre-deploy" depends="init">
|
||||
<get src="${deploy.google.script}" dest="${dir}/ant-googlecode.jar" />
|
||||
<taskdef classname="net.bluecow.googlecode.ant.GoogleCodeUploadTask" classpath="path/to/ant-googlecode.jar" name="gcupload"/>
|
||||
</target>
|
||||
<target name="validate-deploy">
|
||||
<!-- check deploy.properties -->
|
||||
<fail "Version not set" unless="app.version" />
|
||||
<fail "Google: Username not set" unless="deploy.google.username" />
|
||||
<fail "Google: Password not set" unless="deploy.google.password" />
|
||||
|
||||
<!-- TODO: check for existence of files -->
|
||||
|
||||
<input message="Want to continue?" validargs="y,j,n" addproperty="deploy.continue" />
|
||||
<fail message="Aborted.">
|
||||
<condition>
|
||||
<equals arg1="${deploy.continue}" arg2="n" />
|
||||
</condition>
|
||||
</fail>
|
||||
</target>
|
||||
<target name="deploy" depends="pre-deploy,validate-deploy">
|
||||
<!-- TODO: add all files -->
|
||||
</target>
|
||||
</project>
|
31
history.txt
31
history.txt
@ -1,3 +1,34 @@
|
||||
* 2008-12-01 0.6.5 released
|
||||
|
||||
2008-12-01 Complication
|
||||
* Update versions, package release, fix typo in comment
|
||||
|
||||
2008-11-26 zzz
|
||||
* Fix Windows UrlLauncher
|
||||
|
||||
2008-11-21 zzz
|
||||
* Cache DNS and negative DNS for 5m (was 1m and forever)
|
||||
* Delay shitlist cleaner at startup
|
||||
* Strip wrapper properties from client config
|
||||
* Define multiple cert type
|
||||
* Prohibit negative maxSends in streaming
|
||||
* HTML fixup on configtunnels.jsp
|
||||
* Increase wrapper exit timeout from default 15s to 30s
|
||||
|
||||
2008-11-20 zzz
|
||||
* I2PTunnel: Handle missing fields in edit pages better
|
||||
* Move DummyNetworkDatabaseFacade to his own file
|
||||
to help the build dependencies
|
||||
* Drop old tcp transport and old tunnel build sources
|
||||
* EepGet:
|
||||
- Better handling of 504 gateway timeout
|
||||
(keep going up to limit of retry count rather
|
||||
than just one more partial fetch)
|
||||
- Add -t cmd line option for timeout
|
||||
- Better handling of 403, 409, 503 errors
|
||||
- Don't keep going after unknown return code
|
||||
- Don't delay before exiting after a failure
|
||||
|
||||
2008-11-15 zzz
|
||||
* Build files:
|
||||
- Don't die if depend not available
|
||||
|
@ -1,5 +1,5 @@
|
||||
<i2p.news date="$Date: 2008-10-05 12:00:00 $">
|
||||
<i2p.release version="0.6.4" date="2008/10/05" minVersion="0.6"
|
||||
<i2p.news date="$Date: 2008-12-01 00:00:00 $">
|
||||
<i2p.release version="0.6.5" date="2008/12/01" minVersion="0.6"
|
||||
/>
|
||||
<center><h2>Congratulations on getting I2P installed!</h2></center>
|
||||
<ul>
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
<info>
|
||||
<appname>i2p</appname>
|
||||
<appversion>0.6.4</appversion>
|
||||
<appversion>0.6.5</appversion>
|
||||
<authors>
|
||||
<author name="I2P" email="http://forum.i2p2.de/"/>
|
||||
</authors>
|
||||
|
@ -27,7 +27,7 @@ clientApp.3.startOnLoad=true
|
||||
# load a browser pointing at the web console whenever we start up
|
||||
clientApp.4.main=net.i2p.apps.systray.UrlLauncher
|
||||
clientApp.4.name=consoleBrowser
|
||||
clientApp.4.args=http://localhost:7657/
|
||||
clientApp.4.args=http://localhost:7657/index.jsp
|
||||
clientApp.4.delay=5
|
||||
clientApp.4.startOnLoad=true
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# install_i2p_service_unix
|
||||
# 2004 The I2P Project
|
||||
# http://www.i2p.net
|
||||
# http://www.i2p2.de/
|
||||
# This code is public domain.
|
||||
#
|
||||
# author: hypercubus
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# osid
|
||||
# 2004 The I2P Project
|
||||
# http://www.i2p.net
|
||||
# http://www.i2p2.de/
|
||||
# This code is public domain.
|
||||
#
|
||||
# author: hypercubus
|
||||
|
@ -2,7 +2,7 @@
|
||||
::
|
||||
:: postinstall.bat
|
||||
:: 2004 The I2P Project
|
||||
:: http://www.i2p.net
|
||||
:: http://www.i2p2.de/
|
||||
:: This code is public domain.
|
||||
::
|
||||
:: author: hypercubus
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# postinstall
|
||||
# 2004 The I2P Project
|
||||
# http://www.i2p.net
|
||||
# http://www.i2p2.de/
|
||||
# This code is public domain.
|
||||
#
|
||||
# author: hypercubus
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# uninstall_i2p_service_unix
|
||||
# 2004 The I2P Project
|
||||
# http://www.i2p.net
|
||||
# http://www.i2p2.de/
|
||||
# This code is public domain.
|
||||
#
|
||||
# author: hypercubus
|
||||
|
@ -60,6 +60,11 @@ wrapper.java.additional.1=-DloggerFilenameOverride=logs/log-router-@.txt
|
||||
wrapper.java.additional.2=-Dorg.mortbay.http.Version.paranoid=true
|
||||
wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false
|
||||
wrapper.java.additional.4=-Dorg.mortbay.xml.XmlParser.NotValidating=true
|
||||
# Uncomment this for better performance.
|
||||
# If it doesn't work, server mode is not available in your JVM.
|
||||
# This may not be required if your machine is already "server-class".
|
||||
# See http://java.sun.com/j2se/1.5.0/docs/guide/vm/server-class.html
|
||||
#wrapper.java.additional.5=-server
|
||||
|
||||
# Initial Java Heap Size (in MB)
|
||||
#wrapper.java.initmemory=4
|
||||
@ -134,6 +139,7 @@ wrapper.restart.delay=60
|
||||
|
||||
wrapper.ping.interval=600
|
||||
wrapper.ping.timeout=605
|
||||
wrapper.jvm_exit.timeout=30
|
||||
|
||||
# use the wrapper's internal timer thread. otherwise this would
|
||||
# force a restart of the router during daylight savings time as well
|
||||
|
51
news.xml
51
news.xml
@ -1,5 +1,5 @@
|
||||
<i2p.news date="$Date: 2008-10-05 12:00:00 $">
|
||||
<i2p.release version="0.6.4" date="2008/10/05" minVersion="0.6"
|
||||
<i2p.news date="$Date: 2008-12-01 00:00:00 $">
|
||||
<i2p.release version="0.6.5" date="2008/12/01" minVersion="0.6"
|
||||
anonurl="http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/i2p/i2pupdate.sud"
|
||||
publicurl="http://dev.i2p.net/i2p/i2pupdate.sud"
|
||||
anonannouncement="http://i2p/NF2RLVUxVulR3IqK0sGJR0dHQcGXAzwa6rEO4WAWYXOHw-DoZhKnlbf1nzHXwMEJoex5nFTyiNMqxJMWlY54cvU~UenZdkyQQeUSBZXyuSweflUXFqKN-y8xIoK2w9Ylq1k8IcrAFDsITyOzjUKoOPfVq34rKNDo7fYyis4kT5bAHy~2N1EVMs34pi2RFabATIOBk38Qhab57Umpa6yEoE~rbyR~suDRvD7gjBvBiIKFqhFueXsR2uSrPB-yzwAGofTXuklofK3DdKspciclTVzqbDjsk5UXfu2nTrC1agkhLyqlOfjhyqC~t1IXm-Vs2o7911k7KKLGjB4lmH508YJ7G9fLAUyjuB-wwwhejoWqvg7oWvqo4oIok8LG6ECR71C3dzCvIjY2QcrhoaazA9G4zcGMm6NKND-H4XY6tUWhpB~5GefB3YczOqMbHq4wi0O9MzBFrOJEOs3X4hwboKWANf7DT5PZKJZ5KorQPsYRSq0E3wSOsFCSsdVCKUGsAAAA/pipermail/i2p/2005-September/000878.html"
|
||||
@ -11,29 +11,32 @@
|
||||
publiclogs="http://www.i2p.net/meeting141" />
|
||||
<p>
|
||||
•
|
||||
2008-10-05: <b>0.6.4 <a href="http://www.i2p2.i2p/release-0.6.4.html">Released</a></b>
|
||||
2008-12-01: <b>0.6.5 <a href="http://www.i2p2.i2p/release-0.6.5.html">Released</a></b>
|
||||
</p><p>
|
||||
The 0.6.4 release adds performance and stability improvements.
|
||||
Floodfill peers which are already connected, are preferred
|
||||
for RouterInfo stores, and references to new floodfill peers
|
||||
obtained from ordinary peers in case of shortage.
|
||||
The 0.6.5 release introduces new components,
|
||||
drops some old ones (like the old TCP transport)
|
||||
and has been optimized to perform better.
|
||||
</p><p>
|
||||
The BOB (Basic Open Bridge) protocol is introduced,
|
||||
for use by client applications which cannot import
|
||||
I2CP libraries directly. This deprecates the old
|
||||
SAM protocol which was previously used in such cases.
|
||||
For now however, BOB is not started automatically yet
|
||||
on new installations, and SAM remains active on old installations.
|
||||
</p><p>
|
||||
Improved code should be better at preventing congestion
|
||||
by probabalistically dropping participating traffic,
|
||||
and likewise behave better when congestion occurs.
|
||||
The floodfill NetDB should operate more reliably,
|
||||
the streaming library should choose better message sizes,
|
||||
offer a socket timeout function, and work proceeds
|
||||
on the "hidden" mode of operation for I2P routers.
|
||||
</p><p>
|
||||
From this release onward, I2P requires Java 1.5 or higher.
|
||||
If you are uncertain about your Java version, you can verify
|
||||
by opening a terminal window or command prompt,
|
||||
and entering the command "java -version".
|
||||
If you have an older Java installed, please update it first!</p>
|
||||
|
||||
Preference for already connected peers is generally increased
|
||||
by considering them active. Timeouts during tunnel joins
|
||||
are now counted against peer profiles.
|
||||
|
||||
Improvements to the shutdown handler, tunnel builder,
|
||||
router throttling, collection of tunnel pool statistics,
|
||||
as well as router console and I2PSnark improvements
|
||||
(and texts to explain reachability issues) are also included.
|
||||
</p>
|
||||
|
||||
<!--
|
||||
•
|
||||
2007-04-10:
|
||||
<a href="http://dev.i2p/pipermail/i2p/2007-April/001343.html">status notes</a>
|
||||
and
|
||||
<a href="http://www.i2p/meeting206">meeting log</a>
|
||||
<br />
|
||||
-->
|
||||
</i2p.news>
|
||||
|
@ -81,12 +81,15 @@ public class Router {
|
||||
public final static String PROP_KEYS_FILENAME = "router.keys.location";
|
||||
public final static String PROP_KEYS_FILENAME_DEFAULT = "router.keys";
|
||||
public final static String PROP_SHUTDOWN_IN_PROGRESS = "__shutdownInProgress";
|
||||
public final static String DNS_CACHE_TIME = "" + (5*60);
|
||||
|
||||
static {
|
||||
// grumble about sun's java caching DNS entries *forever* by default
|
||||
// so lets just keep 'em for a minute
|
||||
System.setProperty("sun.net.inetaddr.ttl", "60");
|
||||
System.setProperty("networkaddress.cache.ttl", "60");
|
||||
// so lets just keep 'em for a short time
|
||||
System.setProperty("sun.net.inetaddr.ttl", DNS_CACHE_TIME);
|
||||
System.setProperty("sun.net.inetaddr.negative.ttl", DNS_CACHE_TIME);
|
||||
System.setProperty("networkaddress.cache.ttl", DNS_CACHE_TIME);
|
||||
System.setProperty("networkaddress.cache.negative.ttl", DNS_CACHE_TIME);
|
||||
// until we handle restricted routes and/or all peers support v6, try v4 first
|
||||
System.setProperty("java.net.preferIPv4Stack", "true");
|
||||
System.setProperty("http.agent", "I2P");
|
||||
|
@ -16,8 +16,8 @@ import net.i2p.CoreVersion;
|
||||
*/
|
||||
public class RouterVersion {
|
||||
public final static String ID = "$Revision: 1.548 $ $Date: 2008-06-07 23:00:00 $";
|
||||
public final static String VERSION = "0.6.4";
|
||||
public final static long BUILD = 11;
|
||||
public final static String VERSION = "0.6.5";
|
||||
public final static long BUILD = 0;
|
||||
public static void main(String args[]) {
|
||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||
System.out.println("Router ID: " + RouterVersion.ID);
|
||||
|
@ -49,6 +49,7 @@ public class Shitlist {
|
||||
public final static long SHITLIST_DURATION_MAX = 60*60*1000;
|
||||
public final static long SHITLIST_DURATION_PARTIAL = 20*60*1000;
|
||||
public final static long SHITLIST_DURATION_FOREVER = 181l*24*60*60*1000; // will get rounded down to 180d on console
|
||||
public final static long SHITLIST_CLEANER_START_DELAY = SHITLIST_DURATION_PARTIAL;
|
||||
|
||||
public Shitlist(RouterContext context) {
|
||||
_context = context;
|
||||
@ -62,6 +63,7 @@ public class Shitlist {
|
||||
public Cleanup(RouterContext ctx) {
|
||||
super(ctx);
|
||||
_toUnshitlist = new ArrayList(4);
|
||||
getTiming().setStartAfter(_context.clock().now() + SHITLIST_CLEANER_START_DELAY);
|
||||
}
|
||||
public String getName() { return "Cleanup shitlist"; }
|
||||
public void runJob() {
|
||||
|
@ -499,7 +499,7 @@ class BuildHandler {
|
||||
}
|
||||
|
||||
if (response == 0 && (isInGW || isOutEnd) &&
|
||||
Boolean.valueOf(_context.getProperty(PROP_REJECT_NONPARTICIPANT))) {
|
||||
Boolean.valueOf(_context.getProperty(PROP_REJECT_NONPARTICIPANT)).booleanValue()) {
|
||||
response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user