diff --git a/core/java/src/net/i2p/util/LookaheadInputStream.java b/core/java/src/net/i2p/util/LookaheadInputStream.java index ed698eb3ac..67d48e87ad 100644 --- a/core/java/src/net/i2p/util/LookaheadInputStream.java +++ b/core/java/src/net/i2p/util/LookaheadInputStream.java @@ -44,7 +44,7 @@ public class LookaheadInputStream extends FilterInputStream { Arrays.fill(_footerLookahead, (byte)0x00); int footerRead = 0; while (footerRead < _footerLookahead.length) { - int read = in.read(_footerLookahead); + int read = in.read(_footerLookahead, footerRead, _footerLookahead.length - footerRead); if (read == -1) throw new IOException("EOF reading the footer lookahead"); footerRead += read; } diff --git a/core/java/src/net/i2p/util/SSLEepGet.java b/core/java/src/net/i2p/util/SSLEepGet.java index 1368a16198..2e58d61638 100644 --- a/core/java/src/net/i2p/util/SSLEepGet.java +++ b/core/java/src/net/i2p/util/SSLEepGet.java @@ -90,6 +90,8 @@ public class SSLEepGet extends EepGet { /** may be null if init failed */ private SavingTrustManager _stm; + private static final boolean _isAndroid = System.getProperty("java.vendor").contains("Android"); + /** * A new SSLEepGet with a new SSLState */ @@ -192,12 +194,23 @@ public class SSLEepGet extends EepGet { String override = System.getProperty("javax.net.ssl.keyStore"); if (override != null) success = loadCerts(new File(override), ks); - if (!success) - success = loadCerts(new File(System.getProperty("java.home"), "lib/security/jssecacerts"), ks); - if (!success) - success = loadCerts(new File(System.getProperty("java.home"), "lib/security/cacerts"), ks); + if (!success) { + if (_isAndroid) { + // thru API 13. As of API 14 (ICS), the file is gone, but + // ks.load(null, pw) will bring in the default certs? + success = loadCerts(new File(System.getProperty("java.home"), "etc/security/cacerts.bks"), ks); + } else { + success = loadCerts(new File(System.getProperty("java.home"), "lib/security/jssecacerts"), ks); + if (!success) + success = loadCerts(new File(System.getProperty("java.home"), "lib/security/cacerts"), ks); + } + } if (!success) { + try { + // must be initted + ks.load(null, "changeit".toCharArray()); + } catch (Exception e) {} _log.error("All key store loads failed, will only load local certificates"); } else if (_log.shouldLog(Log.INFO)) { int count = 0; diff --git a/history.txt b/history.txt index aef9af3e6f..63cc8abfbe 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,8 @@ +2012-07-24 zzz + * LookaheadInputStream: Fix bug causing gunzip fails, esp. on Android + * Router: Don't create router.ping file on Android + * SSLEepGet: Fix on Android (ticket #668) + 2012-07-21 zzz * i2psnark: Remove dark theme * Reseed: Add new cert for cowpuncher diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index d97c5737b1..399d9fb482 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -255,7 +255,8 @@ public class Router implements RouterClock.ClockShiftListener { // ********* Start no threads before here ********* // // // NOW we can start the ping file thread. - beginMarkingLiveliness(); + if (!System.getProperty("java.vendor").contains("Android")) + beginMarkingLiveliness(); // Apps may use this as an easy way to determine if they are in the router JVM // But context.isRouterContext() is even easier... diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 33006bcb1f..285b64c36d 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 27; + public final static long BUILD = 28; /** for example "-test" */ public final static String EXTRA = "-rc";