Compare commits
26 Commits
experiment
...
20220906
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
262311390e | ||
|
|
3ac2f2b4a2 | ||
|
|
00ca509e57 | ||
|
|
a1826d40e8 | ||
|
|
c8f3f0b960 | ||
|
|
a80512cd5a | ||
|
|
7e5579fd65 | ||
|
|
934ab43b2a | ||
|
|
9214c2116c | ||
|
|
c02e466f80 | ||
|
|
59a1a3d9e6 | ||
|
|
a230a49af7 | ||
|
|
079ef87c8f | ||
|
|
f9a7f8ab2d | ||
|
|
3c8dd9dee9 | ||
|
|
65db834ec9 | ||
|
|
b955dbe66e | ||
|
|
e367227714 | ||
|
|
4a02ec418a | ||
|
|
4368b80c79 | ||
|
|
7dff65d67d | ||
|
|
c2485eeea0 | ||
|
|
603c10ed9f | ||
|
|
7806b6f232 | ||
|
|
3d67aa4dca | ||
|
|
646778680d |
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
|
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
|
||||||
echo true | tee src/I2P/config/jpackaged
|
echo true | tee src/I2P/config/jpackaged
|
||||||
cp -v $(RES_DIR)/clients.config src/I2P/config/
|
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/
|
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
|
||||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
||||||
cat 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 -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
||||||
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
||||||
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
||||||
|
|||||||
2
build.sh
2
build.sh
@@ -66,7 +66,7 @@ if [ ! -f "$HERE/build/jna-platform.jar" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$HERE/build/i2pfirefox.jar" ]; then
|
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
|
fi
|
||||||
|
|
||||||
cd java
|
cd java
|
||||||
|
|||||||
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=shared clients
|
||||||
|
tunnel.0.option.outbound.nickname=shared clients
|
||||||
|
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
|
||||||
|
|
||||||
@@ -2,16 +2,17 @@
|
|||||||
|
|
||||||
JNA_VERSION=5.11.0
|
JNA_VERSION=5.11.0
|
||||||
export JNA_VERSION=5.11.0
|
export JNA_VERSION=5.11.0
|
||||||
|
I2PFIREFOX_VERSION=0.0.22
|
||||||
|
export I2PFIREFOX_VERSION=0.0.22
|
||||||
#Comment this out to build from an alternate branch or
|
#Comment this out to build from an alternate branch or
|
||||||
# the tip of the master branch.
|
# the tip of the master branch.
|
||||||
VERSIONMAJOR=1
|
VERSIONMAJOR=1
|
||||||
VERSIONMINOR=9
|
VERSIONMINOR=9
|
||||||
VERSIONBUILD=0
|
VERSIONBUILD=1
|
||||||
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||||
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||||
VERSION=i2p-1.9.0
|
VERSION=i2p-jpackage-1.9.1
|
||||||
export VERSION=i2p-1.9.0
|
export VERSION=i2p-jpackage-1.9.1
|
||||||
|
|
||||||
#Uncomment this to build from the tip of the master.
|
#Uncomment this to build from the tip of the master.
|
||||||
#I2P_VERSION=1.8.0
|
#I2P_VERSION=1.8.0
|
||||||
|
|||||||
@@ -25,9 +25,11 @@ public class Elevator {
|
|||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
int lastError = Kernel32.INSTANCE.GetLastError();
|
int lastError = Kernel32.INSTANCE.GetLastError();
|
||||||
String errorMessage = Kernel32Util.formatMessageFromLastErrorCode(lastError);
|
String errorMessage =
|
||||||
throw new RuntimeException("Error performing elevation: " + lastError + ": " + errorMessage + " (apperror="
|
Kernel32Util.formatMessageFromLastErrorCode(lastError);
|
||||||
+ execInfo.hInstApp + ")");
|
throw new RuntimeException("Error performing elevation: " + lastError +
|
||||||
|
": " + errorMessage +
|
||||||
|
" (apperror=" + execInfo.hInstApp + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package net.i2p.router;
|
package net.i2p.router;
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
import com.sun.jna.Native;
|
import com.sun.jna.Native;
|
||||||
import com.sun.jna.Pointer;
|
import com.sun.jna.Pointer;
|
||||||
import com.sun.jna.Structure;
|
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.WinNT.HANDLE;
|
||||||
import com.sun.jna.platform.win32.WinReg.HKEY;
|
import com.sun.jna.platform.win32.WinReg.HKEY;
|
||||||
import com.sun.jna.win32.W32APIOptions;
|
import com.sun.jna.win32.W32APIOptions;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
public interface Shell32X extends Shell32 {
|
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_HIDE = 0;
|
||||||
int SW_MAXIMIZE = 3;
|
int SW_MAXIMIZE = 3;
|
||||||
@@ -49,7 +49,8 @@ public interface Shell32X extends Shell32 {
|
|||||||
|
|
||||||
int SEE_MASK_NOCLOSEPROCESS = 0x00000040;
|
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);
|
boolean ShellExecuteEx(SHELLEXECUTEINFO lpExecInfo);
|
||||||
|
|
||||||
@@ -101,11 +102,22 @@ public interface Shell32X extends Shell32 {
|
|||||||
|
|
||||||
protected List getFieldOrder() {
|
protected List getFieldOrder() {
|
||||||
return Arrays.asList(new String[] {
|
return Arrays.asList(new String[] {
|
||||||
"cbSize", "fMask", "hwnd", "lpVerb", "lpFile", "lpParameters",
|
"cbSize",
|
||||||
"lpDirectory", "nShow", "hInstApp", "lpIDList", "lpClass",
|
"fMask",
|
||||||
"hKeyClass", "dwHotKey", "hMonitor", "hProcess",
|
"hwnd",
|
||||||
|
"lpVerb",
|
||||||
|
"lpFile",
|
||||||
|
"lpParameters",
|
||||||
|
"lpDirectory",
|
||||||
|
"nShow",
|
||||||
|
"hInstApp",
|
||||||
|
"lpIDList",
|
||||||
|
"lpClass",
|
||||||
|
"hKeyClass",
|
||||||
|
"dwHotKey",
|
||||||
|
"hMonitor",
|
||||||
|
"hProcess",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package net.i2p.router;
|
package net.i2p.router;
|
||||||
|
|
||||||
|
import static net.i2p.update.UpdateType.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
@@ -8,19 +10,15 @@ import java.util.*;
|
|||||||
import java.util.logging.FileHandler;
|
import java.util.logging.FileHandler;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import java.util.logging.SimpleFormatter;
|
import java.util.logging.SimpleFormatter;
|
||||||
|
|
||||||
import net.i2p.crypto.*;
|
|
||||||
|
|
||||||
import net.i2p.app.ClientAppManager;
|
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.Router;
|
||||||
|
import net.i2p.router.RouterLaunch;
|
||||||
|
import net.i2p.update.*;
|
||||||
import net.i2p.update.UpdateManager;
|
import net.i2p.update.UpdateManager;
|
||||||
import net.i2p.update.UpdatePostProcessor;
|
import net.i2p.update.UpdatePostProcessor;
|
||||||
import net.i2p.util.SystemVersion;
|
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
|
* Launches a router from %PROGRAMFILES%/I2P using configuration data in
|
||||||
@@ -51,11 +49,26 @@ public class WinLauncher {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
boolean privateBrowsing = false;
|
boolean privateBrowsing = false;
|
||||||
if (args != null && args.length > 0) {
|
boolean usabilityMode = false;
|
||||||
|
boolean chromiumFirst = false;
|
||||||
|
|
||||||
|
if (args != null) {
|
||||||
|
if (args.length > 0) {
|
||||||
logger.info("checking for private browsing");
|
logger.info("checking for private browsing");
|
||||||
if (args[0].equals("-private")) {
|
if (args[0].equals("-private")) {
|
||||||
privateBrowsing = true;
|
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.");
|
||||||
|
}
|
||||||
|
if (args[0].equals("-chromium")) {
|
||||||
|
chromiumFirst = true;
|
||||||
|
logger.info("Chromium will be selected before Firefox.");
|
||||||
|
}
|
||||||
|
if (args[0].equals("-usability")) {
|
||||||
|
usabilityMode = true;
|
||||||
|
logger.info(
|
||||||
|
"Usability mode is true, using alternate extensions loadout.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,7 +76,9 @@ public class WinLauncher {
|
|||||||
if (!programs.exists())
|
if (!programs.exists())
|
||||||
programs.mkdirs();
|
programs.mkdirs();
|
||||||
else if (!programs.isDirectory()) {
|
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);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,23 +86,38 @@ public class WinLauncher {
|
|||||||
if (!home.exists())
|
if (!home.exists())
|
||||||
home.mkdirs();
|
home.mkdirs();
|
||||||
else if (!home.isDirectory()) {
|
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);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i2pIsRunning()) {
|
if (i2pIsRunning()) {
|
||||||
logger.warning("I2P is already running");
|
logger.warning("I2P is already running");
|
||||||
I2PFirefox i2pFirefox = new I2PFirefox();
|
I2PBrowser i2pBrowser = new I2PBrowser();
|
||||||
System.out.println("I2PFirefox");
|
i2pBrowser.usability = usabilityMode;
|
||||||
i2pFirefox.launch(privateBrowsing);
|
i2pBrowser.chromiumFirst = chromiumFirst;
|
||||||
|
i2pBrowser.firefox = !chromiumFirst;
|
||||||
|
i2pBrowser.chromium = chromiumFirst;
|
||||||
|
System.out.println("I2PBrowser");
|
||||||
|
i2pBrowser.launch(privateBrowsing);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
||||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||||
System.setProperty("router.pid", String.valueOf(ProcessHandle.current().pid()));
|
System.setProperty("router.pid",
|
||||||
logger.info("\t" + System.getProperty("i2p.dir.base") + "\n\t" + System.getProperty("i2p.dir.config")
|
String.valueOf(ProcessHandle.current().pid()));
|
||||||
+ "\n\t" + System.getProperty("router.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());
|
// wupp.i2pRouter = new Router(System.getProperties());
|
||||||
logger.info("Router is configured");
|
logger.info("Router is configured");
|
||||||
@@ -101,7 +131,8 @@ public class WinLauncher {
|
|||||||
RouterLaunch.main(args);
|
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) {
|
public static boolean isAvailable(int portNr) {
|
||||||
boolean portFree;
|
boolean portFree;
|
||||||
try (var ignored = new ServerSocket(portNr)) {
|
try (var ignored = new ServerSocket(portNr)) {
|
||||||
@@ -122,14 +153,15 @@ public class WinLauncher {
|
|||||||
if (!isAvailable(7654)) {
|
if (!isAvailable(7654)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// check for the existence of router.ping file, if it's less then 2 minutes old,
|
// check for the existence of router.ping file, if it's less then 2 minutes
|
||||||
// exit
|
// old, exit
|
||||||
File home = selectHome();
|
File home = selectHome();
|
||||||
File ping = new File(home, "router.ping");
|
File ping = new File(home, "router.ping");
|
||||||
if (ping.exists()) {
|
if (ping.exists()) {
|
||||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
long diff = System.currentTimeMillis() - ping.lastModified();
|
||||||
if (diff < 60 * 1000) {
|
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.");
|
logger.info("If I2P is not running, wait 60 seconds and try again.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -153,7 +185,8 @@ public class WinLauncher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UpdateManager um;
|
UpdateManager um;
|
||||||
while ((um = (UpdateManager) cam.getRegisteredApp(UpdateManager.APP_NAME)) == null) {
|
while ((um = (UpdateManager)cam.getRegisteredApp(UpdateManager.APP_NAME)) ==
|
||||||
|
null) {
|
||||||
sleep(1000);
|
sleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,12 +221,14 @@ public class WinLauncher {
|
|||||||
File local = new File(appData, "Local");
|
File local = new File(appData, "Local");
|
||||||
File i2p;
|
File i2p;
|
||||||
i2p = new File(local, "I2P");
|
i2p = new File(local, "I2P");
|
||||||
logger.info("Windows jpackage wrapper started, using: " + i2p + " as base config");
|
logger.info("Windows jpackage wrapper started, using: " + i2p +
|
||||||
|
" as base config");
|
||||||
return i2p.getAbsoluteFile();
|
return i2p.getAbsoluteFile();
|
||||||
} else {
|
} else {
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
File programs = new File(jrehome.getParentFile().getParentFile(), ".i2p");
|
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 started, using: " +
|
||||||
|
programs + " as base config");
|
||||||
return programs.getAbsoluteFile();
|
return programs.getAbsoluteFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -212,12 +247,14 @@ public class WinLauncher {
|
|||||||
if (SystemVersion.isWindows()) {
|
if (SystemVersion.isWindows()) {
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
File programs = jrehome.getParentFile();
|
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();
|
return programs.getAbsoluteFile();
|
||||||
} else {
|
} else {
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
File programs = new File(jrehome.getParentFile().getParentFile(), "i2p");
|
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();
|
return programs.getAbsoluteFile();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
package net.i2p.router;
|
package net.i2p.router;
|
||||||
|
|
||||||
import net.i2p.router.*;
|
|
||||||
import net.i2p.I2PAppContext;
|
|
||||||
|
|
||||||
import java.util.function.*;
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.function.*;
|
||||||
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.router.*;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
class WinUpdateProcess implements Runnable {
|
class WinUpdateProcess implements Runnable {
|
||||||
@@ -13,7 +12,8 @@ class WinUpdateProcess implements Runnable {
|
|||||||
private final Supplier<File> fileSupplier;
|
private final Supplier<File> fileSupplier;
|
||||||
private final Log _log;
|
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.ctx = ctx;
|
||||||
this.versionSupplier = versionSupplier;
|
this.versionSupplier = versionSupplier;
|
||||||
this.fileSupplier = fileSupplier;
|
this.fileSupplier = fileSupplier;
|
||||||
@@ -22,10 +22,12 @@ class WinUpdateProcess implements Runnable {
|
|||||||
|
|
||||||
private File workDir() throws IOException {
|
private File workDir() throws IOException {
|
||||||
if (ctx != null) {
|
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.exists()) {
|
||||||
if (workDir.isFile())
|
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;
|
return workDir;
|
||||||
} else {
|
} else {
|
||||||
workDir.mkdirs();
|
workDir.mkdirs();
|
||||||
@@ -45,28 +47,34 @@ class WinUpdateProcess implements Runnable {
|
|||||||
var logFile = new File(workingDir, "log-" + version + ".txt");
|
var logFile = new File(workingDir, "log-" + version + ".txt");
|
||||||
|
|
||||||
if (logFile.canWrite()) {
|
if (logFile.canWrite()) {
|
||||||
// check if we can write to the log file. If we can, use the ProcessBuilder to
|
// check if we can write to the log file. If we can, use the
|
||||||
// run the installer.
|
// ProcessBuilder to run the installer.
|
||||||
ProcessBuilder pb = new ProcessBuilder(file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
|
ProcessBuilder pb = new ProcessBuilder(
|
||||||
|
file.getAbsolutePath(), "/S", "/D=" + workingDir.getAbsolutePath());
|
||||||
var env = pb.environment();
|
var env = pb.environment();
|
||||||
env.put("OLD_I2P_VERSION", version);
|
env.put("OLD_I2P_VERSION", version);
|
||||||
env.remove("RESTART_I2P");
|
env.remove("RESTART_I2P");
|
||||||
|
|
||||||
int exitCode = ctx.router().scheduledGracefulExitCode();
|
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");
|
env.put("RESTART_I2P", "true");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pb.directory(workingDir).redirectErrorStream(true).redirectOutput(logFile).start();
|
pb.directory(workingDir)
|
||||||
|
.redirectErrorStream(true)
|
||||||
|
.redirectOutput(logFile)
|
||||||
|
.start();
|
||||||
} catch (IOException ex) {
|
} 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 {
|
} else {
|
||||||
// If we cant write to the log file and we're on Windows, use the elevator to
|
// If we cant write to the log file and we're on Windows, use the elevator
|
||||||
// execute the installer instead of the ProcessBuilder.
|
// to execute the installer instead of the ProcessBuilder.
|
||||||
Elevator.executeAsAdministrator(file.getAbsolutePath(), " /S /D=" + workingDir.getAbsolutePath());
|
Elevator.executeAsAdministrator(file.getAbsolutePath(),
|
||||||
|
" /S /D=" + workingDir.getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,22 +1,21 @@
|
|||||||
package net.i2p.router;
|
package net.i2p.router;
|
||||||
|
|
||||||
|
import static net.i2p.update.UpdateType.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.lang.InterruptedException;
|
||||||
|
import java.lang.Process;
|
||||||
|
import java.lang.ProcessBuilder;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.*;
|
import java.util.concurrent.atomic.*;
|
||||||
|
|
||||||
import net.i2p.crypto.*;
|
|
||||||
import static net.i2p.update.UpdateType.*;
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
import net.i2p.update.UpdateType;
|
import net.i2p.crypto.*;
|
||||||
import net.i2p.update.UpdatePostProcessor;
|
import net.i2p.update.UpdatePostProcessor;
|
||||||
|
import net.i2p.update.UpdateType;
|
||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
import net.i2p.util.SystemVersion;
|
import net.i2p.util.SystemVersion;
|
||||||
|
|
||||||
import java.lang.ProcessBuilder;
|
|
||||||
import java.lang.Process;
|
|
||||||
import java.lang.InterruptedException;
|
|
||||||
|
|
||||||
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
||||||
private final Log _log;
|
private final Log _log;
|
||||||
private final RouterContext ctx;
|
private final RouterContext ctx;
|
||||||
@@ -32,20 +31,18 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
|||||||
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
|
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion() {
|
public String getVersion() { return version; }
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public File getFile() {
|
public File getFile() { return positionedFile; }
|
||||||
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 {
|
throws IOException {
|
||||||
_log.info("Got an update to post-process");
|
_log.info("Got an update to post-process");
|
||||||
if (SystemVersion.isWindows()) {
|
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);
|
_log.warn("Unsupported update type " + type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -65,7 +62,8 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
|||||||
|
|
||||||
_log.info("adding shutdown hook");
|
_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 {
|
private File workDir() throws IOException {
|
||||||
if (this.ctx != null) {
|
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.exists()) {
|
||||||
if (workDir.isFile())
|
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;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
workDir.mkdirs();
|
workDir.mkdirs();
|
||||||
@@ -97,5 +97,4 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1 +1 @@
|
|||||||
1.9.0
|
1.9.1
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ UniCode true
|
|||||||
!define COMPANYNAME "I2P"
|
!define COMPANYNAME "I2P"
|
||||||
!define DESCRIPTION "This launches Firefox with a browser profile pre-configured to use 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 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 LAUNCH_TEXT "Start I2P?"
|
||||||
!define LICENSE_TITLE "Many Licenses"
|
!define LICENSE_TITLE "Many Licenses"
|
||||||
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
||||||
@@ -14,21 +14,13 @@ UniCode true
|
|||||||
!include i2pbrowser-jpackage.nsi
|
!include i2pbrowser-jpackage.nsi
|
||||||
!include FindProcess.nsh
|
!include FindProcess.nsh
|
||||||
|
|
||||||
var FFINSTEXE
|
|
||||||
var FFNONTORINSTEXE
|
|
||||||
var I2PINSTEXE
|
var I2PINSTEXE
|
||||||
Var PARENTOPTIONS
|
|
||||||
|
|
||||||
SetOverwrite on
|
SetOverwrite on
|
||||||
!define FFINSTEXE
|
|
||||||
!define FFNONTORINSTEXE
|
|
||||||
!define FFINSTEXE32 "$PROGRAMFILES32\Mozilla Firefox\"
|
|
||||||
!define FFINSTEXE64 "$PROGRAMFILES64\Mozilla Firefox\"
|
|
||||||
|
|
||||||
!define I2PINSTEXE
|
!define I2PINSTEXE
|
||||||
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
||||||
|
|
||||||
|
|
||||||
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
||||||
|
|
||||||
InstallDir "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
|
InstallDir "$PROGRAMFILES64\${COMPANYNAME}\${APPNAME}"
|
||||||
@@ -109,15 +101,15 @@ RequestExecutionLevel user
|
|||||||
!insertmacro MUI_LANGUAGE "Basque"
|
!insertmacro MUI_LANGUAGE "Basque"
|
||||||
!insertmacro MUI_LANGUAGE "Welsh"
|
!insertmacro MUI_LANGUAGE "Welsh"
|
||||||
# Commented out languages below do not compile on NSIS v2
|
# Commented out languages below do not compile on NSIS v2
|
||||||
# !insertmacro MUI_LANGUAGE "Asturian"
|
!insertmacro MUI_LANGUAGE "Asturian"
|
||||||
# !insertmacro MUI_LANGUAGE "Pashto"
|
!insertmacro MUI_LANGUAGE "Pashto"
|
||||||
# !insertmacro MUI_LANGUAGE "ScotsGaelic"
|
!insertmacro MUI_LANGUAGE "ScotsGaelic"
|
||||||
# !insertmacro MUI_LANGUAGE "Georgian"
|
!insertmacro MUI_LANGUAGE "Georgian"
|
||||||
# !insertmacro MUI_LANGUAGE "Vietnamese"
|
!insertmacro MUI_LANGUAGE "Vietnamese"
|
||||||
# !insertmacro MUI_LANGUAGE "Armenian"
|
!insertmacro MUI_LANGUAGE "Armenian"
|
||||||
# !insertmacro MUI_LANGUAGE "Corsican"
|
!insertmacro MUI_LANGUAGE "Corsican"
|
||||||
# !insertmacro MUI_LANGUAGE "Tatar"
|
!insertmacro MUI_LANGUAGE "Tatar"
|
||||||
# !insertmacro MUI_LANGUAGE "Hindi"
|
!insertmacro MUI_LANGUAGE "Hindi"
|
||||||
### END LANGUAGES
|
### END LANGUAGES
|
||||||
|
|
||||||
# small speed optimization
|
# small speed optimization
|
||||||
@@ -129,12 +121,6 @@ PageEx license
|
|||||||
licensetext "${LICENSE_TITLE}"
|
licensetext "${LICENSE_TITLE}"
|
||||||
licensedata "licenses\LICENSE.txt"
|
licensedata "licenses\LICENSE.txt"
|
||||||
PageExEnd
|
PageExEnd
|
||||||
PageEx directory
|
|
||||||
dirtext "${FIREFOX_MESSAGE}"
|
|
||||||
dirvar $FFINSTEXE
|
|
||||||
dirvar $FFNONTORINSTEXE
|
|
||||||
PageCallbacks firefoxDetect
|
|
||||||
PageExEnd
|
|
||||||
PageEx directory
|
PageEx directory
|
||||||
dirtext "${I2P_MESSAGE}"
|
dirtext "${I2P_MESSAGE}"
|
||||||
dirvar $I2PINSTEXE
|
dirvar $I2PINSTEXE
|
||||||
@@ -142,7 +128,7 @@ PageEx directory
|
|||||||
PageExEnd
|
PageExEnd
|
||||||
Page instfiles
|
Page instfiles
|
||||||
|
|
||||||
!include i2pbrowser-mozcompat.nsi
|
#!include i2pbrowser-mozcompat.nsi
|
||||||
|
|
||||||
Function .onInit
|
Function .onInit
|
||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||||
@@ -153,69 +139,38 @@ Function .onInit
|
|||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
||||||
${EndIf}
|
${EndIf}
|
||||||
!insertmacro MUI_LANGDLL_DISPLAY
|
!insertmacro MUI_LANGDLL_DISPLAY
|
||||||
Call ShouldInstall64Bit
|
#Call ShouldInstall64Bit
|
||||||
${If} $0 == 1
|
|
||||||
${If} ${FileExists} "${FFINSTEXE64}\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "${FFINSTEXE64}"
|
|
||||||
StrCpy $FFNONTORINSTEXE "${FFINSTEXE64}"
|
|
||||||
${ElseIf} ${FileExists} "${FFINSTEXE32}\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "${FFINSTEXE32}"
|
|
||||||
StrCpy $FFNONTORINSTEXE "${FFINSTEXE32}"
|
|
||||||
${EndIf}
|
|
||||||
${If} ${FileExists} "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\"
|
|
||||||
${EndIf}
|
|
||||||
${If} ${FileExists} "$PROFILE\Desktop\Tor Browser\Browser\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
|
||||||
${EndIf}
|
|
||||||
${Else}
|
|
||||||
${If} ${FileExists} "${FFINSTEXE32}\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "${FFINSTEXE32}"
|
|
||||||
StrCpy $FFNONTORINSTEXE "${FFINSTEXE32}"
|
|
||||||
${EndIf}
|
|
||||||
${If} ${FileExists} "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "$PROFILE\OneDrive\Desktop\Tor Browser\Browser\"
|
|
||||||
${EndIf}
|
|
||||||
${If} ${FileExists} "$PROFILE\Desktop\Tor Browser\Browser\firefox.exe"
|
|
||||||
StrCpy $FFINSTEXE "$PROFILE\Desktop\Tor Browser\Browser\"
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
# look for user installs
|
# look for user installs
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function firefoxDetect
|
|
||||||
${If} ${FileExists} "$FFINSTEXE\firefox.exe"
|
|
||||||
Abort directory
|
|
||||||
${EndIf}
|
|
||||||
FunctionEnd
|
|
||||||
|
|
||||||
Function routerDetect
|
Function routerDetect
|
||||||
createDirectory $I2PINSTEXE
|
createDirectory $I2PINSTEXE
|
||||||
SetOutPath $I2PINSTEXE/app
|
SetOutPath $I2PINSTEXE\app
|
||||||
File /nonfatal /a /r "I2P\app\"
|
File /nonfatal /a /r "I2P\app\"
|
||||||
SetOutPath $I2PINSTEXE/runtime
|
SetOutPath $I2PINSTEXE\runtime
|
||||||
File /nonfatal /a /r "I2P\runtime\"
|
File /nonfatal /a /r "I2P\runtime\"
|
||||||
SetOutPath $I2PINSTEXE
|
SetOutPath $I2PINSTEXE
|
||||||
File /nonfatal /a /r "I2P\I2P.exe"
|
File /nonfatal /a /r "I2P\I2P.exe"
|
||||||
|
File /nonfatal /a /r "I2P\I2P.ico"
|
||||||
File /nonfatal "I2P\config\jpackaged"
|
File /nonfatal "I2P\config\jpackaged"
|
||||||
|
|
||||||
createDirectory "$I2PINSTEXE\"
|
createDirectory "$I2PINSTEXE\"
|
||||||
SetOutPath "$I2PINSTEXE\"
|
SetOutPath "$I2PINSTEXE\"
|
||||||
IfFileExists $I2PINSTEXE\router.config +2 0
|
IfFileExists $I2PINSTEXE\router.config +2 0
|
||||||
File /nonfatal /a /r "I2P/config/router.config"
|
File /a /r "I2P/config/router.config"
|
||||||
IfFileExists $I2PINSTEXE\clients.config +2 0
|
IfFileExists $I2PINSTEXE\clients.config +2 0
|
||||||
File /nonfatal /a /r "I2P/config/clients.config"
|
File /a /r "I2P/config/clients.config"
|
||||||
IfFileExists $I2PINSTEXE\wrapper.config +2 0
|
IfFileExists $I2PINSTEXE\wrapper.config +2 0
|
||||||
File /nonfatal /a /r "I2P/config/wrapper.config"
|
File /a /r "I2P/config/wrapper.config"
|
||||||
|
IfFileExists $I2PINSTEXE\hosts.txt +2 0
|
||||||
|
File /a /r "I2P/config/hosts.txt"
|
||||||
IfFileExists $I2PINSTEXE\eepsite +2 0
|
IfFileExists $I2PINSTEXE\eepsite +2 0
|
||||||
File /nonfatal /a /r "I2P/config/eepsite"
|
File /a /r "I2P/config/eepsite"
|
||||||
IfFileExists $I2PINSTEXE\webapps +2 0
|
IfFileExists $I2PINSTEXE\webapps +2 0
|
||||||
File /nonfatal /a /r "I2P/config/webapps"
|
File /a /r "I2P/config/webapps"
|
||||||
File /nonfatal /a /r "I2P/config/certificates"
|
File /a /r "I2P/config/certificates"
|
||||||
File /nonfatal /a /r "I2P/config/geoip"
|
File /a /r "I2P/config/geoip"
|
||||||
File /nonfatal /a /r "I2P/config/i2ptunnel.config"
|
File /a /r "I2P/config/i2ptunnel.config"
|
||||||
|
|
||||||
Abort directory
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function installerFunction
|
Function installerFunction
|
||||||
@@ -239,27 +194,11 @@ ${If} ${Silent}
|
|||||||
${If} ${Silent}
|
${If} ${Silent}
|
||||||
ReadEnvStr $0 OLD_I2P_VERSION
|
ReadEnvStr $0 OLD_I2P_VERSION
|
||||||
${If} $0 < ${I2P_VERSION}
|
${If} $0 < ${I2P_VERSION}
|
||||||
rmDir /r $I2PINSTEXE/app
|
call routerDetect
|
||||||
rmDir /r $I2PINSTEXE/runtime
|
|
||||||
File /nonfatal /a /r "I2P\"
|
|
||||||
File /nonfatal "I2P\config\jpackaged"
|
|
||||||
|
|
||||||
createDirectory "$I2PINSTEXE\"
|
|
||||||
SetOutPath "$I2PINSTEXE\"
|
|
||||||
File /nonfatal /a /r "I2P/config/certificates"
|
|
||||||
File /nonfatal /a /r "I2P/config/geoip"
|
|
||||||
|
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${Else}
|
${Else}
|
||||||
rmDir /r $I2PINSTEXE/app
|
call routerDetect
|
||||||
rmDir /r $I2PINSTEXE/runtime
|
|
||||||
File /nonfatal /a /r "I2P\"
|
|
||||||
File /nonfatal "I2P\config\jpackaged"
|
|
||||||
|
|
||||||
createDirectory "$I2PINSTEXE\"
|
|
||||||
SetOutPath "$I2PINSTEXE\"
|
|
||||||
File /nonfatal /a /r "I2P/config/certificates"
|
|
||||||
File /nonfatal /a /r "I2P/config/geoip"
|
|
||||||
|
|
||||||
${EndIf}
|
${EndIf}
|
||||||
${EndIf}
|
${EndIf}
|
||||||
@@ -287,12 +226,10 @@ ${If} ${Silent}
|
|||||||
SetOutPath "$I2PINSTEXE"
|
SetOutPath "$I2PINSTEXE"
|
||||||
createDirectory "$SMPROGRAMS\${APPNAME}"
|
createDirectory "$SMPROGRAMS\${APPNAME}"
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.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.lnk" "$I2PINSTEXE\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.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"
|
SetOutPath "$INSTDIR"
|
||||||
|
|
||||||
SetShellVarContext current
|
SetShellVarContext current
|
||||||
@@ -311,7 +248,7 @@ ${If} ${Silent}
|
|||||||
SetOutPath "$I2PAPPDATA"
|
SetOutPath "$I2PAPPDATA"
|
||||||
|
|
||||||
IfFileExists "$LOCALAPPDATA\I2P\eepsite\docroot" +2 0
|
IfFileExists "$LOCALAPPDATA\I2P\eepsite\docroot" +2 0
|
||||||
File /nonfatal /a /r "I2P\eepsite"
|
File /a /r "I2P\eepsite"
|
||||||
|
|
||||||
createDirectory "$I2PINSTEXE"
|
createDirectory "$I2PINSTEXE"
|
||||||
SetOutPath "$I2PINSTEXE"
|
SetOutPath "$I2PINSTEXE"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
!define I2P_VERSION 1.9.0
|
!define I2P_VERSION 1.9.1
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
!define VERSIONMAJOR 1
|
!define VERSIONMAJOR 1
|
||||||
!define VERSIONMINOR 9
|
!define VERSIONMINOR 9
|
||||||
!define VERSIONBUILD 0
|
!define VERSIONBUILD 1
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1.9.0
|
1.9.1
|
||||||
|
|||||||
Reference in New Issue
Block a user