diff --git a/android/README.txt b/android/README.txt index e8886a57988c11c4ef34f68456640a73d79a69dc..eeb48885b24e65edc631b71ff4b19b17c62fc78d 100644 --- a/android/README.txt +++ b/android/README.txt @@ -1,9 +1,13 @@ -These instructions are for the 1.5 SDK. +These instructions are for the 1.5 Android SDK. The build file is not compatible with the 1.1 SDK any more. +1.6 and 2.0 SDKs are untested. #Unzip the android SDK in ../../ #So then the android tools will be in ../../android-sdk-linux_x86-1.5_r2/tools/ +# create a file local.properties with the following line: +# sdk-location=/path/to/your/android-sdk-linux_x86-1.5_r2 + #then build the android apk file: ant debug diff --git a/apps/routerconsole/java/bmsg.sh b/apps/routerconsole/java/bmsg.sh index e66bcc317adb29d70fef623af25f0a783bced5f1..989bc1a30ba8b0a523d1cf98458844b5adf968ac 100644 --- a/apps/routerconsole/java/bmsg.sh +++ b/apps/routerconsole/java/bmsg.sh @@ -19,6 +19,20 @@ CLASS=net.i2p.router.web.messages TMPFILE=build/javafiles.txt export TZ=UTC +# +# generate strings/Countries.java from ../../../installer/resources/countries.txt +# +CFILE=../../../installer/resources/countries.txt +JFILE=build/Countries.java +if [ $CFILE -nt $JFILE -o ! -s $JFILE ] +then + mkdir -p build + echo '// Automatically generated pseudo-java for xgettext - do not edit' > $JFILE + echo '// Translators may wish to translate a few of these, do not bother to translate all of them!!' >> $JFILE + sed 's/..,\(..*\)/_("\1");/' $CFILE >> $JFILE +fi + +JPATHS="src ../jsp/WEB-INF strings $JFILE" for i in ../locale/messages_*.po do # get language @@ -26,7 +40,7 @@ do LG=${LG%.po} # make list of java files newer than the .po file - find src ../jsp/WEB-INF strings -name *.java -newer $i > $TMPFILE + find $JPATHS -name *.java -newer $i > $TMPFILE if [ -s build/obj/net/i2p/router/web/messages_$LG.class -a \ build/obj/net/i2p/router/web/messages_$LG.class -nt $i -a \ ! -s $TMPFILE ] @@ -48,7 +62,7 @@ do # In a jsp, you must use a helper or handler that has the context set. # To start a new translation, copy the header from an old translation to the new .po file, # then ant distclean updater. - find src ../jsp/WEB-INF strings -name *.java > $TMPFILE + find $JPATHS -name *.java > $TMPFILE xgettext -f $TMPFILE -F -L java --from-code=UTF-8 \ --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \ --keyword=handler._ --keyword=formhandler._ \ diff --git a/apps/routerconsole/java/bundle-messages.sh b/apps/routerconsole/java/bundle-messages.sh index 82071200b3905ffa9654dd39aaf00d2e404bf2cf..cb08afe2de439e80d6a3a91bcae186238a18ee50 100755 --- a/apps/routerconsole/java/bundle-messages.sh +++ b/apps/routerconsole/java/bundle-messages.sh @@ -8,6 +8,20 @@ CLASS=net.i2p.router.web.messages TMPFILE=build/javafiles.txt export TZ=UTC +# +# generate strings/Countries.java from ../../../installer/resources/countries.txt +# +CFILE=../../../installer/resources/countries.txt +JFILE=build/Countries.java +if [ $CFILE -nt $JFILE -o ! -s $JFILE ] +then + mkdir -p build + echo '// Automatically generated pseudo-java for xgettext - do not edit' > $JFILE + echo '// Translators may wish to translate a few of these, do not bother to translate all of them!!' >> $JFILE + sed 's/..,\(..*\)/_("\1");/' $CFILE >> $JFILE +fi + +JPATHS="src ../jsp/WEB-INF strings $JFILE" for i in ../locale/messages_*.po do # get language @@ -15,7 +29,7 @@ do LG=${LG%.po} # make list of java files newer than the .po file - find src ../jsp/WEB-INF strings -name *.java -newer $i > $TMPFILE + find $JPATHS -name *.java -newer $i > $TMPFILE if [ -s build/obj/net/i2p/router/web/messages_$LG.class -a \ build/obj/net/i2p/router/web/messages_$LG.class -nt $i -a \ ! -s $TMPFILE ] @@ -37,7 +51,7 @@ do # In a jsp, you must use a helper or handler that has the context set. # To start a new translation, copy the header from an old translation to the new .po file, # then ant distclean updater. - find src ../jsp/WEB-INF strings -name *.java > $TMPFILE + find $JPATHS -name *.java > $TMPFILE xgettext -f $TMPFILE -F -L java --from-code=UTF-8 \ --keyword=_ --keyword=_x --keyword=intl._ --keyword=intl.title \ --keyword=handler._ --keyword=formhandler._ \ diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java index 41c8e7587709db16f0100079fad1b9a4eca81bba..11bc0b670a7ba59107c77dad0ddae60e10d1d1fc 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java @@ -118,7 +118,7 @@ public class ConfigStatsHandler extends FormHandler { addFormNotice(_("Stat filter and location updated successfully to") + ": " + stats.toString()); else addFormError(_("Failed to update the stat filter and location")); - addFormNotice("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>"); + addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>")); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java index fd49aa7ad051240a5ca990f555d60a3f5f73368a..ef61f06632b8f3d72db742de162c5cd1ee8ba1bd 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbHelper.java @@ -7,13 +7,17 @@ import java.io.OutputStreamWriter; public class NetDbHelper extends HelperBase { private String _routerPrefix; - private boolean _full = false; + private int _full; private boolean _lease = false; public NetDbHelper() {} public void setRouter(String r) { _routerPrefix = r; } - public void setFull(String f) { _full = "1".equals(f); } + public void setFull(String f) { + try { + _full = Integer.parseInt(f); + } catch (NumberFormatException nfe) {} + } public void setLease(String l) { _lease = "1".equals(l); } public String getNetDbSummary() { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java index e551b15f03222b57d79396da5dceffc32b486b0d..4ef42c00856565c8d49639cae584bc190280c169 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java @@ -77,10 +77,6 @@ public class NetDbRenderer { out.flush(); } - public void renderStatusHTML(Writer out) throws IOException { - renderStatusHTML(out, true); - } - public void renderLeaseSetHTML(Writer out) throws IOException { StringBuilder buf = new StringBuilder(4*1024); buf.append("<h2>" + _("Network Database Contents") + "</h2>\n"); @@ -131,7 +127,10 @@ public class NetDbRenderer { out.flush(); } - public void renderStatusHTML(Writer out, boolean full) throws IOException { + /** + * @param mode 0: our info and charts only; 1: full routerinfos and charts; 2: abbreviated routerinfos and charts + */ + public void renderStatusHTML(Writer out, int mode) throws IOException { out.write("<h2>" + _("Network Database Contents") + " (<a href=\"netdb.jsp?l=1\">" + _("View LeaseSets") + "</a>)</h2>\n"); if (!_context.netDb().isInitialized()) { out.write(_("Not initialized")); @@ -139,13 +138,16 @@ public class NetDbRenderer { return; } + boolean full = mode == 1; + boolean shortStats = mode == 2; + boolean showStats = full || shortStats; Hash us = _context.routerHash(); out.write("<a name=\"routers\" ></a><h3>" + _("Routers") + " (<a href=\"netdb.jsp"); - if (full) - out.write("#routers\" >" + _("view without")); + if (full || !showStats) + out.write("?f=2#routers\" >" + _("Show all routers")); else - out.write("?f=1#routers\" >" + _("view with")); - out.write(' ' + _("stats") + "</a>)</h3>\n"); + out.write("?f=1#routers\" >" + _("Show all routers with full stats")); + out.write("</a>)</h3>\n"); StringBuilder buf = new StringBuilder(8192); RouterInfo ourInfo = _context.router().getRouterInfo(); @@ -163,9 +165,11 @@ public class NetDbRenderer { Hash key = ri.getIdentity().getHash(); boolean isUs = key.equals(us); if (!isUs) { - renderRouterInfo(buf, ri, false, full); - out.write(buf.toString()); - buf.setLength(0); + if (showStats) { + renderRouterInfo(buf, ri, false, full); + out.write(buf.toString()); + buf.setLength(0); + } String routerVersion = ri.getOption("router.version"); if (routerVersion != null) versions.increment(routerVersion); @@ -194,14 +198,14 @@ public class NetDbRenderer { List<String> countryList = new ArrayList(countries.objects()); if (countryList.size() > 0) { - Collections.sort(countryList); + Collections.sort(countryList, new CountryComparator()); buf.append("<table>\n"); buf.append("<tr><th align=\"left\">" + _("Country") + "</th><th>" + _("Count") + "</th></tr>\n"); for (String country : countryList) { int num = countries.count(country); buf.append("<tr><td><img height=\"11\" width=\"16\" alt=\"").append(country.toUpperCase()).append("\""); buf.append(" src=\"/flags.jsp?c=").append(country).append("\"> "); - buf.append(_context.commSystem().getCountryName(country)); + buf.append(_(_context.commSystem().getCountryName(country))); buf.append("</td><td align=\"center\">").append(num).append("</td></tr>\n"); } buf.append("</table>\n"); @@ -211,6 +215,14 @@ public class NetDbRenderer { out.flush(); } + /** sort by translated country name */ + private class CountryComparator implements Comparator { + public int compare(Object l, Object r) { + return _(_context.commSystem().getCountryName((String)l)) + .compareTo(_(_context.commSystem().getCountryName((String)r))); + } + } + /** * Be careful to use stripHTML for any displayed routerInfo data * to prevent vulnerabilities diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java index f7cb64a0a10173c96c72d51cd85f3f6f06943a10..fe8a823b2317b7a9ec1831eb21698b5ab9fe5823 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java @@ -171,28 +171,24 @@ class ProfileOrganizerRenderer { buf.append("<h2>").append(_("Floodfill and Integrated Peers")).append("</h2>\n"); buf.append("<table>"); - buf.append("<tr>"); - buf.append("<th class=\"smallhead\">Peer</th>"); - buf.append("<th class=\"smallhead\">Caps</th>"); - buf.append("<th class=\"smallhead\">Integ. Value</th>"); - buf.append("<th class=\"smallhead\">Last Heard About</th>"); - buf.append("<th class=\"smallhead\">Last Heard From</th>"); -// "<th class=\"smallhead\">Last Successful Send</th>" + - buf.append("<th class=\"smallhead\">Last Good Send</th>"); -// "<th class=\"smallhead\">Last Failed Send</th>" + - buf.append("<th class=\"smallhead\">Last Bad Send</th>"); - buf.append("<th class=\"smallhead\">10m Resp. Time</th>"); - buf.append("<th class=\"smallhead\">1h Resp. Time</th>"); - buf.append("<th class=\"smallhead\">1d Resp. Time</th>"); -// "<th class=\"smallhead\">Successful Lookups</th>" + - buf.append("<th class=\"smallhead\">Good Lookups</th>"); -// "<th>Failed Lookups</th>" + - buf.append("<th class=\"smallhead\">Bad Lookups</th>"); - buf.append("<th class=\"smallhead\">New Stores</th>"); - buf.append("<th class=\"smallhead\">Old Stores</th>"); - buf.append("<th class=\"smallhead\">1h Fail Rate</th>"); - buf.append("<th class=\"smallhead\">1d Fail Rate</th>"); - buf.append("</tr>"); + buf.append("<tr>"); + buf.append("<th class=\"smallhead\">").append(_("Peer")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Caps")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Integ. Value")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Heard About")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Heard From")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Good Send")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Bad Send")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("10m Resp. Time")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("1h Resp. Time")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("1d Resp. Time")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Good Lookup")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Bad Lookup")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Good Store")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("Last Bad Store")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("1h Fail Rate")).append("</th>"); + buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>"); + buf.append("</tr>"); for (Iterator iter = integratedPeers.iterator(); iter.hasNext();) { PeerProfile prof = (PeerProfile)iter.next(); Hash peer = prof.getPeer(); @@ -221,10 +217,14 @@ class ProfileOrganizerRenderer { buf.append("<td align=\"right\">").append(avg(prof, 24*60*60*1000l)).append("</td>"); DBHistory dbh = prof.getDBHistory(); if (dbh != null) { - buf.append("<td align=\"right\">").append(dbh.getSuccessfulLookups()).append("</td>"); - buf.append("<td align=\"right\">").append(dbh.getFailedLookups()).append("</td>"); - buf.append("<td align=\"right\">").append(dbh.getUnpromptedDbStoreNew()).append("</td>"); - buf.append("<td align=\"right\">").append(dbh.getUnpromptedDbStoreOld()).append("</td>"); + time = now - dbh.getLastLookupSuccessful(); + buf.append("<td align=\"right\">").append(DataHelper.formatDuration(time)).append("</td>"); + time = now - dbh.getLastLookupFailed(); + buf.append("<td align=\"right\">").append(DataHelper.formatDuration(time)).append("</td>"); + time = now - dbh.getLastStoreSuccessful(); + buf.append("<td align=\"right\">").append(DataHelper.formatDuration(time)).append("</td>"); + time = now - dbh.getLastStoreFailed(); + buf.append("<td align=\"right\">").append(DataHelper.formatDuration(time)).append("</td>"); buf.append("<td align=\"right\">").append(davg(dbh, 60*60*1000l)).append("</td>"); buf.append("<td align=\"right\">").append(davg(dbh, 24*60*60*1000l)).append("</td>"); } else { @@ -242,13 +242,13 @@ class ProfileOrganizerRenderer { buf.append("<b>").append(_("Integration")).append(":</b> ").append(num(_organizer.getIntegrationThreshold())) .append(" (").append(integrated).append(' ').append(_(" well integrated peers")).append(")</p>"); buf.append("<h3>").append(_("Definitions")).append(":</h3><ul>"); - buf.append("<li><b>").append(_("groups")).append("</b>: ").append(_("as determined by the profile organizer")).append("</li>"); - buf.append("<li><b>").append(_("caps")).append("</b>: ").append(_("capabilities in the netDb, not used to determine profiles")).append("</li>"); - buf.append("<li><b>").append(_("speed")).append("</b>: ").append(_("peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel")).append("</li>"); - buf.append("<li><b>").append(_("capacity")).append("</b>: ").append(_("how many tunnels can we ask them to join in an hour?")).append("</li>"); - buf.append("<li><b>").append(_("integration")).append("</b>: ").append(_("how many new peers have they told us about lately?")).append("</li>"); - buf.append("<li><b>").append(_("status")).append("</b>: ").append(_("is the peer banned, or unreachable, or failing tunnel tests?")).append("</li>"); - buf.append("</ul></i>"); + buf.append("<li><b>").append(_("groups")).append("</b>: ").append(_("as determined by the profile organizer")).append("</li>"); + buf.append("<li><b>").append(_("caps")).append("</b>: ").append(_("capabilities in the netDb, not used to determine profiles")).append("</li>"); + buf.append("<li><b>").append(_("speed")).append("</b>: ").append(_("peak throughput (bytes per second) over a 1 minute period that the peer has sustained in a single tunnel")).append("</li>"); + buf.append("<li><b>").append(_("capacity")).append("</b>: ").append(_("how many tunnels can we ask them to join in an hour?")).append("</li>"); + buf.append("<li><b>").append(_("integration")).append("</b>: ").append(_("how many new peers have they told us about lately?")).append("</li>"); + buf.append("<li><b>").append(_("status")).append("</b>: ").append(_("is the peer banned, or unreachable, or failing tunnel tests?")).append("</li>"); + buf.append("</ul></i>"); out.write(buf.toString()); out.flush(); } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java index 0faa74542e7a543996a069d538da8841e5ae3f78..2228f6078755f660ef956c7d1e45c2ffdd637787 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java @@ -29,7 +29,7 @@ public class StatsGenerator { public void generateStatsPage(Writer out) throws IOException { StringBuilder buf = new StringBuilder(16*1024); - buf.append("<div class=\"joblog\"><form action=\"/oldstats.jsp\">"); + buf.append("<div class=\"joblog\"><form action=\"/stats.jsp\">"); buf.append("<select name=\"go\" onChange='location.href=this.value'>"); out.write(buf.toString()); buf.setLength(0); @@ -39,11 +39,11 @@ public class StatsGenerator { Map.Entry entry = (Map.Entry)iter.next(); String group = (String)entry.getKey(); Set stats = (Set)entry.getValue(); - buf.append("<option value=\"/oldstats.jsp#").append(group).append("\">"); + buf.append("<option value=\"/stats.jsp#").append(group).append("\">"); buf.append(group).append("</option>\n"); for (Iterator statIter = stats.iterator(); statIter.hasNext(); ) { String stat = (String)statIter.next(); - buf.append("<option value=\"/oldstats.jsp#"); + buf.append("<option value=\"/stats.jsp#"); buf.append(stat); buf.append("\">..."); buf.append(stat); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java index 585cd40ad50723475dac923a0d540bb3441f1057..72856fedcd24d4768bfc30e1784a605e6b20c5ac 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java @@ -118,7 +118,7 @@ public class SummaryBarRenderer { .append(_("Graphs")) .append("</a>\n" + - "<a href=\"oldstats.jsp\" target=\"_top\" title=\"") + "<a href=\"stats.jsp\" target=\"_top\" title=\"") .append(_("Textual router performance statistics")) .append("\">") .append(_("Stats")) diff --git a/apps/routerconsole/jsp/oldstats.jsp b/apps/routerconsole/jsp/stats.jsp similarity index 100% rename from apps/routerconsole/jsp/oldstats.jsp rename to apps/routerconsole/jsp/stats.jsp diff --git a/apps/routerconsole/locale/messages_zh.po b/apps/routerconsole/locale/messages_zh.po index 0c84c83c2f7dde059b629d8be20a6c953e2c6468..ba404660dc1a61daef522d50cec0f5db44b1ed66 100644 --- a/apps/routerconsole/locale/messages_zh.po +++ b/apps/routerconsole/locale/messages_zh.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-05 00:36+0000\n" +"POT-Creation-Date: 2009-11-08 02:16+0000\n" "PO-Revision-Date: \n" "Last-Translator: walking <walking@mail.i2p>\n" "Language-Team: \n" @@ -36,15 +36,16 @@ msgstr "连网设置" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:228 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:217 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fzh_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:223 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldstats_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summary_jsp.java:157 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:236 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:216 @@ -65,15 +66,16 @@ msgstr "刷新(秒)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:224 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:232 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fzh_jsp.java:224 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:224 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/index_jsp.java:227 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:224 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldstats_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summary_jsp.java:161 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:239 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:220 @@ -444,7 +446,7 @@ msgid "The router is currently testing whether your UDP port is firewalled." msgstr "路由器æ£åœ¨æµ‹è¯•æ‚¨çš„UDP端å£æ˜¯å¦è¢«é˜²ç«å¢™é˜»æŒ¡ã€‚" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:558 -#: src/net/i2p/router/web/NetDbRenderer.java:234 +#: src/net/i2p/router/web/NetDbRenderer.java:246 #: src/net/i2p/router/web/SummaryHelper.java:96 msgid "Hidden" msgstr "éšèº«" @@ -1254,14 +1256,6 @@ msgstr "I2P 网络数æ®åº“概况" msgid "I2P Network Database Summary" msgstr "I2P 网络数æ®åº“概况" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldstats_jsp.java:105 -msgid "statistics" -msgstr "统计数æ®" - -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldstats_jsp.java:242 -msgid "I2P Router Statistics" -msgstr "I2P 路由器统计数æ®" - #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:105 msgid "peer connections" msgstr "节点连接" @@ -1278,6 +1272,14 @@ msgstr "节点信æ¯" msgid "I2P Network Peer Profiles" msgstr "I2P 网络节点信æ¯" +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:105 +msgid "statistics" +msgstr "统计数æ®" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:242 +msgid "I2P Router Statistics" +msgstr "I2P 路由器统计数æ®" + #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:245 #, java-format msgid "Disable {0}s Refresh" @@ -1291,6 +1293,931 @@ msgstr "隧é“概况" msgid "I2P Tunnel Summary" msgstr "I2P 隧é“概况" +#: build/Countries.java:3 +msgid "Andorra" +msgstr "安é“å°”" + +#: build/Countries.java:4 +msgid "United Arab Emirates" +msgstr "阿è”é…‹" + +#: build/Countries.java:5 +msgid "Afghanistan" +msgstr "阿富汗" + +#: build/Countries.java:6 +msgid "Antigua and Barbuda" +msgstr "安æ瓜与巴布达" + +#: build/Countries.java:7 +msgid "Anguilla" +msgstr "å®‰æ ¼æ‹‰" + +#: build/Countries.java:8 +msgid "Albania" +msgstr "阿尔巴尼亚" + +#: build/Countries.java:9 +msgid "Armenia" +msgstr "亚美尼亚" + +#: build/Countries.java:10 +msgid "Netherlands Antilles" +msgstr "è·å…°å±žåœ°" + +#: build/Countries.java:11 +msgid "Angola" +msgstr "安哥拉" + +#: build/Countries.java:12 +msgid "Antarctica" +msgstr "å—æžæ´²" + +#: build/Countries.java:13 +msgid "Argentina" +msgstr "é˜¿æ ¹å»·" + +#: build/Countries.java:14 +msgid "American Samoa" +msgstr "东è¨æ‘©äºš" + +#: build/Countries.java:15 +msgid "Austria" +msgstr "奥地利" + +#: build/Countries.java:16 +msgid "Australia" +msgstr "澳大利亚" + +#: build/Countries.java:17 +msgid "Aruba" +msgstr "阿é²å·´" + +#: build/Countries.java:19 +msgid "Azerbaijan" +msgstr "阿塞拜疆" + +#: build/Countries.java:20 +msgid "Bosnia and Herzegovina" +msgstr "波黑" + +#: build/Countries.java:21 +msgid "Barbados" +msgstr "巴巴多斯" + +#: build/Countries.java:22 +msgid "Bangladesh" +msgstr "åŸåŠ 拉" + +#: build/Countries.java:23 +msgid "Belgium" +msgstr "比利时" + +#: build/Countries.java:24 +msgid "Burkina Faso" +msgstr "布基纳法索" + +#: build/Countries.java:25 +msgid "Bulgaria" +msgstr "ä¿åŠ 利亚" + +#: build/Countries.java:26 +msgid "Bahrain" +msgstr "å·´æž—" + +#: build/Countries.java:27 +msgid "Burundi" +msgstr "ä¸ä¸¹" + +#: build/Countries.java:28 +msgid "Benin" +msgstr "è´å®" + +#: build/Countries.java:29 +msgid "Bermuda" +msgstr "百慕大" + +#: build/Countries.java:30 +msgid "Brunei Darussalam" +msgstr "文莱达é²è¨å…°" + +#: build/Countries.java:31 +msgid "Bolivia" +msgstr "玻利维亚" + +#: build/Countries.java:32 +msgid "Brazil" +msgstr "巴西" + +#: build/Countries.java:33 +msgid "Bahamas" +msgstr "巴哈马" + +#: build/Countries.java:34 +msgid "Bhutan" +msgstr "ä¸ä¸¹" + +#: build/Countries.java:35 +msgid "Bouvet Island" +msgstr "布韦群岛" + +#: build/Countries.java:36 +msgid "Botswana" +msgstr "伯兹瓦纳" + +#: build/Countries.java:37 +msgid "Belarus" +msgstr "白俄罗斯" + +#: build/Countries.java:38 +msgid "Belize" +msgstr "伯利兹" + +#: build/Countries.java:39 +msgid "Canada" +msgstr "åŠ æ‹¿å¤§" + +#: build/Countries.java:40 +msgid "The Democratic Republic of the Congo" +msgstr "刚果" + +#: build/Countries.java:41 +msgid "Central African Republic" +msgstr "ä¸éž" + +#: build/Countries.java:42 +msgid "Congo" +msgstr "Congo" + +#: build/Countries.java:43 +msgid "Switzerland" +msgstr "瑞士" + +#: build/Countries.java:44 +msgid "Cote D'Ivoire" +msgstr "象牙海岸" + +#: build/Countries.java:45 +msgid "Cook Islands" +msgstr "库克群岛" + +#: build/Countries.java:46 +msgid "Chile" +msgstr "智利" + +#: build/Countries.java:47 +msgid "Cameroon" +msgstr "喀麦隆" + +#: build/Countries.java:48 +msgid "China" +msgstr "ä¸å›½" + +#: build/Countries.java:49 +msgid "Colombia" +msgstr "哥伦比亚" + +#: build/Countries.java:50 +msgid "Costa Rica" +msgstr "å“¥æ–¯è¾¾é»ŽåŠ " + +#: build/Countries.java:51 +msgid "Serbia and Montenegro" +msgstr "塞尔维亚与黑山" + +#: build/Countries.java:52 +msgid "Cuba" +msgstr "å¤å·´" + +#: build/Countries.java:53 +msgid "Cape Verde" +msgstr "佛得角" + +#: build/Countries.java:54 +msgid "Cyprus" +msgstr "塞浦路斯" + +#: build/Countries.java:55 +msgid "Czech Republic" +msgstr "æ·å…‹" + +#: build/Countries.java:56 +msgid "Germany" +msgstr "德国" + +#: build/Countries.java:57 +msgid "Djibouti" +msgstr "å‰å¸ƒæ" + +#: build/Countries.java:58 +msgid "Denmark" +msgstr "丹麦" + +#: build/Countries.java:59 +msgid "Dominica" +msgstr "多米尼" + +#: build/Countries.java:60 +msgid "Dominican Republic" +msgstr "å¤šç±³å°¼åŠ è”邦" + +#: build/Countries.java:61 +msgid "Algeria" +msgstr "阿尔åŠåˆ©äºš" + +#: build/Countries.java:62 +msgid "Ecuador" +msgstr "厄瓜多尔" + +#: build/Countries.java:63 +msgid "Estonia" +msgstr "爱沙尼亚" + +#: build/Countries.java:64 +msgid "Egypt" +msgstr "埃åŠ" + +#: build/Countries.java:65 +msgid "Eritrea" +msgstr "厄立特里亚" + +#: build/Countries.java:66 +msgid "Spain" +msgstr "西ç牙" + +#: build/Countries.java:67 +msgid "Ethiopia" +msgstr "埃塞俄比亚" + +#: build/Countries.java:68 +msgid "Finland" +msgstr "芬兰" + +#: build/Countries.java:69 +msgid "Fiji" +msgstr "æ–济" + +#: build/Countries.java:70 +msgid "Falkland Islands (Malvinas)" +msgstr "ç¦å…‹å…°ç¾¤å²›" + +#: build/Countries.java:71 +msgid "Federated States of Micronesia" +msgstr "密克罗尼西亚" + +#: build/Countries.java:72 +msgid "Faroe Islands" +msgstr "法罗群岛" + +#: build/Countries.java:73 +msgid "France" +msgstr "法国" + +#: build/Countries.java:74 +msgid "Gabon" +msgstr "åŠ è“¬" + +#: build/Countries.java:75 +msgid "United Kingdom" +msgstr "英国" + +#: build/Countries.java:76 +msgid "Grenada" +msgstr "æ ¼æž—çº³è¾¾" + +#: build/Countries.java:77 +msgid "Georgia" +msgstr "æ ¼é²å‰äºš" + +#: build/Countries.java:78 +msgid "French Guiana" +msgstr "åœäºšé‚£" + +#: build/Countries.java:79 +msgid "Ghana" +msgstr "åŠ çº³" + +#: build/Countries.java:80 +msgid "Gibraltar" +msgstr "直布罗陀" + +#: build/Countries.java:81 +msgid "Greenland" +msgstr "æ ¼é™µå…°ç¾¤å²›" + +#: build/Countries.java:82 +msgid "Gambia" +msgstr "冈比亚" + +#: build/Countries.java:83 +msgid "Guinea" +msgstr "å‡ å†…äºš" + +#: build/Countries.java:84 +msgid "Guadeloupe" +msgstr "瓜德罗普岛" + +#: build/Countries.java:85 +msgid "Equatorial Guinea" +msgstr "赤é“å‡ å†…äºš" + +#: build/Countries.java:86 +msgid "Greece" +msgstr "希腊" + +#: build/Countries.java:87 +msgid "South Georgia and the South Sandwich Islands" +msgstr "å—乔治亚岛和å—桑德韦奇岛" + +#: build/Countries.java:88 +msgid "Guatemala" +msgstr "å±åœ°é©¬æ‹‰" + +#: build/Countries.java:89 +msgid "Guam" +msgstr "关岛" + +#: build/Countries.java:90 +msgid "Guinea-Bissau" +msgstr "å‡ å†…äºšæ¯”ç»" + +#: build/Countries.java:91 +msgid "Guyana" +msgstr "åœäºšé‚£" + +#: build/Countries.java:92 +msgid "Hong Kong" +msgstr "香港" + +#: build/Countries.java:93 +msgid "Honduras" +msgstr "洪都拉斯" + +#: build/Countries.java:94 +msgid "Croatia" +msgstr "克罗蒂亚" + +#: build/Countries.java:95 +msgid "Haiti" +msgstr "海地" + +#: build/Countries.java:96 +msgid "Hungary" +msgstr "匈牙利" + +#: build/Countries.java:97 +msgid "Indonesia" +msgstr "å°å°¼" + +#: build/Countries.java:98 +msgid "Ireland" +msgstr "爱尔兰" + +#: build/Countries.java:99 +msgid "Israel" +msgstr "以色列" + +#: build/Countries.java:101 +msgid "India" +msgstr "å°åº¦" + +#: build/Countries.java:102 +msgid "British Indian Ocean Territory" +msgstr "英属å°åº¦æ´‹åœ°åŒº" + +#: build/Countries.java:103 +msgid "Iraq" +msgstr "伊拉克" + +#: build/Countries.java:104 +msgid "Islamic Republic of Iran" +msgstr "伊朗" + +#: build/Countries.java:105 +msgid "Iceland" +msgstr "冰岛" + +#: build/Countries.java:106 +msgid "Italy" +msgstr "æ„大利" + +#: build/Countries.java:108 +msgid "Jamaica" +msgstr "ç‰™ä¹°åŠ " + +#: build/Countries.java:109 +msgid "Jordan" +msgstr "约旦" + +#: build/Countries.java:110 +msgid "Japan" +msgstr "日本" + +#: build/Countries.java:111 +msgid "Kenya" +msgstr "肯尼亚" + +#: build/Countries.java:112 +msgid "Kyrgyzstan" +msgstr "å‰å°”å‰æ–¯æ–¯å¦" + +#: build/Countries.java:113 +msgid "Cambodia" +msgstr "柬埔塞" + +#: build/Countries.java:114 +msgid "Kiribati" +msgstr "基里巴斯" + +#: build/Countries.java:115 +msgid "Comoros" +msgstr "科摩罗" + +#: build/Countries.java:116 +msgid "Saint Kitts and Nevis" +msgstr "圣克里斯多ç¦ä¸Žå°¼ç»´æ–¯" + +#: build/Countries.java:117 +msgid "Republic of Korea" +msgstr "韩国" + +#: build/Countries.java:118 +msgid "Kuwait" +msgstr "科å¨ç‰¹" + +#: build/Countries.java:119 +msgid "Cayman Islands" +msgstr "开曼群岛" + +#: build/Countries.java:120 +msgid "Kazakhstan" +msgstr "哈è¨å…‹æ–¯å¦" + +#: build/Countries.java:121 +msgid "Lao People'S Democratic Republic" +msgstr "è€æŒ" + +#: build/Countries.java:122 +msgid "Lebanon" +msgstr "黎巴嫩" + +#: build/Countries.java:123 +msgid "Saint Lucia" +msgstr "圣露西亚岛" + +#: build/Countries.java:124 +msgid "Liechtenstein" +msgstr "列支敦士登" + +#: build/Countries.java:125 +msgid "Sri Lanka" +msgstr "斯里兰å¡" + +#: build/Countries.java:126 +msgid "Liberia" +msgstr "利比里亚" + +#: build/Countries.java:127 +msgid "Lesotho" +msgstr "莱索托" + +#: build/Countries.java:128 +msgid "Lithuania" +msgstr "立陶宛" + +#: build/Countries.java:129 +msgid "Luxembourg" +msgstr "å¢æ£®å ¡" + +#: build/Countries.java:130 +msgid "Latvia" +msgstr "拉脱维亚" + +#: build/Countries.java:131 +msgid "Libyan Arab Jamahiriya" +msgstr "利比亚" + +#: build/Countries.java:132 +msgid "Morocco" +msgstr "摩洛哥" + +#: build/Countries.java:133 +msgid "Monaco" +msgstr "摩纳哥" + +#: build/Countries.java:134 +msgid "Republic of Moldova" +msgstr "摩尔多瓦" + +#: build/Countries.java:137 +msgid "Madagascar" +msgstr "é©¬è¾¾åŠ æ–¯åŠ " + +#: build/Countries.java:138 +msgid "Marshall Islands" +msgstr "马ç»å°”群岛" + +#: build/Countries.java:139 +msgid "The Former Yugoslav Republic of Macedonia" +msgstr "å‰å—斯拉夫之马其顿共和国" + +#: build/Countries.java:140 +msgid "Mali" +msgstr "马里" + +#: build/Countries.java:141 +msgid "Myanmar" +msgstr "缅甸" + +#: build/Countries.java:142 +msgid "Mongolia" +msgstr "è’™å¤" + +#: build/Countries.java:143 +msgid "Macao" +msgstr "澳门" + +#: build/Countries.java:144 +msgid "Northern Mariana Islands" +msgstr "北马里亚纳群岛" + +#: build/Countries.java:145 +msgid "Martinique" +msgstr "马æ尼克岛" + +#: build/Countries.java:146 +msgid "Mauritania" +msgstr "毛里塔尼亚" + +#: build/Countries.java:147 +msgid "Montserrat" +msgstr "蒙特塞拉特" + +#: build/Countries.java:148 +msgid "Malta" +msgstr "马尔他" + +#: build/Countries.java:149 +msgid "Mauritius" +msgstr "毛里求斯" + +#: build/Countries.java:150 +msgid "Maldives" +msgstr "马尔代夫" + +#: build/Countries.java:151 +msgid "Malawi" +msgstr "马拉维" + +#: build/Countries.java:152 +msgid "Mexico" +msgstr "墨西哥" + +#: build/Countries.java:153 +msgid "Malaysia" +msgstr "马æ¥è¥¿äºš" + +#: build/Countries.java:154 +msgid "Mozambique" +msgstr "莫桑比克" + +#: build/Countries.java:155 +msgid "Namibia" +msgstr "纳米比亚" + +#: build/Countries.java:156 +msgid "New Caledonia" +msgstr "新喀里多尼亚" + +#: build/Countries.java:157 +msgid "Niger" +msgstr "尼日尔" + +#: build/Countries.java:158 +msgid "Norfolk Island" +msgstr "å°¼åŠ æ‹‰ç“œ" + +#: build/Countries.java:159 +msgid "Nigeria" +msgstr "尼日利亚" + +#: build/Countries.java:160 +msgid "Nicaragua" +msgstr "å°¼åŠ æ‹‰ç“œ" + +#: build/Countries.java:161 +msgid "Netherlands" +msgstr "è·å…°" + +#: build/Countries.java:162 +msgid "Norway" +msgstr "挪å¨" + +#: build/Countries.java:163 +msgid "Nepal" +msgstr "尼泊尔" + +#: build/Countries.java:164 +msgid "Nauru" +msgstr "ç‘™é²" + +#: build/Countries.java:165 +msgid "Niue" +msgstr "纽埃岛" + +#: build/Countries.java:166 +msgid "New Zealand" +msgstr "新西兰" + +#: build/Countries.java:167 +msgid "Oman" +msgstr "阿曼" + +#: build/Countries.java:168 +msgid "Panama" +msgstr "巴拿马" + +#: build/Countries.java:169 +msgid "Peru" +msgstr "秘é²" + +#: build/Countries.java:170 +msgid "French Polynesia" +msgstr "玻利尼西亚" + +#: build/Countries.java:171 +msgid "Papua New Guinea" +msgstr "å·´å¸ƒäºšæ–°å‡ å†…äºš" + +#: build/Countries.java:172 +msgid "Philippines" +msgstr "è²å¾‹å®¾" + +#: build/Countries.java:173 +msgid "Pakistan" +msgstr "巴基斯å¦" + +#: build/Countries.java:174 +msgid "Poland" +msgstr "波兰" + +#: build/Countries.java:175 +msgid "Saint Pierre and Miquelon" +msgstr "圣皮埃尔岛和密克隆" + +#: build/Countries.java:176 +msgid "Puerto Rico" +msgstr "波多黎å„" + +#: build/Countries.java:177 +msgid "Palestinian Territory" +msgstr "å·´å‹’æ–¯å¦åœ°åŒº" + +#: build/Countries.java:178 +msgid "Portugal" +msgstr "è‘¡è„牙" + +#: build/Countries.java:179 +msgid "Palau" +msgstr "帕劳" + +#: build/Countries.java:180 +msgid "Paraguay" +msgstr "巴拉åœ" + +#: build/Countries.java:181 +msgid "Qatar" +msgstr "å¡å¡”å°”" + +#: build/Countries.java:182 +msgid "Reunion" +msgstr "留尼汪岛" + +#: build/Countries.java:183 +msgid "Romania" +msgstr "罗马尼亚" + +#: build/Countries.java:184 +msgid "Serbia" +msgstr "塞尔维亚" + +#: build/Countries.java:185 +msgid "Russian Federation" +msgstr "ä¿„è”邦" + +#: build/Countries.java:186 +msgid "Rwanda" +msgstr "å¢æ—ºè¾¾" + +#: build/Countries.java:187 +msgid "Saudi Arabia" +msgstr "沙特阿拉伯" + +#: build/Countries.java:188 +msgid "Solomon Islands" +msgstr "所罗门群岛" + +#: build/Countries.java:189 +msgid "Seychelles" +msgstr "塞舌尔" + +#: build/Countries.java:190 +msgid "Sudan" +msgstr "è‹ä¸¹" + +#: build/Countries.java:191 +msgid "Sweden" +msgstr "ç‘žå…¸" + +#: build/Countries.java:192 +msgid "Singapore" +msgstr "æ–°åŠ å¡" + +#: build/Countries.java:193 +msgid "Slovenia" +msgstr "斯洛文尼亚" + +#: build/Countries.java:194 +msgid "Slovakia" +msgstr "斯洛ä¼å…‹" + +#: build/Countries.java:195 +msgid "Sierra Leone" +msgstr "塞拉利昂" + +#: build/Countries.java:196 +msgid "San Marino" +msgstr "圣马力诺" + +#: build/Countries.java:197 +msgid "Senegal" +msgstr "å¡žå†…åŠ å°”" + +#: build/Countries.java:198 +msgid "Somalia" +msgstr "索马里" + +#: build/Countries.java:199 +msgid "Suriname" +msgstr "è‹é‡Œå—" + +#: build/Countries.java:200 +msgid "Sao Tome and Principe" +msgstr "圣多美与普林西比共和国" + +#: build/Countries.java:201 +msgid "El Salvador" +msgstr "è¨å°”瓦多" + +#: build/Countries.java:202 +msgid "Syrian Arab Republic" +msgstr "å™åˆ©äºš" + +#: build/Countries.java:203 +msgid "Swaziland" +msgstr "æ–¯å¨å£«å…°" + +#: build/Countries.java:204 +msgid "Turks and Caicos Islands" +msgstr "特克斯和凯科斯群岛" + +#: build/Countries.java:205 +msgid "Chad" +msgstr "ä¹å¾—" + +#: build/Countries.java:206 +msgid "French Southern Territories" +msgstr "法属å—åŠçƒé¢†åœ°" + +#: build/Countries.java:207 +msgid "Togo" +msgstr "多哥" + +#: build/Countries.java:208 +msgid "Thailand" +msgstr "泰国" + +#: build/Countries.java:209 +msgid "Tajikistan" +msgstr "å¡”å‰å…‹æ–¯å¦" + +#: build/Countries.java:210 +msgid "Tokelau" +msgstr "托克劳群岛" + +#: build/Countries.java:211 +msgid "Timor-Leste" +msgstr "东å¸æ±¶" + +#: build/Countries.java:212 +msgid "Turkmenistan" +msgstr "土库曼斯å¦" + +#: build/Countries.java:213 +msgid "Tunisia" +msgstr "çªå°¼æ–¯" + +#: build/Countries.java:214 +msgid "Tonga" +msgstr "æ±¤åŠ " + +#: build/Countries.java:215 +msgid "Turkey" +msgstr "土耳其" + +#: build/Countries.java:216 +msgid "Trinidad and Tobago" +msgstr "特立尼达和多巴哥" + +#: build/Countries.java:217 +msgid "Tuvalu" +msgstr "图瓦é²" + +#: build/Countries.java:218 +msgid "Taiwan" +msgstr "å°æ¹¾" + +#: build/Countries.java:219 +msgid "United Republic of Tanzania" +msgstr "å¦æ¡‘尼亚" + +#: build/Countries.java:220 +msgid "Ukraine" +msgstr "乌克兰" + +#: build/Countries.java:221 +msgid "Uganda" +msgstr "乌干达" + +#: build/Countries.java:222 +msgid "United States Minor Outlying Islands" +msgstr "美国本土外å°å²›å±¿" + +#: build/Countries.java:223 +msgid "United States" +msgstr "美国" + +#: build/Countries.java:224 +msgid "Uruguay" +msgstr "乌拉åœ" + +#: build/Countries.java:225 +msgid "Uzbekistan" +msgstr "乌兹别克斯å¦" + +#: build/Countries.java:226 +msgid "Holy See (Vatican City State)" +msgstr "梵地冈" + +#: build/Countries.java:227 +msgid "Saint Vincent and the Grenadines" +msgstr "åœ£æ–‡æ£®ç‰¹å’Œæ ¼æž—çº³ä¸æ–¯" + +#: build/Countries.java:228 +msgid "Venezuela" +msgstr "委内瑞拉" + +#: build/Countries.java:229 +#: build/Countries.java:230 +msgid "Virgin Islands" +msgstr "维京群岛" + +#: build/Countries.java:231 +msgid "Viet Nam" +msgstr "越å—" + +#: build/Countries.java:232 +msgid "Vanuatu" +msgstr "瓦努阿图" + +#: build/Countries.java:233 +msgid "Wallis and Futuna" +msgstr "瓦利斯群岛和富图纳群岛" + +#: build/Countries.java:234 +msgid "Samoa" +msgstr "东è¨æ‘©äºš" + +#: build/Countries.java:235 +msgid "Yemen" +msgstr "也门" + +#: build/Countries.java:236 +msgid "Mayotte" +msgstr "马约特" + +#: build/Countries.java:237 +msgid "South Africa" +msgstr "å—éž" + +#: build/Countries.java:238 +msgid "Zambia" +msgstr "赞比亚" + +#: build/Countries.java:239 +msgid "Zimbabwe" +msgstr "津巴布韦" + #: src/net/i2p/router/web/ConfigAdvancedHandler.java:57 msgid "Error updating the configuration - please see the error logs" msgstr "é…置更新出错 - 请查看错误日志" @@ -1342,7 +2269,7 @@ msgstr "WebApp设置ä¿å˜æˆåŠŸ - 程åºé‡å¯åŽç”Ÿæ•ˆ" #: src/net/i2p/router/web/ConfigClientsHandler.java:129 #: src/net/i2p/router/web/ConfigClientsHelper.java:34 msgid "WebApp" -msgstr "Web程åº(WebApp)" +msgstr "Web程åº" #: src/net/i2p/router/web/ConfigClientsHandler.java:131 msgid "Failed to start" @@ -1463,7 +2390,7 @@ msgid "Peers" msgstr "节点" #: src/net/i2p/router/web/ConfigNavHelper.java:19 -#: src/net/i2p/router/web/NetDbRenderer.java:256 +#: src/net/i2p/router/web/NetDbRenderer.java:268 #: src/net/i2p/router/web/SummaryBarRenderer.java:124 msgid "Stats" msgstr "统计数æ®" @@ -1560,6 +2487,7 @@ msgstr "比特/秒" #: src/net/i2p/router/web/ConfigPeerHandler.java:33 #: src/net/i2p/router/web/ConfigPeerHandler.java:35 #: src/net/i2p/router/web/ProfileOrganizerRenderer.java:69 +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:175 #: src/net/i2p/router/web/TunnelRenderer.java:235 msgid "Peer" msgstr "节点" @@ -1604,7 +2532,7 @@ msgstr "立刻é‡å¯" #: src/net/i2p/router/web/ConfigRestartBean.java:43 msgid "Restart" -msgstr "é‡ å¯" +msgstr "é‡ã€€å¯" #: src/net/i2p/router/web/ConfigRestartBean.java:46 msgid "Shutdown" @@ -1710,6 +2638,10 @@ msgstr "统计数æ®è¿‡æ»¤å™¨åŠä½ç½®æˆåŠŸæ›´æ–°è‡³" msgid "Failed to update the stat filter and location" msgstr "统计数æ®è¿‡æ»¤å™¨åŠåœ°å€æ›´æ–°å¤±è´¥" +#: src/net/i2p/router/web/ConfigStatsHandler.java:121 +msgid "Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>" +msgstr "曲线图列表已更新,更新åŽçš„内容å¯èƒ½éœ€è¦æœ€å¤š 60s 的时间æ‰èƒ½åœ¨è¿™é‡ŒåŠ <a href=\"graphs.jsp\">统计图表</a>页é¢ä¸åæ˜ å‡ºæ¥ã€‚" + #: src/net/i2p/router/web/ConfigTunnelsHandler.java:137 msgid "Updated settings for all pools." msgstr "隧é“æ± æ›´æ–°å®Œæ¯•" @@ -1966,125 +2898,121 @@ msgstr "路由器" msgid "not found in network database" msgstr "在网络数æ®åº“概况未找到" -#: src/net/i2p/router/web/NetDbRenderer.java:86 -#: src/net/i2p/router/web/NetDbRenderer.java:135 +#: src/net/i2p/router/web/NetDbRenderer.java:82 +#: src/net/i2p/router/web/NetDbRenderer.java:134 msgid "Network Database Contents" msgstr "网络数æ®åº“内容" -#: src/net/i2p/router/web/NetDbRenderer.java:87 +#: src/net/i2p/router/web/NetDbRenderer.java:83 msgid "View RouterInfo" msgstr "æµè§ˆ RouterInfo" -#: src/net/i2p/router/web/NetDbRenderer.java:88 +#: src/net/i2p/router/web/NetDbRenderer.java:84 msgid "LeaseSets" -msgstr "èµé›†(LeaseSet)" +msgstr "èµé›†" -#: src/net/i2p/router/web/NetDbRenderer.java:96 +#: src/net/i2p/router/web/NetDbRenderer.java:92 msgid "LeaseSet" -msgstr "èµé›†(LeaseSet)" +msgstr "èµé›†" -#: src/net/i2p/router/web/NetDbRenderer.java:98 +#: src/net/i2p/router/web/NetDbRenderer.java:94 msgid "Local" msgstr "本地" -#: src/net/i2p/router/web/NetDbRenderer.java:100 +#: src/net/i2p/router/web/NetDbRenderer.java:96 msgid "Unpublished" msgstr "未å‘布" -#: src/net/i2p/router/web/NetDbRenderer.java:101 -#: src/net/i2p/router/web/NetDbRenderer.java:108 +#: src/net/i2p/router/web/NetDbRenderer.java:97 +#: src/net/i2p/router/web/NetDbRenderer.java:104 msgid "Destination" msgstr "ç›®æ ‡" -#: src/net/i2p/router/web/NetDbRenderer.java:118 +#: src/net/i2p/router/web/NetDbRenderer.java:114 #, java-format msgid "Expires in {0}" msgstr "{0} åŽè¿‡æœŸ" -#: src/net/i2p/router/web/NetDbRenderer.java:120 +#: src/net/i2p/router/web/NetDbRenderer.java:116 #, java-format msgid "Expired {0} ago" msgstr "{0}å‰è¿‡æœŸ" -#: src/net/i2p/router/web/NetDbRenderer.java:122 +#: src/net/i2p/router/web/NetDbRenderer.java:118 #: src/net/i2p/router/web/TunnelRenderer.java:156 msgid "Gateway" msgstr "网关" -#: src/net/i2p/router/web/NetDbRenderer.java:122 +#: src/net/i2p/router/web/NetDbRenderer.java:118 msgid "Lease" msgstr "租èµ" -#: src/net/i2p/router/web/NetDbRenderer.java:124 +#: src/net/i2p/router/web/NetDbRenderer.java:120 msgid "Tunnel" msgstr "隧é“" -#: src/net/i2p/router/web/NetDbRenderer.java:135 +#: src/net/i2p/router/web/NetDbRenderer.java:134 msgid "View LeaseSets" -msgstr "查看èµé›†(LeaseSet)" +msgstr "查看èµé›†" -#: src/net/i2p/router/web/NetDbRenderer.java:137 +#: src/net/i2p/router/web/NetDbRenderer.java:136 msgid "Not initialized" msgstr "未åˆå§‹åŒ–" -#: src/net/i2p/router/web/NetDbRenderer.java:143 +#: src/net/i2p/router/web/NetDbRenderer.java:145 msgid "Routers" msgstr "路由器" -#: src/net/i2p/router/web/NetDbRenderer.java:145 -msgid "view without" -msgstr "查看ä¸å«" - #: src/net/i2p/router/web/NetDbRenderer.java:147 -msgid "view with" -msgstr "查看å«" +msgid "Show all routers" +msgstr "显示所有路由器" -#: src/net/i2p/router/web/NetDbRenderer.java:148 -msgid "stats" -msgstr "统计" +#: src/net/i2p/router/web/NetDbRenderer.java:149 +msgid "Show all routers with full stats" +msgstr "显示所有路由åŠç»Ÿè®¡" -#: src/net/i2p/router/web/NetDbRenderer.java:183 -#: src/net/i2p/router/web/NetDbRenderer.java:199 +#: src/net/i2p/router/web/NetDbRenderer.java:187 +#: src/net/i2p/router/web/NetDbRenderer.java:203 msgid "Count" msgstr "计数" -#: src/net/i2p/router/web/NetDbRenderer.java:183 +#: src/net/i2p/router/web/NetDbRenderer.java:187 #: src/net/i2p/router/web/SummaryBarRenderer.java:150 msgid "Version" msgstr "版本" -#: src/net/i2p/router/web/NetDbRenderer.java:199 +#: src/net/i2p/router/web/NetDbRenderer.java:203 msgid "Country" msgstr "国家" -#: src/net/i2p/router/web/NetDbRenderer.java:222 +#: src/net/i2p/router/web/NetDbRenderer.java:234 msgid "Our info" msgstr "我方信æ¯" -#: src/net/i2p/router/web/NetDbRenderer.java:224 +#: src/net/i2p/router/web/NetDbRenderer.java:236 msgid "Peer info for" msgstr "节点信æ¯" -#: src/net/i2p/router/web/NetDbRenderer.java:228 +#: src/net/i2p/router/web/NetDbRenderer.java:240 msgid "Full entry" msgstr "完整项" -#: src/net/i2p/router/web/NetDbRenderer.java:234 +#: src/net/i2p/router/web/NetDbRenderer.java:246 msgid "Updated" msgstr "已更新" -#: src/net/i2p/router/web/NetDbRenderer.java:234 -#: src/net/i2p/router/web/NetDbRenderer.java:236 +#: src/net/i2p/router/web/NetDbRenderer.java:246 +#: src/net/i2p/router/web/NetDbRenderer.java:248 #: src/net/i2p/router/web/SummaryHelper.java:385 msgid "ago" msgstr "å‰" -#: src/net/i2p/router/web/NetDbRenderer.java:236 -#: src/net/i2p/router/web/NetDbRenderer.java:238 +#: src/net/i2p/router/web/NetDbRenderer.java:248 +#: src/net/i2p/router/web/NetDbRenderer.java:250 msgid "Published" msgstr "å‘布" -#: src/net/i2p/router/web/NetDbRenderer.java:239 +#: src/net/i2p/router/web/NetDbRenderer.java:251 msgid "Address(es)" msgstr "地å€" @@ -2167,6 +3095,66 @@ msgstr "节点信æ¯" msgid "Floodfill and Integrated Peers" msgstr "ç§å节点与整åˆèŠ‚点" +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:176 +msgid "Caps" +msgstr "容é‡" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:177 +msgid "Integ. Value" +msgstr "" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:178 +msgid "Last Heard About" +msgstr "" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:179 +msgid "Last Heard From" +msgstr "" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:180 +msgid "Last Good Send" +msgstr "上一次å‘é€æˆåŠŸ" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:181 +msgid "Last Bad Send" +msgstr "上一次å‘é€å¤±è´¥" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:182 +msgid "10m Resp. Time" +msgstr "10må“应时间" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:183 +msgid "1h Resp. Time" +msgstr "1hå“应时间" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:184 +msgid "1d Resp. Time" +msgstr "1då“应时间" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:185 +msgid "Last Good Lookup" +msgstr "上一次查询æˆåŠŸ" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:186 +msgid "Last Bad Lookup" +msgstr "上一次查询失败" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:187 +msgid "Last Good Store" +msgstr "上一次ä¿å˜æˆåŠŸ" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:188 +msgid "Last Bad Store" +msgstr "上一次ä¿å˜å¤±è´¥" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:189 +msgid "1h Fail Rate" +msgstr "1h失败率" + +#: src/net/i2p/router/web/ProfileOrganizerRenderer.java:190 +msgid "1d Fail Rate" +msgstr "1d失败率" + #: src/net/i2p/router/web/ProfileOrganizerRenderer.java:237 msgid "Thresholds:" msgstr "临界值:" @@ -2734,7 +3722,7 @@ msgstr "匿å网站" #: strings/Strings.java:37 msgid "I2PSnark" -msgstr "I2P Snark(匿åBT客户端)" +msgstr "I2P Snark" #: strings/Strings.java:40 msgid "classic" @@ -2748,6 +3736,12 @@ msgstr "暗色调" msgid "light" msgstr "亮色调" +#~ msgid "view without" +#~ msgstr "查看ä¸å«" +#~ msgid "view with" +#~ msgstr "查看å«" +#~ msgid "stats" +#~ msgstr "统计" #~ msgid "View" #~ msgstr "查看" #~ msgid "Not Failing" diff --git a/build.xml b/build.xml index d065d065520ff78651a90d5644be0bf02096d30f..bf7fe56763ca069d2e0fb95f3b36d53a7b11ec9e 100644 --- a/build.xml +++ b/build.xml @@ -410,6 +410,8 @@ <copy file="build/i2ptunnel.war" todir="pkg-temp/webapps/" /> <copy file="build/routerconsole.war" todir="pkg-temp/webapps/" /> <copy file="build/addressbook.war" todir="pkg-temp/webapps/" /> + <!-- decapitalized the file in 0.7.8 --> + <copy file="installer/resources/countries.txt" todir="pkg-temp/geoip/" /> </target> <target name="prepupdateRouter" depends="buildrouter, deletepkg-temp"> <copy file="build/i2p.jar" todir="pkg-temp/lib/" /> diff --git a/checklist.txt b/checklist.txt index dd97e29dff2fcbcd37e1d7857442061dcdcd0897..011c539df54ec2184068176b28ae02eebc057a49 100644 --- a/checklist.txt +++ b/checklist.txt @@ -8,9 +8,9 @@ Deploy the Jetty archive, a clean checkout lacks it Change revision in: history.txt - initialNews.xml + installer/resources/initialNews.xml installer/install.xml - news.xml + installer/resources/news.xml router/java/src/net/i2p/router/RouterVersion.java (change to BUILD = 0 and EXTRA = "") core/java/src/net/i2p/CoreVersion.java @@ -23,6 +23,8 @@ Verify that no untrusted revisions were inadvertently blessed by a trusted party: mtn log --brief --no-graph --to t:i2p-0.7.(xx-1) | cut -d ' ' -f 2- | sort +NOTE: Most tasks below here are now automated by 'ant release' + Build and tag: ant pkg mtn ci @@ -60,16 +62,18 @@ Generate PGP signatures: gpg -b i2pupdate-0.7.xx.zip gpg -b i2pupdate.sud +(end of tasks automated by 'ant release') + Distribute files to download locations and to www.i2p2.i2p Website files to change: Sync with mtn.i2p2.i2p announcements.html - announcements_de.html - download.html (change SHA256s) - download_de.html (change SHA256s) + announcements_*.html + download.html (change version numbers and SHA256s) + download_*.html (change version numbers and SHA256s) index.html - index_de.html + index_*.html hosts.txt (copy from mtn) release-x.y.z.html (new) Sync with mtn.i2p2.i2p diff --git a/history.txt b/history.txt index 864f4e5e5c09f0c7440828d8a8447c8324dca20e..b76f3f063e91f41181e46363428368bda8d65760 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,16 @@ +2009-11-08 zzz + * Console: + - countries.txt: Convert to mixed case, include in update + - netdb.jsp: Hide all routers by default, sort and tag country names + - oldstats.jsp: Move to stats.jsp + - profiles.jsp: Show new DBH times instead of counts + * Profiles: + - Track last good and bad lookup times + and last good and bad store times, + to prep for floodfill changes + - Don't reset last-heard-about at router startup + * Checklist and Android readme fixups + 2009-11-04 zzz * Build: - Move some files to installer/resources diff --git a/installer/resources/countries.txt b/installer/resources/countries.txt index c1ea54d83747f8174f63a80efeed7072c9feb101..c2d0e841c4b40a00c6ef033b547f244425a8de2c 100644 --- a/installer/resources/countries.txt +++ b/installer/resources/countries.txt @@ -1,237 +1,237 @@ -AD,ANDORRA -AE,UNITED ARAB EMIRATES -AF,AFGHANISTAN -AG,ANTIGUA AND BARBUDA -AI,ANGUILLA -AL,ALBANIA -AM,ARMENIA -AN,NETHERLANDS ANTILLES -AO,ANGOLA -AQ,ANTARCTICA -AR,ARGENTINA -AS,AMERICAN SAMOA -AT,AUSTRIA -AU,AUSTRALIA -AW,ARUBA +AD,Andorra +AE,United Arab Emirates +AF,Afghanistan +AG,Antigua and Barbuda +AI,Anguilla +AL,Albania +AM,Armenia +AN,Netherlands Antilles +AO,Angola +AQ,Antarctica +AR,Argentina +AS,American Samoa +AT,Austria +AU,Australia +AW,Aruba AX, -AZ,AZERBAIJAN -BA,BOSNIA AND HERZEGOVINA -BB,BARBADOS -BD,BANGLADESH -BE,BELGIUM -BF,BURKINA FASO -BG,BULGARIA -BH,BAHRAIN -BI,BURUNDI -BJ,BENIN -BM,BERMUDA -BN,BRUNEI DARUSSALAM -BO,BOLIVIA -BR,BRAZIL -BS,BAHAMAS -BT,BHUTAN -BV,BOUVET ISLAND -BW,BOTSWANA -BY,BELARUS -BZ,BELIZE -CA,CANADA -CD,THE DEMOCRATIC REPUBLIC OF THE CONGO -CF,CENTRAL AFRICAN REPUBLIC -CG,CONGO -CH,SWITZERLAND -CI,COTE D'IVOIRE -CK,COOK ISLANDS -CL,CHILE -CM,CAMEROON -CN,CHINA -CO,COLOMBIA -CR,COSTA RICA -CS,SERBIA AND MONTENEGRO -CU,CUBA -CV,CAPE VERDE -CY,CYPRUS -CZ,CZECH REPUBLIC -DE,GERMANY -DJ,DJIBOUTI -DK,DENMARK -DM,DOMINICA -DO,DOMINICAN REPUBLIC -DZ,ALGERIA -EC,ECUADOR -EE,ESTONIA -EG,EGYPT -ER,ERITREA -ES,SPAIN -ET,ETHIOPIA -FI,FINLAND -FJ,FIJI -FK,FALKLAND ISLANDS (MALVINAS) -FM,FEDERATED STATES OF MICRONESIA -FO,FAROE ISLANDS -FR,FRANCE -GA,GABON -GB,UNITED KINGDOM -GD,GRENADA -GE,GEORGIA -GF,FRENCH GUIANA -GH,GHANA -GI,GIBRALTAR -GL,GREENLAND -GM,GAMBIA -GN,GUINEA -GP,GUADELOUPE -GQ,EQUATORIAL GUINEA -GR,GREECE -GS,SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS -GT,GUATEMALA -GU,GUAM -GW,GUINEA-BISSAU -GY,GUYANA -HK,HONG KONG -HN,HONDURAS -HR,CROATIA -HT,HAITI -HU,HUNGARY -ID,INDONESIA -IE,IRELAND -IL,ISRAEL +AZ,Azerbaijan +BA,Bosnia and Herzegovina +BB,Barbados +BD,Bangladesh +BE,Belgium +BF,Burkina Faso +BG,Bulgaria +BH,Bahrain +BI,Burundi +BJ,Benin +BM,Bermuda +BN,Brunei Darussalam +BO,Bolivia +BR,Brazil +BS,Bahamas +BT,Bhutan +BV,Bouvet Island +BW,Botswana +BY,Belarus +BZ,Belize +CA,Canada +CD,The Democratic Republic of the Congo +CF,Central African Republic +CG,Congo +CH,Switzerland +CI,Cote D'Ivoire +CK,Cook Islands +CL,Chile +CM,Cameroon +CN,China +CO,Colombia +CR,Costa Rica +CS,Serbia and Montenegro +CU,Cuba +CV,Cape Verde +CY,Cyprus +CZ,Czech Republic +DE,Germany +DJ,Djibouti +DK,Denmark +DM,Dominica +DO,Dominican Republic +DZ,Algeria +EC,Ecuador +EE,Estonia +EG,Egypt +ER,Eritrea +ES,Spain +ET,Ethiopia +FI,Finland +FJ,Fiji +FK,Falkland Islands (Malvinas) +FM,Federated States of Micronesia +FO,Faroe Islands +FR,France +GA,Gabon +GB,United Kingdom +GD,Grenada +GE,Georgia +GF,French Guiana +GH,Ghana +GI,Gibraltar +GL,Greenland +GM,Gambia +GN,Guinea +GP,Guadeloupe +GQ,Equatorial Guinea +GR,Greece +GS,South Georgia and the South Sandwich Islands +GT,Guatemala +GU,Guam +GW,Guinea-Bissau +GY,Guyana +HK,Hong Kong +HN,Honduras +HR,Croatia +HT,Haiti +HU,Hungary +ID,Indonesia +IE,Ireland +IL,Israel IM, -IN,INDIA -IO,BRITISH INDIAN OCEAN TERRITORY -IQ,IRAQ -IR,ISLAMIC REPUBLIC OF IRAN -IS,ICELAND -IT,ITALY +IN,India +IO,British Indian Ocean Territory +IQ,Iraq +IR,Islamic Republic of Iran +IS,Iceland +IT,Italy JE, -JM,JAMAICA -JO,JORDAN -JP,JAPAN -KE,KENYA -KG,KYRGYZSTAN -KH,CAMBODIA -KI,KIRIBATI -KM,COMOROS -KN,SAINT KITTS AND NEVIS -KR,REPUBLIC OF KOREA -KW,KUWAIT -KY,CAYMAN ISLANDS -KZ,KAZAKHSTAN -LA,LAO PEOPLE'S DEMOCRATIC REPUBLIC -LB,LEBANON -LC,SAINT LUCIA -LI,LIECHTENSTEIN -LK,SRI LANKA -LR,LIBERIA -LS,LESOTHO -LT,LITHUANIA -LU,LUXEMBOURG -LV,LATVIA -LY,LIBYAN ARAB JAMAHIRIYA -MA,MOROCCO -MC,MONACO -MD,REPUBLIC OF MOLDOVA +JM,Jamaica +JO,Jordan +JP,Japan +KE,Kenya +KG,Kyrgyzstan +KH,Cambodia +KI,Kiribati +KM,Comoros +KN,Saint Kitts and Nevis +KR,Republic of Korea +KW,Kuwait +KY,Cayman Islands +KZ,Kazakhstan +LA,Lao People'S Democratic Republic +LB,Lebanon +LC,Saint Lucia +LI,Liechtenstein +LK,Sri Lanka +LR,Liberia +LS,Lesotho +LT,Lithuania +LU,Luxembourg +LV,Latvia +LY,Libyan Arab Jamahiriya +MA,Morocco +MC,Monaco +MD,Republic of Moldova ME, MF, -MG,MADAGASCAR -MH,MARSHALL ISLANDS -MK,THE FORMER YUGOSLAV REPUBLIC OF MACEDONIA -ML,MALI -MM,MYANMAR -MN,MONGOLIA -MO,MACAO -MP,NORTHERN MARIANA ISLANDS -MQ,MARTINIQUE -MR,MAURITANIA -MS,MONTSERRAT -MT,MALTA -MU,MAURITIUS -MV,MALDIVES -MW,MALAWI -MX,MEXICO -MY,MALAYSIA -MZ,MOZAMBIQUE -NA,NAMIBIA -NC,NEW CALEDONIA -NE,NIGER -NF,NORFOLK ISLAND -NG,NIGERIA -NI,NICARAGUA -NL,NETHERLANDS -NO,NORWAY -NP,NEPAL -NR,NAURU -NU,NIUE -NZ,NEW ZEALAND -OM,OMAN -PA,PANAMA -PE,PERU -PF,FRENCH POLYNESIA -PG,PAPUA NEW GUINEA -PH,PHILIPPINES -PK,PAKISTAN -PL,POLAND -PM,SAINT PIERRE AND MIQUELON -PR,PUERTO RICO -PS,PALESTINIAN TERRITORY -PT,PORTUGAL -PW,PALAU -PY,PARAGUAY -QA,QATAR -RE,REUNION -RO,ROMANIA -RS,SERBIA -RU,RUSSIAN FEDERATION -RW,RWANDA -SA,SAUDI ARABIA -SB,SOLOMON ISLANDS -SC,SEYCHELLES -SD,SUDAN -SE,SWEDEN -SG,SINGAPORE -SI,SLOVENIA -SK,SLOVAKIA -SL,SIERRA LEONE -SM,SAN MARINO -SN,SENEGAL -SO,SOMALIA -SR,SURINAME -ST,SAO TOME AND PRINCIPE -SV,EL SALVADOR -SY,SYRIAN ARAB REPUBLIC -SZ,SWAZILAND -TC,TURKS AND CAICOS ISLANDS -TD,CHAD -TF,FRENCH SOUTHERN TERRITORIES -TG,TOGO -TH,THAILAND -TJ,TAJIKISTAN -TK,TOKELAU -TL,TIMOR-LESTE -TM,TURKMENISTAN -TN,TUNISIA -TO,TONGA -TR,TURKEY -TT,TRINIDAD AND TOBAGO -TV,TUVALU -TW,TAIWAN -TZ,UNITED REPUBLIC OF TANZANIA -UA,UKRAINE -UG,UGANDA -UM,UNITED STATES MINOR OUTLYING ISLANDS -US,UNITED STATES -UY,URUGUAY -UZ,UZBEKISTAN -VA,HOLY SEE (VATICAN CITY STATE) -VC,SAINT VINCENT AND THE GRENADINES -VE,VENEZUELA -VG,VIRGIN ISLANDS -VI,VIRGIN ISLANDS -VN,VIET NAM -VU,VANUATU -WF,WALLIS AND FUTUNA -WS,SAMOA -YE,YEMEN -YT,MAYOTTE -ZA,SOUTH AFRICA -ZM,ZAMBIA -ZW,ZIMBABWE +MG,Madagascar +MH,Marshall Islands +MK,The Former Yugoslav Republic of Macedonia +ML,Mali +MM,Myanmar +MN,Mongolia +MO,Macao +MP,Northern Mariana Islands +MQ,Martinique +MR,Mauritania +MS,Montserrat +MT,Malta +MU,Mauritius +MV,Maldives +MW,Malawi +MX,Mexico +MY,Malaysia +MZ,Mozambique +NA,Namibia +NC,New Caledonia +NE,Niger +NF,Norfolk Island +NG,Nigeria +NI,Nicaragua +NL,Netherlands +NO,Norway +NP,Nepal +NR,Nauru +NU,Niue +NZ,New Zealand +OM,Oman +PA,Panama +PE,Peru +PF,French Polynesia +PG,Papua New Guinea +PH,Philippines +PK,Pakistan +PL,Poland +PM,Saint Pierre and Miquelon +PR,Puerto Rico +PS,Palestinian Territory +PT,Portugal +PW,Palau +PY,Paraguay +QA,Qatar +RE,Reunion +RO,Romania +RS,Serbia +RU,Russian Federation +RW,Rwanda +SA,Saudi Arabia +SB,Solomon Islands +SC,Seychelles +SD,Sudan +SE,Sweden +SG,Singapore +SI,Slovenia +SK,Slovakia +SL,Sierra Leone +SM,San Marino +SN,Senegal +SO,Somalia +SR,Suriname +ST,Sao Tome and Principe +SV,El Salvador +SY,Syrian Arab Republic +SZ,Swaziland +TC,Turks and Caicos Islands +TD,Chad +TF,French Southern Territories +TG,Togo +TH,Thailand +TJ,Tajikistan +TK,Tokelau +TL,Timor-Leste +TM,Turkmenistan +TN,Tunisia +TO,Tonga +TR,Turkey +TT,Trinidad and Tobago +TV,Tuvalu +TW,Taiwan +TZ,United Republic of Tanzania +UA,Ukraine +UG,Uganda +UM,United States Minor Outlying Islands +US,United States +UY,Uruguay +UZ,Uzbekistan +VA,Holy See (Vatican City State) +VC,Saint Vincent and the Grenadines +VE,Venezuela +VG,Virgin Islands +VI,Virgin Islands +VN,Viet Nam +VU,Vanuatu +WF,Wallis and Futuna +WS,Samoa +YE,Yemen +YT,Mayotte +ZA,South Africa +ZM,Zambia +ZW,Zimbabwe diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 3e5e8985dd5771e110f3b6c0871a03c61fb5e850..983dd2f06586d3fc8f617c2486d95f6e6c0b86ef 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 = 12; + public final static long BUILD = 13; /** for example "-test" */ public final static String EXTRA = ""; public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java index a09bc4860c69e1bad3816bef6725e768ee72d0bc..38efb714fbe0be63ed9c6ad1b7a4d72abdc257ef 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java @@ -90,7 +90,9 @@ class TransientDataStore implements DataStore { DataStructure old = null; old = _data.put(key, data); if (data instanceof RouterInfo) { - _context.profileManager().heardAbout(key); + // Don't do this here so we don't reset it at router startup; + // the StoreMessageJob calls this + //_context.profileManager().heardAbout(key); RouterInfo ri = (RouterInfo)data; if (old != null) { RouterInfo ori = (RouterInfo)old; diff --git a/router/java/src/net/i2p/router/peermanager/DBHistory.java b/router/java/src/net/i2p/router/peermanager/DBHistory.java index b941e6faaf55381fe307c4f5b9fb50268244b4da..38d06a8905964e7bca6fe0af14eded67c4edbbcc 100644 --- a/router/java/src/net/i2p/router/peermanager/DBHistory.java +++ b/router/java/src/net/i2p/router/peermanager/DBHistory.java @@ -26,6 +26,10 @@ public class DBHistory { private long _lookupsReceived; private long _avgDelayBetweenLookupsReceived; private long _lastLookupReceived; + private long _lastLookupSuccessful; + private long _lastLookupFailed; + private long _lastStoreSuccessful; + private long _lastStoreFailed; private long _unpromptedDbStoreNew; private long _unpromptedDbStoreOld; private String _statGroup; @@ -50,24 +54,47 @@ public class DBHistory { createRates(statGroup); } - /** how many times we have sent them a db lookup and received the value back from them */ + /** how many times we have sent them a db lookup and received the value back from them + * @deprecated unused + */ public long getSuccessfulLookups() { return _successfulLookups; } - /** how many times we have sent them a db lookup and not received the value or a lookup reply */ + /** how many times we have sent them a db lookup and not received the value or a lookup reply + * @deprecated unused + */ public long getFailedLookups() { return _failedLookups; } - /** how many peers that we have never seen before did lookups provide us with? */ + /** how many peers that we have never seen before did lookups provide us with? + * @deprecated unused + */ public long getLookupReplyNew() { return _lookupReplyNew; } - /** how many peers that we have already seen did lookups provide us with? */ + /** how many peers that we have already seen did lookups provide us with? + * @deprecated unused + */ public long getLookupReplyOld() { return _lookupReplyOld; } - /** how many peers that we explicitly asked the peer not to send us did they reply with? */ + /** how many peers that we explicitly asked the peer not to send us did they reply with? + * @deprecated unused + */ public long getLookupReplyDuplicate() { return _lookupReplyDuplicate; } - /** how many peers that were incorrectly formatted / expired / otherwise illegal did lookups provide us with? */ + /** how many peers that were incorrectly formatted / expired / otherwise illegal did lookups provide us with? + * @deprecated unused + */ public long getLookupReplyInvalid() { return _lookupReplyInvalid; } - /** how many lookups this peer has sent us? */ + /** how many lookups this peer has sent us? + * @deprecated unused + */ public long getLookupsReceived() { return _lookupsReceived; } - /** how frequently do they send us lookup requests? */ + /** how frequently do they send us lookup requests? + * @deprecated unused + */ public long getAvgDelayBetweenLookupsReceived() { return _avgDelayBetweenLookupsReceived; } - /** when did they last send us a request? */ + /** when did they last send us a request? + * @deprecated unused + */ public long getLastLookupReceived() { return _lastLookupReceived; } + public long getLastLookupSuccessful() { return _lastLookupSuccessful; } + public long getLastLookupFailed() { return _lastLookupFailed; } + public long getLastStoreSuccessful() { return _lastStoreSuccessful; } + public long getLastStoreFailed() { return _lastStoreFailed; } + /** how many times have they sent us data we didn't ask for and that we've never seen? */ public long getUnpromptedDbStoreNew() { return _unpromptedDbStoreNew; } /** how many times have they sent us data we didn't ask for but that we have seen? */ @@ -87,14 +114,37 @@ public class DBHistory { */ public void lookupSuccessful() { _successfulLookups++; + _lastLookupSuccessful = _context.clock().now(); } + /** * Note that the peer failed to respond to the db lookup in any way */ public void lookupFailed() { _failedLookups++; _failedLookupRate.addData(1, 0); + _lastLookupFailed = _context.clock().now(); } + + /** + * Note that we successfully stored to a floodfill peer and verified the result + * by asking another floodfill peer + * + */ + public void storeSuccessful() { + _lastStoreSuccessful = _context.clock().now(); + } + + /** + * Note that floodfill verify failed + */ + public void storeFailed() { + // Fixme, redefined this to include both lookup and store fails, + // need to fix the javadocs + _failedLookupRate.addData(1, 0); + _lastStoreFailed = _context.clock().now(); + } + /** * Receive a lookup reply from the peer, where they gave us the specified info * @@ -186,7 +236,7 @@ public class DBHistory { _invalidReplyRate.store(out, "dbHistory.invalidReplyRate"); } - private void add(StringBuilder buf, String name, long val, String description) { + private static void add(StringBuilder buf, String name, long val, String description) { buf.append("# ").append(name.toUpperCase()).append(NL).append("# ").append(description).append(NL); buf.append("dbHistory.").append(name).append('=').append(val).append(NL).append(NL); } @@ -224,8 +274,8 @@ public class DBHistory { _failedLookupRate = new RateStat("dbHistory.failedLookupRate", "How often does this peer to respond to a lookup?", statGroup, new long[] { 60*1000l, 60*60*1000l, 24*60*60*1000l }); if (_invalidReplyRate == null) _invalidReplyRate = new RateStat("dbHistory.invalidReplyRate", "How often does this peer give us a bad (nonexistant, forged, etc) peer?", statGroup, new long[] { 30*60*1000l, 60*60*1000l, 24*60*60*1000l }); - _failedLookupRate.setStatLog(_context.statManager().getStatLog()); - _invalidReplyRate.setStatLog(_context.statManager().getStatLog()); + _failedLookupRate.setStatLog(_context.statManager().getStatLog()); + _invalidReplyRate.setStatLog(_context.statManager().getStatLog()); } private final static long getLong(Properties props, String key) { diff --git a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java index 5da853c6190484f731228d185444b76897219d46..2b97e2df787a4868140bbb8d884d452d0b6a5b9e 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileManagerImpl.java @@ -249,15 +249,18 @@ public class ProfileManagerImpl implements ProfileManager { * Note that we've confirmed a successful send of db data to the peer (though we haven't * necessarily requested it again from them, so they /might/ be lying) * + * This will force creation of DB stats */ public void dbStoreSent(Hash peer, long responseTimeMs) { PeerProfile data = getProfile(peer); if (data == null) return; long now = _context.clock().now(); data.setLastHeardFrom(now); - if (!data.getIsExpandedDB()) - return; data.setLastSendSuccessful(now); + if (!data.getIsExpandedDB()) + data.expandDBProfile(); + DBHistory hist = data.getDBHistory(); + hist.storeSuccessful(); // we could do things like update some sort of "how many successful stores we've sent them"... // naah.. dont really care now } @@ -266,8 +269,15 @@ public class ProfileManagerImpl implements ProfileManager { * Note that we were unable to confirm a successful send of db data to * the peer, at least not within our timeout period * + * This will force creation of DB stats */ public void dbStoreFailed(Hash peer) { + PeerProfile data = getProfile(peer); + if (data == null) return; + if (!data.getIsExpandedDB()) + data.expandDBProfile(); + DBHistory hist = data.getDBHistory(); + hist.storeSuccessful(); // we could do things like update some sort of "how many successful stores we've // failed to send them"... } diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java index 4f64af95554f03b9f279c4438742e90091c9ecc6..debe7cff26b2a0fc07abadd697f36b7872bdab0d 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java @@ -329,6 +329,7 @@ class BuildHandler { } } + /** @return handle time or -1 */ private long handleRequest(BuildMessageState state) { long timeSinceReceived = System.currentTimeMillis()-state.recvTime; if (_log.shouldLog(Log.DEBUG))