From 3474b827b06b3a285d04aba64873243d87d4823a Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 19 Mar 2016 15:16:38 +0000 Subject: [PATCH 01/12] add raw signing test --- core/java/src/net/i2p/crypto/KeyGenerator.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/core/java/src/net/i2p/crypto/KeyGenerator.java b/core/java/src/net/i2p/crypto/KeyGenerator.java index 4297fcae20..6a087c50a9 100644 --- a/core/java/src/net/i2p/crypto/KeyGenerator.java +++ b/core/java/src/net/i2p/crypto/KeyGenerator.java @@ -15,6 +15,7 @@ import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; +import java.security.MessageDigest; import java.security.ProviderException; import java.security.interfaces.ECPrivateKey; import java.security.interfaces.ECPublicKey; @@ -416,19 +417,30 @@ public final class KeyGenerator { else System.out.println(type + " private-to-public test FAILED"); //System.out.println("privkey " + keys[1]); + MessageDigest md = type.getDigestInstance(); for (int i = 0; i < runs; i++) { RandomSource.getInstance().nextBytes(src); + md.update(src); + byte[] sha = md.digest(); + SimpleDataStructure hash = type.getHashInstance(); + hash.setData(sha); long start = System.nanoTime(); Signature sig = DSAEngine.getInstance().sign(src, privkey); + Signature sig2 = DSAEngine.getInstance().sign(hash, privkey); if (sig == null) throw new GeneralSecurityException("signature generation failed"); + if (sig2 == null) + throw new GeneralSecurityException("signature generation (H) failed"); long mid = System.nanoTime(); boolean ok = DSAEngine.getInstance().verifySignature(sig, src, pubkey); + boolean ok2 = DSAEngine.getInstance().verifySignature(sig2, hash, pubkey); long end = System.nanoTime(); stime += mid - start; vtime += end - mid; if (!ok) throw new GeneralSecurityException(type + " V(S(data)) fail"); + if (!ok2) + throw new GeneralSecurityException(type + " V(S(H(data))) fail"); } stime /= 1000*1000; vtime /= 1000*1000; From 2e7a7f26f88b99f7dcf96196c524c5164883a55b Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 19 Mar 2016 15:18:07 +0000 Subject: [PATCH 02/12] take out code for stats removed in .24 --- router/java/src/net/i2p/router/StatisticsManager.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/router/java/src/net/i2p/router/StatisticsManager.java b/router/java/src/net/i2p/router/StatisticsManager.java index 9379df3504..eeda3709c8 100644 --- a/router/java/src/net/i2p/router/StatisticsManager.java +++ b/router/java/src/net/i2p/router/StatisticsManager.java @@ -71,9 +71,8 @@ public class StatisticsManager { public Properties publishStatistics(Hash h) { Properties stats = new Properties(); stats.setProperty("router.version", RouterVersion.VERSION); - // scheduled for removal, never used - if (CoreVersion.VERSION.equals("0.9.23")) - stats.setProperty("coreVersion", CoreVersion.VERSION); + // never used + //stats.setProperty("coreVersion", CoreVersion.VERSION); stats.setProperty(RouterInfo.PROP_NETWORK_ID, _networkID); stats.setProperty(RouterInfo.PROP_CAPABILITIES, _context.router().getCapabilities()); @@ -168,9 +167,7 @@ public class StatisticsManager { } // So that we will still get build requests - not required since 0.7.9 2010-01-12 - // scheduled for removal - if (CoreVersion.VERSION.equals("0.9.23")) - stats.setProperty("stat_uptime", "90m"); + //stats.setProperty("stat_uptime", "90m"); if (FloodfillNetworkDatabaseFacade.isFloodfill(_context.router().getRouterInfo())) { int ri = _context.router().getUptime() > 30*60*1000 ? _context.netDb().getKnownRouters() : From ed72847374f1d0081e46b9e9159519b8ab3fcea3 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 20 Mar 2016 13:21:40 +0000 Subject: [PATCH 03/12] Add SystemVersion.isOpenJDK() Add warning for OpenJDK + ARM --- .../src/net/i2p/router/web/RouterConsoleRunner.java | 10 ++++++++-- core/java/src/net/i2p/util/CommandLine.java | 2 +- core/java/src/net/i2p/util/SystemVersion.java | 13 +++++++++++-- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java index 8315cdd6b7..d6c0be0a73 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java @@ -293,6 +293,7 @@ public class RouterConsoleRunner implements RouterApp { private void checkJavaVersion() { boolean noJava7 = !SystemVersion.isJava7(); boolean noPack200 = !FileUtil.isPack200Supported(); + boolean openARM = SystemVersion.isARM() && SystemVersion.isOpenJDK(); if (noJava7 || noPack200) { String s = "Java version: " + System.getProperty("java.version") + " OS: " + System.getProperty("os.name") + ' ' + @@ -302,12 +303,17 @@ public class RouterConsoleRunner implements RouterApp { log.logAlways(net.i2p.util.Log.WARN, s); System.out.println("Warning: " + s); if (noJava7) { - s = "Java 7 will be required by late 2015, please upgrade soon"; + s = "Java 7 is now required, please upgrade"; log.logAlways(net.i2p.util.Log.WARN, s); System.out.println("Warning: " + s); } if (noPack200) { - s = "Pack200 will be required by late 2015, please upgrade Java soon"; + s = "Pack200 is required for automatic updates, please upgrade Java"; + log.logAlways(net.i2p.util.Log.WARN, s); + System.out.println("Warning: " + s); + } + if (openARM) { + s = "OpenJDK is not recommended for ARM. Use Oracle Java 8"; log.logAlways(net.i2p.util.Log.WARN, s); System.out.println("Warning: " + s); } diff --git a/core/java/src/net/i2p/util/CommandLine.java b/core/java/src/net/i2p/util/CommandLine.java index 737187488d..f2d57f5346 100644 --- a/core/java/src/net/i2p/util/CommandLine.java +++ b/core/java/src/net/i2p/util/CommandLine.java @@ -37,7 +37,7 @@ public class CommandLine { "net.i2p.util.PartialEepGet", "net.i2p.util.ShellCommand", "net.i2p.util.SSLEepGet", - //"net.i2p.util.SystemVersion", + "net.i2p.util.SystemVersion", "net.i2p.util.TranslateReader", "net.i2p.util.ZipFileComment" }); diff --git a/core/java/src/net/i2p/util/SystemVersion.java b/core/java/src/net/i2p/util/SystemVersion.java index 47644f4278..a8d83755be 100644 --- a/core/java/src/net/i2p/util/SystemVersion.java +++ b/core/java/src/net/i2p/util/SystemVersion.java @@ -26,6 +26,7 @@ public abstract class SystemVersion { private static final boolean _isAndroid; private static final boolean _isApache; private static final boolean _isGNU; + private static final boolean _isOpenJDK; private static final boolean _is64; private static final boolean _hasWrapper = System.getProperty("wrapper.version") != null; @@ -53,6 +54,8 @@ public abstract class SystemVersion { _isApache = vendor.startsWith("Apache"); _isGNU = vendor.startsWith("GNU Classpath") || // JamVM vendor.startsWith("Free Software Foundation"); // gij + String runtime = System.getProperty("java.runtime.name"); + _isOpenJDK = runtime != null && runtime.contains("OpenJDK"); int sdk = 0; if (_isAndroid) { @@ -110,6 +113,13 @@ public abstract class SystemVersion { return _isGentoo; } + /** + * @since 0.9.26 + */ + public static boolean isOpenJDK() { + return _isOpenJDK; + } + /** * @since 0.9.8 */ @@ -238,7 +248,6 @@ public abstract class SystemVersion { /** * @since 0.9.24 */ -/**** public static void main(String[] args) { System.out.println("64 bit : " + is64Bit()); System.out.println("Java 6 : " + isJava6()); @@ -253,11 +262,11 @@ public abstract class SystemVersion { System.out.println("Mac : " + isMac()); System.out.println("Gentoo : " + isGentoo()); System.out.println("GNU : " + isGNU()); + System.out.println("OpenJDK : " + isOpenJDK()); System.out.println("Windows : " + isWindows()); System.out.println("Wrapper : " + hasWrapper()); System.out.println("x86 : " + isX86()); System.out.println("Max mem : " + getMaxMemory()); } -****/ } From 557f16b8d5e5932fc5e6510c35d6c385008cfd40 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 20 Mar 2016 13:41:26 +0000 Subject: [PATCH 04/12] NetDB: Improve handling of deferred search result jobs --- .../networkdb/kademlia/FloodOnlySearchJob.java | 1 + .../router/networkdb/kademlia/FloodSearchJob.java | 13 +++++++++++-- .../networkdb/kademlia/IterativeSearchJob.java | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java index 39e4101854..6a8e6da178 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java @@ -232,6 +232,7 @@ class FloodOnlySearchJob extends FloodSearchJob { synchronized (this) { if (_dead) return; _dead = true; + super.success(); } if (_log.shouldLog(Log.INFO)) _log.info(getJobId() + ": Floodfill search for " + _key + " successful"); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodSearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodSearchJob.java index 316cf3ff6b..99e212e977 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodSearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodSearchJob.java @@ -33,6 +33,7 @@ public class FloodSearchJob extends JobImpl { protected final AtomicInteger _lookupsRemaining = new AtomicInteger(); protected volatile boolean _dead; protected final long _created; + protected boolean _success; /** * @param onFind may be null @@ -69,6 +70,7 @@ public class FloodSearchJob extends JobImpl { * @param isLease ignored */ void addDeferred(Job onFind, Job onFailed, long timeoutMs, boolean isLease) { + boolean success; synchronized (this) { if (!_dead) { if (onFind != null) @@ -77,9 +79,13 @@ public class FloodSearchJob extends JobImpl { _onFailed.add(onFailed); return; } + success = _success; } // outside synch to avoid deadlock with job queue - getContext().jobQueue().addJob(onFailed); + if (success && onFind != null) + getContext().jobQueue().addJob(onFind); + else if (!success && onFailed != null) + getContext().jobQueue().addJob(onFailed); } /** using context clock */ @@ -193,8 +199,11 @@ public class FloodSearchJob extends JobImpl { * Deprecated, unused, see FOSJ override */ void success() { - throw new UnsupportedOperationException("use override"); + synchronized(this) { + _success = true; + } /**** + throw new UnsupportedOperationException("use override"); if (_dead) return; if (_log.shouldLog(Log.INFO)) _log.info(getJobId() + ": Floodfill search for " + _key.toBase64() + " successful"); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java index 58f045c284..014924bab3 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java @@ -587,6 +587,7 @@ class IterativeSearchJob extends FloodSearchJob { synchronized(this) { if (_dead) return; _dead = true; + _success = true; tries = _unheardFrom.size() + _failedPeers.size(); if (_unheardFrom.size() == 1) { peer = _unheardFrom.iterator().next(); From 7eed4fa97b34a3d989a20933709c9ce84bced220 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 23 Mar 2016 13:46:33 +0000 Subject: [PATCH 05/12] build dependency tweak --- build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.xml b/build.xml index 4d8e1bd3f0..3120ae5555 100644 --- a/build.xml +++ b/build.xml @@ -318,7 +318,7 @@ - + From 1da9c21f13a002d84167c9aaa03373fffbcc020c Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 23 Mar 2016 13:53:26 +0000 Subject: [PATCH 06/12] drop kytv certs --- .../news/killyourtv_at_mail.i2p.crt | 32 ------------------- .../router/killyourtv_at_mail.i2p.crt | 32 ------------------- installer/resources/deletelist.txt | 2 ++ 3 files changed, 2 insertions(+), 64 deletions(-) delete mode 100644 installer/resources/certificates/news/killyourtv_at_mail.i2p.crt delete mode 100644 installer/resources/certificates/router/killyourtv_at_mail.i2p.crt diff --git a/installer/resources/certificates/news/killyourtv_at_mail.i2p.crt b/installer/resources/certificates/news/killyourtv_at_mail.i2p.crt deleted file mode 100644 index 597f455f32..0000000000 --- a/installer/resources/certificates/news/killyourtv_at_mail.i2p.crt +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFhTCCA22gAwIBAgIELuRWgDANBgkqhkiG9w0BAQ0FADBzMQswCQYDVQQGEwJY -WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt -b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEcMBoGA1UEAwwTa2lsbHlvdXJ0dkBt -YWlsLmkycDAeFw0xMzEwMDYyMTM5MzFaFw0yMzEwMDYyMTM5MzFaMHMxCzAJBgNV -BAYTAlhYMQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBB -bm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRwwGgYDVQQDDBNraWxseW91 -cnR2QG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAig3u -niLWm0y/TFJtciHgmWUt20FOdQrxkiSZ87G8xjuGfq7TbGIiVDn7pQZcHidpq+Dk -47sm+Swqhb4psSijj0AXUEVKlV39jF5IZE+VUgmEtMqQbnBkWudaTJPWcEe9T/Kd -8Oz2jgsnrD/EGVTMKBBjt/gk8VqTWvpCdCF1GhqcCeUTFHzjhN9jtoRCaJ2DClpO -Px+86+d3s9PqUFo8gcD/dbbyJCMqUCMBLtIy/Ooouxb9cfWtXfyOlphU+enmdvuA -0BDewb9pOJg2/kVd9/9moDWcBGChLOlfSlxpDwyUtcclcpvwnG7c6o4or6gqLeOf -AbCpse623utV7fWlFWG7M4AQ/2emhhe4YoMJQnflydzV8bPRJxRTeW1j/9UfpvLT -nO5LHp0oBXE0GqAPjxuAr+r5IDXFbkKYNjK5oWQB/Ul3LkexulYdCzHWbGd1Ja5b -sbiOy6t/hH6G8DD75HYb+PQZaNZWBv90EyOq1JDSUPw6nxVbhiBldi3ipc8/1X51 -FbzBqJ+QO1XKrKqxWxBKoTekuy38KRzsmkSCpY+WJ9f0gLOKtxzVO2HNNqqVFGQf -RGIbrNA0JSRQ1fgelccfrcRIXIZ3B8Tk/wxCIzCY6Yvg2jezz2xJkVdqOUsznS2v -+xJe67PYIAeMVtcfO4kmuCvyIYhsUEpob2n/5lkCAwEAAaMhMB8wHQYDVR0OBBYE -FCLneov6QMtvra5FSoSLhdymi++rMA0GCSqGSIb3DQEBDQUAA4ICAQAIcqbiwjdQ -M9VlGBiHe5eVsL6OM9zfRqR1wnRg4Q6ce65XDfEOYleBWaaNJA4BdykcA4fkUN1h -M2D9FDQScsyPTOuzJ6o75TYh0JOtF51yCi9iuemcosxAwsm90ZXGuMDfDYeyND5c -PAkWfyCP+jwLYbNo/hkNqyv+XWHXPQmT2adRnPXINVUQuBxVPC//C9wv2uDYWhgS -f8M425VPp4/R/uks9mlzTx08DwacvouD0YOC+HZE4sWq+2smgeBInMiyr/THYzl+ -baMtYgVs8IKUD2gtjfXZoaQNg3eq5SedSf/5F0S/LCdu9/ccQ8CzSEoVTiQFtO78 -SaU37xai8+QTSVpPuINigxCoXmkubBd+voEmWRcBd/XB5L+u+MFU/jXyyBj2BXVj -6agqVzY53KVYt23/63QliAUWyxT+ns9gRxVN1jrMhHdiDwsdT4NbzHxg1Su4eiHv -C/wjD3Dga0BRTEGylpHZGzb1U1rZRHM3ho3f1QkmRPPLcBUMTyUTxJm+GEeuhPvp -+TBf3Kg/YkdpnEMlagqcyHuIrf3m8Z/pTmpOIbekJWbbA7tluvWbMWw2ARB7dUOE -fHYVISh0DTw2oVXxM82/q8XXHnhEXv2nW3K40x1VabxUN+sF4M/7YA8nJqwsPJei -749STYJRfZXdIe69M9zpM5unxENAsiPJgQ== ------END CERTIFICATE----- diff --git a/installer/resources/certificates/router/killyourtv_at_mail.i2p.crt b/installer/resources/certificates/router/killyourtv_at_mail.i2p.crt deleted file mode 100644 index 597f455f32..0000000000 --- a/installer/resources/certificates/router/killyourtv_at_mail.i2p.crt +++ /dev/null @@ -1,32 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIFhTCCA22gAwIBAgIELuRWgDANBgkqhkiG9w0BAQ0FADBzMQswCQYDVQQGEwJY -WDELMAkGA1UECBMCWFgxCzAJBgNVBAcTAlhYMR4wHAYDVQQKExVJMlAgQW5vbnlt -b3VzIE5ldHdvcmsxDDAKBgNVBAsTA0kyUDEcMBoGA1UEAwwTa2lsbHlvdXJ0dkBt -YWlsLmkycDAeFw0xMzEwMDYyMTM5MzFaFw0yMzEwMDYyMTM5MzFaMHMxCzAJBgNV -BAYTAlhYMQswCQYDVQQIEwJYWDELMAkGA1UEBxMCWFgxHjAcBgNVBAoTFUkyUCBB -bm9ueW1vdXMgTmV0d29yazEMMAoGA1UECxMDSTJQMRwwGgYDVQQDDBNraWxseW91 -cnR2QG1haWwuaTJwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAig3u -niLWm0y/TFJtciHgmWUt20FOdQrxkiSZ87G8xjuGfq7TbGIiVDn7pQZcHidpq+Dk -47sm+Swqhb4psSijj0AXUEVKlV39jF5IZE+VUgmEtMqQbnBkWudaTJPWcEe9T/Kd -8Oz2jgsnrD/EGVTMKBBjt/gk8VqTWvpCdCF1GhqcCeUTFHzjhN9jtoRCaJ2DClpO -Px+86+d3s9PqUFo8gcD/dbbyJCMqUCMBLtIy/Ooouxb9cfWtXfyOlphU+enmdvuA -0BDewb9pOJg2/kVd9/9moDWcBGChLOlfSlxpDwyUtcclcpvwnG7c6o4or6gqLeOf -AbCpse623utV7fWlFWG7M4AQ/2emhhe4YoMJQnflydzV8bPRJxRTeW1j/9UfpvLT -nO5LHp0oBXE0GqAPjxuAr+r5IDXFbkKYNjK5oWQB/Ul3LkexulYdCzHWbGd1Ja5b -sbiOy6t/hH6G8DD75HYb+PQZaNZWBv90EyOq1JDSUPw6nxVbhiBldi3ipc8/1X51 -FbzBqJ+QO1XKrKqxWxBKoTekuy38KRzsmkSCpY+WJ9f0gLOKtxzVO2HNNqqVFGQf -RGIbrNA0JSRQ1fgelccfrcRIXIZ3B8Tk/wxCIzCY6Yvg2jezz2xJkVdqOUsznS2v -+xJe67PYIAeMVtcfO4kmuCvyIYhsUEpob2n/5lkCAwEAAaMhMB8wHQYDVR0OBBYE -FCLneov6QMtvra5FSoSLhdymi++rMA0GCSqGSIb3DQEBDQUAA4ICAQAIcqbiwjdQ -M9VlGBiHe5eVsL6OM9zfRqR1wnRg4Q6ce65XDfEOYleBWaaNJA4BdykcA4fkUN1h -M2D9FDQScsyPTOuzJ6o75TYh0JOtF51yCi9iuemcosxAwsm90ZXGuMDfDYeyND5c -PAkWfyCP+jwLYbNo/hkNqyv+XWHXPQmT2adRnPXINVUQuBxVPC//C9wv2uDYWhgS -f8M425VPp4/R/uks9mlzTx08DwacvouD0YOC+HZE4sWq+2smgeBInMiyr/THYzl+ -baMtYgVs8IKUD2gtjfXZoaQNg3eq5SedSf/5F0S/LCdu9/ccQ8CzSEoVTiQFtO78 -SaU37xai8+QTSVpPuINigxCoXmkubBd+voEmWRcBd/XB5L+u+MFU/jXyyBj2BXVj -6agqVzY53KVYt23/63QliAUWyxT+ns9gRxVN1jrMhHdiDwsdT4NbzHxg1Su4eiHv -C/wjD3Dga0BRTEGylpHZGzb1U1rZRHM3ho3f1QkmRPPLcBUMTyUTxJm+GEeuhPvp -+TBf3Kg/YkdpnEMlagqcyHuIrf3m8Z/pTmpOIbekJWbbA7tluvWbMWw2ARB7dUOE -fHYVISh0DTw2oVXxM82/q8XXHnhEXv2nW3K40x1VabxUN+sF4M/7YA8nJqwsPJei -749STYJRfZXdIe69M9zpM5unxENAsiPJgQ== ------END CERTIFICATE----- diff --git a/installer/resources/deletelist.txt b/installer/resources/deletelist.txt index ef420c3764..e68113e607 100644 --- a/installer/resources/deletelist.txt +++ b/installer/resources/deletelist.txt @@ -97,3 +97,5 @@ certificates/ssl/ieb9oopo.mooo.com2.crt certificates/ssl/netdb.i2p2.no2.crt certificates/ssl/i2p.mooo.com2.crt certificates/ssl/ieb9oopo.mooo.com.crt +certificates/news/killyourtv_at_mail.i2p.crt +certificates/router/killyourtv_at_mail.i2p.crt From 2eb89e938a806fc5f2e2c9d2c5935dd7dd828ba9 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 4 Jun 2016 12:50:24 +0000 Subject: [PATCH 07/12] i2ptunnel CLI: Don't set the listen host to the I2CP host --- apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java index 99d225a348..fc9ecebfd7 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnel.java @@ -1338,7 +1338,6 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging { } if (i < args.length) { host = args[i++]; - listenHost = host; } if (i < args.length) port = args[i]; From 126a4d8443b94e447bfd016b7175d43769bf62b4 Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 4 Jun 2016 13:23:05 +0000 Subject: [PATCH 08/12] jbigi: Fix GMP version reporting for shared library (ticket #1800) --- core/c/jbigi/jbigi/src/jbigi.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/core/c/jbigi/jbigi/src/jbigi.c b/core/c/jbigi/jbigi/src/jbigi.c index a9c5db5447..dda0a5f6ab 100644 --- a/core/c/jbigi/jbigi/src/jbigi.c +++ b/core/c/jbigi/jbigi/src/jbigi.c @@ -1,4 +1,5 @@ #include +#include #include #include "jbigi.h" @@ -15,7 +16,7 @@ void convert_mp2j(JNIEnv* env, mpz_t mvalue, jbyteArray* jvalue); * 2: (I2P 0.8.7) * Removed nativeDoubleValue() * - * 3: (I2P 0.9.18) + * 3: (I2P 0.9.26) * Added: * nativeJbigiVersion() * nativeGMPMajorVersion() @@ -26,8 +27,12 @@ void convert_mp2j(JNIEnv* env, mpz_t mvalue, jbyteArray* jvalue); * Support negative base value in modPow() * Throw ArithmeticException for bad arguments in modPow() * + * 4: (I2P 0.9.27) + * Fix nativeGMPMajorVersion(), nativeGMPMinorVersion(), and nativeGMPPatchVersion() + * when built as a shared library + * */ -#define JBIGI_VERSION 3 +#define JBIGI_VERSION 4 /***************************************** *****Native method implementations******* @@ -39,22 +44,31 @@ JNIEXPORT jint JNICALL Java_net_i2p_util_NativeBigInteger_nativeJbigiVersion return (jint) JBIGI_VERSION; } -/* since version 3 */ +/* since version 3, fixed for dynamic builds in version 4 */ JNIEXPORT jint JNICALL Java_net_i2p_util_NativeBigInteger_nativeGMPMajorVersion (JNIEnv* env, jclass cls) { - return (jint) __GNU_MP_VERSION; + int v = gmp_version[0] - '0'; + return (jint) v; } -/* since version 3 */ +/* since version 3, fixed for dynamic builds in version 4 */ JNIEXPORT jint JNICALL Java_net_i2p_util_NativeBigInteger_nativeGMPMinorVersion (JNIEnv* env, jclass cls) { - return (jint) __GNU_MP_VERSION_MINOR; + int v = 0; + if (strlen(gmp_version) > 2) { + v = gmp_version[2] - '0'; + } + return (jint) v; } -/* since version 3 */ +/* since version 3, fixed for dynamic builds in version 4 */ JNIEXPORT jint JNICALL Java_net_i2p_util_NativeBigInteger_nativeGMPPatchVersion (JNIEnv* env, jclass cls) { - return (jint) __GNU_MP_VERSION_PATCHLEVEL; + int v = 0; + if (strlen(gmp_version) > 4) { + v = gmp_version[4] - '0'; + } + return (jint) v; } /******** nativeModPow() */ From 280ca2cf2fd5abbe0f5a78ed535775f6bc7abef9 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 6 Jun 2016 12:12:16 +0000 Subject: [PATCH 09/12] CPUID: Add CLI output for new AMD tests Add @since for new AMD methods --- .../support/CPUInformation/AMDCPUInfo.java | 5 +++ .../freenet/support/CPUInformation/CPUID.java | 38 +++++++++++-------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/core/java/src/freenet/support/CPUInformation/AMDCPUInfo.java b/core/java/src/freenet/support/CPUInformation/AMDCPUInfo.java index 5cb6772739..4b4b0ec681 100644 --- a/core/java/src/freenet/support/CPUInformation/AMDCPUInfo.java +++ b/core/java/src/freenet/support/CPUInformation/AMDCPUInfo.java @@ -41,6 +41,7 @@ public interface AMDCPUInfo extends CPUInfo { public boolean IsAthlon64Compatible(); /** * @return true if the CPU present in the machine is at least an 'k10' CPU + * @since 0.9.26 */ public boolean IsK10Compatible(); /** @@ -49,6 +50,7 @@ public interface AMDCPUInfo extends CPUInfo { public boolean IsBobcatCompatible(); /** * @return true if the CPU present in the machine is at least an 'jaguar' CPU + * @since 0.9.26 */ public boolean IsJaguarCompatible(); /** @@ -57,14 +59,17 @@ public interface AMDCPUInfo extends CPUInfo { public boolean IsBulldozerCompatible(); /** * @return true if the CPU present in the machine is at least a 'piledriver' CPU + * @since 0.9.26 */ public boolean IsPiledriverCompatible(); /** * @return true if the CPU present in the machine is at least a 'steamroller' CPU + * @since 0.9.26 */ public boolean IsSteamrollerCompatible(); /** * @return true if the CPU present in the machine is at least a 'excavator' CPU + * @since 0.9.26 */ public boolean IsExcavatorCompatible(); diff --git a/core/java/src/freenet/support/CPUInformation/CPUID.java b/core/java/src/freenet/support/CPUInformation/CPUID.java index d23f4f23bb..5bd79d0ae7 100644 --- a/core/java/src/freenet/support/CPUInformation/CPUID.java +++ b/core/java/src/freenet/support/CPUInformation/CPUID.java @@ -376,27 +376,33 @@ public class CPUID { System.out.println("CPU has ABM: " + c.hasABM()); if(c instanceof IntelCPUInfo){ System.out.println("\n **Intel-info**"); - System.out.println("Is PII-compatible: "+((IntelCPUInfo)c).IsPentium2Compatible()); - System.out.println("Is PIII-compatible: "+((IntelCPUInfo)c).IsPentium3Compatible()); - System.out.println("Is PIV-compatible: "+((IntelCPUInfo)c).IsPentium4Compatible()); - System.out.println("Is Atom-compatible: "+((IntelCPUInfo)c).IsAtomCompatible()); + System.out.println("Is PII-compatible: "+((IntelCPUInfo)c).IsPentium2Compatible()); + System.out.println("Is PIII-compatible: "+((IntelCPUInfo)c).IsPentium3Compatible()); + System.out.println("Is PIV-compatible: "+((IntelCPUInfo)c).IsPentium4Compatible()); + System.out.println("Is Atom-compatible: "+((IntelCPUInfo)c).IsAtomCompatible()); System.out.println("Is Pentium M compatible: "+((IntelCPUInfo)c).IsPentiumMCompatible()); - System.out.println("Is Core2-compatible: "+((IntelCPUInfo)c).IsCore2Compatible()); - System.out.println("Is Corei-compatible: "+((IntelCPUInfo)c).IsCoreiCompatible()); - System.out.println("Is Sandy-compatible: "+((IntelCPUInfo)c).IsSandyCompatible()); - System.out.println("Is Ivy-compatible: "+((IntelCPUInfo)c).IsIvyCompatible()); - System.out.println("Is Haswell-compatible: "+((IntelCPUInfo)c).IsHaswellCompatible()); + System.out.println("Is Core2-compatible: "+((IntelCPUInfo)c).IsCore2Compatible()); + System.out.println("Is Corei-compatible: "+((IntelCPUInfo)c).IsCoreiCompatible()); + System.out.println("Is Sandy-compatible: "+((IntelCPUInfo)c).IsSandyCompatible()); + System.out.println("Is Ivy-compatible: "+((IntelCPUInfo)c).IsIvyCompatible()); + System.out.println("Is Haswell-compatible: "+((IntelCPUInfo)c).IsHaswellCompatible()); System.out.println("Is Broadwell-compatible: "+((IntelCPUInfo)c).IsBroadwellCompatible()); } if(c instanceof AMDCPUInfo){ System.out.println("\n **AMD-info**"); - System.out.println("Is K6-compatible: "+((AMDCPUInfo)c).IsK6Compatible()); - System.out.println("Is K6_2-compatible: "+((AMDCPUInfo)c).IsK6_2_Compatible()); - System.out.println("Is K6_3-compatible: "+((AMDCPUInfo)c).IsK6_3_Compatible()); - System.out.println("Is Geode-compatible: "+((AMDCPUInfo)c).IsGeodeCompatible()); - System.out.println("Is Athlon-compatible: "+((AMDCPUInfo)c).IsAthlonCompatible()); - System.out.println("Is Athlon64-compatible: "+((AMDCPUInfo)c).IsAthlon64Compatible()); - System.out.println("Is Bobcat-compatible: "+((AMDCPUInfo)c).IsBobcatCompatible()); + System.out.println("Is K6-compatible: "+((AMDCPUInfo)c).IsK6Compatible()); + System.out.println("Is K6_2-compatible: "+((AMDCPUInfo)c).IsK6_2_Compatible()); + System.out.println("Is K6_3-compatible: "+((AMDCPUInfo)c).IsK6_3_Compatible()); + System.out.println("Is Geode-compatible: "+((AMDCPUInfo)c).IsGeodeCompatible()); + System.out.println("Is Athlon-compatible: "+((AMDCPUInfo)c).IsAthlonCompatible()); + System.out.println("Is Athlon64-compatible: "+((AMDCPUInfo)c).IsAthlon64Compatible()); + System.out.println("Is Bobcat-compatible: "+((AMDCPUInfo)c).IsBobcatCompatible()); + System.out.println("Is K10-compatible: "+((AMDCPUInfo)c).IsK10Compatible()); + System.out.println("Is Jaguar-compatible: "+((AMDCPUInfo)c).IsJaguarCompatible()); + System.out.println("Is Bulldozer-compatible: "+((AMDCPUInfo)c).IsBulldozerCompatible()); + System.out.println("Is Piledriver-compatible: "+((AMDCPUInfo)c).IsPiledriverCompatible()); + System.out.println("Is Steamroller-compatible: "+((AMDCPUInfo)c).IsSteamrollerCompatible()); + System.out.println("Is Excavator-compatible: "+((AMDCPUInfo)c).IsExcavatorCompatible()); } } From 63272d3cfcf432e873636b511d40c39a3a79bbbb Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 6 Jun 2016 12:37:06 +0000 Subject: [PATCH 10/12] mbuild-all script fixes --- core/c/jbigi/mbuild-all.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/core/c/jbigi/mbuild-all.sh b/core/c/jbigi/mbuild-all.sh index be3072ac8b..8c2b1d89e1 100755 --- a/core/c/jbigi/mbuild-all.sh +++ b/core/c/jbigi/mbuild-all.sh @@ -79,34 +79,32 @@ if [ ! -f "$JAVA_HOME/include/jni.h" ]; then fi if ! command -v m4 > /dev/null; then - printf "\aWARNING: \`m4\` not found. If this process fails to complete, install m4 " >&2 + printf "\aWARNING: \`m4\` not found. Install m4 " >&2 printf "and re-run this script.\n\n\n\a" >&2 exit 1 fi if [ -z $BITS ]; then - UNAME="$(uname -a)" - if test "${UNAME#*x86_64}" != "x86_&4"; then + UNAME="$(uname -m)" + if test "${UNAME#*x86_64}" != "$UNAME"; then BITS=64 - elif test "${UNAME#*i386}" != "i386"; then + elif test "${UNAME#*i386}" != "$UNAME"; then BITS=32 - elif test "${UNAME#*i686}" != "i686"; then + elif test "${UNAME#*i686}" != "$UNAME"; then BITS=32 - elif test "${UNAME#*armv6}" != "armv6"; then + elif test "${UNAME#*armv6}" != "$UNAME"; then BITS=32 - elif test "${UNAME#*armv7}" != "armv7"; then + elif test "${UNAME#*armv7}" != "$UNAME"; then BITS=32 - elif test "${UNAME#*aarch32}" != "aarch32"; then + elif test "${UNAME#*aarch32}" != "$UNAME"; then BITS=32 - elif test "${UNAME#*aarch64}" != "aarch64"; then + elif test "${UNAME#*aarch64}" != "$UNAME"; then BITS=64 else - echo "Unable to detect default setting for BITS variable" - exit + exit 1 fi - printf "\aBITS variable not set, $BITS bit system detected\n\a" >&2 fi @@ -116,6 +114,7 @@ if [ -z $CC ]; then printf "\aCC variable not set, defaulting to $CC\n\a" >&2 fi +# FIXME -m32 and -m64 are only for x86 if [ $BITS -eq 32 ]; then export ABI=32 export CFLAGS="-m32" From e27af374b0c4de685c75f711db43802bee76ac1b Mon Sep 17 00:00:00 2001 From: zzz Date: Fri, 10 Jun 2016 19:10:59 +0000 Subject: [PATCH 11/12] i2psnark standalone: - Cherry-pick fixes from psi's github i2psnark_rpc branch - Fix up Jetty XML file for Jetty 8 - Start with JettyStart - Add UrlLauncher to launch browser - Move RunStandalone to standalone/ directory - Fix up paths in CSS files during build - Force startup delay to 0 when in router context - Fix theme selection when not in router context - Adjust CSS and image paths when not in router context - Add hosts.txt so announces work --- apps/i2psnark/java/build.xml | 118 +++++++++++-- .../src/org/klomp/snark/SnarkManager.java | 13 +- .../klomp/snark/standalone/RunStandalone.java | 62 +++++++ .../org/klomp/snark/web/I2PSnarkServlet.java | 41 +++-- .../org/klomp/snark/web/RunStandalone.java | 61 ------- apps/i2psnark/jetty-i2psnark.xml | 165 ++++++++++++------ apps/i2psnark/launch-i2psnark | 2 +- apps/i2psnark/readme-standalone.txt | 16 +- build.xml | 7 +- 9 files changed, 326 insertions(+), 159 deletions(-) create mode 100644 apps/i2psnark/java/src/org/klomp/snark/standalone/RunStandalone.java delete mode 100644 apps/i2psnark/java/src/org/klomp/snark/web/RunStandalone.java diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml index 683e812858..5375b33246 100644 --- a/apps/i2psnark/java/build.xml +++ b/apps/i2psnark/java/build.xml @@ -50,6 +50,10 @@ + + + + @@ -71,7 +75,7 @@ - + @@ -179,29 +183,111 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + - - - - diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index abfc320978..5d001e9298 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -388,6 +388,8 @@ public class SnarkManager implements CompleteListener { } private int getStartupDelayMinutes() { + if (!_context.isRouterContext()) + return 0; try { return Integer.parseInt(_config.getProperty(PROP_STARTUP_DELAY)); } catch (NumberFormatException nfe) { @@ -675,7 +677,8 @@ public class SnarkManager implements CompleteListener { * @return String[] -- Array of all the themes found, non-null, unsorted */ public String[] getThemes() { - String[] themes; + String[] themes; + if (_context.isRouterContext()) { // "docs/themes/snark/" File dir = new File(_context.getBaseDir(), "docs/themes/snark"); FileFilter fileFilter = new FileFilter() { public boolean accept(File file) { return file.isDirectory(); } }; @@ -689,8 +692,10 @@ public class SnarkManager implements CompleteListener { } else { themes = new String[0]; } - // return the map. - return themes; + } else { + themes = new String[] { "light", "ubergine", "vanilla" }; + } + return themes; } @@ -815,7 +820,7 @@ public class SnarkManager implements CompleteListener { } } - if (startDelay != null){ + if (startDelay != null && _context.isRouterContext()) { int minutes = _util.getStartupDelay(); try { minutes = Integer.parseInt(startDelay.trim()); } catch (NumberFormatException nfe) {} if ( minutes != _util.getStartupDelay()) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/standalone/RunStandalone.java b/apps/i2psnark/java/src/org/klomp/snark/standalone/RunStandalone.java new file mode 100644 index 0000000000..521d0ec58b --- /dev/null +++ b/apps/i2psnark/java/src/org/klomp/snark/standalone/RunStandalone.java @@ -0,0 +1,62 @@ +package org.klomp.snark.standalone; + +import java.io.File; + +import net.i2p.I2PAppContext; +import net.i2p.apps.systray.UrlLauncher; +import net.i2p.jetty.JettyStart; + +/** + * @since moved from ../web and fixed in 0.9.27 + */ +public class RunStandalone { + + private final JettyStart _jettyStart; + private final I2PAppContext _context; + private int _port = 8002; + private String _host = "127.0.0.1"; + + private RunStandalone(String args[]) throws Exception { + _context = I2PAppContext.getGlobalContext(); + File base = _context.getBaseDir(); + File xml = new File(base, "jetty-i2psnark.xml"); + _jettyStart = new JettyStart(_context, null, new String[] { xml.getAbsolutePath() } ); + if (args.length > 1) { + _port = Integer.parseInt(args[1]); + } + if (args.length > 0) { + _host = args[0]; + } + } + + /** + * Usage: RunStandalone [host [port]] (but must match what's in the jetty-i2psnark.xml file) + */ + public static void main(String args[]) { + try { + RunStandalone runner = new RunStandalone(args); + runner.start(); + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + } + + public void start() { + try { + _jettyStart.startup(); + String url = "http://" + _host + ':' + _port + "/i2psnark/"; + try { + Thread.sleep(1000); + } catch (InterruptedException ie) {} + UrlLauncher launch = new UrlLauncher(_context, null, new String[] { url } ); + launch.startup(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void stop() { + _jettyStart.shutdown(null); + } +} diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 74688f2c72..fd914e27bc 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -4,7 +4,6 @@ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.io.Serializable; -import java.text.Collator; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -192,7 +191,10 @@ public class I2PSnarkServlet extends BasicServlet { return; } - _themePath = "/themes/snark/" + _manager.getTheme() + '/'; + if (_context.isRouterContext()) + _themePath = "/themes/snark/" + _manager.getTheme() + '/'; + else + _themePath = _contextPath + WARBASE + "themes/snark/" + _manager.getTheme() + '/'; _imgPath = _themePath + "images/"; req.setCharacterEncoding("UTF-8"); @@ -285,8 +287,9 @@ public class I2PSnarkServlet extends BasicServlet { if (!isConfigure) { delay = _manager.getRefreshDelaySeconds(); if (delay > 0) { + String jsPfx = _context.isRouterContext() ? "" : ".resources"; //out.write("\n"); - out.write("\n" + + out.write("\n" + "