diff --git a/build.xml b/build.xml index 04c443dd59c77c3120466eabe732d21fcc8de1c4..919a0342e7d86bf9f7a261fd841c660f68c23004 100644 --- a/build.xml +++ b/build.xml @@ -18,6 +18,7 @@ <echo message=" updaterWithJetty: tar the built i2p specific files and jetty into an i2pupdate.zip (extracts safely over existing installs)" /> <echo message=" updaterWithJettyFixes: updater including local jetty patches" /> <echo message=" updaterWithGeoIP: updater including GeoIP Files" /> + <echo message=" updaterWithJettyFixesAndGeoIP" /> <echo message=" updaterSmall: updater with the essentials only - no SAM, i2psnark, SusiMail, SusiDNS, news.xml, or history.txt" /> <echo message=" updaterRouter: updater with the i2p.jar and router.jar only" /> <echo message=" distclean: clean up all derived files" /> @@ -201,7 +202,8 @@ <fileset dir="." includes="**/*.java~" /> </delete> </target> - <target name="pkg" depends="distclean, updaterWithJettyFixes, tarball, installer" /> + <!-- one release only, then back to updaterWithJettyFixes --> + <target name="pkg" depends="distclean, updaterWithJettyFixesAndGeoIP, tarball, installer" /> <target name="pkgclean" depends="deletepkg-temp"> <delete> <fileset dir="." includes="i2p.tar.bz2 install.jar i2pupdate.zip" /> @@ -321,24 +323,20 @@ <target name="deletepkg-temp"> <delete dir="pkg-temp" /> </target> - <target name="prepconsoleDocs"> + <target name="prepconsoleDocs" depends="prepgeoupdate"> <copy todir="pkg-temp/docs/" > <fileset dir="." includes="readme*.html" /> <fileset dir="installer/resources/" includes="*-header.ht" /> </copy> - <copy file="installer/resources/geoip.txt" todir="pkg-temp/geoip/" /> - <copy file="installer/resources/countries.txt" todir="pkg-temp/geoip/" /> - <copy todir="pkg-temp/docs/icons/flags" > - <fileset dir="installer/resources/icons/flags" /> - </copy> </target> <target name="consoleDocs" depends="deletepkg-temp, prepconsoleDocs"> <zip destfile="docs.zip" basedir="pkg-temp" whenempty="fail" /> </target> <target name="updater" depends="prepupdate, preplicenses, zipit" /> - <target name="updaterWithGeoIP" depends="prepgeoupdate, preplicenses, zipit" /> + <target name="updaterWithGeoIP" depends="prepupdate, prepgeoupdate, preplicenses, zipit" /> <target name="updaterWithJetty" depends="prepjupdate, preplicenses, zipit" /> <target name="updaterWithJettyFixes" depends="prepjupdatefixes, preplicenses, zipit" /> + <target name="updaterWithJettyFixesAndGeoIP" depends="prepjupdatefixes, prepgeoupdate, preplicenses, zipit" /> <target name="updaterSmall" depends="prepupdateSmall, zipit" /> <target name="updaterRouter" depends="prepupdateRouter, zipit" /> <target name="zipit"> @@ -376,7 +374,7 @@ <copy file="build/i2p.jar" todir="pkg-temp/lib/" /> <copy file="build/router.jar" todir="pkg-temp/lib/" /> </target> - <target name="prepgeoupdate" depends="prepupdate"> + <target name="prepgeoupdate"> <copy file="installer/resources/geoip.txt" todir="pkg-temp/geoip/" /> <copy file="installer/resources/countries.txt" todir="pkg-temp/geoip/" /> <copy todir="pkg-temp/docs/icons/flags" > diff --git a/core/java/src/net/i2p/time/Timestamper.java b/core/java/src/net/i2p/time/Timestamper.java index 356689f854b513bd67cdc32e356b28621a295140..b3f5290e330f26487adc425d301577d82379c945 100644 --- a/core/java/src/net/i2p/time/Timestamper.java +++ b/core/java/src/net/i2p/time/Timestamper.java @@ -2,6 +2,7 @@ package net.i2p.time; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.StringTokenizer; import net.i2p.I2PAppContext; @@ -246,7 +247,12 @@ public class Timestamper implements Runnable { if ( (serverList == null) || (serverList.trim().length() <= 0) ) { serverList = DEFAULT_SERVER_LIST; String country = _context.getProperty(PROP_IP_COUNTRY); - if (country != null) { + if (country == null) { + country = Locale.getDefault().getCountry(); + if (country != null) + country = country.toLowerCase(); + } + if (country != null && country.length() > 0) { _priorityServers = new ArrayList(3); for (int i = 0; i < 3; i++) _priorityServers.add(i + "." + country + ".pool.ntp.org"); diff --git a/router/java/src/net/i2p/router/RouterWatchdog.java b/router/java/src/net/i2p/router/RouterWatchdog.java index cb168102248a8a652cf837b16e36b1bbacb6ecf2..0ad5a2c410f1ca4e4e3ca275884b1e6e2147f00f 100644 --- a/router/java/src/net/i2p/router/RouterWatchdog.java +++ b/router/java/src/net/i2p/router/RouterWatchdog.java @@ -49,8 +49,8 @@ class RouterWatchdog implements Runnable { } private boolean shutdownOnHang() { - // prop default true - if (!Boolean.valueOf(_context.getProperty("watchdog.haltOnHang", "true")).booleanValue()) + // prop default false + if (!Boolean.valueOf(_context.getProperty("watchdog.haltOnHang")).booleanValue()) return false; // Client manager starts complaining after 10 minutes, and we run every minute, @@ -94,7 +94,7 @@ class RouterWatchdog implements Runnable { long used = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); _log.error("Memory: " + DataHelper.formatSize(used) + '/' + DataHelper.formatSize(max)); if (_consecutiveErrors == 1) { - _log.log(Log.CRIT, "Router appears hung! Will restart in 20 minutes if it doesn't fix itself"); + _log.log(Log.CRIT, "Router appears hung, or there is severe network congestion. Watchdog starts barking!"); // This might work on linux... // It won't on windows, and we can't call i2prouter.bat either, it does something // completely different... diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 37503ecac41b1eb37f1be7b956e1a88168ef0ae5..31d6dc04bef6053f61f27e2bf81690a30fcb3fe9 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -1069,8 +1069,8 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { buf.append("Address(es): <i>"); String country = _context.commSystem().getCountry(info.getIdentity().getHash()); if(country != null) { - buf.append(" <img alt=\"").append(country.toUpperCase()).append("\""); - buf.append(" src=\"/flags.jsp?c=").append(country).append("\">"); + buf.append("<img alt=\"").append(country.toUpperCase()).append("\""); + buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> "); } for (Iterator iter = info.getAddresses().iterator(); iter.hasNext(); ) { RouterAddress addr = (RouterAddress)iter.next(); diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java index 77a9bf323de4fb4f02d7123e6349abac7b994e4b..2dbd9af3a9b67966073338a1dd43adeed82c1f09 100644 --- a/router/java/src/net/i2p/router/transport/TransportImpl.java +++ b/router/java/src/net/i2p/router/transport/TransportImpl.java @@ -106,6 +106,9 @@ public abstract class TransportImpl implements Transport { ! ((FloodfillNetworkDatabaseFacade)_context.netDb()).floodfillEnabled()) def = MAX_CONNECTION_FACTOR * (1 + bw - Router.CAPABILITY_BW12); } + // increase limit for SSU, for now + if (style.equals("udp")) + def = def * 4 / 3; return _context.getProperty("i2np." + style + ".maxConnections", def); } diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index 24ac63c6b28bfde33a0b98eb85306bbf9c9ea5a1..3f9e5acfc4535ab29512d41be748203101fec86c 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -51,7 +51,8 @@ public class EventPumper implements Runnable { * the time to iterate across them to check a few flags shouldn't be a problem. */ private static final long FAILSAFE_ITERATION_FREQ = 2*1000l; - private static final long MIN_EXPIRE_IDLE_TIME = 5*60*1000l; + /** tunnel test is every 30-60s, so this should be longer than, say, 3*45s to allow for drops */ + private static final long MIN_EXPIRE_IDLE_TIME = 3*60*1000l; private static final long MAX_EXPIRE_IDLE_TIME = 15*60*1000l; public EventPumper(RouterContext ctx, NTCPTransport transport) { diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index fc34ab5fc883904fd0e255a9c659a92c9e5859eb..9845a72f3495d783ae203c14f348cf837ef258a2 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -458,7 +458,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { else out.write("<td>n/a</td>"); if (cfg.getReceiveFrom() != null) - out.write("<td>" + netDbLink(cfg.getReceiveFrom()) +"</td>"); + out.write("<td align=\"right\">" + netDbLink(cfg.getReceiveFrom()) +"</td>"); else out.write("<td> </td>"); if (cfg.getSendTunnel() != null) @@ -466,7 +466,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { else out.write("<td> </td>"); if (cfg.getSendTo() != null) - out.write("<td>" + netDbLink(cfg.getSendTo()) +"</td>"); + out.write("<td align=\"right\">" + netDbLink(cfg.getSendTo()) +"</td>"); else out.write("<td> </td>"); long timeLeft = cfg.getExpiration()-_context.clock().now(); @@ -603,7 +603,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { out.write("<h2><a name=\"peers\">Tunnel Counts By Peer</a>:</h2>\n"); out.write("<table border=\"1\"><tr><td><b>Peer</b></td><td><b>Expl. + Client</b></td><td><b>% of total</b></td><td><b>Part. from + to</b></td><td><b>% of total</b></td></tr>\n"); for (Hash h : peerList) { - out.write("<tr><td>"); + out.write("<tr><td align=\"right\">"); out.write(netDbLink(h)); out.write("<td align=\"right\">" + lc.count(h)); out.write("<td align=\"right\">"); diff --git a/router/java/src/org/cybergarage/xml/Parser.java b/router/java/src/org/cybergarage/xml/Parser.java index 2c9b3861bb578ae9665c22fd5c176dca99b10eb4..0268f3e29ce00fb08333eb8b804480a6f0113f36 100644 --- a/router/java/src/org/cybergarage/xml/Parser.java +++ b/router/java/src/org/cybergarage/xml/Parser.java @@ -104,7 +104,7 @@ public abstract class Parser public Node parse(String descr) throws ParserException { try { - StringBufferInputStream decrIn = new StringBufferInputStream(descr); + InputStream decrIn = new ByteArrayInputStream(descr.getBytes()); Node root = parse(decrIn); return root; } catch (Exception e) {