Compare commits
61 Commits
auto-confi
...
20220908
Author | SHA1 | Date | |
---|---|---|---|
93b197efb9 | |||
09ffb8edbe | |||
cdc3224eaa | |||
2eeb2106fc | |||
26a7944470 | |||
b97d581fcc | |||
615818976a | |||
e6fc5a349d | |||
3718d2edb9 | |||
4a55a8d4ab | |||
a3a45b01e5 | |||
e07c43f1eb | |||
fd75a7e244 | |||
0e77d53c15 | |||
4dd9448752 | |||
b220697af2 | |||
d9cffc9520 | |||
c8590e4fe5 | |||
3c8b1b6d28 | |||
460837d7f5 | |||
2bd3abe6bb | |||
5ef6118b91 | |||
394f58f90e | |||
5ee89f98a9 | |||
6736d527a2 | |||
ef203ba935 | |||
3749f49641 | |||
d63128096c | |||
51cb4c608a | |||
f920fa8090 | |||
252a80eb72 | |||
ed7814cd74 | |||
073ba01da6 | |||
7caf03d6e4 | |||
c3934ab4e4 | |||
54ffdc2352 | |||
ab2548ecd4 | |||
5cf5d56738 | |||
262311390e | |||
3ac2f2b4a2 | |||
00ca509e57 | |||
a1826d40e8 | |||
c8f3f0b960 | |||
a80512cd5a | |||
7e5579fd65 | |||
934ab43b2a | |||
9214c2116c | |||
c02e466f80 | |||
59a1a3d9e6 | |||
a230a49af7 | |||
079ef87c8f | |||
f9a7f8ab2d | |||
3c8dd9dee9 | |||
65db834ec9 | |||
b955dbe66e | |||
e367227714 | |||
4a02ec418a | |||
4368b80c79 | |||
7dff65d67d | |||
0ad9406387 | |||
21b396e343 |
2
Makefile
2
Makefile
@ -83,10 +83,10 @@ src/I2P/config: build/I2P
|
||||
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
|
||||
echo true | tee src/I2P/config/jpackaged
|
||||
cp -v $(RES_DIR)/clients.config src/I2P/config/
|
||||
cp -v $(RES_DIR)/i2ptunnel.config src/I2P/config/
|
||||
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
|
||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
||||
cat router.config > src/I2P/config/router.config
|
||||
cat i2ptunnel.config > src/I2P/config/i2ptunnel.config
|
||||
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
||||
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
||||
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
||||
|
3
build.sh
3
build.sh
@ -41,6 +41,7 @@ sleep 5s
|
||||
HERE="$PWD"
|
||||
if [ ! -d "$HERE/../i2p.i2p.jpackage-build/" ]; then
|
||||
git clone -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
|
||||
tar --exclude="$HERE/../i2p.i2p.jpackage-build/.git" cvzf i2p.i2p.jpackage-build.tar.gz "$HERE/../i2p.i2p.jpackage-build/"
|
||||
fi
|
||||
cd "$HERE/../i2p.i2p.jpackage-build/"
|
||||
for i in $COUNT; do
|
||||
@ -66,7 +67,7 @@ if [ ! -f "$HERE/build/jna-platform.jar" ]; then
|
||||
fi
|
||||
|
||||
if [ ! -f "$HERE/build/i2pfirefox.jar" ]; then
|
||||
wget -O "$HERE/build/i2pfirefox.jar" https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/0.0.16/i2pfirefox.jar
|
||||
wget -O "$HERE/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
|
||||
fi
|
||||
|
||||
cd java
|
||||
|
@ -1,3 +1,6 @@
|
||||
2022-09-06 idk
|
||||
* Point release 1.9.5, fixes a bug which occurs more often on Windows 11, fixes a SusiDNS issue
|
||||
|
||||
2022-08-28 idk
|
||||
* Migrate away from batch scripts and simply launch a browser if I2P is already running.
|
||||
This is more flexible, stable, and simplet to install
|
||||
|
3
clean.sh
3
clean.sh
@ -28,5 +28,6 @@ rm -rf \
|
||||
wrapper.log \
|
||||
*.jar \
|
||||
*.exe \
|
||||
*.dmg
|
||||
*.dmg \
|
||||
*.tar.gz
|
||||
make clean
|
20
config.sh
20
config.sh
@ -3,16 +3,28 @@
|
||||
## If you need to use a different JVM, JDK, or other utility from
|
||||
# build.sh, set it in this file, for example:
|
||||
|
||||
uname=$(uname)
|
||||
|
||||
#export PATH="$PATH:/c/Program Files/Java/jdk-17.0.3/bin/"
|
||||
#export JAVA_HOME="/c/Program Files/Java/jdk-17.0.3"
|
||||
# to use it for Oracle OpenJDK17
|
||||
|
||||
## Other potential values(NOT exhaustive):
|
||||
|
||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
fi
|
||||
|
||||
if [ "${uname}" != "Linux" ]; then
|
||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
||||
JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
fi
|
||||
|
||||
#export PATH="$PATH:/c/Program Files/Eclipse Adoptium/jdk-17.0.3/bin/"
|
||||
#export JAVA_HOME="/c/Program Files/Eclipse Adoptium/jdk-17.0.3"
|
||||
#export PATH="$PATH:/c/Program Files/OpenJDK/jdk-17.0.3/bin/"
|
||||
@ -49,6 +61,12 @@ export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
||||
#export ANT_HOME="/c/apache-ant-1.10.9"
|
||||
#export PATH="$PATH:$ANT_HOME/bin/"
|
||||
|
||||
# Uncomment this to add signtool to the path so you don't have to fight with Visual Studio.
|
||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
fi
|
||||
|
||||
if [ "${uname}" != "Linux" ]; then
|
||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||
fi
|
4
daily.sh
4
daily.sh
@ -49,3 +49,7 @@ tar -a -cf ../I2P.zip I2P
|
||||
ZIPCHECKSUM=$(sha256sum "../I2P.zip")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||
|
||||
TARCHECKSUM=$(sha256sum "i2p.i2p.jpackage-build.tar.gz")
|
||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
||||
|
17
experimental.sh
Executable file
17
experimental.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#! /usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
cd "$SCRIPT_DIR" || exit 1
|
||||
|
||||
. "$SCRIPT_DIR/config.sh"
|
||||
|
||||
if [ -f config_overide.sh ]; then
|
||||
. "$SCRIPT_DIR/config_override.sh"
|
||||
fi
|
||||
|
||||
./clean.sh
|
||||
wsl make distclean
|
||||
wsl make clean-extensions
|
||||
wsl make new-extensions
|
||||
./build.sh
|
||||
wsl make
|
192
i2ptunnel.config
Normal file
192
i2ptunnel.config
Normal file
@ -0,0 +1,192 @@
|
||||
# NOTE: This I2P config file must use UTF-8 encoding
|
||||
#
|
||||
# If you have a 'split' directory installation, with configuration
|
||||
# files in ~/.i2p (Linux), %LOCALAPPDATA%\I2P (Windows),
|
||||
# or /Users/(user)/Library/Application Support/i2p (Mac), be sure to
|
||||
# edit the file in the configuration directory, NOT the install directory.
|
||||
# When running as a Linux daemon, the configuration directory is /var/lib/i2p
|
||||
# and the install directory is /usr/share/i2p .
|
||||
# When running as a Windows service, the configuration directory is \ProgramData\i2p
|
||||
# and the install directory is \Program Files\i2p .
|
||||
#
|
||||
# On first run, this file will be split into individual config files
|
||||
# in i2ptunnel.config.d/ in the configuration directory.
|
||||
# Look in that directory for the file to edit.
|
||||
#
|
||||
|
||||
# eepproxy
|
||||
tunnel.0.name=I2P HTTP Proxy
|
||||
tunnel.0.description=HTTP proxy for browsing eepsites and the web
|
||||
tunnel.0.type=httpclient
|
||||
tunnel.0.sharedClient=false
|
||||
tunnel.0.interface=127.0.0.1
|
||||
tunnel.0.listenPort=4444
|
||||
tunnel.0.proxyList=false.i2p
|
||||
tunnel.0.i2cpHost=127.0.0.1
|
||||
tunnel.0.i2cpPort=7654
|
||||
tunnel.0.option.inbound.nickname=HTTP Proxy
|
||||
tunnel.0.option.outbound.nickname=HTTP Proxy
|
||||
tunnel.0.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.0.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||
tunnel.0.option.i2cp.reduceQuantity=1
|
||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
||||
tunnel.0.option.inbound.length=3
|
||||
tunnel.0.option.inbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.length=3
|
||||
tunnel.0.option.outbound.lengthVariance=0
|
||||
tunnel.0.option.outbound.priority=10
|
||||
tunnel.0.startOnLoad=true
|
||||
tunnel.0.option.persistentClientKey=false
|
||||
tunnel.0.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.0.option.i2cp.closeOnIdle=true
|
||||
tunnel.0.option.i2cp.newDestOnResume=true
|
||||
|
||||
# irc
|
||||
tunnel.1.name=Irc2P
|
||||
tunnel.1.description=IRC tunnel to access the Irc2P network
|
||||
tunnel.1.type=ircclient
|
||||
tunnel.1.sharedClient=false
|
||||
tunnel.1.interface=127.0.0.1
|
||||
tunnel.1.listenPort=6668
|
||||
tunnel.1.targetDestination=irc.postman.i2p:6667,irc.echelon.i2p:6667
|
||||
tunnel.1.i2cpHost=127.0.0.1
|
||||
tunnel.1.i2cpPort=7654
|
||||
tunnel.1.option.inbound.nickname=Irc2P
|
||||
tunnel.1.option.outbound.nickname=Irc2P
|
||||
tunnel.1.option.i2cp.closeIdleTime=1200000
|
||||
tunnel.1.option.i2cp.closeOnIdle=true
|
||||
tunnel.1.option.i2cp.delayOpen=true
|
||||
tunnel.1.option.i2cp.destination.sigType=7
|
||||
tunnel.1.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.1.option.i2cp.newDestOnResume=false
|
||||
tunnel.1.option.i2cp.reduceIdleTime=600000
|
||||
tunnel.1.option.i2cp.reduceOnIdle=true
|
||||
tunnel.1.option.i2cp.reduceQuantity=1
|
||||
tunnel.1.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.1.option.i2p.streaming.maxWindowSize=16
|
||||
tunnel.1.option.inbound.length=3
|
||||
tunnel.1.option.inbound.lengthVariance=0
|
||||
tunnel.1.option.outbound.length=3
|
||||
tunnel.1.option.outbound.lengthVariance=0
|
||||
tunnel.1.option.outbound.priority=15
|
||||
tunnel.1.startOnLoad=true
|
||||
|
||||
# local eepserver
|
||||
tunnel.3.name=I2P webserver
|
||||
tunnel.3.description=My eepsite
|
||||
tunnel.3.type=httpserver
|
||||
tunnel.3.targetHost=127.0.0.1
|
||||
tunnel.3.targetPort=7658
|
||||
tunnel.3.spoofedHost=mysite.i2p
|
||||
tunnel.3.privKeyFile=eepsite/eepPriv.dat
|
||||
tunnel.3.i2cpHost=127.0.0.1
|
||||
tunnel.3.i2cpPort=7654
|
||||
tunnel.3.option.inbound.nickname=eepsite
|
||||
tunnel.3.option.outbound.nickname=eepsite
|
||||
tunnel.3.option.i2cp.destination.sigType=7
|
||||
tunnel.3.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.3.option.inbound.length=3
|
||||
tunnel.3.option.inbound.lengthVariance=0
|
||||
tunnel.3.option.outbound.length=3
|
||||
tunnel.3.option.outbound.lengthVariance=0
|
||||
# uncomment for HTTPS to port 7668
|
||||
#tunnel.3.option.targetForPort.443=127.0.0.1:7668
|
||||
tunnel.3.startOnLoad=false
|
||||
|
||||
# postman's SMTP server - see hq.postman.i2p
|
||||
tunnel.4.description=smtp server
|
||||
tunnel.4.i2cpHost=127.0.0.1
|
||||
tunnel.4.i2cpPort=7654
|
||||
tunnel.4.interface=127.0.0.1
|
||||
tunnel.4.listenPort=7659
|
||||
tunnel.4.name=smtp.postman.i2p
|
||||
tunnel.4.option.inbound.nickname=shared clients
|
||||
tunnel.4.option.outbound.nickname=shared clients
|
||||
tunnel.4.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.4.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.4.option.i2cp.reduceOnIdle=true
|
||||
tunnel.4.option.i2cp.reduceQuantity=1
|
||||
tunnel.4.option.inbound.length=3
|
||||
tunnel.4.option.inbound.lengthVariance=0
|
||||
tunnel.4.option.outbound.length=3
|
||||
tunnel.4.option.outbound.lengthVariance=0
|
||||
tunnel.4.startOnLoad=true
|
||||
tunnel.4.targetDestination=smtp.postman.i2p:25
|
||||
tunnel.4.type=client
|
||||
tunnel.4.sharedClient=true
|
||||
|
||||
# postman's POP3 server - see hq.postman.i2p
|
||||
tunnel.2.name=pop3.postman.i2p
|
||||
tunnel.2.description=pop3 server
|
||||
tunnel.2.i2cpHost=127.0.0.1
|
||||
tunnel.2.i2cpPort=7654
|
||||
tunnel.2.interface=127.0.0.1
|
||||
tunnel.2.listenPort=7660
|
||||
tunnel.2.option.inbound.nickname=shared clients
|
||||
tunnel.2.option.outbound.nickname=shared clients
|
||||
tunnel.2.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.2.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.2.option.i2cp.reduceOnIdle=true
|
||||
tunnel.2.option.i2cp.reduceQuantity=1
|
||||
tunnel.2.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.2.option.inbound.length=3
|
||||
tunnel.2.option.inbound.lengthVariance=0
|
||||
tunnel.2.option.outbound.length=3
|
||||
tunnel.2.option.outbound.lengthVariance=0
|
||||
tunnel.2.startOnLoad=true
|
||||
tunnel.2.targetDestination=pop.postman.i2p:110
|
||||
tunnel.2.type=client
|
||||
tunnel.2.sharedClient=true
|
||||
|
||||
# HTTPS (CONNECT) outproxy
|
||||
tunnel.5.name=I2P HTTPS Proxy
|
||||
tunnel.5.description=HTTPS proxy for browsing eepsites and the web
|
||||
tunnel.5.type=connectclient
|
||||
tunnel.5.sharedClient=true
|
||||
tunnel.5.interface=127.0.0.1
|
||||
tunnel.5.listenPort=4445
|
||||
tunnel.5.proxyList=outproxy-tor.meeh.i2p
|
||||
tunnel.5.i2cpHost=127.0.0.1
|
||||
tunnel.5.i2cpPort=7654
|
||||
tunnel.5.option.inbound.nickname=shared clients
|
||||
tunnel.5.option.outbound.nickname=shared clients
|
||||
tunnel.5.option.i2cp.leaseSetEncType=4,0
|
||||
tunnel.5.option.i2cp.reduceIdleTime=900000
|
||||
tunnel.5.option.i2cp.reduceOnIdle=true
|
||||
tunnel.5.option.i2cp.reduceQuantity=1
|
||||
tunnel.5.option.i2p.streaming.connectDelay=1000
|
||||
tunnel.5.option.inbound.length=3
|
||||
tunnel.5.option.inbound.lengthVariance=0
|
||||
tunnel.5.option.outbound.length=3
|
||||
tunnel.5.option.outbound.lengthVariance=0
|
||||
tunnel.5.startOnLoad=true
|
||||
|
||||
# I2P Git Repositories SSH Access
|
||||
tunnel.6.description=I2P Git Repositories SSH Access
|
||||
tunnel.6.interface=127.0.0.1
|
||||
tunnel.6.listenPort=7670
|
||||
tunnel.6.name=gitssh.idk.i2p
|
||||
tunnel.6.option.i2cp.closeIdleTime=1800000
|
||||
tunnel.6.option.i2cp.closeOnIdle=false
|
||||
tunnel.6.option.i2cp.delayOpen=true
|
||||
tunnel.6.option.i2cp.destination.sigType=7
|
||||
tunnel.6.option.i2cp.leaseSetEncType=4
|
||||
tunnel.6.option.i2cp.newDestOnResume=false
|
||||
tunnel.6.option.i2cp.reduceIdleTime=1200000
|
||||
tunnel.6.option.i2cp.reduceOnIdle=true
|
||||
tunnel.6.option.i2cp.reduceQuantity=1
|
||||
tunnel.6.option.inbound.backupQuantity=1
|
||||
tunnel.6.option.inbound.length=3
|
||||
tunnel.6.option.inbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.inbound.quantity=3
|
||||
tunnel.6.option.outbound.backupQuantity=1
|
||||
tunnel.6.option.outbound.length=3
|
||||
tunnel.6.option.outbound.nickname=gitssh.idk.i2p
|
||||
tunnel.6.option.outbound.quantity=3
|
||||
tunnel.6.sharedClient=false
|
||||
tunnel.6.startOnLoad=false
|
||||
tunnel.6.targetDestination=gitssh.idk.i2p
|
||||
tunnel.6.type=client
|
||||
|
14
i2pversion
14
i2pversion
@ -2,19 +2,15 @@
|
||||
|
||||
JNA_VERSION=5.11.0
|
||||
export JNA_VERSION=5.11.0
|
||||
|
||||
I2PFIREFOX_VERSION=0.0.34
|
||||
export I2PFIREFOX_VERSION=0.0.34
|
||||
# Comment this out to build from an alternate branch or
|
||||
# the tip of the master branch.
|
||||
VERSIONMAJOR=1
|
||||
VERSIONMINOR=9
|
||||
VERSIONBUILD=0
|
||||
VERSIONBUILD=5
|
||||
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||
VERSION=i2p-1.9.0
|
||||
export VERSION=i2p-1.9.0
|
||||
VERSION=i2p-jpackage-1.9.4
|
||||
export VERSION=i2p-jpackage-1.9.4
|
||||
|
||||
#Uncomment this to build from the tip of the master.
|
||||
#I2P_VERSION=1.8.0
|
||||
#export I2P_VERSION=1.8.0
|
||||
#VERSION=master
|
||||
#export VERSION="$VERSION"
|
||||
|
@ -25,9 +25,11 @@ public class Elevator {
|
||||
|
||||
if (!result) {
|
||||
int lastError = Kernel32.INSTANCE.GetLastError();
|
||||
String errorMessage = Kernel32Util.formatMessageFromLastErrorCode(lastError);
|
||||
throw new RuntimeException("Error performing elevation: " + lastError + ": " + errorMessage + " (apperror="
|
||||
+ execInfo.hInstApp + ")");
|
||||
String errorMessage =
|
||||
Kernel32Util.formatMessageFromLastErrorCode(lastError);
|
||||
throw new RuntimeException("Error performing elevation: " + lastError +
|
||||
": " + errorMessage +
|
||||
" (apperror=" + execInfo.hInstApp + ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
@ -12,9 +10,11 @@ import com.sun.jna.platform.win32.WinDef.HWND;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
import com.sun.jna.platform.win32.WinReg.HKEY;
|
||||
import com.sun.jna.win32.W32APIOptions;
|
||||
import java.util.*;
|
||||
|
||||
public interface Shell32X extends Shell32 {
|
||||
Shell32X INSTANCE = (Shell32X) Native.loadLibrary("shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
Shell32X INSTANCE = (Shell32X)Native.loadLibrary(
|
||||
"shell32", Shell32X.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
|
||||
int SW_HIDE = 0;
|
||||
int SW_MAXIMIZE = 3;
|
||||
@ -49,7 +49,8 @@ public interface Shell32X extends Shell32 {
|
||||
|
||||
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
||||
|
||||
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters, String lpDirectory, int nShow);
|
||||
int ShellExecute(int i, String lpVerb, String lpFile, String lpParameters,
|
||||
String lpDirectory, int nShow);
|
||||
|
||||
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
|
||||
|
||||
@ -101,11 +102,22 @@ public interface Shell32X extends Shell32 {
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] {
|
||||
"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters",
|
||||
"lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass",
|
||||
"hKeyClass", "dwHotKey", "hMonitor", "hProcess",
|
||||
"cbSize",
|
||||
"fMask",
|
||||
"hwnd",
|
||||
"lpVerb",
|
||||
"lpFile",
|
||||
"lpParameters",
|
||||
"lpDirectory",
|
||||
"nShow",
|
||||
"hInstApp",
|
||||
"lpIDList",
|
||||
"lpClass",
|
||||
"hKeyClass",
|
||||
"dwHotKey",
|
||||
"hMonitor",
|
||||
"hProcess",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.InetAddress;
|
||||
import java.net.ServerSocket;
|
||||
@ -8,19 +10,15 @@ import java.util.*;
|
||||
import java.util.logging.FileHandler;
|
||||
import java.util.logging.Logger;
|
||||
import java.util.logging.SimpleFormatter;
|
||||
|
||||
import net.i2p.crypto.*;
|
||||
|
||||
import net.i2p.app.ClientAppManager;
|
||||
import net.i2p.router.RouterLaunch;
|
||||
import net.i2p.crypto.*;
|
||||
import net.i2p.i2pfirefox.*;
|
||||
import net.i2p.router.Router;
|
||||
import net.i2p.router.RouterLaunch;
|
||||
import net.i2p.update.*;
|
||||
import net.i2p.update.UpdateManager;
|
||||
import net.i2p.update.UpdatePostProcessor;
|
||||
import net.i2p.util.SystemVersion;
|
||||
import net.i2p.update.*;
|
||||
import net.i2p.i2pfirefox.*;
|
||||
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
|
||||
/**
|
||||
* Launches a router from %PROGRAMFILES%/I2P using configuration data in
|
||||
@ -51,11 +49,51 @@ public class WinLauncher {
|
||||
e.printStackTrace();
|
||||
}
|
||||
boolean privateBrowsing = false;
|
||||
if (args != null && args.length > 0) {
|
||||
logger.info("checking for private browsing");
|
||||
if (args[0].equals("-private")) {
|
||||
boolean usabilityMode = false;
|
||||
boolean chromiumFirst = false;
|
||||
int proxyTimeoutTime = 200;
|
||||
ArrayList<String> newArgsList = new ArrayList<String>();
|
||||
|
||||
if (args != null) {
|
||||
if (args.length > 0) {
|
||||
for (String arg : args) {
|
||||
if (arg.equals("-private")) {
|
||||
privateBrowsing = true;
|
||||
logger.info("private browsing is true, profile will be discarded at end of session");
|
||||
logger.info(
|
||||
"Private browsing is true, profile will be discarded at end of session.");
|
||||
} else if (arg.equals("-chromium")) {
|
||||
chromiumFirst = true;
|
||||
logger.info("Chromium will be selected before Firefox.");
|
||||
} else if (arg.equals("-usability")) {
|
||||
usabilityMode = true;
|
||||
logger.info(
|
||||
"Usability mode is true, using alternate extensions loadout.");
|
||||
} else if (arg.equals("-noproxycheck")) {
|
||||
proxyTimeoutTime = 0;
|
||||
logger.info("Proxy timeout time set to zero");
|
||||
} else {
|
||||
// make an effort to not let people launch into sites if the proxy
|
||||
// isn't quite ready yet, but also disable the proxy timeout if
|
||||
// they're reaching a router console
|
||||
if (arg.startsWith("http://localhost:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (arg.startsWith("http://127.0.0.1:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (arg.startsWith("https://localhost:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (arg.startsWith("https://127.0.0.1:76")) {
|
||||
newArgsList.add(arg);
|
||||
proxyTimeoutTime = 0;
|
||||
} else if (proxyTimeoutTime > 0) {
|
||||
newArgsList.add(arg);
|
||||
} else if (!isAvailable(4444)) {
|
||||
newArgsList.add(arg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -63,7 +101,9 @@ public class WinLauncher {
|
||||
if (!programs.exists())
|
||||
programs.mkdirs();
|
||||
else if (!programs.isDirectory()) {
|
||||
logger.warning(programs + " exists but is not a directory. Please get it out of the way");
|
||||
logger.warning(
|
||||
programs +
|
||||
" exists but is not a directory. Please get it out of the way");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
@ -71,23 +111,40 @@ public class WinLauncher {
|
||||
if (!home.exists())
|
||||
home.mkdirs();
|
||||
else if (!home.isDirectory()) {
|
||||
logger.warning(home + " exists but is not a directory. Please get it out of the way");
|
||||
logger.warning(
|
||||
home +
|
||||
" exists but is not a directory. Please get it out of the way");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
if (i2pIsRunning()) {
|
||||
setNotRunning();
|
||||
logger.warning("I2P is already running");
|
||||
I2PBrowser i2pBrowser = new I2PBrowser();
|
||||
System.out.println("i2pBrowser");
|
||||
i2pBrowser.launch(privateBrowsing);
|
||||
i2pBrowser.usability = usabilityMode;
|
||||
i2pBrowser.chromiumFirst = chromiumFirst;
|
||||
i2pBrowser.firefox = !chromiumFirst;
|
||||
i2pBrowser.chromium = chromiumFirst;
|
||||
i2pBrowser.setProxyTimeoutTime(proxyTimeoutTime);
|
||||
System.out.println("I2PBrowser");
|
||||
String[] newArgs = newArgsList.toArray(new String[newArgsList.size()]);
|
||||
i2pBrowser.launch(privateBrowsing, newArgs);
|
||||
return;
|
||||
}
|
||||
|
||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
|
||||
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
|
||||
+ "\n\t" + System.getProperty("router.pid"));
|
||||
System.setProperty("router.pid",
|
||||
String.valueOf(ProcessHandle.current().pid()));
|
||||
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" +
|
||||
System.getProperty("i2p.dir.config") + "\n\t" +
|
||||
System.getProperty("router.pid"));
|
||||
/**
|
||||
* IMPORTANT: You must set user.dir to the same directory where the
|
||||
* jpackage is intstalled, or when the launcher tries to re-run itself
|
||||
* to start the browser, it will start in the wrong directory and fail
|
||||
* to find the JVM and Runtime bundle. This broke Windows 11 installs.
|
||||
*/
|
||||
System.setProperty("user.dir", programs.getAbsolutePath());
|
||||
|
||||
// wupp.i2pRouter = new Router(System.getProperties());
|
||||
logger.info("Router is configured");
|
||||
@ -97,11 +154,13 @@ public class WinLauncher {
|
||||
registrationThread.setDaemon(true);
|
||||
registrationThread.start();
|
||||
|
||||
setNotRunning();
|
||||
// wupp.i2pRouter.runRouter();
|
||||
RouterLaunch.main(args);
|
||||
}
|
||||
|
||||
// see https://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java
|
||||
// see
|
||||
// https://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java
|
||||
public static boolean isAvailable(int portNr) {
|
||||
boolean portFree;
|
||||
try (var ignored = new ServerSocket(portNr)) {
|
||||
@ -112,8 +171,7 @@ public class WinLauncher {
|
||||
return portFree;
|
||||
}
|
||||
|
||||
private static boolean i2pIsRunning() {
|
||||
sleep(2000);
|
||||
private static boolean i2pIsRunningCheck() {
|
||||
// check if there's something listening on port 7657(Router Console)
|
||||
if (!isAvailable(7657)) {
|
||||
return true;
|
||||
@ -122,14 +180,15 @@ public class WinLauncher {
|
||||
if (!isAvailable(7654)) {
|
||||
return true;
|
||||
}
|
||||
// check for the existence of router.ping file, if it's less then 2 minutes old,
|
||||
// exit
|
||||
// check for the existence of router.ping file, if it's less then 2
|
||||
// minutes old, exit
|
||||
File home = selectHome();
|
||||
File ping = new File(home, "router.ping");
|
||||
if (ping.exists()) {
|
||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
||||
if (diff < 60 * 1000) {
|
||||
logger.info("router.ping exists and is less than 1 minute old, I2P appears to be running already.");
|
||||
logger.info(
|
||||
"router.ping exists and is less than 1 minute old, I2P appears to be running already.");
|
||||
logger.info("If I2P is not running, wait 60 seconds and try again.");
|
||||
return true;
|
||||
}
|
||||
@ -137,6 +196,52 @@ public class WinLauncher {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void setNotRunning() {
|
||||
File home = selectHome();
|
||||
File running = new File(home, "running");
|
||||
if (running.exists()) {
|
||||
running.delete();
|
||||
}
|
||||
}
|
||||
private static void setRunning() {
|
||||
File home = selectHome();
|
||||
File running = new File(home, "running");
|
||||
if (!running.exists()) {
|
||||
try {
|
||||
running.createNewFile();
|
||||
} catch (IOException e) {
|
||||
logger.info(e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean i2pIsRunning() {
|
||||
File home = selectHome();
|
||||
File running = new File(home, "running");
|
||||
if (running.exists()) {
|
||||
return true;
|
||||
}
|
||||
setRunning();
|
||||
File ping = new File(home, "router.ping");
|
||||
if (ping.exists()) {
|
||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
||||
if (diff > 60 * 1000) {
|
||||
logger.info(
|
||||
"router.ping exists and is more than 1 minute old, I2P does not appear to be running.");
|
||||
logger.info("If I2P is running, report this as a bug.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (i2pIsRunningCheck())
|
||||
return true;
|
||||
for (int i = 0; i < 10; i++) {
|
||||
if (i2pIsRunningCheck())
|
||||
return true;
|
||||
sleep(1000);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static final Runnable REGISTER_UPP = () -> {
|
||||
|
||||
// first wait for the RouterContext to appear
|
||||
@ -153,7 +258,8 @@ public class WinLauncher {
|
||||
}
|
||||
|
||||
UpdateManager um;
|
||||
while ((um = (UpdateManager) cam.getRegisteredApp(UpdateManager.APP_NAME)) == null) {
|
||||
while ((um = (UpdateManager)cam.getRegisteredApp(UpdateManager.APP_NAME)) ==
|
||||
null) {
|
||||
sleep(1000);
|
||||
}
|
||||
|
||||
@ -188,12 +294,14 @@ public class WinLauncher {
|
||||
File local = new File(appData, "Local");
|
||||
File i2p;
|
||||
i2p = new File(local, "I2P");
|
||||
logger.info("Windows jpackage wrapper started, using: " + i2p + " as base config");
|
||||
logger.info("Windows jpackage wrapper starting up, using: " + i2p +
|
||||
" as base config");
|
||||
return i2p.getAbsoluteFile();
|
||||
} else {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
|
||||
logger.info("Linux portable jpackage wrapper started, using: " + programs + " as base config");
|
||||
logger.info("Linux portable jpackage wrapper starting up, using: " +
|
||||
programs + " as base config");
|
||||
return programs.getAbsoluteFile();
|
||||
}
|
||||
}
|
||||
@ -212,12 +320,14 @@ public class WinLauncher {
|
||||
if (SystemVersion.isWindows()) {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = jrehome.getParentFile();
|
||||
logger.info("Windows portable jpackage wrapper found, using: " + programs + " as working config");
|
||||
logger.info("Windows portable jpackage wrapper found, using: " +
|
||||
programs + " as working config");
|
||||
return programs.getAbsoluteFile();
|
||||
} else {
|
||||
File jrehome = new File(System.getProperty("java.home"));
|
||||
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
||||
logger.info("Linux portable jpackage wrapper found, using: " + programs + " as working config");
|
||||
logger.info("Linux portable jpackage wrapper found, using: " + programs +
|
||||
" as working config");
|
||||
return programs.getAbsoluteFile();
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,9 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import net.i2p.router.*;
|
||||
import net.i2p.I2PAppContext;
|
||||
|
||||
import java.util.function.*;
|
||||
import java.io.*;
|
||||
import java.util.function.*;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.router.*;
|
||||
import net.i2p.util.Log;
|
||||
|
||||
class WinUpdateProcess implements Runnable {
|
||||
@ -13,7 +12,8 @@ class WinUpdateProcess implements Runnable {
|
||||
private final Supplier<File> fileSupplier;
|
||||
private final Log _log;
|
||||
|
||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier, Supplier<File> fileSupplier) {
|
||||
WinUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier,
|
||||
Supplier<File> fileSupplier) {
|
||||
this.ctx = ctx;
|
||||
this.versionSupplier = versionSupplier;
|
||||
this.fileSupplier = fileSupplier;
|
||||
@ -22,10 +22,12 @@ class WinUpdateProcess implements Runnable {
|
||||
|
||||
private File workDir() throws IOException {
|
||||
if (ctx != null) {
|
||||
File workDir = new File(ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
|
||||
File workDir =
|
||||
new File(ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
|
||||
if (workDir.exists()) {
|
||||
if (workDir.isFile())
|
||||
throw new IOException(workDir + " exists but is a file, get it out of the way");
|
||||
throw new IOException(workDir +
|
||||
" exists but is a file, get it out of the way");
|
||||
return workDir;
|
||||
} else {
|
||||
workDir.mkdirs();
|
||||
@ -45,28 +47,34 @@ class WinUpdateProcess implements Runnable {
|
||||
var logFile = new File(workingDir, "log-" + version + ".txt");
|
||||
|
||||
if (logFile.canWrite()) {
|
||||
// check if we can write to the log file. If we can, use the ProcessBuilder to
|
||||
// run the installer.
|
||||
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
|
||||
// check if we can write to the log file. If we can, use the
|
||||
// ProcessBuilder to run the installer.
|
||||
ProcessBuilder pb = new ProcessBuilder(
|
||||
file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
|
||||
var env = pb.environment();
|
||||
env.put("OLD_I2P_VERSION", version);
|
||||
env.remove("RESTART_I2P");
|
||||
|
||||
int exitCode = ctx.router().scheduledGracefulExitCode();
|
||||
if (exitCode == Router.EXIT_HARD_RESTART || exitCode == Router.EXIT_GRACEFUL_RESTART)
|
||||
if (exitCode == Router.EXIT_HARD_RESTART ||
|
||||
exitCode == Router.EXIT_GRACEFUL_RESTART)
|
||||
env.put("RESTART_I2P", "true");
|
||||
|
||||
try {
|
||||
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
|
||||
pb.directory(workingDir)
|
||||
.redirectErrorStream(true)
|
||||
.redirectOutput(logFile)
|
||||
.start();
|
||||
} catch (IOException ex) {
|
||||
_log.error("Unable to run update-program in background. Update will fail.");
|
||||
_log.error(
|
||||
"Unable to run update-program in background. Update will fail.");
|
||||
}
|
||||
} else {
|
||||
// If we cant write to the log file and we're on Windows, use the elevator to
|
||||
// execute the installer instead of the ProcessBuilder.
|
||||
Elevator.executeAsAdministrator(file.getAbsolutePath(), " /S /D=" + workingDir.getAbsolutePath());
|
||||
// If we cant write to the log file and we're on Windows, use the elevator
|
||||
// to execute the installer instead of the ProcessBuilder.
|
||||
Elevator.executeAsAdministrator(file.getAbsolutePath(),
|
||||
" /S /D=" + workingDir.getAbsolutePath());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,22 +1,21 @@
|
||||
package net.i2p.router;
|
||||
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
|
||||
import java.io.*;
|
||||
import java.lang.InterruptedException;
|
||||
import java.lang.Process;
|
||||
import java.lang.ProcessBuilder;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.*;
|
||||
|
||||
import net.i2p.crypto.*;
|
||||
import static net.i2p.update.UpdateType.*;
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.update.UpdateType;
|
||||
import net.i2p.crypto.*;
|
||||
import net.i2p.update.UpdatePostProcessor;
|
||||
import net.i2p.update.UpdateType;
|
||||
import net.i2p.util.Log;
|
||||
import net.i2p.util.SystemVersion;
|
||||
|
||||
import java.lang.ProcessBuilder;
|
||||
import java.lang.Process;
|
||||
import java.lang.InterruptedException;
|
||||
|
||||
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
private final Log _log;
|
||||
private final RouterContext ctx;
|
||||
@ -32,20 +31,18 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
|
||||
}
|
||||
|
||||
public String getVersion() {
|
||||
return version;
|
||||
}
|
||||
public String getVersion() { return version; }
|
||||
|
||||
public File getFile() {
|
||||
return positionedFile;
|
||||
}
|
||||
public File getFile() { return positionedFile; }
|
||||
|
||||
public void updateDownloadedandVerified(UpdateType type, int fileType, String version, File file)
|
||||
public void updateDownloadedandVerified(UpdateType type, int fileType,
|
||||
String version, File file)
|
||||
throws IOException {
|
||||
_log.info("Got an update to post-process");
|
||||
if (SystemVersion.isWindows()) {
|
||||
|
||||
if (type != UpdateType.ROUTER_SIGNED_SU3 && type != UpdateType.ROUTER_DEV_SU3) {
|
||||
if (type != UpdateType.ROUTER_SIGNED_SU3 &&
|
||||
type != UpdateType.ROUTER_DEV_SU3) {
|
||||
_log.warn("Unsupported update type " + type);
|
||||
return;
|
||||
}
|
||||
@ -65,7 +62,8 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
|
||||
_log.info("adding shutdown hook");
|
||||
|
||||
ctx.addFinalShutdownTask(new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||
ctx.addFinalShutdownTask(
|
||||
new WinUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,10 +83,12 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
|
||||
private File workDir() throws IOException {
|
||||
if (this.ctx != null) {
|
||||
File workDir = new File(this.ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
|
||||
File workDir =
|
||||
new File(this.ctx.getConfigDir().getAbsolutePath(), "i2p_update_win");
|
||||
if (workDir.exists()) {
|
||||
if (workDir.isFile())
|
||||
throw new IOException(workDir + " exists but is a file, get it out of the way");
|
||||
throw new IOException(workDir +
|
||||
" exists but is a file, get it out of the way");
|
||||
return null;
|
||||
} else {
|
||||
workDir.mkdirs();
|
||||
@ -97,5 +97,4 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
build-new-extensions: build/i2ppb@eyedeekay.github.io.xpi build/uBlock0@raymondhill.net.xpi build/jsr@javascriptrestrictor.xpi build/onioncbt@eyedeekay.github.io.xpi build/{b86e4813-687a-43e6-ab65-0bde4ab75758}.xpi
|
||||
|
||||
build/uBlock0@raymondhill.net.xpi:
|
||||
curl -L `cat UblockOrigin.url` > build/uBlock0@raymondhill.net.xpi
|
||||
curl -L `cat UBlockOrigin.url` > build/uBlock0@raymondhill.net.xpi
|
||||
|
||||
build/jsr@javascriptrestrictor.xpi:
|
||||
curl -L `cat JShelter.url` > build/jsr@javascriptrestrictor.xpi
|
||||
|
29
msi.sh
Executable file
29
msi.sh
Executable file
@ -0,0 +1,29 @@
|
||||
#! /usr/bin/env sh
|
||||
|
||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||
|
||||
. ./config.sh
|
||||
. ./i2pversion
|
||||
jpackage --type app-image --name I2P --app-version "$I2P_VERSION" \
|
||||
--verbose \
|
||||
--java-options "-Xmx512m" \
|
||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||
$JPACKAGE_OPTS \
|
||||
--resource-dir build \
|
||||
--input build \
|
||||
--verbose \
|
||||
--type msi \
|
||||
--win-dir-chooser \
|
||||
--win-help-url "https://geti2p.net" \
|
||||
--win-menu \
|
||||
--win-menu-group "I2P Easy-Install Bundle" \
|
||||
--win-shortcut \
|
||||
--win-shortcut-prompt \
|
||||
--win-per-user-install \
|
||||
--license-file LICENSE.md \
|
||||
--main-jar launcher.jar \
|
||||
--main-class net.i2p.router.WinLauncher
|
@ -1,5 +1,5 @@
|
||||
router.updateURL=http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3
|
||||
router.newsURL=http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news/win/beta/news.su3
|
||||
router.backupNewsURL=http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/win/beta/news.su3
|
||||
routerconsole.browser=I2P.exe
|
||||
routerconsole.browser=I2P.exe -noproxycheck
|
||||
router.disableTunnelTesting=false
|
@ -1 +1 @@
|
||||
1.9.0
|
||||
1.9.5
|
||||
|
@ -5,7 +5,7 @@ UniCode true
|
||||
!define COMPANYNAME "I2P"
|
||||
!define DESCRIPTION "This launches Firefox with a browser profile pre-configured to use i2p"
|
||||
!define FIREFOX_MESSAGE "Could not find Firefox. Please point to where you have installed Firefox. If you have not installed Firefox yet, exit this installer and install Firefox, then start this installer again."
|
||||
!define I2P_MESSAGE "Could not find I2P. Please point to where you have installed I2P. If you have not installed I2P yet, exit this installer and install I2P, then start this installer again."
|
||||
!define I2P_MESSAGE "Could not find I2P. Installing portable Jpackaged I2P."
|
||||
!define LAUNCH_TEXT "Start I2P?"
|
||||
!define LICENSE_TITLE "Many Licenses"
|
||||
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
||||
@ -145,10 +145,14 @@ FunctionEnd
|
||||
|
||||
Function routerDetect
|
||||
createDirectory $I2PINSTEXE
|
||||
SetOutPath $I2PINSTEXE\app
|
||||
File /nonfatal /a /r "I2P\app\"
|
||||
SetOutPath $I2PINSTEXE\runtime
|
||||
File /nonfatal /a /r "I2P\runtime\"
|
||||
SetOutPath $I2PINSTEXE
|
||||
File /a /r "I2P\"
|
||||
File /nonfatal /a /r "I2P\I2P.exe"
|
||||
File "I2P\config\jpackaged"
|
||||
File /nonfatal /a /r "I2P\I2P.ico"
|
||||
File /nonfatal "I2P\config\jpackaged"
|
||||
|
||||
createDirectory "$I2PINSTEXE\"
|
||||
SetOutPath "$I2PINSTEXE\"
|
||||
@ -167,8 +171,6 @@ Function routerDetect
|
||||
File /a /r "I2P/config/certificates"
|
||||
File /a /r "I2P/config/geoip"
|
||||
File /a /r "I2P/config/i2ptunnel.config"
|
||||
|
||||
Abort directory
|
||||
FunctionEnd
|
||||
|
||||
Function installerFunction
|
||||
@ -225,11 +227,9 @@ ${If} ${Silent}
|
||||
createDirectory "$SMPROGRAMS\${APPNAME}"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
; CreateShortCut "$SMPROGRAMS\${APPNAME}\I2P Applications.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pconfig.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
|
||||
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
; CreateShortCut "$DESKTOP\I2P Applications.lnk" "C:\Windows\system32\cmd.exe" "/c $\"$INSTDIR\i2pconfig.bat$\"" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
SetShellVarContext current
|
||||
|
@ -1 +1 @@
|
||||
!define I2P_VERSION 1.9.0
|
||||
!define I2P_VERSION 1.9.5
|
||||
|
@ -1,3 +1,3 @@
|
||||
!define VERSIONMAJOR 1
|
||||
!define VERSIONMINOR 9
|
||||
!define VERSIONBUILD 0
|
||||
!define VERSIONBUILD 5
|
||||
|
@ -1 +1 @@
|
||||
1.9.0
|
||||
1.9.5
|
||||
|
Reference in New Issue
Block a user