forked from I2P_Developers/i2p.i2p
Compare commits
1 Commits
fix-docker
...
release-gi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
62d5fab1bb |
@@ -1,31 +0,0 @@
|
||||
.idea
|
||||
.git
|
||||
Dockerfile
|
||||
|
||||
|
||||
# Gradle
|
||||
.gradle
|
||||
build
|
||||
apps/BOB/build
|
||||
apps/addressbook/build
|
||||
apps/desktopgui/build
|
||||
apps/i2pcontrol/build
|
||||
apps/i2psnark/build
|
||||
apps/i2ptunnel/build
|
||||
apps/imagegen/build
|
||||
apps/jetty/build
|
||||
apps/jrobin/build
|
||||
apps/ministreaming/java/build
|
||||
apps/ministreaming/build
|
||||
apps/routerconsole/build
|
||||
apps/sam/build
|
||||
apps/streaming/build
|
||||
apps/susidns/build
|
||||
apps/susimail/build
|
||||
apps/systray/build
|
||||
core/java/build
|
||||
core/build
|
||||
installer/build
|
||||
router/java/build
|
||||
router/build
|
||||
|
||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -54,10 +54,4 @@ sloccount.sc
|
||||
.settings/
|
||||
# IDEA
|
||||
*.iml
|
||||
.idea
|
||||
|
||||
# Gradle
|
||||
.gradle
|
||||
|
||||
# TODO: why does this file appear?
|
||||
apps/routerconsole/jsp/favicon.ico
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
image: openjdk:8-alpine
|
||||
|
||||
stages:
|
||||
- test
|
||||
- build
|
||||
|
||||
cache:
|
||||
key: ${CI_COMMIT_REF_SLUG}
|
||||
paths:
|
||||
- $HOME/.gradle/caches/
|
||||
- $HOME/.gradle/wrapper/
|
||||
- .gradle
|
||||
|
||||
test:
|
||||
stage: test
|
||||
coverage: '/Total.*?([0-9]{1,3})%/'
|
||||
before_script:
|
||||
- apk add --no-cache grep
|
||||
script:
|
||||
- ./gradlew codeCoverageReport
|
||||
# The actual output that will be parsed by the code coverage
|
||||
- grep -oP "Total.*?%" build/reports/jacoco/html/index.html
|
||||
only:
|
||||
- merge_requests
|
||||
- tags
|
||||
|
||||
# Make sure we can build a docker image
|
||||
# It's cached for later jobs
|
||||
build_docker:
|
||||
stage: build
|
||||
image: docker:19.03.12
|
||||
services:
|
||||
- docker:19.03.12-dind
|
||||
script:
|
||||
# Try to load latest branch image from local tar or from registry
|
||||
- find ..
|
||||
- docker load -i ci-exports/$CI_COMMIT_REF_SLUG.tar || docker pull $CI_REGISTRY_IMAGE:latest || true
|
||||
- docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:latest .
|
||||
- mkdir -p ci-exports/
|
||||
- docker save $CI_REGISTRY_IMAGE:latest > ci-exports/$CI_COMMIT_REF_SLUG.tar
|
||||
variables:
|
||||
# When using dind service, we need to instruct docker to talk with
|
||||
# the daemon started inside of the service. The daemon is available
|
||||
# with a network connection instead of the default
|
||||
# /var/run/docker.sock socket. Docker 19.03 does this automatically
|
||||
# by setting the DOCKER_HOST in
|
||||
# https://github.com/docker-library/docker/blob/d45051476babc297257df490d22cbd806f1b11e4/19.03/docker-entrypoint.sh#L23-L29
|
||||
#
|
||||
# The 'docker' hostname is the alias of the service container as described at
|
||||
# https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#accessing-the-services.
|
||||
#
|
||||
# Specify to Docker where to create the certificates, Docker will
|
||||
# create them automatically on boot, and will create
|
||||
# `/certs/client` that will be shared between the service and job
|
||||
# container, thanks to volume mount from config.toml
|
||||
DOCKER_TLS_CERTDIR: "/certs"
|
||||
# Use TLS https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled
|
||||
DOCKER_HOST: tcp://docker:2376
|
||||
cache:
|
||||
# The same key should be used across branches
|
||||
key: "$CI_COMMIT_REF_SLUG"
|
||||
paths:
|
||||
- ci-exports/
|
||||
only:
|
||||
- master
|
||||
- merge_requests
|
||||
- tags
|
||||
|
||||
6
.idea/ant.xml
generated
Normal file
6
.idea/ant.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="AntConfiguration">
|
||||
<buildFile url="file://$PROJECT_DIR$/build.xml" />
|
||||
</component>
|
||||
</project>
|
||||
41
.idea/compiler.xml
generated
Normal file
41
.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel>
|
||||
<module name="addressbook_main" target="1.7" />
|
||||
<module name="addressbook_test" target="1.7" />
|
||||
<module name="BOB_main" target="1.7" />
|
||||
<module name="BOB_test" target="1.7" />
|
||||
<module name="core_main" target="1.7" />
|
||||
<module name="core_test" target="1.7" />
|
||||
<module name="desktopgui_main" target="1.7" />
|
||||
<module name="desktopgui_test" target="1.7" />
|
||||
<module name="i2psnark_main" target="1.7" />
|
||||
<module name="i2psnark_test" target="1.7" />
|
||||
<module name="i2ptunnel_main" target="1.7" />
|
||||
<module name="i2ptunnel_test" target="1.7" />
|
||||
<module name="installer_main" target="1.7" />
|
||||
<module name="installer_test" target="1.7" />
|
||||
<module name="jetty_main" target="1.7" />
|
||||
<module name="jetty_test" target="1.7" />
|
||||
<module name="jrobin_main" target="1.7" />
|
||||
<module name="jrobin_test" target="1.7" />
|
||||
<module name="ministreaming_main" target="1.7" />
|
||||
<module name="ministreaming_test" target="1.7" />
|
||||
<module name="router_main" target="1.7" />
|
||||
<module name="router_test" target="1.7" />
|
||||
<module name="routerconsole_main" target="1.7" />
|
||||
<module name="routerconsole_test" target="1.7" />
|
||||
<module name="sam_main" target="1.7" />
|
||||
<module name="sam_test" target="1.7" />
|
||||
<module name="streaming_main" target="1.7" />
|
||||
<module name="streaming_test" target="1.7" />
|
||||
<module name="susidns_main" target="1.7" />
|
||||
<module name="susidns_test" target="1.7" />
|
||||
<module name="susimail_main" target="1.7" />
|
||||
<module name="susimail_test" target="1.7" />
|
||||
<module name="systray_main" target="1.7" />
|
||||
<module name="systray_test" target="1.7" />
|
||||
</bytecodeTargetLevel>
|
||||
</component>
|
||||
</project>
|
||||
3
.idea/copyright/profiles_settings.xml
generated
Normal file
3
.idea/copyright/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="CopyrightManager">
|
||||
<settings default="" />
|
||||
</component>
|
||||
9
.idea/libraries/javax_servlet_jsp_2_2_0_v201112011158.xml
generated
Normal file
9
.idea/libraries/javax_servlet_jsp_2_2_0_v201112011158.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="javax.servlet.jsp-2.2.0.v201112011158">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jsp/javax.servlet.jsp-2.2.0.v201112011158.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
22
.idea/libraries/jettylib.xml
generated
Normal file
22
.idea/libraries/jettylib.xml
generated
Normal file
@@ -0,0 +1,22 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jettylib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-security-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlets-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-deploy-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-util-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-servlet-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-http-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-xml-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-server-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/servlet-api-3.0.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-jmx-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-webapp-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-io-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-continuation-8.1.17.v20150415.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/lib/jetty-rewrite-8.1.17.v20150415.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
Normal file
9
.idea/libraries/jrobin_1_5_9_1.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="jrobin-1.5.9.1">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jrobin/jrobin-1.5.9.1.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
10
.idea/libraries/lib.xml
generated
Normal file
10
.idea/libraries/lib.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<component name="libraryTable">
|
||||
<library name="lib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/jstl.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/susidns/src/lib/standard.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
9
.idea/libraries/start.xml
generated
Normal file
9
.idea/libraries/start.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="start">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/jetty-distribution-8.1.17.v20150415/start.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
9
.idea/libraries/systray4j.xml
generated
Normal file
9
.idea/libraries/systray4j.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="systray4j">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/systray/java/lib/systray4j.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
9
.idea/libraries/tomcat_coyote_util.xml
generated
Normal file
9
.idea/libraries/tomcat_coyote_util.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="tomcat-coyote-util">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat/lib/tomcat-coyote-util.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
12
.idea/libraries/tomcat_lib.xml
generated
Normal file
12
.idea/libraries/tomcat_lib.xml
generated
Normal file
@@ -0,0 +1,12 @@
|
||||
<component name="libraryTable">
|
||||
<library name="tomcat-lib">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/tomcat-juli.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/el-api.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper.jar!/" />
|
||||
<root url="jar://$PROJECT_DIR$/apps/jetty/apache-tomcat-deployer/lib/jasper-el.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
9
.idea/libraries/wrapper.xml
generated
Normal file
9
.idea/libraries/wrapper.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="wrapper">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/all/wrapper.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
9
.idea/libraries/wrapper_win.xml
generated
Normal file
9
.idea/libraries/wrapper_win.xml
generated
Normal file
@@ -0,0 +1,9 @@
|
||||
<component name="libraryTable">
|
||||
<library name="wrapper-win">
|
||||
<CLASSES>
|
||||
<root url="jar://$PROJECT_DIR$/installer/lib/wrapper/win-all/wrapper.jar!/" />
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES />
|
||||
</library>
|
||||
</component>
|
||||
57
.idea/misc.xml
generated
Normal file
57
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ClientPropertiesManager">
|
||||
<properties class="javax.swing.AbstractButton">
|
||||
<property name="hideActionText" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JComponent">
|
||||
<property name="html.disable" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JEditorPane">
|
||||
<property name="JEditorPane.w3cLengthUnits" class="java.lang.Boolean" />
|
||||
<property name="JEditorPane.honorDisplayProperties" class="java.lang.Boolean" />
|
||||
<property name="charset" class="java.lang.String" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JList">
|
||||
<property name="List.isFileList" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JPasswordField">
|
||||
<property name="JPasswordField.cutCopyAllowed" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JSlider">
|
||||
<property name="Slider.paintThumbArrowShape" class="java.lang.Boolean" />
|
||||
<property name="JSlider.isFilled" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JTable">
|
||||
<property name="Table.isFileList" class="java.lang.Boolean" />
|
||||
<property name="JTable.autoStartsEdit" class="java.lang.Boolean" />
|
||||
<property name="terminateEditOnFocusLost" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JToolBar">
|
||||
<property name="JToolBar.isRollover" class="java.lang.Boolean" />
|
||||
</properties>
|
||||
<properties class="javax.swing.JTree">
|
||||
<property name="JTree.lineStyle" class="java.lang.String" />
|
||||
</properties>
|
||||
<properties class="javax.swing.text.JTextComponent">
|
||||
<property name="caretAspectRatio" class="java.lang.Double" />
|
||||
<property name="caretWidth" class="java.lang.Integer" />
|
||||
</properties>
|
||||
</component>
|
||||
<component name="EntryPointsManager">
|
||||
<entry_points version="2.0" />
|
||||
</component>
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
|
||||
<OptionsSetting value="true" id="Add" />
|
||||
<OptionsSetting value="true" id="Remove" />
|
||||
<OptionsSetting value="true" id="Checkout" />
|
||||
<OptionsSetting value="true" id="Update" />
|
||||
<OptionsSetting value="true" id="Status" />
|
||||
<OptionsSetting value="true" id="Edit" />
|
||||
<ConfirmationsSetting value="0" id="Add" />
|
||||
<ConfirmationsSetting value="0" id="Remove" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" default="true" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build" />
|
||||
</component>
|
||||
</project>
|
||||
80
.idea/modules.xml
generated
Normal file
80
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/BOB/BOB.iml" group="apps/BOB" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/BOB/BOB.iml" filepath="$PROJECT_DIR$/apps/BOB/BOB.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_main.iml" group="apps/BOB" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/BOB/BOB_test.iml" group="apps/BOB" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook.iml" group="apps/addressbook" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/addressbook/addressbook.iml" filepath="$PROJECT_DIR$/apps/addressbook/addressbook.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_main.iml" group="apps/addressbook" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/addressbook/addressbook_test.iml" group="apps/addressbook" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/admin/admin.iml" filepath="$PROJECT_DIR$/apps/admin/admin.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/apps.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/apps.iml" group="apps" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/core/core.iml" filepath="$PROJECT_DIR$/.idea/modules/core/core.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/core/core.iml" filepath="$PROJECT_DIR$/core/core.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/core/core_main.iml" filepath="$PROJECT_DIR$/.idea/modules/core/core_main.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/core/core_test.iml" filepath="$PROJECT_DIR$/.idea/modules/core/core_test.iml" group="core" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui.iml" group="apps/desktopgui" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" filepath="$PROJECT_DIR$/apps/desktopgui/desktopgui.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_main.iml" group="apps/desktopgui" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/desktopgui/desktopgui_test.iml" group="apps/desktopgui" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/i2p.i2p.sl.iml" filepath="$PROJECT_DIR$/.idea/modules/i2p.i2p.sl.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark.iml" group="apps/i2psnark" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" filepath="$PROJECT_DIR$/apps/i2psnark/i2psnark.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_main.iml" group="apps/i2psnark" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2psnark/i2psnark_test.iml" group="apps/i2psnark" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel.iml" group="apps/i2ptunnel" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" filepath="$PROJECT_DIR$/apps/i2ptunnel/i2ptunnel.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_main.iml" group="apps/i2ptunnel" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/i2ptunnel/i2ptunnel_test.iml" group="apps/i2ptunnel" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" filepath="$PROJECT_DIR$/apps/imagegen/identicon/identicon.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" filepath="$PROJECT_DIR$/apps/imagegen/imagegen/imagegen.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/installer/installer.iml" filepath="$PROJECT_DIR$/.idea/modules/installer/installer.iml" group="installer" />
|
||||
<module fileurl="file://$PROJECT_DIR$/installer/installer.iml" filepath="$PROJECT_DIR$/installer/installer.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/installer/installer_main.iml" filepath="$PROJECT_DIR$/.idea/modules/installer/installer_main.iml" group="installer" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/installer/installer_test.iml" filepath="$PROJECT_DIR$/.idea/modules/installer/installer_test.iml" group="installer" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jetty/jetty.iml" group="apps/jetty" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/jetty/jetty.iml" filepath="$PROJECT_DIR$/apps/jetty/jetty.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_main.iml" group="apps/jetty" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jetty/jetty_test.iml" group="apps/jetty" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin.iml" group="apps/jrobin" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_main.iml" group="apps/jrobin" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/jrobin/jrobin_test.iml" group="apps/jrobin" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming.iml" group="apps/ministreaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" filepath="$PROJECT_DIR$/apps/ministreaming/ministreaming.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_main.iml" group="apps/ministreaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/ministreaming/ministreaming_test.iml" group="apps/ministreaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/router/router.iml" filepath="$PROJECT_DIR$/.idea/modules/router/router.iml" group="router" />
|
||||
<module fileurl="file://$PROJECT_DIR$/router/router.iml" filepath="$PROJECT_DIR$/router/router.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/router/router_main.iml" filepath="$PROJECT_DIR$/.idea/modules/router/router_main.iml" group="router" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/router/router_test.iml" filepath="$PROJECT_DIR$/.idea/modules/router/router_test.iml" group="router" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole.iml" group="apps/routerconsole" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" filepath="$PROJECT_DIR$/apps/routerconsole/routerconsole.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_main.iml" group="apps/routerconsole" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/routerconsole/routerconsole_test.iml" group="apps/routerconsole" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/sam/sam.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/sam/sam.iml" group="apps/sam" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/sam/sam.iml" filepath="$PROJECT_DIR$/apps/sam/sam.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/sam/sam_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/sam/sam_main.iml" group="apps/sam" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/sam/sam_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/sam/sam_test.iml" group="apps/sam" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/streaming/streaming.iml" group="apps/streaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/streaming/streaming.iml" filepath="$PROJECT_DIR$/apps/streaming/streaming.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_main.iml" group="apps/streaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/streaming/streaming_test.iml" group="apps/streaming" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susidns/susidns.iml" group="apps/susidns" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/susidns/susidns.iml" filepath="$PROJECT_DIR$/apps/susidns/susidns.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_main.iml" group="apps/susidns" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susidns/susidns_test.iml" group="apps/susidns" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susimail/susimail.iml" group="apps/susimail" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/susimail/susimail.iml" filepath="$PROJECT_DIR$/apps/susimail/susimail.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_main.iml" group="apps/susimail" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/susimail/susimail_test.iml" group="apps/susimail" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/systray/systray.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/systray/systray.iml" group="apps/systray" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/systray/systray.iml" filepath="$PROJECT_DIR$/apps/systray/systray.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/systray/systray_main.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/systray/systray_main.iml" group="apps/systray" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/modules/apps/systray/systray_test.iml" filepath="$PROJECT_DIR$/.idea/modules/apps/systray/systray_test.iml" group="apps/systray" />
|
||||
<module fileurl="file://$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" filepath="$PROJECT_DIR$/apps/imagegen/zxing/zxing.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
.idea/runConfigurations/updater.xml
generated
Normal file
6
.idea/runConfigurations/updater.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="updater" type="AntRunConfiguration" factoryName="Ant Target">
|
||||
<antsettings antfile="file://$PROJECT_DIR$/build.xml" target="updater" />
|
||||
<method />
|
||||
</configuration>
|
||||
</component>
|
||||
16
.travis.yml
16
.travis.yml
@@ -1,17 +1,17 @@
|
||||
language: java
|
||||
dist: bionic
|
||||
dist: xenial
|
||||
|
||||
jdk:
|
||||
- oraclejdk11
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- jdk: oraclejdk11
|
||||
- jdk: oraclejdk8
|
||||
addons:
|
||||
sonarcloud:
|
||||
organization: "i2p"
|
||||
before_install:
|
||||
- sed -i "1iplugins {\n id 'org.sonarqube' version '3.0'\n}\n" build.gradle
|
||||
- sed -i "1iplugins {\n id 'org.sonarqube' version '2.6.1'\n}\n" build.gradle
|
||||
- jdk: openjdk8
|
||||
|
||||
before_cache:
|
||||
@@ -24,11 +24,13 @@ cache:
|
||||
- $HOME/.sonar/cache/
|
||||
- .gradle
|
||||
|
||||
env:
|
||||
- SONAR_SCANNER_OPTS="-Xmx2048m"
|
||||
|
||||
script:
|
||||
- travis_wait 45 ./tests/scripts/travis.sh
|
||||
- |
|
||||
if [ "$TRAVIS_JDK_VERSION" == "oraclejdk8" ]; then
|
||||
./gradlew sonarqube codeCoverageReport
|
||||
else
|
||||
./gradlew check codeCoverageReport
|
||||
fi
|
||||
|
||||
after_success:
|
||||
- bash <(curl -s https://codecov.io/bash)
|
||||
|
||||
26
.tx/config
26
.tx/config
@@ -619,21 +619,21 @@ trans.tr_TR = installer/resources/eepsite/docroot/help/index_tr.html
|
||||
;; Text on /console
|
||||
;;
|
||||
type = HTML
|
||||
source_file = apps/routerconsole/resources/docs/readme.html
|
||||
source_file = installer/resources/readme/readme.html
|
||||
source_lang = en
|
||||
trans.ar = apps/routerconsole/resources/docs/readme_ar.html
|
||||
trans.de = apps/routerconsole/resources/docs/readme_de.html
|
||||
trans.fr = apps/routerconsole/resources/docs/readme_fr.html
|
||||
trans.ar = installer/resources/readme/readme_ar.html
|
||||
trans.de = installer/resources/readme/readme_de.html
|
||||
trans.fr = installer/resources/readme/readme_fr.html
|
||||
;; Java converts id to in
|
||||
trans.id = apps/routerconsole/resources/docs/readme_in.html
|
||||
trans.it = apps/routerconsole/resources/docs/readme_it.html
|
||||
trans.ja = apps/routerconsole/resources/docs/readme_ja.html
|
||||
trans.pl = apps/routerconsole/resources/docs/readme_pl.html
|
||||
trans.pt = apps/routerconsole/resources/docs/readme_pt.html
|
||||
trans.ro = apps/routerconsole/resources/docs/readme_ro.html
|
||||
trans.ru_RU = apps/routerconsole/resources/docs/readme_ru.html
|
||||
trans.tr_TR = apps/routerconsole/resources/docs/readme_tr.html
|
||||
trans.zh_CN = apps/routerconsole/resources/docs/readme_zh.html
|
||||
trans.id = installer/resources/readme/readme_in.html
|
||||
trans.it = installer/resources/readme/readme_it.html
|
||||
trans.ja = installer/resources/readme/readme_ja.html
|
||||
trans.pl = installer/resources/readme/readme_pl.html
|
||||
trans.pt = installer/resources/readme/readme_pt.html
|
||||
trans.ro = installer/resources/readme/readme_ro.html
|
||||
trans.ru_RU = installer/resources/readme/readme_ru.html
|
||||
trans.tr_TR = installer/resources/readme/readme_tr.html
|
||||
trans.zh_CN = installer/resources/readme/readme_zh.html
|
||||
|
||||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
14
Docker.entrypoint.sh
Normal file
14
Docker.entrypoint.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#!/bin/sh
|
||||
|
||||
export JAVA_HOME=/opt/jdk/jre
|
||||
|
||||
# Ensure user rights
|
||||
chown -R i2p:nobody /opt/i2p
|
||||
chmod -R u+rwx /opt/i2p
|
||||
|
||||
gosu i2p /opt/i2p/i2psvc /opt/i2p/wrapper.config wrapper.pidfile=/var/tmp/i2p.pid \
|
||||
wrapper.name=i2p \
|
||||
wrapper.displayname="I2P Service" \
|
||||
wrapper.statusfile=/var/tmp/i2p.status \
|
||||
wrapper.java.statusfile=/var/tmp/i2p.java.status \
|
||||
wrapper.logfile=/var/tmp/wrapper.log
|
||||
87
Dockerfile
87
Dockerfile
@@ -1,47 +1,62 @@
|
||||
# Use a multi-stage build to reduce the size of the resulting image
|
||||
# We need alpine >v3 in order to install an apache-ant > 1.9
|
||||
FROM alpine:3 as builder
|
||||
ENV I2P_PREFIX="/opt/i2p"
|
||||
FROM meeh/java8server:latest
|
||||
# Docker image based on Alpine with Java.
|
||||
|
||||
WORKDIR /tmp/build
|
||||
COPY . ./
|
||||
# We use Oracle Java to run I2P, but uses the openjdk to build it.
|
||||
|
||||
# Build installer
|
||||
RUN apk --no-cache add build-base gettext tar bzip2 apache-ant openjdk8 expect
|
||||
RUN echo "noExe=true" >> build.properties
|
||||
RUN ant installer-linux
|
||||
RUN mkdir -p /opt
|
||||
RUN mv i2pinstall*.jar /tmp/i2pinstall.jar
|
||||
|
||||
# Install i2p using the installer into I2P_PREFIX
|
||||
RUN expect -f ./Docker.expt
|
||||
RUN cd ${I2P_PREFIX}
|
||||
RUN rm -fr man docs *.bat *.command *.app
|
||||
MAINTAINER Mikal Villa <mikal@sigterm.no>
|
||||
|
||||
# Second stage only using the installer from the last stage
|
||||
# ---------------------------------------------------------
|
||||
# We can't use alpine here as the java service wrapper is built with glibc
|
||||
# alpine uses musl
|
||||
FROM openjdk:11.0-jre-slim
|
||||
|
||||
ARG I2P_UID=1000
|
||||
ARG I2P_USER=i2p
|
||||
ENV GIT_BRANCH="master"
|
||||
ENV I2P_PREFIX="/opt/i2p"
|
||||
ENV PATH=${I2P_PREFIX}/bin:$PATH
|
||||
ENV JAVA_HOME=/usr/lib/jvm/default-jvm
|
||||
|
||||
# "install" i2p by copying over installed files
|
||||
COPY --from=builder /opt/i2p ${I2P_PREFIX}
|
||||
COPY docker/* /opt/i2p/
|
||||
ENV GOSU_VERSION=1.7
|
||||
ENV GOSU_SHASUM="34049cfc713e8b74b90d6de49690fa601dc040021980812b2f1f691534be8a50 /usr/local/bin/gosu"
|
||||
|
||||
# Setup user and fix permissions in
|
||||
RUN adduser --system --uid ${I2P_UID} --home /user ${I2P_USER} \
|
||||
&& chown -R ${I2P_USER} /user \
|
||||
&& chown -R ${I2P_USER} ${I2P_PREFIX} \
|
||||
&& chmod -R u+rwx ${I2P_PREFIX}
|
||||
RUN mkdir /user && adduser -S -h /user i2p && chown -R i2p:nobody /user
|
||||
|
||||
EXPOSE 7654 7656 7657 7658 4444 6668 8998 7659 7660 4445
|
||||
# Adding files first, since Docker.expt is required for installation
|
||||
ADD Docker.expt /tmp/Docker.expt
|
||||
ADD Docker.entrypoint.sh /entrypoint.sh
|
||||
|
||||
USER i2p
|
||||
ENTRYPOINT [ "/opt/i2p/i2psvc" ]
|
||||
CMD [ "/opt/i2p/wrapper.config", "wrapper.pidfile=/var/tmp/i2p.pid", "wrapper.name=i2p", "wrapper.displayname=\"I2P Service\"" , "wrapper.statusfile=/var/tmp/i2p.status", "wrapper.java.statusfile=/var/tmp/i2p.java.status", "wrapper.logfile=/var/tmp/wrapper.log" ]
|
||||
# Required for wget https
|
||||
RUN apk add --no-cache openssl
|
||||
# Gosu is a replacement for su/sudo in docker and not a backdoor :) See https://github.com/tianon/gosu
|
||||
RUN wget -O /usr/local/bin/gosu https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-amd64 \
|
||||
&& echo "${GOSU_SHASUM}" | sha256sum -c && chmod +x /usr/local/bin/gosu
|
||||
|
||||
#
|
||||
# Each RUN is a layer, adding the dependencies and building i2pd in one layer takes around 8-900Mb, so to keep the
|
||||
# image under 200mb we need to remove all the build dependencies in the same "RUN" / layer.
|
||||
#
|
||||
|
||||
# The main layer
|
||||
RUN apk --no-cache add build-base git gettext tar bzip2 apache-ant openjdk8 expect \
|
||||
&& mkdir -p /usr/src/build \
|
||||
&& cd /usr/src/build \
|
||||
&& git clone -b ${GIT_BRANCH} https://github.com/i2p/i2p.i2p.git \
|
||||
&& cd /usr/src/build/i2p.i2p \
|
||||
&& echo "noExe=true" >> build.properties \
|
||||
&& ant installer-linux \
|
||||
&& cp i2pinstall*.jar /tmp/i2pinstall.jar \
|
||||
&& mkdir -p /opt \
|
||||
&& chown i2p:root /opt \
|
||||
&& chmod u+rw /opt \
|
||||
&& gosu i2p expect -f /tmp/Docker.expt \
|
||||
&& cd ${I2P_PREFIX} \
|
||||
&& rm -fr man docs *.bat *.command *.app /tmp/i2pinstall.jar /tmp/Docker.expt \
|
||||
&& rm -fr /usr/src/build \
|
||||
&& apk --purge del build-base apache-ant expect tcl expat git openjdk8 openjdk8-jre openjdk8-jre-base openjdk8-jre-lib bzip2 tar \
|
||||
binutils-libs binutils pkgconfig libcurl libc-dev musl-dev g++ make fortify-headers pkgconf giflib libssh2 libxdmcp libxcb \
|
||||
libx11 pcre alsa-lib libxi libxrender libxml2 readline bash openssl \
|
||||
&& rm -fr /usr/lib/jvm/default-jre \
|
||||
&& ln -sf /opt/jdk/jre /usr/lib/jvm/default-jre \
|
||||
&& chmod a+x /entrypoint.sh
|
||||
|
||||
|
||||
|
||||
EXPOSE 7654 7656 7657 7658 4444 6668 8998 7659 7660 4445 15000-20000
|
||||
|
||||
ENTRYPOINT [ "/entrypoint.sh" ]
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ class Daemon {
|
||||
* client applications.
|
||||
* @param published
|
||||
* The published AddressBook. This address book is published on
|
||||
* the user's I2P Site so that others may subscribe to it.
|
||||
* the user's eepsite so that others may subscribe to it.
|
||||
* May be null.
|
||||
* If non-null, overwrite with the new addressbook.
|
||||
* @param subscriptions
|
||||
@@ -111,7 +111,7 @@ class Daemon {
|
||||
* The NamingService to update, generally the root NamingService from the context.
|
||||
* @param published
|
||||
* The published AddressBook. This address book is published on
|
||||
* the user's I2P Site so that others may subscribe to it.
|
||||
* the user's eepsite so that others may subscribe to it.
|
||||
* May be null.
|
||||
* If non-null, overwrite with the new addressbook.
|
||||
* @param subscriptions
|
||||
|
||||
@@ -2,7 +2,6 @@ sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'src'
|
||||
srcDir 'build/messages-src'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,14 +12,3 @@ dependencies {
|
||||
compile project(':installer')
|
||||
compile project(':apps:systray')
|
||||
}
|
||||
|
||||
// Create the java files from the po files. The jar task will compile them.
|
||||
// This requires gettext 0.19 or higher.
|
||||
// We don't support the "slow way"
|
||||
task bundle {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/desktopgui/messages_de.class")).exists())
|
||||
println "apps/desktopgui/bundle-messages.sh".execute().text
|
||||
}
|
||||
}
|
||||
jar.dependsOn bundle
|
||||
|
||||
@@ -86,8 +86,6 @@
|
||||
<jar basedir="${build}" excludes="messages-src/**" destfile="${dist}/${jar}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
<attribute name="Built-By" value="${build.built-by}" />
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
<attribute name="Workspace-Changes" value="${workspace.changes.tr}" />
|
||||
|
||||
1
apps/desktopgui/bundle-messages.sh
Executable file → Normal file
1
apps/desktopgui/bundle-messages.sh
Executable file → Normal file
@@ -11,7 +11,6 @@
|
||||
# zzz - public domain
|
||||
# Mathiasdm - modifications for desktopgui
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.desktopgui.messages
|
||||
TMPFILE=build/javafiles.txt
|
||||
export TZ=UTC
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
plugins {
|
||||
id 'war'
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
providedCompile project(':router')
|
||||
providedCompile project(':apps:jetty')
|
||||
providedCompile files('../../installer/lib/wrapper/all/wrapper.jar')
|
||||
}
|
||||
|
||||
war {
|
||||
archiveName 'jsonrpc.war'
|
||||
webXml = file('web.xml')
|
||||
}
|
||||
@@ -55,7 +55,7 @@ import java.util.StringTokenizer;
|
||||
* This handles the starting and stopping of Jetty
|
||||
* from a single static class so it can be called via clients.config.
|
||||
*
|
||||
* This makes installation of a new I2P Site a turnkey operation.
|
||||
* This makes installation of a new eepsite a turnkey operation.
|
||||
*
|
||||
* Usage: I2PControlController -d $PLUGIN [start|stop]
|
||||
*
|
||||
|
||||
@@ -6,14 +6,13 @@ sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java/src'
|
||||
srcDir 'java/build/messages-src'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
providedCompile project(':apps:systray')
|
||||
compile project(':apps:systray')
|
||||
compile 'gnu.getopt:java-getopt:1.0.13'
|
||||
providedCompile project(':apps:ministreaming')
|
||||
providedCompile project(':apps:jetty')
|
||||
@@ -35,26 +34,10 @@ artifacts {
|
||||
archives i2psnarkJar
|
||||
}
|
||||
|
||||
// Create the java files from the po files. The jar task will compile them.
|
||||
// This requires gettext 0.19 or higher.
|
||||
// We don't support the "slow way"
|
||||
task bundle {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/org/klomp/snark/web/messages_de.class")).exists())
|
||||
println "apps/i2psnark/java/bundle-messages.sh".execute().text
|
||||
}
|
||||
}
|
||||
war.dependsOn bundle
|
||||
|
||||
war {
|
||||
rootSpec.exclude('/org/klomp/snark/*.class')
|
||||
rootSpec.exclude('/org/klomp/snark/bencode/**')
|
||||
rootSpec.exclude('/org/klomp/snark/comments/**')
|
||||
rootSpec.exclude('/org/klomp/snark/dht/**')
|
||||
rootSpec.exclude('/org/klomp/snark/standalone/**')
|
||||
from ('resources', {
|
||||
into ".resources"
|
||||
})
|
||||
into '.icons', {
|
||||
from 'icons'
|
||||
}
|
||||
webInf {
|
||||
into 'classes/org/klomp/snark/web'
|
||||
from 'mime.properties'
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=org.klomp.snark.web.messages
|
||||
TMPFILE=build/javafiles.txt
|
||||
export TZ=UTC
|
||||
|
||||
@@ -5,10 +5,8 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
@@ -59,6 +57,7 @@ public class I2PSnarkUtil {
|
||||
private int _i2cpPort;
|
||||
private final Map<String, String> _opts;
|
||||
private volatile I2PSocketManager _manager;
|
||||
private boolean _configured;
|
||||
private volatile boolean _connecting;
|
||||
private final Set<Hash> _banlist;
|
||||
private int _maxUploaders;
|
||||
@@ -85,10 +84,6 @@ public class I2PSnarkUtil {
|
||||
public static final String PROP_MAX_BW = "i2cp.outboundBytesPerSecond";
|
||||
public static final boolean DEFAULT_USE_DHT = true;
|
||||
public static final String EEPGET_USER_AGENT = "I2PSnark";
|
||||
private static final List<String> HIDDEN_I2CP_OPTS = Arrays.asList(new String[] {
|
||||
PROP_MAX_BW, "inbound.length", "outbound.length", "inbound.quantity", "outbound.quantity"
|
||||
});
|
||||
|
||||
|
||||
public I2PSnarkUtil(I2PAppContext ctx) {
|
||||
this(ctx, "i2psnark");
|
||||
@@ -147,34 +142,25 @@ public class I2PSnarkUtil {
|
||||
/** @since 0.9.1 */
|
||||
public I2PAppContext getContext() { return _context; }
|
||||
|
||||
/**
|
||||
* @param i2cpHost may be null for no change
|
||||
* @param i2cpPort may be 0 for no change
|
||||
* @param opts may be null for no change
|
||||
*/
|
||||
public boolean configured() { return _configured; }
|
||||
|
||||
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||
public void setI2CPConfig(String i2cpHost, int i2cpPort, Map opts) {
|
||||
if (i2cpHost != null)
|
||||
_i2cpHost = i2cpHost;
|
||||
if (i2cpPort > 0)
|
||||
_i2cpPort = i2cpPort;
|
||||
if (opts != null) {
|
||||
synchronized(_opts) {
|
||||
// removed options...
|
||||
for (Iterator<String> iter = _opts.keySet().iterator(); iter.hasNext(); ) {
|
||||
String k = iter.next();
|
||||
if (!HIDDEN_I2CP_OPTS.contains(k) && !opts.containsKey(k))
|
||||
iter.remove();
|
||||
}
|
||||
_opts.putAll(opts);
|
||||
}
|
||||
}
|
||||
// can't remove any options this way...
|
||||
if (opts != null)
|
||||
_opts.putAll(opts);
|
||||
// this updates the session options and tells the router
|
||||
setMaxUpBW(_maxUpBW);
|
||||
_configured = true;
|
||||
}
|
||||
|
||||
public void setMaxUploaders(int limit) {
|
||||
_maxUploaders = limit;
|
||||
_configured = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,16 +169,13 @@ public class I2PSnarkUtil {
|
||||
*/
|
||||
public void setMaxUpBW(int limit) {
|
||||
_maxUpBW = limit;
|
||||
synchronized(_opts) {
|
||||
_opts.put(PROP_MAX_BW, Integer.toString(limit * (1024 * 6 / 5))); // add a little for overhead
|
||||
}
|
||||
_opts.put(PROP_MAX_BW, Integer.toString(limit * (1024 * 6 / 5))); // add a little for overhead
|
||||
_configured = true;
|
||||
if (_manager != null) {
|
||||
I2PSession sess = _manager.getSession();
|
||||
if (sess != null) {
|
||||
Properties newProps = new Properties();
|
||||
synchronized(_opts) {
|
||||
newProps.putAll(_opts);
|
||||
}
|
||||
newProps.putAll(_opts);
|
||||
sess.updateOptions(newProps);
|
||||
}
|
||||
}
|
||||
@@ -200,24 +183,17 @@ public class I2PSnarkUtil {
|
||||
|
||||
public void setMaxConnections(int limit) {
|
||||
_maxConnections = limit;
|
||||
_configured = true;
|
||||
}
|
||||
|
||||
public void setStartupDelay(int minutes) {
|
||||
_startupDelay = minutes;
|
||||
_configured = true;
|
||||
}
|
||||
|
||||
public String getI2CPHost() { return _i2cpHost; }
|
||||
public int getI2CPPort() { return _i2cpPort; }
|
||||
|
||||
/**
|
||||
* @return a copy
|
||||
*/
|
||||
public Map<String, String> getI2CPOptions() {
|
||||
synchronized(_opts) {
|
||||
return new HashMap<String, String>(_opts);
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, String> getI2CPOptions() { return _opts; }
|
||||
public String getEepProxyHost() { return _proxyHost; }
|
||||
public int getEepProxyPort() { return _proxyPort; }
|
||||
public boolean getEepProxySet() { return _shouldProxy; }
|
||||
@@ -249,8 +225,9 @@ public class I2PSnarkUtil {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Connecting to I2P", new Exception("I did it"));
|
||||
Properties opts = _context.getProperties();
|
||||
synchronized(_opts) {
|
||||
opts.putAll(_opts);
|
||||
if (_opts != null) {
|
||||
for (Map.Entry<String, String> entry : _opts.entrySet() )
|
||||
opts.setProperty(entry.getKey(), entry.getValue());
|
||||
}
|
||||
// override preference and start with two tunnels. IdleChecker will ramp up/down as necessary
|
||||
String sin = opts.getProperty("inbound.quantity");
|
||||
|
||||
@@ -1068,8 +1068,7 @@ class PeerCoordinator implements PeerListener
|
||||
// just in case
|
||||
removePartialPiece(piece);
|
||||
// Oops. We didn't actually download this then... :(
|
||||
// Reports of counter going negative?
|
||||
//downloaded.addAndGet(0 - metainfo.getPieceLength(piece));
|
||||
downloaded.addAndGet(0 - metainfo.getPieceLength(piece));
|
||||
// Mark this peer as not having the piece. PeerState will update its bitfield.
|
||||
for (Piece pc : wantedPieces) {
|
||||
if (pc.getId() == piece) {
|
||||
|
||||
@@ -461,7 +461,7 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
*/
|
||||
private boolean writeTorrents(PrintWriter out, HttpServletRequest req, boolean canWrite) throws IOException {
|
||||
/** dl, ul, down rate, up rate, peers, size */
|
||||
final long stats[] = new long[6];
|
||||
final long stats[] = {0,0,0,0,0,0};
|
||||
String peerParam = req.getParameter("p");
|
||||
String stParam = req.getParameter("st");
|
||||
|
||||
@@ -2479,8 +2479,8 @@ public class I2PSnarkServlet extends BasicServlet {
|
||||
if (!_context.isRouterContext()) {
|
||||
try {
|
||||
// class only in standalone builds
|
||||
Class<?> helper = Class.forName("org.klomp.snark.standalone.ConfigUIHelper");
|
||||
Method getLangSettings = helper.getMethod("getLangSettings", I2PAppContext.class);
|
||||
Class helper = Class.forName("org.klomp.snark.standalone.ConfigUIHelper");
|
||||
Method getLangSettings = helper.getMethod("getLangSettings", new Class[] {I2PAppContext.class});
|
||||
String langSettings = (String) getLangSettings.invoke(null, _context);
|
||||
// If we get to here, we have the language settings
|
||||
out.write("<tr><td>");
|
||||
|
||||
@@ -6,8 +6,6 @@ sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java/src'
|
||||
srcDir 'java/build/messages-src'
|
||||
srcDir 'java/build/messages-proxy-src'
|
||||
}
|
||||
}
|
||||
test {
|
||||
@@ -19,31 +17,13 @@ sourceSets {
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
providedCompile project(':apps:ministreaming')
|
||||
compile project(':apps:ministreaming')
|
||||
compile 'gnu.getopt:java-getopt:1.0.13'
|
||||
providedCompile project(':apps:jetty')
|
||||
}
|
||||
|
||||
// Create the java files from the po files. The jar task will compile them.
|
||||
// This requires gettext 0.19 or higher.
|
||||
// We don't support the "slow way"
|
||||
task bundleProxy {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/i2ptunnel/proxy/messages_de.class")).exists())
|
||||
println "apps/i2ptunnel/java/bundle-messages-proxy.sh".execute().text
|
||||
}
|
||||
}
|
||||
|
||||
task bundle {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/i2ptunnel/web/messages_de.class")).exists())
|
||||
println "apps/i2ptunnel/java/bundle-messages.sh".execute().text
|
||||
}
|
||||
}
|
||||
|
||||
task i2ptunnelJar(type: Jar) {
|
||||
from sourceSets.main.output
|
||||
exclude '**/web/*.class'
|
||||
exclude '**/ui/*.class'
|
||||
exclude '**/EditBean.class'
|
||||
exclude '**/IndexBean.class'
|
||||
@@ -51,21 +31,8 @@ task i2ptunnelJar(type: Jar) {
|
||||
attributes 'Main-Class': 'net.i2p.i2ptunnel.I2PTunnel'
|
||||
attributes 'Class-Path': 'i2p.jar mstreaming.jar'
|
||||
}
|
||||
from ('resources', {
|
||||
into "net/i2p/i2ptunnel/resources"
|
||||
})
|
||||
from ('../routerconsole/jsp', {
|
||||
include 'themes/console/*/*.css'
|
||||
include 'themes/console/images/i2plogo.png'
|
||||
include 'themes/console/images/favicon.ico'
|
||||
include 'themes/console/images/itoopie_sm.png'
|
||||
into "net/i2p/i2ptunnel/resources"
|
||||
})
|
||||
}
|
||||
i2ptunnelJar.dependsOn bundleProxy
|
||||
war.dependsOn bundle
|
||||
|
||||
// not needed unless we're building for both android and regular
|
||||
task tempBeansJar(type: Jar) {
|
||||
from sourceSets.main.output
|
||||
include '**/EditBean.class'
|
||||
@@ -74,7 +41,6 @@ task tempBeansJar(type: Jar) {
|
||||
baseName = 'temp-beans'
|
||||
}
|
||||
|
||||
// only for android
|
||||
task uiJar(type: Jar) {
|
||||
baseName = 'i2ptunnel-ui'
|
||||
from sourceSets.main.output
|
||||
@@ -85,26 +51,12 @@ task uiJar(type: Jar) {
|
||||
}
|
||||
|
||||
artifacts {
|
||||
archives i2ptunnelJar //, tempBeansJar, uiJar
|
||||
archives i2ptunnelJar, tempBeansJar, uiJar
|
||||
}
|
||||
|
||||
war {
|
||||
include '**/EditBean.class'
|
||||
include '**/ui/*.class'
|
||||
include '**/IndexBean.class'
|
||||
from 'jsp'
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/*.class')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/access')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/irc')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/localServer')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/proxy')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/socks')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/streamr')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/udp')
|
||||
rootSpec.exclude('/net/i2p/i2ptunnel/udpTunnel')
|
||||
exclude 'jsp/web.xml'
|
||||
exclude '*.jsi'
|
||||
exclude '*.jsp'
|
||||
webXml = file('jsp/web.xml')
|
||||
}
|
||||
|
||||
|
||||
10
apps/i2ptunnel/java/.classpath
Normal file
10
apps/i2ptunnel/java/.classpath
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="test/junit"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/ministreaming"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
|
||||
<classpathentry kind="output" path="build/obj"/>
|
||||
</classpath>
|
||||
17
apps/i2ptunnel/java/.project
Normal file
17
apps/i2ptunnel/java/.project
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>i2ptunnel</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -86,12 +86,7 @@
|
||||
<target name="jar" depends="builddep, compile, bundle-proxy, jarUpToDate, listChangedFiles" unless="jar.uptodate" >
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.j.tr" value="" />
|
||||
<mkdir dir="./build/obj/net/i2p/i2ptunnel/resources"/>
|
||||
<copy todir="./build/obj/net/i2p/i2ptunnel/resources">
|
||||
<fileset dir="../../routerconsole/jsp/" includes="themes/console/*/*.css themes/console/images/i2plogo.png themes/console/images/favicon.ico themes/console/images/itoopie_sm.png" />
|
||||
<fileset dir="../resources" includes="**/*.ht" />
|
||||
</copy>
|
||||
<jar destfile="./build/i2ptunnel.jar" basedir="./build/obj" excludes="**/ui/*.class **/web/*.class" >
|
||||
<jar destfile="./build/i2ptunnel.jar" basedir="./build/obj" includes="**/*.class" excludes="**/ui/*.class **/web/*.class" >
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="net.i2p.i2ptunnel.I2PTunnel" />
|
||||
<attribute name="${manifest.classpath.name}" value="i2p.jar mstreaming.jar" />
|
||||
@@ -235,7 +230,7 @@
|
||||
<pathelement location="../../../build/i2p.jar" />
|
||||
</classpath>
|
||||
<arg value="tag" />
|
||||
<arg value="../resources/proxy/" />
|
||||
<arg value="../../../installer/resources/proxy/" />
|
||||
<arg value="build/Proxy.java" />
|
||||
</java>
|
||||
</target>
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.i2ptunnel.proxy.messages
|
||||
TMPFILE=build/javafiles-proxy.txt
|
||||
export TZ=UTC
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.i2ptunnel.web.messages
|
||||
TMPFILE=build/javafiles.txt
|
||||
export TZ=UTC
|
||||
|
||||
@@ -291,13 +291,10 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
_socketManagerState = SocketManagerState.INIT;
|
||||
// We could be here a LONG time, holding the lock
|
||||
socketManager = buildSocketManager(tunnel, pkf);
|
||||
/*
|
||||
since we enabled ratchet by default, we're not compatible with ancient servers anyway.
|
||||
// FIXME may not be the right place for this
|
||||
I2PSession sub = addSubsession(tunnel);
|
||||
if (sub != null && _log.shouldLog(Log.WARN))
|
||||
_log.warn("Added subsession " + sub);
|
||||
*/
|
||||
} else {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info(tunnel.getClientOptions().getProperty("inbound.nickname") + ": Not building a new socket manager since the old one is open [s=" + s + "]");
|
||||
@@ -310,15 +307,9 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info(tunnel.getClientOptions().getProperty("inbound.nickname") + ": Building a new socket manager since there is no other one");
|
||||
socketManager = buildSocketManager(tunnel, pkf);
|
||||
|
||||
/*
|
||||
since we enabled ratchet by default, we're not compatible with ancient servers anyway.
|
||||
|
||||
I2PSession sub = addSubsession(tunnel);
|
||||
if (sub != null && _log.shouldLog(Log.WARN))
|
||||
_log.warn("Added subsession " + sub);
|
||||
*/
|
||||
|
||||
}
|
||||
return socketManager;
|
||||
}
|
||||
@@ -328,9 +319,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
*
|
||||
* @return subsession, or null if none was added
|
||||
* @since 0.9.20
|
||||
* @deprecated unused as of 0.9.49
|
||||
*/
|
||||
@Deprecated
|
||||
protected static synchronized I2PSession addSubsession(I2PTunnel tunnel) {
|
||||
I2PSession sess = socketManager.getSession();
|
||||
if (sess.getMyDestination().getSigType() == SigType.DSA_SHA1)
|
||||
|
||||
@@ -68,7 +68,7 @@ import net.i2p.util.PortMapper;
|
||||
* Rewrite as http://i2p/$b64key/...
|
||||
*
|
||||
* If the $site resolves with the I2P naming service, then it is directed towards
|
||||
* that I2P Site, otherwise it is directed towards this client's outproxy (typically
|
||||
* that eepsite, otherwise it is directed towards this client's outproxy (typically
|
||||
* "squid.i2p"). Only HTTP and HTTPS are supported (no ftp, mailto, etc). Both GET
|
||||
* and POST have been tested, though other $methods should work.
|
||||
*
|
||||
@@ -678,7 +678,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
|
||||
// allow i2paddresshelper=<b32>.b32.i2p syntax.
|
||||
/*
|
||||
also i2paddresshelper=name.i2p for aliases
|
||||
i.e. on your I2P Site put
|
||||
i.e. on your eepsite put
|
||||
<a href="?i2paddresshelper=name.i2p">This is the name I want to be called.</a>
|
||||
*/
|
||||
Destination _dest = _context.namingService().lookup(ahelperKey);
|
||||
@@ -1351,7 +1351,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn
|
||||
}
|
||||
|
||||
// Redirect to non-addresshelper URL to not clog the browser address bar
|
||||
// and not pass the parameter to the I2P Site.
|
||||
// and not pass the parameter to the eepsite.
|
||||
// This also prevents the not-found error page from looking bad
|
||||
// Syndie can't handle a redirect of a POST
|
||||
if (ahelperPresent && !"POST".equals(method) && !"PUT".equals(method)) {
|
||||
|
||||
@@ -7,7 +7,6 @@ import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
@@ -41,7 +40,6 @@ import net.i2p.data.Base64;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.Destination;
|
||||
import net.i2p.data.i2cp.MessageStatusMessage;
|
||||
import net.i2p.i2ptunnel.localServer.LocalHTTPServer;
|
||||
import net.i2p.util.EepGet;
|
||||
import net.i2p.util.EventDispatcher;
|
||||
import net.i2p.util.InternalSocket;
|
||||
@@ -672,7 +670,8 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
|
||||
* @since 0.9.4 moved from I2PTunnelHTTPClient
|
||||
*/
|
||||
protected static String getErrorPage(I2PAppContext ctx, String base, String backup) {
|
||||
String file = "proxy/" + base + "-header.ht";
|
||||
File errorDir = new File(ctx.getBaseDir(), "docs");
|
||||
File file = new File(errorDir, base + "-header.ht");
|
||||
try {
|
||||
return readFile(ctx, file);
|
||||
} catch(IOException ioe) {
|
||||
@@ -684,24 +683,20 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
|
||||
private static final String BUNDLE_NAME = "net.i2p.i2ptunnel.proxy.messages";
|
||||
|
||||
/**
|
||||
* As of 0.9.49, loads the error pages from the jar, not the file system.
|
||||
* @since 0.9.4 moved from I2PTunnelHTTPClient
|
||||
*/
|
||||
private static String readFile(I2PAppContext ctx, String file) throws IOException {
|
||||
private static String readFile(I2PAppContext ctx, File file) throws IOException {
|
||||
Reader reader = null;
|
||||
char[] buf = new char[512];
|
||||
StringBuilder out = new StringBuilder(2048);
|
||||
InputStream in = LocalHTTPServer.getResource(file);
|
||||
if (in == null)
|
||||
throw new IOException();
|
||||
try {
|
||||
boolean hasSusiDNS = ctx.portMapper().isRegistered(PortMapper.SVC_SUSIDNS);
|
||||
boolean hasI2PTunnel = ctx.portMapper().isRegistered(PortMapper.SVC_I2PTUNNEL);
|
||||
if (hasSusiDNS && hasI2PTunnel) {
|
||||
reader = new TranslateReader(ctx, BUNDLE_NAME, in);
|
||||
reader = new TranslateReader(ctx, BUNDLE_NAME, new FileInputStream(file));
|
||||
} else {
|
||||
// strip out the addressbook links
|
||||
reader = new InputStreamReader(in, "UTF-8");
|
||||
reader = new InputStreamReader(new FileInputStream(file), "UTF-8");
|
||||
int len;
|
||||
while((len = reader.read(buf)) > 0) {
|
||||
out.append(buf, 0, len);
|
||||
@@ -739,7 +734,6 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
|
||||
String rv = out.toString();
|
||||
return rv;
|
||||
} finally {
|
||||
try { in.close(); } catch (IOException ioe) {}
|
||||
try {
|
||||
if(reader != null)
|
||||
reader.close();
|
||||
|
||||
@@ -218,14 +218,6 @@ public class TunnelControllerGroup implements ClientApp {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper
|
||||
* @since 0.9.49
|
||||
*/
|
||||
public I2PAppContext getContext() {
|
||||
return _context;
|
||||
}
|
||||
|
||||
/**
|
||||
* ClientApp interface
|
||||
* @throws IllegalArgumentException if unable to load config from file
|
||||
@@ -383,8 +375,6 @@ public class TunnelControllerGroup implements ClientApp {
|
||||
* @throws IllegalArgumentException if unable to load from file
|
||||
*/
|
||||
private synchronized void loadControllers(File cfgFile, boolean shouldMigrate) {
|
||||
if (_log.shouldInfo())
|
||||
_log.info("Getting controllers from config file " + cfgFile);
|
||||
File dir = new SecureDirectory(_context.getConfigDir(), CONFIG_DIR);
|
||||
List<Properties> props = null;
|
||||
if (cfgFile.exists()) {
|
||||
@@ -970,6 +960,9 @@ public class TunnelControllerGroup implements ClientApp {
|
||||
* @since 0.9.42
|
||||
*/
|
||||
private List<TunnelController> getControllers(File cfgFile) {
|
||||
if (_log.shouldInfo())
|
||||
_log.info("Getting controllers from config file " + cfgFile);
|
||||
|
||||
synchronized (this) {
|
||||
if (!_controllersLoaded)
|
||||
loadControllers(cfgFile);
|
||||
|
||||
@@ -5,7 +5,6 @@ package net.i2p.i2ptunnel.localServer;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -125,30 +124,32 @@ public abstract class LocalHTTPServer {
|
||||
if ((method.equals("GET") || method.equals("HEAD")) &&
|
||||
targetRequest.startsWith("/themes/") &&
|
||||
!targetRequest.contains("..")) {
|
||||
String filename = targetRequest.substring(1);
|
||||
String filename = null;
|
||||
try {
|
||||
filename = targetRequest.substring(8); // "/themes/".length
|
||||
} catch (IndexOutOfBoundsException ioobe) {
|
||||
return;
|
||||
}
|
||||
// theme hack
|
||||
if (filename.startsWith("themes/console/default/"))
|
||||
if (filename.startsWith("console/default/"))
|
||||
filename = filename.replaceFirst("default", context.getProperty("routerconsole.theme", "light"));
|
||||
InputStream in = getResource(filename);
|
||||
if (in != null) {
|
||||
try {
|
||||
String type;
|
||||
if (filename.endsWith(".css"))
|
||||
type = "text/css";
|
||||
else if (filename.endsWith(".ico"))
|
||||
type = "image/x-icon";
|
||||
else if (filename.endsWith(".png"))
|
||||
type = "image/png";
|
||||
else if (filename.endsWith(".jpg"))
|
||||
type = "image/jpeg";
|
||||
else type = "text/html";
|
||||
out.write("HTTP/1.1 200 OK\r\nContent-Type: ".getBytes("UTF-8"));
|
||||
out.write(type.getBytes("UTF-8"));
|
||||
out.write("\r\nCache-Control: max-age=86400\r\nConnection: close\r\nProxy-Connection: close\r\n\r\n".getBytes("UTF-8"));
|
||||
DataHelper.copy(in, out);
|
||||
} finally {
|
||||
try { in.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
File themesDir = new File(context.getBaseDir(), "docs/themes");
|
||||
File file = new File(themesDir, filename);
|
||||
if (file.exists() && !file.isDirectory()) {
|
||||
String type;
|
||||
if (filename.endsWith(".css"))
|
||||
type = "text/css";
|
||||
else if (filename.endsWith(".ico"))
|
||||
type = "image/x-icon";
|
||||
else if (filename.endsWith(".png"))
|
||||
type = "image/png";
|
||||
else if (filename.endsWith(".jpg"))
|
||||
type = "image/jpeg";
|
||||
else type = "text/html";
|
||||
out.write("HTTP/1.1 200 OK\r\nContent-Type: ".getBytes("UTF-8"));
|
||||
out.write(type.getBytes("UTF-8"));
|
||||
out.write("\r\nCache-Control: max-age=86400\r\nConnection: close\r\nProxy-Connection: close\r\n\r\n".getBytes("UTF-8"));
|
||||
FileUtil.readFile(filename, themesDir.getAbsolutePath(), out);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -482,15 +483,6 @@ public abstract class LocalHTTPServer {
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resource relative path
|
||||
* @return stream or null if not found
|
||||
* @since 0.9.49
|
||||
*/
|
||||
public static InputStream getResource(String resource) {
|
||||
return LocalHTTPServer.class.getResourceAsStream("/net/i2p/i2ptunnel/resources/" + resource);
|
||||
}
|
||||
|
||||
/** these strings go in the jar, not the war */
|
||||
private static final String BUNDLE_NAME = "net.i2p.i2ptunnel.proxy.messages";
|
||||
|
||||
|
||||
@@ -88,53 +88,24 @@ public class GeneralHelper {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the configuration for a new or existing tunnel to disk.
|
||||
* For new tunnels, adds to controller and (if configured) starts it.
|
||||
*/
|
||||
public List<String> saveTunnel(int tunnel, TunnelConfig config) {
|
||||
return saveTunnel(_context, _group, tunnel, config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the configuration for a new or existing tunnel to disk.
|
||||
* For new tunnels, adds to controller and (if configured) starts it.
|
||||
*
|
||||
* @param context unused, taken from tcg
|
||||
*/
|
||||
public static List<String> saveTunnel(I2PAppContext context, TunnelControllerGroup tcg, int tunnel, TunnelConfig config) {
|
||||
List<String> msgs = new ArrayList<String>();
|
||||
TunnelController cur = updateTunnelConfig(tcg, tunnel, config, msgs);
|
||||
msgs.addAll(saveConfig(tcg, cur));
|
||||
public static List<String> saveTunnel(
|
||||
I2PAppContext context, TunnelControllerGroup tcg, int tunnel, TunnelConfig config) {
|
||||
List<String> msgs = updateTunnelConfig(tcg, tunnel, config);
|
||||
msgs.addAll(saveConfig(context, tcg, tunnel));
|
||||
return msgs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the config and if shared, adjust and save the config of other shared clients.
|
||||
* If a new tunnel, this will call tcg.addController(), and start it if so configured.
|
||||
* This does NOT save this tunnel's config. Caller must call saveConfig() also.
|
||||
*/
|
||||
protected static List<String> updateTunnelConfig(TunnelControllerGroup tcg, int tunnel, TunnelConfig config) {
|
||||
List<String> msgs = new ArrayList<String>();
|
||||
updateTunnelConfig(tcg, tunnel, config, msgs);
|
||||
return msgs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the config and if shared, adjust and save the config of other shared clients.
|
||||
* If a new tunnel, this will call tcg.addController(), and start it if so configured.
|
||||
* This does NOT save this tunnel's config. Caller must call saveConfig() also.
|
||||
*
|
||||
* @param msgs out parameter, messages will be added
|
||||
* @return the old or new controller, non-null.
|
||||
* @since 0.9.49
|
||||
*/
|
||||
private static TunnelController updateTunnelConfig(TunnelControllerGroup tcg, int tunnel, TunnelConfig config, List<String> msgs) {
|
||||
// Get current tunnel controller
|
||||
TunnelController cur = getController(tcg, tunnel);
|
||||
|
||||
Properties props = config.getConfig();
|
||||
|
||||
List<String> msgs = new ArrayList<String>();
|
||||
String type = props.getProperty(TunnelController.PROP_TYPE);
|
||||
if (TunnelController.TYPE_STD_CLIENT.equals(type) || TunnelController.TYPE_IRC_CLIENT.equals(type)) {
|
||||
//
|
||||
@@ -183,8 +154,20 @@ public class GeneralHelper {
|
||||
tcg.addController(cur);
|
||||
if (cur.getStartOnLoad())
|
||||
cur.startTunnelBackground();
|
||||
try {
|
||||
tcg.saveConfig(cur);
|
||||
} catch (IOException ioe) {
|
||||
msgs.add("Failed to save initial tunnel config after creation " +
|
||||
cur.getName() + ", check logs:" + ioe);
|
||||
}
|
||||
} else {
|
||||
cur.setConfig(props, "");
|
||||
try {
|
||||
tcg.saveConfig(cur);
|
||||
} catch (IOException ioe) {
|
||||
msgs.add("Failed to save initial tunnel config after creation " +
|
||||
cur.getName() + ", check logs:" + ioe);
|
||||
}
|
||||
}
|
||||
// Only modify other shared tunnels
|
||||
// if the current tunnel is shared, and of supported type
|
||||
@@ -205,13 +188,14 @@ public class GeneralHelper {
|
||||
try {
|
||||
tcg.saveConfig(c);
|
||||
} catch (IOException ioe) {
|
||||
msgs.add(0, _t("Failed to save configuration", tcg.getContext()) + ": " + ioe);
|
||||
msgs.add("Failed to save initial tunnel config after creation " +
|
||||
cur.getName() + ", check logs:" + ioe);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return cur;
|
||||
return msgs;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -256,35 +240,16 @@ public class GeneralHelper {
|
||||
to.setConfig(cOpt, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the configuration for an existing tunnel to disk.
|
||||
* New tunnels must use saveConfig(..., TunnelController).
|
||||
*
|
||||
* @param context unused, taken from tcg
|
||||
* @param tunnel must already exist
|
||||
* @since 0.9.49
|
||||
*/
|
||||
protected static List<String> saveConfig(I2PAppContext context, TunnelControllerGroup tcg, int tunnel) {
|
||||
TunnelController cur = getController(tcg, tunnel);
|
||||
if (cur == null) {
|
||||
List<String> rv = tcg.clearAllMessages();
|
||||
rv.add("Invalid tunnel number");
|
||||
return rv;
|
||||
}
|
||||
return saveConfig(tcg, cur);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the configuration to disk.
|
||||
* For new and existing tunnels.
|
||||
* Does NOT call tcg.addController() for new tunnels. See udpateConfig()
|
||||
*
|
||||
* @since 0.9.49
|
||||
*/
|
||||
private static List<String> saveConfig(TunnelControllerGroup tcg, TunnelController cur) {
|
||||
I2PAppContext context = tcg.getContext();
|
||||
protected static List<String> saveConfig(
|
||||
I2PAppContext context, TunnelControllerGroup tcg, int tunnel) {
|
||||
List<String> rv = tcg.clearAllMessages();
|
||||
try {
|
||||
TunnelController cur = getController(tcg, tunnel);
|
||||
if (cur == null) {
|
||||
//List<String> msgs = new ArrayList<String>();
|
||||
rv.add("Invalid tunnel number");
|
||||
return rv;
|
||||
}
|
||||
tcg.saveConfig(cur);
|
||||
rv.add(0, _t("Configuration changes saved", context));
|
||||
} catch (IOException ioe) {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<div class="panel" id="overview"><h2><%=intl._t("Hidden Services Manager")%></h2><p>
|
||||
<%=intl._t("These are the local services provided by your router.")%>
|
||||
|
||||
<%=intl._t("By default, most of your client services (email, HTTP proxy, IRC) will share the same set of tunnels and be listed as \"Shared Clients\".")%>
|
||||
<%=intl._t("By default, most of your client services (email, HTTP proxy, IRC) will share the same set of tunnels and be listed as \"Shared Clients\" and \"Shared Clients(DSA)\".")%>
|
||||
</p></div>
|
||||
<%
|
||||
boolean isInitialized = indexBean.isInitialized();
|
||||
|
||||
@@ -221,6 +221,10 @@ hr {
|
||||
padding: 7px 8px 3px;
|
||||
}
|
||||
|
||||
button.control, input.control {
|
||||
padding: 5px 8px !important;
|
||||
}
|
||||
|
||||
.control:hover, .control:focus {
|
||||
text-decoration: none;
|
||||
color: #19191f;
|
||||
@@ -655,6 +659,7 @@ input {
|
||||
#tunnelDepth, #tunnelVariance, #tunnelQuantity, #tunnelBackupQuantity,
|
||||
#tunnelDepthOut, #tunnelVarianceOut, #tunnelQuantityOut, #tunnelBackupQuantityOut,
|
||||
#localDestination, #customOptions, #leasesetKey, #name, #description, textarea[name="accessList"] {
|
||||
width: 100% !important;
|
||||
margin: 0 !important;
|
||||
text-align: left !important;
|
||||
}
|
||||
@@ -956,6 +961,7 @@ input.tunnelName, input.tunnelDescriptionText, #userAgents, .freetext.tunnelDesc
|
||||
#customOptions {
|
||||
margin-top: 15px !important;
|
||||
width: 99%;
|
||||
width: calc(100% - 10px) !important;
|
||||
}
|
||||
|
||||
#tunnelDepth, #tunnelVariance, #tunnelQuantity, #tunnelBackupQuantity,
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
<%=intl._t("Try this if none of the tunnel types below fit your requirements, or you don't know what type of tunnel you need.")%>
|
||||
</td></tr>
|
||||
<tr><td>HTTP/HTTPS</td><td>
|
||||
<%=intl._t("Tunnel that acts as an HTTP proxy for reaching I2P Sites inside I2P.")%>
|
||||
<%=intl._t("Tunnel that acts as an HTTP proxy for reaching eepsites inside I2P.")%>
|
||||
<%=intl._t("Set your browser to use this tunnel as an http proxy, or set your \"http_proxy\" environment variable for command-line applications in GNU/Linux.")%>
|
||||
<%=intl._t("Websites outside I2P can also be reached if an HTTP proxy within I2P is known.")%>
|
||||
</td></tr>
|
||||
@@ -161,7 +161,7 @@
|
||||
</td></tr>
|
||||
<tr><td>HTTP</td><td>
|
||||
<%=intl._t("A server tunnel that is customised for HTTP connections.")%>
|
||||
<%=intl._t("Use this tunnel type if you want to host an I2P Site.")%>
|
||||
<%=intl._t("Use this tunnel type if you want to host an eepsite.")%>
|
||||
</td></tr>
|
||||
<tr><td>IRC</td><td>
|
||||
<%=intl._t("A customised server tunnel for hosting IRC networks inside I2P.")%>
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
plugins {
|
||||
id 'war'
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'identicon/core/src/main/java'
|
||||
srcDir 'imagegen/webapp/src/main/java'
|
||||
srcDir 'zxing/core/src/main/java'
|
||||
srcDir 'zxing/javase/src/main/java'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile project(':core')
|
||||
providedCompile project(':apps:jetty')
|
||||
}
|
||||
|
||||
war {
|
||||
from 'imagegen/webapp/src/main/webapp/imagegen.css'
|
||||
from 'imagegen/webapp/src/main/webapp/index.html'
|
||||
webXml = file('imagegen/webapp/src/main/webapp/WEB-INF/web.xml')
|
||||
}
|
||||
@@ -9,8 +9,8 @@ sourceSets {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
ext.jettyVersion = '9.3.29.v20201019'
|
||||
ext.tomcatVersion = '9.0.40'
|
||||
ext.jettyVersion = '9.2.25.v20180606'
|
||||
ext.tomcatVersion = '8.5.40'
|
||||
compile project(':core')
|
||||
compile 'org.eclipse.jetty:jetty-http:' + ext.jettyVersion
|
||||
compile 'org.eclipse.jetty:jetty-io:' + ext.jettyVersion
|
||||
|
||||
@@ -439,7 +439,6 @@
|
||||
<copy todir="build/obj" file="resources/log4j.properties" />
|
||||
<jar destfile="./jettylib/jetty-i2p.jar" basedir="./build/obj" includes="**/*.class log4j.properties" >
|
||||
<manifest>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
<attribute name="Built-By" value="${build.built-by}" />
|
||||
<attribute name="Build-Date" value="${build.timestamp}" />
|
||||
<attribute name="Base-Revision" value="${workspace.version}" />
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
|
||||
package net.i2p.jetty;
|
||||
|
||||
import java.nio.channels.ClosedChannelException;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
@@ -129,7 +127,7 @@ public class I2PLogger implements Logger
|
||||
if (th != null) {
|
||||
if (_log.shouldLog(Log.WARN))
|
||||
_log.warn(msg, th);
|
||||
else if (!(th instanceof ClosedChannelException))
|
||||
else
|
||||
_log.logAlways(Log.WARN, msg + ": " + th);
|
||||
} else {
|
||||
_log.logAlways(Log.WARN, msg);
|
||||
|
||||
@@ -317,7 +317,7 @@ public class I2PRequestLog extends AbstractLifeCycle implements RequestLog
|
||||
buf.append(request.getMethod());
|
||||
buf.append(' ');
|
||||
|
||||
u8buf.append(request.getRequestURI());
|
||||
u8buf.append(request.getHttpURI().toString());
|
||||
|
||||
buf.append(' ');
|
||||
buf.append(request.getProtocol());
|
||||
|
||||
@@ -8,7 +8,6 @@ sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java/src'
|
||||
srcDir 'java/build/messages-src'
|
||||
}
|
||||
}
|
||||
test {
|
||||
@@ -22,17 +21,6 @@ dependencies {
|
||||
api project(':core')
|
||||
}
|
||||
|
||||
// Create the java files from the po files. The jar task will compile them.
|
||||
// This requires gettext 0.19 or higher.
|
||||
// We don't support the "slow way"
|
||||
task bundle {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/client/streaming/messages_de.class")).exists())
|
||||
println "apps/ministreaming/java/bundle-messages.sh".execute().text
|
||||
}
|
||||
}
|
||||
jar.dependsOn bundle
|
||||
|
||||
jar {
|
||||
manifest {
|
||||
attributes 'Specification-Title': 'I2P Streaming API'
|
||||
|
||||
9
apps/ministreaming/java/.classpath
Normal file
9
apps/ministreaming/java/.classpath
Normal file
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="test/junit"/>
|
||||
<classpathentry kind="src" path="demo"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="output" path="build/obj"/>
|
||||
</classpath>
|
||||
17
apps/ministreaming/java/.project
Normal file
17
apps/ministreaming/java/.project
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>ministreaming</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.client.streaming.messages
|
||||
TMPFILE=build/javafiles.txt
|
||||
export TZ=UTC
|
||||
|
||||
@@ -60,6 +60,6 @@ public class I2PSocketExceptionTest {
|
||||
public void testUnknownStatus() {
|
||||
I2PSocketException e = new I2PSocketException(255);
|
||||
assertThat(e.getStatus(), is(255));
|
||||
assertThat(e.getMessage(), endsWith(": 255"));
|
||||
assertThat(e.getMessage(), is("Failure code: 255"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,6 @@ sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'java/src'
|
||||
srcDir 'java/build/messages-src'
|
||||
srcDir 'java/build/messages-countries-src'
|
||||
srcDir 'java/build/messages-news-src'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,27 +40,7 @@ if (System.getenv("TARGET_JAVA_HOME") == null && JavaVersion.current() != JavaVe
|
||||
test.dependsOn scalaTest
|
||||
}
|
||||
|
||||
// Create the java files from the po files. The jar task will compile them.
|
||||
// This requires gettext 0.19 or higher.
|
||||
// We don't support the "slow way"
|
||||
task bundleJar {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/router/countries/messages_de.class")).exists())
|
||||
println "apps/routerconsole/java/bundle-messages-countries.sh".execute().text
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/router/news/messages_de.class")).exists())
|
||||
println "apps/routerconsole/java/bundle-messages-news.sh".execute().text
|
||||
}
|
||||
}
|
||||
task bundle {
|
||||
doLast {
|
||||
if (!(new File("$buildDir/classes/java/main/net/i2p/router/web/messages_de.class")).exists())
|
||||
println "apps/routerconsole/java/bundle-messages.sh".execute().text
|
||||
}
|
||||
}
|
||||
|
||||
task consoleJar(type: Jar) {
|
||||
from sourceSets.main.output
|
||||
exclude 'net/i2p/router/web/helpers/**'
|
||||
jar {
|
||||
manifest {
|
||||
// Top level installer will rename to jrobin.jar
|
||||
// DTG added in 0.8.4, not in the classpath for very old installs,
|
||||
@@ -73,30 +50,12 @@ task consoleJar(type: Jar) {
|
||||
// All new jetty 7 jars should have been in 0.9.6, added in 0.9.7
|
||||
attributes 'Class-Path': 'i2p.jar router.jar jrobin.jar desktopgui.jar i2psnark.jar jstl.jar standard.jar jetty-continuation.jar jetty-http.jar jetty-io.jar jetty-security.jar jetty-servlet.jar jetty-servlets.jar jetty-util.jar jetty-webapp.jar'
|
||||
}
|
||||
from ('resources-news', {
|
||||
into "net/i2p/router/news/resources"
|
||||
})
|
||||
}
|
||||
consoleJar.dependsOn bundleJar
|
||||
war.dependsOn bundle
|
||||
|
||||
artifacts {
|
||||
archives consoleJar
|
||||
}
|
||||
|
||||
war {
|
||||
rootSpec.exclude('/com/vuze/**/*')
|
||||
rootSpec.exclude('/edu/internet2/**/*')
|
||||
rootSpec.exclude('/net/i2p/router/news/*')
|
||||
rootSpec.exclude('/net/i2p/router/sybil/*')
|
||||
rootSpec.exclude('/net/i2p/router/update/*')
|
||||
rootSpec.exclude('/net/i2p/router/web/*.class')
|
||||
from 'jsp'
|
||||
exclude 'jsp/web.xml'
|
||||
exclude '*.jsi'
|
||||
exclude '*.jsp'
|
||||
// Remove classes from the classpath, they are in the jar.
|
||||
// If we return to precompiling jsps this needs to change.
|
||||
classpath = []
|
||||
webXml = file('jsp/web.xml')
|
||||
from ('resources', {
|
||||
into "WEB-INF/classes/net/i2p/router/web/resources"
|
||||
})
|
||||
}
|
||||
|
||||
@@ -140,11 +140,7 @@
|
||||
<copy file="src/edu/internet2/ndt/locale/Tcpbw100_msgs_nl_NL.properties" tofile="build/obj/edu/internet2/ndt/locale/Tcpbw100_msgs_nl.properties" />
|
||||
<copy file="src/edu/internet2/ndt/locale/Tcpbw100_msgs_pt_BR.properties" tofile="build/obj/edu/internet2/ndt/locale/Tcpbw100_msgs_pt.properties" />
|
||||
<copy file="src/edu/internet2/ndt/locale/Tcpbw100_msgs_ru_RU.properties" tofile="build/obj/edu/internet2/ndt/locale/Tcpbw100_msgs_ru.properties" />
|
||||
<mkdir dir="build/obj/net/i2p/router/news/resources" />
|
||||
<copy todir="build/obj/net/i2p/router/news/resources" >
|
||||
<fileset dir="../resources-news" />
|
||||
</copy>
|
||||
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" excludes="net/i2p/router/web/helpers/**/* net/i2p/router/web/servlets/**/* net/i2p/router/web/resources/**/*">
|
||||
<jar destfile="./build/routerconsole.jar" basedir="./build/obj" excludes="net/i2p/router/web/helpers/* net/i2p/router/web/servlets/*">
|
||||
<manifest>
|
||||
<!-- DTG added in 0.8.4, not in the classpath for very old installs, before we changed wrapper.config to specify * -->
|
||||
<!-- very old installs don't have i2psnark,jstl,standard in the classpath... not added in WebAppConfiguration any more -->
|
||||
@@ -164,11 +160,7 @@
|
||||
|
||||
<!-- newsxml.jar only (subset of routerconsole, no war) for Android -->
|
||||
<target name="newsxmljar" depends="compileNewsOnly" >
|
||||
<mkdir dir="build/obj/net/i2p/router/news/resources" />
|
||||
<copy todir="build/obj/net/i2p/router/news/resources" >
|
||||
<fileset dir="../resources-news" />
|
||||
</copy>
|
||||
<jar destfile="./build/newsxml.jar" basedir="./build/obj" includes="net/i2p/router/news/**/*" >
|
||||
<jar destfile="./build/newsxml.jar" basedir="./build/obj" includes="**/*.class">
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
@@ -346,13 +338,10 @@
|
||||
<target name="war" depends="precompilejsp, warUpToDate, listChangedFiles2" unless="war.uptodate" >
|
||||
<!-- set if unset -->
|
||||
<property name="workspace.changes.w.tr" value="" />
|
||||
<!-- Don't include the css in the war, the main build.xml will copy it to docs/themes/console/ -->
|
||||
<copy file="../jsp/themes/console/images/favicon.ico" tofile="../jsp/favicon.ico" />
|
||||
<mkdir dir="build/obj/net/i2p/router/web/resources" />
|
||||
<copy todir="build/obj/net/i2p/router/web/resources" >
|
||||
<fileset dir="../resources" />
|
||||
</copy>
|
||||
<war destfile="build/routerconsole.war" webxml="../jsp/web-out.xml"
|
||||
basedir="../jsp/" excludes="web.xml, **/*.java, *.jsp, *.jsi, web-fragment.xml, web-out.xml">
|
||||
basedir="../jsp/" excludes="web.xml, *.css, **/*.java, *.jsp, *.jsi, web-fragment.xml, web-out.xml">
|
||||
<manifest>
|
||||
<attribute name="Implementation-Version" value="${full.version}" />
|
||||
<attribute name="Built-By" value="${build.built-by}" />
|
||||
@@ -362,9 +351,8 @@
|
||||
<attribute name="X-Compile-Source-JDK" value="${javac.version}" />
|
||||
<attribute name="X-Compile-Target-JDK" value="${javac.version}" />
|
||||
</manifest>
|
||||
<classes dir="./build/obj" includes="net/i2p/router/web/helpers/* net/i2p/router/web/servlets/* net/i2p/router/web/resources/**/*" />
|
||||
<classes dir="./build/obj" includes="net/i2p/router/web/helpers/* net/i2p/router/web/servlets/*" />
|
||||
</war>
|
||||
<delete file="../jsp/favicon.ico" />
|
||||
</target>
|
||||
|
||||
<target name="warUpToDate">
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.router.countries.messages
|
||||
TMPFILE=build/javafiles-countries.txt
|
||||
export TZ=UTC
|
||||
@@ -34,9 +33,9 @@ fi
|
||||
# set LG2 to the language you need in environment variables to enable this
|
||||
|
||||
#
|
||||
# generate strings/Countries.java from ../../../core/resources/countries.txt
|
||||
# generate strings/Countries.java from ../../../installer/resources/countries.txt
|
||||
#
|
||||
CFILE=../../../core/resources/countries.txt
|
||||
CFILE=../../../installer/resources/countries.txt
|
||||
# add ../java/ so the refs will work in the po file
|
||||
JFILE=../java/build/Countries.java
|
||||
if [ $CFILE -nt $JFILE -o ! -s $JFILE ]
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.router.news.messages
|
||||
TMPFILE=build/javafiles-news.txt
|
||||
export TZ=UTC
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#
|
||||
# zzz - public domain
|
||||
#
|
||||
cd `dirname $0`
|
||||
CLASS=net.i2p.router.web.messages
|
||||
TMPFILE=build/javafiles.txt
|
||||
export TZ=UTC
|
||||
@@ -40,7 +39,6 @@ fi
|
||||
ROUTERFILES="\
|
||||
../../../router/java/src/net/i2p/router/Blocklist.java \
|
||||
../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java \
|
||||
../../../router/java/src/net/i2p/router/sybil/Analysis.java \
|
||||
../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java \
|
||||
../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java \
|
||||
../../../router/java/src/net/i2p/router/transport/GetBidsJob.java \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package net.i2p.router.news;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.text.DateFormat;
|
||||
@@ -190,17 +190,12 @@ public class NewsManager implements ClientApp {
|
||||
}
|
||||
|
||||
private List<NewsEntry> parseInitialNews() {
|
||||
InputStream is = NewsManager.class.getResourceAsStream("/net/i2p/router/news/resources/docs/initialNews/initialNews.xml");
|
||||
if (is == null) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("failed to load initial news");
|
||||
return Collections.emptyList();
|
||||
}
|
||||
File file = new File(_context.getBaseDir(), "docs/initialNews/initialNews.xml");
|
||||
Reader reader = null;
|
||||
try {
|
||||
char[] buf = new char[512];
|
||||
StringBuilder out = new StringBuilder(2048);
|
||||
reader = new TranslateReader(_context, BUNDLE_NAME, is);
|
||||
reader = new TranslateReader(_context, BUNDLE_NAME, new FileInputStream(file));
|
||||
int len;
|
||||
while((len = reader.read(buf)) > 0) {
|
||||
out.append(buf, 0, len);
|
||||
@@ -211,17 +206,14 @@ public class NewsManager implements ClientApp {
|
||||
rv.get(0).updated = _context.clock().now();
|
||||
} else {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("failed to load initial news");
|
||||
_log.warn("failed to load " + file);
|
||||
}
|
||||
return rv;
|
||||
} catch (IOException ioe) {
|
||||
if (_log.shouldWarn())
|
||||
_log.warn("failed to load initial news", ioe);
|
||||
_log.warn("failed to load " + file, ioe);
|
||||
return Collections.emptyList();
|
||||
} finally {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException foo) {}
|
||||
try {
|
||||
if (reader != null)
|
||||
reader.close();
|
||||
|
||||
@@ -33,6 +33,7 @@ import net.i2p.router.peermanager.DBHistory;
|
||||
import net.i2p.router.peermanager.PeerProfile;
|
||||
import net.i2p.router.tunnel.pool.TunnelPool;
|
||||
import net.i2p.router.util.HashDistance;
|
||||
import net.i2p.router.web.Messages;
|
||||
import net.i2p.stat.Rate;
|
||||
import net.i2p.stat.RateAverages;
|
||||
import net.i2p.stat.RateStat;
|
||||
@@ -40,7 +41,6 @@ import net.i2p.util.Addresses;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.ObjectCounter;
|
||||
import net.i2p.util.SystemVersion;
|
||||
import net.i2p.util.Translate;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -94,10 +94,9 @@ public class Analysis extends JobImpl implements RouterApp {
|
||||
private static final double POINTS_NEW = 4.0;
|
||||
private static final double POINTS_BANLIST = 25.0;
|
||||
public static final boolean DEFAULT_BLOCK = true;
|
||||
public static final double DEFAULT_BLOCK_THRESHOLD = 50.0;
|
||||
public static final double DEFAULT_BLOCK_THRESHOLD = 75.0;
|
||||
public static final long DEFAULT_BLOCK_TIME = 7*24*60*60*1000L;
|
||||
public static final long DEFAULT_REMOVE_TIME = 10*24*60*60*1000L;
|
||||
public static final long SHORT_REMOVE_TIME = 2*24*60*60*1000L;
|
||||
public static final long DEFAULT_REMOVE_TIME = 30*24*60*60*1000L;
|
||||
public static final long DEFAULT_FREQUENCY = 24*60*60*1000L;
|
||||
public static final float MIN_BLOCK_POINTS = 12.01f;
|
||||
|
||||
@@ -844,10 +843,8 @@ public class Analysis extends JobImpl implements RouterApp {
|
||||
return Util.biLog2(a);
|
||||
}
|
||||
|
||||
private static final String BUNDLE_NAME = "net.i2p.router.web.messages";
|
||||
|
||||
private String _t(String s) {
|
||||
return Translate.getString(s, _context, BUNDLE_NAME);
|
||||
return Messages.getString(s, _context);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -863,6 +860,6 @@ public class Analysis extends JobImpl implements RouterApp {
|
||||
* Use autoboxing to call with ints, longs, floats, etc.
|
||||
*/
|
||||
private String _t(String s, Object o) {
|
||||
return Translate.getString(s, o, _context, BUNDLE_NAME);
|
||||
return Messages.getString(s, o, _context);
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,11 @@ import java.util.zip.GZIPInputStream;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.app.ClientApp;
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.data.Base64;
|
||||
import net.i2p.data.DataFormatException;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.Hash;
|
||||
import net.i2p.router.web.helpers.SybilRenderer;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.FileSuffixFilter;
|
||||
import net.i2p.util.SecureDirectory;
|
||||
@@ -181,18 +180,7 @@ public class PersistSybil {
|
||||
* @since 0.9.41
|
||||
*/
|
||||
public synchronized void removeOld() {
|
||||
// if we don't have a console, don't keep too many
|
||||
long removeTime = Analysis.SHORT_REMOVE_TIME;
|
||||
ClientAppManager cmgr = _context.clientAppManager();
|
||||
if (cmgr != null) {
|
||||
ClientApp console = cmgr.getRegisteredApp("console");
|
||||
if (console != null)
|
||||
removeTime = Analysis.DEFAULT_REMOVE_TIME;
|
||||
}
|
||||
long age = _context.getProperty(Analysis.PROP_REMOVETIME, removeTime);
|
||||
long freq2 = 2 * _context.getProperty(Analysis.PROP_FREQUENCY, Analysis.DEFAULT_FREQUENCY);
|
||||
if (age < freq2)
|
||||
age = freq2;
|
||||
long age = _context.getProperty(Analysis.PROP_REMOVETIME, Analysis.DEFAULT_REMOVE_TIME);
|
||||
if (age < 60*1000)
|
||||
return;
|
||||
long cutoff = _context.clock().now() - age;
|
||||
@@ -5,6 +5,5 @@ store and load the results.
|
||||
</p>
|
||||
<p>
|
||||
Since 0.9.38.
|
||||
Moved from console to router in 0.9.49.
|
||||
</p>
|
||||
</body></html>
|
||||
@@ -21,7 +21,6 @@ public class CSSHelper extends HelperBase {
|
||||
/** @since 0.9.33 moved from ConfigUIHelper */
|
||||
public static final String PROP_THEME_PFX = PROP_THEME_NAME + '.';
|
||||
public static final String DEFAULT_THEME = "light";
|
||||
public static final String ALT_THEME = "dark";
|
||||
public static final String BASE_THEME_PATH = "/themes/console/";
|
||||
private static final String FORCE = "classic";
|
||||
public static final String PROP_REFRESH = "routerconsole.summaryRefresh";
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
package net.i2p.router.web;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
|
||||
import net.i2p.util.FileUtil;
|
||||
@@ -16,15 +12,12 @@ public class ContentHelper extends HelperBase {
|
||||
private String _lang;
|
||||
|
||||
/**
|
||||
* Caution, use absolute paths only for getContent() and getTextContent(),
|
||||
* do not assume files are in CWD.
|
||||
* Caution, use absolute paths only, do not assume files are in CWD
|
||||
*/
|
||||
public void setPage(String page) { _page = page; }
|
||||
|
||||
public void setStartAtBeginning(String moo) {
|
||||
_startAtBeginning = Boolean.parseBoolean(moo);
|
||||
}
|
||||
|
||||
public void setLang(String l) {
|
||||
/*****
|
||||
if((_lang == null || !_lang.equals(l)) && (l != null)) {
|
||||
|
||||
@@ -13,6 +13,4 @@ public class GraphConstants {
|
||||
public static final int DEFAULT_Y = 100;
|
||||
public static final int MAX_X = 2048;
|
||||
public static final int MAX_Y = 1024;
|
||||
|
||||
public static final String PROP_UTC = "routerconsole.graphUTC";
|
||||
}
|
||||
|
||||
@@ -1009,7 +1009,7 @@ public class PluginStarter implements Runnable {
|
||||
return false;
|
||||
boolean rv = group.activeCount() > 0;
|
||||
|
||||
// Plugins start before the I2P Site, and will create the static Timer thread
|
||||
// Plugins start before the eepsite, and will create the static Timer thread
|
||||
// in RolloverFileOutputStream, which never stops. Don't count it.
|
||||
// Ditto HSQLDB Timer (jwebcache)
|
||||
if (rv) {
|
||||
|
||||
@@ -35,6 +35,7 @@ import net.i2p.jetty.I2PLogger;
|
||||
import net.i2p.router.RouterContext;
|
||||
import net.i2p.router.app.RouterApp;
|
||||
import net.i2p.router.news.NewsManager;
|
||||
import net.i2p.router.sybil.Analysis;
|
||||
import net.i2p.router.update.ConsoleUpdateManager;
|
||||
import net.i2p.util.Addresses;
|
||||
import net.i2p.util.FileSuffixFilter;
|
||||
@@ -900,6 +901,14 @@ public class RouterConsoleRunner implements RouterApp {
|
||||
if (_mgr == null)
|
||||
_context.addShutdownTask(new ServerShutdown());
|
||||
ConfigServiceHandler.registerSignalHandler(_context);
|
||||
|
||||
if (_mgr != null &&
|
||||
//_context.getBooleanProperty(HelperBase.PROP_ADVANCED) &&
|
||||
!SystemVersion.isSlow() &&
|
||||
_context.getProperty(Analysis.PROP_FREQUENCY, Analysis.DEFAULT_FREQUENCY) > 0) {
|
||||
// registers and starts itself
|
||||
Analysis.getInstance(_context);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package net.i2p.router.web;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.Collections;
|
||||
@@ -23,7 +22,6 @@ import net.i2p.router.RouterContext;
|
||||
import static net.i2p.router.web.GraphConstants.*;
|
||||
import net.i2p.stat.Rate;
|
||||
import net.i2p.stat.RateStat;
|
||||
import net.i2p.util.FileSuffixFilter;
|
||||
import net.i2p.util.FileUtil;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.SystemVersion;
|
||||
@@ -45,7 +43,7 @@ public class StatSummarizer implements Runnable, ClientApp {
|
||||
private final Log _log;
|
||||
/** list of SummaryListener instances */
|
||||
private final List<SummaryListener> _listeners;
|
||||
private static final int MAX_CONCURRENT_PNG = SystemVersion.isSlow() ? 1 : 3;
|
||||
private static final int MAX_CONCURRENT_PNG = SystemVersion.isARM() ? 2 : 3;
|
||||
private final Semaphore _sem;
|
||||
private volatile boolean _isRunning;
|
||||
private volatile Thread _thread;
|
||||
@@ -93,24 +91,6 @@ public class StatSummarizer implements Runnable, ClientApp {
|
||||
String spec = _context.getProperty("stat.summaries", DEFAULT_DATABASES);
|
||||
String[] rates = DataHelper.split(spec, ",");
|
||||
syncThreads = Math.min(rates.length / 2, 4);
|
||||
// delete files for unconfigured rates
|
||||
Set<String> configured = new HashSet<String>(rates.length);
|
||||
for (String r : rates) {
|
||||
configured.add(SummaryListener.createName(_context, r));
|
||||
}
|
||||
File rrdDir = new File(_context.getRouterDir(), SummaryListener.RRD_DIR);
|
||||
FileFilter filter = new FileSuffixFilter(SummaryListener.RRD_PREFIX, SummaryListener.RRD_SUFFIX);
|
||||
File[] files = rrdDir.listFiles(filter);
|
||||
if (files != null) {
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
File f = files[i];
|
||||
String name = f.getName();
|
||||
String hash = name.substring(SummaryListener.RRD_PREFIX.length(), name.length() - SummaryListener.RRD_SUFFIX.length());
|
||||
if (!configured.contains(hash)) {
|
||||
f.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
syncThreads = 0;
|
||||
deleteOldRRDs();
|
||||
|
||||
@@ -35,8 +35,8 @@ public class SummaryListener implements RateSummaryListener {
|
||||
public static final String PROP_PERSISTENT = "routerconsole.graphPersistent";
|
||||
/** note that .jrb files are NOT compatible with .rrd files */
|
||||
static final String RRD_DIR = "rrd";
|
||||
static final String RRD_PREFIX = "rrd-";
|
||||
static final String RRD_SUFFIX = ".jrb";
|
||||
private static final String RRD_PREFIX = "rrd-";
|
||||
private static final String RRD_SUFFIX = ".jrb";
|
||||
static final ConsolFun CF = ConsolFun.AVERAGE;
|
||||
static final DsType DS = DsType.GAUGE;
|
||||
private static final double XFF = 0.9d;
|
||||
|
||||
@@ -162,9 +162,6 @@ class SummaryRenderer {
|
||||
def.setFont(RrdGraphDef.FONTTAG_LEGEND, legnd);
|
||||
def.setFont(RrdGraphDef.FONTTAG_TITLE, large);
|
||||
|
||||
boolean localTime = !_context.getBooleanProperty(GraphConstants.PROP_UTC);
|
||||
if (localTime)
|
||||
def.setTimeZone(SystemVersion.getSystemTimeZone(_context));
|
||||
def.setTimeSpan(start/1000, end/1000);
|
||||
def.setMinValue(0d);
|
||||
String name = _listener.getRate().getRateStat().getName();
|
||||
@@ -251,39 +248,23 @@ class SummaryRenderer {
|
||||
if (!hideLegend) {
|
||||
// '07 Jul 21:09' with month name in the system locale
|
||||
// TODO: Fix Arabic time display
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd MMM HH:mm");
|
||||
Map<Long, String> events = ((RouterContext)_context).router().eventLog().getEvents(EventLog.STARTED, start);
|
||||
if (localTime) {
|
||||
for (Map.Entry<Long, String> event : events.entrySet()) {
|
||||
long started = event.getKey().longValue();
|
||||
if (started > start && started < end) {
|
||||
String legend;
|
||||
if (Messages.isRTL(lang)) {
|
||||
// RTL languages
|
||||
legend = _t("Restart") + ' ' + DataHelper.formatTime(started) + " - " + event.getValue() + "\\l";
|
||||
} else {
|
||||
legend = _t("Restart") + ' ' + DataHelper.formatTime(started) + " [" + event.getValue() + "]\\l";
|
||||
}
|
||||
def.vrule(started / 1000, RESTART_BAR_COLOR, legend, 2.0f);
|
||||
for (Map.Entry<Long, String> event : events.entrySet()) {
|
||||
long started = event.getKey().longValue();
|
||||
if (started > start && started < end) {
|
||||
// String legend = _t("Restart") + ' ' + sdf.format(new Date(started)) + " UTC " + event.getValue() + "\\l";
|
||||
String legend;
|
||||
if (Messages.isRTL(lang)) {
|
||||
// RTL languages
|
||||
legend = _t("Restart") + ' ' + sdf.format(new Date(started)) + " - " + event.getValue() + "\\l";
|
||||
} else {
|
||||
legend = _t("Restart") + ' ' + sdf.format(new Date(started)) + " [" + event.getValue() + "]\\l";
|
||||
}
|
||||
def.vrule(started / 1000, RESTART_BAR_COLOR, legend, 2.0f);
|
||||
}
|
||||
def.comment(DataHelper.formatTime(start) + " — " + DataHelper.formatTime(end) + "\\r");
|
||||
} else {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd MMM HH:mm");
|
||||
for (Map.Entry<Long, String> event : events.entrySet()) {
|
||||
long started = event.getKey().longValue();
|
||||
if (started > start && started < end) {
|
||||
String legend;
|
||||
if (Messages.isRTL(lang)) {
|
||||
// RTL languages
|
||||
legend = _t("Restart") + ' ' + sdf.format(new Date(started)) + " - " + event.getValue() + "\\l";
|
||||
} else {
|
||||
legend = _t("Restart") + ' ' + sdf.format(new Date(started)) + " [" + event.getValue() + "]\\l";
|
||||
}
|
||||
def.vrule(started / 1000, RESTART_BAR_COLOR, legend, 2.0f);
|
||||
}
|
||||
}
|
||||
def.comment(sdf.format(new Date(start)) + " — " + sdf.format(new Date(end)) + " UTC\\r");
|
||||
}
|
||||
def.comment(sdf.format(new Date(start)) + " — " + sdf.format(new Date(end)) + " UTC\\r");
|
||||
}
|
||||
if (!showCredit)
|
||||
def.setShowSignature(false);
|
||||
|
||||
@@ -65,7 +65,7 @@ public class CertHelper extends HelperBase {
|
||||
if (!hasTunnels)
|
||||
output(_t("SAM"), null);
|
||||
|
||||
// I2P Site
|
||||
// Eepsite
|
||||
tunnelDir = new File(dir, EEPSITE_DIR);
|
||||
hasTunnels = false;
|
||||
tunnels = tunnelDir.listFiles(new FileSuffixFilter(".crt"));
|
||||
|
||||
@@ -9,8 +9,6 @@ import java.util.Locale;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.i2p.app.ClientApp;
|
||||
import net.i2p.app.ClientAppState;
|
||||
@@ -39,15 +37,6 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
public static final String PROP_ENABLE_CLIENT_CHANGE = "routerconsole.enableClientChange";
|
||||
public static final String PROP_ENABLE_PLUGIN_INSTALL = "routerconsole.enablePluginInstall";
|
||||
|
||||
/**
|
||||
* simple regex from
|
||||
* https://stackoverflow.com/questions/8204680/java-regex-email
|
||||
* not the massive RFC 822 compliant one
|
||||
* modified so .i2p will work
|
||||
*/
|
||||
private static final Pattern VALID_EMAIL_ADDRESS_REGEX =
|
||||
Pattern.compile("[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z2]{2,6}", Pattern.CASE_INSENSITIVE);
|
||||
|
||||
public ConfigClientsHelper() {}
|
||||
|
||||
/** @since 0.9.14.1 */
|
||||
@@ -313,13 +302,10 @@ public class ConfigClientsHelper extends HelperBase {
|
||||
}
|
||||
s = stripHTML(appProps, "author");
|
||||
if (s != null) {
|
||||
String[] authors = DataHelper.split(s, "[,; \r\n\t]");
|
||||
Matcher m = VALID_EMAIL_ADDRESS_REGEX.matcher(s);
|
||||
String author = m.find() ? m.group() : null;
|
||||
desc.append("<tr><td><b>")
|
||||
.append(_t("Author")).append("</b></td><td>");
|
||||
if (author != null)
|
||||
desc.append("<a href=\"mailto:").append(author).append("\">").append(s).append("</a>");
|
||||
if (s.indexOf('@') > 0)
|
||||
desc.append("<a href=\"mailto:").append(s).append("\">").append(s).append("</a>");
|
||||
else
|
||||
desc.append(s);
|
||||
}
|
||||
|
||||
@@ -76,7 +76,6 @@ public class ConfigUIHelper extends HelperBase {
|
||||
Set<String> rv = new TreeSet<String>();
|
||||
// add a failsafe even if we can't find any themes
|
||||
rv.add(CSSHelper.DEFAULT_THEME);
|
||||
rv.add(CSSHelper.ALT_THEME);
|
||||
File dir = new File(_context.getBaseDir(), "docs/themes/console");
|
||||
File[] files = dir.listFiles();
|
||||
if (files == null)
|
||||
|
||||
@@ -32,8 +32,6 @@ import net.i2p.util.SystemVersion;
|
||||
public class FileDumpHelper extends HelperBase {
|
||||
|
||||
private static final boolean isWindows = SystemVersion.isWindows();
|
||||
private static final String LINK = "http://git.idk.i2p/i2p-hackers/i2p.i2p/-/tree/";
|
||||
|
||||
public String getFileSummary() {
|
||||
StringBuilder buf = new StringBuilder(16*1024);
|
||||
buf.append("<table id=\"jardump\">\n<tr><th>File</th><th>Size</th><th>Date</th><th>SHA 256</th><th>Revision</th>" +
|
||||
@@ -58,7 +56,7 @@ public class FileDumpHelper extends HelperBase {
|
||||
}
|
||||
Collections.sort(flist);
|
||||
for (File f : flist) {
|
||||
dumpFile(buf, f, true);
|
||||
dumpFile(buf, f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,14 +65,14 @@ public class FileDumpHelper extends HelperBase {
|
||||
buf.append("<tr><th class=\"subheading routerfiles\" colspan=\"9\"><b>Router Jar Files:</b> <code>");
|
||||
buf.append(dir.getAbsolutePath());
|
||||
buf.append("</code></th></tr>\n");
|
||||
dumpDir(buf, dir, ".jar", true);
|
||||
dumpDir(buf, dir, ".jar");
|
||||
|
||||
// our wars
|
||||
dir = new File(_context.getBaseDir(), "webapps");
|
||||
buf.append("<tr><th class=\"subheading routerfiles\" colspan=\"9\"><b>Router War Files:</b> <code>");
|
||||
buf.append(dir.getAbsolutePath());
|
||||
buf.append("</code></th></tr>\n");
|
||||
dumpDir(buf, dir, ".war", true);
|
||||
dumpDir(buf, dir, ".war");
|
||||
|
||||
// plugins
|
||||
File pluginDir = new File(_context.getConfigDir(), PluginStarter.PLUGIN_DIR);
|
||||
@@ -89,9 +87,9 @@ public class FileDumpHelper extends HelperBase {
|
||||
buf.append("<tr><th class=\"subheading pluginfiles\" colspan=\"9\"><b>Plugin File Location:</b> <code>");
|
||||
buf.append(dir.getAbsolutePath());
|
||||
buf.append("</code></th></tr>");
|
||||
dumpDir(buf, dir, ".jar", false);
|
||||
dumpDir(buf, dir, ".jar");
|
||||
dir = new File(files[i], "console/webapps");
|
||||
dumpDir(buf, dir, ".war", false);
|
||||
dumpDir(buf, dir, ".war");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,23 +97,23 @@ public class FileDumpHelper extends HelperBase {
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
private static void dumpDir(StringBuilder buf, File dir, String suffix, boolean linkrev) {
|
||||
private static void dumpDir(StringBuilder buf, File dir, String suffix) {
|
||||
File[] files = dir.listFiles(new FileSuffixFilter(suffix));
|
||||
if (files == null)
|
||||
return;
|
||||
Arrays.sort(files);
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
dumpFile(buf, files[i], linkrev);
|
||||
dumpFile(buf, files[i]);
|
||||
}
|
||||
}
|
||||
|
||||
private static void dumpFile(StringBuilder buf, File f, boolean linkrev) {
|
||||
private static void dumpFile(StringBuilder buf, File f) {
|
||||
buf.append("<tr><td><b title=\"").append(f.getAbsolutePath()).append("\">").append(f.getName()).append("</b></td>" +
|
||||
"<td align=\"right\">").append(f.length()).append("</td>" +
|
||||
"<td>");
|
||||
long mod = f.lastModified();
|
||||
if (mod > 0)
|
||||
buf.append(DataHelper.formatTime(mod));
|
||||
buf.append((new Date(mod)).toString());
|
||||
else
|
||||
buf.append("<font color=\"red\">Not found</font>");
|
||||
buf.append("</td><td align=\"center\">");
|
||||
@@ -145,13 +143,13 @@ public class FileDumpHelper extends HelperBase {
|
||||
if (s != null && s.length() > 20) {
|
||||
if (iv != null)
|
||||
buf.append("<br>");
|
||||
if (linkrev)
|
||||
buf.append("<a href=\"").append(LINK).append(s).append("\">");
|
||||
// fix and uncomment if a reliable viewmtn host appears
|
||||
//buf.append("<a href=\"http://killyourtv.i2p/viewmtn/revision/info/").append(s)
|
||||
// .append("\">");
|
||||
buf.append("<span class=\"revision\"><tt>").append(s.substring(0, 20)).append("</tt>" +
|
||||
"<br>" +
|
||||
"<tt>").append(s.substring(20)).append("</tt></span>");
|
||||
if (linkrev)
|
||||
buf.append("</a>");
|
||||
//buf.append("</tt>");
|
||||
}
|
||||
buf.append("</td><td>");
|
||||
s = getAtt(att, "Created-By");
|
||||
|
||||
@@ -32,7 +32,6 @@ public class GraphHelper extends FormHandler {
|
||||
private int _refreshDelaySeconds;
|
||||
private boolean _persistent;
|
||||
private boolean _graphHideLegend;
|
||||
private boolean _utc;
|
||||
private String _stat;
|
||||
private int _end;
|
||||
|
||||
@@ -132,9 +131,6 @@ public class GraphHelper extends FormHandler {
|
||||
/** @since 0.9.32 */
|
||||
public void setHideLegend(String foo) { _graphHideLegend = true; }
|
||||
|
||||
/** @since 0.9.49 */
|
||||
public void setUtc(String foo) { _utc = true; }
|
||||
|
||||
/**
|
||||
* For single stat page
|
||||
* @since 0.9
|
||||
@@ -161,8 +157,6 @@ public class GraphHelper extends FormHandler {
|
||||
else if (title.equals("bw.recvRate")) hasRx = true;
|
||||
}
|
||||
boolean hideLegend = _context.getProperty(PROP_LEGEND, DEFAULT_LEGEND);
|
||||
// param is ignored, we get it from the property, but add it to defeat caching on change
|
||||
boolean utc = _context.getBooleanProperty(PROP_UTC);
|
||||
|
||||
if (hasTx && hasRx && !_showEvents) {
|
||||
// remove individual tx/rx graphs if displaying combined
|
||||
@@ -176,7 +170,6 @@ public class GraphHelper extends FormHandler {
|
||||
+ "&c=" + (3 * _periodCount )
|
||||
+ "&w=" + (3 * _width)
|
||||
+ "&h=" + (3 * _height)
|
||||
+ (utc ? "&utc" : "")
|
||||
+ "\">");
|
||||
String title = _t("Combined bandwidth graph");
|
||||
_out.write("<img class=\"statimage\""
|
||||
@@ -191,8 +184,6 @@ public class GraphHelper extends FormHandler {
|
||||
// no legend, no height difference needed
|
||||
_out.write("&height=" + (_height));
|
||||
}
|
||||
if (utc)
|
||||
_out.write("&utc");
|
||||
_out.write("&hideLegend=" + hideLegend
|
||||
+ "\" alt=\"" + title + "\" title=\"" + title + "\"></a>\n");
|
||||
}
|
||||
@@ -208,7 +199,6 @@ public class GraphHelper extends FormHandler {
|
||||
+ "&w=" + (3 * _width)
|
||||
+ "&h=" + (3 * _height)
|
||||
+ (_showEvents ? "&showEvents=1" : "")
|
||||
+ (utc ? "&utc" : "")
|
||||
+ "\">");
|
||||
_out.write("<img class=\"statimage\" border=\"0\""
|
||||
+ " src=\"viewstat.jsp?stat="
|
||||
@@ -219,7 +209,6 @@ public class GraphHelper extends FormHandler {
|
||||
+ "&width=" + _width
|
||||
+ "&height=" + _height
|
||||
+ "&hideLegend=" + hideLegend
|
||||
+ (utc ? "&utc" : "")
|
||||
+ "\" alt=\"" + title
|
||||
+ "\" title=\"" + title + "\"></a>\n");
|
||||
}
|
||||
@@ -400,7 +389,7 @@ public class GraphHelper extends FormHandler {
|
||||
+ "\">" + _t("pixels wide") + " <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"height\" value=\"" + _height
|
||||
+ "\">" + _t("pixels high") + "</span><br><span class=\"nowrap\">\n<b>");
|
||||
|
||||
_out.write(_t("Display period") + ":</b> <input size=\"4\" style=\"text-align: right;\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\">" + _t("minutes") + "</span><br><span class=\"nowrap\">\n<b>");
|
||||
_out.write(_t("Display period") + ":</b> <input size=\"5\" style=\"text-align: right;\" type=\"text\" name=\"periodCount\" value=\"" + _periodCount + "\">" + _t("minutes") + "</span><br><span class=\"nowrap\">\n<b>");
|
||||
|
||||
|
||||
_out.write(_t("Refresh delay") + ":</b> <select name=\"refreshDelay\">");
|
||||
@@ -428,12 +417,6 @@ public class GraphHelper extends FormHandler {
|
||||
if (hideLegend)
|
||||
_out.write(HelperBase.CHECKED);
|
||||
_out.write(">" + _t("Do not show legend on graphs") + "</label></span><br><span class=\"nowrap\">\n<b>");
|
||||
_out.write(_t("UTC") + ":</b> ");
|
||||
_out.write("<label><input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"utc\"");
|
||||
boolean utc = _context.getBooleanProperty(PROP_UTC);
|
||||
if (utc)
|
||||
_out.write(HelperBase.CHECKED);
|
||||
_out.write(">" + _t("Use UTC time on graphs") + "</label></span><br><span class=\"nowrap\">\n<b>");
|
||||
_out.write(_t("Persistence") +
|
||||
":</b> <label><input type=\"checkbox\" class=\"optbox\" value=\"true\" name=\"persistent\"");
|
||||
boolean persistent = _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT);
|
||||
@@ -494,7 +477,6 @@ public class GraphHelper extends FormHandler {
|
||||
_refreshDelaySeconds != _context.getProperty(PROP_REFRESH, DEFAULT_REFRESH) ||
|
||||
_showEvents != _context.getBooleanProperty(PROP_EVENTS) ||
|
||||
_graphHideLegend != _context.getProperty(PROP_LEGEND, DEFAULT_LEGEND) ||
|
||||
_utc != _context.getBooleanProperty(PROP_UTC) ||
|
||||
_persistent != _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT)) {
|
||||
Map<String, String> changes = new HashMap<String, String>();
|
||||
changes.put(PROP_X, Integer.toString(_width));
|
||||
@@ -504,7 +486,6 @@ public class GraphHelper extends FormHandler {
|
||||
changes.put(PROP_EVENTS, Boolean.toString(_showEvents));
|
||||
changes.put(PROP_LEGEND, Boolean.toString(_graphHideLegend));
|
||||
changes.put(SummaryListener.PROP_PERSISTENT, Boolean.toString(_persistent));
|
||||
changes.put(PROP_UTC, Boolean.toString(_utc));
|
||||
boolean warn = _persistent != _context.getBooleanPropertyDefaultTrue(SummaryListener.PROP_PERSISTENT);
|
||||
_context.router().saveConfig(changes, null);
|
||||
addFormNotice(_t("Graph settings saved"));
|
||||
|
||||
@@ -68,7 +68,7 @@ public class HomeHelper extends HelperBase {
|
||||
//_x("Dev Builds") + S + _x("Development builds of I2P") + S + "http://bobthebuilder.i2p/" + S + I + "script_gear.png" + S +
|
||||
_x("Dev Forum") + S + _x("Development forum") + S + "http://zzz.i2p/" + S + I + "group_gear.png" + S +
|
||||
//_x("diftracker") + S + _x("Bittorrent tracker") + S + "http://diftracker.i2p/" + S + I + "i2psnark.png" + S +
|
||||
//"echelon.i2p" + S + _x("I2P Applications") + S + "http://echelon.i2p/" + S + I + "echelon.png" + S +
|
||||
"echelon.i2p" + S + _x("I2P Applications") + S + "http://echelon.i2p/" + S + I + "echelon.png" + S +
|
||||
//"exchanged.i2p" + S + _x("Anonymous cryptocurrency exchange") + S + "http://exchanged.i2p/" + S + I + "exchanged.png" + S +
|
||||
_x("I2P FAQ") + S + _x("Frequently Asked Questions") + S + "http://i2p-projekt.i2p/faq" + S + I + "question.png" + S +
|
||||
_x("I2P Forum") + S + _x("Community forum") + S + "http://i2pforum.i2p/" + S + I + "group.png" + S +
|
||||
@@ -83,7 +83,7 @@ public class HomeHelper extends HelperBase {
|
||||
//_x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S + I + "education.png" + S +
|
||||
//"killyourtv.i2p" + S + _x("Debian and Tahoe-LAFS repositories") + S + "http://killyourtv.i2p/" + S + I + "television_delete.png" + S +
|
||||
_x("MuWire") + S + _x("Easy anonymous file sharing") + S + "http://muwire.i2p/" + S + I + "muwire.png" + S +
|
||||
//_x("Open4You") + S + _x("Free I2P Site hosting with PHP and MySQL") + S + "http://open4you.i2p/" + S + I + "open4you-logo.png" + S +
|
||||
//_x("Open4You") + S + _x("Free eepsite hosting with PHP and MySQL") + S + "http://open4you.i2p/" + S + I + "open4you-logo.png" + S +
|
||||
//_x("Pastebin") + S + _x("Encrypted I2P Pastebin") + S + "http://zerobin.i2p/" + S + I + "paste_plain.png" + S +
|
||||
_x("Planet I2P") + S + _x("I2P News") + S + "http://planet.i2p/" + S + I + "world.png" + S +
|
||||
//_x("I2P Plugins") + S + _x("Add-on directory") + S + "http://i2pwiki.i2p/index.php?title=Plugins" + S + I + "info/plugin_link.png" + S +
|
||||
@@ -307,7 +307,7 @@ public class HomeHelper extends HelperBase {
|
||||
for (App app : apps) {
|
||||
String url;
|
||||
if (app.name.equals(website) && app.url.equals("http://127.0.0.1:7658/")) {
|
||||
// fixup I2P Site link
|
||||
// fixup eepsite link
|
||||
url = SummaryBarRenderer.getEepsiteURL(pm);
|
||||
if (url == null)
|
||||
continue;
|
||||
|
||||
@@ -5,7 +5,6 @@ import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import net.i2p.crypto.EncType;
|
||||
import net.i2p.crypto.SigType;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.util.SystemVersion;
|
||||
@@ -29,7 +28,6 @@ public class NetDbHelper extends FormHandler {
|
||||
private boolean _debug;
|
||||
private boolean _graphical;
|
||||
private SigType _type;
|
||||
private EncType _etype;
|
||||
private String _newNonce;
|
||||
private boolean _postOK;
|
||||
|
||||
@@ -121,12 +119,6 @@ public class NetDbHelper extends FormHandler {
|
||||
_type = SigType.parseSigType(f);
|
||||
}
|
||||
|
||||
/** @since 0.9.49 */
|
||||
public void setEtype(String f) {
|
||||
if (f != null && f.length() > 0)
|
||||
_etype = EncType.parseEncType(f);
|
||||
}
|
||||
|
||||
/** @since 0.9.28 */
|
||||
public void setMtu(String f) {
|
||||
if (f != null && f.length() > 0)
|
||||
@@ -279,10 +271,10 @@ public class NetDbHelper extends FormHandler {
|
||||
if (_routerPrefix != null || _version != null || _country != null ||
|
||||
_family != null || _caps != null || _ip != null || _sybil != null ||
|
||||
_port != 0 || _type != null || _mtu != null || _ipv6 != null ||
|
||||
_ssucaps != null || _transport != null || _cost != 0 || _etype != null) {
|
||||
_ssucaps != null || _transport != null || _cost != 0) {
|
||||
renderer.renderRouterInfoHTML(_out, _limit, _page,
|
||||
_routerPrefix, _version, _country,
|
||||
_family, _caps, _ip, _sybil, _port, _type, _etype,
|
||||
_family, _caps, _ip, _sybil, _port, _type,
|
||||
_mtu, _ipv6, _ssucaps, _transport, _cost);
|
||||
} else if (_lease) {
|
||||
renderer.renderLeaseSetHTML(_out, _debug);
|
||||
@@ -316,7 +308,7 @@ public class NetDbHelper extends FormHandler {
|
||||
if (_routerPrefix != null || _version != null || _country != null ||
|
||||
_family != null || _caps != null || _ip != null || _sybil != null ||
|
||||
_port != 0 || _type != null || _mtu != null || _ipv6 != null ||
|
||||
_ssucaps != null || _transport != null || _cost != 0 || _etype != null)
|
||||
_ssucaps != null || _transport != null || _cost != 0)
|
||||
return 2;
|
||||
if (_full == 2)
|
||||
return 3;
|
||||
@@ -377,7 +369,6 @@ public class NetDbHelper extends FormHandler {
|
||||
"<tr><td>Capabilities:</td><td><input type=\"text\" name=\"caps\"></td><td>e.g. f or XOfR</td></tr>\n" +
|
||||
"<tr><td>Cost:</td><td><input type=\"text\" name=\"cost\"></td><td></td></tr>\n" +
|
||||
"<tr><td>Country Code:</td><td><input type=\"text\" name=\"c\"></td><td>e.g. ru</td></tr>\n" +
|
||||
"<tr><td>Encryption Type:</td><td><input type=\"text\" name=\"etype\"></td><td></td></tr>\n" +
|
||||
"<tr><td>Router Family:</td><td><input type=\"text\" name=\"fam\"></td><td></td></tr>\n" +
|
||||
"<tr><td>Hash Prefix:</td><td><input type=\"text\" name=\"r\"></td><td></td></tr>\n" +
|
||||
"<tr><td>IP or Hostname:</td><td><input type=\"text\" name=\"ip\"></td><td>host name, IPv4, or IPv6, /24,/16,/8 suffixes optional for IPv4, prefix ok for IPv6</td></tr>\n" +
|
||||
|
||||
@@ -104,7 +104,7 @@ class NetDbRenderer {
|
||||
public void renderRouterInfoHTML(Writer out, int pageSize, int page,
|
||||
String routerPrefix, String version,
|
||||
String country, String family, String caps,
|
||||
String ip, String sybil, int port, SigType type, EncType etype,
|
||||
String ip, String sybil, int port, SigType type,
|
||||
String mtu, String ipv6, String ssucaps,
|
||||
String tr, int cost) throws IOException {
|
||||
StringBuilder buf = new StringBuilder(4*1024);
|
||||
@@ -162,8 +162,6 @@ class NetDbRenderer {
|
||||
ubuf.append("&tr=").append(tr);
|
||||
if (type != null)
|
||||
ubuf.append("&type=").append(type);
|
||||
if (etype != null)
|
||||
ubuf.append("&etype=").append(etype);
|
||||
if (ip != null)
|
||||
ubuf.append("&ip=").append(ip);
|
||||
if (port != 0)
|
||||
@@ -222,8 +220,7 @@ class NetDbRenderer {
|
||||
// 'O' will catch PO and XO also
|
||||
(caps != null && hasCap(ri, caps)) ||
|
||||
(tr != null && ri.getTargetAddress(tr) != null) ||
|
||||
(type != null && type == ri.getIdentity().getSigType()) ||
|
||||
(etype != null && etype == ri.getIdentity().getEncType())) {
|
||||
(type != null && type == ri.getIdentity().getSigType())) {
|
||||
if (skipped < toSkip) {
|
||||
skipped++;
|
||||
continue;
|
||||
@@ -519,7 +516,7 @@ class NetDbRenderer {
|
||||
buf.append("<b>").append(_t("Destination")).append(":</b> ");
|
||||
TunnelPoolSettings in = _context.tunnelManager().getInboundSettings(key);
|
||||
if (in != null && in.getDestinationNickname() != null)
|
||||
buf.append(DataHelper.escapeHTML(in.getDestinationNickname()));
|
||||
buf.append(in.getDestinationNickname());
|
||||
else
|
||||
buf.append(dest.toBase64().substring(0, 6));
|
||||
buf.append("</th></tr>\n");
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
package net.i2p.router.web.helpers;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.IOException;
|
||||
import java.util.Locale;
|
||||
|
||||
import net.i2p.router.web.HelperBase;
|
||||
import net.i2p.router.web.Messages;
|
||||
|
||||
/**
|
||||
* @since 0.9.49
|
||||
*/
|
||||
public class ResourceHelper extends HelperBase {
|
||||
protected String _page;
|
||||
private int _maxLines;
|
||||
|
||||
/**
|
||||
* Use relative path for getResource().
|
||||
*/
|
||||
public void setPage(String page) { _page = page; }
|
||||
|
||||
public void setMaxLines(String lines) {
|
||||
if (lines != null) {
|
||||
try {
|
||||
_maxLines = Integer.parseInt(lines);
|
||||
} catch (NumberFormatException nfe) {
|
||||
_maxLines = -1;
|
||||
}
|
||||
} else {
|
||||
_maxLines = -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert file.ext to file_lang.ext if it exists.
|
||||
* Get lang from the cgi lang param, then properties, then from the default locale.
|
||||
* _context must be set to check the property.
|
||||
* @return "" on error
|
||||
*/
|
||||
public String getResource() {
|
||||
if (_page == null || _page.contains(".."))
|
||||
return "";
|
||||
String lang = null;
|
||||
String page = null;
|
||||
int lastdot = _page.lastIndexOf('.');
|
||||
if (lastdot <= 0) {
|
||||
page = _page;
|
||||
} else {
|
||||
if (_context != null)
|
||||
lang = _context.getProperty(Messages.PROP_LANG);
|
||||
if (lang == null || lang.length() <= 0) {
|
||||
lang = Locale.getDefault().getLanguage();
|
||||
if (lang == null || lang.length() <= 0)
|
||||
page = _page;
|
||||
}
|
||||
}
|
||||
if (page == null) {
|
||||
if (lang.equals("en"))
|
||||
page = _page;
|
||||
else
|
||||
page = _page.substring(0, lastdot) + '_' + lang + _page.substring(lastdot);
|
||||
}
|
||||
InputStream is = ResourceHelper.class.getResourceAsStream("/net/i2p/router/web/resources/" + page);
|
||||
if (is == null) {
|
||||
is = ResourceHelper.class.getResourceAsStream("/net/i2p/router/web/resources/" + _page);
|
||||
if (is == null)
|
||||
return "";
|
||||
}
|
||||
BufferedReader in = null;
|
||||
StringBuilder buf = new StringBuilder(20000);
|
||||
try {
|
||||
in = new BufferedReader(new InputStreamReader(is, "UTF-8"));
|
||||
String line = null;
|
||||
int i = 0;
|
||||
while ( (line = in.readLine()) != null) {
|
||||
buf.append(line);
|
||||
buf.append('\n');
|
||||
if (_maxLines > 0 && ++i >= _maxLines)
|
||||
break;
|
||||
}
|
||||
} catch (IOException ioe) {
|
||||
} finally {
|
||||
if (in != null) try { in.close(); } catch (IOException ioe) {}
|
||||
try { is.close(); } catch (IOException ioe) {}
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
}
|
||||
@@ -22,8 +22,8 @@ class Dummy {
|
||||
_t("Web console");
|
||||
_t("SAM application bridge");
|
||||
_t("Application tunnels");
|
||||
_t("My I2P Site web server");
|
||||
_t("I2P webserver (I2P Site)");
|
||||
_t("My eepsite web server");
|
||||
_t("I2P webserver (eepsite)");
|
||||
_t("Browser launch at startup");
|
||||
_t("BOB application bridge");
|
||||
_t("I2P Router Console");
|
||||
@@ -34,8 +34,9 @@ class Dummy {
|
||||
// note that if the wording changes in i2ptunnel.config, we have to
|
||||
// keep the old string here as well for existing installs
|
||||
_t("shared clients");
|
||||
_t("shared clients (DSA)");
|
||||
_t("IRC proxy");
|
||||
_t("I2P Site");
|
||||
_t("eepsite");
|
||||
_t("I2P webserver");
|
||||
_t("HTTP Proxy");
|
||||
// hardcoded in i2psnark
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th id="upnpconfig"><%=intl._t("UPnP Configuration")%> <a href="peers?tx=upnp">[<%=intl._t("UPnP Status")%>]</a></th>
|
||||
<th id="upnpconfig"><%=intl._t("UPnP Configuration")%> <a href="peers#upnp">[<%=intl._t("UPnP Status")%>]</a></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<jsp:setProperty name="updatehelper" property="contextId" value="<%=i2pcontextId%>" />
|
||||
<jsp:getProperty name="updatehelper" property="newsStatus" /><br>
|
||||
</div><div class="main" id="console">
|
||||
<jsp:useBean class="net.i2p.router.web.helpers.ResourceHelper" id="contenthelper" scope="request" />
|
||||
<jsp:useBean class="net.i2p.router.web.ContentHelper" id="contenthelper" scope="request" />
|
||||
<div class="welcome">
|
||||
<div class="langbox" title="<%=intl._t("Configure Language")%>">
|
||||
<a href="/configui#langheading"><img src="/themes/console/images/info/control.png" alt="<%=intl._t("Configure Language")%>"></a>
|
||||
@@ -33,8 +33,9 @@
|
||||
<a name="top"></a>
|
||||
<h2><%=intl._t("Welcome to I2P")%></h2>
|
||||
</div>
|
||||
<jsp:setProperty name="contenthelper" property="page" value="docs/readme.html" />
|
||||
<% java.io.File fpath = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "docs/readme.html"); %>
|
||||
<jsp:setProperty name="contenthelper" property="page" value="<%=fpath.getAbsolutePath()%>" />
|
||||
<jsp:setProperty name="contenthelper" property="maxLines" value="300" />
|
||||
<jsp:setProperty name="contenthelper" property="contextId" value="<%=i2pcontextId%>" />
|
||||
<jsp:getProperty name="contenthelper" property="resource" />
|
||||
<jsp:getProperty name="contenthelper" property="content" />
|
||||
</div></body></html>
|
||||
|
||||
@@ -76,18 +76,8 @@
|
||||
net.i2p.data.Hash h = dest.calculateHash();
|
||||
net.i2p.crypto.SessionKeyManager skm = ctx.clientManager().getClientSessionKeyManager(h);
|
||||
if (skm != null) {
|
||||
out.print("<div class=\"debug_section\" id=\"cskm" + (i++) + "\"><h2>");
|
||||
net.i2p.router.TunnelPoolSettings tps = ctx.tunnelManager().getInboundSettings(h);
|
||||
if (tps != null) {
|
||||
String nick = tps.getDestinationNickname();
|
||||
if (nick != null)
|
||||
out.print(net.i2p.data.DataHelper.escapeHTML(nick));
|
||||
else
|
||||
out.print("<font size=\"-2\">" + dest.toBase32() + "</font>");
|
||||
} else {
|
||||
out.print("<font size=\"-2\">" + dest.toBase32() + "</font>");
|
||||
}
|
||||
out.print(" Session Key Manager</h2>");
|
||||
out.print("<div class=\"debug_section\" id=\"cskm" + (i++) + "\">");
|
||||
out.print("<h2><font size=\"-2\">" + dest.toBase32() + "</font> Session Key Manager</h2>");
|
||||
skm.renderStatusHTML(out);
|
||||
out.print("</div>");
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
* with headers set so the browser caches.
|
||||
*
|
||||
* As of 0.9.36:
|
||||
* All new and changed flags must go in the ../resources/docs/icons/flags16x11/ dir,
|
||||
* which is copied into the war and will be checked first by flags.jsp.
|
||||
* All new and changed flags must go in the flags16x11/ dir,
|
||||
* which will be checked first by flags.jsp.
|
||||
* The flags/ dir is the original set from famfamfam,
|
||||
* which may be symlinked in package installs.
|
||||
*
|
||||
@@ -23,54 +23,44 @@ if (c != null &&
|
||||
(c.length() == 2 || c.length() == 7) &&
|
||||
c.replaceAll("[a-z0-9_]", "").length() == 0) {
|
||||
String flagSet = "flags16x11";
|
||||
String s = request.getParameter("s");
|
||||
|
||||
java.io.File ffile;
|
||||
long lastmod;
|
||||
java.io.InputStream fin = flags_jsp.class.getResourceAsStream("/net/i2p/router/web/resources/docs/icons/" + flagSet + '/' + c + ".png");
|
||||
if (fin != null) {
|
||||
// found in the war
|
||||
java.io.File war = new java.io.File(net.i2p.I2PAppContext.getGlobalContext().getBaseDir(), "webapps/routerconsole.war");
|
||||
ffile = null;
|
||||
lastmod = war.lastModified();
|
||||
} else {
|
||||
// fallback to flags dir, which will be symlinked to /usr/share/flags/countries/16x11 for package builds
|
||||
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 + "icons";
|
||||
String file = "flags" + java.io.File.separatorChar + c + ".png";
|
||||
String file = flagSet + java.io.File.separatorChar + c + ".png";
|
||||
java.io.File ffile = new java.io.File(base, file);
|
||||
if (!ffile.exists()) {
|
||||
// fallback to flags dir, which will be symlinked to /usr/share/flags/countries/16x11 for package builds
|
||||
file = "flags" + java.io.File.separatorChar + c + ".png";
|
||||
ffile = new java.io.File(base, file);
|
||||
long length = ffile.length();
|
||||
if (length <= 0) {
|
||||
response.sendError(403, "Flag not found");
|
||||
return;
|
||||
}
|
||||
response.setHeader("Content-Length", Long.toString(length));
|
||||
lastmod = ffile.lastModified();
|
||||
}
|
||||
long lastmod = ffile.lastModified();
|
||||
if (lastmod > 0) {
|
||||
long iflast = request.getDateHeader("If-Modified-Since");
|
||||
// iflast is -1 if not present; round down file time
|
||||
if (iflast >= ((lastmod / 1000) * 1000)) {
|
||||
response.setStatus(304);
|
||||
if (fin != null)
|
||||
fin.close();
|
||||
return;
|
||||
}
|
||||
response.setDateHeader("Last-Modified", lastmod);
|
||||
// cache for a day
|
||||
response.setDateHeader("Expires", net.i2p.I2PAppContext.getGlobalContext().clock().now() + 86400000l);
|
||||
response.setHeader("Cache-Control", "public, max-age=604800");
|
||||
response.setHeader("X-Content-Type-Options", "nosniff");
|
||||
}
|
||||
// cache for a day
|
||||
response.setDateHeader("Expires", net.i2p.I2PAppContext.getGlobalContext().clock().now() + 86400000l);
|
||||
response.setHeader("Cache-Control", "public, max-age=604800");
|
||||
response.setHeader("X-Content-Type-Options", "nosniff");
|
||||
long length = ffile.length();
|
||||
if (length > 0)
|
||||
response.setHeader("Content-Length", Long.toString(length));
|
||||
response.setContentType("image/png");
|
||||
response.setHeader("Accept-Ranges", "none");
|
||||
java.io.FileInputStream fin = null;
|
||||
java.io.OutputStream cout = response.getOutputStream();
|
||||
try {
|
||||
// flags dir may be a symlink, which readFile will reject
|
||||
// We carefully vetted the "c" value above.
|
||||
//net.i2p.util.FileUtil.readFile(file, base, cout);
|
||||
if (fin == null)
|
||||
fin = new java.io.FileInputStream(ffile);
|
||||
fin = new java.io.FileInputStream(ffile);
|
||||
net.i2p.data.DataHelper.copy(fin, cout);
|
||||
} catch (java.io.IOException ioe) {
|
||||
// prevent 'Committed' IllegalStateException from Jetty
|
||||
|
||||
BIN
apps/routerconsole/jsp/themes/console/images/echelon.png
Normal file
BIN
apps/routerconsole/jsp/themes/console/images/echelon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 668 B |
@@ -73,12 +73,20 @@ img {
|
||||
border: none;
|
||||
}
|
||||
|
||||
img:not(img[src$="i2plogo.png"]){
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: -o-crisp-edges;
|
||||
image-rendering: -webkit-optimize-contrast;
|
||||
image-rendering: crisp-edges;
|
||||
-ms-interpolation-mode: nearest-neighbor;
|
||||
img[src$="bound.png"] {
|
||||
filter: hue-rotate(-40deg);
|
||||
}
|
||||
|
||||
a img[src$="bound.png"] {
|
||||
filter: hue-rotate(-40deg) drop-shadow(0 0 1px #ccf);
|
||||
}
|
||||
|
||||
a:hover img[src$="bound.png"] {
|
||||
filter: hue-rotate(-40deg) drop-shadow(0 0 1px #f60);
|
||||
}
|
||||
|
||||
a img {
|
||||
filter: drop-shadow(0 0 1px #ccf);
|
||||
}
|
||||
|
||||
a:hover img {
|
||||
@@ -113,11 +121,14 @@ pre {
|
||||
padding: 8px;
|
||||
margin-bottom: 2px;
|
||||
text-align: center !important;
|
||||
border: 1px solid #dee2e6;
|
||||
color: #33333f;
|
||||
font-size: 8pt;
|
||||
clear: left;/* fixes a bug in Opera */
|
||||
border-radius: 2px;
|
||||
background: #fafaff;
|
||||
box-shadow: inset 0 0 0 1px #dee2e6;
|
||||
filter: drop-shadow(0 0 1px #999daf);
|
||||
}
|
||||
|
||||
.routersummary div[style="height: 36px;"] {
|
||||
@@ -4155,13 +4166,12 @@ button.download.control:hover, button.download.control:focus {
|
||||
text-indent: 0;
|
||||
text-align: left;
|
||||
min-width: 0 !important;
|
||||
padding: 5px 7px 1px 22px !important;
|
||||
padding: 5px 7px 5px 22px !important;
|
||||
text-transform: capitalize;
|
||||
}
|
||||
|
||||
.routersummary .cancel {
|
||||
text-transform: capitalize;
|
||||
padding: 5px 7px 1px 22px !important;
|
||||
}
|
||||
|
||||
.routersummary .reload[value="restartImmediate"] {
|
||||
@@ -6574,8 +6584,9 @@ h3#displayevents {
|
||||
}
|
||||
|
||||
form[action="events"] {
|
||||
border: 1px solid #ddf;
|
||||
border: 1px solid #7778bf;
|
||||
padding: 10px 10px 10px 50px;
|
||||
margin: -16px 0 -2px 0;
|
||||
background: url(/themes/console/images/info/logs.png) 12px center no-repeat;
|
||||
background-size: 28px 28px;
|
||||
}
|
||||
|
||||
8
apps/sam/java/.classpath
Normal file
8
apps/sam/java/.classpath
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/ministreaming"/>
|
||||
<classpathentry kind="output" path="build"/>
|
||||
</classpath>
|
||||
17
apps/sam/java/.project
Normal file
17
apps/sam/java/.project
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>sam</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
10
apps/streaming/java/.classpath
Normal file
10
apps/streaming/java/.classpath
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" path="test/junit"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/i2p_sdk"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/ministreaming"/>
|
||||
<classpathentry kind="output" path="build/obj"/>
|
||||
</classpath>
|
||||
17
apps/streaming/java/.project
Normal file
17
apps/streaming/java/.project
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>streaming</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -24,7 +24,7 @@ public class MessageOutputStreamTest extends TestCase {
|
||||
@Test
|
||||
public void test() throws Exception {
|
||||
Receiver receiver = new Receiver();
|
||||
MessageOutputStream out = new MessageOutputStream(_context, _st2, receiver, 100, 100);
|
||||
MessageOutputStream out = new MessageOutputStream(_context, _st2, receiver, 100);
|
||||
byte buf[] = new byte[128*1024];
|
||||
_context.random().nextBytes(buf);
|
||||
out.write(buf);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user