merge of '3adba0cec6f0291ae90747ab22535290e64e6606'

and 'fd10b04ca3a6cf66e669bfad32d3011ed9f7e33c'
This commit is contained in:
str4d
2013-05-29 12:49:29 +00:00
78 changed files with 18612 additions and 28926 deletions

View File

@@ -376,10 +376,10 @@ class PeerCoordinator implements PeerListener
*/
public boolean needOutboundPeers() {
//return wantedBytes != 0 && needPeers();
// minus one to make it a little easier for new peers to get in on large swarms
// minus two to make it a little easier for new peers to get in on large swarms
return wantedBytes != 0 &&
!halted &&
peers.size() < getMaxConnections() - 1 &&
peers.size() < getMaxConnections() - 2 &&
(storage == null || !storage.isChecking());
}

View File

@@ -154,7 +154,7 @@ public class Storage
else
pc_size = DEFAULT_PIECE_SIZE;
int pcs = (int) ((total - 1)/pc_size) + 1;
while (pcs > MAX_PIECES && pc_size < MAX_PIECE_SIZE)
while (pcs > (MAX_PIECES * 2 / 3) && pc_size < MAX_PIECE_SIZE)
{
pc_size *= 2;
pcs = (int) ((total - 1)/pc_size) +1;

View File

@@ -263,7 +263,9 @@ public class I2PSnarkServlet extends BasicServlet {
out.write("<script src=\"/js/ajax.js\" type=\"text/javascript\"></script>\n" +
"<script type=\"text/javascript\">\n" +
"var failMessage = \"<div class=\\\"routerdown\\\"><b>" + _("Router is down") + "<\\/b><\\/div>\";\n" +
"function requestAjax1() { ajax(\"" + _contextPath + "/.ajax/xhr1.html" + peerString + "\", \"mainsection\", " + (delay*1000) + "); }\n" +
"function requestAjax1() { ajax(\"" + _contextPath + "/.ajax/xhr1.html" +
peerString.replace("&amp;", "&") + // don't html escape in js
"\", \"mainsection\", " + (delay*1000) + "); }\n" +
"function initAjax() { setTimeout(requestAjax1, " + (delay*1000) +"); }\n" +
"</script>\n");
}
@@ -378,7 +380,26 @@ public class I2PSnarkServlet extends BasicServlet {
out.write("<input type=\"hidden\" name=\"st\" value=\"" + stParam + "\" >\n");
}
out.write(TABLE_HEADER);
out.write("<img border=\"0\" src=\"" + _imgPath + "status.png\" title=\"");
// Opera and text-mode browsers: no &thinsp; and no input type=image values submitted
// Using a unique name fixes Opera, except for the buttons with js confirms, see below
String ua = req.getHeader("User-Agent");
boolean isDegraded = ua != null && (ua.startsWith("Lynx") || ua.startsWith("w3m") ||
ua.startsWith("ELinks") || ua.startsWith("Links") ||
ua.startsWith("Dillo"));
boolean noThinsp = isDegraded || (ua != null && ua.startsWith("Opera"));
// pages
int start = 0;
int total = snarks.size();
if (stParam != null) {
try {
start = Math.max(0, Math.min(total - 1, Integer.parseInt(stParam)));
} catch (NumberFormatException nfe) {}
}
int pageSize = Math.max(_manager.getPageSize(), 5);
out.write("<tr><th><img border=\"0\" src=\"" + _imgPath + "status.png\" title=\"");
out.write(_("Status"));
out.write("\" alt=\"");
out.write(_("Status"));
@@ -411,12 +432,15 @@ public class I2PSnarkServlet extends BasicServlet {
}
out.write("</a><br>\n");
}
out.write("</th>\n<th colspan=\"3\" align=\"left\">");
out.write("</th>\n<th colspan=\"2\" align=\"left\">");
out.write("<img border=\"0\" src=\"" + _imgPath + "torrent.png\" title=\"");
out.write(_("Torrent"));
out.write("\" alt=\"");
out.write(_("Torrent"));
out.write("\">");
out.write("\"></th>\n<th align=\"center\">");
if (total > 0 && (start > 0 || total > pageSize)) {
writePageNav(out, start, pageSize, total, peerParam, noThinsp);
}
out.write("</th>\n<th align=\"right\">");
if (_manager.util().connected() && !snarks.isEmpty()) {
out.write("<img border=\"0\" src=\"" + _imgPath + "eta.png\" title=\"");
@@ -462,14 +486,6 @@ public class I2PSnarkServlet extends BasicServlet {
}
out.write("</th>\n<th align=\"center\">");
// Opera and text-mode browsers: no &thinsp; and no input type=image values submitted
// Using a unique name fixes Opera, except for the buttons with js confirms, see below
String ua = req.getHeader("User-Agent");
boolean isDegraded = ua != null && (ua.startsWith("Lynx") || ua.startsWith("w3m") ||
ua.startsWith("ELinks") || ua.startsWith("Links") ||
ua.startsWith("Dillo"));
boolean noThinsp = isDegraded || (ua != null && ua.startsWith("Opera"));
if (_manager.isStopping()) {
out.write("&nbsp;");
} else if (_manager.util().connected()) {
@@ -500,18 +516,11 @@ public class I2PSnarkServlet extends BasicServlet {
} else {
out.write("&nbsp;");
}
out.write("</th></tr></thead>\n");
out.write("</th></tr>\n");
out.write("</thead>\n");
String uri = _contextPath + '/';
boolean showDebug = "2".equals(peerParam);
int start = 0;
int total = snarks.size();
if (stParam != null) {
try {
start = Math.max(0, Math.min(total - 1, Integer.parseInt(stParam)));
} catch (NumberFormatException nfe) {}
}
int pageSize = Math.max(_manager.getPageSize(), 5);
String stParamStr = stParam == null ? "" : "&amp;st=" + stParam;
for (int i = 0; i < total; i++) {
Snark snark = (Snark)snarks.get(i);
@@ -529,62 +538,6 @@ public class I2PSnarkServlet extends BasicServlet {
} else /** if (snarks.size() > 1) */ {
out.write("<tfoot><tr>\n" +
" <th align=\"left\" colspan=\"6\">");
// Page nav
if (start > 0) {
// First
out.write("&nbsp;<a href=\"" + _contextPath);
if (peerParam != null)
out.write("?p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("First") + "\" title=\"" + _("First page") + "\" border=\"0\" src=\"" +
_imgPath + "control_rewind_blue.png\">" +
"</a>&nbsp;");
int prev = Math.max(0, start - pageSize);
if (prev > 0) {
// Back
out.write("&nbsp;<a href=\"" + _contextPath + "?st=" + prev);
if (peerParam != null)
out.write("&p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("Prev") + "\" title=\"" + _("Previous page") + "\" border=\"0\" src=\"" +
_imgPath + "control_back_blue.png\">" +
"</a>&nbsp;");
}
}
// Page count
int pages = 1 + ((total - 1) / pageSize);
if (pages == 1 && start > 0)
pages = 2;
if (pages > 1) {
int page;
if (start + pageSize >= total)
page = pages;
else
page = 1 + (start / pageSize);
out.write("&nbsp;" + _("Page {0}", page) + thinsp(noThinsp) + pages + "&nbsp;");
}
if (start + pageSize < total) {
int next = start + pageSize;
if (next + pageSize < total) {
// Next
out.write("&nbsp;<a href=\"" + _contextPath + "?st=" + next);
if (peerParam != null)
out.write("&p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("Next") + "\" title=\"" + _("Next page") + "\" border=\"0\" src=\"" +
_imgPath + "control_play_blue.png\">" +
"</a>&nbsp;");
}
// Last
int last = ((total - 1) / pageSize) * pageSize;
out.write("&nbsp;<a href=\"" + _contextPath + "?st=" + last);
if (peerParam != null)
out.write("&p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("Last") + "\" title=\"" + _("Last page") + "\" border=\"0\" src=\"" +
_imgPath + "control_fastforward_blue.png\">" +
"</a>&nbsp;");
}
out.write("&nbsp;");
out.write(_("Totals"));
out.write(":&nbsp;");
@@ -624,6 +577,87 @@ public class I2PSnarkServlet extends BasicServlet {
return start == 0;
}
/**
* @since 0.9.6
*/
private void writePageNav(PrintWriter out, int start, int pageSize, int total,
String peerParam, boolean noThinsp) {
// Page nav
if (start > 0) {
// First
out.write("<a href=\"" + _contextPath);
if (peerParam != null)
out.write("?p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("First") + "\" title=\"" + _("First page") + "\" border=\"0\" src=\"" +
_imgPath + "control_rewind_blue.png\">" +
"</a>&nbsp;");
int prev = Math.max(0, start - pageSize);
//if (prev > 0) {
if (true) {
// Back
out.write("&nbsp;<a href=\"" + _contextPath + "?st=" + prev);
if (peerParam != null)
out.write("&amp;p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("Prev") + "\" title=\"" + _("Previous page") + "\" border=\"0\" src=\"" +
_imgPath + "control_back_blue.png\">" +
"</a>&nbsp;");
}
} else {
out.write(
"<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
_imgPath + "control_rewind_blue.png\">" +
"&nbsp;" +
"<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
_imgPath + "control_back_blue.png\">" +
"&nbsp;");
}
// Page count
int pages = 1 + ((total - 1) / pageSize);
if (pages == 1 && start > 0)
pages = 2;
if (pages > 1) {
int page;
if (start + pageSize >= total)
page = pages;
else
page = 1 + (start / pageSize);
//out.write("&nbsp;" + _("Page {0}", page) + thinsp(noThinsp) + pages + "&nbsp;");
out.write("&nbsp;&nbsp;" + page + thinsp(noThinsp) + pages + "&nbsp;&nbsp;");
}
if (start + pageSize < total) {
int next = start + pageSize;
//if (next + pageSize < total) {
if (true) {
// Next
out.write("&nbsp;<a href=\"" + _contextPath + "?st=" + next);
if (peerParam != null)
out.write("&amp;p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("Next") + "\" title=\"" + _("Next page") + "\" border=\"0\" src=\"" +
_imgPath + "control_play_blue.png\">" +
"</a>&nbsp;");
}
// Last
int last = ((total - 1) / pageSize) * pageSize;
out.write("&nbsp;<a href=\"" + _contextPath + "?st=" + last);
if (peerParam != null)
out.write("&amp;p=" + peerParam);
out.write("\">" +
"<img alt=\"" + _("Last") + "\" title=\"" + _("Last page") + "\" border=\"0\" src=\"" +
_imgPath + "control_fastforward_blue.png\">" +
"</a>&nbsp;");
} else {
out.write("&nbsp;" +
"<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
_imgPath + "control_play_blue.png\">" +
"&nbsp;" +
"<img alt=\"\" border=\"0\" class=\"disable\" src=\"" +
_imgPath + "control_fastforward_blue.png\">");
}
}
/**
* Do what they ask, adding messages to _manager.addMessage as necessary
*/
@@ -2139,11 +2173,27 @@ public class I2PSnarkServlet extends BasicServlet {
private static final String TABLE_HEADER = "<table border=\"0\" class=\"snarkTorrents\" width=\"100%\" >\n" +
"<thead>\n" +
"<tr><th>";
"<thead>\n";
private static final String FOOTER = "</div></center></body></html>";
/**
* Sort alphabetically in current locale, ignore case,
* directories first
* @since 0.9.6
*/
private static class ListingComparator implements Comparator<File> {
private final Comparator collator = Collator.getInstance();
public int compare(File l, File r) {
if (l.isDirectory() && !r.isDirectory())
return -1;
if (r.isDirectory() && !l.isDirectory())
return 1;
return collator.compare(l.getName(), r.getName());
}
}
/**
* Modded heavily from the Jetty version in Resource.java,
* pass Resource as 1st param
@@ -2177,10 +2227,10 @@ public class I2PSnarkServlet extends BasicServlet {
private String getListHTML(File r, String base, boolean parent, Map postParams)
throws IOException
{
String[] ls = null;
File[] ls = null;
if (r.isDirectory()) {
ls = r.list();
Arrays.sort(ls, Collator.getInstance());
ls = r.listFiles();
Arrays.sort(ls, new ListingComparator());
} // if r is not a directory, we are only showing torrent info section
String title = decodePath(base);
@@ -2256,7 +2306,9 @@ public class I2PSnarkServlet extends BasicServlet {
}
List<List<String>> alist = meta.getAnnounceList();
if (alist != null) {
buf.append("<tr><td><b>");
buf.append("<tr><td>" +
"<img alt=\"\" border=\"0\" src=\"")
.append(_imgPath).append("details.png\"> <b>");
buf.append(_("Tracker List")).append(":</b> ");
for (List<String> alist2 : alist) {
buf.append('[');
@@ -2388,12 +2440,12 @@ public class I2PSnarkServlet extends BasicServlet {
boolean showSaveButton = false;
for (int i=0 ; i< ls.length ; i++)
{
String encoded = encodePath(ls[i]);
String encoded = encodePath(ls[i].getName());
// bugfix for I2P - Backport from Jetty 6 (zero file lengths and last-modified times)
// http://jira.codehaus.org/browse/JETTY-361?page=com.atlassian.jira.plugin.system.issuetabpanels%3Achangehistory-tabpanel#issue-tabs
// See resource.diff attachment
//Resource item = addPath(encoded);
File item = new File(r, ls[i]);
File item = ls[i];
String rowClass = (i % 2 == 0 ? "snarkTorrentEven" : "snarkTorrentOdd");
buf.append("<TR class=\"").append(rowClass).append("\">");
@@ -2404,7 +2456,7 @@ public class I2PSnarkServlet extends BasicServlet {
long length = item.length();
if (item.isDirectory()) {
complete = true;
status = toImg("tick") + ' ' + _("Directory");
//status = toImg("tick") + ' ' + _("Directory");
} else {
if (snark == null || snark.getStorage() == null) {
// Assume complete, perhaps he removed a completed torrent but kept a bookmark
@@ -2468,7 +2520,7 @@ public class I2PSnarkServlet extends BasicServlet {
.append(rowClass).append("\">");
if (complete)
buf.append("<a href=\"").append(path).append("\">");
buf.append(ls[i]);
buf.append(item.getName());
if (complete)
buf.append("</a>");
buf.append("</TD><TD ALIGN=right class=\"").append(rowClass).append(" snarkFileSize\">");

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -72,6 +72,11 @@ public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
"\r\n")
.getBytes();
private static final String[] BAD_PROTOCOLS = {
"GET ", "HEAD ", "POST ", "GNUTELLA CONNECT", "\023BitTorrent protocol"
};
/**
* @throws IllegalArgumentException if the I2PTunnel does not contain
* valid config to contact the router
@@ -193,6 +198,12 @@ public class I2PTunnelIRCServer extends I2PTunnelServer implements Runnable {
String s = DataHelper.readLine(in);
if (s == null)
throw new IOException("EOF reached before the end of the headers [" + buf.toString() + "]");
if (lineCount == 0) {
for (int i = 0; i < BAD_PROTOCOLS.length; i++) {
if (s.startsWith(BAD_PROTOCOLS[i]))
throw new IOException("Bad protocol " + BAD_PROTOCOLS[i]);
}
}
if (++lineCount > 10)
throw new IOException("Too many lines before USER or SERVER, giving up");
if (System.currentTimeMillis() > expire)

View File

@@ -4,21 +4,21 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# blabla, 2011.
# <blabla@trash-mail.com>, 2011-2012.
# D.A. Loader <>, 2012.
# <driz@i2pmail.org>, 2012.
# ducki2p <ducki2p@gmail.com>, 2011.
# foo <foo@bar>, 2009.
# mixxy, 2011.
# <pirr@tormail.org>, 2012.
# <zeroflag@i2pmail.org>, 2013.
# blabla, 2011
# blabla <blabla@trash-mail.com>, 2011-2012
# D.A. Loader <>, 2012
# driz <driz@i2pmail.org>, 2012
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# mixxy, 2011
# pirr <pirr@tormail.org>, 2012
# zeroflag <zeroflag@i2pmail.org>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-22 13:13+0000\n"
"PO-Revision-Date: 2013-02-07 20:04+0000\n"
"POT-Creation-Date: 2013-05-15 22:00+0000\n"
"PO-Revision-Date: 2013-05-08 13:15+0000\n"
"Last-Translator: zeroflag <zeroflag@i2pmail.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/"
"de/)\n"
@@ -28,15 +28,15 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:558
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
msgid "This seems to be a bad destination:"
msgstr "Dies scheint kein gültiges Ziel zu sein:"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:558
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:571
msgid "i2paddresshelper cannot help you with a destination like that!"
msgstr "Der I2P-Adresshelfer kann dir bei solch einem Ziel nicht helfen."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:625
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:638
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
@@ -47,7 +47,7 @@ msgstr ""
"\"{0}\">hier</a>, und um das Ziel aus der kollidierenden Adresshelfer-"
"Anfrage zu besuchen, <a href=\"{1}\">hier</a>!"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1029
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1042
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:410
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:159
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:426
@@ -55,41 +55,41 @@ msgstr ""
msgid "Host"
msgstr "Host"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1033
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046
msgid "Base 32"
msgstr "Base 32"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1037
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:377
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1050
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:376
msgid "Destination"
msgstr "Ziel"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1043
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1056
#, java-format
msgid "Continue to {0} without saving"
msgstr "Weiter zu {0}, ohne zu speichern"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1048
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1061
#, java-format
msgid "Save {0} to router address book and continue to eepsite"
msgstr "{0} im Router-Adressbuch speichern und auf die Eepseite weiterleiten"
#. only blockfile supports multiple books
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1051
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1064
#, java-format
msgid "Save {0} to master address book and continue to eepsite"
msgstr "{0} im Master-Adressbuch speichern und auf die Eepseite weiterleiten"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1052
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1065
#, java-format
msgid "Save {0} to private address book and continue to eepsite"
msgstr "{0} im privaten Adressbuch speichern und auf die Eepseite weiterleiten"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1166
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1179
msgid "HTTP Outproxy"
msgstr "HTTP-Outproxy"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1171
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1184
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr ""
@@ -97,7 +97,7 @@ msgstr ""
"Adresshelfer von einem \"Sprung\"-Service:"
#. Translators: parameter is a host name
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1207
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1220
#, java-format
msgid "{0} jump service"
msgstr "Weiterleitungsdienst {0}"
@@ -265,7 +265,7 @@ msgid "HTTP bidir"
msgstr "HTTP Bidir"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:603
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:302
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:301
msgid "Host not set"
msgstr "Host nicht gesetzt"
@@ -289,23 +289,23 @@ msgstr "Neue Proxyeinstellungen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:129
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:126
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:140
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:259
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:274
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:326
msgid "Name"
msgstr "Name"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:133
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:133
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:264
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:291
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:263
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:290
msgid "Type"
msgstr "Typ"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:402
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330
msgid "Description"
msgstr "Beschreibung"
@@ -572,8 +572,8 @@ msgstr "I2CP-Adresse des Routers"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:418
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:165
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:262
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:261
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:283
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:431
msgid "Port"
msgstr "Port"
@@ -717,15 +717,15 @@ msgstr "Signatur des Namens"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:353
msgid "4 in, 4 out (high traffic server)"
msgstr ""
msgstr "4 eingehend, 4 ausgehend (Server mit großem Datenverkehr)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:357
msgid "5 in, 5 out (high traffic server)"
msgstr ""
msgstr "5 eingehend, 5 ausgehend (Server mit großem Datenverkehr)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:361
msgid "6 in, 6 out (high traffic server)"
msgstr ""
msgstr "6 eingehend, 6 ausgehend (Server mit großem Datenverkehr)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:442
msgid "Encrypt Leaseset"
@@ -861,65 +861,65 @@ msgid "I2P Server Tunnels"
msgstr "I2P-Servertunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:128
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:149
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:148
msgid "Points at"
msgstr "Läuft auf"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:171
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:175
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:170
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "Preview"
msgstr "Vorschau"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:132
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:195
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:268
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:309
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:267
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:308
msgid "Status"
msgstr "Status"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:181
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
msgid "Base32 Address"
msgstr "Basis-32-Adresse"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:189
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:188
msgid "No Preview"
msgstr "Keine Vorschau"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:202
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:315
msgid "Starting..."
msgstr "Starte ..."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:209
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:323
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:337
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:351
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:322
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:336
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:350
msgid "Stop"
msgstr "Stopp"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:216
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:344
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:343
msgid "Running"
msgstr "Aktiv"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:230
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:358
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:357
msgid "Stopped"
msgstr "Gestoppt"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:365
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:364
msgid "Start"
msgstr "Start"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:252
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
msgid "New server tunnel"
msgstr "Neuer Servertunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:254
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:412
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:411
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295
@@ -928,33 +928,33 @@ msgstr "Neuer Servertunnel"
msgid "Standard"
msgstr "Standard"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:256
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:414
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:255
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:413
msgid "Create"
msgstr "Erstellen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:258
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257
msgid "I2P Client Tunnels"
msgstr "I2P-Klienten-Tunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:295
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:294
msgid "Interface"
msgstr "Interface"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:330
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:329
msgid "Standby"
msgstr "Wartestellung"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:374
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:373
msgid "Outproxy"
msgstr "Ausgehender Proxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:396
msgid "none"
msgstr "Keiner"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:410
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:409
msgid "New client tunnel"
msgstr "Neuer Kliententunnel"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-04-25 14:51+0000\n"
"POT-Creation-Date: 2013-05-15 21:57+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -47,7 +47,7 @@ msgid "Base 32"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1050
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:377
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:376
msgid "Destination"
msgstr ""
@@ -242,7 +242,7 @@ msgid "HTTP bidir"
msgstr ""
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:603
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:302
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:301
msgid "Host not set"
msgstr ""
@@ -266,23 +266,23 @@ msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:129
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:126
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:140
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:260
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:275
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:259
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:274
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:326
msgid "Name"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:133
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:133
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:264
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:291
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:263
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:290
msgid "Type"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:137
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:402
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:243
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330
msgid "Description"
msgstr ""
@@ -533,8 +533,8 @@ msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:418
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:165
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:262
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:261
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:283
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:431
msgid "Port"
msgstr ""
@@ -822,65 +822,65 @@ msgid "I2P Server Tunnels"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:128
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:149
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:148
msgid "Points at"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:130
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:171
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:175
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:170
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:174
msgid "Preview"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:132
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:195
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:268
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:309
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:194
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:267
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:308
msgid "Status"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:181
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:180
msgid "Base32 Address"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:189
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:188
msgid "No Preview"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:202
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:201
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:315
msgid "Starting..."
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:209
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:323
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:337
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:351
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:208
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:222
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:322
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:336
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:350
msgid "Stop"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:216
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:344
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:215
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:343
msgid "Running"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:230
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:358
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:229
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:357
msgid "Stopped"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:237
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:365
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:364
msgid "Start"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:252
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251
msgid "New server tunnel"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:254
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:412
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:411
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295
@@ -889,33 +889,33 @@ msgstr ""
msgid "Standard"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:256
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:414
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:255
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:413
msgid "Create"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:258
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257
msgid "I2P Client Tunnels"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:295
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:294
msgid "Interface"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:330
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:329
msgid "Standby"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:374
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:373
msgid "Outproxy"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:397
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:396
msgid "none"
msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:410
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:409
msgid "New client tunnel"
msgstr ""

View File

@@ -50,7 +50,12 @@ public class ConfigNetHelper extends HelperBase {
return ua.getHost();
}
/**
* To reduce confusion caused by NATs, this is the current internal SSU port,
* not the external port.
*/
public String getUdpPort() {
/****
RouterAddress addr = _context.router().getRouterInfo().getTargetAddress("SSU");
if (addr == null)
return _("unknown");
@@ -58,8 +63,17 @@ public class ConfigNetHelper extends HelperBase {
if (ua.getPort() <= 0)
return _("unknown");
return "" + ua.getPort();
****/
// Since we can't get to UDPTransport.getRequestedPort() from here, just use
// configured port. If UDPTransport is changed such that the actual port
// could be different, fix this.
return getConfiguredUdpPort();
}
/**
* This should always be the actual internal SSU port, as UDPTransport udpates
* the config when it changes.
*/
public String getConfiguredUdpPort() {
return _context.getProperty(UDPTransport.PROP_INTERNAL_PORT, "unset");
}

View File

@@ -123,7 +123,7 @@ public class FileDumpHelper extends HelperBase {
if (s != null && s.length() > 20) {
if (iv != null)
buf.append("<br>");
buf.append("<a href=\"http://stats.i2p/cgi-bin/viewmtn/revision/info/").append(s)
buf.append("<a href=\"http://killyourtv.i2p/viewmtn/revision/info/").append(s)
.append("\">" +
"<tt>").append(s.substring(0, 20)).append("</tt>" +
"<br>" +

View File

@@ -869,10 +869,11 @@ public class RouterConsoleRunner implements RouterApp {
*/
private static class CustomThreadPoolExecutor extends ExecutorThreadPool {
public CustomThreadPoolExecutor() {
super(MIN_THREADS, MAX_THREADS, MAX_IDLE_TIME, TimeUnit.MILLISECONDS,
new SynchronousQueue() /** , following args not available in Jetty 7
new CustomThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy() **/
super(new ThreadPoolExecutor(
MIN_THREADS, MAX_THREADS, MAX_IDLE_TIME, TimeUnit.MILLISECONDS,
new SynchronousQueue(),
new CustomThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy())
);
}
}

View File

@@ -1,36 +1,36 @@
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config advanced")%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()">
<%@include file="summary.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHelper" id="advancedhelper" scope="request" />
<jsp:setProperty name="advancedhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<h1><%=intl._("I2P Advanced Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %>
<div class="configure">
<div class="wideload">
<form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="blah" >
<h3><%=intl._("Advanced I2P Configuration")%></h3>
<textarea rows="32" cols="60" name="config" wrap="off" spellcheck="false"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
<div class="formaction">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
<br><b><%=intl._("NOTE")%>:</b> <%=intl._("Some changes may require a restart to take effect.")%>
</div></form></div></div></div></body></html>
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config advanced")%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()">
<%@include file="summary.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHelper" id="advancedhelper" scope="request" />
<jsp:setProperty name="advancedhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<h1><%=intl._("I2P Advanced Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigAdvancedHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %>
<div class="configure">
<div class="wideload">
<form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="blah" >
<h3><%=intl._("Advanced I2P Configuration")%></h3>
<textarea rows="32" cols="60" name="config" wrap="off" spellcheck="false"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
<div class="formaction">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
<br><b><%=intl._("NOTE")%>:</b> <%=intl._("Some changes may require a restart to take effect.")%>
</div></form></div></div></div></body></html>

View File

@@ -1,53 +1,53 @@
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config logging")%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()">
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHelper" id="logginghelper" scope="request" />
<jsp:setProperty name="logginghelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Logging Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %>
<div class="configure">
<form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="blah" >
<h3><%=intl._("Configure I2P Logging Options")%></h3>
<div class="wideload">
<table border="0" cellspacing="5">
<tr><td class="mediumtags" align="right"><b><%=intl._("Log file")%>:</b></td>
<td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" >
<br> <i><%=intl._("(the symbol '@' will be replaced during log rotation)")%></i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log record format")%>:</b></td>
<td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" >
<br> <i><%=intl._("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%>
</i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log date format")%>:</b></td>
<td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" >
<br> <i><%=intl._("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%>
</i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Max log file size")%>:</b></td>
<td><input type="text" name="logfilesize" size="10" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" ><br></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Default log level")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i><%=intl._("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%>
</i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log level overrides")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("New override")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
</tr><tr><td colspan="2"><hr></td>
</tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</div></td></tr></table></div></form></div></div></body></html>
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config logging")%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()">
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHelper" id="logginghelper" scope="request" />
<jsp:setProperty name="logginghelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Logging Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %>
<div class="configure">
<form action="" method="POST">
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<input type="hidden" name="action" value="blah" >
<h3><%=intl._("Configure I2P Logging Options")%></h3>
<div class="wideload">
<table border="0" cellspacing="5">
<tr><td class="mediumtags" align="right"><b><%=intl._("Log file")%>:</b></td>
<td><input type="text" name="logfilename" size="40" value="<jsp:getProperty name="logginghelper" property="logFilePattern" />" >
<br> <i><%=intl._("(the symbol '@' will be replaced during log rotation)")%></i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log record format")%>:</b></td>
<td><input type="text" name="logformat" size="20" value="<jsp:getProperty name="logginghelper" property="recordPattern" />" >
<br> <i><%=intl._("(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)")%>
</i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log date format")%>:</b></td>
<td><input type="text" name="logdateformat" size="20" value="<jsp:getProperty name="logginghelper" property="datePattern" />" >
<br> <i><%=intl._("('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' = millisecond)")%>
</i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Max log file size")%>:</b></td>
<td><input type="text" name="logfilesize" size="10" value="<jsp:getProperty name="logginghelper" property="maxFileSize" />" ><br></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Default log level")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="defaultLogLevelBox" /><br><i><%=intl._("(DEBUG and INFO are not recommended defaults, as they will drastically slow down your router)")%>
</i></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("Log level overrides")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="logLevelTable" /></td>
</tr><tr><td class="mediumtags" align="right"><b><%=intl._("New override")%>:</b></td>
<td><jsp:getProperty name="logginghelper" property="newClassBox" /></td>
</tr><tr><td colspan="2"><hr></td>
</tr><tr class="tablefooter"><td colspan="2"> <div class="formaction">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</div></td></tr></table></div></form></div></div></body></html>

View File

@@ -1,152 +1,152 @@
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config stats")%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
<script type="text/javascript">
function init()
{
checkAll = false;
initAjax();
}
function toggleAll(category)
{
var inputs = document.getElementsByTagName("input");
for(index = 0; index < inputs.length; index++)
{
var classes = inputs[index].className.split(' ');
for (var idx = 0; idx < classes.length; idx++)
{
if(classes[idx] == category)
{
if(inputs[index].checked == 0)
{
inputs[index].checked = 1;
}
else if(inputs[index].checked == 1)
{
inputs[index].checked = 0;
}
}
}
if(category == '*')
{
if (checkAll == false)
{
inputs[index].checked = 1;
}
else if (checkAll == true)
{
inputs[index].checked = 0;
}
}
}
if(category == '*')
{
if (checkAll == false)
{
checkAll = true;
}
else if (checkAll == true)
{
checkAll = false;
}
}
}
</script>
</head><body onLoad="init();">
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Stats Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigStatsHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigStatsHelper" id="statshelper" scope="request" />
<jsp:setProperty name="statshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<div class="configure">
<form id="statsForm" name="statsForm" action="" method="POST">
<input type="hidden" name="action" value="foo" >
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<h3><%=intl._("Configure I2P Stat Collection")%></h3>
<p><%=intl._("Enable full stats?")%>
<input type="checkbox" class="optbox" name="isFull" value="true" <%
if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
(<%=intl._("change requires restart to take effect")%>)<br>
<%
// stats.log for devs only and grows without bounds, not recommended
boolean shouldShowLog = statshelper.shouldShowLog();
if (shouldShowLog) {
%><%=intl._("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" ><br>
Warning - Log with care, stat file grows without limit.<br>
<%
} // shouldShowLog
%><%=intl._("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._("toggle all")%></a>)<br></p>
<div class="wideload">
<table>
<% while (statshelper.hasMoreStats()) {
while (statshelper.groupRequired()) { %>
<tr class="tablefooter">
<td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
<b><%=intl._(statshelper.getCurrentGroupName())%></b>
(<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._("toggle all")%></a>)
</td></tr>
<tr class="tablefooter">
<%
if (shouldShowLog) {
%> <td align="center"><b><%=intl._("Log")%></b></td>
<%
} // shouldShowLog
%> <td align="center"><b><%=intl._("Graph")%></b></td>
<td></td></tr>
<%
} // end iterating over required groups for the current stat %>
<tr>
<%
if (shouldShowLog) {
%> <td align="center">
<a name="<%=statshelper.getCurrentStatName()%>"></a>
<input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="statList" value="<%=statshelper.getCurrentStatName()%>" <%
if (statshelper.getCurrentIsLogged()) { %>checked="checked" <% } %> ></td>
<%
} // shouldShowLog
%> <td align="center">
<% if (statshelper.getCurrentCanBeGraphed()) { %>
<input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td>
<td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br>
<%=statshelper.getCurrentStatDescription()%></td></tr><%
} // end iterating over all stats
if (shouldShowLog) {
%> <tr><td colspan="3"></td></tr>
<tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" ></td>
<td colspan="2"><%=intl._("Advanced filter")%>:
<input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" ></td></tr>
<%
} // shouldShowLog
%> <tr class="tablefooter"><td colspan="3" align="right">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</td></tr>
</table></div></form></div></div></body></html>
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config stats")%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
<script type="text/javascript">
function init()
{
checkAll = false;
initAjax();
}
function toggleAll(category)
{
var inputs = document.getElementsByTagName("input");
for(index = 0; index < inputs.length; index++)
{
var classes = inputs[index].className.split(' ');
for (var idx = 0; idx < classes.length; idx++)
{
if(classes[idx] == category)
{
if(inputs[index].checked == 0)
{
inputs[index].checked = 1;
}
else if(inputs[index].checked == 1)
{
inputs[index].checked = 0;
}
}
}
if(category == '*')
{
if (checkAll == false)
{
inputs[index].checked = 1;
}
else if (checkAll == true)
{
inputs[index].checked = 0;
}
}
}
if(category == '*')
{
if (checkAll == false)
{
checkAll = true;
}
else if (checkAll == true)
{
checkAll = false;
}
}
}
</script>
</head><body onLoad="init();">
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Stats Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigStatsHandler" id="formhandler" scope="request" />
<%@include file="formhandler.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigStatsHelper" id="statshelper" scope="request" />
<jsp:setProperty name="statshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<div class="configure">
<form id="statsForm" name="statsForm" action="" method="POST">
<input type="hidden" name="action" value="foo" >
<input type="hidden" name="nonce" value="<%=pageNonce%>" >
<h3><%=intl._("Configure I2P Stat Collection")%></h3>
<p><%=intl._("Enable full stats?")%>
<input type="checkbox" class="optbox" name="isFull" value="true" <%
if (statshelper.getIsFull()) { %>checked="checked" <% } %> >
(<%=intl._("change requires restart to take effect")%>)<br>
<%
// stats.log for devs only and grows without bounds, not recommended
boolean shouldShowLog = statshelper.shouldShowLog();
if (shouldShowLog) {
%><%=intl._("Stat file")%>: <input type="text" name="filename" value="<%=statshelper.getFilename()%>" ><br>
Warning - Log with care, stat file grows without limit.<br>
<%
} // shouldShowLog
%><%=intl._("Filter")%>: (<a href="javascript:void(null);" onclick="toggleAll('*')"><%=intl._("toggle all")%></a>)<br></p>
<div class="wideload">
<table>
<% while (statshelper.hasMoreStats()) {
while (statshelper.groupRequired()) { %>
<tr class="tablefooter">
<td align="left" colspan="3" id=<%=statshelper.getCurrentGroupName()%>>
<b><%=intl._(statshelper.getCurrentGroupName())%></b>
(<a href="javascript:void(null);" onclick="toggleAll('<%=statshelper.getCurrentGroupName()%>')"><%=intl._("toggle all")%></a>)
</td></tr>
<tr class="tablefooter">
<%
if (shouldShowLog) {
%> <td align="center"><b><%=intl._("Log")%></b></td>
<%
} // shouldShowLog
%> <td align="center"><b><%=intl._("Graph")%></b></td>
<td></td></tr>
<%
} // end iterating over required groups for the current stat %>
<tr>
<%
if (shouldShowLog) {
%> <td align="center">
<a name="<%=statshelper.getCurrentStatName()%>"></a>
<input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="statList" value="<%=statshelper.getCurrentStatName()%>" <%
if (statshelper.getCurrentIsLogged()) { %>checked="checked" <% } %> ></td>
<%
} // shouldShowLog
%> <td align="center">
<% if (statshelper.getCurrentCanBeGraphed()) { %>
<input type="checkbox" class="optbox <%=statshelper.getCurrentGroupName()%>" name="graphList" value="<%=statshelper.getCurrentGraphName()%>" <%
if (statshelper.getCurrentIsGraphed()) { %>checked="checked" <% } %> ><% } %></td>
<td align="left"><b><%=statshelper.getCurrentStatName()%>:</b><br>
<%=statshelper.getCurrentStatDescription()%></td></tr><%
} // end iterating over all stats
if (shouldShowLog) {
%> <tr><td colspan="3"></td></tr>
<tr><td align="center"><input type="checkbox" class="optbox" name="explicitFilter" ></td>
<td colspan="2"><%=intl._("Advanced filter")%>:
<input type="text" name="explicitFilterValue" value="<%=statshelper.getExplicitFilter()%>" size="40" ></td></tr>
<%
} // shouldShowLog
%> <tr class="tablefooter"><td colspan="3" align="right">
<input type="reset" class="cancel" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" class="accept" value="<%=intl._("Save changes")%>" >
</td></tr>
</table></div></form></div></div></body></html>

View File

@@ -1,33 +1,33 @@
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("graphs")%>
<jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
<jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<% /* GraphHelper sets the defaults in setContextId, so setting the properties must be after the context */ %>
<jsp:setProperty name="graphHelper" property="*" />
<%
graphHelper.storeWriter(out);
graphHelper.storeMethod(request.getMethod());
// meta must be inside the head
boolean allowRefresh = intl.allowIFrame(request.getHeader("User-Agent"));
if (allowRefresh) {
out.print(graphHelper.getRefreshMeta());
}
%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()">
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Performance Graphs")%></h1>
<div class="main" id="main">
<div class="graphspanel">
<div class="widepanel">
<jsp:getProperty name="graphHelper" property="allMessages" />
<jsp:getProperty name="graphHelper" property="images" />
<jsp:getProperty name="graphHelper" property="form" />
</div></div></div></body></html>
<%@page contentType="text/html"%>
<%@page trimDirectiveWhitespaces="true"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("graphs")%>
<jsp:useBean class="net.i2p.router.web.GraphHelper" id="graphHelper" scope="request" />
<jsp:setProperty name="graphHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" />
<% /* GraphHelper sets the defaults in setContextId, so setting the properties must be after the context */ %>
<jsp:setProperty name="graphHelper" property="*" />
<%
graphHelper.storeWriter(out);
graphHelper.storeMethod(request.getMethod());
// meta must be inside the head
boolean allowRefresh = intl.allowIFrame(request.getHeader("User-Agent"));
if (allowRefresh) {
out.print(graphHelper.getRefreshMeta());
}
%>
<script src="/js/ajax.js" type="text/javascript"></script>
<%@include file="summaryajax.jsi" %>
</head><body onload="initAjax()">
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Performance Graphs")%></h1>
<div class="main" id="main">
<div class="graphspanel">
<div class="widepanel">
<jsp:getProperty name="graphHelper" property="allMessages" />
<jsp:getProperty name="graphHelper" property="images" />
<jsp:getProperty name="graphHelper" property="form" />
</div></div></div></body></html>

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P routerconsole\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-04-25 14:51+0000\n"
"POT-Creation-Date: 2013-05-15 21:57+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -231,7 +231,7 @@ msgstr ""
msgid "Known fast peers"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:532
#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:551
msgid "NetDb entry"
msgstr ""
@@ -240,45 +240,45 @@ msgstr ""
msgid "No transports (hidden or starting up?)"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:455
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:447
msgid "Unreachable on any transport"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:511
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:503
msgid "Router Transport Addresses"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:516
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:508
#, java-format
msgid "{0} is used for outbound connections only"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:522
#: ../java/src/net/i2p/router/web/HomeHelper.java:32
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:161
msgid "Help"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523
msgid ""
"Your transport connection limits are automatically set based on your "
"configured bandwidth."
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:525
msgid ""
"To override these limits, add the settings i2np.ntcp.maxConnections=nnn and "
"i2np.udp.maxConnections=nnn on the advanced configuration page."
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:527
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282
msgid "Definitions"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:752
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2179
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:772
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2200
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35
@@ -287,244 +287,244 @@ msgstr ""
msgid "Peer"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
msgid "The remote peer, identified by router hash"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:753
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2183
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:773
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2204
msgid "Dir"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
msgid "Inbound connection"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:532
msgid "Outbound connection"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
msgid "They offered to introduce us (help other peers traverse our firewall)"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
msgid "We offered to introduce them (help other peers traverse their firewall)"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
msgid "How long since a packet has been received / sent"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:754
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2184
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:774
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2205
msgid "Idle"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:755
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2189
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:775
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2210
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:157
msgid "In/Out"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
msgid "The smoothed inbound / outbound transfer rate (KBytes per second)"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
msgid "How long ago this connection was established"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:756
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2194
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:776
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2215
#: ../java/src/net/i2p/router/web/SummaryHelper.java:863
msgid "Up"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:757
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2196
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:777
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2217
msgid "Skew"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
msgid "The difference between the peer's clock and your own"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
msgid ""
"The congestion window, which is how many bytes can be sent without an "
"acknowledgement"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
msgid "The number of sent messages awaiting acknowledgement"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
msgid "The maximum number of concurrent messages to send"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
msgid "The number of pending sends which exceed congestion window"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
msgid "The slow start threshold"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
msgid "The round trip time in milliseconds"
msgstr ""
#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The standard deviation of the round trip time in milliseconds")).append("<br>\n" +
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:556
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
msgid "The retransmit timeout in milliseconds"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:557
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
msgid ""
"Current maximum send packet size / estimated maximum receive packet size "
"(bytes)"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:558
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:758
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2213
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:778
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2234
msgid "TX"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:558
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550
msgid "The total number of packets sent to the peer"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:559
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:759
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2215
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:779
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2236
msgid "RX"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:559
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551
msgid "The total number of packets received from the peer"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:560
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2218
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2239
msgid "Dup TX"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:560
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552
msgid "The total number of packets retransmitted to the peer"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:561
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2220
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2241
msgid "Dup RX"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:561
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553
msgid "The total number of duplicate packets received from the peer"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:456
#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20
msgid "Service"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:454
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458
msgid "WAN Common Interface Configuration"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:455
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:471
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:476
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:459
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:465
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:480
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:97
msgid "Status"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:456
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:462
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:472
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:466
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:476
msgid "Type"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:457
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:463
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:467
msgid "Upstream"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:464
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:462
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:468
msgid "Downstream"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:464
msgid "WAN PPP Connection"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:465
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:469
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:477
msgid "External IP"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:467
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:471
msgid "Layer 3 Forwarding"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:468
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:472
msgid "Default Connection Service"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:470
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:474
msgid "WAN IP Connection"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:479
msgid "WAN Ethernet Link Configuration"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:488
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:492
msgid "Found Device"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:490
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:494
msgid "Subdevice"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:511
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:515
msgid "UPnP Status"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:514
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:518
msgid ""
"UPnP has been disabled; Do you have more than one UPnP Internet Gateway "
"Device on your LAN ?"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:517
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:521
msgid "UPnP has not found any UPnP-aware, compatible device on your LAN."
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:525
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:529
#, java-format
msgid "The current external IP address reported by UPnP is {0}"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:527
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:531
msgid "The current external IP address is not available."
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:531
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:535
#, java-format
msgid "UPnP reports the maximum downstream bit rate is {0}bits/sec"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:533
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:537
#, java-format
msgid "UPnP reports the maximum upstream bit rate is {0}bits/sec"
msgstr ""
@@ -532,12 +532,12 @@ msgstr ""
#. {0} is TCP or UDP
#. {1,number,#####} prevents 12345 from being output as 12,345 in the English locale.
#. If you want the digit separator in your locale, translate as {1}.
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:541
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:545
#, java-format
msgid "{0} port {1,number,#####} was successfully forwarded by UPnP."
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:543
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:547
#, java-format
msgid "{0} port {1,number,#####} was not forwarded by UPnP."
msgstr ""
@@ -552,151 +552,151 @@ msgstr ""
msgid "Excessive clock skew: {0}"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:747
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:767
msgid "NTCP connections"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:748
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2175
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:768
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2196
msgid "Limit"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:749
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2176
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:769
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2197
msgid "Timeout"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:760
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:780
msgid "Out Queue"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:761
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:781
msgid "Backlogged?"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:775
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2238
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:795
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2259
#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88
msgid "Inbound"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:777
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2240
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:797
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2261
#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88
msgid "Outbound"
msgstr ""
#. buf.append("<tr> <td colspan=\"11\"><hr></td></tr>\n");
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:826
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:846
msgid "peers"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2174
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2195
msgid "UDP connections"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2181
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2202
msgid "Sort by peer hash"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2183
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2204
msgid "Direction/Introduction"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2185
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2206
msgid "Sort by idle inbound"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2187
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2208
msgid "Sort by idle outbound"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2190
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2211
msgid "Sort by inbound rate"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2192
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2213
msgid "Sort by outbound rate"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2195
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2216
msgid "Sort by connection uptime"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2197
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2218
msgid "Sort by clock skew"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2200
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2221
msgid "Sort by congestion window"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2202
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2223
msgid "Sort by slow start threshold"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2205
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2226
msgid "Sort by round trip time"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2209
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2230
msgid "Sort by retransmission timeout"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2212
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2233
msgid "Sort by outbound maximum transmit unit"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2214
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2235
msgid "Sort by packets sent"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2216
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2237
msgid "Sort by packets received"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2219
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2240
msgid "Sort by packets retransmitted"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2221
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2242
msgid "Sort by packets received more than once"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2242
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2263
msgid "We offered to introduce them"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2244
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2265
msgid "They offered to introduce us"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2248
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2269
msgid "Choked"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2256
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2277
msgid "1 fail"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2258
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2279
#, java-format
msgid "{0} fails"
msgstr ""
#. 1
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2264
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2285
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:172
#: ../java/src/net/i2p/router/web/ProfilesHelper.java:13
msgid "Banned"
msgstr ""
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2316
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2337
msgid "backlogged"
msgstr ""
#. buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n");
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2396
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2417
msgid "SUMMARY"
msgstr ""
@@ -2749,16 +2749,14 @@ msgstr ""
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:38
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:46
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:49
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:56
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:59
msgid "unknown"
msgstr ""
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:171
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:185
msgid "bits per second"
msgstr ""
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:172
#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:186
#, java-format
msgid "or {0} bytes per month maximum"
msgstr ""
@@ -3354,7 +3352,7 @@ msgstr ""
#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:163
#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:111
#: ../java/src/net/i2p/router/web/GraphHelper.java:376
#: ../java/src/net/i2p/router/web/GraphHelper.java:375
msgid "Never"
msgstr ""
@@ -3404,129 +3402,129 @@ msgid ""
"browser."
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:160
#: ../java/src/net/i2p/router/web/GraphHelper.java:159
msgid "Combined bandwidth graph"
msgstr ""
#. e.g. "statname for 60m"
#: ../java/src/net/i2p/router/web/GraphHelper.java:173
#: ../java/src/net/i2p/router/web/GraphHelper.java:235
#: ../java/src/net/i2p/router/web/GraphHelper.java:172
#: ../java/src/net/i2p/router/web/GraphHelper.java:234
#, java-format
msgid "{0} for {1}"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:222
#: ../java/src/net/i2p/router/web/GraphHelper.java:221
#: ../java/src/net/i2p/router/web/StatSummarizer.java:302
msgid "Bandwidth usage"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:237
#: ../java/src/net/i2p/router/web/GraphHelper.java:236
#, java-format
msgid "ending {0} ago"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:252
#: ../java/src/net/i2p/router/web/GraphHelper.java:251
msgid "Larger"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:258
#: ../java/src/net/i2p/router/web/GraphHelper.java:257
msgid "Smaller"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:264
#: ../java/src/net/i2p/router/web/GraphHelper.java:263
msgid "Taller"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:270
#: ../java/src/net/i2p/router/web/GraphHelper.java:269
msgid "Shorter"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:276
#: ../java/src/net/i2p/router/web/GraphHelper.java:275
msgid "Wider"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:282
#: ../java/src/net/i2p/router/web/GraphHelper.java:281
msgid "Narrower"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:289
#: ../java/src/net/i2p/router/web/GraphHelper.java:288
msgid "Larger interval"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:295
#: ../java/src/net/i2p/router/web/GraphHelper.java:294
msgid "Smaller interval"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:302
#: ../java/src/net/i2p/router/web/GraphHelper.java:301
msgid "Previous interval"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:313
#: ../java/src/net/i2p/router/web/GraphHelper.java:312
msgid "Next interval"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:320
#: ../java/src/net/i2p/router/web/GraphHelper.java:360
#: ../java/src/net/i2p/router/web/GraphHelper.java:319
#: ../java/src/net/i2p/router/web/GraphHelper.java:359
msgid "Plot averages"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:320
#: ../java/src/net/i2p/router/web/GraphHelper.java:361
#: ../java/src/net/i2p/router/web/GraphHelper.java:319
#: ../java/src/net/i2p/router/web/GraphHelper.java:360
msgid "plot events"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:323
#: ../java/src/net/i2p/router/web/GraphHelper.java:322
msgid "All times are UTC."
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:355
#: ../java/src/net/i2p/router/web/GraphHelper.java:354
msgid "Configure Graph Display"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:355
#: ../java/src/net/i2p/router/web/GraphHelper.java:354
msgid "Select Stats"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:359
#: ../java/src/net/i2p/router/web/GraphHelper.java:358
msgid "Periods"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:361
#: ../java/src/net/i2p/router/web/GraphHelper.java:360
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:492
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:485
msgid "or"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:362
#: ../java/src/net/i2p/router/web/GraphHelper.java:361
msgid "Image sizes"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:362
#: ../java/src/net/i2p/router/web/GraphHelper.java:361
msgid "width"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:363
#: ../java/src/net/i2p/router/web/GraphHelper.java:362
msgid "height"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:362
#: ../java/src/net/i2p/router/web/GraphHelper.java:363
#: ../java/src/net/i2p/router/web/GraphHelper.java:364
msgid "pixels"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:365
#: ../java/src/net/i2p/router/web/GraphHelper.java:364
msgid "Refresh delay"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:380
#: ../java/src/net/i2p/router/web/GraphHelper.java:379
msgid "Store graph data on disk?"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:386
#: ../java/src/net/i2p/router/web/GraphHelper.java:385
msgid "Save settings and redraw graphs"
msgstr ""
#: ../java/src/net/i2p/router/web/GraphHelper.java:441
#: ../java/src/net/i2p/router/web/GraphHelper.java:440
msgid "Graph settings saved"
msgstr ""
@@ -3956,18 +3954,18 @@ msgstr ""
msgid "Show news"
msgstr ""
#: ../java/src/net/i2p/router/web/PluginStarter.java:132
#: ../java/src/net/i2p/router/web/PluginStarter.java:133
msgid "Checking for plugin updates"
msgstr ""
#: ../java/src/net/i2p/router/web/PluginStarter.java:174
#: ../java/src/net/i2p/router/web/PluginStarter.java:175
#, java-format
msgid "1 plugin updated"
msgid_plural "{0} plugins updated"
msgstr[0] ""
msgstr[1] ""
#: ../java/src/net/i2p/router/web/PluginStarter.java:176
#: ../java/src/net/i2p/router/web/PluginStarter.java:177
msgid "Plugin update check complete"
msgstr ""

View File

@@ -542,8 +542,9 @@ class Connection {
_context.simpleScheduler().addEvent(new DisconnectEvent(), DISCONNECT_TIMEOUT);
}
_resetReceived = true;
_outputStream.streamErrorOccurred(new IOException("Reset received"));
_inputStream.streamErrorOccurred(new IOException("Reset received"));
IOException ioe = new IOException("Reset received");
_outputStream.streamErrorOccurred(ioe);
_inputStream.streamErrorOccurred(ioe);
_connectionError = "Connection reset";
synchronized (_connectLock) { _connectLock.notifyAll(); }
}
@@ -998,8 +999,9 @@ class Connection {
_log.debug(buf.toString());
}
_inputStream.streamErrorOccurred(new IOException("Inactivity timeout"));
_outputStream.streamErrorOccurred(new IOException("Inactivity timeout"));
IOException ioe = new IOException("Inactivity timeout");
_inputStream.streamErrorOccurred(ioe);
_outputStream.streamErrorOccurred(ioe);
// Clean disconnect if we have already scheduled one
// (generally because we already sent a close)
disconnect(_disconnectScheduledOn >= 0);

View File

@@ -465,10 +465,13 @@ class MessageInputStream extends InputStream {
}
private void throwAnyError() throws IOException {
if (_streamError != null) {
IOException ioe = _streamError;
IOException ioe = _streamError;
if (ioe != null) {
_streamError = null;
throw ioe;
// constructor with cause not until Java 6
IOException ioe2 = new IOException("Input stream error");
ioe2.initCause(ioe);
throw ioe2;
}
}
}

View File

@@ -446,10 +446,13 @@ class MessageOutputStream extends OutputStream {
public boolean getClosed() { return _closed; }
private void throwAnyError() throws IOException {
if (_streamError != null) {
IOException ioe = _streamError;
IOException ioe = _streamError;
if (ioe != null) {
_streamError = null;
throw ioe;
// constructor with cause not until Java 6
IOException ioe2 = new IOException("Output stream error");
ioe2.initCause(ioe);
throw ioe2;
}
}

View File

@@ -4,25 +4,27 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# "blabla", 2011.
# D.A. Loader <>, 2012.
# ducki2p <ducki2p@gmail.com>, 2011.
# foo <foo@bar>, 2009.
# mixxy, 2011.
# "blabla", 2011
# blabla <blabla@trash-mail.com>, 2012
# D.A. Loader <>, 2012
# ducki2p <ducki2p@gmail.com>, 2011
# foo <foo@bar>, 2009
# mixxy, 2011
# zeroflag <zeroflag@i2pmail.org>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-11-02 19:46+0000\n"
"PO-Revision-Date: 2012-03-11 02:03+0000\n"
"Last-Translator: D.A. Loader <>\n"
"Language-Team: German (http://www.transifex.net/projects/p/I2P/language/"
"POT-Creation-Date: 2013-05-15 22:00+0000\n"
"PO-Revision-Date: 2013-05-08 13:02+0000\n"
"Last-Translator: zeroflag <zeroflag@i2pmail.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/"
"de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:130
#, java-format
@@ -112,7 +114,7 @@ msgstr "Zeige {0} von {1}"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:258
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:227
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:412
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:410
msgid "Add"
msgstr "Hinzufügen"
@@ -120,7 +122,7 @@ msgstr "Hinzufügen"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:269
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:227
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:239
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:410
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:408
msgid "Replace"
msgstr "Ersetzen"
@@ -178,13 +180,13 @@ msgstr "Bitte geben Sie einen Hostnamen und ein Ziel ein!"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:326
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:278
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:303
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:274
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:267
msgid "Delete Entry"
msgstr "Eintrag löschen"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:305
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:278
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:351
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:349
msgid "Delete Selected"
msgstr "Ausgewähltes löschen"
@@ -219,9 +221,9 @@ msgid "ERROR: Could not write addressbook file."
msgstr "FEHLER: Konnte Adressbuchdatei nicht schreiben."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:340
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:149
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:140
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:311
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:128
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:142
msgid ""
"Invalid form submission, probably because you used the \"back\" or \"reload"
"\" button on your browser. Please resubmit."
@@ -230,33 +232,35 @@ msgstr ""
"laden\"-Schalter in Ihrem Browser genutzt. Bitte neu senden!"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:342
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:151
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:313
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:130
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:144
msgid ""
"If the problem persists, verify that you have cookies enabled in your "
"browser."
msgstr ""
"Falls das Problem weiterhin besteht: Stellen Sie sicher, dass Sie in Ihrem "
"Browser Cookies aktiviert haben."
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:140
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:103
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:131
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:117
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:153
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:145
msgid "Save"
msgstr "Speichern"
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:133
msgid "Configuration saved."
msgstr "Einstellungen gespeichert"
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:143
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:122
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:134
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:136
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:151
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:143
msgid "Reload"
msgstr "Neu laden"
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:145
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:136
msgid "Configuration reloaded."
msgstr "Einstellungen neu geladen"
@@ -279,18 +283,18 @@ msgstr "Konnte das Ziel für {0} nicht dem Domainnamenservice {1} hinzufügen"
msgid "Failed to delete Destination for {0} from naming service {1}"
msgstr "Konnte das Ziel für {0} nicht aus dem Domainnamenservice {1} löschen"
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:115
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:129
msgid ""
"Subscriptions saved, updating addressbook from subscription sources now."
msgstr ""
"Abonnement gespeichert, aktualisiere jetzt das Adressbuch von untenstehenden "
"Aboquellen."
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:120
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:134
msgid "Subscriptions saved."
msgstr "Abonnementquellen gespeichert"
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:124
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:138
msgid "Subscriptions reloaded."
msgstr "Abonnementquellen neu geladen"
@@ -410,8 +414,8 @@ msgid "Links"
msgstr "Links"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:250
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:404
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:266
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:402
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:259
msgid "Destination"
msgstr "Ziel"
@@ -419,32 +423,32 @@ msgstr "Ziel"
msgid "Mark for deletion"
msgstr "zum Löschen markieren"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:307
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:305
msgid "Base 32 address"
msgstr "Adresse (Basis32)"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:311
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:309
msgid "More information on this entry"
msgstr "Weitere Informationen über diesen Eintrag"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:314
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:312
msgid "details"
msgstr "Details"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:349
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:408
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:347
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:406
msgid "Cancel"
msgstr "Abbruch"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:383
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:381
msgid "This address book is empty."
msgstr "Dieses Adressbuch ist leer."
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:398
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:396
msgid "Add new destination"
msgstr "Füge neues Ziel hinzu"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:400
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:398
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:165
msgid "Host Name"
msgstr "Hostname"
@@ -568,65 +572,65 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:191
msgid "Name of the theme to use (defaults to 'light')"
msgstr ""
msgstr "Name des gewählten Themas (Standard ist \"hell\")"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:110
msgid "addressbook"
msgstr "Adressbuch"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:181
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:179
msgid "Encoded Name"
msgstr "kodierter Name"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:197
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:193
msgid "Base 32 Address"
msgstr "Basis32-Adresse"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:207
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:201
msgid "Base 64 Hash"
msgstr "Base 64 Hash"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:213
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:207
msgid "Address Helper"
msgstr "Adresshelfer"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:220
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:213
msgid "link"
msgstr "Link"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:224
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:217
msgid "Public Key"
msgstr "Öffentlicher Schlüssel"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:226
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:219
msgid "ElGamal 2048 bit"
msgstr "ElGamal 2048 bit"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:230
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:223
msgid "Signing Key"
msgstr "Authentifizierungsschlüssel"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:232
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:225
msgid "DSA 1024 bit"
msgstr "DSA 1024 bit"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:236
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:229
msgid "Certificate"
msgstr "Zertifikat"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:242
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:235
msgid "Added Date"
msgstr "Datum hinzugefügt"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:248
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:241
msgid "Source"
msgstr "Quelle"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:254
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:247
msgid "Last Modified"
msgstr "Zuletzt geändert:"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:260
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:253
msgid "Notes"
msgstr "Anmerkungen"
@@ -669,7 +673,7 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:140
msgid ""
"For more information on naming in I2P, see <a href=\"http://www.i2p2.i2p/"
"naming.html\">the overview on www.i2p2.i2p</a>."
"naming.html\" target=\"_top\">the overview on www.i2p2.i2p</a>."
msgstr ""
"Für weitere Informationen über Domainnamen im I2P sei hier auf <a href="
"\"http://www.i2p2.i2p/naming.html\">die Erläuterungen auf www.i2p2.i2p</a> "

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P susidns\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-04-25 14:51+0000\n"
"POT-Creation-Date: 2013-05-15 21:58+0000\n"
"PO-Revision-Date: 2010-06-15 14:09+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>\n"
@@ -209,42 +209,42 @@ msgid "ERROR: Could not write addressbook file."
msgstr ""
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:340
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:149
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:140
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:311
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:128
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:142
msgid ""
"Invalid form submission, probably because you used the \"back\" or \"reload"
"\" button on your browser. Please resubmit."
msgstr ""
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:342
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:151
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:313
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:130
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:144
msgid ""
"If the problem persists, verify that you have cookies enabled in your "
"browser."
msgstr ""
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:140
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:103
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:131
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:117
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:153
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:145
msgid "Save"
msgstr ""
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:133
msgid "Configuration saved."
msgstr ""
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:143
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:122
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:134
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:136
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:151
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:143
msgid "Reload"
msgstr ""
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:145
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:136
msgid "Configuration reloaded."
msgstr ""
@@ -267,16 +267,16 @@ msgstr ""
msgid "Failed to delete Destination for {0} from naming service {1}"
msgstr ""
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:115
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:129
msgid ""
"Subscriptions saved, updating addressbook from subscription sources now."
msgstr ""
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:120
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:134
msgid "Subscriptions saved."
msgstr ""
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:124
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:138
msgid "Subscriptions reloaded."
msgstr ""

View File

@@ -250,25 +250,41 @@
</copy>
</target>
<!-- this makes an empty build/launchi2p.jar and the build/i2p.exe for the no-wrapper windows startup, if possible -->
<target name="buildexe">
<condition property="noExe">
<or>
<os arch="ppc" />
<os arch="armv5tejl" />
<os arch="armv6l" />
<os arch="armv7l" />
</or>
</condition>
<condition property="noExe">
<not>
<condition property="noExe">
<not>
<!-- We only have launch4j binaries for the following systems -->
<and>
<or>
<os arch="x86" />
<os arch="i386" />
<os arch="i586" />
<os arch="i686" />
<os arch="amd64" />
<os arch="x86_64" />
</or>
<or>
<os name="Linux" />
<os family="windows" />
</or>
</not>
</condition>
<ant target="doBuildEXE" />
</and>
</not>
</condition>
<!-- this makes an empty build/launchi2p.jar and the build/i2p.exe for the no-wrapper windows startup, if possible -->
<target name="buildexe" depends="buildProperties, launch4j" unless="noExe">
<echo message="See the file &quot;build.properties&quot; if this step fails." />
<jar destfile="./build/launchi2p.jar">
<manifest>
<attribute name="Main-Class" value="net.i2p.router.RouterLaunch" />
<attribute name="Class-Path" value="lib/i2p.jar lib/router.jar lib/jbigi.jar lib/BOB.jar lib/sam.jar lib/mstreaming.jar lib/streaming.jar lib/routerconsole.jar lib/i2ptunnel.jar lib/org.mortbay.jetty.jar lib/javax.servlet.jar lib/jasper-compiler.jar lib/jasper-runtime.jar lib/commons-logging.jar lib/commons-el.jar lib/wrapper.jar lib/systray.jar lib/systray4j.jar lib/desktopgui.jar lib/i2psnark.jar lib/jrobin.jar lib/jstl.jar lib/standard.jar lib/jetty-continuation.jar lib/jetty-deploy.jar lib/jetty-http.jar lib/jetty-i2p.jar lib/jetty-io.jar lib/jetty-java5-threadpool.jar lib/jetty-rewrite-handler.jar lib/jetty-security.jar lib/jetty-servlet.jar lib/jetty-servlets.jar lib/jetty-sslengine.jar lib/jetty-start.jar lib/jetty-util.jar lib/jetty-webapp.jar lib/jetty-xml.jar" />
<attribute name="Built-By" value="${build.built-by}" />
<attribute name="Build-Date" value="${build.timestamp}" />
<attribute name="Base-Revision" value="${workspace.version}" />
</manifest>
</jar>
<!-- now the standalone launcher exe -->
<launch4j configFile="./installer/i2pstandalone.xml" />
<!-- thazzit -->
</target>
<target name="launch4j">
@@ -277,23 +293,6 @@
classpath="${basedir}/installer/lib/launch4j/launch4j.jar:${basedir}/installer/lib/launch4j/lib/xstream.jar" />
</target>
<!-- this makes an empty build/launchi2p.jar and the build/i2p.exe for the no-wrapper windows startup -->
<target name="doBuildEXE" depends="buildProperties, launch4j" unless="noExe">
<echo message="See the file &quot;build.properties&quot; if this step fails." />
<jar destfile="./build/launchi2p.jar">
<manifest>
<attribute name="Main-Class" value="net.i2p.router.RouterLaunch" />
<attribute name="Class-Path" value="lib/i2p.jar lib/router.jar lib/jbigi.jar lib/BOB.jar lib/sam.jar lib/mstreaming.jar lib/streaming.jar lib/routerconsole.jar lib/i2ptunnel.jar lib/org.mortbay.jetty.jar lib/javax.servlet.jar lib/jasper-compiler.jar lib/jasper-runtime.jar lib/commons-logging.jar lib/commons-el.jar lib/wrapper.jar lib/systray.jar lib/systray4j.jar lib/desktopgui.jar lib/i2psnark.jar lib/jrobin.jar lib/jstl.jar lib/standard.jar lib/jetty-continuation.jar lib/jetty-deploy.jar lib/jetty-http.jar lib/jetty-i2p.jar lib/jetty-io.jar lib/jetty-java5-threadpool.jar lib/jetty-rewrite-handler.jar lib/jetty-security.jar lib/jetty-servlet.jar lib/jetty-servlets.jar lib/jetty-sslengine.jar lib/jetty-start.jar lib/jetty-util.jar lib/jetty-webapp.jar lib/jetty-xml.jar" />
<attribute name="Built-By" value="${build.built-by}" />
<attribute name="Build-Date" value="${build.timestamp}" />
<attribute name="Base-Revision" value="${workspace.version}" />
</manifest>
</jar>
<!-- now the standalone launcher exe -->
<launch4j configFile="./installer/i2pstandalone.xml" />
<!-- thazzit -->
</target>
<target name="jar" depends="jarSmall" >
<copy file="apps/BOB/dist/BOB.jar" todir="build/" />
<copy file="apps/sam/java/build/sam.jar" todir="build/" />
@@ -332,6 +331,7 @@
<target name="jbigi" depends="buildProperties, jbigi-list-changes" >
<!-- set if unset -->
<property name="workspace.changes.jbigi.tr" value="" />
<mkdir dir="./build" />
<jar destfile="build/jbigi.jar" whenmanifestonly="fail" >
<fileset dir="installer/lib/jbigi" includes="*.so *.dll *.jnilib" />
<manifest>
@@ -1211,28 +1211,8 @@
<ant target="installerexe" />
</target>
<target name="installerexe" depends="launch4j">
<condition property="noExe">
<or>
<os arch="ppc" />
<os arch="armv5tejl" />
<os arch="armv6l" />
<os arch="armv7l" />
</or>
</condition>
<condition property="noExe">
<not>
<or>
<os name="Linux" />
<os family="windows" />
</or>
</not>
</condition>
<ant target="doInstallerEXE" />
</target>
<!-- this makes i2pinstall.exe from install.jar -->
<target name="doInstallerEXE" depends="launch4j" unless="noExe">
<target name="installerexe" depends="launch4j" unless="noExe">
<echo message="See the file &quot;build.properties&quot; if this step fails." />
<!-- now the installer exe -->
<launch4j configFile="./installer/i2pinstaller.xml" />

View File

@@ -5,6 +5,15 @@ if [ $UNIXTYPE = "freebsd" ]; then
elif [ -d /usr/local/openjdk7 ]; then
JAVA_HOME="/usr/local/openjdk7"
fi
elif [ $UNIXTYPE = "sunos" ]; then
UNIXTYPE="solaris"
if [ -d /usr/jdk/latest/ ]; then
JAVA_HOME="/usr/jdk/latest"
elif [ -d /usr/jdk/instances/jdk1.7.0/ ]; then
JAVA_HOME="/usr/jdk/instances/jdk1.7.0"
elif [ -d /usr/jdk/instances/jdk1.6.0 ]; then
JAVA_HOME="/usr/jdk/instances/jdk1.6.0"
fi
elif [ $UNIXTYPE = "openbsd" ]; then
if [ -d /usr/local/jdk-1.7.0 ]; then
JAVA_HOME="/usr/local/jdk-1.7.0"
@@ -26,9 +35,10 @@ elif [ $UNIXTYPE = "linux" ] && [ -e /etc/arch-release ]; then
elif [ $UNIXTYPE = "darwin" ]; then
JAVA_HOME=$(/usr/libexec/java_home)
elif [ $UNIXTYPE = "gnu/kfreebsd" ]; then
UNIXTYPE="linux"
if [ -d /usr/lib/jvm/java-gcj ]; then
JAVA_HOME="/usr/lib/jvm/java-gcj"
fi
fi
export JAVA_HOME
export JAVA_HOME UNIXTYPE

View File

@@ -2,7 +2,7 @@
# When executed in Mingw: Produces a jbigi.dll
# When executed in Linux/FreeBSD: Produces a libjbigi.so
# When executed in OSX: Produces a libjbigi.jnilib
CC="gcc"
[ -z "$CC" ] && CC="gcc"
# If JAVA_HOME isn't set we'll try to figure it out
[ -z $JAVA_HOME ] && . ../find-java-home
@@ -38,7 +38,7 @@ SunOS*|OpenBSD*|NetBSD*|*FreeBSD*|Linux*)
elif [ $UNIXTYPE = "gnu/kfreebsd" ]; then
UNIXTYPE="linux"
fi
COMPILEFLAGS="-fPIC -Wall"
COMPILEFLAGS="-fPIC -Wall $CFLAGS"
INCLUDES="-I. -I../../jbigi/include -I$JAVA_HOME/include -I$JAVA_HOME/include/${UNIXTYPE}"
LINKFLAGS="-shared -Wl,-soname,libjbigi.so"
LIBFILE="libjbigi.so";;

View File

@@ -1,14 +1,12 @@
#!/bin/sh
# If JAVA_HOME isn't set we'll try to figure it out
[ -z $JAVA_HOME ] && . ../find-java-home
if [ ! -f "$JAVA_HOME/include/jni.h" ]; then
echo "Cannot find jni.h! Looked in '$JAVA_HOME/include/jni.h'"
echo "Please set JAVA_HOME to a java home that has the JNI"
exit 1
fi
# ON Solaris 11 (at least) this variable must be set.
# Linux and *BSD will do the right thing.
#
#BITS=32
#FIXME What platforms for MacOS?
# FIXME Is this all?
DARWIN_PLATFORMS="core2 corei"
MISC_DARWIN_PLATFORMS="powerpc powerpc64 powerpc64le powerpcle"
# Note: You will have to add the CPU ID for the platform in the CPU ID code
@@ -45,24 +43,6 @@ X86_64_PLATFORMS="atom athlon64 core2 corei nano pentium4"
# Note! these are 32bit _ONLY_
X86_PLATFORMS="pentium pentiummmx pentium2 pentium3 pentiumm k6 k62 k63 athlon geode viac3 viac32 ${X86_64_PLATFORMS}"
#
# You should not need to edit anything below this comment.
#
# The built-in echo in /bin/sh (the real bourne shell) on BSD systems supports -e.
# The built-in echo in dash (the default /bin/sh on Debian) does not support -e
# but /bin/echo always supports -e in Linux; therefore, let's set echo to /bin/echo
# whenever we're on Linux and use the shell's built-in "echo" on everything else.
if [ $(uname -s |tr "[A-Z]" "[a-z]") = "linux" ]; then
ECHO="/bin/echo"
elif [ $(uname -s |tr "[A-Z]" "[a-z]") = "gnu/kfreebsd" ]; then
ECHO="/bin/echo"
else
ECHO="echo"
fi
MINGW_PLATFORMS="${X86_PLATFORMS} ${MISC_MINGW_PLATFORMS}"
LINUX_PLATFORMS="${X86_PLATFORMS} ${MISC_LINUX_PLATFORMS}"
FREEBSD_PLATFORMS="${X86_PLATFORMS} ${MISC_FREEBSD_PLATFORMS}"
@@ -70,44 +50,96 @@ FREEBSD_PLATFORMS="${X86_PLATFORMS} ${MISC_FREEBSD_PLATFORMS}"
NETBSD_PLATFORMS="${FREEBSD_PLATFORMS} ${MISC_LINUX_PLATFORMS} ${MISC_NETBSD_PLATFORMS}"
OPENBSD_PLATFORM="${X86_PLATFORMS} ${MISC_OPENBSD_PLATFORMS}"
# FIXME Is this all?
DARWIN_PLATFORMS="core2 corei"
#
# You should not need to edit anything below this comment.
#
# If JAVA_HOME isn't set we'll try to figure it out
[ -z $JAVA_HOME ] && . ../find-java-home
if [ ! -f "$JAVA_HOME/include/jni.h" ]; then
echo "Cannot find jni.h! Looked in '$JAVA_HOME/include/jni.h'" >&2
echo "Please set JAVA_HOME to a java home that has the JNI" >&2
exit 1
fi
if [ ! $(which m4) ]; then
printf "\aWARNING: \`m4\` not found. If this process fails to complete, install m4 " >&2
printf "and re-run this script.\n\n\n\a" >&2
sleep 10
fi
# Allow TARGET to be overridden (e.g. for use with cross compilers)
[ -z $TARGET ] && TARGET=$(uname -s |tr "[A-Z]" "[a-z]")
# Set the version to 5.0.2 for OSX because AFAIK there are only 64bit capable CPUs for the Intel Macs
if [ `uname -s |grep Darwin` ]; then
# FIXME do this without sed (and tail) (= portably)
if [ `echo $TARGET|grep darwin` ]; then
VER=5.0.2
elif [ `echo $TARGET|grep sunos` ]; then
VER=$(echo gmp-*.tar.bz2 | sed -e "s/\(.*-\)\(.*\)\(.*.tar.bz2\)$/\2/" | /usr/xpg4/bin/tail -n 1)
else
VER=$($ECHO gmp-*.tar.bz2 | sed -e "s/\(.*-\)\(.*\)\(.*.tar.bz2\)$/\2/" | tail -n 1)
VER=$(echo gmp-*.tar.bz2 | sed -e "s/\(.*-\)\(.*\)\(.*.tar.bz2\)$/\2/" | tail -n 1)
fi
if [ "$VER" = "" ] ; then
$ECHO "ERROR! Can't find gmp source tarball."
echo "ERROR! Can't find gmp source tarball."
exit 1
fi
# If the BITS variable isn't set above we'll proceed without setting the *FLAGS
# variables ourselves.
[ -z $BITS ] && BITS=0
case `uname -s` in
MINGW*)
if [ $BITS -eq 32 ]; then
export CC="gcc -m32"
export CFLAGS="-m32"
export LDFLAGS="-m32"
SUFFIX=
elif [ $BITS -eq 64 ]; then
export CC="gcc -m64"
export CFLAGS="-m64"
fi
case "$TARGET" in
mingw*)
PLATFORM_LIST="${MINGW_PLATFORMS}"
NAME="jbigi"
TYPE="dll"
TARGET="windows"
$ECHO "Building windows .dlls for all architectures";;
Darwin*)
echo "Building windows .dlls for all architectures";;
darwin*)
PLATFORM_LIST="${DARWIN_PLATFORMS}"
NAME="libjbigi"
TYPE="jnilib"
TARGET="osx"
$ECHO "Building ${TARGET} .jnilibs for all architectures";;
Linux*|*kFreeBSD)
echo "Building ${TARGET} .jnilibs for all architectures";;
sunos*)
PLATFORM_LIST="${X86_64_PLATFORMS}"
NAME="libjbigi"
TYPE="so"
UNIXTYPE="solaris"
TARGET="${UNIXTYPE}"
if $(echo "$CFLAGS" | grep -q "\-m64") ; then
[ -z $SUFFIX ] && SUFFIX="_64"
PLATFORM_LIST="${X86_64_PLATFORMS}"
else
PLATFORM_LIST="${X86_PLATFORMS}"
fi
echo "Building ${TARGET} .sos for all architectures";;
linux*|*kfreebsd)
NAME="libjbigi"
TYPE="so"
PLATFORM_LIST=""
if [ $(uname -s | tr "[A-Z]" "[a-z]") = "gnu/kfreebsd" ]; then
case "$TARGET" in
*kfreebsd)
TARGET="kfreebsd"
else
;;
*)
TARGET="linux"
fi
;;
esac
arch=$(uname -m | cut -f1 -d" ")
case ${arch} in
i[3-6]86)
@@ -116,22 +148,23 @@ Linux*|*kFreeBSD)
case ${arch} in
x86_64 | amd64)
PLATFORM_LIST="${X86_64_PLATFORMS}"
TARGET="$TARGET-X86_64";;
ia64)
PLATFORM_LIST="${X86_64_PLATFORMS}"
TARGET="$TARGET-ia64";;
if [ $BITS -ne 32 ]; then
[ -z $SUFFIX ] && SUFFIX="_64"
fi
;;
#ia64)
# PLATFORM_LIST="${X86_64_PLATFORMS}"
# TARGET="$TARGET-ia64";;
x86)
PLATFORM_LIST="${X86_PLATFORMS}"
TARGET="$TARGET-x86";;
PLATFORM_LIST="${X86_PLATFORMS}";;
*)
PLATFORM_LIST="${LINUX_PLATFORMS}";;
esac
$ECHO "Building ${TARGET} .sos for ${arch}";;
NetBSD*|FreeBSD*|OpenBSD*)
echo "Building ${TARGET} .sos for ${arch}";;
netbsd*|freebsd*|openbsd*)
NAME="libjbigi"
TYPE="so"
PLATFORM_LIST=""
BSDTYPE=$(uname -s | tr "[A-Z]" "[a-z]")
PLATFORM_LIST=
arch=$(uname -m | cut -f1 -d" ")
case ${arch} in
i[3-6]86)
@@ -140,15 +173,14 @@ NetBSD*|FreeBSD*|OpenBSD*)
case ${arch} in
x86_64|amd64)
PLATFORM_LIST="${X86_64_PLATFORMS}"
TARGET="${BSDTYPE}-X86_64";;
ia64)
PLATFORM_LIST="${X86_64_PLATFORMS}"
TARGET="${BSDTYPE}-ia64";;
[ -z $SUFFIX ] && SUFFIX="_64";;
#ia64)
# PLATFORM_LIST="${X86_64_PLATFORMS}"
# SUFFIX="{SYS}-ia64";;
x86)
PLATFORM_LIST="${X86_PLATFORMS}"
TARGET="${BSDTYPE}-x86";;
PLATFORM_LIST="${X86_PLATFORMS}";;
*)
case ${BSDTYPE} in
case ${TARGET} in
netbsd)
PLATFORM_LIST="${NETBSD_PLATFORMS}";;
openbsd)
@@ -156,63 +188,78 @@ NetBSD*|FreeBSD*|OpenBSD*)
freebsd)
PLATFORM_LIST="${FREEBSD_PLATFORMS}";;
*)
$ECHO "Unsupported build environment"
echo "Unsupported build environment"
exit 1;;
esac
esac
$ECHO "Building ${BSDTYPE} .sos for ${arch}";;
echo "Building ${TARGET} .sos for ${arch}";;
*)
$ECHO "Unsupported build environment"
echo "Unsupported build environment"
exit;;
esac
#####################
# In the below functions:
# $1 = gmp version
# $2 = platform: such as athlon64
# $3 = basename: "jbigi" on Windows, "libjbigi" everywhere else
# $4 = type/extension: windows = "dll". osx = "jnilib". Everything else = "so"
# $5 = target: "linux", "freebsd", "kfreebsd", "osx", "windows", etc.
# $6 = suffix: null if 32bit, _64 if 64bit
make_static () {
#
# TODO
# Fix formatting of output filename. Final versions will need to look
# like libjbigi-linux-athlon64.so or libjbigi-linux-athlon64_64.so
$ECHO "Attempting .${4} creation for ${3}${5}${2}"
echo "Attempting .${4} creation for ${3}${5}${2}${6}"
../../build_jbigi.sh static || return 1
cp ${3}.${4} ../../lib/net/i2p/util/${3}${5}${2}.${4}
cp ${3}.${4} ../../lib/net/i2p/util/${3}${5}${2}${6}.${4}
return 0
}
make_file () {
# Nonfatal bail out on Failed build.
$ECHO "Attempting build for ${3}${5}${2}"
echo "Attempting build for ${3}${5}${2}"
make && return 0
cd ..
rm -R "$2"
$ECHO -e "\n\nFAILED! ${3}${5}${2} not made.\a"
printf "\n\nFAILED! ${3}${5}${2} not made.\a"
sleep 10
return 1
}
configure_file () {
$ECHO -e "\n\n\nAttempting configure for ${3}${5}${2}\n\n\n"
printf "\n\n\nAttempting configure for ${3}${5}${2}${6}\n\n\n"
if [ $BITS -eq 32 ] && [ "$2" = "none" ]; then
unset ABI
elif [ $BITS -eq 32 ] && [ "$2" != "none" ]; then
export ABI=32
fi
sleep 10
# Nonfatal bail out on unsupported platform.
if [ `uname -s |grep Darwin` ]; then
if [ $(echo $TARGET| grep -q osx) ]; then
../../gmp-${1}/configure --build=${2}-apple-darwin --with-pic && return 0
else
../../gmp-${1}/configure --build=${2} --with-pic && return 0
fi
cd ..
rm -R "$2"
$ECHO -e "\n\nSorry, ${3}${5}${2} is not supported on your build environment.\a"
printf "\n\nSorry, ${3}${5}${2} is not supported on your build environment.\a"
sleep 10
return 1
}
build_file () {
configure_file "$1" "$2" "$3" "$4" "$5" && make_file "$1" "$2" "$3" "$4" "$5" && make_static "$1" "$2" "$3" "$4" "$5" && return 0
$ECHO -e "\n\n\nError building static!\n\n\a"
configure_file "$1" "$2" "$3" "$4" "$5" "$6" && make_file "$1" "$2" "$3" "$4" "$5" "$6" && make_static "$1" "$2" "$3" "$4" "$5" "$6" && return 0
printf "\n\n\nError building static!\n\n\a"
sleep 10
return 1
}
$ECHO "Extracting GMP Version $VER ..."
tar -xjf gmp-$VER.tar.bz2 || ( $ECHO "Error in tarball file!" ; exit 1 )
echo "Extracting GMP Version $VER ..."
if [ -e gmp-$VER.tar.bz2 ]; then
tar -xjf gmp-$VER.tar.bz2 || ( echo "Error in tarball file!" >&2 ; exit 1 )
else
echo "ERROR: gmp tarball not found in current directory" >&2
exit 1
fi
if [ ! -d bin ]; then
mkdir bin
@@ -235,9 +282,11 @@ do
rm -Rf *
fi
build_file "$VER" "$x" "$NAME" "$TYPE" "-$TARGET-"
build_file "$VER" "$x" "$NAME" "$TYPE" "-$TARGET-" "$SUFFIX"
)
done
$ECHO "Success!"
echo "Success!"
exit 0
# vim:fenc=utf-8:ai:si:ts=4:sw=4:et:nu

