propagate from branch 'i2p.i2p.zzz.test' (head 104b5c1cea8683af30650a55d5b63141e988bb4c)
to branch 'i2p.i2p' (head 8d35e0858095b3eed3fb6d8f4ecee23cbdadfbb1)
This commit is contained in:
@ -77,11 +77,13 @@
|
|||||||
<property name="build_lib" location="lib"/>
|
<property name="build_lib" location="lib"/>
|
||||||
<property name="build_i2pref" location="../../build"/>
|
<property name="build_i2pref" location="../../build"/>
|
||||||
<property name="build_routerconsole" location="../routerconsole/java/build/"/>
|
<property name="build_routerconsole" location="../routerconsole/java/build/"/>
|
||||||
|
<property name="build_i2ptunnel" location="../i2ptunnel/java/build/"/>
|
||||||
|
|
||||||
<path id="build_classpath">
|
<path id="build_classpath">
|
||||||
<fileset dir="${build_lib}" includes="**/*.jar"/>
|
<fileset dir="${build_lib}" includes="**/*.jar"/>
|
||||||
<fileset dir="${build_i2pref}" includes="**/*.jar"/>
|
<fileset dir="${build_i2pref}" includes="**/*.jar"/>
|
||||||
<fileset dir="${build_routerconsole}" includes="**/*.jar"/>
|
<fileset dir="${build_routerconsole}" includes="**/*.jar"/>
|
||||||
|
<fileset dir="${build_i2ptunnel}" includes="**/*.jar"/>
|
||||||
</path>
|
</path>
|
||||||
<target name="build_init">
|
<target name="build_init">
|
||||||
<!-- Create the time stamp -->
|
<!-- Create the time stamp -->
|
||||||
|
@ -22,6 +22,7 @@ dist.javadoc.dir=${dist.dir}/javadoc
|
|||||||
excludes=
|
excludes=
|
||||||
file.reference.appframework.jar=lib/appframework.jar
|
file.reference.appframework.jar=lib/appframework.jar
|
||||||
file.reference.i2p.jar=../../core/java/build/i2p.jar
|
file.reference.i2p.jar=../../core/java/build/i2p.jar
|
||||||
|
file.reference.i2ptunnel.jar=../i2ptunnel/java/build/i2ptunnel.jar
|
||||||
file.reference.router.jar=../../router/java/build/router.jar
|
file.reference.router.jar=../../router/java/build/router.jar
|
||||||
file.reference.routerconsole.jar=../routerconsole/java/build/routerconsole.jar
|
file.reference.routerconsole.jar=../routerconsole/java/build/routerconsole.jar
|
||||||
file.reference.swing-worker.jar=lib/swing-worker.jar
|
file.reference.swing-worker.jar=lib/swing-worker.jar
|
||||||
@ -32,7 +33,8 @@ javac.classpath=\
|
|||||||
${file.reference.appframework.jar}:\
|
${file.reference.appframework.jar}:\
|
||||||
${file.reference.swing-worker.jar}:\
|
${file.reference.swing-worker.jar}:\
|
||||||
${file.reference.i2p.jar}:\
|
${file.reference.i2p.jar}:\
|
||||||
${file.reference.routerconsole.jar}
|
${file.reference.routerconsole.jar}:\
|
||||||
|
${file.reference.i2ptunnel.jar}
|
||||||
# Space-separated list of extra javac options
|
# Space-separated list of extra javac options
|
||||||
javac.compilerargs=
|
javac.compilerargs=
|
||||||
javac.deprecation=false
|
javac.deprecation=false
|
||||||
|
@ -10,5 +10,5 @@ package net.i2p.desktopgui.desktopgui;
|
|||||||
* @author mathias
|
* @author mathias
|
||||||
*/
|
*/
|
||||||
public class GUIVersion {
|
public class GUIVersion {
|
||||||
public static final String VERSION = "0.0.1.3";
|
public static final String VERSION = "0.0.2";
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,396 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||||
|
<Property name="title" type="java.lang.String" resourceKey="Form.title"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="Form" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="2"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,2,48,0,0,2,48"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
|
||||||
|
<Property name="useNullLayout" type="boolean" value="true"/>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelNameLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelNameLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelNameLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="20" width="120" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelTypeLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelTypeLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelTypeLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="50" width="120" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelPortLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelPortLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelPortLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="80" width="110" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelDestinationLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelDestinationLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelDestinationLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="110" width="110" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelProfileLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelProfileLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelProfileLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="140" width="110" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="delayConnect">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="delayConnect.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="delayConnect" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="170" width="160" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="sharedClient">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="sharedClient.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="sharedClient" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="200" width="160" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="autoStart">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="autoStart.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="autoStart" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="230" width="160" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JSeparator" name="jSeparator1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="name" type="java.lang.String" value="jSeparator1" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="0" y="510" width="750" height="10"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelDepthLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelDepthLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelDepthLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="280" width="160" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="depthVarianceLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="depthVarianceLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="depthVarianceLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="310" width="160" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelCountLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelCountLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelCountLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="340" width="160" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="backupTunnelCountLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="backupTunnelCountLabel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="backupTunnelCountLabel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="370" width="170" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JSeparator" name="jSeparator2">
|
||||||
|
<Properties>
|
||||||
|
<Property name="name" type="java.lang.String" value="jSeparator2" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="0" y="260" width="750" height="10"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="reduceIdle">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="reduceIdle.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="reduceIdle" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="420" width="300" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="closeIdle">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="closeIdle.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="closeIdle" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="450" width="370" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JCheckBox" name="delayIdle">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="delayIdle.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="delayIdle" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="20" y="480" width="400" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JSeparator" name="jSeparator3">
|
||||||
|
<Properties>
|
||||||
|
<Property name="name" type="java.lang.String" value="jSeparator3" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="0" y="400" width="760" height="10"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="save">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="save.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="save" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="saveActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="10" y="520" width="-1" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="cancel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="cancel.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="cancel" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cancelActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="60" y="520" width="-1" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="tunnelName">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelName.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelName" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="20" width="340" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="tunnelType">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelType.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelType" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="50" width="340" height="20"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="tunnelPort">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelPort.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelPort" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="70" width="340" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="tunnelDestination">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="tunnelDestination.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelDestination" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="100" width="340" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JComboBox" name="tunnelProfile">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
|
<StringArray count="2">
|
||||||
|
<StringItem index="0" value="Interactive connection (Instant messaging)"/>
|
||||||
|
<StringItem index="1" value="Bulk connection (Downloads, websites...)"/>
|
||||||
|
</StringArray>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelProfile" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="130" width="340" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JComboBox" name="tunnelDepth">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
|
<StringArray count="4">
|
||||||
|
<StringItem index="0" value="0 hop tunnel (no anonymity, low latency)"/>
|
||||||
|
<StringItem index="1" value="1 hop tunnel (low anonymity, low latency)"/>
|
||||||
|
<StringItem index="2" value="2 hop tunnel (medium anonymity, medium latency)"/>
|
||||||
|
<StringItem index="3" value="3 hop tunnel (high anonymity, high latency)"/>
|
||||||
|
</StringArray>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelDepth" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="280" width="350" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JComboBox" name="depthVariance">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
|
<StringArray count="5">
|
||||||
|
<StringItem index="0" value="0 hop variance (no random, good performance)"/>
|
||||||
|
<StringItem index="1" value="+ 0-1 hop variance (slightly random, lower performance)"/>
|
||||||
|
<StringItem index="2" value="+ 0-2 hop variance (very random, lower performance)"/>
|
||||||
|
<StringItem index="3" value="+/- 0-1 hop variance (slightly random, standard performance)"/>
|
||||||
|
<StringItem index="4" value="+/- 0-2 hop variance (not recommended)"/>
|
||||||
|
</StringArray>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="depthVariance" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="310" width="350" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JComboBox" name="tunnelCount">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
|
<StringArray count="3">
|
||||||
|
<StringItem index="0" value="1 tunnel (low bandwidth usage, low reliability)"/>
|
||||||
|
<StringItem index="1" value="2 tunnels (standard bandwidth usage, standard reliability)"/>
|
||||||
|
<StringItem index="2" value="3 tunnels (high bandwidth usage, high reliability)"/>
|
||||||
|
</StringArray>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="tunnelCount" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="340" width="350" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JComboBox" name="backupTunnelCount">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
|
||||||
|
<StringArray count="4">
|
||||||
|
<StringItem index="0" value="0 backup tunnels (no redundancy, no resource usage)"/>
|
||||||
|
<StringItem index="1" value="1 backup tunnel (low redundancy, low resource usage)"/>
|
||||||
|
<StringItem index="2" value="2 backup tunnels (medium redundancy, medium resource usage)"/>
|
||||||
|
<StringItem index="3" value="3 backup tunnels (high redundancy, high resource usage)"/>
|
||||||
|
</StringArray>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="backupTunnelCount" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="200" y="370" width="350" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="changeTunnelState">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="changeTunnelState.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="changeTunnelState" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="160" y="520" width="150" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,434 @@
|
|||||||
|
/*
|
||||||
|
* ClientTunnelWindow.java
|
||||||
|
*
|
||||||
|
* Created on 10-jun-2009, 16:49:12
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.i2p.desktopgui.gui;
|
||||||
|
|
||||||
|
import net.i2p.i2ptunnel.web.EditBean;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mathias
|
||||||
|
*/
|
||||||
|
public class ClientTunnelWindow extends javax.swing.JFrame {
|
||||||
|
|
||||||
|
/** Creates new form ClientTunnelWindow */
|
||||||
|
public ClientTunnelWindow(int tunnelNumber, ActionListener al) {
|
||||||
|
initComponents();
|
||||||
|
this.tunnelNumber = tunnelNumber;
|
||||||
|
this.al = al;
|
||||||
|
extraInitComponents();
|
||||||
|
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||||
|
this.setSize(600, 600);
|
||||||
|
this.setLocationRelativeTo(null);
|
||||||
|
this.requestFocus();
|
||||||
|
this.changeTunnelState.setVisible(false); //TODO: implement tunnel state change
|
||||||
|
this.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void extraInitComponents() {
|
||||||
|
EditBean bean = new EditBean();
|
||||||
|
if(!bean.isClient(tunnelNumber)) {
|
||||||
|
this.dispose();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.tunnelName.setText(bean.getTunnelName(tunnelNumber));
|
||||||
|
this.tunnelType.setText(bean.getTunnelType(tunnelNumber));
|
||||||
|
this.tunnelPort.setText(bean.getClientPort(tunnelNumber));
|
||||||
|
this.tunnelDestination.setText(bean.getClientDestination(tunnelNumber));
|
||||||
|
|
||||||
|
if(bean.getTunnelType(tunnelNumber).equals(TYPE_STREAMR_CLIENT)) {
|
||||||
|
tunnelProfile.setVisible(false);
|
||||||
|
tunnelProfileLabel.setVisible(false);
|
||||||
|
this.delayConnect.setVisible(false);
|
||||||
|
this.sharedClient.setVisible(false);
|
||||||
|
this.autoStart.setVisible(false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(bean.isInteractive(tunnelNumber)) {
|
||||||
|
tunnelProfile.setSelectedIndex(TUNNEL_INTERACTIVE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tunnelProfile.setSelectedIndex(TUNNEL_BULK);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.delayConnect.setSelected(bean.shouldDelay(tunnelNumber));
|
||||||
|
this.sharedClient.setSelected(bean.isSharedClient(tunnelNumber));
|
||||||
|
this.autoStart.setSelected(bean.startAutomatically(tunnelNumber));
|
||||||
|
}
|
||||||
|
|
||||||
|
this.tunnelDepth.setSelectedIndex(bean.getTunnelDepth(tunnelNumber, 2));
|
||||||
|
|
||||||
|
int variance = bean.getTunnelVariance(tunnelNumber, 0);
|
||||||
|
if(variance == 0) {
|
||||||
|
this.depthVariance.setSelectedIndex(0);
|
||||||
|
}
|
||||||
|
else if(variance == 1) {
|
||||||
|
this.depthVariance.setSelectedIndex(1);
|
||||||
|
}
|
||||||
|
else if(variance == 2) {
|
||||||
|
this.depthVariance.setSelectedIndex(2);
|
||||||
|
}
|
||||||
|
else if(variance == -1) {
|
||||||
|
this.depthVariance.setSelectedIndex(3);
|
||||||
|
}
|
||||||
|
else if(variance == -2) {
|
||||||
|
this.depthVariance.setSelectedIndex(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
int tunnelQuantity = bean.getTunnelQuantity(tunnelNumber, 2) - 1;
|
||||||
|
if(tunnelQuantity >= 0 && tunnelQuantity <= 2) {
|
||||||
|
this.tunnelCount.setSelectedIndex(tunnelQuantity);
|
||||||
|
}
|
||||||
|
|
||||||
|
int backupTunnelQuantity = bean.getTunnelBackupQuantity(tunnelNumber, 0);
|
||||||
|
if(backupTunnelQuantity >= 0 && backupTunnelQuantity <= 3) {
|
||||||
|
this.backupTunnelCount.setSelectedIndex(backupTunnelQuantity);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(bean.getTunnelType(tunnelNumber).equals(TYPE_STREAMR_CLIENT)) {
|
||||||
|
this.reduceIdle.setVisible(false);
|
||||||
|
this.closeIdle.setVisible(false);
|
||||||
|
this.delayIdle.setVisible(false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.reduceIdle.setSelected(bean.getReduce(tunnelNumber));
|
||||||
|
this.closeIdle.setSelected(bean.getClose(tunnelNumber));
|
||||||
|
this.delayIdle.setSelected(bean.getDelayOpen(tunnelNumber));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method is called from within the constructor to
|
||||||
|
* initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is
|
||||||
|
* always regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
tunnelNameLabel = new javax.swing.JLabel();
|
||||||
|
tunnelTypeLabel = new javax.swing.JLabel();
|
||||||
|
tunnelPortLabel = new javax.swing.JLabel();
|
||||||
|
tunnelDestinationLabel = new javax.swing.JLabel();
|
||||||
|
tunnelProfileLabel = new javax.swing.JLabel();
|
||||||
|
delayConnect = new javax.swing.JCheckBox();
|
||||||
|
sharedClient = new javax.swing.JCheckBox();
|
||||||
|
autoStart = new javax.swing.JCheckBox();
|
||||||
|
jSeparator1 = new javax.swing.JSeparator();
|
||||||
|
tunnelDepthLabel = new javax.swing.JLabel();
|
||||||
|
depthVarianceLabel = new javax.swing.JLabel();
|
||||||
|
tunnelCountLabel = new javax.swing.JLabel();
|
||||||
|
backupTunnelCountLabel = new javax.swing.JLabel();
|
||||||
|
jSeparator2 = new javax.swing.JSeparator();
|
||||||
|
reduceIdle = new javax.swing.JCheckBox();
|
||||||
|
closeIdle = new javax.swing.JCheckBox();
|
||||||
|
delayIdle = new javax.swing.JCheckBox();
|
||||||
|
jSeparator3 = new javax.swing.JSeparator();
|
||||||
|
save = new javax.swing.JButton();
|
||||||
|
cancel = new javax.swing.JButton();
|
||||||
|
tunnelName = new javax.swing.JTextField();
|
||||||
|
tunnelType = new javax.swing.JLabel();
|
||||||
|
tunnelPort = new javax.swing.JTextField();
|
||||||
|
tunnelDestination = new javax.swing.JTextField();
|
||||||
|
tunnelProfile = new javax.swing.JComboBox();
|
||||||
|
tunnelDepth = new javax.swing.JComboBox();
|
||||||
|
depthVariance = new javax.swing.JComboBox();
|
||||||
|
tunnelCount = new javax.swing.JComboBox();
|
||||||
|
backupTunnelCount = new javax.swing.JComboBox();
|
||||||
|
changeTunnelState = new javax.swing.JButton();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||||
|
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(net.i2p.desktopgui.desktopgui.Main.class).getContext().getResourceMap(ClientTunnelWindow.class);
|
||||||
|
setTitle(resourceMap.getString("Form.title")); // NOI18N
|
||||||
|
setName("Form"); // NOI18N
|
||||||
|
getContentPane().setLayout(null);
|
||||||
|
|
||||||
|
tunnelNameLabel.setText(resourceMap.getString("tunnelNameLabel.text")); // NOI18N
|
||||||
|
tunnelNameLabel.setName("tunnelNameLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelNameLabel);
|
||||||
|
tunnelNameLabel.setBounds(20, 20, 120, 17);
|
||||||
|
|
||||||
|
tunnelTypeLabel.setText(resourceMap.getString("tunnelTypeLabel.text")); // NOI18N
|
||||||
|
tunnelTypeLabel.setName("tunnelTypeLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelTypeLabel);
|
||||||
|
tunnelTypeLabel.setBounds(20, 50, 120, 17);
|
||||||
|
|
||||||
|
tunnelPortLabel.setText(resourceMap.getString("tunnelPortLabel.text")); // NOI18N
|
||||||
|
tunnelPortLabel.setName("tunnelPortLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelPortLabel);
|
||||||
|
tunnelPortLabel.setBounds(20, 80, 110, 17);
|
||||||
|
|
||||||
|
tunnelDestinationLabel.setText(resourceMap.getString("tunnelDestinationLabel.text")); // NOI18N
|
||||||
|
tunnelDestinationLabel.setName("tunnelDestinationLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelDestinationLabel);
|
||||||
|
tunnelDestinationLabel.setBounds(20, 110, 110, 17);
|
||||||
|
|
||||||
|
tunnelProfileLabel.setText(resourceMap.getString("tunnelProfileLabel.text")); // NOI18N
|
||||||
|
tunnelProfileLabel.setName("tunnelProfileLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelProfileLabel);
|
||||||
|
tunnelProfileLabel.setBounds(20, 140, 110, 17);
|
||||||
|
|
||||||
|
delayConnect.setText(resourceMap.getString("delayConnect.text")); // NOI18N
|
||||||
|
delayConnect.setName("delayConnect"); // NOI18N
|
||||||
|
getContentPane().add(delayConnect);
|
||||||
|
delayConnect.setBounds(20, 170, 160, 22);
|
||||||
|
|
||||||
|
sharedClient.setText(resourceMap.getString("sharedClient.text")); // NOI18N
|
||||||
|
sharedClient.setName("sharedClient"); // NOI18N
|
||||||
|
getContentPane().add(sharedClient);
|
||||||
|
sharedClient.setBounds(20, 200, 160, 22);
|
||||||
|
|
||||||
|
autoStart.setText(resourceMap.getString("autoStart.text")); // NOI18N
|
||||||
|
autoStart.setName("autoStart"); // NOI18N
|
||||||
|
getContentPane().add(autoStart);
|
||||||
|
autoStart.setBounds(20, 230, 160, 22);
|
||||||
|
|
||||||
|
jSeparator1.setName("jSeparator1"); // NOI18N
|
||||||
|
getContentPane().add(jSeparator1);
|
||||||
|
jSeparator1.setBounds(0, 510, 750, 10);
|
||||||
|
|
||||||
|
tunnelDepthLabel.setText(resourceMap.getString("tunnelDepthLabel.text")); // NOI18N
|
||||||
|
tunnelDepthLabel.setName("tunnelDepthLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelDepthLabel);
|
||||||
|
tunnelDepthLabel.setBounds(20, 280, 160, 17);
|
||||||
|
|
||||||
|
depthVarianceLabel.setText(resourceMap.getString("depthVarianceLabel.text")); // NOI18N
|
||||||
|
depthVarianceLabel.setName("depthVarianceLabel"); // NOI18N
|
||||||
|
getContentPane().add(depthVarianceLabel);
|
||||||
|
depthVarianceLabel.setBounds(20, 310, 160, 17);
|
||||||
|
|
||||||
|
tunnelCountLabel.setText(resourceMap.getString("tunnelCountLabel.text")); // NOI18N
|
||||||
|
tunnelCountLabel.setName("tunnelCountLabel"); // NOI18N
|
||||||
|
getContentPane().add(tunnelCountLabel);
|
||||||
|
tunnelCountLabel.setBounds(20, 340, 160, 17);
|
||||||
|
|
||||||
|
backupTunnelCountLabel.setText(resourceMap.getString("backupTunnelCountLabel.text")); // NOI18N
|
||||||
|
backupTunnelCountLabel.setName("backupTunnelCountLabel"); // NOI18N
|
||||||
|
getContentPane().add(backupTunnelCountLabel);
|
||||||
|
backupTunnelCountLabel.setBounds(20, 370, 170, 17);
|
||||||
|
|
||||||
|
jSeparator2.setName("jSeparator2"); // NOI18N
|
||||||
|
getContentPane().add(jSeparator2);
|
||||||
|
jSeparator2.setBounds(0, 260, 750, 10);
|
||||||
|
|
||||||
|
reduceIdle.setText(resourceMap.getString("reduceIdle.text")); // NOI18N
|
||||||
|
reduceIdle.setName("reduceIdle"); // NOI18N
|
||||||
|
getContentPane().add(reduceIdle);
|
||||||
|
reduceIdle.setBounds(20, 420, 300, 22);
|
||||||
|
|
||||||
|
closeIdle.setText(resourceMap.getString("closeIdle.text")); // NOI18N
|
||||||
|
closeIdle.setName("closeIdle"); // NOI18N
|
||||||
|
getContentPane().add(closeIdle);
|
||||||
|
closeIdle.setBounds(20, 450, 370, 22);
|
||||||
|
|
||||||
|
delayIdle.setText(resourceMap.getString("delayIdle.text")); // NOI18N
|
||||||
|
delayIdle.setName("delayIdle"); // NOI18N
|
||||||
|
getContentPane().add(delayIdle);
|
||||||
|
delayIdle.setBounds(20, 480, 400, 22);
|
||||||
|
|
||||||
|
jSeparator3.setName("jSeparator3"); // NOI18N
|
||||||
|
getContentPane().add(jSeparator3);
|
||||||
|
jSeparator3.setBounds(0, 400, 760, 10);
|
||||||
|
|
||||||
|
save.setText(resourceMap.getString("save.text")); // NOI18N
|
||||||
|
save.setName("save"); // NOI18N
|
||||||
|
save.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
saveActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
getContentPane().add(save);
|
||||||
|
save.setBounds(10, 520, 44, 29);
|
||||||
|
|
||||||
|
cancel.setText(resourceMap.getString("cancel.text")); // NOI18N
|
||||||
|
cancel.setName("cancel"); // NOI18N
|
||||||
|
cancel.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
cancelActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
getContentPane().add(cancel);
|
||||||
|
cancel.setBounds(60, 520, 55, 29);
|
||||||
|
|
||||||
|
tunnelName.setText(resourceMap.getString("tunnelName.text")); // NOI18N
|
||||||
|
tunnelName.setName("tunnelName"); // NOI18N
|
||||||
|
getContentPane().add(tunnelName);
|
||||||
|
tunnelName.setBounds(200, 20, 340, 27);
|
||||||
|
|
||||||
|
tunnelType.setText(resourceMap.getString("tunnelType.text")); // NOI18N
|
||||||
|
tunnelType.setName("tunnelType"); // NOI18N
|
||||||
|
getContentPane().add(tunnelType);
|
||||||
|
tunnelType.setBounds(200, 50, 340, 20);
|
||||||
|
|
||||||
|
tunnelPort.setText(resourceMap.getString("tunnelPort.text")); // NOI18N
|
||||||
|
tunnelPort.setName("tunnelPort"); // NOI18N
|
||||||
|
getContentPane().add(tunnelPort);
|
||||||
|
tunnelPort.setBounds(200, 70, 340, 27);
|
||||||
|
|
||||||
|
tunnelDestination.setText(resourceMap.getString("tunnelDestination.text")); // NOI18N
|
||||||
|
tunnelDestination.setName("tunnelDestination"); // NOI18N
|
||||||
|
getContentPane().add(tunnelDestination);
|
||||||
|
tunnelDestination.setBounds(200, 100, 340, 27);
|
||||||
|
|
||||||
|
tunnelProfile.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Interactive connection (Instant messaging)", "Bulk connection (Downloads, websites...)" }));
|
||||||
|
tunnelProfile.setName("tunnelProfile"); // NOI18N
|
||||||
|
getContentPane().add(tunnelProfile);
|
||||||
|
tunnelProfile.setBounds(200, 130, 340, 27);
|
||||||
|
|
||||||
|
tunnelDepth.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0 hop tunnel (no anonymity, low latency)", "1 hop tunnel (low anonymity, low latency)", "2 hop tunnel (medium anonymity, medium latency)", "3 hop tunnel (high anonymity, high latency)" }));
|
||||||
|
tunnelDepth.setName("tunnelDepth"); // NOI18N
|
||||||
|
getContentPane().add(tunnelDepth);
|
||||||
|
tunnelDepth.setBounds(200, 280, 350, 27);
|
||||||
|
|
||||||
|
depthVariance.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0 hop variance (no random, good performance)", "+ 0-1 hop variance (slightly random, lower performance)", "+ 0-2 hop variance (very random, lower performance)", "+/- 0-1 hop variance (slightly random, standard performance)", "+/- 0-2 hop variance (not recommended)" }));
|
||||||
|
depthVariance.setName("depthVariance"); // NOI18N
|
||||||
|
getContentPane().add(depthVariance);
|
||||||
|
depthVariance.setBounds(200, 310, 350, 27);
|
||||||
|
|
||||||
|
tunnelCount.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1 tunnel (low bandwidth usage, low reliability)", "2 tunnels (standard bandwidth usage, standard reliability)", "3 tunnels (high bandwidth usage, high reliability)" }));
|
||||||
|
tunnelCount.setName("tunnelCount"); // NOI18N
|
||||||
|
getContentPane().add(tunnelCount);
|
||||||
|
tunnelCount.setBounds(200, 340, 350, 27);
|
||||||
|
|
||||||
|
backupTunnelCount.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0 backup tunnels (no redundancy, no resource usage)", "1 backup tunnel (low redundancy, low resource usage)", "2 backup tunnels (medium redundancy, medium resource usage)", "3 backup tunnels (high redundancy, high resource usage)" }));
|
||||||
|
backupTunnelCount.setName("backupTunnelCount"); // NOI18N
|
||||||
|
getContentPane().add(backupTunnelCount);
|
||||||
|
backupTunnelCount.setBounds(200, 370, 350, 27);
|
||||||
|
|
||||||
|
changeTunnelState.setText(resourceMap.getString("changeTunnelState.text")); // NOI18N
|
||||||
|
changeTunnelState.setName("changeTunnelState"); // NOI18N
|
||||||
|
getContentPane().add(changeTunnelState);
|
||||||
|
changeTunnelState.setBounds(160, 520, 150, 29);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void saveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveActionPerformed
|
||||||
|
EditBean bean = new EditBean();
|
||||||
|
if(!bean.isClient(tunnelNumber)) {
|
||||||
|
al.actionPerformed(evt);
|
||||||
|
this.dispose();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bean.setTunnel("" + tunnelNumber);
|
||||||
|
bean.setName(tunnelName.getText());
|
||||||
|
bean.setPort(tunnelPort.getText());
|
||||||
|
bean.setTargetDestination(tunnelDestination.getText());
|
||||||
|
if(!bean.getTunnelType(tunnelNumber).equals(TYPE_STREAMR_CLIENT)) {
|
||||||
|
if(tunnelProfile.getSelectedIndex() == TUNNEL_INTERACTIVE) {
|
||||||
|
bean.setProfile("interactive");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bean.setProfile("bulk");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(delayConnect.isSelected()) {
|
||||||
|
bean.setConnectDelay("true");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bean.setConnectDelay("false");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(sharedClient.isSelected()) {
|
||||||
|
bean.setShared(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bean.setShared(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(autoStart.isSelected()) {
|
||||||
|
bean.setStartOnLoad("true");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bean.setTunnelDepth("" + tunnelDepth.getSelectedIndex());
|
||||||
|
|
||||||
|
int variance = depthVariance.getSelectedIndex();
|
||||||
|
if(variance >= 0 && variance <= 2) {
|
||||||
|
bean.setTunnelVariance("" + variance);
|
||||||
|
}
|
||||||
|
else if(variance == 3) {
|
||||||
|
bean.setTunnelVariance("-1");
|
||||||
|
}
|
||||||
|
else if(variance == 4) {
|
||||||
|
bean.setTunnelVariance("-2");
|
||||||
|
}
|
||||||
|
|
||||||
|
bean.setTunnelQuantity("" + tunnelCount.getSelectedIndex() + 1);
|
||||||
|
|
||||||
|
bean.setTunnelBackupQuantity("" + backupTunnelCount.getSelectedIndex());
|
||||||
|
|
||||||
|
if(!bean.getTunnelType(tunnelNumber).equals(TYPE_STREAMR_CLIENT)) {
|
||||||
|
if(reduceIdle.isSelected()) {
|
||||||
|
bean.setReduce("true");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
|
||||||
|
if(closeIdle.isSelected()) {
|
||||||
|
bean.setClose("true");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
}
|
||||||
|
|
||||||
|
if(delayIdle.isSelected()) {
|
||||||
|
bean.setDelayOpen("true");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
al.actionPerformed(evt);
|
||||||
|
this.dispose();
|
||||||
|
}//GEN-LAST:event_saveActionPerformed
|
||||||
|
|
||||||
|
private void cancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelActionPerformed
|
||||||
|
al.actionPerformed(evt);
|
||||||
|
this.dispose();
|
||||||
|
}//GEN-LAST:event_cancelActionPerformed
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JCheckBox autoStart;
|
||||||
|
private javax.swing.JComboBox backupTunnelCount;
|
||||||
|
private javax.swing.JLabel backupTunnelCountLabel;
|
||||||
|
private javax.swing.JButton cancel;
|
||||||
|
private javax.swing.JButton changeTunnelState;
|
||||||
|
private javax.swing.JCheckBox closeIdle;
|
||||||
|
private javax.swing.JCheckBox delayConnect;
|
||||||
|
private javax.swing.JCheckBox delayIdle;
|
||||||
|
private javax.swing.JComboBox depthVariance;
|
||||||
|
private javax.swing.JLabel depthVarianceLabel;
|
||||||
|
private javax.swing.JSeparator jSeparator1;
|
||||||
|
private javax.swing.JSeparator jSeparator2;
|
||||||
|
private javax.swing.JSeparator jSeparator3;
|
||||||
|
private javax.swing.JCheckBox reduceIdle;
|
||||||
|
private javax.swing.JButton save;
|
||||||
|
private javax.swing.JCheckBox sharedClient;
|
||||||
|
private javax.swing.JComboBox tunnelCount;
|
||||||
|
private javax.swing.JLabel tunnelCountLabel;
|
||||||
|
private javax.swing.JComboBox tunnelDepth;
|
||||||
|
private javax.swing.JLabel tunnelDepthLabel;
|
||||||
|
private javax.swing.JTextField tunnelDestination;
|
||||||
|
private javax.swing.JLabel tunnelDestinationLabel;
|
||||||
|
private javax.swing.JTextField tunnelName;
|
||||||
|
private javax.swing.JLabel tunnelNameLabel;
|
||||||
|
private javax.swing.JTextField tunnelPort;
|
||||||
|
private javax.swing.JLabel tunnelPortLabel;
|
||||||
|
private javax.swing.JComboBox tunnelProfile;
|
||||||
|
private javax.swing.JLabel tunnelProfileLabel;
|
||||||
|
private javax.swing.JLabel tunnelType;
|
||||||
|
private javax.swing.JLabel tunnelTypeLabel;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
private int tunnelNumber;
|
||||||
|
private ActionListener al;
|
||||||
|
private static final int TUNNEL_INTERACTIVE = 0;
|
||||||
|
private static final int TUNNEL_BULK = 1;
|
||||||
|
private static final String TYPE_STREAMR_CLIENT = "Streamr client";
|
||||||
|
}
|
@ -322,14 +322,14 @@
|
|||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace min="40" pref="40" max="40" attributes="0"/>
|
<EmptySpace min="40" pref="40" max="40" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
||||||
<Component id="updateDownload" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="updateInform" alignment="0" pref="377" max="32767" attributes="1"/>
|
||||||
<Component id="updateInform" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="updateDownload" alignment="0" max="32767" attributes="1"/>
|
||||||
<Component id="updateDownloadRestart" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="updateDownloadRestart" alignment="0" max="32767" attributes="1"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="9" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace pref="339" max="32767" attributes="0"/>
|
<EmptySpace pref="339" max="32767" attributes="0"/>
|
||||||
@ -439,11 +439,11 @@
|
|||||||
<Layout>
|
<Layout>
|
||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="1" attributes="0">
|
||||||
<Component id="serverFrame" alignment="1" pref="538" max="32767" attributes="0"/>
|
|
||||||
<Component id="tunnelsExplanation" alignment="0" pref="538" max="32767" attributes="0"/>
|
<Component id="tunnelsExplanation" alignment="0" pref="538" max="32767" attributes="0"/>
|
||||||
|
<Component id="serverFrame" alignment="1" pref="538" max="32767" attributes="0"/>
|
||||||
<Component id="clientTunnelLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="clientTunnelLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="clientFrame" alignment="0" pref="538" max="32767" attributes="0"/>
|
<Component id="clientFrame" alignment="0" pref="538" max="32767" attributes="0"/>
|
||||||
<Component id="serverTunnelLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="serverTunnelLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
@ -463,9 +463,9 @@
|
|||||||
<Component id="serverTunnelLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="serverTunnelLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="serverFrame" pref="122" max="32767" attributes="0"/>
|
<Component id="serverFrame" pref="122" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="tunnelsExplanation" min="-2" pref="65" max="-2" attributes="0"/>
|
<Component id="tunnelsExplanation" min="-2" pref="45" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="32" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
@ -477,6 +477,51 @@
|
|||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTable" name="clientTable">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
|
||||||
|
<Table columnCount="4" rowCount="0">
|
||||||
|
<Column editable="true" title="Name" type="java.lang.Object"/>
|
||||||
|
<Column editable="true" title="Type" type="java.lang.Object"/>
|
||||||
|
<Column editable="true" title="Address" type="java.lang.Object"/>
|
||||||
|
<Column editable="true" title="Status" type="java.lang.Object"/>
|
||||||
|
</Table>
|
||||||
|
</Property>
|
||||||
|
<Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
|
||||||
|
<TableColumnModel selectionModel="0">
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="clientTable.columnModel.title0"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="clientTable.columnModel.title1"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="clientTable.columnModel.title2"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="clientTable.columnModel.title3"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
</TableColumnModel>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="clientTable" noResource="true"/>
|
||||||
|
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
||||||
|
<TableHeader reorderingAllowed="true" resizingAllowed="true"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="clientTableMouseClicked"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Container class="javax.swing.JScrollPane" name="serverFrame">
|
<Container class="javax.swing.JScrollPane" name="serverFrame">
|
||||||
<Properties>
|
<Properties>
|
||||||
@ -484,6 +529,45 @@
|
|||||||
</Properties>
|
</Properties>
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTable" name="serverTable">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.editors2.TableModelEditor">
|
||||||
|
<Table columnCount="3" rowCount="4">
|
||||||
|
<Column editable="true" title="Name" type="java.lang.Object"/>
|
||||||
|
<Column editable="true" title="Address" type="java.lang.Object"/>
|
||||||
|
<Column editable="true" title="Status" type="java.lang.Object"/>
|
||||||
|
</Table>
|
||||||
|
</Property>
|
||||||
|
<Property name="columnModel" type="javax.swing.table.TableColumnModel" editor="org.netbeans.modules.form.editors2.TableColumnModelEditor">
|
||||||
|
<TableColumnModel selectionModel="0">
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="serverTable.columnModel.title0"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="serverTable.columnModel.title1"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
<Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true">
|
||||||
|
<Title resourceKey="serverTable.columnModel.title2"/>
|
||||||
|
<Editor/>
|
||||||
|
<Renderer/>
|
||||||
|
</Column>
|
||||||
|
</TableColumnModel>
|
||||||
|
</Property>
|
||||||
|
<Property name="name" type="java.lang.String" value="serverTable" noResource="true"/>
|
||||||
|
<Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor">
|
||||||
|
<TableHeader reorderingAllowed="true" resizingAllowed="true"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="serverTableMouseClicked"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Component class="javax.swing.JLabel" name="tunnelsExplanation">
|
<Component class="javax.swing.JLabel" name="tunnelsExplanation">
|
||||||
<Properties>
|
<Properties>
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
package net.i2p.desktopgui.gui;
|
package net.i2p.desktopgui.gui;
|
||||||
|
|
||||||
import java.awt.Desktop;
|
import java.awt.Desktop;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
@ -23,6 +24,9 @@ import net.i2p.router.web.NewsFetcher;
|
|||||||
import net.i2p.desktopgui.router.configuration.UpdateHandler;
|
import net.i2p.desktopgui.router.configuration.UpdateHandler;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import javax.swing.SwingWorker;
|
import javax.swing.SwingWorker;
|
||||||
|
import net.i2p.i2ptunnel.web.IndexBean;
|
||||||
|
import javax.swing.table.DefaultTableModel;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -43,6 +47,7 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
private void extraInitComponents() {
|
private void extraInitComponents() {
|
||||||
initSpeedTab();
|
initSpeedTab();
|
||||||
initUpdateTab();
|
initUpdateTab();
|
||||||
|
initTunnelTab();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initSpeedTab() {
|
private void initSpeedTab() {
|
||||||
@ -87,6 +92,48 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void initTunnelTab() {
|
||||||
|
while(((DefaultTableModel) clientTable.getModel()).getRowCount() > 0) {
|
||||||
|
((DefaultTableModel) clientTable.getModel()).removeRow(0);
|
||||||
|
}
|
||||||
|
while(((DefaultTableModel) serverTable.getModel()).getRowCount() > 0) {
|
||||||
|
((DefaultTableModel) serverTable.getModel()).removeRow(0);
|
||||||
|
}
|
||||||
|
IndexBean bean = new IndexBean();
|
||||||
|
for(int i=0; i<bean.getTunnelCount(); i++) {
|
||||||
|
if(bean.isClient(i)) {
|
||||||
|
Object[] row = {bean.getTunnelName(i), bean.getTunnelType(i),
|
||||||
|
bean.getClientInterface(i) + ":" + bean.getClientPort(i),
|
||||||
|
getTunnelStatus(bean.getTunnelStatus(i))};
|
||||||
|
((DefaultTableModel) clientTable.getModel()).addRow(row);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Object[] row = {bean.getTunnelName(i),
|
||||||
|
bean.getServerTarget(i),
|
||||||
|
getTunnelStatus(bean.getTunnelStatus(i))};
|
||||||
|
((DefaultTableModel) serverTable.getModel()).addRow(row);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTunnelStatus(int status) {
|
||||||
|
if(status == IndexBean.NOT_RUNNING) {
|
||||||
|
return "Not running";
|
||||||
|
}
|
||||||
|
else if(status == IndexBean.RUNNING) {
|
||||||
|
return "Running";
|
||||||
|
}
|
||||||
|
else if(status == IndexBean.STANDBY) {
|
||||||
|
return "Standby";
|
||||||
|
}
|
||||||
|
else if(status == IndexBean.STARTING) {
|
||||||
|
return "Starting";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return "Error: status not found";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** This method is called from within the constructor to
|
/** This method is called from within the constructor to
|
||||||
* initialize the form.
|
* initialize the form.
|
||||||
* WARNING: Do NOT modify this code. The content of this method is
|
* WARNING: Do NOT modify this code. The content of this method is
|
||||||
@ -125,7 +172,9 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
advancedUpdateConfig = new javax.swing.JToggleButton();
|
advancedUpdateConfig = new javax.swing.JToggleButton();
|
||||||
tunnelPanel = new javax.swing.JPanel();
|
tunnelPanel = new javax.swing.JPanel();
|
||||||
clientFrame = new javax.swing.JScrollPane();
|
clientFrame = new javax.swing.JScrollPane();
|
||||||
|
clientTable = new javax.swing.JTable();
|
||||||
serverFrame = new javax.swing.JScrollPane();
|
serverFrame = new javax.swing.JScrollPane();
|
||||||
|
serverTable = new javax.swing.JTable();
|
||||||
tunnelsExplanation = new javax.swing.JLabel();
|
tunnelsExplanation = new javax.swing.JLabel();
|
||||||
clientTunnelLabel = new javax.swing.JLabel();
|
clientTunnelLabel = new javax.swing.JLabel();
|
||||||
serverTunnelLabel = new javax.swing.JLabel();
|
serverTunnelLabel = new javax.swing.JLabel();
|
||||||
@ -334,11 +383,11 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
.addComponent(updateNow))))
|
.addComponent(updateNow))))
|
||||||
.addGroup(updatesPanelLayout.createSequentialGroup()
|
.addGroup(updatesPanelLayout.createSequentialGroup()
|
||||||
.addGap(40, 40, 40)
|
.addGap(40, 40, 40)
|
||||||
.addGroup(updatesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(updatesPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
||||||
.addComponent(updateDownload)
|
.addComponent(updateInform, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE)
|
||||||
.addComponent(updateInform)
|
.addComponent(updateDownload, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
.addComponent(updateDownloadRestart))))
|
.addComponent(updateDownloadRestart, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
|
||||||
.addGap(9, 9, 9))
|
.addContainerGap())
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, updatesPanelLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, updatesPanelLayout.createSequentialGroup()
|
||||||
.addContainerGap(339, Short.MAX_VALUE)
|
.addContainerGap(339, Short.MAX_VALUE)
|
||||||
.addComponent(advancedUpdateConfig)
|
.addComponent(advancedUpdateConfig)
|
||||||
@ -370,8 +419,50 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
|
|
||||||
clientFrame.setName("clientFrame"); // NOI18N
|
clientFrame.setName("clientFrame"); // NOI18N
|
||||||
|
|
||||||
|
clientTable.setModel(new javax.swing.table.DefaultTableModel(
|
||||||
|
new Object [][] {
|
||||||
|
|
||||||
|
},
|
||||||
|
new String [] {
|
||||||
|
"Name", "Type", "Address", "Status"
|
||||||
|
}
|
||||||
|
));
|
||||||
|
clientTable.setName("clientTable"); // NOI18N
|
||||||
|
clientTable.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||||
|
public void mouseClicked(java.awt.event.MouseEvent evt) {
|
||||||
|
clientTableMouseClicked(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
clientFrame.setViewportView(clientTable);
|
||||||
|
clientTable.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("clientTable.columnModel.title0")); // NOI18N
|
||||||
|
clientTable.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("clientTable.columnModel.title1")); // NOI18N
|
||||||
|
clientTable.getColumnModel().getColumn(2).setHeaderValue(resourceMap.getString("clientTable.columnModel.title2")); // NOI18N
|
||||||
|
clientTable.getColumnModel().getColumn(3).setHeaderValue(resourceMap.getString("clientTable.columnModel.title3")); // NOI18N
|
||||||
|
|
||||||
serverFrame.setName("serverFrame"); // NOI18N
|
serverFrame.setName("serverFrame"); // NOI18N
|
||||||
|
|
||||||
|
serverTable.setModel(new javax.swing.table.DefaultTableModel(
|
||||||
|
new Object [][] {
|
||||||
|
{null, null, null},
|
||||||
|
{null, null, null},
|
||||||
|
{null, null, null},
|
||||||
|
{null, null, null}
|
||||||
|
},
|
||||||
|
new String [] {
|
||||||
|
"Name", "Address", "Status"
|
||||||
|
}
|
||||||
|
));
|
||||||
|
serverTable.setName("serverTable"); // NOI18N
|
||||||
|
serverTable.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||||
|
public void mouseClicked(java.awt.event.MouseEvent evt) {
|
||||||
|
serverTableMouseClicked(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
serverFrame.setViewportView(serverTable);
|
||||||
|
serverTable.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("serverTable.columnModel.title0")); // NOI18N
|
||||||
|
serverTable.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("serverTable.columnModel.title1")); // NOI18N
|
||||||
|
serverTable.getColumnModel().getColumn(2).setHeaderValue(resourceMap.getString("serverTable.columnModel.title2")); // NOI18N
|
||||||
|
|
||||||
tunnelsExplanation.setText(resourceMap.getString("tunnelsExplanation.text")); // NOI18N
|
tunnelsExplanation.setText(resourceMap.getString("tunnelsExplanation.text")); // NOI18N
|
||||||
tunnelsExplanation.setName("tunnelsExplanation"); // NOI18N
|
tunnelsExplanation.setName("tunnelsExplanation"); // NOI18N
|
||||||
|
|
||||||
@ -385,14 +476,14 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
tunnelPanel.setLayout(tunnelPanelLayout);
|
tunnelPanel.setLayout(tunnelPanelLayout);
|
||||||
tunnelPanelLayout.setHorizontalGroup(
|
tunnelPanelLayout.setHorizontalGroup(
|
||||||
tunnelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
tunnelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(tunnelPanelLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, tunnelPanelLayout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addContainerGap()
|
||||||
.addGroup(tunnelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(tunnelPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
||||||
.addComponent(serverFrame, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
|
.addComponent(tunnelsExplanation, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
|
||||||
.addComponent(tunnelsExplanation, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
|
.addComponent(serverFrame, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
|
||||||
.addComponent(clientTunnelLabel)
|
.addComponent(clientTunnelLabel, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(clientFrame, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
|
.addComponent(clientFrame, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 538, Short.MAX_VALUE)
|
||||||
.addComponent(serverTunnelLabel))
|
.addComponent(serverTunnelLabel, javax.swing.GroupLayout.Alignment.LEADING))
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
tunnelPanelLayout.setVerticalGroup(
|
tunnelPanelLayout.setVerticalGroup(
|
||||||
@ -407,8 +498,8 @@ public class GeneralConfiguration extends javax.swing.JFrame {
|
|||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(serverFrame, javax.swing.GroupLayout.DEFAULT_SIZE, 122, Short.MAX_VALUE)
|
.addComponent(serverFrame, javax.swing.GroupLayout.DEFAULT_SIZE, 122, Short.MAX_VALUE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(tunnelsExplanation, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(tunnelsExplanation, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addContainerGap())
|
.addGap(32, 32, 32))
|
||||||
);
|
);
|
||||||
|
|
||||||
settingsPanel.addTab(resourceMap.getString("tunnelPanel.TabConstraints.tabTitle"), tunnelPanel); // NOI18N
|
settingsPanel.addTab(resourceMap.getString("tunnelPanel.TabConstraints.tabTitle"), tunnelPanel); // NOI18N
|
||||||
@ -584,6 +675,68 @@ private void advancedUpdateConfigActionPerformed(java.awt.event.ActionEvent evt)
|
|||||||
}
|
}
|
||||||
}//GEN-LAST:event_advancedUpdateConfigActionPerformed
|
}//GEN-LAST:event_advancedUpdateConfigActionPerformed
|
||||||
|
|
||||||
|
private void clientTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_clientTableMouseClicked
|
||||||
|
int row = clientTable.getSelectedRow();
|
||||||
|
if(row == -1) { //No selected row
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
IndexBean bean = new IndexBean();
|
||||||
|
/*
|
||||||
|
* TODO: This is not entirely good: if one adds/removes a tunnel without desktopgui, this number will be wrong
|
||||||
|
*/
|
||||||
|
int clientNumber = 0;
|
||||||
|
int i = 0;
|
||||||
|
for(clientNumber=0; clientNumber<bean.getTunnelCount(); clientNumber++) {
|
||||||
|
if(bean.isClient(clientNumber)) {
|
||||||
|
if(i == row) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new ClientTunnelWindow(clientNumber, new ActionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
initTunnelTab();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_clientTableMouseClicked
|
||||||
|
|
||||||
|
private void serverTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_serverTableMouseClicked
|
||||||
|
int row = serverTable.getSelectedRow();
|
||||||
|
if(row == -1) { //No selected row
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
IndexBean bean = new IndexBean();
|
||||||
|
/*
|
||||||
|
* TODO: This is not entirely good: if one adds/removes a tunnel without desktopgui, this number will be wrong
|
||||||
|
*/
|
||||||
|
int serverNumber = 0;
|
||||||
|
int i = 0;
|
||||||
|
for(serverNumber=0; serverNumber<bean.getTunnelCount(); serverNumber++) {
|
||||||
|
if(!bean.isClient(serverNumber)) {
|
||||||
|
if(i == row) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new ServerTunnelWindow(serverNumber, new ActionListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
initTunnelTab();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_serverTableMouseClicked
|
||||||
|
|
||||||
protected void initUsage(String upload, String download) {
|
protected void initUsage(String upload, String download) {
|
||||||
uploadgb.setText("" + SpeedHelper.calculateMonthlyUsage(Integer.parseInt(upload)));
|
uploadgb.setText("" + SpeedHelper.calculateMonthlyUsage(Integer.parseInt(upload)));
|
||||||
downloadgb.setText("" + SpeedHelper.calculateMonthlyUsage(Integer.parseInt(download)));
|
downloadgb.setText("" + SpeedHelper.calculateMonthlyUsage(Integer.parseInt(download)));
|
||||||
@ -646,6 +799,7 @@ private void advancedUpdateConfigActionPerformed(java.awt.event.ActionEvent evt)
|
|||||||
private javax.swing.JToggleButton cancel;
|
private javax.swing.JToggleButton cancel;
|
||||||
private javax.swing.JToggleButton checkUpdates;
|
private javax.swing.JToggleButton checkUpdates;
|
||||||
private javax.swing.JScrollPane clientFrame;
|
private javax.swing.JScrollPane clientFrame;
|
||||||
|
private javax.swing.JTable clientTable;
|
||||||
private javax.swing.JLabel clientTunnelLabel;
|
private javax.swing.JLabel clientTunnelLabel;
|
||||||
private javax.swing.JLabel downloadSpeedLabel;
|
private javax.swing.JLabel downloadSpeedLabel;
|
||||||
private javax.swing.JLabel downloadUsageLabel;
|
private javax.swing.JLabel downloadUsageLabel;
|
||||||
@ -657,6 +811,7 @@ private void advancedUpdateConfigActionPerformed(java.awt.event.ActionEvent evt)
|
|||||||
private javax.swing.JPanel networkPanel;
|
private javax.swing.JPanel networkPanel;
|
||||||
private javax.swing.JToggleButton ok;
|
private javax.swing.JToggleButton ok;
|
||||||
private javax.swing.JScrollPane serverFrame;
|
private javax.swing.JScrollPane serverFrame;
|
||||||
|
private javax.swing.JTable serverTable;
|
||||||
private javax.swing.JLabel serverTunnelLabel;
|
private javax.swing.JLabel serverTunnelLabel;
|
||||||
private javax.swing.JTabbedPane settingsPanel;
|
private javax.swing.JTabbedPane settingsPanel;
|
||||||
private javax.swing.JPanel speedPanel;
|
private javax.swing.JPanel speedPanel;
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="3"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="Form" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="2"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,44,0,0,1,-112"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout">
|
||||||
|
<Property name="useNullLayout" type="boolean" value="true"/>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="jLabel1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" resourceKey="jLabel1.text"/>
|
||||||
|
<Property name="name" type="java.lang.String" value="jLabel1" noResource="true"/>
|
||||||
|
</Properties>
|
||||||
|
<Constraints>
|
||||||
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout" value="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout$AbsoluteConstraintsDescription">
|
||||||
|
<AbsoluteConstraints x="10" y="10" width="-1" height="-1"/>
|
||||||
|
</Constraint>
|
||||||
|
</Constraints>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* To change this template, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ServerTunnelWindow.java
|
||||||
|
*
|
||||||
|
* Created on 11-jun-2009, 14:55:53
|
||||||
|
*/
|
||||||
|
|
||||||
|
package net.i2p.desktopgui.gui;
|
||||||
|
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mathias
|
||||||
|
*/
|
||||||
|
public class ServerTunnelWindow extends javax.swing.JFrame {
|
||||||
|
|
||||||
|
/** Creates new form ServerTunnelWindow */
|
||||||
|
public ServerTunnelWindow(int tunnelNumber, ActionListener al) {
|
||||||
|
initComponents();
|
||||||
|
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
||||||
|
this.setSize(600, 600);
|
||||||
|
this.setLocationRelativeTo(null);
|
||||||
|
this.requestFocus();
|
||||||
|
this.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method is called from within the constructor to
|
||||||
|
* initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is
|
||||||
|
* always regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
jLabel1 = new javax.swing.JLabel();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
|
||||||
|
setName("Form"); // NOI18N
|
||||||
|
getContentPane().setLayout(null);
|
||||||
|
|
||||||
|
org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(net.i2p.desktopgui.desktopgui.Main.class).getContext().getResourceMap(ServerTunnelWindow.class);
|
||||||
|
jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
|
||||||
|
jLabel1.setName("jLabel1"); // NOI18N
|
||||||
|
getContentPane().add(jLabel1);
|
||||||
|
jLabel1.setBounds(10, 10, 43, 17);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JLabel jLabel1;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
# To change this template, choose Tools | Templates
|
||||||
|
# and open the template in the editor.
|
||||||
|
|
||||||
|
Form.title=Client Tunnel Configuration
|
||||||
|
tunnelNameLabel.text=Name:
|
||||||
|
tunnelTypeLabel.text=Type:
|
||||||
|
tunnelType.text=jLabel10
|
||||||
|
tunnelName.text=jTextField1
|
||||||
|
tunnelPortLabel.text=Port:
|
||||||
|
tunnelPort.text=jTextField2
|
||||||
|
tunnelDestination.text=jTextField3
|
||||||
|
tunnelDestinationLabel.text=Destination:
|
||||||
|
tunnelProfileLabel.text=Profile:
|
||||||
|
delayConnect.text=Delay connect
|
||||||
|
sharedClient.text=Shared client
|
||||||
|
autoStart.text=Auto start
|
||||||
|
tunnelDepthLabel.text=Tunnel depth:
|
||||||
|
depthVarianceLabel.text=Depth variance:
|
||||||
|
tunnelCountLabel.text=Tunnel count:
|
||||||
|
backupTunnelCountLabel.text=Backup tunnel count:
|
||||||
|
reduceIdle.text=Reduce tunnel count when idle
|
||||||
|
closeIdle.text=Close tunnels when idle
|
||||||
|
delayIdle.text=Delay opening of tunnels when idle
|
||||||
|
save.text=Save
|
||||||
|
cancel.text=Cancel
|
||||||
|
changeTunnelState.text=Start Tunnel
|
@ -13,7 +13,7 @@ downloadspeed.text=jTextField2
|
|||||||
uploadgb.text=jTextField3
|
uploadgb.text=jTextField3
|
||||||
downloadgb.text=jTextField4
|
downloadgb.text=jTextField4
|
||||||
updateMethod.text=What is your preferred automatic update setting?
|
updateMethod.text=What is your preferred automatic update setting?
|
||||||
updateInform.text=Only inform about updates
|
updateInform.text=Only inform about updates (not advised)
|
||||||
updateDownload.text=Download and verify update file, do not restart
|
updateDownload.text=Download and verify update file, do not restart
|
||||||
updateDownloadRestart.text=Download, verify and restart
|
updateDownloadRestart.text=Download, verify and restart
|
||||||
checkUpdates.text=Check for updates now
|
checkUpdates.text=Check for updates now
|
||||||
@ -21,9 +21,17 @@ updateNow.text=Update available: update now
|
|||||||
advancedUpdateConfig.text=Advanced update configuration
|
advancedUpdateConfig.text=Advanced update configuration
|
||||||
clientTunnelLabel.text=Client tunnels:
|
clientTunnelLabel.text=Client tunnels:
|
||||||
serverTunnelLabel.text=Server tunnels:
|
serverTunnelLabel.text=Server tunnels:
|
||||||
tunnelsExplanation.text=Tunnel explanation
|
tunnelsExplanation.text=Click on a tunnel to view and change its configuration. + Tunnel explanation
|
||||||
uploadUsageLabel.text=Monthly usage:
|
uploadUsageLabel.text=Monthly usage:
|
||||||
downloadUsageLabel.text=Monthly usage:
|
downloadUsageLabel.text=Monthly usage:
|
||||||
gbUploadLabel.text=GB
|
gbUploadLabel.text=GB
|
||||||
gbDownloadLabel.text=GB
|
gbDownloadLabel.text=GB
|
||||||
uploadDownloadExplanation.text=Explanation ...
|
uploadDownloadExplanation.text=Explanation ...
|
||||||
|
clientTable.columnModel.title3=Status
|
||||||
|
clientTable.columnModel.title2=Address
|
||||||
|
clientTable.columnModel.title1=Type
|
||||||
|
clientTable.columnModel.title0=Name
|
||||||
|
serverTable.columnModel.title0=Name
|
||||||
|
serverTable.columnModel.title3=Title 4
|
||||||
|
serverTable.columnModel.title2=Status
|
||||||
|
serverTable.columnModel.title1=Address
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
jLabel1.text=Name:
|
@ -9,7 +9,7 @@ import net.i2p.desktopgui.router.RouterHelper;
|
|||||||
public class UpdateHelper {
|
public class UpdateHelper {
|
||||||
|
|
||||||
public static final String PROP_NEWS_URL = "router.newsURL";
|
public static final String PROP_NEWS_URL = "router.newsURL";
|
||||||
public static final String DEFAULT_NEWS_URL = "http://complication.i2p/news.xml";
|
public static final String DEFAULT_NEWS_URL = "http://echelon.i2p/i2p/news.xml";
|
||||||
|
|
||||||
public static final String PROP_REFRESH_FREQUENCY = "router.newsRefreshFrequency";
|
public static final String PROP_REFRESH_FREQUENCY = "router.newsRefreshFrequency";
|
||||||
public static final String DEFAULT_REFRESH_FREQUENCY = 24*60*60*1000 + "";
|
public static final String DEFAULT_REFRESH_FREQUENCY = 24*60*60*1000 + "";
|
||||||
@ -31,7 +31,6 @@ public class UpdateHelper {
|
|||||||
public static final String DEFAULT_UPDATE_URL =
|
public static final String DEFAULT_UPDATE_URL =
|
||||||
"http://echelon.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://www.i2p2.i2p/_static/i2pupdate.sud\r\n" +
|
"http://www.i2p2.i2p/_static/i2pupdate.sud\r\n" +
|
||||||
"http://update.postman.i2p/i2pupdate.sud" ;
|
"http://update.postman.i2p/i2pupdate.sud" ;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ public class ConfigClientsHelper extends HelperBase {
|
|||||||
public String getForm1() {
|
public String getForm1() {
|
||||||
StringBuffer buf = new StringBuffer(1024);
|
StringBuffer buf = new StringBuffer(1024);
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td>Client</td><td>Run at Startup?</td><td>Start Now</td><td>Class and arguments</td></tr>\n");
|
buf.append("<tr><th>Client</th><th>Run at Startup?</th><th>Start Now</th><th>Class and arguments</th></tr>\n");
|
||||||
|
|
||||||
List clients = ClientAppConfig.getClientApps(_context);
|
List clients = ClientAppConfig.getClientApps(_context);
|
||||||
for (int cur = 0; cur < clients.size(); cur++) {
|
for (int cur = 0; cur < clients.size(); cur++) {
|
||||||
@ -31,7 +31,7 @@ public class ConfigClientsHelper extends HelperBase {
|
|||||||
public String getForm2() {
|
public String getForm2() {
|
||||||
StringBuffer buf = new StringBuffer(1024);
|
StringBuffer buf = new StringBuffer(1024);
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td>WebApp</td><td>Run at Startup?</td><td>Start Now</td><td>Description</td></tr>\n");
|
buf.append("<tr><th>WebApp</th><th>Run at Startup?</th><th>Start Now</th><th>Description</th></tr>\n");
|
||||||
Properties props = RouterConsoleRunner.webAppProperties();
|
Properties props = RouterConsoleRunner.webAppProperties();
|
||||||
Set keys = new TreeSet(props.keySet());
|
Set keys = new TreeSet(props.keySet());
|
||||||
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
for (Iterator iter = keys.iterator(); iter.hasNext(); ) {
|
||||||
|
@ -56,27 +56,27 @@ public class ConfigTunnelsHelper extends HelperBase {
|
|||||||
private static final int MIN_NEG_VARIANCE = -1;
|
private static final int MIN_NEG_VARIANCE = -1;
|
||||||
private void renderForm(StringBuffer buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) {
|
private void renderForm(StringBuffer buf, int index, String prefix, String name, TunnelPoolSettings in, TunnelPoolSettings out) {
|
||||||
|
|
||||||
buf.append("<tr><td colspan=\"3\"><b><a name=\"").append(prefix).append("\">");
|
buf.append("<tr><th colspan=\"3\"><a name=\"").append(prefix).append("\">");
|
||||||
buf.append(name).append("</a></b></td></tr>\n");
|
buf.append(name).append("</a></th></tr>\n");
|
||||||
if (in.getLength() <= 0 ||
|
if (in.getLength() <= 0 ||
|
||||||
in.getLength() + in.getLengthVariance() <= 0 ||
|
in.getLength() + in.getLengthVariance() <= 0 ||
|
||||||
out.getLength() <= 0 ||
|
out.getLength() <= 0 ||
|
||||||
out.getLength() + out.getLengthVariance() <= 0)
|
out.getLength() + out.getLengthVariance() <= 0)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 0-hop tunnels</font></th></tr>");
|
||||||
else if (in.getLength() <= 1 ||
|
else if (in.getLength() <= 1 ||
|
||||||
in.getLength() + in.getLengthVariance() <= 1 ||
|
in.getLength() + in.getLengthVariance() <= 1 ||
|
||||||
out.getLength() <= 1 ||
|
out.getLength() <= 1 ||
|
||||||
out.getLength() + out.getLengthVariance() <= 1)
|
out.getLength() + out.getLengthVariance() <= 1)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">ANONYMITY WARNING - Settings include 1-hop tunnels</font></th></tr>");
|
||||||
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
|
if (in.getLength() + Math.abs(in.getLengthVariance()) >= WARN_LENGTH ||
|
||||||
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
|
out.getLength() + Math.abs(out.getLengthVariance()) >= WARN_LENGTH)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include very long tunnels</font></th></tr>");
|
||||||
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
|
if (in.getQuantity() + in.getBackupQuantity() >= WARN_QUANTITY ||
|
||||||
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
|
out.getQuantity() + out.getBackupQuantity() >= WARN_QUANTITY)
|
||||||
buf.append("<tr><td colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities</font></td></tr>");
|
buf.append("<tr><th colspan=\"3\"><font color=\"red\">PERFORMANCE WARNING - Settings include high tunnel quantities</font></th></tr>");
|
||||||
|
|
||||||
|
|
||||||
buf.append("<tr><td></td><td><b>Inbound</b></td><td><b>Outbound</b></td></tr>\n");
|
buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n");
|
||||||
|
|
||||||
// tunnel depth
|
// tunnel depth
|
||||||
buf.append("<tr><td>Depth</td>\n");
|
buf.append("<tr><td>Depth</td>\n");
|
||||||
|
@ -19,7 +19,8 @@ public class ConfigUpdateHandler extends FormHandler {
|
|||||||
|
|
||||||
public static final String PROP_NEWS_URL = "router.newsURL";
|
public static final String PROP_NEWS_URL = "router.newsURL";
|
||||||
// public static final String DEFAULT_NEWS_URL = "http://dev.i2p.net/cgi-bin/cvsweb.cgi/i2p/news.xml?rev=HEAD";
|
// public static final String DEFAULT_NEWS_URL = "http://dev.i2p.net/cgi-bin/cvsweb.cgi/i2p/news.xml?rev=HEAD";
|
||||||
public static final String DEFAULT_NEWS_URL = "http://complication.i2p/news.xml";
|
public static final String OLD_DEFAULT_NEWS_URL = "http://complication.i2p/news.xml";
|
||||||
|
public static final String DEFAULT_NEWS_URL = "http://echelon.i2p/i2p/news.xml";
|
||||||
public static final String PROP_REFRESH_FREQUENCY = "router.newsRefreshFrequency";
|
public static final String PROP_REFRESH_FREQUENCY = "router.newsRefreshFrequency";
|
||||||
public static final String DEFAULT_REFRESH_FREQUENCY = 24*60*60*1000 + "";
|
public static final String DEFAULT_REFRESH_FREQUENCY = 24*60*60*1000 + "";
|
||||||
public static final String PROP_UPDATE_POLICY = "router.updatePolicy";
|
public static final String PROP_UPDATE_POLICY = "router.updatePolicy";
|
||||||
@ -57,7 +58,7 @@ public class ConfigUpdateHandler extends FormHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( (_newsURL != null) && (_newsURL.length() > 0) ) {
|
if ( (_newsURL != null) && (_newsURL.length() > 0) ) {
|
||||||
String oldURL = _context.router().getConfigSetting(PROP_NEWS_URL);
|
String oldURL = ConfigUpdateHelper.getNewsURL(_context);
|
||||||
if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
|
if ( (oldURL == null) || (!_newsURL.equals(oldURL)) ) {
|
||||||
_context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
|
_context.router().setConfigSetting(PROP_NEWS_URL, _newsURL);
|
||||||
addFormNotice("Updating news URL to " + _newsURL);
|
addFormNotice("Updating news URL to " + _newsURL);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package net.i2p.router.web;
|
package net.i2p.router.web;
|
||||||
|
|
||||||
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.crypto.TrustedUpdate;
|
import net.i2p.crypto.TrustedUpdate;
|
||||||
import net.i2p.data.DataHelper;
|
import net.i2p.data.DataHelper;
|
||||||
import net.i2p.router.RouterContext;
|
import net.i2p.router.RouterContext;
|
||||||
@ -12,8 +13,14 @@ public class ConfigUpdateHelper extends HelperBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getNewsURL() {
|
public String getNewsURL() {
|
||||||
String url = _context.getProperty(ConfigUpdateHandler.PROP_NEWS_URL);
|
return getNewsURL(_context);
|
||||||
if (url != null)
|
}
|
||||||
|
|
||||||
|
/** hack to replace the old news location with the new one, even if they have saved
|
||||||
|
the update page at some point */
|
||||||
|
public static String getNewsURL(I2PAppContext ctx) {
|
||||||
|
String url = ctx.getProperty(ConfigUpdateHandler.PROP_NEWS_URL);
|
||||||
|
if (url != null && !url.equals(ConfigUpdateHandler.OLD_DEFAULT_NEWS_URL))
|
||||||
return url;
|
return url;
|
||||||
else
|
else
|
||||||
return ConfigUpdateHandler.DEFAULT_NEWS_URL;
|
return ConfigUpdateHandler.DEFAULT_NEWS_URL;
|
||||||
@ -26,18 +33,10 @@ public class ConfigUpdateHelper extends HelperBase {
|
|||||||
return ConfigUpdateHandler.DEFAULT_UPDATE_URL;
|
return ConfigUpdateHandler.DEFAULT_UPDATE_URL;
|
||||||
}
|
}
|
||||||
public String getProxyHost() {
|
public String getProxyHost() {
|
||||||
String host = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST);
|
return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
if (host != null)
|
|
||||||
return host;
|
|
||||||
else
|
|
||||||
return ConfigUpdateHandler.DEFAULT_PROXY_HOST;
|
|
||||||
}
|
}
|
||||||
public String getProxyPort() {
|
public String getProxyPort() {
|
||||||
String port = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT);
|
return _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT);
|
||||||
if (port != null)
|
|
||||||
return port;
|
|
||||||
else
|
|
||||||
return ConfigUpdateHandler.DEFAULT_PROXY_PORT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUpdateThroughProxy() {
|
public String getUpdateThroughProxy() {
|
||||||
@ -76,8 +75,7 @@ public class ConfigUpdateHelper extends HelperBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getUpdatePolicySelectBox() {
|
public String getUpdatePolicySelectBox() {
|
||||||
String policy = _context.getProperty(ConfigUpdateHandler.PROP_UPDATE_POLICY);
|
String policy = _context.getProperty(ConfigUpdateHandler.PROP_UPDATE_POLICY, ConfigUpdateHandler.DEFAULT_UPDATE_POLICY);
|
||||||
if (policy == null) policy = ConfigUpdateHandler.DEFAULT_UPDATE_POLICY;
|
|
||||||
|
|
||||||
StringBuffer buf = new StringBuffer(256);
|
StringBuffer buf = new StringBuffer(256);
|
||||||
buf.append("<select name=\"updatePolicy\">");
|
buf.append("<select name=\"updatePolicy\">");
|
||||||
|
@ -113,7 +113,7 @@ public class NewsFetcher implements Runnable, EepGet.StatusListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void fetchNews() {
|
public void fetchNews() {
|
||||||
String newsURL = _context.getProperty(ConfigUpdateHandler.PROP_NEWS_URL, ConfigUpdateHandler.DEFAULT_NEWS_URL);
|
String newsURL = ConfigUpdateHelper.getNewsURL(_context);
|
||||||
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
boolean shouldProxy = Boolean.valueOf(_context.getProperty(ConfigUpdateHandler.PROP_SHOULD_PROXY, ConfigUpdateHandler.DEFAULT_SHOULD_PROXY)).booleanValue();
|
||||||
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
String proxyHost = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_HOST, ConfigUpdateHandler.DEFAULT_PROXY_HOST);
|
||||||
String port = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT);
|
String port = _context.getProperty(ConfigUpdateHandler.PROP_PROXY_PORT, ConfigUpdateHandler.DEFAULT_PROXY_PORT);
|
||||||
|
@ -366,7 +366,7 @@ public class SummaryHelper extends HelperBase {
|
|||||||
buf.append("<i>No leases</i><br />\n");
|
buf.append("<i>No leases</i><br />\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buf.append("<hr />\n");
|
// buf.append("<hr />\n");
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +139,8 @@ public class UpdateHandler {
|
|||||||
try {
|
try {
|
||||||
EepGet get = null;
|
EepGet get = null;
|
||||||
if (shouldProxy)
|
if (shouldProxy)
|
||||||
get = new EepGet(_context, proxyHost, proxyPort, 20, _updateFile, updateURL, false);
|
// 40 retries!!
|
||||||
|
get = new EepGet(_context, proxyHost, proxyPort, 40, SIGNED_UPDATE_FILE, updateURL, false);
|
||||||
else
|
else
|
||||||
get = new EepGet(_context, 1, _updateFile, updateURL, false);
|
get = new EepGet(_context, 1, _updateFile, updateURL, false);
|
||||||
get.addStatusListener(UpdateRunner.this);
|
get.addStatusListener(UpdateRunner.this);
|
||||||
|
@ -27,27 +27,32 @@
|
|||||||
if (prev != null) System.setProperty("net.i2p.router.web.ConfigUpdateHandler.noncePrev", prev);
|
if (prev != null) System.setProperty("net.i2p.router.web.ConfigUpdateHandler.noncePrev", prev);
|
||||||
System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %>
|
System.setProperty("net.i2p.router.web.ConfigUpdateHandler.nonce", new java.util.Random().nextLong()+""); %>
|
||||||
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" />
|
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigUpdateHandler.nonce")%>" />
|
||||||
|
<table border="0" cellspacing="5"><tr><td valign="top"><b>News:</b><td>
|
||||||
<% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %>
|
<% if ("true".equals(System.getProperty("net.i2p.router.web.UpdateHandler.updateInProgress", "false"))) { %>
|
||||||
<i>Update In Progress</i><br /><br />
|
<i>Update In Progress</i><br /><br />
|
||||||
<% } else { %>
|
<% } else { %>
|
||||||
<input type="submit" name="action" value="Check for update now" /><br /><br />
|
<input type="submit" name="action" value="Check for update now" /><br /><br />
|
||||||
<% } %>
|
<% } %>
|
||||||
News URL:
|
<tr><td><td>
|
||||||
<input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />"><br />
|
<tr><td valign="top"><b>News URL:</b>
|
||||||
Refresh frequency:
|
<td><input type="text" size="60" name="newsURL" value="<jsp:getProperty name="updatehelper" property="newsURL" />">
|
||||||
<jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" /><br />
|
<tr><td valign="top"><b>Refresh frequency:</b>
|
||||||
Update policy:
|
<td><jsp:getProperty name="updatehelper" property="refreshFrequencySelectBox" />
|
||||||
<jsp:getProperty name="updatehelper" property="updatePolicySelectBox" /><br />
|
<tr><td valign="top"><b>Update policy:</b>
|
||||||
<p>Update through the eepProxy?
|
<td><jsp:getProperty name="updatehelper" property="updatePolicySelectBox" />
|
||||||
<jsp:getProperty name="updatehelper" property="updateThroughProxy" /><br />
|
<tr><td valign="top"><b>Update through the eepProxy?</b>
|
||||||
eepProxy host: <input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" /><br />
|
<td><jsp:getProperty name="updatehelper" property="updateThroughProxy" />
|
||||||
eepProxy port: <input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></p>
|
<tr><td valign="top"><b>eepProxy host:</b>
|
||||||
<p>Update URLs:<br />
|
<td><input type="text" size="10" name="proxyHost" value="<jsp:getProperty name="updatehelper" property="proxyHost" />" />
|
||||||
<textarea name="updateURL" cols="90" rows="4" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></p>
|
<tr><td valign="top"><b>eepProxy port:</b>
|
||||||
<p>Trusted keys:</br />
|
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" />
|
||||||
<textarea name="trustedKeys" cols="90" rows="4" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></p>
|
<tr><td valign="top"><b>Update URLs:</b>
|
||||||
<br />
|
<td><textarea name="updateURL" cols="90" rows="4" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea>
|
||||||
<input type="submit" name="action" value="Save" />
|
<tr><td valign="top"><b>Trusted keys:</b>
|
||||||
|
<td><textarea name="trustedKeys" cols="90" rows="4" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea>
|
||||||
|
<tr><td><td>
|
||||||
|
<tr><td><td><input type="submit" name="action" value="Save" /> <input type="reset" value="Cancel" />
|
||||||
|
</table>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<title>I2P Router Console - home</title>
|
<title>I2P Router Console - home</title>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<%@include file="css.jsp" %>
|
<%@include file="css.jsp" %>
|
||||||
<link rel="shortcut icon" href="favicon.ico" />
|
<link rel="shortcut icon" href="/themes/console/images/favicon.ico" />
|
||||||
</head><body>
|
</head><body>
|
||||||
<%
|
<%
|
||||||
if (System.getProperty("router.consoleNonce") == null) {
|
if (System.getProperty("router.consoleNonce") == null) {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<%@page import="java.io.File" %>
|
<%@page import="java.io.File" %>
|
||||||
<div class="logo">
|
<div class="logo">
|
||||||
<a href="index.jsp"><img src="i2plogo.png" alt="Router Console" width="187" height="35" /></a><br />
|
<a href="index.jsp"><img src="/themes/console/images/i2plogo.png" alt="Router Console" width="187" height="35" /></a><br />
|
||||||
</div>
|
</div>
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
<% File path = new File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/toolbar.html");
|
<% File path = new File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/toolbar.html");
|
||||||
|
@ -83,8 +83,6 @@
|
|||||||
<b>Used:</b> <jsp:getProperty name="helper" property="inboundTransferred" />/<jsp:getProperty name="helper" property="outboundTransferred" /><br />
|
<b>Used:</b> <jsp:getProperty name="helper" property="inboundTransferred" />/<jsp:getProperty name="helper" property="outboundTransferred" /><br />
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
<jsp:getProperty name="helper" property="destinations" />
|
|
||||||
|
|
||||||
<u><b>Tunnels in/out</b></u><br />
|
<u><b>Tunnels in/out</b></u><br />
|
||||||
<b>Exploratory:</b> <jsp:getProperty name="helper" property="inboundTunnels" />/<jsp:getProperty name="helper" property="outboundTunnels" /><br />
|
<b>Exploratory:</b> <jsp:getProperty name="helper" property="inboundTunnels" />/<jsp:getProperty name="helper" property="outboundTunnels" /><br />
|
||||||
<b>Client:</b> <jsp:getProperty name="helper" property="inboundClientTunnels" />/<jsp:getProperty name="helper" property="outboundClientTunnels" /><br />
|
<b>Client:</b> <jsp:getProperty name="helper" property="inboundClientTunnels" />/<jsp:getProperty name="helper" property="outboundClientTunnels" /><br />
|
||||||
@ -97,4 +95,6 @@
|
|||||||
<b>Tunnel lag:</b> <jsp:getProperty name="helper" property="tunnelLag" /><br />
|
<b>Tunnel lag:</b> <jsp:getProperty name="helper" property="tunnelLag" /><br />
|
||||||
<b>Handle backlog:</b> <jsp:getProperty name="helper" property="inboundBacklog" /><br />
|
<b>Handle backlog:</b> <jsp:getProperty name="helper" property="inboundBacklog" /><br />
|
||||||
<b><jsp:getProperty name="helper" property="tunnelStatus" /></b><br />
|
<b><jsp:getProperty name="helper" property="tunnelStatus" /></b><br />
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<jsp:getProperty name="helper" property="destinations" />
|
||||||
|
@ -14,8 +14,10 @@ if (uri.endsWith(".css")) {
|
|||||||
response.setContentType("image/gif");
|
response.setContentType("image/gif");
|
||||||
} else if (uri.endsWith(".jpg")) {
|
} else if (uri.endsWith(".jpg")) {
|
||||||
response.setContentType("image/jpeg");
|
response.setContentType("image/jpeg");
|
||||||
|
} else if (uri.endsWith(".ico")) {
|
||||||
|
response.setContentType("image/x-icon");
|
||||||
}
|
}
|
||||||
|
response.setHeader("Cache-Control", "max-age=86400"); // cache for a day
|
||||||
String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsolutePath() +
|
String base = net.i2p.I2PAppContext.getGlobalContext().getBaseDir().getAbsolutePath() +
|
||||||
java.io.File.separatorChar + "docs";
|
java.io.File.separatorChar + "docs";
|
||||||
net.i2p.util.FileUtil.readFile(uri, base, response.getOutputStream());
|
net.i2p.util.FileUtil.readFile(uri, base, response.getOutputStream());
|
||||||
|
@ -157,6 +157,20 @@ public class UrlLauncher {
|
|||||||
// fall through
|
// fall through
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This debian script tries everything in $BROWSER, then gnome-www-browser and x-www-browser
|
||||||
|
// if X is running and www-browser otherwise. Those point to the user's preferred
|
||||||
|
// browser using the update-alternatives system.
|
||||||
|
if (_shellCommand.executeSilentAndWaitTimed("sensible-browser " + url, 5))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// Try x-www-browser directly
|
||||||
|
if (_shellCommand.executeSilentAndWaitTimed("x-www-browser " + url, 5))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// puppy linux
|
||||||
|
if (_shellCommand.executeSilentAndWaitTimed("defaultbrowser " + url, 5))
|
||||||
|
return true;
|
||||||
|
|
||||||
if (_shellCommand.executeSilentAndWaitTimed("opera -newpage " + url, 5))
|
if (_shellCommand.executeSilentAndWaitTimed("opera -newpage " + url, 5))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -175,6 +189,10 @@ public class UrlLauncher {
|
|||||||
if (_shellCommand.executeSilentAndWaitTimed("galeon " + url, 5))
|
if (_shellCommand.executeSilentAndWaitTimed("galeon " + url, 5))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// Text Mode Browsers only below here
|
||||||
|
if (_shellCommand.executeSilentAndWaitTimed("www-browser " + url, 5))
|
||||||
|
return true;
|
||||||
|
|
||||||
if (_shellCommand.executeSilentAndWaitTimed("links " + url, 5))
|
if (_shellCommand.executeSilentAndWaitTimed("links " + url, 5))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
22
build.xml
22
build.xml
@ -318,6 +318,23 @@
|
|||||||
<copy file="installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-JGoodies-Looks.txt" />
|
<copy file="installer/lib/launch4j/lib/JGoodies.Looks.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-JGoodies-Looks.txt" />
|
||||||
<copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
|
<copy file="installer/lib/launch4j/lib/XStream.LICENSE.txt" tofile="pkg-temp/licenses/LICENSE-XStream.txt" />
|
||||||
</target>
|
</target>
|
||||||
|
<target name="prepthemeupdates">
|
||||||
|
<!-- CSS now in docs/, not in the .war -->
|
||||||
|
<copy file="installer/resources/themes/console/console.css" todir="pkg-temp/docs/themes/console/" />
|
||||||
|
<copy file="installer/resources/themes/console/defCon1/console.css" todir="pkg-temp/docs/themes/console/defCon1/" />
|
||||||
|
<!-- these files now in docs/, not in the .war -->
|
||||||
|
<copy file="installer/resources/themes/console/images/favicon.ico" todir="pkg-temp/docs/themes/console/images/" />
|
||||||
|
<copy file="installer/resources/themes/console/images/i2plogo.png" todir="pkg-temp/docs/themes/console/images/" />
|
||||||
|
<!-- Since the logo moved, we have to update the error pages -->
|
||||||
|
<copy todir="pkg-temp/docs/" >
|
||||||
|
<fileset dir="installer/resources/" includes="*-header.ht" />
|
||||||
|
</copy>
|
||||||
|
<!-- make a "classic" theme -->
|
||||||
|
<copy todir="pkg-temp/docs/themes/console/classic/" >
|
||||||
|
<fileset dir="installer/resources/themes/console/classic/" />
|
||||||
|
</copy>
|
||||||
|
</target>
|
||||||
|
|
||||||
<!-- this is no longer required, izpack 4.3.0 supports headless installs with java -jar i2pinstall.exe -console -->
|
<!-- this is no longer required, izpack 4.3.0 supports headless installs with java -jar i2pinstall.exe -console -->
|
||||||
<target name="tarball" depends="preppkg">
|
<target name="tarball" depends="preppkg">
|
||||||
<tar compression="bzip2" destfile="i2p.tar.bz2">
|
<tar compression="bzip2" destfile="i2p.tar.bz2">
|
||||||
@ -363,7 +380,7 @@
|
|||||||
<copy file="history.txt" todir="pkg-temp/" />
|
<copy file="history.txt" todir="pkg-temp/" />
|
||||||
<copy file="news.xml" todir="pkg-temp/docs/" />
|
<copy file="news.xml" todir="pkg-temp/docs/" />
|
||||||
</target>
|
</target>
|
||||||
<target name="prepupdateSmall" depends="buildSmall, prepupdateRouter">
|
<target name="prepupdateSmall" depends="buildSmall, prepupdateRouter, prepthemeupdates">
|
||||||
<copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
|
<copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" />
|
||||||
<copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
|
<copy file="build/mstreaming.jar" todir="pkg-temp/lib/" />
|
||||||
<copy file="build/streaming.jar" todir="pkg-temp/lib/" />
|
<copy file="build/streaming.jar" todir="pkg-temp/lib/" />
|
||||||
@ -373,9 +390,6 @@
|
|||||||
<copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
|
<copy file="build/addressbook.war" todir="pkg-temp/webapps/" />
|
||||||
<!-- New readme_*.html files - For one release only -->
|
<!-- New readme_*.html files - For one release only -->
|
||||||
<copy file="readme_zh.html" todir="pkg-temp/docs/" />
|
<copy file="readme_zh.html" todir="pkg-temp/docs/" />
|
||||||
<!-- CSS now in docs/, not in the .war -->
|
|
||||||
<copy file="apps/routerconsole/jsp/default.css" tofile="pkg-temp/docs/themes/console/console.css" />
|
|
||||||
<copy file="apps/routerconsole/jsp/default.css" tofile="pkg-temp/docs/themes/console/defCon1/console.css" />
|
|
||||||
</target>
|
</target>
|
||||||
<target name="prepupdateRouter" depends="buildrouter, deletepkg-temp">
|
<target name="prepupdateRouter" depends="buildrouter, deletepkg-temp">
|
||||||
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />
|
<copy file="build/i2p.jar" todir="pkg-temp/lib/" />
|
||||||
|
@ -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.7.4";
|
public final static String VERSION = "0.7.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);
|
||||||
|
@ -142,7 +142,6 @@ D8usM7Dxp5yrDrCYZ5AIijc=
|
|||||||
} else {
|
} else {
|
||||||
_trustedKeys.add(DEFAULT_TRUSTED_KEY);
|
_trustedKeys.add(DEFAULT_TRUSTED_KEY);
|
||||||
_trustedKeys.add(DEFAULT_TRUSTED_KEY2);
|
_trustedKeys.add(DEFAULT_TRUSTED_KEY2);
|
||||||
_trustedKeys.add(DEFAULT_TRUSTED_KEY3);
|
|
||||||
}
|
}
|
||||||
if (_log.shouldLog(Log.DEBUG))
|
if (_log.shouldLog(Log.DEBUG))
|
||||||
_log.debug("TrustedUpdate created, trusting " + _trustedKeys.size() + " keys.");
|
_log.debug("TrustedUpdate created, trusting " + _trustedKeys.size() + " keys.");
|
||||||
|
46
history.txt
46
history.txt
@ -1,3 +1,49 @@
|
|||||||
|
2009-06-29 zzz
|
||||||
|
* Console: Convert table headers to <th> to prep for CSS changes
|
||||||
|
* Console CSS: Move css file, make a classic theme to prep for CSS changes
|
||||||
|
* Console: Move favicon.ico and i2plogo.png out of the .war
|
||||||
|
so that the HTTP proxy can use them directly;
|
||||||
|
proxy error pages must be updated next
|
||||||
|
* NetDb stats: Normalize tunnel build stats for increased anonymity,
|
||||||
|
effective in 0.7.6
|
||||||
|
|
||||||
|
* 2009-06-29 0.7.5 released
|
||||||
|
|
||||||
|
2009-06-29 Complication
|
||||||
|
* Update versions, package release
|
||||||
|
* Remove the last reference to my eepsite as a "news.xml" source,
|
||||||
|
and likewise stop my public key from being included
|
||||||
|
among valid release signing keys.
|
||||||
|
|
||||||
|
2009-06-25 sponge
|
||||||
|
* Summary frame layout change so it makes sense.
|
||||||
|
|
||||||
|
2009-06-23 zzz
|
||||||
|
* Browser Launch: Add sensible-browser, x-www-browser, defaultbrowser, and
|
||||||
|
www-browser in an attempt to launch the user's preferred browser
|
||||||
|
* configupdate.jsp: Cleanup
|
||||||
|
* Installer: Include console.css!!!
|
||||||
|
* NTCP: Try again to prevent two Event Pumpers
|
||||||
|
* Update: Increase max retries
|
||||||
|
* UPnP: Catch AIOOBE reported by tuna
|
||||||
|
|
||||||
|
2009-06-21 zzz
|
||||||
|
* Browser Launch: Wait until the routerconsole is up before launching the browser
|
||||||
|
* Installer: Fix wrapper.config parsing on windows
|
||||||
|
* netdb.jsp: Add country chart at bottom, clean up version chart
|
||||||
|
* News Fetcher:
|
||||||
|
- Change default news URL, use it instead of the old one even if
|
||||||
|
the old one is saved in the configuration, to assist in the transition
|
||||||
|
* ReseedHandler:
|
||||||
|
- check for upper case HREF to be compatible with apache indexes
|
||||||
|
* Statistics Manager: post-0.7.4 cleanup
|
||||||
|
* Transport: Treat 5.0.0.0/8 (Hamachi) as local
|
||||||
|
|
||||||
|
2009-06-17 Mathiasdm
|
||||||
|
* desktopgui:
|
||||||
|
- Added client and server tunnel view
|
||||||
|
(saving does not work yet)
|
||||||
|
|
||||||
2009-06-17 zzz
|
2009-06-17 zzz
|
||||||
* PeerSelector:
|
* PeerSelector:
|
||||||
- Limit exploratory tunnels to connected peers when over
|
- Limit exploratory tunnels to connected peers when over
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<i2p.news date="$Date: 2009-06-12 00:00:00 $">
|
<i2p.news date="$Date: 2009-06-29 00:00:00 $">
|
||||||
<i2p.release version="0.7.4" date="2009/06/12" minVersion="0.6"
|
<i2p.release version="0.7.5" date="2009/06/29" 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.7.4</appversion>
|
<appversion>0.7.5</appversion>
|
||||||
<authors>
|
<authors>
|
||||||
<author name="I2P" email="http://forum.i2p2.de/"/>
|
<author name="I2P" email="http://forum.i2p2.de/"/>
|
||||||
</authors>
|
</authors>
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB |
182
installer/resources/themes/console/classic/default.css
Normal file
182
installer/resources/themes/console/classic/default.css
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
body {
|
||||||
|
margin : 0px;
|
||||||
|
padding : 0px;
|
||||||
|
text-align : center;
|
||||||
|
font-family : Arial, Helvetica, sans-serif;
|
||||||
|
background-color : #ffffff;
|
||||||
|
color : #000000;
|
||||||
|
font-size : 100%;
|
||||||
|
|
||||||
|
/* we've avoided Tantek Hacks so far,
|
||||||
|
** but we can't avoid using the non-w3c method of
|
||||||
|
** box rendering. (and therefore one of mozilla's
|
||||||
|
** proprietry -moz properties (which hopefully they'll
|
||||||
|
** drop soon).
|
||||||
|
*/
|
||||||
|
-moz-box-sizing : border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
div {
|
||||||
|
-moz-box-sizing : border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4, label {
|
||||||
|
margin : 0px;
|
||||||
|
padding : 2px;
|
||||||
|
float : left;
|
||||||
|
width : 150px;
|
||||||
|
height : 24px;
|
||||||
|
font-weight : bold;
|
||||||
|
text-align : right;
|
||||||
|
font-size : 1.0em;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size : 1.2em;
|
||||||
|
text-align : center;
|
||||||
|
width : 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
margin : 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea, input, select, button, a {
|
||||||
|
font-family : Arial, Helvetica, sans-serif;
|
||||||
|
-moz-box-sizing : border-box;
|
||||||
|
box-sizing : border-box;
|
||||||
|
font-size : 1.0em;
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
float : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
border : 1px solid #ddddc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
br {
|
||||||
|
clear : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.statusNotRunning {
|
||||||
|
float : left;
|
||||||
|
width : 82px;
|
||||||
|
height : 24px;
|
||||||
|
color : #dd0000;
|
||||||
|
}
|
||||||
|
div.statusRunning {
|
||||||
|
float : left;
|
||||||
|
width : 82px;
|
||||||
|
height : 24px;
|
||||||
|
color : #00dd00;
|
||||||
|
}
|
||||||
|
div.statusStarting {
|
||||||
|
float : left;
|
||||||
|
width : 82px;
|
||||||
|
height : 24px;
|
||||||
|
color : #339933;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
display : none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator, .subdivider {
|
||||||
|
clear : both;
|
||||||
|
height : 1px;
|
||||||
|
margin : 3px 0px 3px 0px;
|
||||||
|
border-bottom : 1px solid #ddddc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.subdivider {
|
||||||
|
border-bottom : 1px dashed #ddddc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.freetext {
|
||||||
|
width : 150px;
|
||||||
|
height : 22px;
|
||||||
|
border : 1px solid #aaaac0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control {
|
||||||
|
margin : 0 4px 0 0;
|
||||||
|
padding : 0 0 4px 0;
|
||||||
|
overflow : hidden;
|
||||||
|
height : 20px;
|
||||||
|
width : 60px;
|
||||||
|
font-weight : normal;
|
||||||
|
background-color : #dddddd;
|
||||||
|
color : black;
|
||||||
|
border : 1px outset #ddddc0;
|
||||||
|
text-align : center;
|
||||||
|
white-space : nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control:hover {
|
||||||
|
background-color : #ffffed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.control:active {
|
||||||
|
border : 2px inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
width : 760px;
|
||||||
|
margin : 16px auto 16px auto;
|
||||||
|
overflow : hidden;
|
||||||
|
text-align : left;
|
||||||
|
font-size : 0.8em;
|
||||||
|
background-color : #ffffef;
|
||||||
|
border : 4px solid #ffffd0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.panel .footer {
|
||||||
|
float : right;
|
||||||
|
padding : 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbox {
|
||||||
|
float : right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.rowItem {
|
||||||
|
width : 750px;
|
||||||
|
float : left;
|
||||||
|
margin : 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.comment {
|
||||||
|
font-style : italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text {
|
||||||
|
height : 24px;
|
||||||
|
width : 150px;
|
||||||
|
padding : 2px 0 0 2px;
|
||||||
|
float : left;
|
||||||
|
margin : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.accessKey {
|
||||||
|
text-decoration : underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
#globalOperationsPanel {
|
||||||
|
background-color : #ffefef;
|
||||||
|
border : 4px solid #ffd0d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#globalOperationsPanel .control {
|
||||||
|
width : 100px;
|
||||||
|
}
|
178
installer/resources/themes/console/classic/i2ptunnel.css
Normal file
178
installer/resources/themes/console/classic/i2ptunnel.css
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
/* I2P Tunnel Edit Page
|
||||||
|
*/
|
||||||
|
|
||||||
|
#tunnelEditPage input {
|
||||||
|
width : 458px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage select {
|
||||||
|
width : 308px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage option[selected] {
|
||||||
|
color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #targetField,
|
||||||
|
#tunnelEditPage #accessField,
|
||||||
|
#tunnelEditPage #optionsField {
|
||||||
|
height : 48px;
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
#tunnelEditPage #tunnelOptionsField {
|
||||||
|
height : 96px;
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #targetField label,
|
||||||
|
#tunnelEditPage #accessField label,
|
||||||
|
#tunnelEditPage #tunnelOptionsField label,
|
||||||
|
#tunnelEditPage #optionsField label{
|
||||||
|
height : 48px;
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #reachField,
|
||||||
|
#tunnelEditPage #hostField,
|
||||||
|
#tunnelEditPage #depthField,
|
||||||
|
#tunnelEditPage #countField,
|
||||||
|
#tunnelEditPage #optionsHostField {
|
||||||
|
width : 304px;
|
||||||
|
margin-right: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #portField,
|
||||||
|
#tunnelEditPage #optionsPortField,
|
||||||
|
#tunnelEditPage #backupField,
|
||||||
|
#tunnelEditPage #varianceField {
|
||||||
|
width : 150px;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #reachField label,
|
||||||
|
#tunnelEditPage #hostField label,
|
||||||
|
#tunnelEditPage #portField label,
|
||||||
|
#tunnelEditPage #optionsHostField label,
|
||||||
|
#tunnelEditPage #optionsPortField label,
|
||||||
|
#tunnelEditPage #depthField label,
|
||||||
|
#tunnelEditPage #countField label,
|
||||||
|
#tunnelEditPage #backupField label,
|
||||||
|
#tunnelEditPage #varianceField label {
|
||||||
|
text-align : left;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #otherField label {
|
||||||
|
width : 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #reachableByOther,
|
||||||
|
#tunnelEditPage #tunnelDepth,
|
||||||
|
#tunnelEditPage #tunnelQuantity,
|
||||||
|
#tunnelEditPage #targetHost,
|
||||||
|
#tunnelEditPage #clientHost {
|
||||||
|
width : 306px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #port {
|
||||||
|
width : 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #targetPort,
|
||||||
|
#tunnelEditPage #clientPort,
|
||||||
|
#tunnelEditPage #tunnelBackupQuantity,
|
||||||
|
#tunnelEditPage #tunnelVariance {
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage #shared,
|
||||||
|
#tunnelEditPage #connectDelay,
|
||||||
|
#tunnelEditPage #startOnLoad {
|
||||||
|
width : 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelEditPage label {
|
||||||
|
width : 150px;
|
||||||
|
font-weight : bold;
|
||||||
|
text-align : right;
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* I2P Tunnel List Page
|
||||||
|
*/
|
||||||
|
|
||||||
|
#tunnelListPage .rowItem {
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage select {
|
||||||
|
width : 150px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage textarea {
|
||||||
|
width : 750px;
|
||||||
|
height : 100px;
|
||||||
|
padding : 0 0 0 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .footer .control {
|
||||||
|
margin-left: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .footer label {
|
||||||
|
text-align : right;
|
||||||
|
height : 24px;
|
||||||
|
width : 360px;
|
||||||
|
float : left;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use Leary and Langridge content replacement methods (LIR)
|
||||||
|
** to embed accessibility information into the document.
|
||||||
|
** Should allow the lists to be rendered nicely by
|
||||||
|
** screen readers. (and lynx!)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#tunnelListPage label {
|
||||||
|
height : 0;
|
||||||
|
width : 0;
|
||||||
|
overflow : hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .nameHeaderField label,
|
||||||
|
#tunnelListPage .portHeaderField label,
|
||||||
|
#tunnelListPage .typeHeaderField label,
|
||||||
|
#tunnelListPage .interfaceHeaderField label,
|
||||||
|
#tunnelListPage .targetHeaderField label,
|
||||||
|
#tunnelListPage .previewHeaderField label,
|
||||||
|
#tunnelListPage .statusHeaderField label {
|
||||||
|
text-align : left;
|
||||||
|
width : 150px;
|
||||||
|
height : 24px;
|
||||||
|
float : left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .targetField,
|
||||||
|
#tunnelListPage .targetField .text,
|
||||||
|
#tunnelListPage .targetHeaderField,
|
||||||
|
#tunnelListPage .targetHeaderField label {
|
||||||
|
width : 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .descriptionField,
|
||||||
|
#tunnelListPage .destinationField {
|
||||||
|
width : 750px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .descriptionField .text,
|
||||||
|
#tunnelListPage .destinationField input {
|
||||||
|
width : 450px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tunnelListPage .descriptionField label,
|
||||||
|
#tunnelListPage .destinationField label {
|
||||||
|
text-align : right;
|
||||||
|
width : 150px;
|
||||||
|
height : 24px;
|
||||||
|
float : left;
|
||||||
|
}
|
112
installer/resources/themes/console/console.css
Normal file
112
installer/resources/themes/console/console.css
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
body {
|
||||||
|
font-family: Verdana, Tahoma, Helvetica, sans-serif;
|
||||||
|
margin: 1em 0em;
|
||||||
|
padding: 0em;
|
||||||
|
text-align: center;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.logo {
|
||||||
|
float: left;
|
||||||
|
width: 200px;
|
||||||
|
left: 1em;
|
||||||
|
top: 1em;
|
||||||
|
margin: 0em;
|
||||||
|
padding: .5em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toolbar {
|
||||||
|
margin: 0em 0em 2em 0em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.routersummaryouter {
|
||||||
|
float: left;
|
||||||
|
width: 215px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
clear: left; /* fixes a bug in Opera */
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.routersummary {
|
||||||
|
background-color: #fafaff;
|
||||||
|
width: 195px;
|
||||||
|
color: inherit;
|
||||||
|
margin: 0em;
|
||||||
|
padding: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: medium solid #efefff;
|
||||||
|
font-size: 0.82em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.warning {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffefef;
|
||||||
|
border: medium solid #ffafaf;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffef;
|
||||||
|
border: medium solid #ffffd0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main textarea {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.news {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
border: medium solid #ffffa0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.confignav {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #efefff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.configure {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #fafaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.error {
|
||||||
|
color: #d00000;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.notice {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
112
installer/resources/themes/console/defCon1/console.css
Normal file
112
installer/resources/themes/console/defCon1/console.css
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
body {
|
||||||
|
font-family: Verdana, Tahoma, Helvetica, sans-serif;
|
||||||
|
margin: 1em 0em;
|
||||||
|
padding: 0em;
|
||||||
|
text-align: center;
|
||||||
|
background-color: white;
|
||||||
|
color: black;
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
width: 100%;
|
||||||
|
overflow-x: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.logo {
|
||||||
|
float: left;
|
||||||
|
width: 200px;
|
||||||
|
left: 1em;
|
||||||
|
top: 1em;
|
||||||
|
margin: 0em;
|
||||||
|
padding: .5em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.toolbar {
|
||||||
|
margin: 0em 0em 2em 0em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.routersummaryouter {
|
||||||
|
float: left;
|
||||||
|
width: 215px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
clear: left; /* fixes a bug in Opera */
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.routersummary {
|
||||||
|
background-color: #fafaff;
|
||||||
|
width: 195px;
|
||||||
|
color: inherit;
|
||||||
|
margin: 0em;
|
||||||
|
padding: 5px;
|
||||||
|
text-align: left;
|
||||||
|
border: medium solid #efefff;
|
||||||
|
font-size: 0.82em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.warning {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffefef;
|
||||||
|
border: medium solid #ffafaf;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffef;
|
||||||
|
border: medium solid #ffffd0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.main textarea {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.news {
|
||||||
|
margin: 0em 1em 1em 224px;
|
||||||
|
padding: .5em 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
border: medium solid #ffffa0;
|
||||||
|
text-align: left;
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.confignav {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #efefff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.configure {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #ffffc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages {
|
||||||
|
padding: 1em;
|
||||||
|
background-color: #fafaff;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.error {
|
||||||
|
color: #d00000;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.messages span.notice {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 925 B After Width: | Height: | Size: 925 B |
45
news.xml
45
news.xml
@ -1,5 +1,5 @@
|
|||||||
<i2p.news date="$Date: 2009-06-12 00:00:00 $">
|
<i2p.news date="$Date: 2009-06-29 00:00:00 $">
|
||||||
<i2p.release version="0.7.4" date="2009/06/12" minVersion="0.6"
|
<i2p.release version="0.7.5" date="2009/06/29" 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,22 +11,35 @@
|
|||||||
publiclogs="http://www.i2p.net/meeting141" />
|
publiclogs="http://www.i2p.net/meeting141" />
|
||||||
<p>
|
<p>
|
||||||
•
|
•
|
||||||
2009-06-12: <b>0.7.4 <a href="http://www.i2p2.i2p/release-0.7.4.html">Released</a></b>
|
2009-06-29: <b>0.7.5 <a href="http://www.i2p2.i2p/release-0.7.5.html">Released</a></b>
|
||||||
</p><p>
|
</p><p>
|
||||||
I2P version 0.7.4 introduces notable new features
|
I2P version 0.7.5 foremost addresses network stability issues
|
||||||
like GeoIP capability and UPnP support. While the former
|
by adjusting how exploratory tunnels are built if a router nears
|
||||||
can become a basis for geographically aware tunnel-building,
|
its connection limit, and also by distinguishing between
|
||||||
the latter should immediately enable more routers to accept
|
connected peers and other non-failing peers while picking them
|
||||||
inbound TCP connections, helping distribute workload more evenly.
|
for inclusion in tunnels.
|
||||||
</p><p>
|
</p><p>
|
||||||
Inbound NTCP is now enabled automaticaly if the router
|
This version also delivers fixes to installer behaviour on Windows,
|
||||||
does not appear firewalled, and default bandwidth limits
|
to the Router Console, NTCP transport and UPnP mechanism.
|
||||||
for new installations are increased.
|
|
||||||
</p><p>
|
</p><p>
|
||||||
In addition, multiple bugfixes and updates are included,
|
Additionally, version 0.7.5 changes the "news.xml" file location
|
||||||
addressing issues with the NTCP transport, BOB protocol,
|
where I2P routers check whether a new version is available.
|
||||||
connection limiting, behaviour of new I2PTunnel options
|
Instead of the old URL (http://complication.i2p/news.xml)
|
||||||
and the SusiDNS user interface. Improvements to the Router Console
|
a new location (http://echelon.i2p./news.xml) will be used.
|
||||||
are likewise included. Updating is recommended.
|
If your router uses default updater settings, it will start using
|
||||||
|
the new URL automatically. If not, you will need to visit
|
||||||
|
<a href="configupdate.jsp">configupdate.jsp</a>, and change it manually.
|
||||||
|
For a while after this update, the old news.xml location will also
|
||||||
|
redirect all HTTP requests to the new one.
|
||||||
|
</p><p>
|
||||||
|
Finally, since Complication is withdrawing from the I2P project,
|
||||||
|
to make some far-reaching changes in his life, this update removes
|
||||||
|
Complication's public key from the list of release signing keys.
|
||||||
|
You should expect the next release to be signed by zzz instead.
|
||||||
|
If you have non-default updater settings, you may want to remove
|
||||||
|
Complication's public key manually, by visiting <a href="configupdate.jsp">configupdate.jsp</a>,
|
||||||
|
and removing the key line starting with the characters "JHFA".
|
||||||
|
If you wish to verify whether this information is correct,
|
||||||
|
please check the GPG-signed release announcement.
|
||||||
</p>
|
</p>
|
||||||
</i2p.news>
|
</i2p.news>
|
||||||
|
@ -669,9 +669,9 @@ public class JobQueue {
|
|||||||
/** render the HTML for the job stats */
|
/** render the HTML for the job stats */
|
||||||
private void getJobStats(StringBuffer buf) {
|
private void getJobStats(StringBuffer buf) {
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td><b>Job</b></td><td><b>Runs</b></td>");
|
buf.append("<tr><th>Job</th><th>Runs</th>");
|
||||||
buf.append("<td><b>Time</b></td><td><b><i>Avg</i></b></td><td><b><i>Max</i></b></td><td><b><i>Min</i></b></td>");
|
buf.append("<th>Time</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th>");
|
||||||
buf.append("<td><b>Pending</b></td><td><b><i>Avg</i></b></td><td><b><i>Max</i></b></td><td><b><i>Min</i></b></td></tr>\n");
|
buf.append("<th>Pending</th><th><i>Avg</i></th><th><i>Max</i></th><th><i>Min</i></th></tr>\n");
|
||||||
long totRuns = 0;
|
long totRuns = 0;
|
||||||
long totExecTime = 0;
|
long totExecTime = 0;
|
||||||
long avgExecTime = 0;
|
long avgExecTime = 0;
|
||||||
|
@ -18,7 +18,7 @@ public class RouterVersion {
|
|||||||
/** deprecated */
|
/** deprecated */
|
||||||
public final static String ID = "Monotone";
|
public final static String ID = "Monotone";
|
||||||
public final static String VERSION = CoreVersion.VERSION;
|
public final static String VERSION = CoreVersion.VERSION;
|
||||||
public final static long BUILD = 2;
|
public final static long BUILD = 0;
|
||||||
/** for example "-test" */
|
/** for example "-test" */
|
||||||
public final static String EXTRA = "";
|
public final static String EXTRA = "";
|
||||||
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
|
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
|
||||||
|
@ -139,12 +139,18 @@ public class StatisticsManager implements Service {
|
|||||||
|
|
||||||
//includeRate("tunnel.buildRequestTime", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.buildRequestTime", stats, new long[] { 10*60*1000 });
|
||||||
long rate = 60*60*1000;
|
long rate = 60*60*1000;
|
||||||
|
boolean commentOutIn076 = RouterVersion.VERSION.equals("0.7.5");
|
||||||
|
if (commentOutIn076) {
|
||||||
includeRate("tunnel.buildClientExpire", stats, new long[] { rate });
|
includeRate("tunnel.buildClientExpire", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildClientReject", stats, new long[] { rate });
|
includeRate("tunnel.buildClientReject", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildClientSuccess", stats, new long[] { rate });
|
includeRate("tunnel.buildClientSuccess", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate });
|
includeRate("tunnel.buildExploratoryExpire", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate });
|
includeRate("tunnel.buildExploratoryReject", stats, new long[] { rate });
|
||||||
includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate });
|
includeRate("tunnel.buildExploratorySuccess", stats, new long[] { rate });
|
||||||
|
} else {
|
||||||
|
includeTunnelRates("Client", stats, rate);
|
||||||
|
includeTunnelRates("Exploratory", stats, rate);
|
||||||
|
}
|
||||||
//includeRate("tunnel.rejectTimeout", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.rejectTimeout", stats, new long[] { 10*60*1000 });
|
||||||
//includeRate("tunnel.rejectOverloaded", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.rejectOverloaded", stats, new long[] { 10*60*1000 });
|
||||||
//includeRate("tunnel.acceptLoad", stats, new long[] { 10*60*1000 });
|
//includeRate("tunnel.acceptLoad", stats, new long[] { 10*60*1000 });
|
||||||
@ -223,6 +229,49 @@ public class StatisticsManager implements Service {
|
|||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final String[] tunnelStats = { "Expire", "Reject", "Success" };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add tunnel build rates with some mods to hide absolute quantities
|
||||||
|
* In particular, report counts normalized to 100 (i.e. a percentage)
|
||||||
|
*/
|
||||||
|
private void includeTunnelRates(String tunnelType, Properties stats, long selectedPeriod) {
|
||||||
|
long totalEvents = 0;
|
||||||
|
for (String tunnelStat : tunnelStats) {
|
||||||
|
String rateName = "tunnel.build" + tunnelType + tunnelStat;
|
||||||
|
RateStat stat = _context.statManager().getRate(rateName);
|
||||||
|
if (stat == null) continue;
|
||||||
|
Rate curRate = stat.getRate(selectedPeriod);
|
||||||
|
if (curRate == null) continue;
|
||||||
|
totalEvents += curRate.getLastEventCount();
|
||||||
|
}
|
||||||
|
if (totalEvents <= 0)
|
||||||
|
return;
|
||||||
|
for (String tunnelStat : tunnelStats) {
|
||||||
|
String rateName = "tunnel.build" + tunnelType + tunnelStat;
|
||||||
|
RateStat stat = _context.statManager().getRate(rateName);
|
||||||
|
if (stat == null) continue;
|
||||||
|
Rate curRate = stat.getRate(selectedPeriod);
|
||||||
|
if (curRate == null) continue;
|
||||||
|
double fudgeQuantity = 100.0d * curRate.getLastEventCount() / totalEvents;
|
||||||
|
stats.setProperty("stat_" + rateName + '.' + getPeriod(curRate), renderRate(curRate, fudgeQuantity));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String renderRate(Rate rate, double fudgeQuantity) {
|
||||||
|
StringBuffer buf = new StringBuffer(128);
|
||||||
|
buf.append(num(rate.getAverageValue())).append(';');
|
||||||
|
buf.append(num(rate.getExtremeAverageValue())).append(';');
|
||||||
|
buf.append(pct(rate.getPercentageOfLifetimeValue())).append(';');
|
||||||
|
if (rate.getLifetimeTotalEventTime() > 0) {
|
||||||
|
// bah saturation
|
||||||
|
buf.append("0;0;0;0;");
|
||||||
|
}
|
||||||
|
long numPeriods = rate.getLifetimePeriods();
|
||||||
|
buf.append(num(fudgeQuantity)).append(';');
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
/* report the same data for tx and rx, for enhanced anonymity */
|
/* report the same data for tx and rx, for enhanced anonymity */
|
||||||
private void includeAverageThroughput(Properties stats) {
|
private void includeAverageThroughput(Properties stats) {
|
||||||
RateStat sendRate = _context.statManager().getRate("bw.sendRate");
|
RateStat sendRate = _context.statManager().getRate("bw.sendRate");
|
||||||
|
@ -43,7 +43,7 @@ public class ClientListenerRunner implements Runnable {
|
|||||||
_running = false;
|
_running = false;
|
||||||
_listening = false;
|
_listening = false;
|
||||||
|
|
||||||
String val = context.getProperty(BIND_ALL_INTERFACES, "False");
|
String val = context.getProperty(BIND_ALL_INTERFACES);
|
||||||
_bindAllInterfaces = Boolean.valueOf(val).booleanValue();
|
_bindAllInterfaces = Boolean.valueOf(val).booleanValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,18 +49,8 @@ public class ClientManagerFacadeImpl extends ClientManagerFacade {
|
|||||||
|
|
||||||
public void startup() {
|
public void startup() {
|
||||||
_log.info("Starting up the client subsystem");
|
_log.info("Starting up the client subsystem");
|
||||||
String portStr = _context.router().getConfigSetting(PROP_CLIENT_PORT);
|
int port = _context.getProperty(PROP_CLIENT_PORT, DEFAULT_PORT);
|
||||||
if (portStr != null) {
|
|
||||||
try {
|
|
||||||
int port = Integer.parseInt(portStr);
|
|
||||||
_manager = new ClientManager(_context, port);
|
_manager = new ClientManager(_context, port);
|
||||||
} catch (NumberFormatException nfe) {
|
|
||||||
_log.error("Error setting the port: " + portStr + " is not valid", nfe);
|
|
||||||
_manager = new ClientManager(_context, DEFAULT_PORT);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_manager = new ClientManager(_context, DEFAULT_PORT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void shutdown() {
|
public void shutdown() {
|
||||||
|
@ -61,13 +61,13 @@ class ProfileOrganizerRenderer {
|
|||||||
buf.append("<p>Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles</p>");
|
buf.append("<p>Showing ").append(order.size()).append(" recent profiles, hiding ").append(peers.size()-order.size()).append(" older profiles</p>");
|
||||||
buf.append("<table border=\"1\">");
|
buf.append("<table border=\"1\">");
|
||||||
buf.append("<tr>");
|
buf.append("<tr>");
|
||||||
buf.append("<td><b>Peer</b></td>");
|
buf.append("<th>Peer</th>");
|
||||||
buf.append("<td><b>Groups (Caps)</b></td>");
|
buf.append("<th>Groups (Caps)</th>");
|
||||||
buf.append("<td><b>Speed</b></td>");
|
buf.append("<th>Speed</th>");
|
||||||
buf.append("<td><b>Capacity</b></td>");
|
buf.append("<th>Capacity</th>");
|
||||||
buf.append("<td><b>Integration</b></td>");
|
buf.append("<th>Integration</th>");
|
||||||
buf.append("<td><b>Failing?</b></td>");
|
buf.append("<th>Failing?</th>");
|
||||||
buf.append("<td> </td>");
|
buf.append("<th> </th>");
|
||||||
buf.append("</tr>");
|
buf.append("</tr>");
|
||||||
int prevTier = 1;
|
int prevTier = 1;
|
||||||
for (Iterator iter = order.iterator(); iter.hasNext();) {
|
for (Iterator iter = order.iterator(); iter.hasNext();) {
|
||||||
@ -159,22 +159,22 @@ class ProfileOrganizerRenderer {
|
|||||||
buf.append("<h2>Floodfill and Integrated Peers</h2>\n");
|
buf.append("<h2>Floodfill and Integrated Peers</h2>\n");
|
||||||
buf.append("<table border=\"1\">");
|
buf.append("<table border=\"1\">");
|
||||||
buf.append("<tr>");
|
buf.append("<tr>");
|
||||||
buf.append("<td><b>Peer</b></td>");
|
buf.append("<th>Peer</th>");
|
||||||
buf.append("<td><b>Caps</b></td>");
|
buf.append("<th>Caps</th>");
|
||||||
buf.append("<td><b>Integ. Value</b></td>");
|
buf.append("<th>Integ. Value</th>");
|
||||||
buf.append("<td><b>Last Heard About</b></td>");
|
buf.append("<th>Last Heard About</th>");
|
||||||
buf.append("<td><b>Last Heard From</b></td>");
|
buf.append("<th>Last Heard From</th>");
|
||||||
buf.append("<td><b>Last Successful Send</b></td>");
|
buf.append("<th>Last Successful Send</th>");
|
||||||
buf.append("<td><b>Last Failed Send</b></td>");
|
buf.append("<th>Last Failed Send</th>");
|
||||||
buf.append("<td><b>10m Resp. Time</b></td>");
|
buf.append("<th>10m Resp. Time</th>");
|
||||||
buf.append("<td><b>1h Resp. Time</b></td>");
|
buf.append("<th>1h Resp. Time</th>");
|
||||||
buf.append("<td><b>1d Resp. Time</b></td>");
|
buf.append("<th>1d Resp. Time</th>");
|
||||||
buf.append("<td><b>Successful Lookups</b></td>");
|
buf.append("<th>Successful Lookups</th>");
|
||||||
buf.append("<td><b>Failed Lookups</b></td>");
|
buf.append("<th>Failed Lookups</th>");
|
||||||
buf.append("<td><b>New Stores</b></td>");
|
buf.append("<th>New Stores</th>");
|
||||||
buf.append("<td><b>Old Stores</b></td>");
|
buf.append("<th>Old Stores</th>");
|
||||||
buf.append("<td><b>1h Fail Rate</b></td>");
|
buf.append("<th>1h Fail Rate</th>");
|
||||||
buf.append("<td><b>1d Fail Rate</b></td>");
|
buf.append("<th>1d Fail Rate</th>");
|
||||||
buf.append("</tr>");
|
buf.append("</tr>");
|
||||||
for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) {
|
for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) {
|
||||||
PeerProfile prof = (PeerProfile)iter.next();
|
PeerProfile prof = (PeerProfile)iter.next();
|
||||||
|
@ -31,7 +31,7 @@ import net.i2p.util.Log;
|
|||||||
public class EventPumper implements Runnable {
|
public class EventPumper implements Runnable {
|
||||||
private RouterContext _context;
|
private RouterContext _context;
|
||||||
private Log _log;
|
private Log _log;
|
||||||
private boolean _alive;
|
private volatile boolean _alive;
|
||||||
private Selector _selector;
|
private Selector _selector;
|
||||||
private final List _bufCache;
|
private final List _bufCache;
|
||||||
private final List _wantsRead = new ArrayList(16);
|
private final List _wantsRead = new ArrayList(16);
|
||||||
@ -64,7 +64,7 @@ public class EventPumper implements Runnable {
|
|||||||
_expireIdleWriteTime = MAX_EXPIRE_IDLE_TIME;
|
_expireIdleWriteTime = MAX_EXPIRE_IDLE_TIME;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void startPumping() {
|
public synchronized void startPumping() {
|
||||||
if (_log.shouldLog(Log.INFO))
|
if (_log.shouldLog(Log.INFO))
|
||||||
_log.info("Starting pumper");
|
_log.info("Starting pumper");
|
||||||
// _wantsRead = new ArrayList(16);
|
// _wantsRead = new ArrayList(16);
|
||||||
@ -83,7 +83,7 @@ public class EventPumper implements Runnable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stopPumping() {
|
public synchronized void stopPumping() {
|
||||||
_alive = false;
|
_alive = false;
|
||||||
if (_selector != null && _selector.isOpen())
|
if (_selector != null && _selector.isOpen())
|
||||||
_selector.wakeup();
|
_selector.wakeup();
|
||||||
|
@ -416,7 +416,7 @@ public class NTCPTransport extends TransportImpl {
|
|||||||
private static final int NUM_CONCURRENT_READERS = 3;
|
private static final int NUM_CONCURRENT_READERS = 3;
|
||||||
private static final int NUM_CONCURRENT_WRITERS = 3;
|
private static final int NUM_CONCURRENT_WRITERS = 3;
|
||||||
|
|
||||||
public RouterAddress startListening() {
|
public synchronized RouterAddress startListening() {
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Starting ntcp transport listening");
|
if (_log.shouldLog(Log.DEBUG)) _log.debug("Starting ntcp transport listening");
|
||||||
_finisher.start();
|
_finisher.start();
|
||||||
_pumper.startPumping();
|
_pumper.startPumping();
|
||||||
@ -428,7 +428,7 @@ public class NTCPTransport extends TransportImpl {
|
|||||||
return bindAddress();
|
return bindAddress();
|
||||||
}
|
}
|
||||||
|
|
||||||
public RouterAddress restartListening(RouterAddress addr) {
|
public synchronized RouterAddress restartListening(RouterAddress addr) {
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Restarting ntcp transport listening");
|
if (_log.shouldLog(Log.DEBUG)) _log.debug("Restarting ntcp transport listening");
|
||||||
_finisher.start();
|
_finisher.start();
|
||||||
_pumper.startPumping();
|
_pumper.startPumping();
|
||||||
@ -602,7 +602,7 @@ public class NTCPTransport extends TransportImpl {
|
|||||||
* This doesn't (completely) block, caller should check isAlive()
|
* This doesn't (completely) block, caller should check isAlive()
|
||||||
* before calling startListening() or restartListening()
|
* before calling startListening() or restartListening()
|
||||||
*/
|
*/
|
||||||
public void stopListening() {
|
public synchronized void stopListening() {
|
||||||
if (_log.shouldLog(Log.DEBUG)) _log.debug("Stopping ntcp transport");
|
if (_log.shouldLog(Log.DEBUG)) _log.debug("Stopping ntcp transport");
|
||||||
_pumper.stopPumping();
|
_pumper.stopPumping();
|
||||||
_writer.stopWriting();
|
_writer.stopWriting();
|
||||||
|
@ -1769,48 +1769,48 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
|||||||
buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
|
buf.append(" timeout: ").append(DataHelper.formatDuration(_expireTimeout));
|
||||||
buf.append("</b><br />\n");
|
buf.append("</b><br />\n");
|
||||||
buf.append("<table border=\"1\">\n");
|
buf.append("<table border=\"1\">\n");
|
||||||
buf.append("<tr><td><b><a href=\"#def.peer\">Peer</a></b>");
|
buf.append("<tr><th><a href=\"#def.peer\">Peer</a>");
|
||||||
if (sortFlags != FLAG_ALPHA)
|
if (sortFlags != FLAG_ALPHA)
|
||||||
buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
|
buf.append(" <a href=\"").append(urlBase).append("?sort=0\">V</a> ");
|
||||||
buf.append("</td><td><b><a href=\"#def.dir\">Dir/Intro</a></b></td><td><b><a href=\"#def.idle\">Idle</a></b>");
|
buf.append("</th><th><a href=\"#def.dir\">Dir/Intro</a></th><th><a href=\"#def.idle\">Idle</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle inbound", FLAG_IDLE_IN);
|
||||||
buf.append("/");
|
buf.append("/");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by idle outbound", FLAG_IDLE_OUT);
|
||||||
buf.append("</td>");
|
buf.append("</th>");
|
||||||
buf.append("<td><b><a href=\"#def.rate\">In/Out</a></b>");
|
buf.append("<th><a href=\"#def.rate\">In/Out</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by inbound rate", FLAG_RATE_IN);
|
||||||
buf.append("/");
|
buf.append("/");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by outbound rate", FLAG_RATE_OUT);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.up\">Up</a></b>");
|
buf.append("<th><a href=\"#def.up\">Up</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by connection uptime", FLAG_UPTIME);
|
||||||
buf.append("</td><td><b><a href=\"#def.skew\">skew</a></b>");
|
buf.append("</th><th><a href=\"#def.skew\">skew</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by clock skew", FLAG_SKEW);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.cwnd\">Cwnd</a></b>");
|
buf.append("<th><a href=\"#def.cwnd\">Cwnd</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by congestion window", FLAG_CWND);
|
||||||
buf.append("</td><td><b><a href=\"#def.ssthresh\">Ssthresh</a></b>");
|
buf.append("</th><th><a href=\"#def.ssthresh\">Ssthresh</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by slow start threshold", FLAG_SSTHRESH);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.rtt\">Rtt</a></b>");
|
buf.append("<th><a href=\"#def.rtt\">Rtt</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time", FLAG_RTT);
|
||||||
buf.append("</td><td><b><a href=\"#def.dev\">Dev</a></b>");
|
buf.append("</th><th><a href=\"#def.dev\">Dev</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by round trip time deviation", FLAG_DEV);
|
||||||
buf.append("</td><td><b><a href=\"#def.rto\">Rto</a></b>");
|
buf.append("</th><th><a href=\"#def.rto\">Rto</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by retransmission timeout", FLAG_RTO);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.mtu\">Mtu</a></b>");
|
buf.append("<th><a href=\"#def.mtu\">Mtu</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by maximum transmit unit", FLAG_MTU);
|
||||||
buf.append("</td><td><b><a href=\"#def.send\">Send</a></b>");
|
buf.append("</th><th><a href=\"#def.send\">Send</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets sent", FLAG_SEND);
|
||||||
buf.append("</td><td><b><a href=\"#def.recv\">Recv</a></b>");
|
buf.append("</th><th><a href=\"#def.recv\">Recv</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received", FLAG_RECV);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("<td><b><a href=\"#def.resent\">Resent</a></b>");
|
buf.append("<th><a href=\"#def.resent\">Resent</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets retransmitted", FLAG_RESEND);
|
||||||
buf.append("</td><td><b><a href=\"#def.dupRecv\">DupRecv</a></b>");
|
buf.append("</th><th><a href=\"#def.dupRecv\">DupRecv</a>");
|
||||||
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP);
|
appendSortLinks(buf, urlBase, sortFlags, "Sort by packets received more than once", FLAG_DUP);
|
||||||
buf.append("</td>\n");
|
buf.append("</th>\n");
|
||||||
buf.append("</tr>\n");
|
buf.append("</tr>\n");
|
||||||
out.write(buf.toString());
|
out.write(buf.toString());
|
||||||
buf.setLength(0);
|
buf.setLength(0);
|
||||||
|
@ -439,9 +439,9 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
|||||||
List participating = _context.tunnelDispatcher().listParticipatingTunnels();
|
List participating = _context.tunnelDispatcher().listParticipatingTunnels();
|
||||||
Collections.sort(participating, new TunnelComparator());
|
Collections.sort(participating, new TunnelComparator());
|
||||||
out.write("<h2><a name=\"participating\">Participating tunnels</a>:</h2><table border=\"1\">\n");
|
out.write("<h2><a name=\"participating\">Participating tunnels</a>:</h2><table border=\"1\">\n");
|
||||||
out.write("<tr><td><b>Receive on</b></td><td><b>From</b></td><td>"
|
out.write("<tr><th>Receive on</th><th>From</th><th>"
|
||||||
+ "<b>Send on</b></td><td><b>To</b></td><td><b>Expiration</b></td>"
|
+ "Send on</th><th>To</th><th>Expiration</th>"
|
||||||
+ "<td><b>Usage</b></td><td><b>Rate</b></td><td><b>Role</b></td></tr>\n");
|
+ "<th>Usage</th><th>Rate</th><th>Role</th></tr>\n");
|
||||||
long processed = 0;
|
long processed = 0;
|
||||||
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
|
RateStat rs = _context.statManager().getRate("tunnel.participatingMessageCount");
|
||||||
if (rs != null)
|
if (rs != null)
|
||||||
@ -602,7 +602,7 @@ public class TunnelPoolManager implements TunnelManagerFacade {
|
|||||||
Collections.sort(peerList, new HashComparator());
|
Collections.sort(peerList, new HashComparator());
|
||||||
|
|
||||||
out.write("<h2><a name=\"peers\">Tunnel Counts By Peer</a>:</h2>\n");
|
out.write("<h2><a name=\"peers\">Tunnel Counts By Peer</a>:</h2>\n");
|
||||||
out.write("<table border=\"1\"><tr><td><b>Peer</b></td><td><b>Expl. + Client</b></td><td><b>% of total</b></td><td><b>Part. from + to</b></td><td><b>% of total</b></td></tr>\n");
|
out.write("<table border=\"1\"><tr><th>Peer</th><th>Expl. + Client</th><th>% of total</th><th>Part. from + to</th><th>% of total</th></tr>\n");
|
||||||
for (Hash h : peerList) {
|
for (Hash h : peerList) {
|
||||||
out.write("<tr><td align=\"right\">");
|
out.write("<tr><td align=\"right\">");
|
||||||
out.write(netDbLink(h));
|
out.write(netDbLink(h));
|
||||||
|
@ -276,7 +276,14 @@ public class ControlPoint implements HTTPRequestListener
|
|||||||
{
|
{
|
||||||
int nRoots = devNodeList.size();
|
int nRoots = devNodeList.size();
|
||||||
for (int n=0; n<nRoots; n++) {
|
for (int n=0; n<nRoots; n++) {
|
||||||
Node rootNode = devNodeList.getNode(n);
|
// AIOOB was thrown from here, maybe would be better to
|
||||||
|
// copy the list before traversal?
|
||||||
|
Node rootNode;
|
||||||
|
try {
|
||||||
|
rootNode = devNodeList.getNode(n);
|
||||||
|
} catch (ArrayIndexOutOfBoundsException aioob) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
Device dev = getDevice(rootNode);
|
Device dev = getDevice(rootNode);
|
||||||
if (dev == null)
|
if (dev == null)
|
||||||
continue;
|
continue;
|
||||||
|
Reference in New Issue
Block a user