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 -->
|
<!-- You may freely edit this file. See commented blocks below for -->
|
||||||
<!-- some examples of how to customize the build. -->
|
<!-- some examples of how to customize the build. -->
|
||||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
|
<!-- (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=".">
|
<project name="BOB" default="default" basedir=".">
|
||||||
<description>Builds, tests, and runs the project BOB.</description>
|
<description>Builds, tests, and runs the project BOB.</description>
|
||||||
<import file="nbproject/build-impl.xml"/>
|
<import file="nbproject/build-impl.xml"/>
|
||||||
|
@ -218,13 +218,13 @@ is divided into following sections:
|
|||||||
</sequential>
|
</sequential>
|
||||||
</macrodef>
|
</macrodef>
|
||||||
</target>
|
</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">
|
<macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||||
<attribute default="${main.class}" name="name"/>
|
<attribute default="${main.class}" name="name"/>
|
||||||
<attribute default="${debug.classpath}" name="classpath"/>
|
<attribute default="${debug.classpath}" name="classpath"/>
|
||||||
<attribute default="" name="stopclassname"/>
|
<attribute default="" name="stopclassname"/>
|
||||||
<sequential>
|
<sequential>
|
||||||
<nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="dt_socket">
|
<nbjpdastart addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}" transport="${debug-transport}">
|
||||||
<classpath>
|
<classpath>
|
||||||
<path path="@{classpath}"/>
|
<path path="@{classpath}"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
@ -255,6 +255,12 @@ is divided into following sections:
|
|||||||
<condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
|
<condition else="-Xdebug" property="debug-args-line" value="-Xdebug -Xnoagent -Djava.compiler=none">
|
||||||
<istrue value="${have-jdk-older-than-1.4}"/>
|
<istrue value="${have-jdk-older-than-1.4}"/>
|
||||||
</condition>
|
</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>
|
||||||
<target depends="-init-debug-args" name="-init-macrodef-debug">
|
<target depends="-init-debug-args" name="-init-macrodef-debug">
|
||||||
<macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
<macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||||
@ -264,7 +270,7 @@ is divided into following sections:
|
|||||||
<sequential>
|
<sequential>
|
||||||
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
<java classname="@{classname}" dir="${work.dir}" fork="true">
|
||||||
<jvmarg line="${debug-args-line}"/>
|
<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}"/>
|
<jvmarg line="${run.jvmargs}"/>
|
||||||
<classpath>
|
<classpath>
|
||||||
<path path="@{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" 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">
|
<target depends="init,deps-jar" name="-pre-pre-compile">
|
||||||
<mkdir dir="${build.classes.dir}"/>
|
<mkdir dir="${build.classes.dir}"/>
|
||||||
</target>
|
</target>
|
||||||
@ -331,7 +344,7 @@ is divided into following sections:
|
|||||||
<!-- Empty placeholder for easier customization. -->
|
<!-- Empty placeholder for easier customization. -->
|
||||||
<!-- You can override this target in the ../build.xml file. -->
|
<!-- You can override this target in the ../build.xml file. -->
|
||||||
</target>
|
</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">
|
<target name="-pre-compile-single">
|
||||||
<!-- Empty placeholder for easier customization. -->
|
<!-- Empty placeholder for easier customization. -->
|
||||||
<!-- You can override this target in the ../build.xml file. -->
|
<!-- You can override this target in the ../build.xml file. -->
|
||||||
@ -345,7 +358,7 @@ is divided into following sections:
|
|||||||
<!-- Empty placeholder for easier customization. -->
|
<!-- Empty placeholder for easier customization. -->
|
||||||
<!-- You can override this target in the ../build.xml file. -->
|
<!-- You can override this target in the ../build.xml file. -->
|
||||||
</target>
|
</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
|
JAR BUILDING SECTION
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
build.xml.data.CRC32=209349b6
|
build.xml.data.CRC32=209349b6
|
||||||
build.xml.script.CRC32=05a1ffd9
|
build.xml.script.CRC32=403e69e6
|
||||||
build.xml.stylesheet.CRC32=be360661
|
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.
|
# 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.
|
# 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.data.CRC32=209349b6
|
||||||
nbproject/build-impl.xml.script.CRC32=eeeca375
|
nbproject/build-impl.xml.script.CRC32=75fac64c
|
||||||
nbproject/build-impl.xml.stylesheet.CRC32=487672f9
|
nbproject/build-impl.xml.stylesheet.CRC32=e55b27f5
|
||||||
|
@ -2,5 +2,5 @@ do.depend=false
|
|||||||
do.jar=true
|
do.jar=true
|
||||||
javac.debug=true
|
javac.debug=true
|
||||||
javadoc.preview=true
|
javadoc.preview=true
|
||||||
jaxws.endorsed.dir=/usr/local/netbeans-6.1/java2/modules/ext/jaxws21/api
|
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.1/build.properties
|
user.properties.file=/root/.netbeans/6.5/build.properties
|
||||||
|
@ -46,7 +46,7 @@ public class DoCMDS implements Runnable {
|
|||||||
|
|
||||||
// FIX ME
|
// FIX ME
|
||||||
// I need a better way to do versioning, but this will do for now.
|
// 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;
|
public static final String BOBversion = BMAJ + "." + BMIN + "." + BREV + BEXT;
|
||||||
private Socket server;
|
private Socket server;
|
||||||
private Properties props;
|
private Properties props;
|
||||||
@ -92,6 +92,7 @@ public class DoCMDS implements Runnable {
|
|||||||
private static final String C_start = "start";
|
private static final String C_start = "start";
|
||||||
private static final String C_status = "status";
|
private static final String C_status = "status";
|
||||||
private static final String C_stop = "stop";
|
private static final String C_stop = "stop";
|
||||||
|
private static final String C_verify = "verify";
|
||||||
|
|
||||||
/* all the coomands available, plus description */
|
/* all the coomands available, plus description */
|
||||||
private static final String C_ALL[][] = {
|
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_start, C_start + " * Start the current nickname tunnel."},
|
||||||
{C_status, C_status + " nickname * Display status of a nicknamed tunnel."},
|
{C_status, C_status + " nickname * Display status of a nicknamed tunnel."},
|
||||||
{C_stop, C_stop + " * Stops the current 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...
|
{"", "COMMANDS: " + // this is ugly, but...
|
||||||
C_help + " " +
|
C_help + " " +
|
||||||
C_clear + " " +
|
C_clear + " " +
|
||||||
@ -135,7 +137,8 @@ public class DoCMDS implements Runnable {
|
|||||||
C_show + " " +
|
C_show + " " +
|
||||||
C_start + " " +
|
C_start + " " +
|
||||||
C_status + " " +
|
C_status + " " +
|
||||||
C_stop
|
C_stop + " " +
|
||||||
|
C_verify
|
||||||
},
|
},
|
||||||
{" ", " "} // end of list
|
{" ", " "} // end of list
|
||||||
};
|
};
|
||||||
@ -346,12 +349,12 @@ public class DoCMDS implements Runnable {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private boolean is64ok(String data) {
|
private boolean is64ok(String data) {
|
||||||
String dest = new String(data);
|
try {
|
||||||
if(dest.replaceAll("[a-zA-Z0-9~-]", "").length() == 0) {
|
Destination x = new Destination(data);
|
||||||
return true;
|
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)) {
|
} else if(Command.equals(C_setkeys)) {
|
||||||
// Set the NamedDB to a privatekey in BASE64 format
|
// Set the NamedDB to a privatekey in BASE64 format
|
||||||
if(ns) {
|
if(ns) {
|
||||||
|
@ -90,14 +90,14 @@ public class ConfigTunnelsHelper {
|
|||||||
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
||||||
if (now > MAX_LENGTH)
|
if (now > MAX_LENGTH)
|
||||||
renderOptions(buf, now, now, now, "", "hop");
|
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");
|
buf.append("<td><select name=\"").append(index).append(".depthOutbound\">\n");
|
||||||
now = out.getLength();
|
now = out.getLength();
|
||||||
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
renderOptions(buf, 0, MAX_LENGTH, now, "", "hop");
|
||||||
if (now > MAX_LENGTH)
|
if (now > MAX_LENGTH)
|
||||||
renderOptions(buf, now, now, now, "", "hop");
|
renderOptions(buf, now, now, now, "", "hop");
|
||||||
buf.append("</td>\n");
|
buf.append("</select></td>\n");
|
||||||
buf.append("</tr>\n");
|
buf.append("</tr>\n");
|
||||||
|
|
||||||
// tunnel depth variance
|
// tunnel depth variance
|
||||||
@ -111,7 +111,7 @@ public class ConfigTunnelsHelper {
|
|||||||
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
||||||
else if (now < MIN_NEG_VARIANCE)
|
else if (now < MIN_NEG_VARIANCE)
|
||||||
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
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");
|
buf.append("<td><select name=\"").append(index).append(".varianceOutbound\">\n");
|
||||||
now = out.getLengthVariance();
|
now = out.getLengthVariance();
|
||||||
@ -122,7 +122,7 @@ public class ConfigTunnelsHelper {
|
|||||||
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
renderOptions(buf, now, now, now, "+ 0-", "hop");
|
||||||
else if (now < MIN_NEG_VARIANCE)
|
else if (now < MIN_NEG_VARIANCE)
|
||||||
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
renderOptions(buf, now, now, now, "+/- 0", "hop");
|
||||||
buf.append("</td>\n");
|
buf.append("</select></td>\n");
|
||||||
|
|
||||||
// tunnel quantity
|
// tunnel quantity
|
||||||
buf.append("<tr><td>Quantity</td>\n");
|
buf.append("<tr><td>Quantity</td>\n");
|
||||||
@ -131,14 +131,14 @@ public class ConfigTunnelsHelper {
|
|||||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
||||||
if (now > MAX_QUANTITY)
|
if (now > MAX_QUANTITY)
|
||||||
renderOptions(buf, now, now, now, "", "tunnel");
|
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");
|
buf.append("<td><select name=\"").append(index).append(".quantityOutbound\">\n");
|
||||||
now = out.getQuantity();
|
now = out.getQuantity();
|
||||||
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
renderOptions(buf, 1, MAX_QUANTITY, now, "", "tunnel");
|
||||||
if (now > MAX_QUANTITY)
|
if (now > MAX_QUANTITY)
|
||||||
renderOptions(buf, now, now, now, "", "tunnel");
|
renderOptions(buf, now, now, now, "", "tunnel");
|
||||||
buf.append("</td>\n");
|
buf.append("</select></td>\n");
|
||||||
buf.append("</tr>\n");
|
buf.append("</tr>\n");
|
||||||
|
|
||||||
// tunnel backup quantity
|
// tunnel backup quantity
|
||||||
@ -148,14 +148,14 @@ public class ConfigTunnelsHelper {
|
|||||||
renderOptions(buf, 0, MAX_QUANTITY, now, "", "tunnel");
|
renderOptions(buf, 0, MAX_QUANTITY, now, "", "tunnel");
|
||||||
if (now > MAX_QUANTITY)
|
if (now > MAX_QUANTITY)
|
||||||
renderOptions(buf, now, now, now, "", "tunnel");
|
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");
|
buf.append("<td><select name=\"").append(index).append(".backupOutbound\">\n");
|
||||||
now = in.getBackupQuantity();
|
now = in.getBackupQuantity();
|
||||||
renderOptions(buf, 0, MAX_QUANTITY, now, "", "tunnel");
|
renderOptions(buf, 0, MAX_QUANTITY, now, "", "tunnel");
|
||||||
if (now > MAX_QUANTITY)
|
if (now > MAX_QUANTITY)
|
||||||
renderOptions(buf, now, now, now, "", "tunnel");
|
renderOptions(buf, now, now, now, "", "tunnel");
|
||||||
buf.append("</td>\n");
|
buf.append("</select></td>\n");
|
||||||
buf.append("</tr>\n");
|
buf.append("</tr>\n");
|
||||||
|
|
||||||
// custom options
|
// custom options
|
||||||
|
@ -34,7 +34,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
|||||||
public static final String PROP_UPDATE_URL = "router.updateURL";
|
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://dev.i2p.net/i2p/i2pupdate.sud";
|
||||||
public static final String DEFAULT_UPDATE_URL =
|
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://stats.i2p/i2p/i2pupdate.sud\r\n" +
|
||||||
"http://complication.i2p/i2p/i2pupdate.sud\r\n" +
|
"http://complication.i2p/i2p/i2pupdate.sud\r\n" +
|
||||||
"http://www.i2p2.i2p/_static/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.
|
* This tells the flusher in MessageOutputStream whether to flush.
|
||||||
* It won't flush if this returns true.
|
* 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
|
* 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 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.
|
* 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
|
* @return !flush
|
||||||
*/
|
*/
|
||||||
|
@ -56,7 +56,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
|||||||
private static final int TREND_COUNT = 3;
|
private static final int TREND_COUNT = 3;
|
||||||
static final int INITIAL_WINDOW_SIZE = 12;
|
static final int INITIAL_WINDOW_SIZE = 12;
|
||||||
static final int DEFAULT_MAX_SENDS = 8;
|
static final int DEFAULT_MAX_SENDS = 8;
|
||||||
|
public static final int DEFAULT_INITIAL_RTT = 10*1000;
|
||||||
static final int MIN_WINDOW_SIZE = 1;
|
static final int MIN_WINDOW_SIZE = 1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -208,7 +208,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
|||||||
setConnectDelay(getInt(opts, PROP_CONNECT_DELAY, -1));
|
setConnectDelay(getInt(opts, PROP_CONNECT_DELAY, -1));
|
||||||
setProfile(getInt(opts, PROP_PROFILE, PROFILE_BULK));
|
setProfile(getInt(opts, PROP_PROFILE, PROFILE_BULK));
|
||||||
setMaxMessageSize(getInt(opts, PROP_MAX_MESSAGE_SIZE, DEFAULT_MAX_MESSAGE_SIZE));
|
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));
|
setReceiveWindow(getInt(opts, PROP_INITIAL_RECEIVE_WINDOW, 1));
|
||||||
setResendDelay(getInt(opts, PROP_INITIAL_RESEND_DELAY, 1000));
|
setResendDelay(getInt(opts, PROP_INITIAL_RESEND_DELAY, 1000));
|
||||||
setSendAckDelay(getInt(opts, PROP_INITIAL_ACK_DELAY, 2000));
|
setSendAckDelay(getInt(opts, PROP_INITIAL_ACK_DELAY, 2000));
|
||||||
@ -237,7 +237,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
|||||||
if (opts.containsKey(PROP_MAX_MESSAGE_SIZE))
|
if (opts.containsKey(PROP_MAX_MESSAGE_SIZE))
|
||||||
setMaxMessageSize(getInt(opts, PROP_MAX_MESSAGE_SIZE, Packet.MAX_PAYLOAD_SIZE));
|
setMaxMessageSize(getInt(opts, PROP_MAX_MESSAGE_SIZE, Packet.MAX_PAYLOAD_SIZE));
|
||||||
if (opts.containsKey(PROP_INITIAL_RTT))
|
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))
|
if (opts.containsKey(PROP_INITIAL_RECEIVE_WINDOW))
|
||||||
setReceiveWindow(getInt(opts, PROP_INITIAL_RECEIVE_WINDOW, 1));
|
setReceiveWindow(getInt(opts, PROP_INITIAL_RECEIVE_WINDOW, 1));
|
||||||
if (opts.containsKey(PROP_INITIAL_RESEND_DELAY))
|
if (opts.containsKey(PROP_INITIAL_RESEND_DELAY))
|
||||||
@ -306,6 +306,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** after how many consecutive messages should we ack?
|
/** after how many consecutive messages should we ack?
|
||||||
|
* This doesn't appear to be used.
|
||||||
* @return receive window size.
|
* @return receive window size.
|
||||||
*/
|
*/
|
||||||
public int getReceiveWindow() { return _receiveWindow; }
|
public int getReceiveWindow() { return _receiveWindow; }
|
||||||
@ -420,7 +421,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl {
|
|||||||
* @return Maximum retrys before failing a sent message.
|
* @return Maximum retrys before failing a sent message.
|
||||||
*/
|
*/
|
||||||
public int getMaxResends() { return _maxResends; }
|
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"?
|
* 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_INCLUDED}: {@link net.i2p.data.Signature}</li>
|
||||||
* <li>{@link #FLAG_SIGNATURE_REQUESTED}: no option data</li>
|
* <li>{@link #FLAG_SIGNATURE_REQUESTED}: no option data</li>
|
||||||
* <li>{@link #FLAG_FROM_INCLUDED}: {@link net.i2p.data.Destination}</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_MAX_PACKET_SIZE_INCLUDED}: 2 byte integer</li>
|
||||||
* <li>{@link #FLAG_PROFILE_INTERACTIVE}: no option data</li>
|
* <li>{@link #FLAG_PROFILE_INTERACTIVE}: no option data</li>
|
||||||
* </ol>
|
* </ol>
|
||||||
|
@ -74,7 +74,11 @@ public class UrlLauncher {
|
|||||||
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("browser.reg"), "UTF-16"));
|
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("browser.reg"), "UTF-16"));
|
||||||
for (String line; (line = bufferedReader.readLine()) != null; ) {
|
for (String line; (line = bufferedReader.readLine()) != null; ) {
|
||||||
if (line.startsWith("@=")) {
|
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 {
|
try {
|
||||||
|
@ -332,6 +332,8 @@
|
|||||||
<copy file="build/BOB.jar" todir="pkg-temp/lib/" />
|
<copy file="build/BOB.jar" todir="pkg-temp/lib/" />
|
||||||
<copy file="build/sam.jar" todir="pkg-temp/lib/" />
|
<copy file="build/sam.jar" todir="pkg-temp/lib/" />
|
||||||
<copy file="build/i2psnark.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/susimail.war" todir="pkg-temp/webapps/" />
|
||||||
<copy file="build/susidns.war" todir="pkg-temp/webapps/" />
|
<copy file="build/susidns.war" todir="pkg-temp/webapps/" />
|
||||||
<copy file="build/i2psnark.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 class CoreVersion {
|
||||||
public final static String ID = "$Revision: 1.72 $ $Date: 2008-08-24 12:00:00 $";
|
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[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Core version: " + VERSION);
|
System.out.println("I2P Core version: " + VERSION);
|
||||||
|
@ -91,7 +91,8 @@ public class I2PAppContext {
|
|||||||
private volatile boolean _routingKeyGeneratorInitialized;
|
private volatile boolean _routingKeyGeneratorInitialized;
|
||||||
private volatile boolean _randomInitialized;
|
private volatile boolean _randomInitialized;
|
||||||
private volatile boolean _keyGeneratorInitialized;
|
private volatile boolean _keyGeneratorInitialized;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pull the default context, creating a new one if necessary, else using
|
* Pull the default context, creating a new one if necessary, else using
|
||||||
* the first one created.
|
* the first one created.
|
||||||
@ -105,7 +106,7 @@ public class I2PAppContext {
|
|||||||
}
|
}
|
||||||
return _globalAppContext;
|
return _globalAppContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lets root a brand new context
|
* Lets root a brand new context
|
||||||
*
|
*
|
||||||
@ -113,6 +114,7 @@ public class I2PAppContext {
|
|||||||
public I2PAppContext() {
|
public I2PAppContext() {
|
||||||
this(true, null);
|
this(true, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lets root a brand new context
|
* Lets root a brand new context
|
||||||
*
|
*
|
||||||
@ -120,6 +122,7 @@ public class I2PAppContext {
|
|||||||
public I2PAppContext(Properties envProps) {
|
public I2PAppContext(Properties envProps) {
|
||||||
this(true, envProps);
|
this(true, envProps);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param doInit should this context be used as the global one (if necessary)?
|
* @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);
|
return System.getProperty(propName, defaultValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Access the configuration attributes of this context, listing the properties
|
* Access the configuration attributes of this context, listing the properties
|
||||||
* provided during the context construction, as well as the ones included in
|
* provided during the context construction, as well as the ones included in
|
||||||
@ -194,9 +198,11 @@ public class I2PAppContext {
|
|||||||
* over time.
|
* over time.
|
||||||
*/
|
*/
|
||||||
public StatManager statManager() {
|
public StatManager statManager() {
|
||||||
if (!_statManagerInitialized) initializeStatManager();
|
if (!_statManagerInitialized)
|
||||||
|
initializeStatManager();
|
||||||
return _statManager;
|
return _statManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeStatManager() {
|
private void initializeStatManager() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_statManager == null)
|
if (_statManager == null)
|
||||||
@ -215,9 +221,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public SessionKeyManager sessionKeyManager() {
|
public SessionKeyManager sessionKeyManager() {
|
||||||
if (!_sessionKeyManagerInitialized) initializeSessionKeyManager();
|
if (!_sessionKeyManagerInitialized)
|
||||||
|
initializeSessionKeyManager();
|
||||||
return _sessionKeyManager;
|
return _sessionKeyManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeSessionKeyManager() {
|
private void initializeSessionKeyManager() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_sessionKeyManager == null)
|
if (_sessionKeyManager == null)
|
||||||
@ -232,9 +240,11 @@ public class I2PAppContext {
|
|||||||
* specified to customize the naming service exposed.
|
* specified to customize the naming service exposed.
|
||||||
*/
|
*/
|
||||||
public NamingService namingService() {
|
public NamingService namingService() {
|
||||||
if (!_namingServiceInitialized) initializeNamingService();
|
if (!_namingServiceInitialized)
|
||||||
|
initializeNamingService();
|
||||||
return _namingService;
|
return _namingService;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeNamingService() {
|
private void initializeNamingService() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_namingService == null) {
|
if (_namingService == null) {
|
||||||
@ -245,9 +255,11 @@ public class I2PAppContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public PetNameDB petnameDb() {
|
public PetNameDB petnameDb() {
|
||||||
if (!_petnameDbInitialized) initializePetnameDb();
|
if (!_petnameDbInitialized)
|
||||||
|
initializePetnameDb();
|
||||||
return _petnameDb;
|
return _petnameDb;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializePetnameDb() {
|
private void initializePetnameDb() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_petnameDb == null) {
|
if (_petnameDb == null) {
|
||||||
@ -266,9 +278,11 @@ public class I2PAppContext {
|
|||||||
* it ;)
|
* it ;)
|
||||||
*/
|
*/
|
||||||
public ElGamalEngine elGamalEngine() {
|
public ElGamalEngine elGamalEngine() {
|
||||||
if (!_elGamalEngineInitialized) initializeElGamalEngine();
|
if (!_elGamalEngineInitialized)
|
||||||
|
initializeElGamalEngine();
|
||||||
return _elGamalEngine;
|
return _elGamalEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeElGamalEngine() {
|
private void initializeElGamalEngine() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_elGamalEngine == null) {
|
if (_elGamalEngine == null) {
|
||||||
@ -289,9 +303,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public ElGamalAESEngine elGamalAESEngine() {
|
public ElGamalAESEngine elGamalAESEngine() {
|
||||||
if (!_elGamalAESEngineInitialized) initializeElGamalAESEngine();
|
if (!_elGamalAESEngineInitialized)
|
||||||
|
initializeElGamalAESEngine();
|
||||||
return _elGamalAESEngine;
|
return _elGamalAESEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeElGamalAESEngine() {
|
private void initializeElGamalAESEngine() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_elGamalAESEngine == null)
|
if (_elGamalAESEngine == null)
|
||||||
@ -307,9 +323,11 @@ public class I2PAppContext {
|
|||||||
* disable it.
|
* disable it.
|
||||||
*/
|
*/
|
||||||
public AESEngine aes() {
|
public AESEngine aes() {
|
||||||
if (!_AESEngineInitialized) initializeAESEngine();
|
if (!_AESEngineInitialized)
|
||||||
|
initializeAESEngine();
|
||||||
return _AESEngine;
|
return _AESEngine;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeAESEngine() {
|
private void initializeAESEngine() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_AESEngine == null) {
|
if (_AESEngine == null) {
|
||||||
@ -329,9 +347,11 @@ public class I2PAppContext {
|
|||||||
* their own log levels, output locations, and rotation configuration.
|
* their own log levels, output locations, and rotation configuration.
|
||||||
*/
|
*/
|
||||||
public LogManager logManager() {
|
public LogManager logManager() {
|
||||||
if (!_logManagerInitialized) initializeLogManager();
|
if (!_logManagerInitialized)
|
||||||
|
initializeLogManager();
|
||||||
return _logManager;
|
return _logManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeLogManager() {
|
private void initializeLogManager() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_logManager == null)
|
if (_logManager == null)
|
||||||
@ -339,15 +359,18 @@ public class I2PAppContext {
|
|||||||
_logManagerInitialized = true;
|
_logManagerInitialized = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* There is absolutely no good reason to make this context specific,
|
* There is absolutely no good reason to make this context specific,
|
||||||
* other than for consistency, and perhaps later we'll want to
|
* other than for consistency, and perhaps later we'll want to
|
||||||
* include some stats.
|
* include some stats.
|
||||||
*/
|
*/
|
||||||
public HMACGenerator hmac() {
|
public HMACGenerator hmac() {
|
||||||
if (!_hmacInitialized) initializeHMAC();
|
if (!_hmacInitialized)
|
||||||
|
initializeHMAC();
|
||||||
return _hmac;
|
return _hmac;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeHMAC() {
|
private void initializeHMAC() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_hmac == null) {
|
if (_hmac == null) {
|
||||||
@ -358,9 +381,11 @@ public class I2PAppContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public HMAC256Generator hmac256() {
|
public HMAC256Generator hmac256() {
|
||||||
if (!_hmac256Initialized) initializeHMAC256();
|
if (!_hmac256Initialized)
|
||||||
|
initializeHMAC256();
|
||||||
return _hmac256;
|
return _hmac256;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeHMAC256() {
|
private void initializeHMAC256() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_hmac256 == null) {
|
if (_hmac256 == null) {
|
||||||
@ -375,9 +400,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public SHA256Generator sha() {
|
public SHA256Generator sha() {
|
||||||
if (!_shaInitialized) initializeSHA();
|
if (!_shaInitialized)
|
||||||
|
initializeSHA();
|
||||||
return _sha;
|
return _sha;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeSHA() {
|
private void initializeSHA() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_sha == null)
|
if (_sha == null)
|
||||||
@ -391,9 +418,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public DSAEngine dsa() {
|
public DSAEngine dsa() {
|
||||||
if (!_dsaInitialized) initializeDSA();
|
if (!_dsaInitialized)
|
||||||
|
initializeDSA();
|
||||||
return _dsa;
|
return _dsa;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeDSA() {
|
private void initializeDSA() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_dsa == null) {
|
if (_dsa == null) {
|
||||||
@ -411,9 +440,11 @@ public class I2PAppContext {
|
|||||||
* the appContext, see the DSA, HMAC, and SHA comments above.
|
* the appContext, see the DSA, HMAC, and SHA comments above.
|
||||||
*/
|
*/
|
||||||
public KeyGenerator keyGenerator() {
|
public KeyGenerator keyGenerator() {
|
||||||
if (!_keyGeneratorInitialized) initializeKeyGenerator();
|
if (!_keyGeneratorInitialized)
|
||||||
|
initializeKeyGenerator();
|
||||||
return _keyGenerator;
|
return _keyGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeKeyGenerator() {
|
private void initializeKeyGenerator() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_keyGenerator == null)
|
if (_keyGenerator == null)
|
||||||
@ -428,9 +459,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public Clock clock() { // overridden in RouterContext
|
public Clock clock() { // overridden in RouterContext
|
||||||
if (!_clockInitialized) initializeClock();
|
if (!_clockInitialized)
|
||||||
|
initializeClock();
|
||||||
return _clock;
|
return _clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initializeClock() { // overridden in RouterContext
|
protected void initializeClock() { // overridden in RouterContext
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_clock == null)
|
if (_clock == null)
|
||||||
@ -447,9 +480,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public RoutingKeyGenerator routingKeyGenerator() {
|
public RoutingKeyGenerator routingKeyGenerator() {
|
||||||
if (!_routingKeyGeneratorInitialized) initializeRoutingKeyGenerator();
|
if (!_routingKeyGeneratorInitialized)
|
||||||
|
initializeRoutingKeyGenerator();
|
||||||
return _routingKeyGenerator;
|
return _routingKeyGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeRoutingKeyGenerator() {
|
private void initializeRoutingKeyGenerator() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_routingKeyGenerator == null)
|
if (_routingKeyGenerator == null)
|
||||||
@ -463,9 +498,11 @@ public class I2PAppContext {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public RandomSource random() {
|
public RandomSource random() {
|
||||||
if (!_randomInitialized) initializeRandom();
|
if (!_randomInitialized)
|
||||||
|
initializeRandom();
|
||||||
return _random;
|
return _random;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeRandom() {
|
private void initializeRandom() {
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
if (_random == null) {
|
if (_random == null) {
|
||||||
|
@ -41,24 +41,34 @@ import net.i2p.util.Log;
|
|||||||
public class ATalk implements I2PSessionListener, Runnable {
|
public class ATalk implements I2PSessionListener, Runnable {
|
||||||
/** logging hook - status messages are piped to this */
|
/** logging hook - status messages are piped to this */
|
||||||
private final static Log _log = new Log(ATalk.class);
|
private final static Log _log = new Log(ATalk.class);
|
||||||
|
|
||||||
/** platform independent newline */
|
/** platform independent newline */
|
||||||
private final static String NL = System.getProperty("line.separator");
|
private final static String NL = System.getProperty("line.separator");
|
||||||
|
|
||||||
/** the current session */
|
/** the current session */
|
||||||
private I2PSession _session;
|
private I2PSession _session;
|
||||||
|
|
||||||
/** who am i */
|
/** who am i */
|
||||||
private Destination _myDestination;
|
private Destination _myDestination;
|
||||||
|
|
||||||
/** who are you? */
|
/** who are you? */
|
||||||
private Destination _peerDestination;
|
private Destination _peerDestination;
|
||||||
|
|
||||||
/** location of my secret key file */
|
/** location of my secret key file */
|
||||||
private String _myKeyFile;
|
private String _myKeyFile;
|
||||||
|
|
||||||
/** location of their public key */
|
/** location of their public key */
|
||||||
private String _theirDestinationFile;
|
private String _theirDestinationFile;
|
||||||
|
|
||||||
/** where the application reads input from. currently set to standard input */
|
/** where the application reads input from. currently set to standard input */
|
||||||
private BufferedReader _in;
|
private BufferedReader _in;
|
||||||
|
|
||||||
/** where the application sends output to. currently set to standard output */
|
/** where the application sends output to. currently set to standard output */
|
||||||
private BufferedWriter _out;
|
private BufferedWriter _out;
|
||||||
|
|
||||||
/** string that messages must begin with to be treated as files */
|
/** string that messages must begin with to be treated as files */
|
||||||
private final static String FILE_COMMAND = ".file: ";
|
private final static String FILE_COMMAND = ".file: ";
|
||||||
|
|
||||||
/** the, erm, manual */
|
/** the, erm, manual */
|
||||||
private final static String MANUAL = "ATalk: Anonymous Talk, a demo program for the Invisible Internet Project SDK"
|
private final static String MANUAL = "ATalk: Anonymous Talk, a demo program for the Invisible Internet Project SDK"
|
||||||
+ NL
|
+ NL
|
||||||
@ -84,7 +94,9 @@ public class ATalk implements I2PSessionListener, Runnable {
|
|||||||
+ NL
|
+ NL
|
||||||
+ "To end the talk session, enter a period on a line by itself and hit return"
|
+ "To end the talk session, enter a period on a line by itself and hit return"
|
||||||
+ NL;
|
+ NL;
|
||||||
|
|
||||||
public final static String PROP_CONFIG_LOCATION = "configFile";
|
public final static String PROP_CONFIG_LOCATION = "configFile";
|
||||||
|
|
||||||
private static final SimpleDateFormat _fmt = new SimpleDateFormat("hh:mm:ss.SSS");
|
private static final SimpleDateFormat _fmt = new SimpleDateFormat("hh:mm:ss.SSS");
|
||||||
|
|
||||||
/** Construct the talk engine, but don't connect yet */
|
/** 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);
|
_log.warn("Unable to load up the ATalk config file " + configLocation);
|
||||||
}
|
}
|
||||||
// Provide any router or client API configuration here.
|
// 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_HOST))
|
||||||
if (!props.containsKey(I2PClient.PROP_TCP_PORT)) props.setProperty(I2PClient.PROP_TCP_PORT, "7654");
|
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))
|
if (!props.containsKey(I2PClient.PROP_RELIABILITY))
|
||||||
props.setProperty(I2PClient.PROP_RELIABILITY,
|
props.setProperty(I2PClient.PROP_RELIABILITY, I2PClient.PROP_RELIABILITY_BEST_EFFORT);
|
||||||
I2PClient.PROP_RELIABILITY_BEST_EFFORT);
|
|
||||||
_session = client.createSession(new FileInputStream(myFile), props);
|
_session = client.createSession(new FileInputStream(myFile), props);
|
||||||
_session.setSessionListener(this);
|
_session.setSessionListener(this);
|
||||||
_session.connect();
|
_session.connect();
|
||||||
@ -364,4 +377,5 @@ public class ATalk implements I2PSessionListener, Runnable {
|
|||||||
public void reportAbuse(I2PSession session, int severity) {
|
public void reportAbuse(I2PSession session, int severity) {
|
||||||
_log.debug("Abuse reported of severity " + severity);
|
_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();) {
|
for (Iterator iter = options.keySet().iterator(); iter.hasNext();) {
|
||||||
String key = (String) iter.next();
|
String key = (String) iter.next();
|
||||||
String val = options.getProperty(key);
|
String val = options.getProperty(key);
|
||||||
if (key.startsWith("java")) {
|
if (key.startsWith("java") ||
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping java.* property: " + key);
|
key.startsWith("user") ||
|
||||||
} else if (key.startsWith("user")) {
|
key.startsWith("os") ||
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping user.* property: " + key);
|
key.startsWith("sun") ||
|
||||||
} else if (key.startsWith("os")) {
|
key.startsWith("file") ||
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping os.* property: " + key);
|
key.startsWith("line") ||
|
||||||
} else if (key.startsWith("sun")) {
|
key.startsWith("wrapper")) {
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping sun.* property: " + key);
|
if (_log.shouldLog(Log.DEBUG)) _log.debug("Skipping 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);
|
|
||||||
} else if ((key.length() > 255) || (val.length() > 255)) {
|
} else if ((key.length() > 255) || (val.length() > 255)) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
_log.warn(getPrefix() + "Not passing on property ["
|
_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 */
|
/** Signed with 40-byte Signature and (optional) 32-byte hash */
|
||||||
public final static int CERTIFICATE_TYPE_SIGNED = 3;
|
public final static int CERTIFICATE_TYPE_SIGNED = 3;
|
||||||
public final static int CERTIFICATE_LENGTH_SIGNED_WITH_HASH = Signature.SIGNATURE_BYTES + Hash.HASH_LENGTH;
|
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() {
|
public Certificate() {
|
||||||
_type = 0;
|
_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.
|
* which aren't available from I2PClient.
|
||||||
*/
|
*/
|
||||||
public Destination createIfAbsent() throws I2PException, IOException, DataFormatException {
|
public Destination createIfAbsent() throws I2PException, IOException, DataFormatException {
|
||||||
|
@ -132,6 +132,7 @@ public class EepGet {
|
|||||||
int numRetries = 5;
|
int numRetries = 5;
|
||||||
int markSize = 1024;
|
int markSize = 1024;
|
||||||
int lineLen = 40;
|
int lineLen = 40;
|
||||||
|
int inactivityTimeout = 60*1000;
|
||||||
String etag = null;
|
String etag = null;
|
||||||
String saveAs = null;
|
String saveAs = null;
|
||||||
String url = null;
|
String url = null;
|
||||||
@ -145,6 +146,9 @@ public class EepGet {
|
|||||||
} else if (args[i].equals("-n")) {
|
} else if (args[i].equals("-n")) {
|
||||||
numRetries = Integer.parseInt(args[i+1]);
|
numRetries = Integer.parseInt(args[i+1]);
|
||||||
i++;
|
i++;
|
||||||
|
} else if (args[i].equals("-t")) {
|
||||||
|
inactivityTimeout = 1000 * Integer.parseInt(args[i+1]);
|
||||||
|
i++;
|
||||||
} else if (args[i].equals("-e")) {
|
} else if (args[i].equals("-e")) {
|
||||||
etag = "\"" + args[i+1] + "\"";
|
etag = "\"" + args[i+1] + "\"";
|
||||||
i++;
|
i++;
|
||||||
@ -174,7 +178,7 @@ public class EepGet {
|
|||||||
|
|
||||||
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true, proxyHost, proxyPort, numRetries, saveAs, url, true, etag);
|
EepGet get = new EepGet(I2PAppContext.getGlobalContext(), true, proxyHost, proxyPort, numRetries, saveAs, url, true, etag);
|
||||||
get.addStatusListener(get.new CLIStatusListener(markSize, lineLen));
|
get.addStatusListener(get.new CLIStatusListener(markSize, lineLen));
|
||||||
get.fetch();
|
get.fetch(45*1000, -1, inactivityTimeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String suggestName(String url) {
|
public static String suggestName(String url) {
|
||||||
@ -208,7 +212,7 @@ public class EepGet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void usage() {
|
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 {
|
public static interface StatusListener {
|
||||||
@ -416,7 +420,7 @@ public class EepGet {
|
|||||||
SocketTimeout timeout = null;
|
SocketTimeout timeout = null;
|
||||||
if (_fetchHeaderTimeout > 0)
|
if (_fetchHeaderTimeout > 0)
|
||||||
timeout = new SocketTimeout(_fetchHeaderTimeout);
|
timeout = new SocketTimeout(_fetchHeaderTimeout);
|
||||||
final SocketTimeout stimeout = timeout; // ugly
|
final SocketTimeout stimeout = timeout; // ugly - why not use sotimeout?
|
||||||
timeout.setTimeoutCommand(new Runnable() {
|
timeout.setTimeoutCommand(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
if (_log.shouldLog(Log.DEBUG))
|
if (_log.shouldLog(Log.DEBUG))
|
||||||
@ -457,7 +461,7 @@ public class EepGet {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_currentAttempt++;
|
_currentAttempt++;
|
||||||
if (_currentAttempt > _numRetries)
|
if (_currentAttempt > _numRetries || !_keepFetching)
|
||||||
break;
|
break;
|
||||||
try {
|
try {
|
||||||
long delay = _context.random().nextInt(60*1000);
|
long delay = _context.random().nextInt(60*1000);
|
||||||
@ -629,8 +633,6 @@ public class EepGet {
|
|||||||
|
|
||||||
if (_log.shouldLog(Log.DEBUG))
|
if (_log.shouldLog(Log.DEBUG))
|
||||||
_log.debug("rc: " + responseCode + " for " + _actualURL);
|
_log.debug("rc: " + responseCode + " for " + _actualURL);
|
||||||
if(_transferFailed)
|
|
||||||
_log.error("Already failed for " + _actualURL);
|
|
||||||
boolean rcOk = false;
|
boolean rcOk = false;
|
||||||
switch (responseCode) {
|
switch (responseCode) {
|
||||||
case 200: // full
|
case 200: // full
|
||||||
@ -661,16 +663,24 @@ public class EepGet {
|
|||||||
_keepFetching = false;
|
_keepFetching = false;
|
||||||
_notModified = true;
|
_notModified = true;
|
||||||
return;
|
return;
|
||||||
|
case 403: // bad req
|
||||||
case 404: // not found
|
case 404: // not found
|
||||||
|
case 409: // bad addr helper
|
||||||
|
case 503: // no outproxy
|
||||||
_keepFetching = false;
|
_keepFetching = false;
|
||||||
_transferFailed = true;
|
_transferFailed = true;
|
||||||
|
// maybe we should throw instead of return to get the return code back to the user
|
||||||
return;
|
return;
|
||||||
case 416: // completed (or range out of reach)
|
case 416: // completed (or range out of reach)
|
||||||
_bytesRemaining = 0;
|
_bytesRemaining = 0;
|
||||||
_keepFetching = false;
|
_keepFetching = false;
|
||||||
return;
|
return;
|
||||||
|
case 504: // gateway timeout
|
||||||
|
// throw out of doFetch() to fetch() and try again
|
||||||
|
throw new IOException("HTTP Proxy timeout");
|
||||||
default:
|
default:
|
||||||
rcOk = false;
|
rcOk = false;
|
||||||
|
_keepFetching = false;
|
||||||
_transferFailed = true;
|
_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
|
2008-11-15 zzz
|
||||||
* Build files:
|
* Build files:
|
||||||
- Don't die if depend not available
|
- Don't die if depend not available
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<i2p.news date="$Date: 2008-10-05 12:00:00 $">
|
<i2p.news date="$Date: 2008-12-01 00:00:00 $">
|
||||||
<i2p.release version="0.6.4" date="2008/10/05" minVersion="0.6"
|
<i2p.release version="0.6.5" date="2008/12/01" minVersion="0.6"
|
||||||
/>
|
/>
|
||||||
<center><h2>Congratulations on getting I2P installed!</h2></center>
|
<center><h2>Congratulations on getting I2P installed!</h2></center>
|
||||||
<ul>
|
<ul>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<info>
|
<info>
|
||||||
<appname>i2p</appname>
|
<appname>i2p</appname>
|
||||||
<appversion>0.6.4</appversion>
|
<appversion>0.6.5</appversion>
|
||||||
<authors>
|
<authors>
|
||||||
<author name="I2P" email="http://forum.i2p2.de/"/>
|
<author name="I2P" email="http://forum.i2p2.de/"/>
|
||||||
</authors>
|
</authors>
|
||||||
|
@ -27,7 +27,7 @@ clientApp.3.startOnLoad=true
|
|||||||
# load a browser pointing at the web console whenever we start up
|
# load a browser pointing at the web console whenever we start up
|
||||||
clientApp.4.main=net.i2p.apps.systray.UrlLauncher
|
clientApp.4.main=net.i2p.apps.systray.UrlLauncher
|
||||||
clientApp.4.name=consoleBrowser
|
clientApp.4.name=consoleBrowser
|
||||||
clientApp.4.args=http://localhost:7657/
|
clientApp.4.args=http://localhost:7657/index.jsp
|
||||||
clientApp.4.delay=5
|
clientApp.4.delay=5
|
||||||
clientApp.4.startOnLoad=true
|
clientApp.4.startOnLoad=true
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# install_i2p_service_unix
|
# install_i2p_service_unix
|
||||||
# 2004 The I2P Project
|
# 2004 The I2P Project
|
||||||
# http://www.i2p.net
|
# http://www.i2p2.de/
|
||||||
# This code is public domain.
|
# This code is public domain.
|
||||||
#
|
#
|
||||||
# author: hypercubus
|
# author: hypercubus
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# osid
|
# osid
|
||||||
# 2004 The I2P Project
|
# 2004 The I2P Project
|
||||||
# http://www.i2p.net
|
# http://www.i2p2.de/
|
||||||
# This code is public domain.
|
# This code is public domain.
|
||||||
#
|
#
|
||||||
# author: hypercubus
|
# author: hypercubus
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
::
|
::
|
||||||
:: postinstall.bat
|
:: postinstall.bat
|
||||||
:: 2004 The I2P Project
|
:: 2004 The I2P Project
|
||||||
:: http://www.i2p.net
|
:: http://www.i2p2.de/
|
||||||
:: This code is public domain.
|
:: This code is public domain.
|
||||||
::
|
::
|
||||||
:: author: hypercubus
|
:: author: hypercubus
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# postinstall
|
# postinstall
|
||||||
# 2004 The I2P Project
|
# 2004 The I2P Project
|
||||||
# http://www.i2p.net
|
# http://www.i2p2.de/
|
||||||
# This code is public domain.
|
# This code is public domain.
|
||||||
#
|
#
|
||||||
# author: hypercubus
|
# author: hypercubus
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# uninstall_i2p_service_unix
|
# uninstall_i2p_service_unix
|
||||||
# 2004 The I2P Project
|
# 2004 The I2P Project
|
||||||
# http://www.i2p.net
|
# http://www.i2p2.de/
|
||||||
# This code is public domain.
|
# This code is public domain.
|
||||||
#
|
#
|
||||||
# author: hypercubus
|
# 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.2=-Dorg.mortbay.http.Version.paranoid=true
|
||||||
wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false
|
wrapper.java.additional.3=-Dorg.mortbay.util.FileResource.checkAliases=false
|
||||||
wrapper.java.additional.4=-Dorg.mortbay.xml.XmlParser.NotValidating=true
|
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)
|
# Initial Java Heap Size (in MB)
|
||||||
#wrapper.java.initmemory=4
|
#wrapper.java.initmemory=4
|
||||||
@ -134,6 +139,7 @@ wrapper.restart.delay=60
|
|||||||
|
|
||||||
wrapper.ping.interval=600
|
wrapper.ping.interval=600
|
||||||
wrapper.ping.timeout=605
|
wrapper.ping.timeout=605
|
||||||
|
wrapper.jvm_exit.timeout=30
|
||||||
|
|
||||||
# use the wrapper's internal timer thread. otherwise this would
|
# use the wrapper's internal timer thread. otherwise this would
|
||||||
# force a restart of the router during daylight savings time as well
|
# 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.news date="$Date: 2008-12-01 00:00:00 $">
|
||||||
<i2p.release version="0.6.4" date="2008/10/05" minVersion="0.6"
|
<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"
|
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"
|
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"
|
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" />
|
publiclogs="http://www.i2p.net/meeting141" />
|
||||||
<p>
|
<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>
|
</p><p>
|
||||||
The 0.6.4 release adds performance and stability improvements.
|
The 0.6.5 release introduces new components,
|
||||||
Floodfill peers which are already connected, are preferred
|
drops some old ones (like the old TCP transport)
|
||||||
for RouterInfo stores, and references to new floodfill peers
|
and has been optimized to perform better.
|
||||||
obtained from ordinary peers in case of shortage.
|
</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>
|
</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>
|
</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 = "router.keys.location";
|
||||||
public final static String PROP_KEYS_FILENAME_DEFAULT = "router.keys";
|
public final static String PROP_KEYS_FILENAME_DEFAULT = "router.keys";
|
||||||
public final static String PROP_SHUTDOWN_IN_PROGRESS = "__shutdownInProgress";
|
public final static String PROP_SHUTDOWN_IN_PROGRESS = "__shutdownInProgress";
|
||||||
|
public final static String DNS_CACHE_TIME = "" + (5*60);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
// grumble about sun's java caching DNS entries *forever* by default
|
// grumble about sun's java caching DNS entries *forever* by default
|
||||||
// so lets just keep 'em for a minute
|
// so lets just keep 'em for a short time
|
||||||
System.setProperty("sun.net.inetaddr.ttl", "60");
|
System.setProperty("sun.net.inetaddr.ttl", DNS_CACHE_TIME);
|
||||||
System.setProperty("networkaddress.cache.ttl", "60");
|
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
|
// until we handle restricted routes and/or all peers support v6, try v4 first
|
||||||
System.setProperty("java.net.preferIPv4Stack", "true");
|
System.setProperty("java.net.preferIPv4Stack", "true");
|
||||||
System.setProperty("http.agent", "I2P");
|
System.setProperty("http.agent", "I2P");
|
||||||
|
@ -16,8 +16,8 @@ import net.i2p.CoreVersion;
|
|||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.548 $ $Date: 2008-06-07 23:00:00 $";
|
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 String VERSION = "0.6.5";
|
||||||
public final static long BUILD = 11;
|
public final static long BUILD = 0;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
System.out.println("I2P Router version: " + VERSION + "-" + BUILD);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
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_MAX = 60*60*1000;
|
||||||
public final static long SHITLIST_DURATION_PARTIAL = 20*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_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) {
|
public Shitlist(RouterContext context) {
|
||||||
_context = context;
|
_context = context;
|
||||||
@ -62,6 +63,7 @@ public class Shitlist {
|
|||||||
public Cleanup(RouterContext ctx) {
|
public Cleanup(RouterContext ctx) {
|
||||||
super(ctx);
|
super(ctx);
|
||||||
_toUnshitlist = new ArrayList(4);
|
_toUnshitlist = new ArrayList(4);
|
||||||
|
getTiming().setStartAfter(_context.clock().now() + SHITLIST_CLEANER_START_DELAY);
|
||||||
}
|
}
|
||||||
public String getName() { return "Cleanup shitlist"; }
|
public String getName() { return "Cleanup shitlist"; }
|
||||||
public void runJob() {
|
public void runJob() {
|
||||||
|
@ -499,7 +499,7 @@ class BuildHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (response == 0 && (isInGW || isOutEnd) &&
|
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;
|
response = TunnelHistory.TUNNEL_REJECT_BANDWIDTH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user