View File

@@ -19,7 +19,7 @@ esac
rm -rf lib
mkdir -p lib/freenet/support/CPUInformation
CC="gcc"
[ -z $CC ] && CC="gcc"
case `uname -s` in
MINGW*|CYGWIN*)
@@ -62,6 +62,14 @@ case `uname -s` in
ARCH="ia64";;
i?86*)
ARCH="x86";;
# Solaris x86
i86pc)
if $(echo $CC | grep -q '\-m64') ; then
ARCH="x86_64"
else
ARCH="x86"
fi
;;
*)
echo "Unsupported build environment. jcpuid is only used on x86 systems."
exit 0;;

View File

@@ -16,7 +16,7 @@ package net.i2p;
public class CoreVersion {
/** deprecated */
public final static String ID = "Monotone";
public final static String VERSION = "0.9.5";
public final static String VERSION = "0.9.6";
public static void main(String args[]) {
System.out.println("I2P Core version: " + VERSION);

View File

@@ -252,12 +252,14 @@ public class RouterAddress extends DataStructureImpl {
}
/**
* Just use style and hashCode for speed (expiration is always null).
* If we add multiple addresses of the same style, this may need to be changed.
* Just use a few items for speed (expiration is always null).
*/
@Override
public int hashCode() {
return DataHelper.hashCode(_transportStyle) ^ _cost;
return DataHelper.hashCode(_transportStyle) ^
DataHelper.hashCode(getIP()) ^
getPort() ^
_cost;
}
/**

View File

@@ -24,7 +24,6 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;
import net.i2p.I2PAppContext;
import net.i2p.crypto.DSAEngine;
@@ -450,8 +449,9 @@ public class RouterInfo extends DatabaseEntry {
/**
* Pull the first workable target address for the given transport
*
* Pull the first workable target address for the given transport.
* Use to check for any address. For all addresses, use getTargetAddresses(),
* which you probably want if you care about IPv6.
*/
public RouterAddress getTargetAddress(String transportStyle) {
for (RouterAddress addr : _addresses) {
@@ -462,11 +462,12 @@ public class RouterInfo extends DatabaseEntry {
}
/**
* For future multiple addresses per-transport (IPV6), currently unused
* For multiple addresses per-transport (IPv4 or IPv6)
* @return non-null
* @since 0.7.11
*/
public List<RouterAddress> getTargetAddresses(String transportStyle) {
List<RouterAddress> ret = new Vector<RouterAddress>();
List<RouterAddress> ret = new ArrayList<RouterAddress>(_addresses.size());
for (RouterAddress addr : _addresses) {
if(addr.getTransportStyle().equals(transportStyle))
ret.add(addr);

View File

@@ -282,6 +282,14 @@ public abstract class Addresses {
System.err.println(s);
System.err.println("\nExternal and Local IPv4 Addresses:");
a = getAddresses(true, false, false);
for (String s : a)
System.err.println(s);
System.err.println("\nAll External Addresses:");
a = getAddresses(false, false, true);
for (String s : a)
System.err.println(s);
System.err.println("\nAll External and Local Addresses:");
a = getAddresses(true, false, true);
for (String s : a)
System.err.println(s);
System.err.println("\nAll addresses:");

View File

@@ -757,6 +757,9 @@ public class NativeBigInteger extends BigInteger {
else if (sCPUType.equals(JBIGI_OPTIMIZATION_COREI) && (!_is64) && ((_isKFreebsd) || (_isNetbsd) || (_isOpenbsd)))
// corei and core2 are identical on 32bit kfreebsd, openbsd, and netbsd
sAppend = JBIGI_OPTIMIZATION_CORE2;
else if (sCPUType.equals(JBIGI_OPTIMIZATION_PENTIUM2) && _isSunos && _isX86)
// pentium2 and pentium3 identical on X86 Solaris
sAppend = JBIGI_OPTIMIZATION_PENTIUM3;
else if (sCPUType.equals(JBIGI_OPTIMIZATION_VIAC32))
// viac32 and pentium3 identical
sAppend = JBIGI_OPTIMIZATION_PENTIUM3;

9
debian/changelog vendored
View File

@@ -1,4 +1,11 @@
i2p (0.9.5-2) UNRELEASED; urgency=low
i2p (0.9.6-1) unstable; urgency=low
* New upstream release
* i2prouter: allow overrides to be set in /etc/default/i2p
-- Kill Your TV <killyourtv@i2pmail.org> Mon, 27 May 2013 00:00:00 +0000
i2p (0.9.5-2) unstable; urgency=low
* debian/i2p.postinst: Explicitly set permissions on /etc/i2p/wrapper.config
to compensate for stricter umasks.

2
debian/control vendored
View File

@@ -1,7 +1,7 @@
Source: i2p
Maintainer: Kill Your TV <killyourtv@i2pmail.org>
Section: net
Standards-Version: 3.9.3
Standards-Version: 3.9.4
Priority: optional
Bugs: mailto:killyourtv@i2pmail.org
Homepage: http://www.i2p2.de/

View File

@@ -26,7 +26,6 @@ pkg-temp/lib/desktopgui.jar usr/share/i2p/lib
pkg-temp/lib/i2p.jar usr/share/i2p/lib
pkg-temp/lib/i2psnark.jar usr/share/i2p/lib
pkg-temp/lib/i2ptunnel.jar usr/share/i2p/lib
pkg-temp/lib/jasper-compiler.jar usr/share/i2p/lib
pkg-temp/lib/jasper-runtime.jar usr/share/i2p/lib
pkg-temp/lib/javax.servlet.jar usr/share/i2p/lib
pkg-temp/lib/jetty-continuation.jar usr/share/i2p/lib
@@ -34,12 +33,10 @@ pkg-temp/lib/jetty-deploy.jar usr/share/i2p/lib
pkg-temp/lib/jetty-http.jar usr/share/i2p/lib
pkg-temp/lib/jetty-i2p.jar usr/share/i2p/lib
pkg-temp/lib/jetty-io.jar usr/share/i2p/lib
pkg-temp/lib/jetty-java5-threadpool.jar usr/share/i2p/lib
pkg-temp/lib/jetty-rewrite-handler.jar usr/share/i2p/lib
pkg-temp/lib/jetty-security.jar usr/share/i2p/lib
pkg-temp/lib/jetty-servlet.jar usr/share/i2p/lib
pkg-temp/lib/jetty-servlets.jar usr/share/i2p/lib
pkg-temp/lib/jetty-sslengine.jar usr/share/i2p/lib
pkg-temp/lib/jetty-start.jar usr/share/i2p/lib
pkg-temp/lib/jetty-util.jar usr/share/i2p/lib
pkg-temp/lib/jetty-webapp.jar usr/share/i2p/lib

View File

@@ -32,7 +32,7 @@ Debian wrapper.config to try to prevent confusion.
#
# This software is the proprietary information of Tanuki Software.
# You shall use it only in accordance with the terms of the
@@ -24,16 +24,9 @@
@@ -24,16 +24,12 @@
# These settings can be modified to fit the needs of your application
# Optimized for use with version 3.5.17 of the Wrapper.
@@ -46,13 +46,16 @@ Debian wrapper.config to try to prevent confusion.
-# PORTABLE installation:
-# Use the following instead.
-#I2PTEMP="%INSTALL_PATH"
+# Read config file if found
+[ -f /etc/default/i2p ] && . /etc/default/i2p
+
+I2P="/usr/share/i2p"
+I2P_CONFIG_DIR="$HOME/.i2p"
+I2PTEMP="/tmp"
# Application
APP_NAME="i2p"
@@ -61,8 +54,8 @@
@@ -61,8 +57,8 @@
#RUN_AS_USER=
# Wrapper
@@ -63,7 +66,7 @@ Debian wrapper.config to try to prevent confusion.
# Priority at which to run the wrapper. See "man nice" for valid priorities.
# nice is only used if a priority is specified.
@@ -167,48 +160,6 @@
@@ -167,48 +163,6 @@
# Workaround for Gentoo
JAVABINARY=$(awk -F'=' '/^ *wrapper\.java\.command/{print $2}' "$WRAPPER_CONF")
@@ -112,7 +115,7 @@ Debian wrapper.config to try to prevent confusion.
if [ -n "$FIXED_COMMAND" ]
then
COMMAND="$FIXED_COMMAND"
@@ -912,9 +863,6 @@
@@ -920,9 +874,6 @@
# The string passed to eval must handles spaces in paths correctly.
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.17 $ADDITIONAL_PARA"
eval $COMMAND_LINE
@@ -122,7 +125,7 @@ Debian wrapper.config to try to prevent confusion.
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
exit 1
@@ -1038,9 +986,6 @@
@@ -1046,9 +997,6 @@
# The string passed to eval must handles spaces in paths correctly.
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.17 $ADDITIONAL_PARA"
eval $COMMAND_LINE
@@ -132,18 +135,41 @@ Debian wrapper.config to try to prevent confusion.
else
eval echo `gettext '$APP_LONG_NAME is already running.'`
exit 1
@@ -1850,18 +1795,9 @@
@@ -1785,7 +1733,7 @@
}
showsetusermesg() {
- echo "`gettext \"Please edit $0 and set the variable RUN_AS_USER\"`."
+ echo "`gettext "Please edit /etc/default/i2p and set the variable RUN_AS_USER"`."
}
checkifstartingasroot() {
@@ -1793,7 +1741,7 @@
echo "`gettext 'Running I2P as the root user is *not* recommended.'`"
showsetusermesg
echo
- echo "`gettext \"To run as root anyway, edit $0 and set ALLOW_ROOT=true.\"`"
+ echo "`gettext \"To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true.\"`"
exit 1
fi
}
@@ -1858,23 +1806,9 @@
status
;;
- 'install')
- installdaemon
- if [ ! `grep ^RUN_AS_USER $0` ]; then
- echo
- showsetusermesg
- fi
- echo
- echo "You may want to disable the browser from launching at startup at"
- echo "http://127.0.0.1:7657/configclients"
- echo
- echo "I2P_CONFIG_DIR is currently set to $I2P_CONFIG_DIR."
- echo "Change the value in $0 if this is not"
- echo "appropriate for your configuration."
- ;;
-
- 'remove' | 'uninstall')
@@ -292,3 +318,96 @@ Debian wrapper.config to try to prevent confusion.
-# Allow the service to interact with the desktop.
-wrapper.ntservice.interactive=false
-
--- a/installer/resources/locale/po/messages_de.po
+++ b/installer/resources/locale/po/messages_de.po
@@ -192,14 +192,14 @@
msgstr "Falls gestartet, fordere einen Java Thread dump an"
#: ../i2prouter:1788
-msgid "Please edit $0 and set the variable RUN_AS_USER"
-msgstr "Bitte bearbeite $0 und setze die Variable RUN_AS_USER"
+msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
+msgstr "Bitte bearbeite /etc/default/i2p und setze die Variable RUN_AS_USER"
#: ../i2prouter:1793
msgid "Running I2P as the root user is *not* recommended."
msgstr "I2P als root Benutzer auszuführen ist *nicht* empfehlenswert."
#: ../i2prouter:1796
-msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
+msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
msgstr ""
-"Um I2P trotzdem als root auszuführen bearbeite $0 und setze ALLOW_ROOT=true."
+"Um I2P trotzdem als root auszuführen bearbeite /etc/default/i2p und setze ALLOW_ROOT=true."
--- a/installer/resources/locale/po/messages_en.po
+++ b/installer/resources/locale/po/messages_en.po
@@ -185,7 +185,7 @@
msgstr ""
#: ../i2prouter:1788
-msgid "Please edit $0 and set the variable RUN_AS_USER"
+msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
msgstr ""
#: ../i2prouter:1793
@@ -193,5 +193,5 @@
msgstr ""
#: ../i2prouter:1796
-msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
+msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
msgstr ""
--- a/installer/resources/locale/po/messages_fr.po
+++ b/installer/resources/locale/po/messages_fr.po
@@ -187,7 +187,7 @@
msgstr ""
#: ../i2prouter:1780
-msgid "Please edit $0 and set the variable RUN_AS_USER"
+msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
msgstr ""
#: ../i2prouter:1785
@@ -196,5 +196,5 @@
"Faire fonctionner I2P en tant qu'utilisateur root n'est *pas* recommandé."
#: ../i2prouter:1788
-msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
+msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
msgstr ""
--- a/installer/resources/locale/po/messages_it.po
+++ b/installer/resources/locale/po/messages_it.po
@@ -187,7 +187,7 @@
msgstr ""
#: ../i2prouter:1780
-msgid "Please edit $0 and set the variable RUN_AS_USER"
+msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
msgstr ""
#: ../i2prouter:1785
@@ -195,5 +195,5 @@
msgstr ""
#: ../i2prouter:1788
-msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
+msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
msgstr ""
--- a/installer/resources/locale/po/messages_ru.po
+++ b/installer/resources/locale/po/messages_ru.po
@@ -188,7 +188,7 @@
msgstr ""
#: ../i2prouter:1780
-msgid "Please edit $0 and set the variable RUN_AS_USER"
+msgid "Please edit /etc/default/i2p and set the variable RUN_AS_USER"
msgstr ""
#: ../i2prouter:1785
@@ -196,5 +196,5 @@
msgstr ""
#: ../i2prouter:1788
-msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
+msgid "To run as root anyway, edit /etc/default/i2p and set ALLOW_ROOT=true."
msgstr ""

View File

@@ -9,20 +9,18 @@ a soname to shut lintian up.
core/c/jbigi/build_jbigi.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/c/jbigi/build_jbigi.sh b/core/c/jbigi/build_jbigi.sh
index b1a68dd..99b31e4 100755
--- a/core/c/jbigi/build_jbigi.sh
+++ b/core/c/jbigi/build_jbigi.sh
@@ -39,7 +39,7 @@ SunOS*|OpenBSD*|NetBSD*|*FreeBSD*|Linux*)
@@ -39,7 +39,7 @@
UNIXTYPE="linux"
fi
COMPILEFLAGS="-fPIC -Wall"
COMPILEFLAGS="-fPIC -Wall $CFLAGS"
- INCLUDES="-I. -I../../jbigi/include -I$JAVA_HOME/include -I$JAVA_HOME/include/${UNIXTYPE}"
+ INCLUDES="-I. -I./jbigi/include -I$JAVA_HOME/include -I$JAVA_HOME/include/${UNIXTYPE}"
LINKFLAGS="-shared -Wl,-soname,libjbigi.so"
LIBFILE="libjbigi.so";;
*)
@@ -58,7 +58,7 @@ fi
@@ -58,7 +58,7 @@
echo "Compiling C code..."
rm -f jbigi.o $LIBFILE

View File

@@ -6,11 +6,9 @@ Subject: rename jcpuid
core/c/jcpuid/build.sh | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/core/c/jcpuid/build.sh b/core/c/jcpuid/build.sh
index f3fc9c2..cbd0934 100755
--- a/core/c/jcpuid/build.sh
+++ b/core/c/jcpuid/build.sh
@@ -67,12 +67,8 @@ case `uname -s` in
@@ -75,12 +75,8 @@
exit 0;;
esac

View File

@@ -1,3 +1,44 @@
* 2013-05-28 0.9.6 released
2013-05-24 kytv
* Update geoip.txt based on Maxmind GeoLite Country database from 2013-05-08
2013-05-13 kytv
* Misc. fixes to i2prouter script
* German translation updates from Transifex
2013-05-13 zzz
* i2psnark:
- Adjust target piece size calculation
- Tweak to make it easier for new peers to connect
* NetDB: Increase floodfill count for good
* UPnP: Detect devices without port forwarding capability (ticket #930)
2013-05-07 zzz
* Streaming: Chain stored IOE to get correct location
2013-05-06 zzz
* Console: Fix Jetty thread pool policy and thread name
* Transports: Clean up internal/external port confusion (ticket #873)
- Bind SSU to configured internal, not external, port at startup
- Use only internal ports for UPnP (getRequestedPort() fixups)
- Don't have NTCP follow frequent SSU port changes
- Don't use external SSU port for internal NTCP port
- Display internal SSU port on /confignet
2013-05-01 zzz
* BuildRequestor: Slow down build loop if we have no exploratory tunnels
(ticket #926)
* IRC Server tunnel: Reject bad protocols immediately
2013-04-30 str4d
* Console: Updates to readme_ar and a CSS tweak from hamada (ticket #489)
2013-04-29 zzz
* Transports:
- Initial prep for multiple addresses per style
- Simplify NTCP send pool
2013-04-28 zzz
* i2psnark:
- Improve page nav
@@ -2146,7 +2187,7 @@
* Tunnels:
- Make most classes package private
- Final, static, logs, cleanups
- Consolideate createRateStat calls
- Consolidate createRateStat calls
- Add getTotalLength()
- Remove unused lengthOverride()
* UDP: Mark only first fragment as a duplicate

View File

@@ -4,7 +4,7 @@
<info>
<appname>i2p</appname>
<appversion>0.9.5</appversion>
<appversion>0.9.6</appversion>
<authors>
<author name="I2P" email="http://www.i2p2.de/"/>
</authors>

Binary file not shown.

View File

@@ -1,20 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDRDCCAiwCCQDCm/Zrmali9zANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJB
VTETMBEGA1UECBMKU29tZS1TdGF0ZTELMAkGA1UEBxMCSEgxDDAKBgNVBAoTA0ky
UDEPMA0GA1UECxMGcmVzZWVkMRQwEgYDVQQDEwtyZXNlZWQuaW5mbzAeFw0xMjEw
MjcxODU3NDNaFw0xNjEyMDUxODU3NDNaMGQxCzAJBgNVBAYTAkFVMRMwEQYDVQQI
EwpTb21lLVN0YXRlMQswCQYDVQQHEwJISDEMMAoGA1UEChMDSTJQMQ8wDQYDVQQL
EwZyZXNlZWQxFDASBgNVBAMTC3Jlc2VlZC5pbmZvMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAt9nz0iUvjdX4Hkhfk0FbBOeEP4i/FG3V4VrEdQfcviSF
XgzGYeRtGsvrFWP/5+6bcGnOkIy/jrKJfij3AjKJh8gTzqiNNNnV8VcHwFSNp+hZ
D4BM+UHPACV1Pjd3HQe6f0+LvcTs3HQgIkNkwUyqRuXOm/5Mk6SWSu1740aSwHCj
Kk0x1FByzI0YBvXCPX6TVk6sJqKkQyLzK0CSGSeqUq8GvGCq+jT9k62Su7ooxCwi
GzxaFjMdVYxuI8cuT5Cni+SUw1Ia8vhESnIy6slwzk37xNI80VuMvRT6rD2KcXDH
mK7ml1qL0rJWoF5AE+x/nen4V41mouv1W9rk3wTlTQIDAQABMA0GCSqGSIb3DQEB
BQUAA4IBAQAr6RBviBDW4bnPDTcdtstTDdaYX9yzoh+zzeGB0dUR26GKoOjpSItb
B9nrsW1eJ2wbblfGBUoXhcmNByKHXXHejMhmurHjdei2BuLbTsknN8DPKXu5UF9z
cg4cKQkxgzXOcNYlaF4+sfwFXDHJ4we/8vduVgkyo8R66543/Sh/nIMvq2slRT4w
wIBOVcMb2XxlbdwHW9XALAz9sto+4GH9GAC24f8ngluOpHijMnOOIo4dHibQ5hM9
KcDpHezP0ugMTAxS2NmtVahwAqa2IjpqR7aEQ2wLvxQzDqrXo93L93+b2FKRUQXH
Duud/n/w0kVV3DaIGikOsJayoanR+9HD
MIIDMjCCAhoCCQCGQa3FtL3BhTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJB
VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMRQwEgYDVQQDEwt3d3cuNjltZS5kZTAeFw0xMjExMDIxMjE4NTBa
Fw0xMzExMDIxMjE4NTBaMFsxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0
YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxFDASBgNVBAMT
C3d3dy42OW1lLmRlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3g0m
5bhA2m3xjnJOYNDRtG5BdnHai8rybjjcTYSDEDX5OxV3Jjqtk1LLbf1fZx+s+EKw
6/+g+TLRhjE5d06puRmpyxpywllWT1OUK74QWYKCpmDY4ez2yTC+iSG9RDDNVzQf
24d2/tzyAOgETUBh3CP1HEdaLaZC+uSI+JlafIeGG5bAGYcCXTB7qUbvAkMsak/N
w18h/Sa2xa9rE1EYEb8AqpJYM3dzLlo1PdoWEq6G9h/N+3W0g/qAVGLfSZMSUFZ0
Uc77i3oFgk2YMdnP7+sa3MImscu0rV+/UptuvuktYld9KScGMHJsUYh1q77ClEAZ
KFJBKzivpSjSRcmULQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQAVCMB81jxN9kNv
rKGaI2Vlt82Wj1d9LmxAyTQC1f1lGwVgFBrpIkwhHzmudyEYdmag02QP9DLcQ4I/
LNe5PdFL6Mzfl3QNoYXeaJeiAZhwkQbSM2DYEN9nGaEU/y2LJWvfAH75vcun+oIl
7CvntdQzdZYmtcK0NgjCwY/CD97DyZRkLNjJdkKUvpf1lO4Egf+NheSmzVLo5/5u
/DwTqSfPuyhfb4L2pA1e6M9gLzyAPmP4nx+gToHzY54CB/kyuYk5JOY4IJaGAW3F
YBSYr8/pwXWISCrQi6afB29Ng8WlpWiNqj/yC+X5K9eTihlh2Mun0k/cWgg6JYAm
tt0UhRK0
-----END CERTIFICATE-----

View File

@@ -95,7 +95,7 @@
into your browser.
Once it's working, then you can tell others to use it.</li>
<li>Some people check eepsite lists such as
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> or <a href="http://perv.i2p">perv.i2p</a> for new eepsites, so you may start getting a few visitors. But there are plenty of other ways to tell people. Here are a few ideas:</li>
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> or <a href="http://perv.i2p">perv.i2p</a> for new eepsites, so you may start getting a few visitors. But there are plenty of other ways to tell people. Here are a few ideas:
<ul>
<li>Post a message on the <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce forum</a>
on <a href="http://forum.i2p/">forum.i2p</a>.</li>
@@ -109,7 +109,7 @@
tested it using a jump service, and waited 24 hours for the
address book update to propagate to others, that shouldn't be necessary.</ul>
<h2>Further Assistance</h2><ul>
<li>If you have any questions, the following places are available for support:</li>
<li>If you have any questions, the following places are available for support:
<ul>
<li>Our IRC support channel: <ul><li><a href="irc://irc.freenode.net/i2p">#i2p on Freenode</a></li>
<li>Anonymously via your resident <a href="irc://127.0.0.1:6668/i2p-help">I2P IRC tunnel</a>.</li></ul>

View File

@@ -95,7 +95,7 @@
Dès que cela fonctionne, vous pouvez en parler aux autres.</li>
<li>Certains personnes vérifient les nouveaux eepsites sur les listes tels que
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> ou <a href="http://perv.i2p">perv.i2p</a>. Vous pouvez commencer à avoir
quelques visiteurs. Il y a beaucoup des manières d'informers les autres. Voici quelques idées : </li>
quelques visiteurs. Il y a beaucoup des manières d'informers les autres. Voici quelques idées :
<ul>
<li>Poster un message sur le <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce forum</a>
sur <a href="http://forum.i2p/">forum.i2p</a>.</li>
@@ -107,7 +107,7 @@
mais si vous avez déjà réussi à poster la clé sur un service de "add key" (type stats.i2p), et attendu 24 heures pour que le carnet d'adresse
se propage aux autres, cela ne doit pas être nécessaire. </ul>
<h2>Plus d'assistance</h2><ul>
<li>Si vous avez plus de questions, trouvez du soutien à ces endroits :</li>
<li>Si vous avez plus de questions, trouvez du soutien à ces endroits :
<ul>
<li>Notre canal IRC de soutien : <ul><li><a href="irc://irc.freenode.net/i2p">#i2p sur Freenode</a></li>
<li>En anonymat via votre <a href="irc://127.0.0.1:6668/i2p">I2P IRC tunnel</a>.</li></ul>

View File

@@ -71,7 +71,7 @@
<li> Если Вы не можете ждать несколько часов, попробуйте воспользоваться jump-сервисом. Это возможно сразу (через несколько минут) после добавления ключа в адресную книгу на любой сайт-каталог (см. список в первом пункте). Проверьте сами — откройте в браузере http://stats.i2p/cgi-bin/jump.cgi?a=<i>something</i>.i2p или http://i2host.i2p/cgi-bin/i2hostjump?<i>something</i>.i2p. # Если это сработало для Вас, Ваши гости тоже смогут воспользоваться этим способом.</li>
<li>Некоторые люди следят за обновлениями в списках i2p-сайтов, например <a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> или <a href="http://perv.i2p">perv.i2p</a>, так что скоро у Вас появятся первые посетители. Всех остальных Вы можете оповестить другими способами. Например:</li>
<li>Некоторые люди следят за обновлениями в списках i2p-сайтов, например <a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> или <a href="http://perv.i2p">perv.i2p</a>, так что скоро у Вас появятся первые посетители. Всех остальных Вы можете оповестить другими способами. Например:
<ul>
<li>Напишите сообщение на форуме в разделе <a href="http://forum.i2p/viewforum.php?f=16">Eepsite announce</a></li>
<li>Расскажите о сайте в IRC на каналах #i2p или #i2p-chat</li>
@@ -84,10 +84,10 @@
<h2>А что потом? </h2>
<ul>
<li>Если у вас остались вопросы, добро пожаловать на:</li>
<li>Если у вас остались вопросы, добро пожаловать на:
<ul>
<li>Наш IRC-канал поддержки: </li>
<li>Наш IRC-канал поддержки:
<ul>
<li><a href="irc://irc.freenode.net/i2p">#i2p в сети Freenode</a> </li>
<li>Анонимно доступен через <a href="irc://127.0.0.1:6668/i2p">встроенный IRC-туннель</a> Вашего I2P-маршрутизатора.</li>
@@ -98,6 +98,7 @@
<hr><div class="footnote">
На основе шаблонов: zzz, 07.10.2009 и dr|z3d, Ноябрь 2010.</div>
</div>
</div>
</body>
</html>

View File

@@ -94,7 +94,7 @@
till din egen
<a href="http://127.0.0.1:7657/susidns/subscriptions.jsp">prenumerationslista</a>.
Gå till din prenumerationsinställningssida och lägg till ett par av de här för en automatiskt uppdaterad
lista över nya hosts:</li><ul>
lista över nya hosts:<ul>
<li><a href="http://tino.i2p/hosts.txt">http://tino.i2p/hosts.txt</a></li>
<li><a href="http://stats.i2p/cgi-bin/newhosts.txt">http://stats.i2p/cgi-bin/newhosts.txt</a></li>
<li><a href="http://i2host.i2p/cgi-bin/i2hostetag">http://i2host.i2p/cgi-bin/i2hostetag</a></li></ul>
@@ -109,7 +109,7 @@
<li>Vissa människor kolla på eepsajtlistor som
<a href="http://inproxy.tino.i2p/status.php">inproxy.tino.i2p/status.php</a> eller <a href="http://perv.i2p">perv.i2p</a> efter nya eepsajter,
så att du kan börja få ett par besökare. Men det finns massor av sätt att berätta för folk.
Här är en rad idëer:</li>
Här är en rad idëer:
<ul>
<li>Posta en meddelanden på <a href="http://forum.i2p/viewforum.php?f=16">Eepsajt-annonseringsforum</a>
eller på <a href="http://forum.i2p/">forum.i2p</a>.</li>
@@ -130,6 +130,7 @@
<li><a href="irc://127.0.0.1:6668/i2p">eller anonymt via I2P-IRC-tunnel</a>.</li>
<li><a href="http://forum.i2p/viewforum.php?f=10">Sektionen om tekniska problem</a>
<a href="http://forum.i2p/">forum.i2p</a>.</li>
</ul>
</ul>
<div class="notify">
<b>Note:</b> This page, the website and the console all need translating into YOUR language if it's not already been done or in progress. Please consider helping the project grow by <a href="http://www.i2p2.i2p/getinvolved.html">volunteering your time</a> to translate. Contact the project via the IRC channel listed above. Thanks in advance!</div>

File diff suppressed because it is too large Load Diff

View File

@@ -702,9 +702,9 @@ checkUser() {
#
if test -f "/sbin/runuser"
then
/sbin/runuser - $RUN_AS_USER -c "\"$REALPATH\" $ADDITIONAL_PARA"
/sbin/runuser -s /bin/sh - $RUN_AS_USER -c "\"$REALPATH\" $ADDITIONAL_PARA"
else
su - $RUN_AS_USER -c "\"$REALPATH\" $ADDITIONAL_PARA"
su - $RUN_AS_USER -s /bin/sh -c "\"$REALPATH\" $ADDITIONAL_PARA"
fi
RUN_AS_USER_EXITCODE=$?
# Now that we are the original user again, we may need to clean up the lock file.
@@ -877,13 +877,21 @@ waitforwrapperstop() {
done
}
create_config_dir() {
if ! mkdir -p "$I2P_CONFIG_DIR"; then
echo "Error creating $I2P_CONFIG_DIR! Edit $0 and set I2P_CONFIG_DIR" >&2
echo "to the correct location." >&2
exit 1
fi
}
launchdinternal() {
getpid
trap launchdtrap TERM
if [ "X$pid" = "X" ]
then
prepAdditionalParams "$@"
mkdir -p "$PIDDIR" "$LOGDIR"
create_config_dir
# The string passed to eval must handles spaces in paths correctly.
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.17 $ADDITIONAL_PARA"
@@ -907,7 +915,7 @@ console() {
trap '' 3 2
prepAdditionalParams "$@"
mkdir -p "$PIDDIR" "$LOGDIR"
create_config_dir
# The string passed to eval must handles spaces in paths correctly.
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" $ANCHORPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.17 $ADDITIONAL_PARA"
@@ -1033,7 +1041,7 @@ start() {
if [ "X$pid" = "X" ]
then
prepAdditionalParams "$@"
mkdir -p "$PIDDIR" "$LOGDIR"
create_config_dir
# The string passed to eval must handles spaces in paths correctly.
COMMAND_LINE="$CMDNICE \"$WRAPPER_CMD\" \"$WRAPPER_CONF\" wrapper.syslog.ident=\"$APP_NAME\" wrapper.java.command=\"$JAVABINARY\" wrapper.pidfile=\"$PIDFILE\" wrapper.name=\"$APP_NAME\" wrapper.displayname=\"$APP_LONG_NAME\" wrapper.daemonize=TRUE $ANCHORPROP $IGNOREPROP $STATUSPROP $COMMANDPROP $LOCKPROP $LOGPROP wrapper.script.version=3.5.17 $ADDITIONAL_PARA"
@@ -1777,7 +1785,7 @@ showUsage() {
}
showsetusermesg() {
echo "`gettext 'Please edit $0 and set the variable RUN_AS_USER'`."
echo "`gettext \"Please edit $0 and set the variable RUN_AS_USER\"`."
}
checkifstartingasroot() {
@@ -1785,7 +1793,7 @@ checkifstartingasroot() {
echo "`gettext 'Running I2P as the root user is *not* recommended.'`"
showsetusermesg
echo
echo "`gettext 'To run as root anyway, edit $0 and set ALLOW_ROOT=true.'`"
echo "`gettext \"To run as root anyway, edit $0 and set ALLOW_ROOT=true.\"`"
exit 1
fi
}
@@ -1853,11 +1861,16 @@ docommand() {
'install')
installdaemon
if [ ! `grep ^RUN_AS_USER $0` ]; then
echo
showsetusermesg
fi
echo
echo "You may want to disable the browser from launching at startup at"
echo "http://127.0.0.1:7657/configclients"
echo
echo "I2P_CONFIG_DIR is currently set to $I2P_CONFIG_DIR."
echo "Change the value in $0 if this is not"
echo "appropriate for your configuration."
;;
'remove' | 'uninstall')

View File

@@ -4,14 +4,14 @@
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# <martin2p@i2pmail.org>, 2013.
# <zeroflag@i2pmail.org>, 2013.
# Ashoka <martin2p@i2pmail.org>, 2013
# zeroflag <zeroflag@i2pmail.org>, 2013
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-02-22 13:13+0000\n"
"PO-Revision-Date: 2013-02-07 19:30+0000\n"
"POT-Creation-Date: 2013-05-15 22:00+0000\n"
"PO-Revision-Date: 2013-05-08 14:19+0000\n"
"Last-Translator: zeroflag <zeroflag@i2pmail.org>\n"
"Language-Team: German (http://www.transifex.com/projects/p/I2P/language/"
"de/)\n"
@@ -25,178 +25,181 @@ msgstr ""
msgid "Failed to load the wrapper"
msgstr "Wrapper konnte nicht geladen werden."
#: ../i2prouter:892 ../i2prouter:919 ../i2prouter:993 ../i2prouter:1021
#: ../i2prouter:1045
#: ../i2prouter:900 ../i2prouter:927 ../i2prouter:1001 ../i2prouter:1029
#: ../i2prouter:1053
#, sh-format
msgid "$APP_LONG_NAME is already running."
msgstr "$APP_LONG_NAME läuft bereits."
#: ../i2prouter:903
#: ../i2prouter:911
#, sh-format
msgid "Running $APP_LONG_NAME"
msgstr "Führe $APP_LONG_NAME aus"
#: ../i2prouter:926
#: ../i2prouter:934
#, sh-format
msgid "Waiting for $APP_LONG_NAME"
msgstr "Warte auf $APP_LONG_NAME"
#: ../i2prouter:973
#: ../i2prouter:981
#, sh-format
msgid "WARNING: $APP_LONG_NAME may have failed to start."
msgstr "WARNUNG: Das Starten von $APP_LONG_NAME könnte fehlgeschlagen sein"
#: ../i2prouter:987 ../i2prouter:1015 ../i2prouter:1224 ../i2prouter:1513
#: ../i2prouter:995 ../i2prouter:1023 ../i2prouter:1232 ../i2prouter:1521
msgid "Must be root to perform this action."
msgstr "Nur root kann diese Aktion durchführen."
#: ../i2prouter:1031
#: ../i2prouter:1039
#, sh-format
msgid "Starting $APP_LONG_NAME"
msgstr "Starte $APP_LONG_NAME"
#: ../i2prouter:1056
#: ../i2prouter:1064
#, sh-format
msgid "Stopping $APP_LONG_NAME"
msgstr "Stoppe $APP_LONG_NAME"
#: ../i2prouter:1060 ../i2prouter:1128 ../i2prouter:1681
#: ../i2prouter:1068 ../i2prouter:1136 ../i2prouter:1689
#, sh-format
msgid "$APP_LONG_NAME was not running."
msgstr "$APP_LONG_NAME wurde nicht ausgeführt."
#: ../i2prouter:1073 ../i2prouter:1081 ../i2prouter:1143 ../i2prouter:1151
#: ../i2prouter:1081 ../i2prouter:1089 ../i2prouter:1151 ../i2prouter:1159
#, sh-format
msgid "Unable to stop $APP_LONG_NAME."
msgstr "Konnte $APP_LONG_NAME nicht beenden."
#: ../i2prouter:1099
#: ../i2prouter:1107
#, sh-format
msgid "Waiting for $APP_LONG_NAME to exit"
msgstr "Warte auf die Beendigung von $APP_LONG_NAME."
#: ../i2prouter:1113
#: ../i2prouter:1121
#, sh-format
msgid "Failed to stop $APP_LONG_NAME."
msgstr "Beenden von $APP_LONG_NAME fehlgeschlagen."
#: ../i2prouter:1116
#: ../i2prouter:1124
#, sh-format
msgid "Stopped $APP_LONG_NAME."
msgstr "$APP_LONG_NAME wurde beendet."
#: ../i2prouter:1124
#: ../i2prouter:1132
#, sh-format
msgid "Stopping $APP_LONG_NAME gracefully"
msgstr "Beende $APP_LONG_NAME ordnungsgemäß."
#: ../i2prouter:1170
#: ../i2prouter:1178
#, sh-format
msgid "$APP_LONG_NAME is not running."
msgstr "$APP_LONG_NAME wird nicht ausgeführt."
#: ../i2prouter:1175
#: ../i2prouter:1183
#, sh-format
msgid "$APP_LONG_NAME is running: PID:$pid"
msgstr "$APP_LONG_NAME wird ausgeführt: PID:$pid"
#: ../i2prouter:1178
#: ../i2prouter:1186
#, sh-format
msgid "$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS"
msgstr ""
"$APP_LONG_NAME wird ausgeführt: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS"
#: ../i2prouter:1231 ../i2prouter:1243 ../i2prouter:1262 ../i2prouter:1279
#: ../i2prouter:1346 ../i2prouter:1366 ../i2prouter:1380 ../i2prouter:1394
#: ../i2prouter:1422 ../i2prouter:1460 ../i2prouter:1495
#: ../i2prouter:1239 ../i2prouter:1251 ../i2prouter:1270 ../i2prouter:1287
#: ../i2prouter:1354 ../i2prouter:1374 ../i2prouter:1388 ../i2prouter:1402
#: ../i2prouter:1430 ../i2prouter:1468 ../i2prouter:1503
#, sh-format
msgid "The $APP_LONG_NAME daemon is already installed."
msgstr "Der $APP_LONG_NAME Dämon ist bereits installiert."
#: ../i2prouter:1234 ../i2prouter:1249 ../i2prouter:1351 ../i2prouter:1383
#: ../i2prouter:1397 ../i2prouter:1411 ../i2prouter:1425 ../i2prouter:1463
#: ../i2prouter:1498
#: ../i2prouter:1242 ../i2prouter:1257 ../i2prouter:1359 ../i2prouter:1391
#: ../i2prouter:1405 ../i2prouter:1419 ../i2prouter:1433 ../i2prouter:1471
#: ../i2prouter:1506
#, sh-format
msgid "Installing the $APP_LONG_NAME daemon"
msgstr "Installiere den $APP_LONG_NAME Dämon"
#: ../i2prouter:1505
#: ../i2prouter:1513
#, sh-format
msgid "Install not currently supported for $DIST_OS"
msgstr "Die Installation für $DIST_OS wird momentan nicht unterstützt"
#: ../i2prouter:1521 ../i2prouter:1534 ../i2prouter:1548 ../i2prouter:1557
#: ../i2prouter:1567 ../i2prouter:1591 ../i2prouter:1604 ../i2prouter:1616
#: ../i2prouter:1634 ../i2prouter:1647 ../i2prouter:1661
#: ../i2prouter:1529 ../i2prouter:1542 ../i2prouter:1556 ../i2prouter:1565
#: ../i2prouter:1575 ../i2prouter:1599 ../i2prouter:1612 ../i2prouter:1624
#: ../i2prouter:1642 ../i2prouter:1655 ../i2prouter:1669
#, sh-format
msgid "Removing $APP_LONG_NAME daemon"
msgstr "Entferne $APP_LONG_NAME Dämon"
#: ../i2prouter:1527 ../i2prouter:1542 ../i2prouter:1551 ../i2prouter:1561
#: ../i2prouter:1572 ../i2prouter:1585 ../i2prouter:1597 ../i2prouter:1610
#: ../i2prouter:1628 ../i2prouter:1641 ../i2prouter:1655 ../i2prouter:1666
#: ../i2prouter:1535 ../i2prouter:1550 ../i2prouter:1559 ../i2prouter:1569
#: ../i2prouter:1580 ../i2prouter:1593 ../i2prouter:1605 ../i2prouter:1618
#: ../i2prouter:1636 ../i2prouter:1649 ../i2prouter:1663 ../i2prouter:1674
#, sh-format
msgid "The $APP_LONG_NAME daemon is not currently installed."
msgstr "Der $APP_LONG_NAME Dämon ist momentan nicht installiert."
#: ../i2prouter:1670
#: ../i2prouter:1678
#, sh-format
msgid "Remove not currently supported for $DIST_OS"
msgstr "Entfernen wird momentan unter $DIST_OS nicht unterstützt."
#: ../i2prouter:1757
#: ../i2prouter:1765
msgid "Commands:"
msgstr "Befehle:"
#: ../i2prouter:1758
#: ../i2prouter:1766
msgid "Launch in the current console."
msgstr "Start in dieser Konsole."
#: ../i2prouter:1759
#: ../i2prouter:1767
msgid "Start in the background as a daemon process."
msgstr "Im Hintergrund als Dämon starten."
#: ../i2prouter:1760
#: ../i2prouter:1768
msgid "Stop if running as a daemon or in another console."
msgstr ""
"Beende den Router, falls er als Dämon oder in einer anderen Konsole "
"ausgeführt wird."
#: ../i2prouter:1761
#: ../i2prouter:1769
msgid "Stop gracefully, may take up to 11 minutes."
msgstr "Ordnungsgemäßes Beenden kann bis zu 11 Minuten dauern."
#: ../i2prouter:1762
#: ../i2prouter:1770
msgid "Stop if running and then start."
msgstr ""
"Beende den Router, falls er ausgeführt wird und dann starte ihn erneut."
#: ../i2prouter:1763
#: ../i2prouter:1771
msgid "Restart only if already running."
msgstr ""
msgstr "Starte den Router neu, falls er momentan ausgeführt wird."
#: ../i2prouter:1764
#: ../i2prouter:1772
msgid "Query the current status."
msgstr "Aktuellen Status abfragen."
#: ../i2prouter:1765
#: ../i2prouter:1773
msgid "Install to start automatically when system boots."
msgstr "Installiere für automatischen Start wenn das System hochfährt."
#: ../i2prouter:1766
#: ../i2prouter:1774
msgid "Uninstall."
msgstr "Deinstallieren."
#: ../i2prouter:1767
#: ../i2prouter:1775
msgid "Request a Java thread dump if running."
msgstr "Falls gestartet, fordere einen Java Thread dump an"
#: ../i2prouter:1780
#: ../i2prouter:1788
msgid "Please edit $0 and set the variable RUN_AS_USER"
msgstr "Bitte bearbeite $0 und setze die Variable RUN_AS_USER"
#: ../i2prouter:1785
#: ../i2prouter:1793
msgid "Running I2P as the root user is *not* recommended."
msgstr "I2P als root Benutzer auszuführen ist *nicht* empfehlenswert."
#: ../i2prouter:1788
#: ../i2prouter:1796
msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
msgstr ""
"Um I2P trotzdem als root auszuführen bearbeite $0 und setze ALLOW_ROOT=true."

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P startup script\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2012-12-22 14:58+0000\n"
"POT-Creation-Date: 2013-05-15 21:58+0000\n"
"PO-Revision-Date: 2012-12-21 23:34+0000\n"
"Last-Translator: kytv <killyourtv@mail.i2p>\n"
"Language-Team: English \n"
@@ -22,176 +22,176 @@ msgstr ""
msgid "Failed to load the wrapper"
msgstr ""
#: ../i2prouter:892 ../i2prouter:919 ../i2prouter:993 ../i2prouter:1021
#: ../i2prouter:1045
#: ../i2prouter:900 ../i2prouter:927 ../i2prouter:1001 ../i2prouter:1029
#: ../i2prouter:1053
#, sh-format
msgid "$APP_LONG_NAME is already running."
msgstr ""
#: ../i2prouter:903
#: ../i2prouter:911
#, sh-format
msgid "Running $APP_LONG_NAME"
msgstr ""
#: ../i2prouter:926
#: ../i2prouter:934
#, sh-format
msgid "Waiting for $APP_LONG_NAME"
msgstr ""
#: ../i2prouter:973
#: ../i2prouter:981
#, sh-format
msgid "WARNING: $APP_LONG_NAME may have failed to start."
msgstr ""
#: ../i2prouter:987 ../i2prouter:1015 ../i2prouter:1224 ../i2prouter:1513
#: ../i2prouter:995 ../i2prouter:1023 ../i2prouter:1232 ../i2prouter:1521
msgid "Must be root to perform this action."
msgstr ""
#: ../i2prouter:1031
#: ../i2prouter:1039
#, sh-format
msgid "Starting $APP_LONG_NAME"
msgstr ""
#: ../i2prouter:1056
#: ../i2prouter:1064
#, sh-format
msgid "Stopping $APP_LONG_NAME"
msgstr ""
#: ../i2prouter:1060 ../i2prouter:1128 ../i2prouter:1681
#: ../i2prouter:1068 ../i2prouter:1136 ../i2prouter:1689
#, sh-format
msgid "$APP_LONG_NAME was not running."
msgstr ""
#: ../i2prouter:1073 ../i2prouter:1081 ../i2prouter:1143 ../i2prouter:1151
#: ../i2prouter:1081 ../i2prouter:1089 ../i2prouter:1151 ../i2prouter:1159
#, sh-format
msgid "Unable to stop $APP_LONG_NAME."
msgstr ""
#: ../i2prouter:1099
#: ../i2prouter:1107
#, sh-format
msgid "Waiting for $APP_LONG_NAME to exit"
msgstr ""
#: ../i2prouter:1113
#: ../i2prouter:1121
#, sh-format
msgid "Failed to stop $APP_LONG_NAME."
msgstr ""
#: ../i2prouter:1116
#: ../i2prouter:1124
#, sh-format
msgid "Stopped $APP_LONG_NAME."
msgstr ""
#: ../i2prouter:1124
#: ../i2prouter:1132
#, sh-format
msgid "Stopping $APP_LONG_NAME gracefully"
msgstr ""
#: ../i2prouter:1170
#: ../i2prouter:1178
#, sh-format
msgid "$APP_LONG_NAME is not running."
msgstr ""
#: ../i2prouter:1175
#: ../i2prouter:1183
#, sh-format
msgid "$APP_LONG_NAME is running: PID:$pid"
msgstr ""
#: ../i2prouter:1178
#: ../i2prouter:1186
#, sh-format
msgid "$APP_LONG_NAME is running: PID:$pid, Wrapper:$STATUS, Java:$JAVASTATUS"
msgstr ""
#: ../i2prouter:1231 ../i2prouter:1243 ../i2prouter:1262 ../i2prouter:1279
#: ../i2prouter:1346 ../i2prouter:1366 ../i2prouter:1380 ../i2prouter:1394
#: ../i2prouter:1422 ../i2prouter:1460 ../i2prouter:1495
#: ../i2prouter:1239 ../i2prouter:1251 ../i2prouter:1270 ../i2prouter:1287
#: ../i2prouter:1354 ../i2prouter:1374 ../i2prouter:1388 ../i2prouter:1402
#: ../i2prouter:1430 ../i2prouter:1468 ../i2prouter:1503
#, sh-format
msgid "The $APP_LONG_NAME daemon is already installed."
msgstr ""
#: ../i2prouter:1234 ../i2prouter:1249 ../i2prouter:1351 ../i2prouter:1383
#: ../i2prouter:1397 ../i2prouter:1411 ../i2prouter:1425 ../i2prouter:1463
#: ../i2prouter:1498
#: ../i2prouter:1242 ../i2prouter:1257 ../i2prouter:1359 ../i2prouter:1391
#: ../i2prouter:1405 ../i2prouter:1419 ../i2prouter:1433 ../i2prouter:1471
#: ../i2prouter:1506
#, sh-format
msgid "Installing the $APP_LONG_NAME daemon"
msgstr ""
#: ../i2prouter:1505
#: ../i2prouter:1513
#, sh-format
msgid "Install not currently supported for $DIST_OS"
msgstr ""
#: ../i2prouter:1521 ../i2prouter:1534 ../i2prouter:1548 ../i2prouter:1557
#: ../i2prouter:1567 ../i2prouter:1591 ../i2prouter:1604 ../i2prouter:1616
#: ../i2prouter:1634 ../i2prouter:1647 ../i2prouter:1661
#: ../i2prouter:1529 ../i2prouter:1542 ../i2prouter:1556 ../i2prouter:1565
#: ../i2prouter:1575 ../i2prouter:1599 ../i2prouter:1612 ../i2prouter:1624
#: ../i2prouter:1642 ../i2prouter:1655 ../i2prouter:1669
#, sh-format
msgid "Removing $APP_LONG_NAME daemon"
msgstr ""
#: ../i2prouter:1527 ../i2prouter:1542 ../i2prouter:1551 ../i2prouter:1561
#: ../i2prouter:1572 ../i2prouter:1585 ../i2prouter:1597 ../i2prouter:1610
#: ../i2prouter:1628 ../i2prouter:1641 ../i2prouter:1655 ../i2prouter:1666
#: ../i2prouter:1535 ../i2prouter:1550 ../i2prouter:1559 ../i2prouter:1569
#: ../i2prouter:1580 ../i2prouter:1593 ../i2prouter:1605 ../i2prouter:1618
#: ../i2prouter:1636 ../i2prouter:1649 ../i2prouter:1663 ../i2prouter:1674
#, sh-format
msgid "The $APP_LONG_NAME daemon is not currently installed."
msgstr ""
#: ../i2prouter:1670
#: ../i2prouter:1678
#, sh-format
msgid "Remove not currently supported for $DIST_OS"
msgstr ""
#: ../i2prouter:1757
#: ../i2prouter:1765
msgid "Commands:"
msgstr ""
#: ../i2prouter:1758
#: ../i2prouter:1766
msgid "Launch in the current console."
msgstr ""
#: ../i2prouter:1759
#: ../i2prouter:1767
msgid "Start in the background as a daemon process."
msgstr ""
#: ../i2prouter:1760
#: ../i2prouter:1768
msgid "Stop if running as a daemon or in another console."
msgstr ""
#: ../i2prouter:1761
#: ../i2prouter:1769
msgid "Stop gracefully, may take up to 11 minutes."
msgstr ""
#: ../i2prouter:1762
#: ../i2prouter:1770
msgid "Stop if running and then start."
msgstr ""
#: ../i2prouter:1763
#: ../i2prouter:1771
msgid "Restart only if already running."
msgstr ""
#: ../i2prouter:1764
#: ../i2prouter:1772
msgid "Query the current status."
msgstr ""
#: ../i2prouter:1765
#: ../i2prouter:1773
msgid "Install to start automatically when system boots."
msgstr ""
#: ../i2prouter:1766
#: ../i2prouter:1774
msgid "Uninstall."
msgstr ""
#: ../i2prouter:1767
#: ../i2prouter:1775
msgid "Request a Java thread dump if running."
msgstr ""
#: ../i2prouter:1780
#: ../i2prouter:1788
msgid "Please edit $0 and set the variable RUN_AS_USER"
msgstr ""
#: ../i2prouter:1785
#: ../i2prouter:1793
msgid "Running I2P as the root user is *not* recommended."
msgstr ""
#: ../i2prouter:1788
#: ../i2prouter:1796
msgid "To run as root anyway, edit $0 and set ALLOW_ROOT=true."
msgstr ""

View File

@@ -109,7 +109,7 @@
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a href="irc://127.0.0.1:6668/i2p">#i2p</a> or <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> on I2P's internal IRC network (<code>irc.postman.i2p</code> or <code>irc.freshcoffee.i2p</code>). These channels are also available outside of I2P's encrypted, anonymous network via <a href="irc://irc.freenode.net/i2p">Freenode IRC</a>.
</li>
<li class="tidylist"><b>Reporting Bugs</b><br>If you'd like to report a bug, please file a ticket on <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. For developer-related discussions, please visit <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> or come and visit the <a href="irc://127.0.0.1:6668/i2p-dev">developer channel</a> on I2P's IRC network. Developers can browse source at <a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">zzz's mtn repository viewer</a> or via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We use <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> to manage our source code.
<li class="tidylist"><b>Reporting Bugs</b><br>If you'd like to report a bug, please file a ticket on <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. For developer-related discussions, please visit <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> or come and visit the <a href="irc://127.0.0.1:6668/i2p-dev">developer channel</a> on I2P's IRC network. Developers can browse source at <a href="http://killyourtv.i2p/viewmtn/" target="_blank">kytv's mtn repository viewer</a> or via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We use <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> to manage our source code.
</li>
<li class="tidylist"><b>Get Involved!</b><br>I2P is developed and maintained mostly through unfunded, voluntary participation by community members. We're happy to accept <a href="http://www.i2p2.i2p/donate.html" target="_blank">donations</a>, which go into essential hosting and administrative costs. We have <a href="http://www.i2p2.i2p/bounties.html" target="_blank">cash bounties</a> for aspects of I2P for developers looking for incentives to participate, and we're always looking for more <a href="http://www.i2p2.i2p/newdevelopers.html" target="_blank">Java coders</a>, <a href="http://www.i2p2.i2p/newtranslators.html" target="_blank">translators</a>, promoters and users to help I2P grow. The bigger the I2P network, the more everyone benefits, so simply telling all your friends about I2P (and lending a hand with the installation and setup where needed) is a big help. For further info on how you can participate, visit the <a href="http://www.i2p2.i2p/getinvolved.html" target="_blank">volunteers page</a> on the website.

View File

@@ -1,33 +1,79 @@
<div dir="rtl" lang="ar">
<p>عندما تقوم بتشغيل I2P ستبدأ الأرقام على يسار الشاشة في الازدياد خلال الدقائق التالية وستظهر عبارة <i>Shared Clients</i> (ان <a href=#trouble>لم تظهر، انظر التعليمات اسفله</a>). عندها يمكنك الحصول على عدة خدمات مثل تورنت، البريد الإلكتروني السري، وخدمات أخرى:</p>
<div lang="ar" dir="rtl">
<p>
I2P عندما تقوم بتشغيل
ستبدأ الأرقام على يسار الشاشة في الازدياد خلال الدقائق التالية وستظهر عبارة
<i>Shared Clients</i> (ان <a href=#trouble>لم تظهر، انظر التعليمات اسفله</a>). عندها يمكنك الحصول على عدة خدمات مثل تورنت، البريد الإلكتروني السري، وخدمات أخرى:</p>
<ul>
<li>يمكنك الوصول الى مواقع مجهولة (تسمى eepsites) و خدمات أخرى ( ssh على I2P Jabber،IRC الخ...) زيادة على امكانية استضافة ونشر موقعك الخاص :
لتصفح مواقع (eepsites) على شبكة I2P عليك تغيير اعدادات المتصفح HTTP proxy الى عنوان 127.0.0.1 و port الى 4444، ثم يمكنك تصفح مواقع <br>
<li class="tidylist">قم بتغيير اعدادت المتصفح إلى <b>HTTP-Proxy: 127.0.0.1 Port 4444</b> للتمكن من الدخول الى المواقع داخل الشبكة I2P
<br>
<ul class="links">
<li><a href="http://forum.i2p/">forum.i2p</a>: وصلة آمنة ومجهولة الى منتدى <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li><a href="http://www.i2p2.i2p/index_fr.html">www.i2p2.i2p</a> و <a href="http://i2p-projekt.i2p/index_fr.html">i2p-projekt.i2p</a>:
هما موقع الرسمي للمشروع <a href="http://www.i2p2.de/index_fr.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>محرك بحث</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>ويكي مفتوح التي يستطيع الجميع تحريرها مع الكثير من المعلومات حول الشبكة</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>موقع لتحميل مجموعة من البرامج (I2PFox, iMule, I2P-Messenger, ...) <br></li>
</ul>
هناك العديد من eepsites، فقط اتبع هذه الروابط لإكتشاف المزيد!</li>
<li class="tidylist"><b>تحميل الملفات</b> يمكن استعمال برنامج <a href="http://www.klomp.org/snark/">Snark</a> الموجود ضمن حزمة برامج I2P لتحميل ملفات <a href="http://www.bittorrent.com/">BitTorrent</a>.</li>
<li><a href="http://forum.i2p/">forum.i2p</a> وصلة آمنة ومجهولة الى المنتدى الرسمي <a href="http://forum.i2p2.de/">forum.i2p2.de</a></li>
<li><a href="http://www.i2p2.i2p/index_de.html">www.i2p2.i2p</a> هما موقع الرسمي للمشروع <a href="http://i2p-projekt.i2p/index_de.html">i2p-projekt.i2p</a>و <a href="http://www.i2p2.de/index_de.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p </a>محرك بحث خاص بالمواقع داخل الشبكة</li>
<li><a href="http://ugha.i2p/">ugha.i2p </a>ويكي مفتوح التي يستطيع الجميع تحريرها مع الكثير من المعلومات حول الشبكة</li>
<li><a href="http://echelon.i2p">echelon.i2p </a>I2PFox, iMule, I2P-Messenger موقع لتحميل مجموعة من البرامج مثل </li>
<li><a href="http://pastethis.i2p">pastethis.i2p </a>موقع لمشاركة المحتوى النصي</li>
</ul><br />
هناك العديد من eepsites، فقط اتبع هذه الروابط لإكتشاف المزيد!</li>
<li class="tidylist"><b>تصفح الانترنت</b>
شبكة I2P مصممة لتقديم اكبر قدر من الامان والخصوصية للاتصال داخل الشبكة المغلقة، لذلك ينصح عدم استخدامها للوصول الى المواقع العادية مثل غوغل وغيرها لانها <b> لم تصمم كبروكسي خارجي للوصول لمواقع محجوبة</b>. يمكن معرفة استخدام الشبكة لكن بما أن الاتصال مجهول ومشفر لا يمكن معرفة النشاط الذي تقوم به (مشاركة الملفات، بريد الكتروني، دردشة...).
</li>
<li class="tidylist"><b>مشاركة الملفات</b>
يحتوي حزمة البرامج على برنامج تورنت
<a href="i2psnark/">I2PSnark</a>
يوفر امكانية مشاركة الملفات داخل الشبكة بصفة مشفرة وسرية، لكن لا يصلح لتحميل ملفات تورنت من الانترنت العادية.
</li>
<li class="tidylist"><b>بريد الكتروني المجهول</b>
يمكن تبادل بريد الكتروني المجهول داخل الشبكة وايضا مع شبكة الانترنت العادية عبر واجهة ويب <a href="/susimail/susimail">susimail</a>
او اي برنامج متوافق مع (POP3/SMTP). يمكن التسجيل في الخدمة عبر <a href="http://hq.postman.i2p/">hq.postman.i2p</a>
<li class="tidylist"><b>البريد الالكتروني المجهول:</b> يمكن استعمال شبكة I2P لإرسال واستقبال البريد الالكتروني بطريقة متوافقة مع بروتوكول (POP3 / SMTP) الشيء الذي يمكن من ارسال واستقبال البريد الالكتروني المجهول و المشفر داخل الشبكة وايضا عن طريق الإنترنت العادية. يمكن زيارة <a href="http://hq.postman.i2p/">hq.postman.i2p</a> للحصول على حساب. .
<li class="tidylist"><b>الدردشة بطريقة مجهولة</b> استعمل برنامج الدردشة IRC مثل (Chatzilla, Pidgin, XChat) واتصل بالسيرفر على عنوان 127.0.0.1 وبورت 6668 ليتم الإتصال باحدى السيرفرات IRC المجهولة والمشقرة بحيث لا يستطيع مزود الانترنت او الحكومة او أي شخص آخر التنصت على محادثتك! ثم قم بالدخول الى احدى الغرف i2p-help,#i2p,#i2p-chat# او غرف أخرى.
</ul>
<br>
وسيلة اخرى مبتكرة لتبادل الرسائل بدون الحاجة الى خادم ويب
<h2>استضافة موقع مجهول ومشفر على شبكة I2P</h2>
<a href="http://tjgidoycrw6s3guetge3kvrvynppqjmvqsosmtbmgqasa6vmsf6a.b32.i2p/">I2P-Bote</a>
يجب تنصيبه كملحق عبر موقع
<a href="http://i2plugins.i2p/" target="_blank">i2plugins.i2p</a>
</li>
<li class="tidylist"><b>دردشة مجهولة</b>
يمكنك استخدام برنامج الدردشة IRC المفضل والاتصال بـ
<b>127.0.0.1 و Port 6668</b>
والدخول الى غرفة الدردشة <a href="irc://127.0.0.1:6668/i2p">#i2p</a> او <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a>
<p>يمكنك استضافة موقعك على الشبكة بوضع ملفاتك في مجلد eepsite/docroot (كما يمكن وضع تطبيقات JSP/Servlet ايضا) او استعمال سكريبتات CGI في eepsite/cgi-bin
</li>
</ul>
<h2>هل ترغب في موقع خاص بك على الشبكة المجهولة؟</h2>
<p>
تتضمن حزمة I2P البرمجيات التي تمكنك من عمل، Eepseite الخاصة بك: خادم ويب
<a href="http://jetty.mortbay.org/">Jetty</a>
يشتغل على
<a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>
قم بوضع الملفات داخل
<code>eepsite/docroot/</code>
او اي
JSP/Servlet <code>.war</code> في <code>eepsite/webapps</code>
سكريبت CGI داخل
<code>eepsite/cgi-bin</code>
قم بتشغيل
<a href="/i2ptunnel/">I2P نفق </a>,
يمكنك معرفة المزيد عن كيفية نشر موقعك الخاص في
<a href="http://127.0.0.1:7658/help/">http://127.0.0.1:7658/help/</a>.
</p>
<h2><a name="trouble">المساعدة</a></h2>
<h2><a name="trouble">المشاكل الاتصال </a></h2>
<p>يمكن ان يستغرق I2P بعض الوقت في البداية لأنه يقوم بالبحث عن نظائر ليتم الإتضال بالشبكة. اذا استمر الوضع بعد 30 دقيقة، وعدد النظائر المتصلين أقل من 10، تأكد من فتح بورت 8887 على برنامج الجدار الناري.
اذا لم تستطع الوصول الى اي موقع على الشيكة (مثل www.i2p2.i2p) تأكد من وجود البروكسي 127.0.0.1 وبوورت 4444 في اعدادات متصفح.</p><hr />
<p>
تحقق من تغيير
<a href="http://www.i2p2.i2p/htproxyports.html">اعدادات المتصفح</a>.
واذا كانت مشاكل اخرى يمكن مراجعة الموقع الرسمي
<a href="http://www.i2p2.i2p/index_de.html">www.i2p2.i2p</a> <br>
او المشاركة في المنتدى
<a href="http://forum.i2p2.de/">I2P-Forum</a> <br>
في الدردشة
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <br>
و <a href="irc://127.0.0.1:6668/i2p">#i2p</a> <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a>
</p>
</div>

View File

@@ -62,7 +62,7 @@ conversation!&hellip; (sauf,&hellip; heu&hellip; regarde quand même dans ton do
à ton correspondant d'en faire autant&hellip; ET coulez vos PC dans du béton). Une fois là, /join
<code>#i2p-help</code>, <code>#i2p-chat</code>, <code>#i2p</code>, <code>#i2p-chat</code> ou <code>#i2p-dev</code>
ne sont que quelques unes des possibilités pour mettre la tête dehors, même si ça va pas améliorer le bronzage de ta
couenne d'endive.&LT;/délire&GT; Il y a aussi une
couenne d'endive.&lt;/délire&gt; Il y a aussi une
<a href="http://echelon.i2p/qti2pmessenger/">messagerie instantanée</a> à la sauce I2P pour le claviotage anonyme
(tiens, le rev'là) non surveillable et non censurable, ainsi que d'autres serveurs IRC, Jabber, website-based chat,
and more. Et bien sûr vous avez l'entière liberté de faire tourner vos propres serveurs sur I2P, dans la version qui
@@ -71,7 +71,7 @@ vous émoustille les papilles, et si vous êtes un développeur, d'écrire vos p
<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/User_Datagram_Protocol" target="_blank">UDP</a> et
<a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Transmission_Control_Protocol" target="_blank">TCP</a>
sont tous deux <a href="http://www.i2p2.i2p/techintro_fr.html#op.transport" target="_blank">compatibles</a>), et
<a href="http://www.i2p2.i2p/streaming.html" target="_bla_nk">les flux en temps réel</a> sont aussi au menu.
<a href="http://www.i2p2.i2p/streaming.html" target="_blank">les flux en temps réel</a> sont aussi au menu.
Nous fournissons aussi un accès complet à l'<a href="http://docs.i2p2.de/javadoc/" target="_blank">API Java</a>.</li>
<li class="tidylist"><b>Forums &amp; Blogs</b><br>Si vous cherchez à faire votre propre blog ou forum , vous pourriez
être intéressé par <a href="http://syndie.i2p2.de/" target="_blank">Syndie</a>, une plateforme décentralisée de
@@ -243,7 +243,7 @@ via le serveur IRC <a href="irc://irc.freenode.net/i2p">Freenode</a>.
<a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Les développeurs discutent sur les
<a href="http://zzz.i2p/" target="_blank">fora de développeurs de zzz</a> ou sur le
<a href="irc://127.0.0.1:6668/i2p-dev">canal des développeurs</a>. Les développeurs peuvent consulter les sources sur
<a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">l'explorateur du dépôt de zzz</a> ou par
<a href="http://killyourtv.i2p/viewmtn/" target="_blank">l'explorateur du dépôt de kytv</a> ou par
<a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. Nous utilisons
<a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> pour gérer les sources du code.
</li>

View File

@@ -84,7 +84,7 @@ Als je achter een verbiedende firewall zit maar wel onbeperkt uitgaande toegang,
of langs komen in
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a href="irc://127.0.0.1:6668/i2p">#i2p</a> or <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> op I2P's Internet IRC netwerk (<code>irc.postman.i2p</code> or <code>irc.freshcoffee.i2p</code>). Deze kanalen zijn tevens beschikbaar buiten I2P's anonieme versleutelde netwerk via <a href="irc://irc.freenode.net/i2p">Freenode IRC</a>.</li>
<li class="tidylist"><b>Bugs melden</b><br>Als je een bug wil melden, maak een ticket aan op <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Voor ontwikkelaar-gerelateerde discussies, bezoek <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> of bezoek het <a href="irc://127.0.0.1:6668/i2p-dev">developer kanaal</a> op I2P's IRC netwerk. Ontwikkelaars kunnen de broncode doorbladeren op <a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">zzz's mtn repository viewer</a> of via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We gebruiken hoofdzakelijk <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> om de broncode bij te beheren.</li>
<li class="tidylist"><b>Bugs melden</b><br>Als je een bug wil melden, maak een ticket aan op <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Voor ontwikkelaar-gerelateerde discussies, bezoek <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> of bezoek het <a href="irc://127.0.0.1:6668/i2p-dev">developer kanaal</a> op I2P's IRC netwerk. Ontwikkelaars kunnen de broncode doorbladeren op <a href="http://killyourtv.i2p/viewmtn/" target="_blank">kytv's mtn repository viewer</a> of via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We gebruiken hoofdzakelijk <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> om de broncode bij te beheren.</li>
<li class="tidylist"><b>Raak betrokken!</b><br>I2P word ontwikkeld en onderhouden door hoofdzakelijk ongefinancierde en vrijwillige community leden. We accepteren graag <a href="http://www.i2p2.i2p/donate.html" target="_blank">donaties</a>, welke zullen besteed aan essentiele hosting en administratie kosten. We hebben <a href="http://www.i2p2.i2p/bounties.html" target="_blank">contante beloningen</a> voor aspecten van I2P voor ontwikkelaars welke graag mee willen ontwikkelen, we zijn altijd opzoek naar meer <a href="http://www.i2p2.i2p/newdevelopers.html" target="_blank">Java coders</a>, <a href="http://www.i2p2.i2p/newtranslators.html" target="_blank">vertalers</a>, promoters en gebruikers om I2P te helpen groeien. Hoe groter het I2P netwerk, hoe meer iedereen van de voordelen profiteert, simpelweg al je vrienden vertellen over I2P en ze helpen het te installeren is al een grote hulp. Voor meer informatie over hoe je betrokken kan raken, bezoek de <a href="http://www.i2p2.i2p/getinvolved.html" target="_blank">vrijwilligers pagina</a> op de website.</li>
</ul><div class="topness"><a href="#top">[Naar Boven]</a></div>

View File

@@ -88,7 +88,7 @@
или посетить каналы
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a href="irc://127.0.0.1:6668/i2p">#i2p</a> or <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> во внутренней IRC-сети I2P (<code>irc.postman.i2p</code> или <code>irc.freshcoffee.i2p</code>). Эти каналы так же доступны извне I2P через <a href="irc://irc.freenode.net/i2p">Freenode IRC</a>.</li>
<li class="tidylist"><b>Составление отчётов об ошибках</b><br>Если вы хотите сообщить об ошибке, пожалуйста заведите заявку на сайте <a href="http://trac.i2p2.i2p" target="_blank">trac.i2p2.i2p</a>. Для ведения дискуссий, относящихся к разработке, посетите <a href="http://zzz.i2p" target="_blank">форум разработчиков у zzz</a>, или приходите на <a href="irc://127.0.0.1:6668/i2p-dev">девелоперский канал</a> в IRC-сети I2P. Программисты могут захотеть посмотреть исходные коды в <a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">веб-просмотрщике mtn-репозитория от zzz</a> или через <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. Преимущественно, мы используем <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> для управления исходным кодом.</li>
<li class="tidylist"><b>Составление отчётов об ошибках</b><br>Если вы хотите сообщить об ошибке, пожалуйста заведите заявку на сайте <a href="http://trac.i2p2.i2p" target="_blank">trac.i2p2.i2p</a>. Для ведения дискуссий, относящихся к разработке, посетите <a href="http://zzz.i2p" target="_blank">форум разработчиков у zzz</a>, или приходите на <a href="irc://127.0.0.1:6668/i2p-dev">девелоперский канал</a> в IRC-сети I2P. Программисты могут захотеть посмотреть исходные коды в <a href="http://killyourtv.i2p/viewmtn/" target="_blank">веб-просмотрщике mtn-репозитория от kytv</a> или через <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. Преимущественно, мы используем <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> для управления исходным кодом.</li>
<li class="tidylist"><b>Вовлекайтесь!</b><br>I2P разрабатывается и сопровождается в основном за счёт неоплачиваемого, добровольного участия членов сообщества. Мы рады принимать <a href="http://www.i2p2.i2p/donate.html" target="_blank">пожертвования</a>, которые идут на необходимые административные затраты и хостинг. Для разработчиков, ищущих материальные стимулы, у нас есть <a href="http://www.i2p2.i2p/bounties.html" target="_blank">денежные премии</a> за работу над некоторыми аспектами I2P, и мы всегда ищем <a href="http://www.i2p2.i2p/newdevelopers.html" target="_blank">Java программистов</a>, <a href="http://www.i2p2.i2p/newtranslators.html" target="_blank">переводчиков</a>, популяризаторов и пользователей, помогающих I2P расширяться. Чем больше I2P-сеть, тем больше общая выгода, поэтому простой рассказ об I2P своим друзьям (и помощь с установкой и настройкой если нужно) - уже большая помощь. Для получения дальнейшей информации о том, как вы можете принять участие, посетите <a href="http://www.i2p2.i2p/getinvolved.html" target="_blank">страницу для добровольцев</a> на официальном сайте.</li>
</ul><div class="topness"><a href="#top">[Наверх]</a></div>

View File

@@ -61,7 +61,7 @@ div.warning {
div.main {
margin: 10px 210px 0px 10px;
padding: 7px 0px 30px 20px;
padding: 7px 20px 30px 20px;
}
div.main li {

View File

@@ -566,6 +566,10 @@ input[type=image], thead img {
opacity: 1;
}
thead img.disable, img.disable:hover {
opacity: 0.4;
}
input[type=image]:hover, thead img:hover {
opacity: 1;
}

View File

@@ -572,6 +572,10 @@ input[type=image], thead img {
opacity: 0.8;
}
thead img.disable, img.disable:hover {
opacity: 0.2;
}
input[type=image]:hover, thead img:hover {
opacity: 1;
}

View File

@@ -424,6 +424,10 @@ table.SnarkDirInfo {
padding: 0 3px !important;
}
thead img.disable, img.disable:hover {
opacity: 0.4;
}
.SnarkDirInfo td {
min-width: 0px !important;
}

View File

@@ -35,7 +35,7 @@ span.addrhlpr {
h3 {
color:black;
font-size:12pt;
letter-spacing:2pt;
letter-spacing: 0.08em;
line-height:18pt;
font-weight:bold;
}

View File

@@ -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 = 19;
public final static long BUILD = 0;
/** for example "-test" */
public final static String EXTRA = "";

View File

@@ -78,9 +78,10 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
return;
}
// TODO only look up once, then check type
LeaseSet ls = getContext().netDb().lookupLeaseSetLocally(_message.getSearchKey());
if (ls != null) {
// only lookup once, then cast to correct type
DatabaseEntry dbe = getContext().netDb().lookupLocally(_message.getSearchKey());
if (dbe != null && dbe.getType() == DatabaseEntry.KEY_TYPE_LEASESET) {
LeaseSet ls = (LeaseSet) dbe;
// We have to be very careful here to decide whether or not to send out the leaseSet,
// to avoid anonymity vulnerabilities.
// As this is complex, lots of comments follow...
@@ -105,7 +106,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
// so we don't check the answerAllQueries() flag.
// Local leasesets are not handled here
if (_log.shouldLog(Log.INFO))
_log.info("We have the published LS " + _message.getSearchKey().toBase64() + ", answering query");
_log.info("We have the published LS " + _message.getSearchKey() + ", answering query");
getContext().statManager().addRateData("netDb.lookupsMatchedReceivedPublished", 1, 0);
sendData(_message.getSearchKey(), ls, fromKey, _message.getReplyTunnel());
} else if (shouldPublishLocal && answerAllQueries()) {
@@ -118,13 +119,13 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
if (weAreClosest(closestHashes)) {
// It's in our keyspace, so give it to them
if (_log.shouldLog(Log.INFO))
_log.info("We have local LS " + _message.getSearchKey().toBase64() + ", answering query, in our keyspace");
_log.info("We have local LS " + _message.getSearchKey() + ", answering query, in our keyspace");
getContext().statManager().addRateData("netDb.lookupsMatchedLocalClosest", 1, 0);
sendData(_message.getSearchKey(), ls, fromKey, _message.getReplyTunnel());
} else {
// Lie, pretend we don't have it
if (_log.shouldLog(Log.INFO))
_log.info("We have local LS " + _message.getSearchKey().toBase64() + ", NOT answering query, out of our keyspace");
_log.info("We have local LS " + _message.getSearchKey() + ", NOT answering query, out of our keyspace");
getContext().statManager().addRateData("netDb.lookupsMatchedLocalNotClosest", 1, 0);
Set<Hash> routerHashSet = getNearestRouters();
sendClosest(_message.getSearchKey(), routerHashSet, fromKey, _message.getReplyTunnel());
@@ -135,16 +136,16 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
// or it's local and we don't publish it.
// Lie, pretend we don't have it
if (_log.shouldLog(Log.INFO))
_log.info("We have LS " + _message.getSearchKey().toBase64() +
_log.info("We have LS " + _message.getSearchKey() +
", NOT answering query - local? " + isLocal + " shouldPublish? " + shouldPublishLocal +
" RAP? " + ls.getReceivedAsPublished() + " RAR? " + ls.getReceivedAsReply());
getContext().statManager().addRateData("netDb.lookupsMatchedRemoteNotClosest", 1, 0);
Set<Hash> routerHashSet = getNearestRouters();
sendClosest(_message.getSearchKey(), routerHashSet, fromKey, _message.getReplyTunnel());
}
} else {
RouterInfo info = getContext().netDb().lookupRouterInfoLocally(_message.getSearchKey());
if ( (info != null) && (info.isCurrent(EXPIRE_DELAY)) ) {
} else if (dbe != null && dbe.getType() == DatabaseEntry.KEY_TYPE_ROUTERINFO) {
RouterInfo info = (RouterInfo) dbe;
if (info.isCurrent(EXPIRE_DELAY)) {
if ( (info.getIdentity().isHidden()) || (isUnreachable(info) && !publishUnreachable()) ) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Not answering a query for a netDb peer who isn't reachable");
@@ -162,12 +163,12 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
} else {
// send that routerInfo to the _message.getFromHash peer
if (_log.shouldLog(Log.DEBUG))
_log.debug("We do have key " + _message.getSearchKey().toBase64()
+ " locally as a router info. sending to " + fromKey.toBase64());
_log.debug("We do have key " + _message.getSearchKey()
+ " locally as a router info. sending to " + fromKey);
sendData(_message.getSearchKey(), info, fromKey, _message.getReplyTunnel());
}
} else {
// not found locally - return closest peer hashes
// expired locally - return closest peer hashes
Set<Hash> routerHashSet = getNearestRouters();
// ERR: see above
@@ -180,10 +181,17 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
// }
if (_log.shouldLog(Log.DEBUG))
_log.debug("We do not have key " + _message.getSearchKey().toBase64() +
" locally. sending back " + routerHashSet.size() + " peers to " + fromKey.toBase64());
_log.debug("Expired " + _message.getSearchKey() +
" locally. sending back " + routerHashSet.size() + " peers to " + fromKey);
sendClosest(_message.getSearchKey(), routerHashSet, fromKey, _message.getReplyTunnel());
}
} else {
// not found locally - return closest peer hashes
Set<Hash> routerHashSet = getNearestRouters();
if (_log.shouldLog(Log.DEBUG))
_log.debug("We do not have key " + _message.getSearchKey() +
" locally. sending back " + routerHashSet.size() + " peers to " + fromKey);
sendClosest(_message.getSearchKey(), routerHashSet, fromKey, _message.getReplyTunnel());
}
}
@@ -230,7 +238,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
return;
}
if (_log.shouldLog(Log.DEBUG))
_log.debug("Sending data matching key " + key.toBase64() + " to peer " + toPeer.toBase64()
_log.debug("Sending data matching key " + key + " to peer " + toPeer
+ " tunnel " + replyTunnel);
DatabaseStoreMessage msg = new DatabaseStoreMessage(getContext());
if (data.getType() == DatabaseEntry.KEY_TYPE_LEASESET) {
@@ -244,7 +252,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl {
protected void sendClosest(Hash key, Set<Hash> routerHashes, Hash toPeer, TunnelId replyTunnel) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Sending closest routers to key " + key.toBase64() + ": # peers = "
_log.debug("Sending closest routers to key " + key + ": # peers = "
+ routerHashes.size() + " tunnel " + replyTunnel);
DatabaseSearchReplyMessage msg = new DatabaseSearchReplyMessage(getContext());
msg.setFromHash(getContext().routerHash());

View File

@@ -25,7 +25,7 @@ class FloodfillMonitorJob extends JobImpl {
private static final int REQUEUE_DELAY = 60*60*1000;
private static final long MIN_UPTIME = 2*60*60*1000;
private static final long MIN_CHANGE_DELAY = 6*60*60*1000;
private static final int MIN_FF = 500;
private static final int MIN_FF = 1000;
private static final int MAX_FF = 999999;
private static final String PROP_FLOODFILL_PARTICIPANT = "router.floodfillParticipant";

View File

@@ -42,7 +42,6 @@ import net.i2p.util.SecureFileOutputStream;
*
*/
class PersistentDataStore extends TransientDataStore {
private final Log _log;
private final File _dbDir;
private final KademliaNetworkDatabaseFacade _facade;
private final Writer _writer;
@@ -60,7 +59,6 @@ class PersistentDataStore extends TransientDataStore {
*/
public PersistentDataStore(RouterContext ctx, String dbDir, KademliaNetworkDatabaseFacade facade) throws IOException {
super(ctx);
_log = ctx.logManager().getLog(PersistentDataStore.class);
_flat = ctx.getBooleanProperty(PROP_FLAT);
_dbDir = getDbDir(dbDir);
_facade = facade;

View File

@@ -22,14 +22,17 @@ import net.i2p.data.RouterInfo;
import net.i2p.router.RouterContext;
import net.i2p.util.Log;
/**
* Stores in-memory only. See extension.
*/
class TransientDataStore implements DataStore {
private Log _log;
private ConcurrentHashMap<Hash, DatabaseEntry> _data;
protected RouterContext _context;
protected final Log _log;
private final ConcurrentHashMap<Hash, DatabaseEntry> _data;
protected final RouterContext _context;
public TransientDataStore(RouterContext ctx) {
_context = ctx;
_log = ctx.logManager().getLog(TransientDataStore.class);
_log = ctx.logManager().getLog(getClass());
_data = new ConcurrentHashMap(1024);
if (_log.shouldLog(Log.INFO))
_log.info("Data Store initialized");
@@ -191,7 +194,7 @@ class TransientDataStore implements DataStore {
public DatabaseEntry remove(Hash key) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Removing key " + key.toBase64());
_log.debug("Removing key " + key);
return _data.remove(key);
}
}

View File

@@ -63,7 +63,7 @@ public class Reseeder {
public static final String DEFAULT_SEED_URL =
"http://netdb.i2p2.de/" + "," +
"http://reseed.i2p-projekt.de/" + "," +
"http://euve5653.vserver.de/netDb/" + "," +
//"http://euve5653.vserver.de/netDb/" + "," +
"http://cowpuncher.drollette.com/netdb/" + "," +
"http://i2p.mooo.com/netDb/" + "," +
"http://193.150.121.66/netDb/" + "," +
@@ -77,7 +77,7 @@ public class Reseeder {
public static final String DEFAULT_SSL_SEED_URL =
"https://netdb.i2p2.de/" + "," +
"https://reseed.i2p-projekt.de/" + "," +
"https://euve5653.vserver.de/netDb/" + "," +
//"https://euve5653.vserver.de/netDb/" + "," +
"https://cowpuncher.drollette.com/netdb/" + "," +
"https://i2p.mooo.com/netDb/" + "," +
"https://193.150.121.66/netDb/" + "," +

View File

@@ -272,8 +272,8 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
* This should really be moved to ntcp/NTCPTransport.java, why is it here?
*/
@Override
public synchronized void notifyReplaceAddress(RouterAddress UDPAddr) {
if (UDPAddr == null)
public synchronized void notifyReplaceAddress(RouterAddress udpAddr) {
if (udpAddr == null)
return;
NTCPTransport t = (NTCPTransport) _manager.getTransport(NTCPTransport.STYLE);
if (t == null)
@@ -296,19 +296,38 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
// Auto Port Setting
// old behavior (<= 0.7.3): auto-port defaults to false, and true trumps explicit setting
// new behavior (>= 0.7.4): auto-port defaults to true, but explicit setting trumps auto
// TODO rewrite this to operate on ints instead of strings
String oport = newProps.getProperty(NTCPAddress.PROP_PORT);
String nport = null;
String cport = _context.getProperty(PROP_I2NP_NTCP_PORT);
if (cport != null && cport.length() > 0) {
nport = cport;
} else if (_context.getBooleanPropertyDefaultTrue(PROP_I2NP_NTCP_AUTO_PORT)) {
nport = UDPAddr.getOption(UDPAddress.PROP_PORT);
// 0.9.6 change
// This wasn't quite right, as udpAddr is the EXTERNAL port and we really
// want NTCP to bind to the INTERNAL port the first time,
// because if they are different, the NAT is changing them, and
// it probably isn't mapping UDP and TCP the same.
Transport udp = _manager.getTransport(UDPTransport.STYLE);
if (udp != null) {
int udpIntPort = udp.getRequestedPort();
if (udpIntPort > 0)
// should always be true
nport = Integer.toString(udpIntPort);
}
if (nport == null)
// fallback
nport = udpAddr.getOption(UDPAddress.PROP_PORT);
}
if (_log.shouldLog(Log.INFO))
_log.info("old: " + oport + " config: " + cport + " new: " + nport);
if (nport == null || nport.length() <= 0)
return;
if (oport == null || ! oport.equals(nport)) {
// 0.9.6 change
// Don't have NTCP "chase" SSU's external port,
// as it may change, possibly frequently.
//if (oport == null || ! oport.equals(nport)) {
if (oport == null) {
newProps.setProperty(NTCPAddress.PROP_PORT, nport);
changed = true;
}
@@ -335,7 +354,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
_log.info("old: " + ohost + " config: " + name + " auto: " + enabled + " status: " + status);
if (enabled.equals("always") ||
(Boolean.parseBoolean(enabled) && status == STATUS_OK)) {
String nhost = UDPAddr.getOption(UDPAddress.PROP_HOST);
String nhost = udpAddr.getOption(UDPAddress.PROP_HOST);
if (_log.shouldLog(Log.INFO))
_log.info("old: " + ohost + " config: " + name + " new: " + nhost);
if (nhost == null || nhost.length() <= 0)

View File

@@ -21,6 +21,8 @@ import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import net.i2p.data.DataHelper;
import net.i2p.data.Hash;
@@ -49,7 +51,8 @@ public abstract class TransportImpl implements Transport {
private final Log _log;
private TransportEventListener _listener;
private RouterAddress _currentAddress;
private final List _sendPool;
// Only used by NTCP. SSU does not use. See send() below.
private final BlockingQueue<OutNetMessage> _sendPool;
protected final RouterContext _context;
/** map from routerIdentHash to timestamp (Long) that the peer was last unreachable */
private final Map<Hash, Long> _unreachableEntries;
@@ -84,7 +87,10 @@ public abstract class TransportImpl implements Transport {
_context.statManager().createRequiredRateStat("transport.sendProcessingTime", "Time to process and send a message (ms)", "Transport", new long[] { 60*1000l, 10*60*1000l, 60*60*1000l, 24*60*60*1000l });
//_context.statManager().createRateStat("transport.sendProcessingTime." + getStyle(), "Time to process and send a message (ms)", "Transport", new long[] { 60*1000l });
_context.statManager().createRateStat("transport.expiredOnQueueLifetime", "How long a message that expires on our outbound queue is processed", "Transport", new long[] { 60*1000l, 10*60*1000l, 60*60*1000l, 24*60*60*1000l } );
_sendPool = new ArrayList(16);
if (getStyle().equals("NTCP"))
_sendPool = new ArrayBlockingQueue(8);
else
_sendPool = null;
_unreachableEntries = new HashMap(16);
_wasUnreachableEntries = new ConcurrentHashSet(16);
_context.simpleScheduler().addPeriodicEvent(new CleanupUnreachable(), 2 * UNREACHABLE_PERIOD, UNREACHABLE_PERIOD / 2);
@@ -166,15 +172,14 @@ public abstract class TransportImpl implements Transport {
* Nonblocking call to pull the next outbound message
* off the queue.
*
* Only used by NTCP. SSU does not call.
*
* @return the next message or null if none are available
*/
public OutNetMessage getNextMessage() {
OutNetMessage msg = null;
synchronized (_sendPool) {
if (_sendPool.isEmpty()) return null;
msg = (OutNetMessage)_sendPool.remove(0); // use priority queues later
}
msg.beginSend();
protected OutNetMessage getNextMessage() {
OutNetMessage msg = _sendPool.poll();
if (msg != null)
msg.beginSend();
return msg;
}
@@ -361,6 +366,12 @@ public abstract class TransportImpl implements Transport {
* with the OutboundMessageRegistry (if it has a reply selector). If the
* send fails, queue up any msg.getOnFailedSendJob
*
* Only used by NTCP. SSU overrides.
*
* Note that this adds to the queue and then takes it back off in the same thread,
* so it actually blocks, and we don't need a big queue.
*
* TODO: Override in NTCP also and get rid of queue?
*/
public void send(OutNetMessage msg) {
if (msg.getTarget() == null) {
@@ -368,29 +379,26 @@ public abstract class TransportImpl implements Transport {
_log.error("Error - bad message enqueued [target is null]: " + msg, new Exception("Added by"));
return;
}
boolean duplicate = false;
synchronized (_sendPool) {
if (_sendPool.contains(msg))
duplicate = true;
else
_sendPool.add(msg);
}
if (duplicate) {
try {
_sendPool.put(msg);
} catch (InterruptedException ie) {
if (_log.shouldLog(Log.ERROR))
_log.error("Message already is in the queue? wtf. msg = " + msg,
new Exception("wtf, requeued?"));
_log.error("Interrupted during send " + msg);
return;
}
if (_log.shouldLog(Log.DEBUG))
_log.debug("Message added to send pool");
msg.timestamp("send on " + getStyle());
//if (_log.shouldLog(Log.DEBUG))
// _log.debug("Message added to send pool");
//msg.timestamp("send on " + getStyle());
outboundMessageReady();
if (_log.shouldLog(Log.INFO))
_log.debug("OutboundMessageReady called");
//if (_log.shouldLog(Log.INFO))
// _log.debug("OutboundMessageReady called");
}
/**
* This message is called whenever a new message is added to the send pool,
* and it should not block
*
* Only used by NTCP. SSU throws UOE.
*/
protected abstract void outboundMessageReady();

View File

@@ -345,21 +345,13 @@ public class TransportManager implements TransportEventListener {
}
/**
* Include the published port, or the requested port, for each transport
* which we will pass along to UPnP
* The actual or requested INTERNAL ports, for each transport,
* which we will pass along to UPnP to be forwarded.
*/
private Map<String, Integer> getPorts() {
Map<String, Integer> rv = new HashMap(_transports.size());
for (Transport t : _transports.values()) {
int port = t.getRequestedPort();
if (t.getCurrentAddress() != null) {
String s = t.getCurrentAddress().getOption("port");
if (s != null) {
try {
port = Integer.parseInt(s);
} catch (NumberFormatException nfe) {}
}
}
// Use UDP port for NTCP too - see comment in NTCPTransport.getRequestedPort() for why this is here
if (t.getStyle().equals(NTCPTransport.STYLE) && port <= 0 &&
_context.getBooleanProperty(CommSystemFacadeImpl.PROP_I2NP_NTCP_AUTO_PORT)) {

View File

@@ -73,6 +73,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
private Device _router;
private Service _service;
private boolean isDisabled = false; // We disable the plugin if more than one IGD is found
private volatile boolean _serviceLacksAPM;
private final Object lock = new Object();
// FIXME: detect it for real and deal with it! @see #2524
private volatile boolean thinksWeAreDoubleNatted = false;
@@ -120,6 +121,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
super.stop();
_router = null;
_service = null;
_serviceLacksAPM = false;
}
public DetectedIP[] getAddress() {
@@ -254,20 +256,21 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
_log.error(_router.getFriendlyName()+ " doesn't export WAN_IP_CONNECTION either: we won't be able to use it!");
}
_serviceLacksAPM = false;
return;
}
}
}
}
public boolean tryAddMapping(String protocol, int port, String description, ForwardPort fp) {
private boolean tryAddMapping(String protocol, int port, String description, ForwardPort fp) {
if (_log.shouldLog(Log.WARN))
_log.warn("Registering a port mapping for " + port + "/" + protocol);
int nbOfTries = 0;
boolean isPortForwarded = false;
while(nbOfTries++ < 5) {
while ((!_serviceLacksAPM) && nbOfTries++ < 5) {
isPortForwarded = addMapping(protocol, port, "I2P " + description, fp);
if(isPortForwarded)
if(isPortForwarded || _serviceLacksAPM)
break;
try {
Thread.sleep(5000);
@@ -306,6 +309,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
_log.warn("UP&P IGD device removed : " + dev.getFriendlyName());
_router = null;
_service = null;
_serviceLacksAPM = false;
}
}
}
@@ -564,7 +568,13 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
Action add = _service.getAction("AddPortMapping");
if(add == null) {
_log.error("Couldn't find AddPortMapping action!");
if (_serviceLacksAPM) {
if (_log.shouldLog(Log.WARN))
_log.warn("Couldn't find AddPortMapping action!");
} else {
_serviceLacksAPM = true;
_log.logAlways(Log.WARN, "UPnP device does not support port forwarding");
}
return false;
}
@@ -694,7 +704,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
Action remove = _service.getAction("DeletePortMapping");
if(remove == null) {
_log.error("Couldn't find DeletePortMapping action!");
if (_log.shouldLog(Log.WARN))
_log.warn("Couldn't find DeletePortMapping action!");
return false;
}
@@ -793,6 +804,18 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
* so throw this in a thread.
*/
private void registerPorts(Set<ForwardPort> portsToForwardNow) {
if (_serviceLacksAPM) {
if (_log.shouldLog(Log.WARN))
_log.warn("UPnP device does not support port forwarding");
for (ForwardPort port : portsToForwardNow) {
ForwardPortStatus fps = new ForwardPortStatus(ForwardPortStatus.DEFINITE_FAILURE,
"UPnP device does not support port forwarding",
port.portNumber);
Map map = Collections.singletonMap(port, fps);
forwardCallback.portForwardStatus(map);
}
return;
}
if (_log.shouldLog(Log.INFO))
_log.info("Starting thread to forward " + portsToForwardNow.size() + " ports");
Thread t = new Thread(new RegisterPortsThread(portsToForwardNow));

View File

@@ -187,7 +187,11 @@ class EventPumper implements Runnable {
} catch (IOException ioe) {
if (_log.shouldLog(Log.WARN))
_log.warn("Error selecting", ioe);
}
} catch (CancelledKeyException cke) {
if (_log.shouldLog(Log.WARN))
_log.warn("Error selecting", cke);
continue;
}
if (lastFailsafeIteration + FAILSAFE_ITERATION_FREQ < System.currentTimeMillis()) {
// in the *cough* unthinkable possibility that there are bugs in
@@ -688,7 +692,8 @@ class EventPumper implements Runnable {
}
} else {
// Nothing more to write
key.interestOps(key.interestOps() & ~SelectionKey.OP_WRITE);
if (key.isValid())
key.interestOps(key.interestOps() & ~SelectionKey.OP_WRITE);
break;
}
}

View File

@@ -12,6 +12,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -98,8 +99,8 @@ public class NTCPTransport extends TransportImpl {
_context.statManager().createRateStat("ntcp.attemptUnreachablePeer", "", "ntcp", RATES);
_context.statManager().createRateStat("ntcp.closeOnBacklog", "", "ntcp", RATES);
_context.statManager().createRateStat("ntcp.connectFailedIOE", "", "ntcp", RATES);
_context.statManager().createRateStat("ntcp.connectFailedInvalidPort", "", "ntcp", RATES);
_context.statManager().createRateStat("ntcp.bidRejectedLocalAddress", "", "ntcp", RATES);
//_context.statManager().createRateStat("ntcp.connectFailedInvalidPort", "", "ntcp", RATES);
//_context.statManager().createRateStat("ntcp.bidRejectedLocalAddress", "", "ntcp", RATES);
//_context.statManager().createRateStat("ntcp.bidRejectedNoNTCPAddress", "", "ntcp", RATES);
_context.statManager().createRateStat("ntcp.connectFailedTimeout", "", "ntcp", RATES);
_context.statManager().createRateStat("ntcp.connectFailedTimeoutIOE", "", "ntcp", RATES);
@@ -183,7 +184,8 @@ public class NTCPTransport extends TransportImpl {
protected void outboundMessageReady() {
OutNetMessage msg = getNextMessage();
if (msg != null) {
RouterIdentity ident = msg.getTarget().getIdentity();
RouterInfo target = msg.getTarget();
RouterIdentity ident = target.getIdentity();
Hash ih = ident.calculateHash();
NTCPConnection con = null;
boolean isNew = false;
@@ -191,7 +193,7 @@ public class NTCPTransport extends TransportImpl {
con = _conByIdent.get(ih);
if (con == null) {
isNew = true;
RouterAddress addr = msg.getTarget().getTargetAddress(STYLE);
RouterAddress addr = getTargetAddress(target);
if (addr != null) {
NTCPAddress naddr = new NTCPAddress(addr);
con = new NTCPConnection(_context, this, ident, naddr);
@@ -199,7 +201,7 @@ public class NTCPTransport extends TransportImpl {
_log.debug("Send on a new con: " + con + " at " + addr + " for " + ih.toBase64());
_conByIdent.put(ih, con);
} else {
_log.error("we bid on a peer who doesn't have an ntcp address? " + msg.getTarget());
_log.error("we bid on a peer who doesn't have an ntcp address? " + target);
return;
}
}
@@ -297,34 +299,12 @@ public class NTCPTransport extends TransportImpl {
_log.debug("fast bid when trying to send to " + peer + " as its already established");
return _fastBid;
}
RouterAddress addr = toAddress.getTargetAddress(STYLE);
RouterAddress addr = getTargetAddress(toAddress);
if (addr == null) {
markUnreachable(peer);
//_context.statManager().addRateData("ntcp.bidRejectedNoNTCPAddress", 1);
//_context.banlist().banlistRouter(toAddress.getIdentity().calculateHash(), "No NTCP address", STYLE);
if (_log.shouldLog(Log.DEBUG))
_log.debug("no bid when trying to send to " + peer + " as they don't have an ntcp address");
return null;
}
byte[] ip = addr.getIP();
if ( (addr.getPort() < MIN_PEER_PORT) || (ip == null) ) {
_context.statManager().addRateData("ntcp.connectFailedInvalidPort", 1);
markUnreachable(peer);
//_context.banlist().banlistRouter(toAddress.getIdentity().calculateHash(), "Invalid NTCP address", STYLE);
if (_log.shouldLog(Log.DEBUG))
_log.debug("no bid when trying to send to " + peer + " as they don't have a valid ntcp address");
return null;
}
if (!isPubliclyRoutable(ip)) {
if (! _context.getProperty("i2np.ntcp.allowLocal", "false").equals("true")) {
_context.statManager().addRateData("ntcp.bidRejectedLocalAddress", 1);
markUnreachable(peer);
if (_log.shouldLog(Log.DEBUG))
_log.debug("no bid when trying to send to " + peer + " as they have a private ntcp address");
return null;
}
}
if (!allowConnection()) {
if (_log.shouldLog(Log.WARN))
@@ -350,6 +330,36 @@ public class NTCPTransport extends TransportImpl {
}
}
/**
* Get first available address we can use.
* @return address or null
* @since 0.9.6
*/
private RouterAddress getTargetAddress(RouterInfo target) {
List<RouterAddress> addrs = target.getTargetAddresses(STYLE);
for (int i = 0; i < addrs.size(); i++) {
RouterAddress addr = addrs.get(i);
byte[] ip = addr.getIP();
if (addr.getPort() < MIN_PEER_PORT || ip == null) {
//_context.statManager().addRateData("ntcp.connectFailedInvalidPort", 1);
//_context.banlist().banlistRouter(toAddress.getIdentity().calculateHash(), "Invalid NTCP address", STYLE);
//if (_log.shouldLog(Log.DEBUG))
// _log.debug("no bid when trying to send to " + peer + " as they don't have a valid ntcp address");
continue;
}
if (!isPubliclyRoutable(ip)) {
if (! _context.getBooleanProperty("i2np.ntcp.allowLocal")) {
//_context.statManager().addRateData("ntcp.bidRejectedLocalAddress", 1);
//if (_log.shouldLog(Log.DEBUG))
// _log.debug("no bid when trying to send to " + peer + " as they have a private ntcp address");
continue;
}
}
return addr;
}
return null;
}
public boolean allowConnection() {
return countActivePeers() < getMaxConnections();
}
@@ -628,6 +638,7 @@ public class NTCPTransport extends TransportImpl {
//private boolean bindAllInterfaces() { return true; }
/** caller must synch on this */
private void configureLocalAddress() {
RouterContext ctx = getContext();
if (ctx == null) {
@@ -674,8 +685,17 @@ public class NTCPTransport extends TransportImpl {
}
}
/**
* @return current port, else NTCP configured port, else -1 (but not UDP port if auto)
*/
@Override
public int getRequestedPort() {
NTCPAddress addr = _myAddress;
if (addr != null) {
int port = addr.getPort();
if (port > 0)
return port;
}
// would be nice to do this here but we can't easily get to the UDP transport.getRequested_Port()
// from here, so we do it in TransportManager.
// if (Boolean.valueOf(_context.getProperty(CommSystemFacadeImpl.PROP_I2NP_NTCP_AUTO_PORT)).booleanValue())

View File

@@ -225,7 +225,7 @@ class EstablishmentManager {
*/
private void establish(OutNetMessage msg, boolean queueIfMaxExceeded) {
RouterInfo toRouterInfo = msg.getTarget();
RouterAddress ra = toRouterInfo.getTargetAddress(_transport.getStyle());
RouterAddress ra = _transport.getTargetAddress(toRouterInfo);
if (ra == null) {
_transport.failed(msg, "Remote peer has no address, cannot establish");
return;
@@ -668,7 +668,7 @@ class EstablishmentManager {
// Perhaps netdb should notify transport when it gets a new RI...
RouterInfo info = _context.netDb().lookupRouterInfoLocally(remote.calculateHash());
if (info != null) {
RouterAddress addr = info.getTargetAddress(UDPTransport.STYLE);
RouterAddress addr = _transport.getTargetAddress(info);
if (addr != null) {
String smtu = addr.getOption(UDPAddress.PROP_MTU);
if (smtu != null) {

View File

@@ -136,7 +136,7 @@ class IntroductionManager {
_log.info("Picked peer has no local routerInfo: " + cur);
continue;
}
RouterAddress ra = ri.getTargetAddress(UDPTransport.STYLE);
RouterAddress ra = _transport.getTargetAddress(ri);
if (ra == null) {
if (_log.shouldLog(Log.INFO))
_log.info("Picked peer has no SSU address: " + ri);

View File

@@ -727,7 +727,7 @@ class PeerTestManager {
aliceIntroKey = new SessionKey(new byte[SessionKey.KEYSIZE_BYTES]);
testInfo.readIntroKey(aliceIntroKey.getData(), 0);
RouterAddress raddr = charlieInfo.getTargetAddress(UDPTransport.STYLE);
RouterAddress raddr = _transport.getTargetAddress(charlieInfo);
if (raddr == null) {
if (_log.shouldLog(Log.WARN))
_log.warn("Unable to pick a charlie");

View File

@@ -83,7 +83,10 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
/** summary info to distribute */
private RouterAddress _externalAddress;
/** port number on which we can be reached, or -1 for error, or 0 for unset */
/**
* Port number on which we can be reached, or -1 for error, or 0 for unset
* Do NOT use this for current internal port - use _endpoint.getListenPort()
*/
private int _externalListenPort;
/** IP address of externally reachable host, or null */
private InetAddress _externalListenHost;
@@ -310,19 +313,18 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
// Requested bind port
// This may be -1 or may not be honored if busy,
// Priority: Configured internal, then already used, then configured external
// we will check below after starting up the endpoint.
int port;
int oldIPort = _context.getProperty(PROP_INTERNAL_PORT, -1);
int oldBindPort = _endpoint != null ? _endpoint.getListenPort() : -1;
int oldEPort = _context.getProperty(PROP_EXTERNAL_PORT, -1);
if (_externalListenPort <= 0) {
// no explicit external port, so lets try an internal one
if (oldIPort > 0)
port = oldIPort;
else
port = oldEPort;
} else {
port = _externalListenPort;
}
if (oldIPort > 0)
port = oldIPort;
else if (oldBindPort > 0)
port = oldBindPort;
else
port = oldEPort;
if (bindToAddr != null && _log.shouldLog(Log.WARN))
_log.warn("Binding only to " + bindToAddr);
if (_log.shouldLog(Log.INFO))
@@ -436,14 +438,23 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
}
/**
* _externalListenPort should always be set (by startup()) before this is called,
* so the returned value should be > 0
* The current or configured internal port.
* UDPEndpoint should always be instantiated (and a random port picked if not configured)
* before this is called, so the returned value should be > 0
* unless the endpoint failed to bind.
*/
@Override
public int getRequestedPort() {
if (_externalListenPort > 0)
return _externalListenPort;
return _context.getProperty(PROP_INTERNAL_PORT, -1);
if (_endpoint != null) {
int rv = _endpoint.getListenPort();
if (rv > 0)
return rv;
}
// fallbacks
int rv = _context.getProperty(PROP_INTERNAL_PORT, -1);
if (rv > 0)
return rv;
return _context.getProperty(PROP_EXTERNAL_PORT, -1);
}
/**
@@ -1286,25 +1297,12 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
}
// Validate his SSU address
RouterAddress addr = toAddress.getTargetAddress(STYLE);
RouterAddress addr = getTargetAddress(toAddress);
if (addr == null) {
markUnreachable(to);
return null;
}
// don't do this - object churn parsing the whole thing
//UDPAddress ua = new UDPAddress(addr);
//if (ua.getIntroducerCount() <= 0) {
if (addr.getOption("ihost0") == null) {
byte[] ip = addr.getIP();
int port = addr.getPort();
if (ip == null || port < MIN_PEER_PORT ||
(!isValid(ip)) ||
Arrays.equals(ip, getExternalIP())) {
markUnreachable(to);
return null;
}
}
if (!allowConnection())
return _cachedBid[TRANSIENT_FAIL_BID];
@@ -1337,6 +1335,29 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
}
}
/**
* Get first available address we can use.
* @return address or null
* @since 0.9.6
*/
RouterAddress getTargetAddress(RouterInfo target) {
List<RouterAddress> addrs = target.getTargetAddresses(STYLE);
for (int i = 0; i < addrs.size(); i++) {
RouterAddress addr = addrs.get(i);
if (addr.getOption("ihost0") == null) {
byte[] ip = addr.getIP();
int port = addr.getPort();
if (ip == null || port < MIN_PEER_PORT ||
(!isValid(ip)) ||
Arrays.equals(ip, getExternalIP())) {
continue;
}
}
return addr;
}
return null;
}
private boolean preferUDP() {
String pref = _context.getProperty(PROP_PREFER_UDP, DEFAULT_PREFER_UDP);
return (pref != null) && ! "false".equals(pref);

View File

@@ -138,6 +138,9 @@ abstract class BuildRequestor {
if (log.shouldLog(Log.ERROR))
log.error("Tunnel build failed, as we couldn't find a paired tunnel for " + cfg);
exec.buildComplete(cfg, pool);
// Not even a zero-hop exploratory tunnel? We are in big trouble.
// Let's not spin through here too fast.
try { Thread.sleep(250); } catch (InterruptedException ie) {}
return;
}
@@ -157,7 +160,7 @@ abstract class BuildRequestor {
if (cfg.isInbound()) {
if (log.shouldLog(Log.INFO))
log.info("Sending the tunnel build request " + msg.getUniqueId() + " out the tunnel " + pairedTunnel + " to "
+ cfg.getPeer(0).toBase64() + " for " + cfg + " waiting for the reply of "
+ cfg.getPeer(0) + " for " + cfg + " waiting for the reply of "
+ cfg.getReplyMessageId());
// send it out a tunnel targetting the first hop
// TODO - would be nice to have a TunnelBuildFirstHopFailJob queued if the
@@ -165,7 +168,7 @@ abstract class BuildRequestor {
ctx.tunnelDispatcher().dispatchOutbound(msg, pairedTunnel.getSendTunnelId(0), cfg.getPeer(0));
} else {
if (log.shouldLog(Log.INFO))
log.info("Sending the tunnel build request directly to " + cfg.getPeer(1).toBase64()
log.info("Sending the tunnel build request directly to " + cfg.getPeer(1)
+ " for " + cfg + " waiting for the reply of " + cfg.getReplyMessageId()
+ " with msgId=" + msg.getUniqueId());
// send it directly to the first hop
@@ -180,8 +183,8 @@ abstract class BuildRequestor {
outMsg.setPriority(PRIORITY);
RouterInfo peer = ctx.netDb().lookupRouterInfoLocally(cfg.getPeer(1));
if (peer == null) {
if (log.shouldLog(Log.ERROR))
log.error("Could not find the next hop to send the outbound request to: " + cfg);
if (log.shouldLog(Log.WARN))
log.warn("Could not find the next hop to send the outbound request to: " + cfg);
exec.buildComplete(cfg, pool);
return;
}
@@ -297,7 +300,7 @@ abstract class BuildRequestor {
if (peerInfo == null) {
if (log.shouldLog(Log.WARN))
log.warn("Peer selected for hop " + i + "/" + hop + " was not found locally: "
+ peer.toBase64() + " for " + cfg);
+ peer + " for " + cfg);
return null;
} else {
key = peerInfo.getIdentity().getPublicKey();
@@ -340,9 +343,9 @@ abstract class BuildRequestor {
* Can't do this for inbound tunnels since the msg goes out an expl. tunnel.
*/
private static class TunnelBuildFirstHopFailJob extends JobImpl {
final TunnelPool _pool;
final PooledTunnelCreatorConfig _cfg;
final BuildExecutor _exec;
private final TunnelPool _pool;
private final PooledTunnelCreatorConfig _cfg;
private final BuildExecutor _exec;
private TunnelBuildFirstHopFailJob(RouterContext ctx, TunnelPool pool, PooledTunnelCreatorConfig cfg, BuildExecutor exec) {
super(ctx);
_cfg = cfg;

View File

@@ -154,7 +154,7 @@ fi
cd `dirname $0`/../../installer/resources/certificates
for i in *.crt
for i in *.crt *.cert
do
echo "Checking $i ..."
EXPIRES=`checkcert $i`