propagate from branch 'i2p.i2p.zzz.test4' (head 764616dd0b3539990a05edb329ece0afd35261cb)

to branch 'i2p.i2p' (head 871752bfdd3d262d0fde193cf787e2705418936a)
This commit is contained in:
zzz
2010-12-30 01:35:53 +00:00
72 changed files with 14324 additions and 4965 deletions

View File

@ -21,7 +21,7 @@ CWD=$(pwd)
TMP=/tmp
PKG=/$TMP/package-base-i2p
NAME=i2p-base
VERSION=0.0.3
VERSION=0.0.4
BUILD=1sponge
ARCH=noarch
INSTALL_DIR=opt

View File

@ -3,7 +3,7 @@
i2p_start() {
# Check if router is up first!
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory status )" > /dev/null
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory status )'" > /dev/null
if [ $? -eq 0 ] ; then {
# I2p is already running, so tell the user.
echo "I2P is already running..."
@ -14,13 +14,13 @@ i2p_start() {
# Just in-case there are leftover junk in /tmp...
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
# Now that all junk is cleaned up, start.
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory start )"
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory start )'"
}
fi
}
i2p_stop() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory stop )"
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory stop )'"
rm -Rf `grep /tmp/hsperfdata_root/* -le i2p` /tmp/i2p-*.tmp /tmp/router.ping
}
@ -31,15 +31,15 @@ i2p_restart() {
}
i2p_status() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory status )"
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory status )'"
}
i2p_console() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory console )"
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory console )'"
}
i2p_dump() {
/bin/su - -c "( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\"; directory dump )"
/bin/su - -c "/bin/bash -l -c '( export PATH=\"$PATH:/usr/lib/java/bin:/usr/lib/java/jre/bin\" ; directory dump )'"
}
case "$1" in

View File

@ -7,6 +7,8 @@ package org.klomp.snark;
* It is also passed from PeerState to PeerCoordinator when
* a piece is not completely downloaded, for example
* when the Peer disconnects or chokes.
*
* @since 0.8.2
*/
class PartialPiece implements Comparable {

View File

@ -329,14 +329,18 @@ public class I2PSnarkServlet extends Default {
// Opera and text-mode browsers: no   and no input type=image values submitted
String ua = req.getHeader("User-Agent");
boolean isDegraded = ua != null && (ua.startsWith("Opera") || ua.startsWith("Lynx") ||
boolean isDegraded = ua != null && (ua.startsWith("Lynx") ||
ua.startsWith("ELinks") || ua.startsWith("Dillo"));
boolean noThinsp = isDegraded || ua.startsWith("Opera");
if (_manager.util().connected()) {
if (isDegraded)
out.write("<a href=\"/i2psnark/?action=StopAll&amp;nonce=" + _nonce + "\"><img title=\"");
else
out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\"");
else {
// http://www.onenaught.com/posts/382/firefox-4-change-input-type-image-only-submits-x-and-y-not-name
//out.write("<input type=\"image\" name=\"action\" value=\"StopAll\" title=\"");
out.write("<input type=\"image\" name=\"action_StopAll\" value=\"foo\" title=\"");
}
out.write(_("Stop all torrents and the I2P tunnel"));
out.write("\" src=\"" + _imgPath + "stop_all.png\" alt=\"");
out.write(_("Stop All"));
@ -347,7 +351,7 @@ public class I2PSnarkServlet extends Default {
if (isDegraded)
out.write("<a href=\"/i2psnark/?action=StartAll&amp;nonce=" + _nonce + "\"><img title=\"");
else
out.write("<input type=\"image\" name=\"action\" value=\"StartAll\" title=\"");
out.write("<input type=\"image\" name=\"action_StartAll\" value=\"foo\" title=\"");
out.write(_("Start all torrents and the I2P tunnel"));
out.write("\" src=\"" + _imgPath + "start_all.png\" alt=\"");
out.write(_("Start All"));
@ -362,7 +366,7 @@ public class I2PSnarkServlet extends Default {
Snark snark = (Snark)snarks.get(i);
boolean showDebug = "2".equals(peerParam);
boolean showPeers = showDebug || "1".equals(peerParam) || Base64.encode(snark.meta.getInfoHash()).equals(peerParam);
displaySnark(out, snark, uri, i, stats, showPeers, isDegraded, showDebug);
displaySnark(out, snark, uri, i, stats, showPeers, isDegraded, noThinsp, showDebug);
}
if (snarks.isEmpty()) {
@ -404,8 +408,19 @@ public class I2PSnarkServlet extends Default {
private void processRequest(HttpServletRequest req) {
String action = req.getParameter("action");
if (action == null) {
_manager.addMessage("No action specified");
return;
// http://www.onenaught.com/posts/382/firefox-4-change-input-type-image-only-submits-x-and-y-not-name
Map params = req.getParameterMap();
for (Object o : params.keySet()) {
String key = (String) o;
if (key.startsWith("action_") && key.endsWith(".x")) {
action = key.substring(0, key.length() - 2).substring(7);
break;
}
}
if (action == null) {
_manager.addMessage("No action specified");
return;
}
}
// sadly, Opera doesn't send value with input type=image, so we have to use GET there
//if (!"POST".equals(req.getMethod())) {
@ -698,7 +713,7 @@ public class I2PSnarkServlet extends Default {
private static final int MAX_DISPLAYED_FILENAME_LENGTH = 50;
private static final int MAX_DISPLAYED_ERROR_LENGTH = 43;
private void displaySnark(PrintWriter out, Snark snark, String uri, int row, long stats[], boolean showPeers,
boolean isDegraded, boolean showDebug) throws IOException {
boolean isDegraded, boolean noThinsp, boolean showDebug) throws IOException {
String filename = snark.torrent;
File f = new File(filename);
filename = f.getName(); // the torrent may be the canonical name, so lets just grab the local name
@ -758,11 +773,11 @@ public class I2PSnarkServlet extends Default {
if (isRunning && curPeers > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
curPeers + thinsp(isDegraded) +
curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else if (isRunning)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") +
": " + curPeers + thinsp(isDegraded) +
": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers);
else {
if (err.length() > MAX_DISPLAYED_ERROR_LENGTH)
@ -774,11 +789,11 @@ public class I2PSnarkServlet extends Default {
if (isRunning && curPeers > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "seeding.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Seeding") +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
curPeers + thinsp(isDegraded) +
curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else if (isRunning)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "seeding.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Seeding") +
": " + curPeers + thinsp(isDegraded) +
": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers);
else
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "complete.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Complete");
@ -786,24 +801,24 @@ public class I2PSnarkServlet extends Default {
if (isRunning && curPeers > 0 && downBps > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("OK") +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
curPeers + thinsp(isDegraded) +
curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else if (isRunning && curPeers > 0 && downBps > 0)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "downloading.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("OK") +
": " + curPeers + thinsp(isDegraded) +
": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers);
else if (isRunning && curPeers > 0 && !showPeers)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stalled") +
": <a href=\"" + uri + "?p=" + Base64.encode(snark.meta.getInfoHash()) + "\">" +
curPeers + thinsp(isDegraded) +
curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers) + "</a>";
else if (isRunning && curPeers > 0)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Stalled") +
": " + curPeers + thinsp(isDegraded) +
": " + curPeers + thinsp(noThinsp) +
ngettext("1 peer", "{0} peers", knownPeers);
else if (isRunning && knownPeers > 0)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("No Peers") +
": 0&thinsp;/&thinsp;" + knownPeers ;
": 0" + thinsp(noThinsp) + knownPeers ;
else if (isRunning)
statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "nopeers.png\" ></td><td class=\"snarkTorrentStatus " + rowClass + "\">" + _("No Peers");
else
@ -880,7 +895,7 @@ public class I2PSnarkServlet extends Default {
out.write("</td>\n\t");
out.write("<td align=\"right\" class=\"snarkTorrentDownloaded " + rowClass + "\">");
if (remaining > 0)
out.write(formatSize(total-remaining) + thinsp(isDegraded) + formatSize(total));
out.write(formatSize(total-remaining) + thinsp(noThinsp) + formatSize(total));
else
out.write(formatSize(total)); // 3GB
out.write("</td>\n\t");
@ -905,7 +920,7 @@ public class I2PSnarkServlet extends Default {
if (isDegraded)
out.write("<a href=\"/i2psnark/?action=Stop_" + b64 + "&amp;nonce=" + _nonce + "\"><img title=\"");
else
out.write("<input type=\"image\" name=\"action\" value=\"Stop_" + b64 + "\" title=\"");
out.write("<input type=\"image\" name=\"action_Stop_" + b64 + "\" value=\"foo\" title=\"");
out.write(_("Stop the torrent"));
out.write("\" src=\"" + _imgPath + "stop.png\" alt=\"");
out.write(_("Stop"));
@ -917,7 +932,7 @@ public class I2PSnarkServlet extends Default {
if (isDegraded)
out.write("<a href=\"/i2psnark/?action=Start_" + b64 + "&amp;nonce=" + _nonce + "\"><img title=\"");
else
out.write("<input type=\"image\" name=\"action\" value=\"Start_" + b64 + "\" title=\"");
out.write("<input type=\"image\" name=\"action_Start_" + b64 + "\" value=\"foo\" title=\"");
out.write(_("Start the torrent"));
out.write("\" src=\"" + _imgPath + "start.png\" alt=\"");
out.write(_("Start"));
@ -929,7 +944,7 @@ public class I2PSnarkServlet extends Default {
if (isDegraded)
out.write("<a href=\"/i2psnark/?action=Remove_" + b64 + "&amp;nonce=" + _nonce + "\"><img title=\"");
else
out.write("<input type=\"image\" name=\"action\" value=\"Remove_" + b64 + "\" title=\"");
out.write("<input type=\"image\" name=\"action_Remove_" + b64 + "\" value=\"foo\" title=\"");
out.write(_("Remove the torrent from the active list, deleting the .torrent file"));
out.write("\" onclick=\"if (!confirm('");
// Can't figure out how to escape double quotes inside the onclick string.
@ -946,7 +961,7 @@ public class I2PSnarkServlet extends Default {
if (isDegraded)
out.write("<a href=\"/i2psnark/?action=Delete_" + b64 + "&amp;nonce=" + _nonce + "\"><img title=\"");
else
out.write("<input type=\"image\" name=\"action\" value=\"Delete_" + b64 + "\" title=\"");
out.write("<input type=\"image\" name=\"action_Delete_" + b64 + "\" value=\"foo\" title=\"");
out.write(_("Delete the .torrent file and the associated data file(s)"));
out.write("\" onclick=\"if (!confirm('");
// Can't figure out how to escape double quotes inside the onclick string.
@ -1384,7 +1399,7 @@ public class I2PSnarkServlet extends Default {
private static String urlify(String s) {
StringBuilder buf = new StringBuilder(256);
// browsers seem to work without doing this but let's be strict
String link = s.replace("&", "&amp;");
String link = s.replace("&", "&amp;").replace(" ", "%20");
buf.append("<a href=\"").append(link).append("\">").append(link).append("</a>");
return buf.toString();
}

View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-12 23:30+0000\n"
"PO-Revision-Date: 2010-12-13 01:01+0100\n"
"PO-Revision-Date: 2010-12-19 04:37+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n"
@ -118,12 +118,12 @@ msgstr "Verbinde mit I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:497
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "Fehler beim Verbinden mit I2P - Kontrollieren Sie die I2CP Einstellungen!"
msgstr "Fehler beim Verbinden mit I2P - Kontrollieren Sie die I2CP-Einstellungen!"
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Fehler: Konnte den Torrent nicht hinzufügen {0}"
msgstr "Fehler: Konnte den Torrent \"{0}\" nicht hinzufügen"
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:528
@ -164,7 +164,7 @@ msgstr "Zu viele Dateien in \"{0}\" ({1}), wird gelöscht! "
#: ../java/src/org/klomp/snark/SnarkManager.java:736
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "Torrentdatei \"{0}\" darf nicht mit '.torrent' enden, wird gelöscht!"
msgstr "Torrentdatei \"{0}\" darf nicht auf '.torrent' enden, wird gelöscht!"
#: ../java/src/org/klomp/snark/SnarkManager.java:738
#, java-format
@ -269,7 +269,7 @@ msgstr "geschätzte verbleibende Zeit"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:293
msgid "ETA"
msgstr "Fertig&nbsp;in"
msgstr "Dauer"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
msgid "Downloaded"
@ -388,7 +388,7 @@ msgstr "Datenverzeichnis wurde gelöscht: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:587
msgid "Error creating torrent - you must select a tracker"
msgstr "Fehler beim Erstellen des Torrents - Sie müssen einen Tracker auswählen"
msgstr "Fehler beim Erstellen des Torrents - Sie müssen einen Tracker auswählen!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:602
#, java-format
@ -638,7 +638,7 @@ msgstr "Datenverzeichnis"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1186
msgid "Edit i2psnark.config and restart to change"
msgstr "Zum Ändern bearbeite die i2psnark.config und starte neu!"
msgstr "Zum Ändern, bearbeite die i2psnark.config und starte neu!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "Auto start"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-12 23:30+0000\n"
"PO-Revision-Date: 2010-12-13 00:57+0100\n"
"POT-Creation-Date: 2010-12-19 03:16+0000\n"
"PO-Revision-Date: 2010-12-28 00:36+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n"
@ -101,7 +101,7 @@ msgstr "Lista de rastreadores abiertos cambiada - Para aplicar ello es necesario
#: ../java/src/org/klomp/snark/SnarkManager.java:438
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "Cargado el tema {0}. ¡Vuelve al menú principal de i2psnark para verlo!"
msgstr "Tema {0} cargado. ¡Vuelve a la página principal de i2psnark para verlo!"
#: ../java/src/org/klomp/snark/SnarkManager.java:445
msgid "Configuration unchanged."
@ -264,14 +264,12 @@ msgstr "Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
msgid "Estimated time remaining"
msgstr "Tiempo restante estimado"
msgstr "Tiempo restante para completar la descarga"
# NOTE: purposely left blank to leave more room in the table header
# msgstr "Completado&nbsp;en"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:293
msgid "ETA"
msgstr " "
msgstr "Tiempo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
msgid "Downloaded"
@ -297,13 +295,11 @@ msgstr "Subido"
msgid "Down Rate"
msgstr "Tasa&nbsp;de descarga"
# NOTE: purposely left blank to leave more room in the table header
# msgstr "Tasa&nbsp;de transferencia"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:317
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
msgid "Rate"
msgstr " "
msgstr "Tasa"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:322
msgid "Up Rate"
@ -795,7 +791,7 @@ msgstr "Torrent ya encolado: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "No se pudo copiar el archivo torrent a {0}."
msgstr "No se pudo copiar el torrent a {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1759
#, java-format
@ -809,8 +805,18 @@ msgstr "Torrent no se ha podido obtener de {0}"
#~ msgid " theme locked and loaded."
#~ msgstr "tema cargado"
#~ msgid "Hide All Attached Peers [connected/total in swarm]"
#~ msgstr "Ocultar todos los pares conectados [conectados/todos]"
#~ msgid "Show All Attached Peers [connected/total in swarm]"
#~ msgstr "Mostrar todos los pares conectados [conectados/todos]"
#~ msgid "Loaded Torrents"
#~ msgstr "Torrents"
#~ msgid "Estimated Download Time"
#~ msgstr "tiempo restante de descarga"
#~ msgid "1"
#~ msgid_plural "{0}"
#~ msgstr[0] "{0}"
#~ msgstr[1] "{0}"
#~ msgid "Torrent file {0} does not exist"
#~ msgstr "Archivo del torrent {0} no existe"
#~ msgid "Copying torrent to {0}"

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,864 @@
# I2P
# Copyright (C) 2009 The I2P Project
# This file is distributed under the same license as the i2psnark package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
# foo <foo@bar>, 2009.
#
msgid ""
msgstr ""
"Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-19 03:16+0000\n"
"PO-Revision-Date: 2010-12-29 16:29+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Spanish\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#: ../java/src/org/klomp/snark/SnarkManager.java:94
#, java-format
msgid "Adding torrents in {0} minutes"
msgstr "Os torrents serão adicionados em {0} minutos ..."
#: ../java/src/org/klomp/snark/SnarkManager.java:296
#, java-format
msgid "Total uploaders limit changed to {0}"
msgstr "Limite total de subidores mudado a {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:298
#, java-format
msgid "Minimum total uploaders limit is {0}"
msgstr "O limite mínimo de subidores é {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:310
#, java-format
msgid "Up BW limit changed to {0}KBps"
msgstr "Largura de banda para a subida foi mudada para {0} kbyte/s."
#: ../java/src/org/klomp/snark/SnarkManager.java:312
#, java-format
msgid "Minimum up bandwidth limit is {0}KBps"
msgstr "O limite mínimo da largura de banda para a subida está em {0} kbyte/s."
#: ../java/src/org/klomp/snark/SnarkManager.java:324
#, java-format
msgid "Startup delay limit changed to {0} minutes"
msgstr "Demora do arranque mudado a {0} minutos"
#: ../java/src/org/klomp/snark/SnarkManager.java:371
msgid "I2CP and tunnel changes will take effect after stopping all torrents"
msgstr "Mudanças do I2CP e do túnel terão efeito depois de parar todos os torrents"
#: ../java/src/org/klomp/snark/SnarkManager.java:378
msgid "Disconnecting old I2CP destination"
msgstr "Desconectando anterior Destinação I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:382
#, java-format
msgid "I2CP settings changed to {0}"
msgstr "Preferências de I2CP mudadas a {0}"
#: ../java/src/org/klomp/snark/SnarkManager.java:386
msgid "Unable to connect with the new settings, reverting to the old I2CP settings"
msgstr "Conectar-se não foi posível com as novas preferências I2CP, utilizarei as anteriores."
#: ../java/src/org/klomp/snark/SnarkManager.java:390
msgid "Unable to reconnect with the old settings!"
msgstr "Impossível se conectar usando as preferências anteriores!"
#: ../java/src/org/klomp/snark/SnarkManager.java:392
msgid "Reconnected on the new I2CP destination"
msgstr "Conectado com a nova Destinação I2CP"
#: ../java/src/org/klomp/snark/SnarkManager.java:403
#, java-format
msgid "I2CP listener restarted for \"{0}\""
msgstr "Conexão I2CP re-estabelecida para \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:414
msgid "Enabled autostart"
msgstr "Ativado o iniciar automáticamente"
#: ../java/src/org/klomp/snark/SnarkManager.java:416
msgid "Disabled autostart"
msgstr "Desativado o iniciar automáticamente"
#: ../java/src/org/klomp/snark/SnarkManager.java:422
msgid "Enabled open trackers - torrent restart required to take effect."
msgstr "Uso de rastreadores abertos ativado - Para ter efeito é necesário reiniciar os torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:424
msgid "Disabled open trackers - torrent restart required to take effect."
msgstr "Uso dos rastreadores abertos desativado - Para ter efeito é necesário reiniciar os torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:431
msgid "Open Tracker list changed - torrent restart required to take effect."
msgstr "Listado de rastreadores abertos mudado - Para ter efeito é necesário reiniciar os torrents."
#: ../java/src/org/klomp/snark/SnarkManager.java:438
#, java-format
msgid "{0} theme loaded, return to main i2psnark page to view."
msgstr "Tema {0} foi carregado. Volte no menú principal para vê-lo."
#: ../java/src/org/klomp/snark/SnarkManager.java:445
msgid "Configuration unchanged."
msgstr "Configuração não mudada."
#: ../java/src/org/klomp/snark/SnarkManager.java:455
#, java-format
msgid "Unable to save the config to {0}"
msgstr "Não se pode guardar a configuração em {0}."
#: ../java/src/org/klomp/snark/SnarkManager.java:494
msgid "Connecting to I2P"
msgstr "Conectando com I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:497
msgid "Error connecting to I2P - check your I2CP settings!"
msgstr "Erro ao se conectar com I2P - Verifique a sua configuração I2CP!"
#: ../java/src/org/klomp/snark/SnarkManager.java:506
#, java-format
msgid "Error: Could not add the torrent {0}"
msgstr "Erro: Não se pode adicionar o torrent {0}."
#. catch this here so we don't try do delete it below
#: ../java/src/org/klomp/snark/SnarkManager.java:528
#, java-format
msgid "Cannot open \"{0}\""
msgstr "Não pode se abrir \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:541
#, java-format
msgid "Warning - Ignoring non-i2p tracker in \"{0}\", will announce to i2p open trackers only"
msgstr "Aviso - Se ignorará rastreado não I2P no \"{0}\", anunciando só aos rastreadores abertos do I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:543
#, java-format
msgid "Warning - Ignoring non-i2p tracker in \"{0}\", and open trackers are disabled, you must enable open trackers before starting the torrent!"
msgstr "Aviso - Se ignorará rastreador não I2P no \"{0}\", rastreadores abertos estão desativados. Tens que ativá-los antes de iniciar o torrent!"
#: ../java/src/org/klomp/snark/SnarkManager.java:563
#, java-format
msgid "Torrent in \"{0}\" is invalid"
msgstr "O arquivo .torrent em \"{0}\" não é válido."
#: ../java/src/org/klomp/snark/SnarkManager.java:578
#, java-format
msgid "Torrent added and started: \"{0}\""
msgstr "Torrent adicionado e iniciado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:580
#, java-format
msgid "Torrent added: \"{0}\""
msgstr "Torrent adicionado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:734
#, java-format
msgid "Too many files in \"{0}\" ({1}), deleting it!"
msgstr "Ha arquivos demais no \"{0}\", se apagará ({1}). "
#: ../java/src/org/klomp/snark/SnarkManager.java:736
#, java-format
msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!"
msgstr "O arquivo de dados do torrent \"{0}\" não pode terminar em \".torrent' e será apagado."
#: ../java/src/org/klomp/snark/SnarkManager.java:738
#, java-format
msgid "No pieces in \"{0}\", deleting it!"
msgstr "Não ha peças no \"{0}\", se apagará."
#: ../java/src/org/klomp/snark/SnarkManager.java:740
#, java-format
msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!"
msgstr "Ha peças demais no \"{0}\" e o limite é {1}. Se apagarão."
#: ../java/src/org/klomp/snark/SnarkManager.java:742
#, java-format
msgid "Pieces are too large in \"{0}\" ({1}B), deleting it."
msgstr "Peças no \"{0}\" são grandes demais ({1}B). Se apagarão."
#: ../java/src/org/klomp/snark/SnarkManager.java:743
#, java-format
msgid "Limit is {0}B"
msgstr "O limite são \"{0}\"Bytes"
#: ../java/src/org/klomp/snark/SnarkManager.java:751
#, java-format
msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\""
msgstr "Torrents maiores que \"{0}\" Bytes ainda não funcionam, se apagará \"{1}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:767
#, java-format
msgid "Error: Could not remove the torrent {0}"
msgstr "Erro: Não se pode quitar o torrent \"{0}\"."
#: ../java/src/org/klomp/snark/SnarkManager.java:794
#, java-format
msgid "Torrent stopped: \"{0}\""
msgstr "Torrent parado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:814
#, java-format
msgid "Torrent removed: \"{0}\""
msgstr "Torrent quitado: \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:852
#, java-format
msgid "Download finished: {0}"
msgstr "Finalizada a descarga de \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:880
msgid "Unable to connect to I2P!"
msgstr "Impossível de se conectar com I2P"
#: ../java/src/org/klomp/snark/SnarkManager.java:886
#, java-format
msgid "Unable to add {0}"
msgstr "Impossível de adicionar {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:185
msgid "I2PSnark - Anonymous BitTorrent Client"
msgstr "I2PSnark - Cliente de BitTorrent Anônimo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:198
msgid "Torrents"
msgstr "Torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:201
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:208
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:977
msgid "I2PSnark"
msgstr "I2PSnark"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:205
msgid "Refresh page"
msgstr "Atualizar página"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:210
msgid "Forum"
msgstr "Foro"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:264
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1483
msgid "Status"
msgstr "Estado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:270
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:272
msgid "Hide Peers"
msgstr "ocultar pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:277
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:279
msgid "Show Peers"
msgstr "mostrar pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:286
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1464
msgid "Torrent"
msgstr "Torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
msgid "Estimated time remaining"
msgstr "Tempo que falta para completar"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:293
msgid "ETA"
msgstr "Tempo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:297
msgid "Downloaded"
msgstr "Descarregado"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:300
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:314
msgid "RX"
msgstr "Baixado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:304
msgid "Uploaded"
msgstr "Subido"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:307
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:324
msgid "TX"
msgstr "Subido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312
msgid "Down Rate"
msgstr "Taça de descarga"
#. Translators: Please keep short or translate as " "
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:317
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326
msgid "Rate"
msgstr "Taça"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:322
msgid "Up Rate"
msgstr "Taça de subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340
msgid "Stop all torrents and the I2P tunnel"
msgstr "Parar todos os torrents e o túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:342
msgid "Stop All"
msgstr "Parar tudos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:351
msgid "Start all torrents and the I2P tunnel"
msgstr "Iniciar todos os torrents e o túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:353
msgid "Start All"
msgstr "Arrancar todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372
msgid "No torrents loaded."
msgstr "Não carregado nenhum torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Totals"
msgstr "Total"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379
#, java-format
msgid "1 torrent"
msgid_plural "{0} torrents"
msgstr[0] "1 torrent"
msgstr[1] "{0} torrents"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:382
#, java-format
msgid "1 connected peer"
msgid_plural "{0} connected peers"
msgstr[0] "1 par conectado"
msgstr[1] "{0} pares conectados"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:454
#, java-format
msgid "Fetching {0}"
msgstr "Buscando {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:458
msgid "Invalid URL - must start with http://"
msgstr "Endereço não válido - tem que começar com http://"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:489
#, java-format
msgid "Starting up torrent {0}"
msgstr "Iniciando o torrent {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:509
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:527
#, java-format
msgid "Torrent file deleted: {0}"
msgstr "Apagado o arquivo torrent: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:533
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:543
#, java-format
msgid "Data file deleted: {0}"
msgstr "Apagado o arquivo de dados: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:535
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:545
#, java-format
msgid "Data file could not be deleted: {0}"
msgstr "Não se pode apagar o arquivo de dados: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:554
#, java-format
msgid "Data dir deleted: {0}"
msgstr "Apagada a pasta de dados: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:587
msgid "Error creating torrent - you must select a tracker"
msgstr "Erro ao criar o torrent - Tens que elegir um rastreador."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:602
#, java-format
msgid "Torrent created for \"{0}\""
msgstr "Torrent criado para \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:605
#, java-format
msgid "Many I2P trackers require you to register new torrents before seeding - please do so before starting \"{0}\""
msgstr "Muitos rastreadores no I2P exigem que você registre novos torrents antes de poder semeá-los. Por favor, faça isto antes de iniciar \"{0}\"!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:607
#, java-format
msgid "Error creating a torrent for \"{0}\""
msgstr "Erro ao criar o torrent \"{0}\""
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:610
#, java-format
msgid "Cannot create a torrent for the nonexistent data: {0}"
msgstr "Não se pode criar um torrent para dados que não existam: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:613
msgid "Error creating torrent - you must enter a file or directory"
msgstr "Erro ao criar o torrent - Tens que especificar um arquivo ou uma pasta."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:616
msgid "Stopping all torrents and closing the I2P tunnel."
msgstr "Parando todos os torrents e fechando o túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:627
msgid "I2P tunnel closed."
msgstr "Túnel I2P fechado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:630
msgid "Opening the I2P tunnel and starting all torrents."
msgstr "Abrendo o túnel I2P e iniciando os torrents ..."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:759
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:764
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:770
msgid "Tracker Error"
msgstr "Erro do rastreador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:762
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:766
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:778
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:782
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:790
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:794
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:799
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:803
#, java-format
msgid "1 peer"
msgid_plural "{0} peers"
msgstr[0] "1 par"
msgstr[1] "{0} pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:775
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:780
msgid "Seeding"
msgstr "semeando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:784
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1533
msgid "Complete"
msgstr "completo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:787
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:792
msgid "OK"
msgstr "Bem"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:796
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:801
msgid "Stalled"
msgstr "estancado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:805
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808
msgid "No Peers"
msgstr "sem pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:810
msgid "Stopped"
msgstr "detenido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:837
#, java-format
msgid "Details at {0} tracker"
msgstr "Detalhes no rastreador {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:838
msgid "Info"
msgstr "Info"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:853
msgid "View files"
msgstr "mostrar arquivos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:855
msgid "Open file"
msgstr "abrir arquivo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:865
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1569
msgid "Open"
msgstr "abrir"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:909
msgid "Stop the torrent"
msgstr "Parar o torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:911
msgid "Stop"
msgstr "Parar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:921
msgid "Start the torrent"
msgstr "Iniciar o torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:923
msgid "Start"
msgstr "Iniciar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:933
msgid "Remove the torrent from the active list, deleting the .torrent file"
msgstr "Retire o torrent da lista ativa, apagando o arquivo .torrent"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:938
#, java-format
msgid "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded data will not be deleted) ?"
msgstr "Está seguro de que quer apagar o arquivo \\''{0}.torrent\\''? (Dados baixados não se apagarão.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:941
msgid "Remove"
msgstr "Quitar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:950
msgid "Delete the .torrent file and the associated data file(s)"
msgstr "Apagar o arquivo torrent e o(s) arquivo(s) de dados pertenecentes"
#. Can't figure out how to escape double quotes inside the onclick string.
#. Single quotes in translate strings with parameters must be doubled.
#. Then the remaining single quite must be escaped
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:955
#, java-format
msgid "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded data?"
msgstr "Está seguro de que quer apagar o arquivo torrent \\''{0}\\'' e todos os dados descarregados deste torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:958
msgid "Delete"
msgstr "Apagar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:991
msgid "Unknown"
msgstr "desconhecido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001
msgid "Seed"
msgstr "Semeador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1019
msgid "Uninteresting (The peer has no pieces we need)"
msgstr "não interessante (O par não tem peças que precisamos.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1021
msgid "Choked (The peer is not allowing us to request pieces)"
msgstr "sufocado (De momento o par não está nos permitindo pedir mais peças.c)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1035
msgid "Uninterested (We have no pieces the peer needs)"
msgstr "desinteressado (Não temos as peças que o par quer.)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1037
msgid "Choking (We are not allowing the peer to request pieces)"
msgstr "sufocando (De momento não estamos permitindo que os pares peçam mais peças)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1092
msgid "Add Torrent"
msgstr "Adicionar um torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1094
msgid "From URL"
msgstr "URL fonte:"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1097
msgid "Torrent file must originate from an I2P-based tracker"
msgstr "O arquivo torrent tem que incluir um rastreador I2P."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1102
msgid "Add torrent"
msgstr "Adicionar torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1105
#, java-format
msgid "You can also copy .torrent files to: {0}."
msgstr "Também pode copiar arquivos torrent a {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1107
msgid "Removing a .torrent will cause it to stop."
msgstr "A remoção de um arquivo .torrent fará com que ele pare."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1131
msgid "Create Torrent"
msgstr "Criar um torrent"
#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1134
msgid "Data to seed"
msgstr "Dados para semear"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1138
msgid "File or directory to seed (must be within the specified path)"
msgstr "Arquivo ou pasta para semear (deve estar no caminho especificado)"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1140
msgid "Tracker"
msgstr "Rastreador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1142
msgid "Select a tracker"
msgstr "Selecione um rastreador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1155
msgid "or"
msgstr "ou"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1158
msgid "Specify custom tracker announce URL"
msgstr "Especifique o URL de rastreador personalizado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1161
msgid "Create torrent"
msgstr "Criar torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1180
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317
msgid "Configuration"
msgstr "Preferências"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1184
msgid "Data directory"
msgstr "Pasta de dados"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1186
msgid "Edit i2psnark.config and restart to change"
msgstr "Para mudar, modifique o arquivo i2psnark.config e re-inície!"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1190
msgid "Auto start"
msgstr "Iniciar automáticamente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1194
msgid "If checked, automatically start torrents that are added"
msgstr "se marcado, os torrents adicionados se iniciarão automaticamente"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Theme"
msgstr "Tema"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1211
msgid "Startup delay"
msgstr "Demora do arranque"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1213
msgid "minutes"
msgstr "minutos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1237
msgid "Total uploader limit"
msgstr "Limite global de subidores"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240
msgid "peers"
msgstr "pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
msgid "Up bandwidth limit"
msgstr "Limite de largura de banda para a subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1247
msgid "Half available bandwidth recommended."
msgstr "Se recomenda a metade da largura de banda disponível."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1249
msgid "View or change router bandwidth"
msgstr "mostrar e mudar as preferências da largura de banda do roteador"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1253
msgid "Use open trackers also"
msgstr "usar também rastreadores abertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1257
msgid "If checked, announce torrents to open trackers as well as the tracker listed in the torrent file"
msgstr "Se marcado, anunciar os torrents aos rastreadores abertos, assim como aos rastreadores listados no arquivo torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1261
msgid "Open tracker announce URLs"
msgstr "URL(s) para anunciar aos rastreadores abertos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1273
msgid "Inbound Settings"
msgstr "Preferências de entrada"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1279
msgid "Outbound Settings"
msgstr "Preferências de saida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1286
msgid "I2CP host"
msgstr "Anfitrião I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
msgid "I2CP port"
msgstr "Porto I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1303
msgid "I2CP options"
msgstr "Opções I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1308
msgid "Save configuration"
msgstr "Guardar configuração"
#. * dummies for translation
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1325
#, java-format
msgid "1 hop"
msgid_plural "{0} hops"
msgstr[0] "1 salto"
msgstr[1] "{0} saltos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1326
#, java-format
msgid "1 tunnel"
msgid_plural "{0} tunnels"
msgstr[0] "1 túnel"
msgstr[1] "{0} túneles"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1480
msgid "Size"
msgstr "Tamanho"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1487
msgid "Priority"
msgstr "Prioridade"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1492
msgid "Up to higher level directory"
msgstr "Subir uma herarquia"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1517
msgid "Directory"
msgstr "Pasta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1522
msgid "Torrent not found?"
msgstr "Não achei o arquivo torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1530
msgid "File not found in torrent?"
msgstr "Arquivo não achado no torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1543
msgid "complete"
msgstr "completo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1544
msgid "bytes remaining"
msgstr "Bytes faltando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1595
msgid "High"
msgstr "alta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1600
msgid "Normal"
msgstr "normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1605
msgid "Skip"
msgstr "Ignorar"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1614
msgid "Save priorities"
msgstr "Guardar prioridades"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1726
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent obtido de {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1746
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent já em marcha: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1748
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent já na cola: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755
#, java-format
msgid "Failed to copy torrent file to {0}"
msgstr "Não se pode copiar o torrent para {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1759
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent em {0} não foi válido"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1764
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "Não se pode obter torrent de {0}"
#~ msgid " theme locked and loaded."
#~ msgstr "tema carregado"
#~ msgid "Hide All Attached Peers [connected/total in swarm]"
#~ msgstr "Ocultar todos os pares [conectados/total neste torrent]"
#~ msgid "Show All Attached Peers [connected/total in swarm]"
#~ msgstr "Mostrar todos os pares [conectados/total neste torrent]"
#~ msgid "Loaded Torrents"
#~ msgstr "Torrents carregados"
#~ msgid "Estimated Download Time"
#~ msgstr "tempo restante da descarga"
#~ msgid "1"
#~ msgid_plural "{0}"
#~ msgstr[0] "1"
#~ msgstr[1] "{0}"
#~ msgid "Torrent file {0} does not exist"
#~ msgstr "Arquivo do torrent {0} não existe"
#~ msgid "Copying torrent to {0}"
#~ msgstr "Copiando torrent para {0}"
#~ msgid "from {0}"
#~ msgstr "de {0}"
#~ msgid "Downloading"
#~ msgstr "descarregando"
#~ msgid "File"
#~ msgstr "Arquivo"
#~ msgid "FileSize"
#~ msgstr "Tamanho do arquivo"
#~ msgid "Download Status"
#~ msgstr "Estado"
#, fuzzy
#~ msgid "size: {0}B"
#~ msgstr "Tamaño: {0}Bytes"
#~ msgid "Directory to store torrents and data"
#~ msgstr "Carpeta para guardar los archivos torrent y los datos"
#~ msgid "Do not download"
#~ msgstr "No descargues"
#~ msgid "Details"
#~ msgstr "Detalles"
#~ msgid "Cannot change the I2CP settings while torrents are active"
#~ msgstr ""
#~ "No se puede cammbiar los ajustes I2CP mientras estén activos los torrents"
#~ msgid "Non-i2p tracker in \"{0}\", deleting it from our list of trackers!"
#~ msgstr ""
#~ "Rastreador fuera de I2P en \"{0}\", borrando de la lista de rastreadores"
#~ msgid "{0} torrents"
#~ msgstr "{0} Torrents"
#~ msgid "Uninteresting"
#~ msgstr "no interesante"
#~ msgid "Choked"
#~ msgstr "frenado"
#~ msgid "Uninterested"
#~ msgstr "desinteresado"
#~ msgid "Choking"
#~ msgstr "frenando"
#~ msgid "Custom tracker URL"
#~ msgstr "URL especial del rastreador"
#~ msgid "Configure"
#~ msgstr "Ajustes"

File diff suppressed because it is too large Load Diff

View File

@ -29,7 +29,9 @@ public class I2PTunnelClient extends I2PTunnelClientBase {
public I2PTunnelClient(int localPort, String destinations, Logging l,
boolean ownDest, EventDispatcher notifyThis,
I2PTunnel tunnel, String pkf) throws IllegalArgumentException {
super(localPort, ownDest, l, notifyThis, "SynSender", tunnel, pkf);
super(localPort, ownDest, l, notifyThis,
"Standard client on " + tunnel.listenHost + ':' + localPort,
tunnel, pkf);
if (waitEventValue("openBaseClientResult").equals("error")) {
notifyEvent("openClientResult", "error");

View File

@ -73,7 +73,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem
_proxyList = new ArrayList(4);
}
/** all auth @ince 0.8.2 */
/** all auth @since 0.8.2 */
public static final String PROP_AUTH = "proxyAuth";
public static final String PROP_USER = "proxyUsername";
public static final String PROP_PW = "proxyPassword";

View File

@ -385,6 +385,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
//if (_log.shouldLog(Log.DEBUG))
// _log.debug("Read the http command [" + command.toString() + "]");
// FIXME we probably don't need or want this in the outgoing direction
int trimmed = 0;
if (command.length() > 0) {
for (int i = 0; i < command.length(); i++) {
@ -424,7 +425,8 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer {
else if ("X-Accept-encoding".equalsIgnoreCase(name))
name = "X-Accept-encoding";
//We want to remove certain headers to improve anonymity
// For incoming, we remove certain headers to prevent spoofing.
// For outgoing, we remove certain headers to improve anonymity.
boolean skip = false;
for (String skipHeader: skipHeaders) {
if (skipHeader.equalsIgnoreCase(name)) {

View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-04 17:23+0000\n"
"PO-Revision-Date: 2010-12-04 18:31+0100\n"
"PO-Revision-Date: 2010-12-19 04:36+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-07-04 16:39+0000\n"
"POT-Creation-Date: 2010-12-17 15:04+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>, monkeybrains <monkeybrains@mail.i2p>\n"
@ -17,68 +17,95 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Dutch\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:492
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:475
#, java-format
msgid ""
"To visit the destination in your host database, click <a href=\"{0}\">here</"
"a>. To visit the conflicting addresshelper destination, click <a href=\"{1}"
"\">here</a>."
msgstr "Om de destination in je host database te bezoeken, klik <a href=\"{0}\">here</a>. Om de conflicterende adreshelper destination te bezoeken, klik <a href=\"{1}\">here</a>."
msgstr ""
"Om de destination in je host database te bezoeken, klik <a href=\"{0}"
"\">hier</a>. Om de conflicterende adreshelper destination te bezoeken, klik "
"<a href=\"{1}\">hier</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:909
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
msgid ""
"Click a link below to look for an address helper by using a \"jump\" service:"
msgstr "Klik op een onderstaande link om te zoeken naar een adreshelper via een \"jump\" service:"
msgstr ""
"Klik op een onderstaande link om te zoeken naar een adreshelper via een "
"\"jump\" service:"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:372
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:170
msgid ""
"Invalid form submission, probably because you used the 'back' or 'reload' "
"button on your browser. Please resubmit."
msgstr ""
"Ongeldige formulier verzonden, waarschijnlijk doordat je de 'back' of "
"'reload' button van je browser hebt gebruikt. Verzend opnieuw."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:217
msgid "Configuration reloaded for all tunnels"
msgstr "Configuratie van alle tunnels opnieuw geladen"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:229
msgid "Starting tunnel"
msgstr "Opstarten van tunnel"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:242
msgid "Stopping tunnel"
msgstr "Stoppen van tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:389
msgid "New Tunnel"
msgstr "Nieuwe Tunnel"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:392
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:409
msgid "Standard client"
msgstr "Standaard client"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:393
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:410
msgid "HTTP client"
msgstr "HTTP client"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:394
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:411
msgid "IRC client"
msgstr "IRC client"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:395
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:412
msgid "Standard server"
msgstr "Standaard server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:396
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:413
msgid "HTTP server"
msgstr "HTTP server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:397
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:414
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:398
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:415
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:399
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:416
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS proxy"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:400
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:417
msgid "IRC server"
msgstr "IRC server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:401
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
msgid "Streamr client"
msgstr "Streamr client"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:402
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
msgid "Streamr server"
msgstr "Streamr server"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:403
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
msgid "HTTP bidir"
msgstr "HTTP bidir"
@ -113,7 +140,7 @@ msgstr "Type"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:358
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:367
msgid "Description"
msgstr "Omschrijving"
@ -175,294 +202,337 @@ msgstr "Tunnel Destinations"
msgid "name or destination"
msgstr "naam of destination"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:220
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:217
msgid "b32 not recommended"
msgstr "b32 niet aanbevolen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:223
msgid "Shared Client"
msgstr "Gedeelde Client"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:224
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:227
msgid ""
"(Share tunnels with other clients and irc/httpclients? Change requires "
"restart of client proxy)"
msgstr "(Deel tunnels met andere clients en irc/httpclients? Wijziging vereist herstart van de client proxy)"
msgstr ""
"(Deel tunnels met andere clients en irc/httpclients? Wijziging vereist "
"herstart van de client proxy)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:228
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:231
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:124
msgid "Auto Start"
msgstr "Auto Start"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:232
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:235
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:128
msgid "(Check the Box for 'YES')"
msgstr "(Markeer de Box voor 'JA')"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:234
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:249
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:237
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:258
msgid "Advanced networking options"
msgstr "Geavanceerde netwerk opties"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:239
msgid ""
"(NOTE: when this client proxy is configured to share tunnels, then these "
"options are for all the shared proxy clients!)"
msgstr "(OPMERKING: wanneer deze client proxy is geconfigureerd om tunnels te delen, dan zijn deze opties van toepassing voor alle gedeelde proxy clients!)"
msgstr ""
"(OPMERKING: wanneer deze client proxy is geconfigureerd om tunnels te delen, "
"dan zijn deze opties van toepassing voor alle gedeelde proxy clients!)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:241
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:260
msgid "Tunnel Options"
msgstr "Tunnel Opties"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:240
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:253
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:262
msgid "Length"
msgstr "Lengte"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:260
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:250
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:269
msgid "0 hop tunnel (low anonymity, low latency)"
msgstr "0 hop tunnel (lage anonimiteit, weinig vertraging)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:251
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:264
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:254
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:273
msgid "1 hop tunnel (medium anonymity, medium latency)"
msgstr "1 hop tunnel (gemiddelde anonimiteit, gemiddelde vertraging)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:255
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:258
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:277
msgid "2 hop tunnel (high anonymity, high latency)"
msgstr "2 hop tunnel (hoge anonimiteit, hoge vertraging)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:259
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:272
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:262
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:281
msgid "3 hop tunnel (very high anonymity, poor performance)"
msgstr "3 hop tunnel (zeer hoge anonimiteit, slechte prestatie)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:268
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:281
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:271
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:290
msgid "hop tunnel (very poor performance)"
msgstr "hop tunnel (zeer slechte prestatie)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:273
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:286
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:276
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:295
msgid "Variance"
msgstr "Variantie"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:280
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:293
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:283
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:302
msgid "0 hop variance (no randomisation, consistant performance)"
msgstr "0 hop variantie (geen randomisatie, consistente prestatie)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:284
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:297
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:287
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:306
msgid ""
"+ 0-1 hop variance (medium additive randomisation, subtractive performance)"
msgstr "+ 0-1 hop variantie (gemiddeld toegevoegde randomisatie, minder prestatie)"
msgstr ""
"+ 0-1 hop variantie (gemiddeld toegevoegde randomisatie, minder prestatie)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:288
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:301
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:291
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:310
msgid ""
"+ 0-2 hop variance (high additive randomisation, subtractive performance)"
msgstr "+ 0-2 hop variantie (hoge toegevoegde randomisatie, minder prestatie)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:292
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:305
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:295
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:314
msgid "+/- 0-1 hop variance (standard randomisation, standard performance)"
msgstr "+/- 0-1 hop variantie (standaard randomisatie, standaard prestatie)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:296
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:309
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:299
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:318
msgid "+/- 0-2 hop variance (not recommended)"
msgstr "+/- 0-2 hop variantie (niet aanbevolen)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:308
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:321
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:311
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:330
msgid "hop variance"
msgstr "hop variantie"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:313
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:326
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:316
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335
msgid "Count"
msgstr "Aantal"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:320
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:333
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:323
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:342
msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)"
msgstr "1 inkomende, 1 uitgaande tunnel (laag bandbreedte gebruik, minder betrouwbaar)"
msgstr ""
"1 inkomende, 1 uitgaande tunnel (laag bandbreedte gebruik, minder "
"betrouwbaar)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:324
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:337
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:327
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:346
msgid ""
"2 inbound, 2 outbound tunnels (standard bandwidth usage, standard "
"reliability)"
msgstr "2 inkomende, 2 uitgaande tunnels (standaard bandbreedte gebruik, standaard betrouwbaarheid)"
msgstr ""
"2 inkomende, 2 uitgaande tunnels (standaard bandbreedte gebruik, standaard "
"betrouwbaarheid)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:328
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:341
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:331
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:350
msgid ""
"3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)"
msgstr "3 inkomende, 3 uitgaande tunnels (hoge bandbreedte gebruik, hogere betrouwbaarheid)"
msgstr ""
"3 inkomende, 3 uitgaande tunnels (hoge bandbreedte gebruik, hogere "
"betrouwbaarheid)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:337
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:350
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:340
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:359
msgid "tunnels"
msgstr "tunnels"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:342
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:355
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:345
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:364
msgid "Backup Count"
msgstr "Backup Aantal"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:349
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:362
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:352
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:371
msgid "0 backup tunnels (0 redundancy, no added resource usage)"
msgstr "0 backup tunnels (0 redundantie, geen additionele bronnen gebruikt)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:353
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:366
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:356
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:375
msgid "1 backup tunnel each direction (low redundancy, low resource usage)"
msgstr "1 backup tunnel in beide richting (lage redundantie, lage aantal bronnen gebruikt)"
msgstr ""
"1 backup tunnel in beide richting (lage redundantie, lage aantal bronnen "
"gebruikt)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:357
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:370
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:360
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:379
msgid ""
"2 backup tunnels each direction (medium redundancy, medium resource usage)"
msgstr "2 backup tunnels in beide richting (gemiddelde redundantie, gemiddeld aantal bronnen gebruikt)"
msgstr ""
"2 backup tunnels in beide richting (gemiddelde redundantie, gemiddeld aantal "
"bronnen gebruikt)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:361
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:374
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr "3 backup tunnels in beide richting (hoge redundantie, hoog aantal bronnen gebruikt)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:370
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:364
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:383
msgid "3 backup tunnels each direction (high redundancy, high resource usage)"
msgstr ""
"3 backup tunnels in beide richting (hoge redundantie, hoog aantal bronnen "
"gebruikt)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:373
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:392
msgid "backup tunnels"
msgstr "backup tunnels"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:377
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:390
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:380
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:399
msgid "Profile"
msgstr "Profiel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:384
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:397
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:387
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:406
msgid "interactive connection"
msgstr "interactieve connectie"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:388
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:391
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:410
msgid "bulk connection (downloads/websites/BT)"
msgstr "bulk connection (downloads/websites/BT)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:390
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:393
msgid "Delay Connect"
msgstr "Vertraagde Connectie"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:394
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:397
msgid "for request/response connections"
msgstr "voor request/response connecties"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:398
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:405
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:401
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:414
msgid "I2CP Options"
msgstr "I2CP Opties"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:400
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:403
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:146
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:407
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:416
msgid "Host"
msgstr "Host"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:404
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:407
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:152
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:411
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:420
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:244
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:266
msgid "Port"
msgstr "Poort"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:410
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:443
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:413
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:452
msgid "Reduce tunnel quantity when idle"
msgstr "Verminder tunnel aantal wanneer in rust"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:412
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:426
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:434
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:446
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:456
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:417
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:445
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:415
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:429
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:437
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:449
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:459
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:479
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:493
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:426
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:442
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:454
msgid "Enable"
msgstr "Ingeschakeld"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:416
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:449
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:419
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:458
msgid "Reduced tunnel count"
msgstr "Verminder tunnel aantal"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:420
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:440
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:423
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:443
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:462
msgid "Idle minutes"
msgstr "Rust minuten"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:424
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:427
msgid "Close tunnels when idle"
msgstr "Sluit tunnels wanneer in rust"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:430
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:433
msgid "New Keys on Reopen"
msgstr "Nieuwe Sleutels bij Heropenen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:438
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:441
msgid "Disable"
msgstr "Uitgeschakeld"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:444
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:447
msgid "Delay tunnel open until required"
msgstr "Vertraag tunnel opening totdat het nodig is"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:454
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:457
msgid "Persistent private key"
msgstr "Persistente private sleutel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:460
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:463
msgid "File"
msgstr "Bestand"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:464
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:467
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:235
msgid "Local destination"
msgstr "Lokale destination"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:468
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:471
msgid "(if known)"
msgstr "(indien bekend)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:472
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:489
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:477
msgid "Local Authorization"
msgstr "Lokale Autorisatie"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:483
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:497
msgid "Username"
msgstr "Gebruikersnaam"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:487
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:501
msgid "Password"
msgstr "Wachtwoord"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:491
msgid "Outproxy Authorization"
msgstr "Uitgaande Proxy Autorisatie"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:507
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:498
msgid "Custom options"
msgstr "Aangepaste opties"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:476
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:493
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:511
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:502
msgid ""
"NOTE: If tunnel is currently running, most changes will not take effect "
"until tunnel is stopped and restarted."
msgstr "OPMERKING: Indien de tunnel op dit moment draait, zullen de meeste wijzigingen pas effect hebben na het stoppen en herstarten van de tunnel."
msgstr ""
"OPMERKING: Indien de tunnel op dit moment draait, zullen de meeste "
"wijzigingen pas effect hebben na het stoppen en herstarten van de tunnel."
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:478
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:513
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:504
msgid "Cancel"
msgstr "Annuleer"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:482
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:499
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:508
msgid "Delete"
msgstr "Verwijder"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:501
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:519
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:510
msgid "Save"
msgstr "Opslaan"
@ -494,72 +564,76 @@ msgstr "Private sleutel bestand"
msgid "Add to local addressbook"
msgstr "Toevoegen aan lokaal adresboek"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:415
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:252
msgid "Hostname Signature"
msgstr "Hostnaam Handtekening"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:424
msgid "Encrypt Leaseset"
msgstr "Versleutel Leaseset"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:421
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:430
msgid "Encryption Key"
msgstr "Encryptie Sleutel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:425
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:434
msgid "Generate New Key"
msgstr "Genereer Nieuwe Sleutel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:427
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:436
msgid "Generate"
msgstr "Genereer"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:487
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:438
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:496
msgid "(Tunnel must be stopped first)"
msgstr "(Tunnel moet eerst gestopt worden)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:431
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:440
msgid "Restricted Access List"
msgstr "Beperkte Toegangs Lijst"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:437
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:446
msgid "Access List"
msgstr "Toegangs Lijst"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:441
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:450
msgid "(Restrict to these clients only)"
msgstr "(Beperkt tot slechts deze clients)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:457
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:466
msgid "New Certificate type"
msgstr "Nieuw Certificaat type"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:468
msgid "None"
msgstr "Geen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:463
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:472
msgid "Hashcash (effort)"
msgstr "Hashcash (effort)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:469
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:478
msgid "Hashcash Calc Time"
msgstr "Hashcash Reken Tijd"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:471
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:480
msgid "Estimate"
msgstr "Inschatten"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:473
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:482
msgid "Hidden"
msgstr "Verborgen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:477
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:486
msgid "Signed (signed by)"
msgstr "Ondertekend (ondertekend door)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:483
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:492
msgid "Modify Certificate"
msgstr "Wijzig Certificaat"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:494
msgid "Modify"
msgstr "Wijzig"
@ -654,12 +728,12 @@ msgid "New server tunnel"
msgstr "Nieuwe server tunnel"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:368
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:377
msgid "Standard"
msgstr "Standaard"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:379
msgid "Create"
msgstr "Creëer"
@ -676,14 +750,18 @@ msgstr "Interface"
msgid "Standby"
msgstr "Stand-by"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:346
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:344
msgid "Outproxy"
msgstr "Uitgaande proxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:350
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:348
msgid "Destination"
msgstr "Destination"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:362
msgid "none"
msgstr "geen"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:375
msgid "New client tunnel"
msgstr "Nieuwe client tunnel"

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P i2ptunnel\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-11-13 22:04+0000\n"
"PO-Revision-Date: 2010-11-14 19:56+0500\n"
"POT-Creation-Date: 2010-12-13 19:43+0000\n"
"PO-Revision-Date: 2010-12-14 00:54+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"Language: \n"
@ -18,64 +18,82 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Russian\n"
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:492
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:475
#, java-format
msgid "To visit the destination in your host database, click <a href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, click <a href=\"{1}\">here</a>."
msgstr "Для перехода по ссылке из локальной адресной книги, нажмите <a href=\"{0}\">здесь</a>. Для перехода по новой addresshelper-ссылке, нажмите <a href=\"{1}\">здесь</a>."
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:917
#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:932
msgid "Click a link below to look for an address helper by using a \"jump\" service:"
msgstr "Jump-сервисы, которые, возможно, знают нужную Вам addresshelper-ссылку:"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:382
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:170
msgid "Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit."
msgstr "Неправильно переданная форма, возможно вы использовали действие браузера \"назад\" или \"обновить\". Пожалуйста повторите попытку."
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:217
msgid "Configuration reloaded for all tunnels"
msgstr "Конфигурация для всех туннелей перечитана"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:229
msgid "Starting tunnel"
msgstr "Запуск туннеля"
#. and give them something to look at in any case
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:242
msgid "Stopping tunnel"
msgstr "Остановка туннеля"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:389
msgid "New Tunnel"
msgstr "Новый туннель"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:402
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:409
msgid "Standard client"
msgstr "Обычный клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:403
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:410
msgid "HTTP client"
msgstr "HTTP-клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:404
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:411
msgid "IRC client"
msgstr "IRC-клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:405
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:412
msgid "Standard server"
msgstr "Обычный сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:406
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:413
msgid "HTTP server"
msgstr "HTTP-сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:407
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:414
msgid "SOCKS 4/4a/5 proxy"
msgstr "SOCKS 4/4a/5 прокси"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:408
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:415
msgid "SOCKS IRC proxy"
msgstr "SOCKS IRC прокси"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:409
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:416
msgid "CONNECT/SSL/HTTPS proxy"
msgstr "CONNECT/SSL/HTTPS прокси"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:410
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:417
msgid "IRC server"
msgstr "IRC-сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:411
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:418
msgid "Streamr client"
msgstr "Streamr-клиент"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:412
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:419
msgid "Streamr server"
msgstr "Streamr-сервер"
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:413
#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:420
msgid "HTTP bidir"
msgstr "HTTP bidir (экспериментальный двунаправленный режим, инструкцию спрашивайте у sponge)"
@ -110,7 +128,7 @@ msgstr "Тип"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:120
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:226
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:358
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:367
msgid "Description"
msgstr "Описание"
@ -380,6 +398,8 @@ msgstr "Снижать количество туннелей при просто
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:437
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:449
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:459
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:479
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:493
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:426
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:442
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:454
@ -430,27 +450,45 @@ msgstr "Локальный адрес назначения"
msgid "(if known)"
msgstr "(если известен)"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:475
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:477
msgid "Local Authorization"
msgstr "Локальная авторизация"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:483
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:497
msgid "Username"
msgstr "Имя пользователя"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:487
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:501
msgid "Password"
msgstr "Пароль"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:491
msgid "Outproxy Authorization"
msgstr "Авторизация outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:507
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:498
msgid "Custom options"
msgstr "Дополнительные параметры"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:479
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:511
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:502
msgid "NOTE: If tunnel is currently running, most changes will not take effect until tunnel is stopped and restarted."
msgstr "ПРИМЕЧАНИЕ: для вступления в силу измененных настроек потребуется остановка и перезапуск туннеля"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:481
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:513
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:504
msgid "Cancel"
msgstr "Отмена"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:485
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:517
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:508
msgid "Delete"
msgstr "Удалить"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:487
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:519
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:510
msgid "Save"
msgstr "Сохранить"
@ -647,12 +685,12 @@ msgid "New server tunnel"
msgstr "Новый серверный туннель"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:236
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:368
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:377
msgid "Standard"
msgstr "Стандартный"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:238
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:370
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:379
msgid "Create"
msgstr "Создать"
@ -670,15 +708,19 @@ msgid "Standby"
msgstr "Режим ожидания"
# This term intentionally left in English
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:346
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:344
msgid "Outproxy"
msgstr "Outproxy"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:350
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:348
msgid "Destination"
msgstr "Адрес назначения"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:366
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:362
msgid "none"
msgstr "нет"
#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:375
msgid "New client tunnel"
msgstr "Новый клиентский туннель"

View File

@ -0,0 +1,809 @@
// ========================================================================
// $Id: ResourceHandler.java,v 1.66 2005/08/24 08:18:17 gregwilkins Exp $
// Copyright 199-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.mortbay.http.handler;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.List;
import org.apache.commons.logging.Log;
import org.mortbay.log.LogFactory;
import org.mortbay.http.HttpException;
import org.mortbay.http.HttpFields;
import org.mortbay.http.HttpRequest;
import org.mortbay.http.HttpResponse;
import org.mortbay.http.InclusiveByteRange;
import org.mortbay.http.MultiPartResponse;
import org.mortbay.http.ResourceCache;
import org.mortbay.util.CachedResource;
import org.mortbay.util.IO;
import org.mortbay.util.LogSupport;
import org.mortbay.util.Resource;
import org.mortbay.util.StringMap;
import org.mortbay.util.TypeUtil;
import org.mortbay.util.URI;
/* ------------------------------------------------------------ */
/** Handler to serve files and resources.
* Serves files from a given resource URL base and implements
* the GET, HEAD, DELETE, OPTIONS, PUT, MOVE methods and the
* IfModifiedSince and IfUnmodifiedSince header fields.
* A simple memory cache is also provided to reduce file I/O.
* HTTP/1.1 ranges are supported.
*
* @version $Id: ResourceHandler.java,v 1.66 2005/08/24 08:18:17 gregwilkins Exp $
* @author Nuno Pregui<75>a
* @author Greg Wilkins
*/
public class ResourceHandler extends AbstractHttpHandler
{
private static Log log = LogFactory.getLog(ResourceHandler.class);
/* ----------------------------------------------------------------- */
private boolean _acceptRanges=true;
private boolean _redirectWelcomeFiles ;
private String[] _methods=null;
private String _allowed;
private boolean _dirAllowed=true;
private int _minGzipLength =-1;
private StringMap _methodMap = new StringMap();
{
setAllowedMethods(new String[]
{
HttpRequest.__GET,
HttpRequest.__POST,
HttpRequest.__HEAD,
HttpRequest.__OPTIONS,
HttpRequest.__TRACE
});
}
/* ----------------------------------------------------------------- */
/** Construct a ResourceHandler.
*/
public ResourceHandler()
{}
/* ----------------------------------------------------------------- */
public synchronized void start()
throws Exception
{
super.start();
}
/* ----------------------------------------------------------------- */
public void stop()
throws InterruptedException
{
super.stop();
}
/* ------------------------------------------------------------ */
public String[] getAllowedMethods()
{
return _methods;
}
/* ------------------------------------------------------------ */
public void setAllowedMethods(String[] methods)
{
StringBuffer b = new StringBuffer();
_methods=methods;
_methodMap.clear();
for (int i=0;i<methods.length;i++)
{
_methodMap.put(methods[i],methods[i]);
if (i>0)
b.append(',');
b.append(methods[i]);
}
_allowed=b.toString();
}
/* ------------------------------------------------------------ */
public boolean isMethodAllowed(String method)
{
return _methodMap.get(method)!=null;
}
/* ------------------------------------------------------------ */
public String getAllowedString()
{
return _allowed;
}
/* ------------------------------------------------------------ */
public boolean isDirAllowed()
{
return _dirAllowed;
}
/* ------------------------------------------------------------ */
public void setDirAllowed(boolean dirAllowed)
{
_dirAllowed = dirAllowed;
}
/* ------------------------------------------------------------ */
public boolean isAcceptRanges()
{
return _acceptRanges;
}
/* ------------------------------------------------------------ */
/**
* @return True if welcome files are redirected to. False if forward is used.
*/
public boolean getRedirectWelcome()
{
return _redirectWelcomeFiles;
}
/* ------------------------------------------------------------ */
/**
* @param redirectWelcome True if welcome files are redirected to. False
* if forward is used.
*/
public void setRedirectWelcome(boolean redirectWelcome)
{
_redirectWelcomeFiles = redirectWelcome;
}
/* ------------------------------------------------------------ */
/** Set if the handler accepts range requests.
* Default is false;
* @param ar True if the handler should accept ranges
*/
public void setAcceptRanges(boolean ar)
{
_acceptRanges=ar;
}
/* ------------------------------------------------------------ */
/** Get minimum content length for GZIP encoding.
* @return Minimum length of content for gzip encoding or -1 if disabled.
*/
public int getMinGzipLength()
{
return _minGzipLength;
}
/* ------------------------------------------------------------ */
/** Set minimum content length for GZIP encoding.
* @param minGzipLength If set to a positive integer, then static content
* larger than this will be served as gzip content encoded
* if a matching resource is found ending with ".gz"
*/
public void setMinGzipLength(int minGzipLength)
{
_minGzipLength = minGzipLength;
}
/* ------------------------------------------------------------ */
/** get Resource to serve.
* Map a path to a resource. The default implementation calls
* HttpContext.getResource but derived handers may provide
* their own mapping.
* @param pathInContext The path to find a resource for.
* @return The resource to serve.
*/
protected Resource getResource(String pathInContext)
throws IOException
{
return getHttpContext().getResource(pathInContext);
}
/* ------------------------------------------------------------ */
public void handle(String pathInContext,
String pathParams,
HttpRequest request,
HttpResponse response)
throws HttpException, IOException
{
Resource resource = getResource(pathInContext);
if (resource==null)
return;
// Is the method allowed?
if (!isMethodAllowed(request.getMethod()))
{
if(log.isDebugEnabled())log.debug("Method not allowed: "+request.getMethod());
if (resource.exists())
{
setAllowHeader(response);
response.sendError(HttpResponse.__405_Method_Not_Allowed);
}
return;
}
// Handle the request
try
{
if(log.isDebugEnabled())log.debug("PATH="+pathInContext+" RESOURCE="+resource);
// check filename
String method=request.getMethod();
if (method.equals(HttpRequest.__GET) ||
method.equals(HttpRequest.__POST) ||
method.equals(HttpRequest.__HEAD))
handleGet(request, response, pathInContext, pathParams, resource);
else if (method.equals(HttpRequest.__PUT))
handlePut(request, response, pathInContext, resource);
else if (method.equals(HttpRequest.__DELETE))
handleDelete(request, response, pathInContext, resource);
else if (method.equals(HttpRequest.__OPTIONS))
handleOptions(response, pathInContext);
else if (method.equals(HttpRequest.__MOVE))
handleMove(request, response, pathInContext, resource);
else if (method.equals(HttpRequest.__TRACE))
handleTrace(request, response);
else
{
if(log.isDebugEnabled())log.debug("Unknown action:"+method);
// anything else...
try{
if (resource.exists())
response.sendError(HttpResponse.__501_Not_Implemented);
}
catch(Exception e) {LogSupport.ignore(log,e);}
}
}
catch(IllegalArgumentException e)
{
LogSupport.ignore(log,e);
}
finally
{
if (resource!=null && !(resource instanceof CachedResource))
resource.release();
}
}
/* ------------------------------------------------------------------- */
public void handleGet(HttpRequest request,
HttpResponse response,
String pathInContext,
String pathParams,
Resource resource)
throws IOException
{
if(log.isDebugEnabled())log.debug("Looking for "+resource);
if (resource!=null && resource.exists())
{
// check if directory
if (resource.isDirectory())
{
if (!pathInContext.endsWith("/") && !pathInContext.equals("/"))
{
log.debug("Redirect to directory/");
String q=request.getQuery();
// Properly fix URI
URI urifix = new URI(request.getRequestURL().toString());
urifix.setPath(urifix.getPath());
StringBuffer buf = new StringBuffer(urifix.toString());
urifix = null;
if (q!=null&&q.length()!=0)
{
buf.append('?');
buf.append(q);
}
response.setField(HttpFields.__Location, URI.addPaths(buf.toString(),"/"));
response.setStatus(302);
request.setHandled(true);
return;
}
// See if index file exists
String welcome=getHttpContext().getWelcomeFile(resource);
if (welcome!=null)
{
// Forward to the index
String ipath=URI.addPaths(pathInContext,welcome);
if (_redirectWelcomeFiles)
{
// Redirect to the index
ipath=URI.addPaths(getHttpContext().getContextPath(),ipath);
response.setContentLength(0);
response.sendRedirect(ipath);
}
else
{
URI uri=request.getURI();
uri.setPath(URI.addPaths(uri.getPath(),welcome));
getHttpContext().handle(ipath,pathParams,request,response);
}
return;
}
// Check modified dates
if (!passConditionalHeaders(request,response,resource))
return;
// If we got here, no forward to index took place
sendDirectory(request,response,resource,pathInContext.length()>1);
}
// check if it is a file
else if (resource.exists())
{
// Check modified dates
if (!passConditionalHeaders(request,response,resource))
return;
sendData(request,response,pathInContext,resource,true);
}
else
// don't know what it is
log.warn("Unknown file type");
}
}
/* ------------------------------------------------------------ */
/* Check modification date headers.
*/
private boolean passConditionalHeaders(HttpRequest request,
HttpResponse response,
Resource resource)
throws IOException
{
if (!request.getMethod().equals(HttpRequest.__HEAD))
{
// If we have meta data for the file
// Try a direct match for most common requests. Avoids
// parsing the date.
ResourceCache.ResourceMetaData metaData =
(ResourceCache.ResourceMetaData)resource.getAssociate();
if (metaData!=null)
{
String ifms=request.getField(HttpFields.__IfModifiedSince);
String mdlm=metaData.getLastModified();
if (ifms!=null && mdlm!=null && ifms.equals(mdlm))
{
response.setStatus(HttpResponse.__304_Not_Modified);
request.setHandled(true);
return false;
}
}
long date=0;
// Parse the if[un]modified dates and compare to resource
if ((date=request.getDateField(HttpFields.__IfUnmodifiedSince))>0)
{
if (resource.lastModified()/1000 > date/1000)
{
response.sendError(HttpResponse.__412_Precondition_Failed);
return false;
}
}
if ((date=request.getDateField(HttpFields.__IfModifiedSince))>0)
{
if (resource.lastModified()/1000 <= date/1000)
{
response.setStatus(HttpResponse.__304_Not_Modified);
request.setHandled(true);
return false;
}
}
}
return true;
}
/* ------------------------------------------------------------ */
void handlePut(HttpRequest request,
HttpResponse response,
String pathInContext,
Resource resource)
throws IOException
{
if(log.isDebugEnabled())log.debug("PUT "+pathInContext+" in "+resource);
boolean exists=resource!=null && resource.exists();
if (exists &&
!passConditionalHeaders(request,response,resource))
return;
if (pathInContext.endsWith("/"))
{
if (!exists)
{
if (!resource.getFile().mkdirs())
response.sendError(HttpResponse.__403_Forbidden, "Directories could not be created");
else
{
request.setHandled(true);
response.setStatus(HttpResponse.__201_Created);
response.commit();
}
}
else
{
request.setHandled(true);
response.setStatus(HttpResponse.__200_OK);
response.commit();
}
}
else
{
try
{
int toRead = request.getContentLength();
InputStream in = request.getInputStream();
OutputStream out = resource.getOutputStream();
if (toRead>=0)
IO.copy(in,out,toRead);
else
IO.copy(in,out);
out.close();
request.setHandled(true);
response.setStatus(exists
?HttpResponse.__200_OK
:HttpResponse.__201_Created);
response.commit();
}
catch (Exception ex)
{
log.warn(LogSupport.EXCEPTION,ex);
response.sendError(HttpResponse.__403_Forbidden,
ex.getMessage());
}
}
}
/* ------------------------------------------------------------ */
void handleDelete(HttpRequest request,
HttpResponse response,
String pathInContext,
Resource resource)
throws IOException
{
if(log.isDebugEnabled())log.debug("DELETE "+pathInContext+" from "+resource);
if (!resource.exists() ||
!passConditionalHeaders(request,response,resource))
return;
try
{
// delete the file
if (resource.delete())
response.setStatus(HttpResponse.__204_No_Content);
else
response.sendError(HttpResponse.__403_Forbidden);
// Send response
request.setHandled(true);
}
catch (SecurityException sex)
{
log.warn(LogSupport.EXCEPTION,sex);
response.sendError(HttpResponse.__403_Forbidden, sex.getMessage());
}
}
/* ------------------------------------------------------------ */
void handleMove(HttpRequest request,
HttpResponse response,
String pathInContext,
Resource resource)
throws IOException
{
if (!resource.exists() || !passConditionalHeaders(request,response,resource))
return;
String newPath = URI.canonicalPath(request.getField("New-uri"));
if (newPath==null)
{
response.sendError(HttpResponse.__405_Method_Not_Allowed,
"Bad new uri");
return;
}
String contextPath = getHttpContext().getContextPath();
if (contextPath!=null && !newPath.startsWith(contextPath))
{
response.sendError(HttpResponse.__405_Method_Not_Allowed,
"Not in context");
return;
}
// Find path
try
{
// TODO - Check this
String newInfo=newPath;
if (contextPath!=null)
newInfo=newInfo.substring(contextPath.length());
Resource newFile = getHttpContext().getBaseResource().addPath(newInfo);
if(log.isDebugEnabled())log.debug("Moving "+resource+" to "+newFile);
resource.renameTo(newFile);
response.setStatus(HttpResponse.__204_No_Content);
request.setHandled(true);
}
catch (Exception ex)
{
log.warn(LogSupport.EXCEPTION,ex);
setAllowHeader(response);
response.sendError(HttpResponse.__405_Method_Not_Allowed,
"Error:"+ex);
return;
}
}
/* ------------------------------------------------------------ */
void handleOptions(HttpResponse response, String pathInContext)
throws IOException
{
if ("*".equals(pathInContext))
return;
setAllowHeader(response);
response.commit();
}
/* ------------------------------------------------------------ */
void setAllowHeader(HttpResponse response)
{
response.setField(HttpFields.__Allow, getAllowedString());
}
/* ------------------------------------------------------------ */
public void writeHeaders(HttpResponse response,Resource resource, long count)
throws IOException
{
ResourceCache.ResourceMetaData metaData =
(ResourceCache.ResourceMetaData)resource.getAssociate();
response.setContentType(metaData.getMimeType());
if (count != -1)
{
if (count==resource.length())
response.setField(HttpFields.__ContentLength,metaData.getLength());
else
response.setContentLength((int)count);
}
response.setField(HttpFields.__LastModified,metaData.getLastModified());
if (_acceptRanges && response.getHttpRequest().getDotVersion()>0)
response.setField(HttpFields.__AcceptRanges,"bytes");
}
/* ------------------------------------------------------------ */
public void sendData(HttpRequest request,
HttpResponse response,
String pathInContext,
Resource resource,
boolean writeHeaders)
throws IOException
{
long resLength=resource.length();
// see if there are any range headers
Enumeration reqRanges =
request.getDotVersion()>0
?request.getFieldValues(HttpFields.__Range)
:null;
if (!writeHeaders || reqRanges == null || !reqRanges.hasMoreElements())
{
// look for a gziped content.
Resource data=resource;
if (_minGzipLength>0)
{
String accept=request.getField(HttpFields.__AcceptEncoding);
if (accept!=null && resLength>_minGzipLength &&
!pathInContext.endsWith(".gz"))
{
Resource gz = getHttpContext().getResource(pathInContext+".gz");
if (gz.exists() && accept.indexOf("gzip")>=0)
{
if(log.isDebugEnabled())log.debug("gzip="+gz);
response.setField(HttpFields.__ContentEncoding,"gzip");
data=gz;
resLength=data.length();
}
}
}
writeHeaders(response,resource,resLength);
request.setHandled(true);
OutputStream out = response.getOutputStream();
data.writeTo(out,0,resLength);
return;
}
// Parse the satisfiable ranges
List ranges =InclusiveByteRange.satisfiableRanges(reqRanges,resLength);
if(log.isDebugEnabled())log.debug("ranges: " + reqRanges + " == " + ranges);
// if there are no satisfiable ranges, send 416 response
if (ranges==null || ranges.size()==0)
{
log.debug("no satisfiable ranges");
writeHeaders(response, resource, resLength);
response.setStatus(HttpResponse.__416_Requested_Range_Not_Satisfiable);
response.setReason((String)HttpResponse.__statusMsg
.get(TypeUtil.newInteger(HttpResponse.__416_Requested_Range_Not_Satisfiable)));
response.setField(HttpFields.__ContentRange,
InclusiveByteRange.to416HeaderRangeString(resLength));
OutputStream out = response.getOutputStream();
resource.writeTo(out,0,resLength);
request.setHandled(true);
return;
}
// if there is only a single valid range (must be satisfiable
// since were here now), send that range with a 216 response
if ( ranges.size()== 1)
{
InclusiveByteRange singleSatisfiableRange =
(InclusiveByteRange)ranges.get(0);
if(log.isDebugEnabled())log.debug("single satisfiable range: " + singleSatisfiableRange);
long singleLength = singleSatisfiableRange.getSize(resLength);
writeHeaders(response,resource,singleLength);
response.setStatus(HttpResponse.__206_Partial_Content);
response.setReason((String)HttpResponse.__statusMsg
.get(TypeUtil.newInteger(HttpResponse.__206_Partial_Content)));
response.setField(HttpFields.__ContentRange,
singleSatisfiableRange.toHeaderRangeString(resLength));
OutputStream out = response.getOutputStream();
resource.writeTo(out,
singleSatisfiableRange.getFirst(resLength),
singleLength);
request.setHandled(true);
return;
}
// multiple non-overlapping valid ranges cause a multipart
// 216 response which does not require an overall
// content-length header
//
ResourceCache.ResourceMetaData metaData =
(ResourceCache.ResourceMetaData)resource.getAssociate();
String encoding = metaData.getMimeType();
MultiPartResponse multi = new MultiPartResponse(response);
response.setStatus(HttpResponse.__206_Partial_Content);
response.setReason((String)HttpResponse.__statusMsg
.get(TypeUtil.newInteger(HttpResponse.__206_Partial_Content)));
// If the request has a "Request-Range" header then we need to
// send an old style multipart/x-byteranges Content-Type. This
// keeps Netscape and acrobat happy. This is what Apache does.
String ctp;
if (request.containsField(HttpFields.__RequestRange))
ctp = "multipart/x-byteranges; boundary=";
else
ctp = "multipart/byteranges; boundary=";
response.setContentType(ctp+multi.getBoundary());
InputStream in=(resource instanceof CachedResource)
?null:resource.getInputStream();
OutputStream out = response.getOutputStream();
long pos=0;
for (int i=0;i<ranges.size();i++)
{
InclusiveByteRange ibr = (InclusiveByteRange) ranges.get(i);
String header=HttpFields.__ContentRange+": "+
ibr.toHeaderRangeString(resLength);
if(log.isDebugEnabled())log.debug("multi range: "+encoding+" "+header);
multi.startPart(encoding,new String[]{header});
long start=ibr.getFirst(resLength);
long size=ibr.getSize(resLength);
if (in!=null)
{
// Handle non cached resource
if (start<pos)
{
in.close();
in=resource.getInputStream();
pos=0;
}
if (pos<start)
{
in.skip(start-pos);
pos=start;
}
IO.copy(in,out,size);
pos+=size;
}
else
// Handle cached resource
resource.writeTo(out,start,size);
}
if (in!=null)
in.close();
multi.close();
request.setHandled(true);
return;
}
/* ------------------------------------------------------------------- */
void sendDirectory(HttpRequest request,
HttpResponse response,
Resource resource,
boolean parent)
throws IOException
{
if (!_dirAllowed)
{
response.sendError(HttpResponse.__403_Forbidden);
return;
}
request.setHandled(true);
if(log.isDebugEnabled())log.debug("sendDirectory: "+resource);
byte[] data=null;
if (resource instanceof CachedResource)
data=((CachedResource)resource).getCachedData();
if (data==null)
{
String base = URI.addPaths(request.getPath(),"/");
String dir = resource.getListHTML(URI.encodePath(base),parent);
if (dir==null)
{
response.sendError(HttpResponse.__403_Forbidden,
"No directory");
return;
}
data=dir.getBytes("UTF8");
if (resource instanceof CachedResource)
((CachedResource)resource).setCachedData(data);
}
response.setContentType("text/html; charset=UTF8");
response.setContentLength(data.length);
if (request.getMethod().equals(HttpRequest.__HEAD))
{
response.commit();
return;
}
response.getOutputStream().write(data,0,data.length);
response.commit();
}
}

View File

@ -0,0 +1,352 @@
// ========================================================================
// $Id: FileResource.java,v 1.31 2006/01/04 13:55:31 gregwilkins Exp $
// Copyright 1996-2004 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.mortbay.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.security.Permission;
import org.apache.commons.logging.Log;
import org.mortbay.log.LogFactory;
/* ------------------------------------------------------------ */
/** File Resource.
*
* Handle resources of implied or explicit file type.
* This class can check for aliasing in the filesystem (eg case
* insensitivity). By default this is turned on if the platform does
* not have the "/" path separator, or it can be controlled with the
* "org.mortbay.util.FileResource.checkAliases" system parameter.
*
* If alias checking is turned on, then aliased resources are
* treated as if they do not exist, nor can they be created.
*
* @version $Revision: 1.31 $
* @author Greg Wilkins (gregw)
*/
public class FileResource extends URLResource
{
private static Log log = LogFactory.getLog(Credential.class);
private static boolean __checkAliases;
static
{
__checkAliases=
"true".equalsIgnoreCase
(System.getProperty("org.mortbay.util.FileResource.checkAliases","true"));
if (__checkAliases)
log.info("Checking Resource aliases");
}
/* ------------------------------------------------------------ */
private File _file;
private transient URL _alias=null;
private transient boolean _aliasChecked=false;
/* ------------------------------------------------------------------------------- */
/** setCheckAliases.
* @param checkAliases True of resource aliases are to be checked for (eg case insensitivity or 8.3 short names) and treated as not found.
*/
public static void setCheckAliases(boolean checkAliases)
{
__checkAliases=checkAliases;
}
/* ------------------------------------------------------------------------------- */
/** getCheckAliases.
* @return True of resource aliases are to be checked for (eg case insensitivity or 8.3 short names) and treated as not found.
*/
public static boolean getCheckAliases()
{
return __checkAliases;
}
/* -------------------------------------------------------- */
FileResource(URL url)
throws IOException, URISyntaxException
{
super(url,null);
try
{
// Try standard API to convert URL to file.
_file =new File(new URI(url.toString()));
}
catch (Exception e)
{
LogSupport.ignore(log,e);
try
{
// Assume that File.toURL produced unencoded chars. So try
// encoding them.
String urls=
"file:"+org.mortbay.util.URI.encodePath(url.toString().substring(5));
_file =new File(new URI(urls));
}
catch (Exception e2)
{
LogSupport.ignore(log,e2);
// Still can't get the file. Doh! try good old hack!
checkConnection();
Permission perm = _connection.getPermission();
_file = new File(perm==null?url.getFile():perm.getName());
}
}
if (_file.isDirectory() && !_urlString.endsWith("/"))
_urlString=_urlString+"/";
}
/* -------------------------------------------------------- */
FileResource(URL url, URLConnection connection, File file)
{
super(url,connection);
_file=file;
if (_file.isDirectory() && !_urlString.endsWith("/"))
_urlString=_urlString+"/";
}
/* -------------------------------------------------------- */
public Resource addPath(String path)
throws IOException,MalformedURLException
{
FileResource r=null;
if (!isDirectory())
{
r=(FileResource)super.addPath(path);
}
else
{
path = org.mortbay.util.URI.canonicalPath(path);
// treat all paths being added as relative
String rel=path;
if (path.startsWith("/"))
rel = path.substring(1);
File newFile = new File(_file,rel.replace('/', File.separatorChar));
r=new FileResource(newFile.toURI().toURL(),null,newFile);
}
String encoded=org.mortbay.util.URI.encodePath(path);
int expected=r._urlString.length()-encoded.length();
int index = r._urlString.lastIndexOf(encoded, expected);
if (expected!=index && ((expected-1)!=index || path.endsWith("/") || !r.isDirectory()))
{
r._alias=r._url;
r._aliasChecked=true;
}
return r;
}
/* ------------------------------------------------------------ */
public URL getAlias()
{
if (__checkAliases) {
if (!_aliasChecked)
{
try
{
String abs=_file.getAbsolutePath();
String can=_file.getCanonicalPath();
if (abs.length()!=can.length() || !abs.equals(can))
_alias=new File(can).toURI().toURL();
_aliasChecked=true;
if (_alias!=null && log.isDebugEnabled())
{
log.debug("ALIAS abs="+abs);
log.debug("ALIAS can="+can);
}
}
catch(Exception e)
{
log.warn(LogSupport.EXCEPTION,e);
return getURL();
}
}
} else return null;
return _alias;
}
/* -------------------------------------------------------- */
/**
* Returns true if the resource exists.
*/
public boolean exists()
{
return _file.exists();
}
/* -------------------------------------------------------- */
/**
* Returns the last modified time
*/
public long lastModified()
{
return _file.lastModified();
}
/* -------------------------------------------------------- */
/**
* Returns true if the respresenetd resource is a container/directory.
*/
public boolean isDirectory()
{
return _file.isDirectory();
}
/* --------------------------------------------------------- */
/**
* Return the length of the resource
*/
public long length()
{
return _file.length();
}
/* --------------------------------------------------------- */
/**
* Returns the name of the resource
*/
public String getName()
{
return _file.getAbsolutePath();
}
/* ------------------------------------------------------------ */
/**
* Returns an File representing the given resource or NULL if this
* is not possible.
*/
public File getFile()
{
return _file;
}
/* --------------------------------------------------------- */
/**
* Returns an input stream to the resource
*/
public InputStream getInputStream() throws IOException
{
return new FileInputStream(_file);
}
/* --------------------------------------------------------- */
/**
* Returns an output stream to the resource
*/
public OutputStream getOutputStream()
throws java.io.IOException, SecurityException
{
return new FileOutputStream(_file);
}
/* --------------------------------------------------------- */
/**
* Deletes the given resource
*/
public boolean delete()
throws SecurityException
{
return _file.delete();
}
/* --------------------------------------------------------- */
/**
* Rename the given resource
*/
public boolean renameTo( Resource dest)
throws SecurityException
{
if( dest instanceof FileResource)
return _file.renameTo( ((FileResource)dest)._file);
else
return false;
}
/* --------------------------------------------------------- */
/**
* Returns a list of resources contained in the given resource
*/
public String[] list()
{
String[] list =_file.list();
if (list==null)
return null;
for (int i=list.length;i-->0;)
{
if (new File(_file,list[i]).isDirectory() &&
!list[i].endsWith("/"))
list[i]+="/";
}
return list;
}
/* ------------------------------------------------------------ */
/** Encode according to this resource type.
* File URIs are encoded.
* @param uri URI to encode.
* @return The uri unchanged.
*/
public String encode(String uri)
{
return uri;
}
/* ------------------------------------------------------------ */
/**
* @param o
* @return
*/
public boolean equals( Object o)
{
if (this == o)
return true;
if (null == o || ! (o instanceof FileResource))
return false;
FileResource f=(FileResource)o;
return f._file == _file || (null != _file && _file.equals(f._file));
}
/* ------------------------------------------------------------ */
/**
* @return the hashcode.
*/
public int hashCode()
{
return null == _file ? super.hashCode() : _file.hashCode();
}
}

View File

@ -392,7 +392,7 @@ public abstract class Resource implements Serializable
buf.append(path);
buf.append("\">");
buf.append(StringUtil.replace(StringUtil.replace(ls[i],"<","&lt;"),">","&gt;"));
buf.append("&nbsp;");
buf.append("</A>&nbsp;");
buf.append("</TD><TD ALIGN=right>");
buf.append(item.length());
buf.append(" bytes&nbsp;</TD><TD>");

File diff suppressed because it is too large Load Diff

View File

@ -12,12 +12,12 @@ public class ConfigNavHelper extends HelperBase {
private static final String pages[] =
{"", "ui", "service", "update", "tunnels",
"clients", "peer", "keyring", "logging", "stats",
"advanced" };
"reseed", "advanced" };
private static final String titles[] =
{_x("Network"), _x("UI"), _x("Service"), _x("Update"), _x("Tunnels"),
_x("Clients"), _x("Peers"), _x("Keyring"), _x("Logging"), _x("Stats"),
_x("Advanced") };
_x("Reseeding"), _x("Advanced") };
public void renderNavBar(String requestURI) throws IOException {
StringBuilder buf = new StringBuilder(1024);

View File

@ -0,0 +1,68 @@
package net.i2p.router.web;
import java.util.HashMap;
import java.util.Map;
import net.i2p.router.networkdb.reseed.Reseeder;
/**
* @since 0.8.3
*/
public class ConfigReseedHandler extends FormHandler {
private Map _settings;
@Override
protected void processForm() {
if (_action.equals(_("Save Configuration and Reseed Now"))) {
saveChanges();
boolean reseedInProgress = Boolean.valueOf(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress")).booleanValue();
if (reseedInProgress) {
addFormError(_("Reseeding is already in progress"));
} else {
// skip the nonce checking in ReseedHandler
addFormNotice(_("Starting reseed process"));
(new ReseedHandler(_context)).requestReseed();
}
return;
}
if (_action.equals(_("Save Configuration"))) {
saveChanges();
return;
}
addFormError(_("Unsupported") + ' ' + _action + '.');
}
public void setSettings(Map settings) { _settings = new HashMap(settings); }
/** curses Jetty for returning arrays */
private String getJettyString(String key) {
String[] arr = (String[]) _settings.get(key);
if (arr == null)
return null;
return arr[0].trim();
}
private void saveChanges() {
String port = getJettyString("port");
if (port != null)
_context.router().setConfigSetting(Reseeder.PROP_PROXY_PORT, port);
String host = getJettyString("host");
if (host != null)
_context.router().setConfigSetting(Reseeder.PROP_PROXY_HOST, host);
String url = getJettyString("reseedURL");
if (url != null)
_context.router().setConfigSetting(Reseeder.PROP_RESEED_URL, url.trim().replace("\r\n", ",").replace("\n", ","));
String mode = getJettyString("mode");
boolean req = "1".equals(mode);
boolean disabled = "2".equals(mode);
_context.router().setConfigSetting(Reseeder.PROP_SSL_REQUIRED,
Boolean.toString(req));
_context.router().setConfigSetting(Reseeder.PROP_SSL_DISABLE,
Boolean.toString(disabled));
boolean proxy = getJettyString("enable") != null;
_context.router().setConfigSetting(Reseeder.PROP_PROXY_ENABLE, Boolean.toString(proxy));
_context.router().saveConfig();
addFormNotice(_("Configuration saved successfully."));
}
}

View File

@ -0,0 +1,58 @@
package net.i2p.router.web;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import net.i2p.router.networkdb.reseed.Reseeder;
/**
* @since 0.8.3
*/
public class ConfigReseedHelper extends HelperBase {
public String getPort() {
return _context.getProperty(Reseeder.PROP_PROXY_PORT, "");
}
public String getHost() {
return _context.getProperty(Reseeder.PROP_PROXY_HOST, "");
}
public String modeChecked(int mode) {
boolean required = _context.getBooleanProperty(Reseeder.PROP_SSL_REQUIRED);
boolean disabled = _context.getBooleanProperty(Reseeder.PROP_SSL_DISABLE);
if ((mode == 0 && (!disabled) && (!required)) ||
(mode == 1 && (!disabled) && required) ||
(mode == 2 && disabled))
return "checked=\"true\"";
return "";
}
public String getEnable() {
boolean enabled = _context.getBooleanProperty(Reseeder.PROP_PROXY_ENABLE);
if (enabled)
return "checked=\"true\"";
return "";
}
public String getReseedURL() {
String urls = _context.getProperty(Reseeder.PROP_RESEED_URL, Reseeder.DEFAULT_SEED_URL + ',' + Reseeder.DEFAULT_SSL_SEED_URL);
StringTokenizer tok = new StringTokenizer(urls, " ,\r\n");
List<String> URLList = new ArrayList(16);
while (tok.hasMoreTokens()) {
String s = tok.nextToken().trim();
if (s.length() > 0)
URLList.add(s);
}
Collections.sort(URLList);
StringBuilder buf = new StringBuilder();
for (String s : URLList) {
if (buf.length() > 0)
buf.append('\n');
buf.append(s);
}
return buf.toString();
}
}

View File

@ -267,7 +267,7 @@ public class SummaryBarRenderer {
.append(":</b></td><td align=\"right\">");
int active = _helper.getActivePeers();
buf.append(active)
.append("&thinsp;/&thinsp;")
.append(SummaryHelper.THINSP)
.append(Math.max(active, _helper.getActiveProfiles()))
.append("</td></tr>\n" +
@ -351,7 +351,7 @@ public class SummaryBarRenderer {
"<table>\n" +
"<tr><td align=\"left\"><b>")
.append(_("1 sec")) // formatDuration2() would say 1000 ms
.append(DataHelper.formatDuration2(3 * 1000)) // lie and say 3 sec since 1 sec would appear as 1000 ms
.append(":</b></td><td align=\"right\">")
.append(_helper.getSecondKBps())
.append("Bps</td></tr>\n");
@ -376,7 +376,7 @@ public class SummaryBarRenderer {
.append(_("Used"))
.append(":</b></td><td align=\"right\">")
.append(_helper.getInboundTransferred())
.append("&thinsp;/&thinsp;")
.append(SummaryHelper.THINSP)
.append(_helper.getOutboundTransferred())
.append("</td></tr></table>\n" +

View File

@ -29,6 +29,11 @@ import net.i2p.stat.RateStat;
* the summary sections on the router console.
*/
public class SummaryHelper extends HelperBase {
// Opera 10.63 doesn't have the char, TODO check UA
//static final String THINSP = "&thinsp;/&thinsp;";
static final String THINSP = " / ";
/**
* Retrieve the shortened 4 character ident for the router located within
* the current JVM at the given context.
@ -321,7 +326,7 @@ public class SummaryHelper extends HelperBase {
fmt = new DecimalFormat("#0.0");
else
fmt = new DecimalFormat("#0.00");
return fmt.format(in) + "&thinsp;/&thinsp;" + fmt.format(out) + "&nbsp;" +
return fmt.format(in) + THINSP + fmt.format(out) + "&nbsp;" +
(mega ? 'M' : 'K');
}

View File

@ -77,7 +77,7 @@ button span.hide{
</select><br>
<b><%=intl._("Authorization")%></b><br>
<input type="checkbox" class="optbox" name="auth" value="true" <jsp:getProperty name="clientshelper" property="auth" /> >
<%=intl._("Requre username and password")%><br>
<%=intl._("Require username and password")%><br>
<%=intl._("Username")%>:
<input name="user" type="text" value="<jsp:getProperty name="clientshelper" property="user" />" ><br>
<%=intl._("Password")%>:

View File

@ -0,0 +1,59 @@
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("config reseeding")%>
</head><body>
<%@include file="summary.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigReseedHelper" id="reseedHelper" scope="request" />
<jsp:setProperty name="reseedHelper" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<h1><%=intl._("I2P Reseeding Configuration")%></h1>
<div class="main" id="main">
<%@include file="confignav.jsi" %>
<jsp:useBean class="net.i2p.router.web.ConfigReseedHandler" id="formhandler" scope="request" />
<% formhandler.storeMethod(request.getMethod()); %>
<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute("i2p.contextId")%>" />
<jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter("action")%>" />
<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter("nonce")%>" />
<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" />
<jsp:getProperty name="formhandler" property="allMessages" />
<div class="configure"><form action="" method="POST">
<% String prev = System.getProperty("net.i2p.router.web.ConfigReseedHandler.nonce");
if (prev != null) System.setProperty("net.i2p.router.web.ConfigReseedHandler.noncePrev", prev);
System.setProperty("net.i2p.router.web.ConfigReseedHandler.nonce", new java.util.Random().nextLong()+""); %>
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigReseedHandler.nonce")%>" >
<h3><%=intl._("Reseeding Configuration")%></h3>
<p><%=intl._("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%>
<%=intl._("If reseeding has failed, you should first check your network connection.")%>
<p><b><%=intl._("The default settings will work for most people.")%></b>
<%=intl._("Change these only if HTTP is blocked by a restrictive firewall, reseed has failed, and you have access to an HTTP proxy.")%>
<%=intl._("See {0} for instructions on reseeding manually.", "<a href=\"http://www.i2p2.de/faq.html#manual_reseed\">" + intl._("the FAQ") + "</a>")%>
</p>
<div class="wideload">
<table border="0" cellspacing="5">
<tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URL Selection")%></b></td>
<td><input type="radio" class="optbox" name="mode" value="0" <%=reseedHelper.modeChecked(0) %> >
<%=intl._("Try SSL first then non-SSL")%>
<input type="radio" class="optbox" name="mode" value="1" <%=reseedHelper.modeChecked(1) %> >
<%=intl._("Use SSL only")%>
<input type="radio" class="optbox" name="mode" value="2" <%=reseedHelper.modeChecked(2) %> >
<%=intl._("Use non-SSL only")%></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URLs")%></b></td>
<td><textarea name="reseedURL" wrap="off"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("Enable HTTP proxy (not used for SSL)")%></b></td>
<td><input type="checkbox" class="optbox" name="enable" value="true" <jsp:getProperty name="reseedHelper" property="enable" /> ></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Host")%>:</b></td>
<td><input name="host" type="text" value="<jsp:getProperty name="reseedHelper" property="host" />" ></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Port")%>:</b></td>
<td><input name="port" type="text" value="<jsp:getProperty name="reseedHelper" property="port" />" ></td></tr>
</table></div>
<hr><div class="formaction">
<input type="submit" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" name="action" value="<%=intl._("Save Configuration and Reseed Now")%>" />
<input type="submit" name="action" value="<%=intl._("Save Configuration")%>" />
</div></form></div></div></body></html>

View File

@ -0,0 +1,63 @@
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
// Let's make this easy...
final Integer ERROR_CODE = (Integer) request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_STATUS_CODE);
final String ERROR_URI = (String) request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_REQUEST_URI);
final String ERROR_MESSAGE = (String) request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_MESSAGE);
final Class ERROR_CLASS = (Class)request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_EXCEPTION_TYPE);
final Throwable ERROR_THROWABLE = (Throwable)request.getAttribute(org.mortbay.jetty.servlet.ServletHandler.__J_S_ERROR_EXCEPTION);
if (ERROR_CODE != null && ERROR_MESSAGE != null) {
// this is deprecated but we don't want sendError()
response.setStatus(ERROR_CODE.intValue(), ERROR_MESSAGE);
}
%>
<html><head>
<%@include file="css.jsi" %>
<%=intl.title("Internal Error")%>
</head><body>
<div class="routersummaryouter">
<div class="routersummary">
<a href="/" title="<%=intl._("Router Console")%>"><img src="/themes/console/images/i2plogo.png" alt="<%=intl._("I2P Router Console")%>" border="0"></a><hr>
<a href="/config"><%=intl._("Configuration")%></a> <a href="/help"><%=intl._("Help")%></a>
</div></div>
<h1><%=ERROR_CODE%> <%=ERROR_MESSAGE%></h1>
<div class="sorry" id="warning">
<%=intl._("Sorry! There has been an internal error.")%>
<hr>
<p>
<% /* note to translators - both parameters are URLs */
%><%=intl._("Please report bugs on {0} or {1}.",
"<a href=\"http://trac.i2p2.i2p/newticket\">trac.i2p2.i2p</a>",
"<a href=\"http://trac.i2p2.de/newticket\">trac.i2p2.de</a>")%>
<%=intl._("You may use the username \"guest\" and password \"guest\" if you do not wish to register.")%>
<p><%=intl._("Please include this information in bug reports")%>:
</p></div><div class="sorry" id="warning2">
<h3><%=intl._("Error Details")%></h3>
<p>
<%=intl._("Error {0}", ERROR_CODE)%>: <%=ERROR_URI%> <%=ERROR_MESSAGE%>
</p><p>
<%
if (ERROR_THROWABLE != null) {
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(2048);
java.io.PrintStream ps = new java.io.PrintStream(baos);
ERROR_THROWABLE.printStackTrace(ps);
ps.close();
String trace = baos.toString();
trace = trace.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;");
trace = trace.replace("\n", "<br>&nbsp;&nbsp;&nbsp;&nbsp;\n");
out.print(trace);
}
%>
</p>
<h3><%=intl._("I2P Version and Running Environment")%></h3>
<p>
<b>I2P version:</b> <%=net.i2p.router.RouterVersion.FULL_VERSION%><br>
<b>Java version:</b> <%=System.getProperty("java.vendor")%> <%=System.getProperty("java.version")%> (<%=System.getProperty("java.runtime.name")%> <%=System.getProperty("java.runtime.version")%>)<br>
<b>Platform:</b> <%=System.getProperty("os.name")%> <%=System.getProperty("os.arch")%> <%=System.getProperty("os.version")%><br>
<b>Processor:</b> <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)<br>
<b>Jbigi:</b> <%=net.i2p.util.NativeBigInteger.loadStatus()%><br>
<b>Encoding:</b> <%=System.getProperty("file.encoding")%></p>
<p><%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%></p>
</div></body></html>

View File

@ -172,5 +172,5 @@
<jsp:setProperty name="contenthelper" property="startAtBeginning" value="true" />
<jsp:getProperty name="contenthelper" property="textContent" />
<p>Более подробный список изменений можно найти в файле history.txt в каталоге Вашего I2P.
<p>Более подробный список изменений можно найти в файле history.txt, который находится в директории установки I2P.
</p><hr></div></body></html>

View File

@ -9,7 +9,7 @@
<%@include file="summary.jsi" %>
<h1><%=intl._("I2P Router Logs")%></h1>
<div class="main" id="main">
<div class="joblog"><h3><%=intl._("I2P Version & Running Environment")%></h3><a name="version"> </a>
<div class="joblog"><h3><%=intl._("I2P Version and Running Environment")%></h3><a name="version"> </a>
<p>
<% /* note to translators - both parameters are URLs */
%><%=intl._("Please report bugs on {0} or {1}.",

View File

@ -35,4 +35,8 @@
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
</web-app>

View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P routerconsole\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-12 23:29+0000\n"
"PO-Revision-Date: 2010-12-13 01:17+0100\n"
"PO-Revision-Date: 2010-12-19 04:36+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: echelon <echelon@mail.i2p>, Sperreingang <sperrbezirk@mail.i2p>\n"
"MIME-Version: 1.0\n"
@ -1759,7 +1759,7 @@ msgstr "zum Schlüsselbund hinzugefügt"
#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:36
msgid "Invalid destination or key"
msgstr "Ungültiges Ziel oder Schlüssel"
msgstr "ungültiges Ziel oder Schlüssel"
#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41
msgid "removed from keyring"
@ -1771,7 +1771,7 @@ msgstr "nicht im Schlüsselbund gefunden"
#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:45
msgid "Invalid destination"
msgstr "Ungültiges Ziel"
msgstr "ungültiges Ziel"
#: ../java/src/net/i2p/router/web/ConfigLoggingHandler.java:82
msgid "Log overrides updated"
@ -2000,7 +2000,7 @@ msgstr "gesperrt bis zum Neustart"
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:38
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:59
msgid "Invalid peer"
msgstr "Ungültiger Teilnehmer"
msgstr "ungültiger Teilnehmer"
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:28
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:317
@ -2022,11 +2022,11 @@ msgstr "Teilnehmer-Boni anpassen"
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:47
msgid "Bad speed value"
msgstr "Ungültige Geschwindigkeitsangabe"
msgstr "ungültige Geschwindigkeitsangabe"
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:52
msgid "Bad capacity value"
msgstr "Ungültiger Wert zur Kapazität"
msgstr "ungültiger Wert für die Kapazität"
#. Normal browsers send value, IE sends button label
#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:32
@ -2510,7 +2510,7 @@ msgstr "Datei nicht gefunden"
#: ../java/src/net/i2p/router/web/LogsHelper.java:52
msgid "No log messages"
msgstr "Keine Ereignisse"
msgstr "keine Ereignisse"
#: ../java/src/net/i2p/router/web/NetDbRenderer.java:80
msgid "Network Database RouterInfo Lookup"
@ -2544,11 +2544,11 @@ msgstr "LeaseSet"
#: ../java/src/net/i2p/router/web/NetDbRenderer.java:133
msgid "Local"
msgstr "Lokal"
msgstr "lokal"
#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135
msgid "Unpublished"
msgstr "Unveröffentlicht"
msgstr "unveröffentlicht"
#: ../java/src/net/i2p/router/web/NetDbRenderer.java:136
#: ../java/src/net/i2p/router/web/NetDbRenderer.java:143
@ -2685,12 +2685,12 @@ msgstr "NTCP und SSU mit Hilfsrouter"
#: ../java/src/net/i2p/router/web/NewsFetcher.java:93
#, java-format
msgid "News last updated {0} ago."
msgstr "Nachrichten wurden vor {0} aktualisiert"
msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0}"
#: ../java/src/net/i2p/router/web/NewsFetcher.java:99
#, java-format
msgid "News last checked {0} ago."
msgstr "Vor {0} wurde auf neue Nachrichten geprüft"
msgstr "Zeit seit letzter Prüfung auf neue Nachrichten: {0}"
#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:77
#, java-format
@ -3178,7 +3178,7 @@ msgstr "innerhalb dieser Periode, welche vor {0} endete."
#: ../java/src/net/i2p/router/web/StatsGenerator.java:204
msgid "No events"
msgstr "Keine Ereignisse"
msgstr "keine Ereignisse"
#: ../java/src/net/i2p/router/web/StatsGenerator.java:210
msgid "Average event count"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P susidns\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-11-08 18:21+0000\n"
"PO-Revision-Date: 2010-11-09 01:52+0100\n"
"PO-Revision-Date: 2010-12-19 04:36+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P susidns\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-07-05 22:40+0000\n"
"POT-Creation-Date: 2010-12-17 15:05+0000\n"
"PO-Revision-Date: 2010-06-15 11:22+0100\n"
"Last-Translator: duck <duck@mail.i2p>\n"
"Language-Team: duck <duck@mail.i2p>, monkeybrains <monkeybrains@mail.i2p>\n"
@ -17,63 +17,63 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Dutch\n"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:199
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:200
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:193
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:197
msgid "Search"
msgstr "Zoek"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:203
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:204
msgid "Search within filtered list"
msgstr "Zoek binnen gefilterde lijst"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:205
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:206
msgid "Filtered list"
msgstr "Gefilterde lijst"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:209
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:210
msgid "no matches"
msgstr "geen resultaten"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:212
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:213
msgid "Addressbook"
msgstr "Adresboek"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:214
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:215
msgid "contains no entries"
msgstr "bevat geen items"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:216
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:217
msgid "contains 1 entry"
msgstr "bevat 1 item"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:218
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:219
#, java-format
msgid "contains {0} entries"
msgstr "bevat {0} items"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:228
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:229
#, java-format
msgid "Showing {0} of {1}"
msgstr "Toon {0} van {1}"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:259
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:260
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:368
msgid "Add"
msgstr "Toevoegen"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:259
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:264
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:260
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:265
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:366
msgid "Replace"
msgstr "Vervang"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:263
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:264
#, java-format
msgid "Host name {0} is already in addressbook, unchanged."
msgstr "Host naam {0} is al in het adresboek, ongewijzigd."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:265
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:266
#, java-format
msgid ""
"Host name {0} is already in addressbook with a different destination. Click "
@ -82,50 +82,50 @@ msgstr ""
"Host naam {0} is al in het adresboek met een andere destination. Klik op "
"\"Vervang\" om te overschrijven."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:277
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:278
#, java-format
msgid "Destination added for {0}."
msgstr "Destination toegevoegd voor {0}."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:279
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:280
#, java-format
msgid "Destination changed for {0}."
msgstr "Destination gewijzigd voor {0}."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:284
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:285
msgid "Invalid Base 64 destination."
msgstr "Ongeldige Base 64 destination."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:288
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:289
msgid "Please enter a host name and destination"
msgstr "Voer een host naam en destination in"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:292
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:293
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:314
msgid "Delete Selected"
msgstr "Verwijderen Selectie"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:302
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:303
#, java-format
msgid "Destination {0} deleted."
msgstr "Destination {0} verwijderd."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:304
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:305
#, java-format
msgid "{0} destinations deleted."
msgstr "{0} destinations verwijderd."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:310
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:311
msgid "Addressbook saved."
msgstr "Adresboek opgeslagen."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:313
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:314
msgid "ERROR: Could not write addressbook file."
msgstr "ERROR: Kan het adresboek bestand niet wegschrijven."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:318
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:319
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:148
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:150
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:151
msgid ""
"Invalid form submission, probably because you used the \"back\" or \"reload"
"\" button on your browser. Please resubmit."
@ -134,7 +134,7 @@ msgstr ""
"\"vernieuw\" knop in je browser hebt gebruikt. Probeer opnieuw te verzenden."
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:139
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:129
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:130
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:130
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:130
msgid "Save"
@ -145,7 +145,7 @@ msgid "Configuration saved."
msgstr "Configuratie opgeslagen."
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:144
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:145
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:128
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:128
msgid "Reload"
@ -160,18 +160,18 @@ msgstr "Configuratie herladen."
#. Fetching from the addressbook servlet
#. with the correct parameters will kick off a
#. config reload and fetch.
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:138
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:139
msgid ""
"Subscriptions saved, updating addressbook from subscription sources now."
msgstr ""
"Subscriptions opgeslagen, adresboek wordt nu vernieuwd van de subscription "
"bronnen."
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:142
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:143
msgid "Subscriptions saved."
msgstr "Subscriptions opgeslagen."
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:146
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:147
msgid "Subscriptions reloaded."
msgstr "Subscriptions herladen."

View File

@ -527,7 +527,7 @@
<!-- readme and proxy error page files, initialNews.xml files, GeoIP files, and flag icons -->
<target name="prepConsoleDocs" depends="prepConsoleDocUpdates, prepgeoupdate" >
<copy todir="pkg-temp/docs/" >
<copy todir="pkg-temp/docs/initialNews/">
<fileset dir="installer/resources/initialNews/" />
</copy>
</target>

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.8.1";
public final static String VERSION = "0.8.2";
public static void main(String args[]) {
System.out.println("I2P Core version: " + VERSION);

View File

@ -38,12 +38,13 @@ import net.i2p.data.Hash;
import net.i2p.data.Signature;
import net.i2p.data.SigningPrivateKey;
import net.i2p.data.SigningPublicKey;
import net.i2p.data.SimpleDataStructure;
import net.i2p.util.Log;
import net.i2p.util.NativeBigInteger;
/**
* Params and rv's changed from Hash to SHA1Hash for version 0.8.1
* There shouldn't be any external users of those variants.
* Hash variants of sign() and verifySignature() restored in 0.8.3, required by Syndie.
*/
public class DSAEngine {
private Log _log;
@ -68,6 +69,22 @@ public class DSAEngine {
/** @param hash SHA-1 hash, NOT a SHA-256 hash */
public boolean verifySignature(Signature signature, SHA1Hash hash, SigningPublicKey verifyingKey) {
return verifySig(signature, hash, verifyingKey);
}
/**
* Used by Syndie.
* @since 0.8.3 (restored, was removed in 0.8.1 and 0.8.2)
*/
public boolean verifySignature(Signature signature, Hash hash, SigningPublicKey verifyingKey) {
return verifySig(signature, hash, verifyingKey);
}
/**
* @param hash either a Hash or a SHA1Hash
* @since 0.8.3
*/
private boolean verifySig(Signature signature, SimpleDataStructure hash, SigningPublicKey verifyingKey) {
long start = _context.clock().now();
try {
@ -129,6 +146,22 @@ public class DSAEngine {
/** @param hash SHA-1 hash, NOT a SHA-256 hash */
public Signature sign(SHA1Hash hash, SigningPrivateKey signingKey) {
return signIt(hash, signingKey);
}
/**
* Used by Syndie.
* @since 0.8.3 (restored, was removed in 0.8.1 and 0.8.2)
*/
public Signature sign(Hash hash, SigningPrivateKey signingKey) {
return signIt(hash, signingKey);
}
/**
* @param hash either a Hash or a SHA1Hash
* @since 0.8.3
*/
private Signature signIt(SimpleDataStructure hash, SigningPrivateKey signingKey) {
if ((signingKey == null) || (hash == null)) return null;
long start = _context.clock().now();

View File

@ -34,7 +34,7 @@ public abstract class SimpleDataStructure extends DataStructureImpl {
/** this is just to avoid lots of calls to length() */
protected final int _length;
/** A new instance with the data set to null. Call readBytes(), setData(), or from ByteArray() after this to set the data */
/** A new instance with the data set to null. Call readBytes(), setData(), or fromByteArray() after this to set the data */
public SimpleDataStructure() {
_length = length();
}

View File

@ -1,3 +1,84 @@
2010-12-29 zzz
* Console: Add 500 error page
* DSAEngine: Restore variants of methods using a Hash argument,
required by Syndie, removed in 0.8.1
* Reseed:
- Add new configreseed page
- Add StartCom CA cert required for www.i2pbote.net
2010-12-27 zzz
* Crypto: Cleanups and fixups
* Console:
- Add SSL support - To enable, change clients.config. Examples:
## Change to SSL only: just add a '-s'
clientApp.0.args=-s 7657 ::1,127.0.0.1 ./webapps/
## Use both non-SSL and SSL: add '-s port interface'
clientApp.0.args=7657 ::1,127.0.0.1 -s 7667 ::1,127.0.0.1 ./webapps/
## ...and change URLLauncher args further down for the browser to open https:// at startup if you like.
- Add a simple history.txt servlet
- Add form for I2CP options on configclients.jsp
* Context:
- Add hook for internal I2CP
- Change temp file random to Base64 http://zzz.i2p/topics/804
* Data structure caching:
- Use a single static null certificate in place of
tens of thousands of them
* graphs.jsp: Form tweaks, fix setting delay to 'Never'
* I2CP:
- Change from the internal pseudo-socket that was
implemented in 0.7.9 to an internal Queue that directly
passes I2CPMessage objects. For in-JVM clients,
this eliminates two writer threads per client and
avoids the serialization/deserialization of I2CP messages.
- New option i2cp.disableInterface to turn off external I2CP port
(7654) and allow internal clients only
- I2CP over SSL, enable with i2cp.SSL=true
- Bypass authorization for internal accesses
- Move BWLimits and DestLookup message support from
I2PSimpleSession to I2PSessionImpl
- Include the Hash in the DestReplyMessage on a failed lookup
so the client may correlate replies
- Add support for parallel lookups and BWLimits requests
- Add support for specifying the timeout for DestLookups
(can only be smaller than the router timeout for now)
- Extend dest lookup router timeout from 10s to 15s
* i2psnark: Backport TrackerClient NPE fix
* i2ptunnel:
- Get Log from the logManager instead of instantiating,
so we may adjust the levels on the fly
- Better logging of server errors
- Return 503 to client before closing i2p socket if server is not there
- Extend header timeouts for HTTP and IRC server tunnels
- Limit server blockingHandle threads
- Run standard server blockingHandles inline
- For clients, use a common thread pool that expires idle threads
rather than keeping 5 accept() threads for each client.
- Use pool for HTTP decompression also.
- Disable router host/port options when in router context
- Add blacklist, connection limit, and jump list options to edit form
* Pack200: Find and use either Oracle or Apache library at runtime;
neither required at compile time.
* Router: Convert 'mark router liveliness' thread to SimpleScheduler
* Stats: Change stat.full default to false
* Threads:
- Reduce thread pool sizes based on memory and/or bandwidth limits
- Tweak some thread names for clarity
* Update:
- Change the UpdateHandler to try all sources in a loop, rather than one,
so the user need not retry manually
- For each source, fetch the first 56 bytes and check the version
before downloading the whole thing, so we need not wait for every
host to have the latest before updating the news.
2010-12-26 sponge
* URI resource fixes from pre-review time from upstream prior merge
* Evolve URI fixs another step.
* Document how the URI path fix works.
* Fix 302 redirects so they URL encode properly.
* bump to -1
* 2010-12-22 0.8.2 released
2010-12-13 dr|z3d
* Console themes: Midnight & Classic renovations.

View File

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

View File

@ -0,0 +1,44 @@
-----BEGIN CERTIFICATE-----
MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
-----END CERTIFICATE-----

View File

@ -0,0 +1,30 @@
-----BEGIN CERTIFICATE-----
MIIFODCCAyACCQDjoZjFpBtqgzANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQGEwJB
VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMRcwFQYDVQQDEw5yMzE0NTMub3ZoLm5ldDAeFw0xMDEyMTMxNjQ3
MDJaFw0xMTEyMTMxNjQ3MDJaMF4xCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21l
LVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxFzAVBgNV
BAMTDnIzMTQ1My5vdmgubmV0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
AgEAxmNPRiG6EjklwIxmoy3ziKrj84dy6HwZ6J/HmKrAf36akRiglzSLbcC5GAN6
cnwnEdEEhUhC9LDBgZ5yvGgkVXIDA6YUn80kboon8ZLfUM3/yQqd/9pMBXgyNymr
ES9a6kU4NQQSj7nvE2a4fVKQqzhTA6pBD4Q+zJ9T35QvsmyfKUmFgpTX/vAyPivF
YGWUhRXFpNdXHTq6RYOn1iw4NMT4COR2en1i/p4AZNxlvu6HUShJ68oexLdcCWrt
BruHCDgKkVcWtJnQ4q7z7kxcAiBiHdDzSmHC9zCEEz9FEc4nhJXXGM+LY0NjoXkk
V+q7tOJBli0llmHwnWN737OFMlXd5AdooJsOq9Nk4oIn8aK3h5/VkCcCkSXaOzO5
wroNZ/DzEYgR+0YddN0ey7iosjE/7dQwIJpO8LDQR/ZYX9VLUnBNcZGdJcQ0sloa
nlBUHBmi+n85LjFBNnphDWnSa4SUnR2eAtJRtGLHRn9ZtKRHh5FLLsFbXhdkB6Fl
/trmcjohUuC+2FtRM4F0L86atCOm1CkCjPg/db4l3SCFYbe/n+txnQwcyvJtKCpi
6bepZV2vpGNVeJKi2kivmMF0toO5SLM78F4pcgdxvU9myNsLrEf1M+n4gq9pZg0d
zuw2lc1l1iYA80zoTjKd9bggfcROjZxu4HxbzTIblHVcCosCAwEAATANBgkqhkiG
9w0BAQUFAAOCAgEAXsDA+XYokPoHrur1M/w69vXz2DciW3eEcoYEw6wDNxJfyo9S
9JQo3ke22G9VRPW0yAZL0dfx0dB1kwdyDq1kOcddrjfNDwZdclUl9PklZG1wR3sf
v0/fNoVIpJiD3dJUWf//Q8CtiRJFL93cCj//pHeryncZzd4my04wBiS7I/7tLDOo
APpn3k7yJelrV7N0/Mx8ReKQGSj8xyKABCFLyCSghkU2ujlbBAfOAsrklHNnS7KT
IWHYzMW3pSPMIGU9Ub/7KszhDWRQwK76Rx6IARDRJAuhpAMhO1bVJB3QH49xR2El
lvspP+3NqYPAGXEi3G3Rny7seFcLKWxPmv3I02Q/iGs1axx5FoW8V0sWpp7l4Ps7
bwcwo1PD5SN/LQGpt87dut9L3reGpW91rL+xUGB2nLCZf5686/zSM9lwKlgm6+Jv
d4WoseuKFUEQUIC5y6kUs1J2KbdYSjn73h9u2bmVlBF7bjRCcQ26Ad2buFjctFSF
ozd8TPLy6EyI9L8D855iJtq3JO76+J8EBFofYTwuHTqMzyX6lu3BomIZWpVVDTsv
goSsVubtYfymy9xfqT50SgrCbz5RnfF0/D30cV4ePgTMKDjEKY3BMP+TiBNacQo3
oz2jAqmudtPOTnIpjmN3hVk+WgpZbWVZNCVpCiskr+lPOxWV1EK9YW7PqiE=
-----END CERTIFICATE-----

View File

@ -1,25 +1,24 @@
<!--
<i2p.news date="$Date: 2010-11-15 00:00:00 $">
<i2p.release version="0.8.1" date="2010/11/15" minVersion="0.6" />
<i2p.news date="$Date: 2010-12-22 00:00:00 $">
<i2p.release version="0.8.2" date="2010/12/22" minVersion="0.6" />
-->
<div lang="en">
<h3>2010-11-15: <b>0.8.1 <a href="http://www.i2p2.i2p/release-0.8.1.html">Released</a></b></h3>
<h3>2010-12-22: <b>0.8.2 <a href="http://www.i2p2.i2p/release-0.8.2.html">Released</a></b></h3>
<p>
The 0.8.1 release contains the usual collection of bug fixes,
and a newly colorful i2psnark theme by dr|zed.
For increased security, files created by the router will now be readable only by the owner (mode 600).
The 0.8.2 release includes extensive bug fixes and theme updates in the router and in i2psnark.
There are also optimizations to reduce memory usage in i2psnark.
The HTTP and SOCKS proxies now support local and remote authorization.
As usual, upgrading is recommended.
</p><p>
We have updated all our <a href="http://www.i2p2.i2p/how">technical specifications</a>
and <a href="http://docs.i2p2.de/javadoc/">Javadocs</a>, check them out.
Please help grow the network!
I2P will be at 27C3 in Berlin the week of the December 27th.
Look for the I2P people there and ask for I2P stickers!
</p><p>
Please help grow the network.
Say hello to the volunteers on the <a href="irc://127.0.0.1:6668/i2p-help">#i2p-help IRC channel</a>.
Give the
developers feedback on <a href="irc://127.0.0.1:6668/i2p">IRC #i2p</a> or <a href="http://forum.i2p">forum.i2p</a>
and <a href="http://www.i2p2.i2p/getinvolved.html">get involved</a>,
<a href="http://www.i2p2.i2p/getinvolved.html">Get involved</a>,
spread the word,
and <a href="http://www.i2p2.i2p/donate.html">donate</a>!
If you find a bug, please enter a report on <a href="http://trac.i2p2.i2p/report/1">trac</a>.
We are still looking for volunteers to work on new and existing translations.
Please volunteer on <a href="irc://127.0.0.1:6668/i2p">IRC #i2p</a>.
</p>

View File

@ -11,17 +11,17 @@ Proxy-Connection: close
</head>
<body>
<div class=logo>
<a href="http://127.0.0.1:7657/index.jsp" title="Router Console"><img src="http://proxy.i2p/themes/console/images/i2plogo.png" alt="I2P Router Console" border="0"></a><hr>
<a href="http://127.0.0.1:7657/config.jsp">Configuratie</a> <a href="http://127.0.0.1:7657/help.jsp">Help</a> <a href="http://127.0.0.1:7657/susidns/">Adresboek</a>
<a href="http://127.0.0.1:7657/index.jsp" title="Routerkonsole"><img src="http://proxy.i2p/themes/console/images/i2plogo.png" alt="I2P Router Console" border="0"></a><hr>
<a href="http://127.0.0.1:7657/config.jsp">Einstellungen</a> <a href="http://127.0.0.1:7657/help.jsp">Hilfe</a> <a href="http://127.0.0.1:7657/susidns/">Adressbuch</a>
</div>
<div class=warning id=warning>
<h3>Warnung: Zielkonflikt</h3>
Dier Adresshelperverweis, dem Sie folgen wollen, verwendet für diesen Hostnamen ein anderes kryptographisches Ziel
Der Adresshelferverweis, dem Sie folgen wollen, verwendet für diesen Hostnamen ein anderes kryptographisches Ziel
als im zugehörigen Eintrag in Ihrem Routeradressbuch angegeben.
Jemand könnte versuchen, fälschlicherweise eine andere Eepseite als die gesuchte auszugeben.
Möglicherweise haben aber die betreiber beider Eepseiten auch nur zufällig denselben Namen ausgewählt.
Jemand könnte versuchen, fälschlicherweise eine andere als die gesuchte Eepseite auszugeben.
Möglicherweise haben aber die betreiber beider Eepseiten nur zufällig denselben Namen ausgewählt.
<p>
Diesen Konflikt können sie lösen, indem Sie entscheiden, welchem Ziel Sie trauen, das gesuchte zu sein,
Diesen Konflikt können Sie lösen, indem Sie entscheiden, welchem Ziel Sie trauen, das gesuchte zu sein,
und dann entweder den Verweis des Adresshelfers verwerfen, den Eintrag in Ihrem Routeradressbuch löschen,
oder beiden Zielen unterschiedliche Namen zuweisen.
<p>

View File

@ -13,11 +13,11 @@ Proxy-Connection: close
<body>
<div class=warning id=warning>
<h3>Autorisierung für den I2P-HTTP-Proxy erforderlich</h3>
Dieser Proxy ist eingestellt, Zugang nur für gültige Kombinationen aus einem Benutzernamen und einem Passwort zuzulasseen.
Bitte geben Sie Ihren Benutzernamen und Passwort an, überprüfen Sie Ihre
Dieser Proxy ist so eingestellt, dass er Zugang nur für gültige Kombinationen aus einem Benutzernamen und einem Passwort zulässt.
Bitte geben Sie Ihren Benutzernamen und Passwort an bzw. überprüfen Sie Ihre
<a href="http://127.0.0.1:7657/advancedconfig.jsp">Routereinstellungen</a>
oder Ihre
<a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel-Einstellungen</a>!
Um das Autrorsierungserfordernis zu aufzuheben, entfernen Sie
Um das Autorsierungserfordernis aufzuheben, entfernen Sie
<code>i2ptunnel.proxy.auth=basic</code> aus der betreffenden Tunneleinstellung, stoppen Sie den HTTP-Proxy-Tunnel dann und starten Sie ihn neu!
</div>

View File

@ -19,5 +19,5 @@ Proxy-Connection: close
Die Eepseite war nicht erreichbar.
Sie ist vielleicht offline, es gibt eine Überlast oder Verstopfung im Netz,
oder Ihr Router ist noch nicht gut ins Netzwerk integriert.
Versuchen Sie ein <a href="javascript: window.location.reload()">Neuladen</a>!
Versuchen Sie, die Seite <a href="javascript: window.location.reload()">erneut zu laden</a>!
<hr><b>Konnte das folgende Ziel nicht finden:</b><BR><BR>

View File

@ -18,7 +18,7 @@ Proxy-Connection: close
<div class=warning id=warning>
<h3>Предупреждение: I2P-сайт недоступен</h3>
Не удалось открыть I2P-сайт. Он либо в офлайне, либо сеть сейчас перегружена, либо ваш I2P-маршрутизатор ещё недостаточно интегрирован с другими пирами.
Не удалось открыть I2P-сайт. Он либо в оффлайне, либо сеть сейчас перегружена, либо ваш I2P-маршрутизатор ещё недостаточно интегрирован с другими пирами.
<BR><BR>
Вы можете попробовать <a href="javascript: window.location.reload()">повторить запрос</a>.

View File

@ -12,12 +12,12 @@ Proxy-Connection: close
<body>
<div class=logo>
<a href="http://127.0.0.1:7657/index.jsp" title="Routerkonsole"><img src="http://proxy.i2p/themes/console/images/i2plogo.png" alt="I2P-Routerkonsole" border="0"></a><hr>
<a href="http://127.0.0.1:7657/config.jsp">Einstellungen</a> <a href="http://127.0.0.1:7657/help.jsp">Help</a> <a href="http://127.0.0.1:7657/susidns/">Adressbuch</a>
<a href="http://127.0.0.1:7657/config.jsp">Einstellungen</a> <a href="http://127.0.0.1:7657/help.jsp">Hilfe</a> <a href="http://127.0.0.1:7657/susidns/">Adressbuch</a>
</div>
<div class=warning id=warning>
<h3>Warnung: ungültiges Eepseiten-Ziel</h3>
Das angegebene Eepseiten-Ziel ist nicht gültig,
oder auf andere Art nicht erreichbar. Vielleicht habe Sie eine falsche BASIS64-Zeichenkette kopiert
oder auf andere Art nicht erreichbar. Vielleicht haben Sie eine falsche BASIS64-Zeichenkette kopiert
oder Sie folgten einem ungültigen Verweis. Möglicherweise ist auch der I2P-Host offline.
Versuchen Sie ein <a href="javascript: window.location.reload()">Neuladen</a>.
Versuchen Sie, die Seite <a href="javascript: window.location.reload()">erneut zu laden</a>!
<hr><b>Konnte das folgende Ziel nicht finden:</b><BR><BR>

View File

@ -5,7 +5,7 @@ Connection: close
Proxy-Connection: close
<html><head>
<title>I2P-Warnung: Eepsite unbekannt</title>
<title>I2P-Warnung: Eepseite unbekannt</title>
<link rel="shortcut icon" href="http://proxy.i2p/themes/console/images/favicon.ico" >
<link href="http://proxy.i2p/themes/console/default/console.css" rel="stylesheet" type="text/css" >
</head>
@ -16,12 +16,12 @@ Proxy-Connection: close
</div>
<div class=warning id=warning>
<h3>Warnung: Eepseite nicht im Adressbuch gefunden</h3>
Die Eepseite konnte in nicht im Adressbuch des Routers gefunden werden.
Die Eepseite konnte nicht im Adressbuch des Routers gefunden werden.
Überprüfen Sie den Link oder finden Sie eine BASIS64-Adresse!
Wenn Sie eine BASIS64-Adresse haben, fügen Sie diese unter folgendem Link zu Ihrer userhosts.txt hinzu:
<a href="http://127.0.0.1:7657/susidns/addressbook.jsp?book=master">SusiDNS</a>,
benutzen Sie einen BASIS64-Adresshelfer oder einen der folgenden Sprungdienste:<br><br>
(Sehen Sie diese Seite öfters? Dann lesen Sie die <a href="http://www.i2p2.i2p/faq.html#subscriptions">FAQ</a>
(Sehen Sie diese Seite öfters? Dann lesen Sie die <a href="http://www.i2p2.i2p/faq.html#subscriptions">FAQ</a>
für Hilfe beim <a href="http://127.0.0.1:7657/susidns/config.jsp">Hinzufügen von Abonnements</a>
zu Ihrem Adressbuch.)<hr>
<b>Konnte das folgende Ziel nicht finden:</b><BR><BR>

View File

@ -17,11 +17,11 @@ Proxy-Connection: close
<div class=warning id=warning>
<h3>Warnung: I2P-Proxy nicht gefunden</h3>
Der WWW-Outproxy wurde nicht gefunden.
Er ist offline, das Netz ist überlastet oder verstopft,
Er ist offline, das Netz überlastet oder verstopft,
oder Ihr Router ist noch nicht gut ins Netzwerk integriert.
Versuchen Sie ein <a href="javascript: parent.window.location.reload()">Neuladen</a>
da dies eine erneute zufällige Auswahl des Outproxys aus der von Ihnen <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">hier</a> vorgegebenen Liste trifft
(falls mehr als einer angegeben ist)!
Wenn das Problem weiterhin bestehen sollte, passen Sie die Liste Ihrer Outproxys
Laden Sie die Seite <a href="javascript: parent.window.location.reload()">neu</a>!
Dies trifft eine erneute zufällige Auswahl des Outproxys aus der von Ihnen <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">hier</a> vorgegebenen Liste
(falls mehr als einer angegeben ist).
Sollte das Problem weiterhin bestehen, passen Sie die Liste Ihrer Outproxys
<a href="http://127.0.0.1:7657/i2ptunnel/edit.jsp?tunnel=0">hier</a> an!
<hr><b>Konnte das folgende Ziel nicht finden:</b><BR><BR>

View File

@ -18,6 +18,6 @@ Proxy-Connection: close
</div>
------------------------------>
<div class=warning id=warning>
<h3>Fehler: Lokaler Zugriff</h3>
Ihr Browser ist fehlkonfiguriert. Benutzen Sie diesen Proxy nicht, um auf lokale Ziele wie die I2P-Routerkonsole, localhost oder LAN-Ziele zuzugreifen!
<h3>Fehler: lokaler Zugriff</h3>
Ihr Browser ist fehlkonfiguriert: Benutzen Sie diesen Proxy nicht, um auf lokale Ziele wie die I2P-Routerkonsole, localhost oder LAN-Ziele zuzugreifen!
</div>

View File

@ -16,5 +16,5 @@ Proxy-Connection: close
</div>
<div class=warning id=warning>
<h3>Warnung: Kein Outproxy eingerichtet</h3>
Sie haben eine Seite außerhalb des I2P-Netzes angefordert, jedoch ist kein HTTP-Outproxy eingerichtet. Bitte richten sie einen Outproxy in I2PTunnel ein!
Sie haben eine Seite außerhalb des I2P-Netzes angefordert, jedoch ist kein HTTP-Outproxy eingerichtet. Bitte richten Sie einen Outproxy in der Sektion I2PTunnel ein!
</div>

View File

@ -5,7 +5,7 @@ Connection: close
Proxy-Connection: close
<html><head>
<title>I2P-Warnung: nicht HTTP-Protokoll</title>
<title>I2P-Warnung: kein HTTP-Protokoll</title>
<link rel="shortcut icon" href="http://proxy.i2p/themes/console/images/favicon.ico" >
<link href="http://proxy.i2p/themes/console/default/console.css" rel="stylesheet" type="text/css" >
</head>
@ -15,7 +15,7 @@ Proxy-Connection: close
<a href="http://127.0.0.1:7657/config.jsp">Einstellungen</a> <a href="http://127.0.0.1:7657/help.jsp">Hilfe</a> <a href="http://127.0.0.1:7657/susidns/">Adressbuch</a>
</div>
<div class=warning id=warning>
<h3>Warnung: nicht HTTP-Protokoll</h3>
<h3>Warnung: kein HTTP-Protokoll</h3>
Die Anfrage verwendet ein falsches Protokoll.
I2Ps HTTP-Proxy unterstützt AUSSCHLIEßLICH Anfragen des HTTP-Protokolls ( http:// ). Andere Protokolle wie https:// und ftp:// sind nicht erlaubt.
</div>

View File

@ -1,69 +1,69 @@
<div lang="en">
<div align="right">
<div class="langbox" align="right">
<a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a>
<a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Français" alt="Français"></a>
<a href="/index.jsp?lang=es"><img src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/index.jsp?lang=pt"><img src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
<a href="/?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a>
<a href="/?lang=zh"><img src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/?lang=fr"><img src="/flags.jsp?c=fr" title="Français" alt="Français"></a>
<a href="/?lang=es"><img src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/?lang=pt"><img src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div>
</div><a name="top"></a>
<div class="welcome"><h2>Welcome to the Invisible Internet</h2></div>
<ul class="links"><li class="tidylist"><b>Starting Up&hellip;</b><br>If you've just started I2P, the number of <i>Active Peers</i> indicated under the <i>Peers</i> section in the sidepanel on the left should start to grow over the next few minutes and you'll also see a <i>Local Destination</i> named <i>Shared Clients</i> listed there, and possibly other clients and servers depending on how I2P is configured (if not, see the troubleshooting section <a href="#trouble">below</a>). These <i>Local Destinations</i> provide connections on different ports (and sometimes protocols) to the I2P network, enabling your bittorrent, e-mail, web proxy and other services to function. Your <a href="/netdb">Network Database</a> indicates all known peers on the network. Additionally, you can monitor existing <a href="/peers">Peer Connections</a>, and view existing <a href="/tunnels">Tunnels</a> and their status. More information is available on the <a href="/help">help page</a>.</li>
<ul class="links"><li class="tidylist"><b>Starting Up&hellip;</b><br>If you've just started I2P, the number of <i>Active Peers</i> indicated under the <i>Peers</i> section in the side panel on the left should start to grow over the next few minutes and you'll also see a <i>Local Destination</i> named <i>Shared Clients</i> listed there, and possibly other clients and servers depending on how I2P is configured (if not, see the troubleshooting section <a href="#trouble">below</a>). These <i>Local Destinations</i> provide connections on different ports (and sometimes protocols) to the I2P network, enabling your bittorrent, e-mail, web proxy and other services to function. Your <a href="/netdb">Network Database</a> indicates all known peers on the network. Additionally, you can monitor existing <a href="/peers">Peer Connections</a>, and view existing <a href="/tunnels">Tunnels</a> and their status. More information is available on the <a href="/help">help page</a>.</li>
<li class="tidylist"><b>Network integration</b><br> The first time you start I2P it may take a few minutes to bootstrap (integrate) you into the network and find additional peers to optimize your integration, so please be patient. Once green stars are indicated next to your <i>Local Destinations</i>, there is a wide variety of things you can do with I2P, and below we introduce you to some of them.</li></ul>
<h3>Services on I2P</h3>
<ul class="links">
<li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>On I2P you can access anonymous websites (aka eepsites) and other services (e.g. ssh over I2P, IRC, Jabber etc.) in addition to being able to host your own services. You can also access the normal web anonymously via I2P's built-in web proxy (aka outproxy).<a href="http://www.i2p2.de/htproxyports.html" target="_blank">Configure your browser</a> to use the <a href="http://proxy.i2p" target="_blank">HTTP proxy</a> at <code>127.0.0.1 port 4444</code>, then browse to an eepsite or a normal, unencrypted <code>http://</code> address. For a pre-configured browser, you may wish to try <a href="http://echelon.i2p/i2pfox/">I2PFox</a>, a custom build of Firefox security hardened and tailored especially for I2P. If you wish to disable or change outproxy access to the normal internet, remove or modify the outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In the Sites of Interest section <a href="#eepsites">below</a>, we list a few of the sites hosted on I2P.</li>
<li class="tidylist"><b>Invisible Internet &amp; Public Web Browsing</b><br>On I2P you can access anonymous websites (eepsites) and other services (e.g. ssh over I2P, IRC, Jabber etc.) in addition to being able to host your own services. You can also access the normal web anonymously via I2P's built-in web proxy (outproxy). <a href="http://www.i2p2.de/htproxyports.html" target="_blank">Configure your browser</a> to use the HTTP proxy at <code>127.0.0.1 port 4444</code>, then browse to an eepsite or a normal, unencrypted <code>http://</code> address. For a pre-configured browser, you may wish to try <a href="http://echelon.i2p/i2pfox/">I2PFox</a>, a custom build of Firefox security hardened and tailored especially for I2P. If you wish to disable or change outproxy access to the normal internet, remove or modify the outproxy entry for <code>false.i2p</code> under the <i>Outproxies</i> option in the <a href="/i2ptunnel/edit?tunnel=0" target="_blank">I2P HTTP Proxy Tunnel Editor</a>. In the "Sites of Interest" section <a href="#eepsites">below</a>, we list a few of the sites hosted on I2P.</li>
<li class="tidylist"><b>Anonymous E-Mail</b><br>Postman's I2P-based mail system can be accessed either via <a href="../../../../../../susimail/">I2P's built-in webmail</a>
(aka susimail) or using any mail client that supports smtp and pop3.
<li class="tidylist"><b>Anonymous E-Mail</b><br>Postman's I2P-based mail system can be accessed either via <a href="/susimail/susimail">I2P's built-in mail client</a>
(susimail) or using any mail client that supports smtp and pop3.
Accounts can send and receive mail from the normal internet. For an
account, visit <a href="http://hq.postman.i2p/" target="_blank">hq.postman.i2p</a>. Additionally, <a href="http://i2pbote.i2p/" target="_blank">I2P-Bote</a> is a new serverless, end-to-end encrypted e-mail system providing a web
interface and an integrated addressbook. It is developed by HungryHobo
and can be installed as a <a href="readme.html#plugins">plugin</a>.</li>
and can be installed as a <a href="#plugins">plugin</a>.</li>
<li class="tidylist"><b>Anonymous File Transfer</b><br><a href="/i2psnark" target="_blank">I2PSnark</a> is integrated into I2P, providing anonymous, encrypted <a href="https://secure.wikimedia.org/wikipedia/en/wiki/BitTorrent_%28protocol%29" target="_blank">BitTorrent</a> transfers. In addition, Sponge develops a bittorrent client called <a href="http://bob.i2p/Robert.html">Robert</a> written in Python. There is also a port of <a href="http://www.emule-project.net/" target="_blank">eMule</a> to I2P called <a href="http://echelon.i2p/imule">iMule</a> [Needs developers!], an anonymous, secure implementation of a <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Gnutella" target="_blank">Gnutella network</a>, accessible using <a href="http://echelon.i2p/i2phex/" target="_blank">I2Phex</a> [maintained by Complication, seeking new developers!], and additional facilities including browser-based file hosting etc.</li>
<li class="tidylist"><b>Anonymous File Transfer</b><br><a href="/i2psnark/" target="_blank">I2PSnark</a> is integrated into I2P, providing anonymous, encrypted <a href="https://secure.wikimedia.org/wikipedia/en/wiki/BitTorrent_%28protocol%29" target="_blank">BitTorrent</a> transfers. In addition, Sponge develops a bittorrent client called <a href="http://bob.i2p/Robert.html">Robert</a> written in Python. There is also a port of <a href="http://www.emule-project.net/" target="_blank">eMule</a> to I2P called <a href="http://echelon.i2p/imule/">iMule</a> [Needs developers!], an anonymous, secure implementation of a <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Gnutella" target="_blank">Gnutella network</a>, accessible using <a href="http://echelon.i2p/i2phex/" target="_blank">I2Phex</a> [maintained by Complication, seeking new developers!], and additional facilities including browser-based file hosting.</li>
<li class="tidylist"><b>Anonymous Chat</b><br>Start your IRC client (e.g. Chatzilla, Pidgin, XChat)
and connect to the <a href="irc://127.0.0.1:6668/i2p">server</a> at <code>127.0.0.1 port 6668</code>. You do not need to configure a proxy in your IRC client; I2P provides you with a local IRC tunnel (configured in your IRC client as an IRC server or remote host). Your local I2P IRC tunnel on <code>localhost:6668</code> will direct you to one of two IRC servers hosted on I2P by Postman and Badger, but neither you nor they know where the other is, and your mom, ISP or government is unable to intercept your conversation! Once you're there, <code>#i2p-help</code>,<code>#i2p</code>,<code>#i2p-chat</code> and <code>#i2p-dev</code> are just a few of the available channels you may wish to /join. There's also an I2P-based <a href="http://echelon.i2p/qti2pmessenger">Instant Messenger</a> for unmonitorable and uncensorable anonymous chat, as well as alternative IRC servers, Jabber servers, website-based chat etc. And of course you're entirely free to run your own servers over I2P in whatever flavor you choose, or if you're a developer write your own <a href="http://www.i2p2.de/applications.html" target="_blank">I2P applications</a> (both <a href="https://secure.wikimedia.org/wikipedia/en/wiki/User_Datagram_Protocol" target="_blanK">udp</a> and <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Transmission_Control_Protocol" target="_blank">tcp</a> protocols are <a href="http://www.i2p2.i2p/techintro.html#op.transport" target="_blank">provisioned</a>), and <a href="http://www.i2p2.de/streaming.html" target="_blank">realtime streaming</a> is also possible. We also provide full access to the <a href="http://docs.i2p2.de/javadoc/" target="_blank"> java-based api</a>.</li>
<li class="tidylist"><b>Forums &amp; Blogging</b><br>If you're looking to run your own blog or forum, you might be interested in <a href="http://syndie.i2p2.de/" target="_blank">Syndie</a>, a distributed forum and blogging platform for I2P [Needs developers!]. There's also an I2P plugin port of the Java-based <a href="http://pebble.sourceforge.net/" target="_blank">pebble</a> blogging platform ported to I2P by zzz, available on <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. And, of course, all normal blogging, forum and cms software will run over I2P, though you're advised to take extra precautions with security when setting up and to keep all associated software (e.g. Php, MySql, Python, Apache) up to date and locked-down! Also, there are quite a few community run forums on I2P in various languages; see <a href="#eepsites">below</a> for some suggestions.</li>
<a name="plugins"></a><li class="tidylist"><b>Plugins for I2P</b><br>Extend the usefulness of I2P by installing plugins&hellip; blogging, chatting, file sharing and other plugins have already been written or ported and await your <a href="http://i2plugins.i2p/plugins/" target="_blank">installation</a>! Browse the plugins and related info at <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. If you're a <a href="http://i2plugins.i2p/developers/" target="_blank">developer</a>, a complete language-agnostic framework for writing your own plugins is provided with <a href="http://www.i2p2.i2p/plugins.html" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li>
and connect to the <a href="irc://127.0.0.1:6668/i2p">server</a> at <code>127.0.0.1 port 6668</code>. You do not need to configure a proxy in your IRC client; I2P provides you with a local IRC tunnel (configured in your IRC client as an IRC server or remote host). Your local I2P IRC tunnel on <code>localhost:6668</code> will direct you to one of two IRC servers hosted on I2P by Postman and Badger, but neither you nor they know where the other is, and your mom, ISP or government is unable to intercept your conversation! Once you're there, <code>#i2p-help</code>,<code>#i2p</code>,<code>#i2p-chat</code> and <code>#i2p-dev</code> are just a few of the available channels you may wish to /join. There's also an I2P-based <a href="http://echelon.i2p/qti2pmessenger/">Instant Messenger</a> for unmonitorable and uncensorable anonymous chat, as well as alternative IRC servers, Jabber servers, website-based chat, and more. And of course you're entirely free to run your own servers over I2P in whatever flavor you choose, or if you're a developer write your own <a href="http://www.i2p2.i2p/applications.html" target="_blank">I2P applications</a> (both <a href="https://secure.wikimedia.org/wikipedia/en/wiki/User_Datagram_Protocol" target="_blanK">UDP</a> and <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Transmission_Control_Protocol" target="_blank">TCP</a> protocols are <a href="http://www.i2p2.i2p/techintro.html#op.transport" target="_blank">provisioned</a>), and <a href="http://www.i2p2.i2p/streaming.html" target="_blank">realtime streaming</a> is also possible. We also provide full access to the <a href="http://docs.i2p2.de/javadoc/" target="_blank"> java-based api</a>.</li>
<li class="tidylist"><b>Forums &amp; Blogging</b><br>If you're looking to run your own blog or forum, you might be interested in <a href="http://syndie.i2p2.de/" target="_blank">Syndie</a>, a distributed forum and blogging platform for I2P [Needs developers!]. There's also an I2P plugin port of the Java-based <a href="http://pebble.sourceforge.net/" target="_blank">pebble</a> blogging platform ported to I2P by zzz, available on <a href="http://i2plugins.i2p/" target="_blank">i2plugins.i2p</a>. And, of course, all normal blogging, forum and cms software will run over I2P, though you're advised to take extra precautions with security when setting up and to keep all associated software (e.g. Php, MySql, Python, Apache) up to date and locked-down! Also, there are quite a few community run forums on I2P in various languages; see <a href="#eepsites">below</a> for some suggestions.</li>
<a name="plugins"></a><li class="tidylist"><b>Plugins for I2P</b><br>Extend the usefulness of I2P by installing plugins&hellip; blogging, chatting, file sharing and other plugins have already been written or ported and await your <a href="http://i2plugins.i2p/plugins/" target="_blank">installation</a>! Browse the plugins and related info at <a href="http://i2plugins.i2p/" target="_blank">i2plugins.i2p</a>. If you're a <a href="http://i2plugins.i2p/developers/" target="_blank">developer</a>, a complete language-agnostic framework for writing your own plugins is provided with <a href="http://www.i2p2.i2p/plugins.html" target="_blank">documentation</a>; I2P plugins can be coded in any language.</li>
</ul>
<h3>Anonymous Encrypted Webserving on I2P</h3>
<h3>Anonymous Encrypted Web Hosting on I2P</h3>
<ul class="links">
<li class="tidylist"><b>Ready to Roll!</b><br>I2P comes with a built-in, ready-to-go webserver for hosting your own anonymous website (eepsite) on the I2P network: a <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> instance listening on <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. To host your own content,
<li class="tidylist"><b>Ready to Roll!</b><br>I2P comes with a built-in, ready-to-go web server for hosting your own anonymous website (eepsite) on the I2P network: a <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> instance listening on <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. To host your own content,
simply place your files in the <code>eepsite/docroot/</code> directory (or place
any standard JSP/Servlet .war files under <code>eepsite/webapps</code>,
or standard CGI scripts under <code>eepsite/cgi-bin</code>) and they'll show
up. You can also run any alternative webserver platform over I2P and replace the built-in server, or run it on another tunnel.</li>
up. You can also run any alternative web server platform over I2P and replace the built-in server, or run it on another tunnel.</li>
<li class="tidylist"><b>Start Your Tunnel</b><br>
After starting up, your pre-configured <a href="/i2ptunnel/" target="_blank">I2P Webserver Tunnel</a>,
your eepsite will be visible (but not discoverable) to others. Detailed instructions for starting
your eepsite, registering an .i2p domain and promoting your site to others are accessible via your own I2P websever on <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
your eepsite, registering an .i2p domain and promoting your site to others are accessible via your own I2P webserver on <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a>
<h3>I2P-Hosted Sites of Interest</h3>
<ul class="links">
<li class="tidylist"><b>Invisible Internet Project (I2P) Official Website</b><br><a href="http://www.i2p2.i2p/" target="_blank">www.i2p2.i2p</a> and
its mirror <a href="http://i2p-projekt.i2p" target="_blank">i2p-projekt.i2p</a>: Secure and
anonymous connections to <a href="http://www.i2p2.de/" target="_blank">www.i2p2.de</a>. There's also an official mirror running on <a href="http://geti2p.net" target="_blank">geti2p.net</a>. If you want to know more about how I2P works or how you can participate, this is your first port of call!</li>
its mirror <a href="http://i2p-projekt.i2p/" target="_blank">i2p-projekt.i2p</a>: Secure and
anonymous connections to <a href="http://www.i2p2.de/" target="_blank">www.i2p2.de</a>. There's also an official mirror running on <a href="http://geti2p.net/" target="_blank">geti2p.net</a>. If you want to know more about how I2P works or how you can participate, this is your first port of call!</li>
<li class="tidylist"><b>I2P Community Forums</b><br><a href="http://forum.i2p/" target="_blank">forum.i2p</a>: A secure
and anonymous connection to <a href="http://forum.i2p2.de/" target="_blank">forum.i2p2.de</a>, an online forum community where developers and users alike discuss problems and ideas relating to I2P and associated topics, and <a href="http://zzz.i2p" target="_blank">zzz's developer forums</a> for both end users and developers.</li>
<li class="tidylist"><b>I2P Anonymous Pastebin</b><br><a href="http://paste.i2p2.i2p" target="_blank">paste.i2p2.i2p</a>: Secure and
and anonymous connection to <a href="http://forum.i2p2.de/" target="_blank">forum.i2p2.de</a>, an online forum community where developers and users alike discuss problems and ideas relating to I2P and associated topics, and <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> for both end users and developers.</li>
<li class="tidylist"><b>I2P Anonymous Pastebin</b><br><a href="http://paste.i2p2.i2p/" target="_blank">paste.i2p2.i2p</a>: Secure and
anonymous paste service allowing anonymous text and text-based code sharing over I2P.</li>
<li class="tidylist"><b>Echelon's I2P Resources</b><br><a href="http://echelon.i2p" target="_blank">echelon.i2p</a>: I2P software
archive with source code (where permissible), information about I2P, including a <a href="http://echelon.i2p/I2Pguide/index.html" target="_blank">beginner's guide</a> &amp; pre-release developer builds of I2P for the adventurous to try.</li>
<li class="tidylist"><b>Ugha's Wiki</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a>: An open wiki that anyone can edit with plenty of information about I2P, help for beginners, additional links into the network etc.</li>
<li class="tidylist"><b>I2P-to-Freenet Proxy</b><br><a href="http://fproxy.tino.i2p" target="_blank">fproxy.tino.i2p</a>:
Peer into the file sharing world of the <a href="http://freenetproject.org/" target="_blank">Freenet</a> darknet with Tino's I2P-to-Freenet proxy.</li>
<li class="tidylist"><b>Echelon's I2P Resources</b><br><a href="http://echelon.i2p/" target="_blank">echelon.i2p</a>: I2P software
archive with source code (where permissible), information about I2P, including a <a href="http://echelon.i2p/I2Pguide/index.html" target="_blank">beginner's guide</a> and pre-release developer builds of I2P for the adventurous to try.</li>
<li class="tidylist"><b>Ugha's Wiki</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a>: An open wiki that anyone can edit with plenty of information about I2P, help for beginners, additional links into the network, and more.</li>
<li class="tidylist"><b>I2P-to-Freenet Proxy</b><br><a href="http://fproxy.tino.i2p/" target="_blank">fproxy.tino.i2p</a>:
Peer into the world of the <a href="http://freenetproject.org/" target="_blank">Freenet</a> network with Tino's I2P-to-Freenet proxy.</li>
<li class="tidylist"><b>The Planet (on I2P)</b><br><a href="http://planet.i2p/" target="_blank">planet.i2p</a>: An RSS aggregator site that takes news and events from around I2P and publishes them all in one place. A good site to visit to see the community at work!</li>
<li class="tidylist"><b>Eepsite Search Engine</b><br><a href="http://eepsites.i2p/" target="_blank">eepsites.i2p</a>: An
anonymously-hosted eepsite search engine.</li>
@ -82,30 +82,30 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
</li>
<li class="tidylist"><b>Firewalls, Modems & Routers</b><br>Where possible, please ensure I2P/Java is allowed bi-directional port access from the internet by configuring your modem/router/pc firewall accordingly.
If you're behind a prohibitive firewall but have unrestricted outbound access, I2P can still function; you can turn off inbound access and rely on <a href="http://www.i2p2.i2p/udp.html" target="_blank">SSU IP Address Detection</a> (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Hole_punching" target="_blank">firewall hole punching</a>) to connect you to the network, and your network status in the sidepanel will indicate "Network: Firewalled". For optimal performance, where possible please ensure I2P's <a href="/config">external port</a> is visible from the internet (see below for more information).</li>
If you're behind a prohibitive firewall but have unrestricted outbound access, I2P can still function; you can turn off inbound access and rely on <a href="http://www.i2p2.i2p/udp.html" target="_blank">SSU IP Address Detection</a> (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Hole_punching" target="_blank">firewall hole punching</a>) to connect you to the network, and your network status in the side panel will indicate "Network: Firewalled". For optimal performance, where possible please ensure I2P's <a href="/config">external port</a> is visible from the internet (see below for more information).</li>
<li class="tidylist"><b>Check Your Proxy Setttings</b><br>If
you cannot see any eepsites at all (not even <a href="http://www.i2p2.i2p/" target="_blank">www.i2p2.i2p</a>),
make sure your browser's proxy is set to access http traffic (<i>not</i> https, <i>not</i> socks) via <code>127.0.0.1 port 4444</code>. If you need some help, there's <a href="http://www.i2p2.i2p/htproxyports.html" target="_blank">a guide</a> to configuring your browser for I2P use, also <a href="http://www.i2p2.de/htproxyports.html" target="_blank">available</a> on the normal web. </li>
<li class="tidylist"><b>Check Your Logs</b><br><a href="/logs">Logs</a> may help resolve a problem. You may wish to paste excerpts in a <a href="http://forum.i2p/viewforum.php?f=10" target="_blank">forum</a> for help, or perhaps <a href="http://paste.i2p2.i2p" target="_blank">paste</a> it instead and reference the link on IRC for help.</li>
<li class="tidylist"><b>Check Your Logs</b><br><a href="/logs">Logs</a> may help resolve a problem. You may wish to paste excerpts in a <a href="http://forum.i2p/viewforum.php?f=10" target="_blank">forum</a> for help, or perhaps <a href="http://paste.i2p2.i2p/" target="_blank">paste</a> it instead and reference the link on IRC for help.</li>
<li class="tidylist"><b>Verify Java is Up to Date</b><br>Ensure your Java is up to date [version 1.6 recommended and required for some features]. If you don't have Java installed, you probably want some implementation of the JRE (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/JRE" target="_blank">Java Runtime Engine</a>); if you're a developer, the <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Java_SDK" target="_blank">SDK</a> may also be of interest, and possibly <a href="http://ant.apache.org/" target="_blank">Apache Ant</a> which we use to build the I2P Java binaries.
</li>
<li class="tidylist"><b>Problems running on Legacy Hardware</b><br>[Linux/Unix/Solaris] If you can't start the router with <code>i2p/i2prouter start</code> try the <code>runplain.sh</code> script in the same directory. Root privileges are usually not required to run I2P. If you need to compile the <a href="http://www.i2p2.i2p/jbigi.html" target="_blank">jBigi library</a> (which is necessary in rare cases), consult appropriate documentation, visit the forums, or come pay a visit to our <a href="irc://127.0.0.1:6668/i2p-dev">IRC developer channel</a>.
<li class="tidylist"><b>Enable Universal Plug and Play (UPnP)</b><br>Your modem or router may support <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Universal_Plug_and_Play" target="_blank">Universal Plug &amp; Play</a> (UPnP), which permits automatic port forwarding. Ensure UPnP support for I2P is enabled on the <a href="/config">config page</a>, then try to activate UPnP on your modem/router and possibly your computer also. Now try restarting the <a href="/">I2P router</a>. If successful, I2P should report "Network: OK" in the sidepanel once the I2P router completes initial connectivity tests.
<li class="tidylist"><b>Enable Universal Plug and Play (UPnP)</b><br>Your modem or router may support <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Universal_Plug_and_Play" target="_blank">Universal Plug &amp; Play</a> (UPnP), which permits automatic port forwarding. Ensure UPnP support for I2P is enabled on the <a href="/config">config page</a>, then try to activate UPnP on your modem/router and possibly your computer also. Now try restarting the <a href="/">I2P router</a>. If successful, I2P should report "Network: OK" in the side panel once the I2P router completes initial connectivity tests.
</li>
<li class="tidylist"><b>Port Forwarding</b><br>Open <a href="/config">I2P's port</a> on your modem, router and/or firewall(s) for better connectivity (ideally both UDP and TCP). More information on how to go about port forwarding can be found at <a href="http://portforward.com" target="_blank">portforward.com</a>, in addition to our forums and IRC channels listed below. Note that I2P does not support connecting to the internet via an http or socks proxy [patches welcome!], though you can connect to proxies via I2P itself once connected to the network.
<li class="tidylist"><b>Port Forwarding</b><br>Open <a href="/config">I2P's port</a> on your modem, router and/or firewall(s) for better connectivity (ideally both UDP and TCP). More information on how to go about port forwarding can be found at <a href="http://portforward.com/" target="_blank">portforward.com</a>, in addition to our forums and IRC channels listed below. Note that I2P does not support connecting to the internet via an http or socks proxy [patches welcome!], though you can connect to proxies via I2P itself once connected to the network.
</li>
<li class="tidylist"><b>Getting Support Online</b><br>You may also want
to review the information on the <a href="http://www.i2p2.i2p/" target="_blank">I2P website</a>,
post up messages to the <a href="http://forum.i2p2.de/" target="_blank">I2P discussion forum</a>,
post messages to the <a href="http://forum.i2p2.i2p/" target="_blank">I2P discussion forum</a>,
or swing by
<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>, <a href="http://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p" target="_blank">Sponge's instance</a>, or via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We primarily use <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> to manage our source code.</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>, <a href="http://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p" target="_blank">Sponge's instance</a>, or via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We primarily 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.</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.</li>
</ul><div class="topness"><a href="#top">[Return to Top]</a></div>
<div class="footnote"><hr>Document updated: December 2010.</div>

View File

@ -24,7 +24,7 @@
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: anonym gehostete Suchseite f&uuml;r Eepseiten</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>: Ugha's Eepseite, ein &ouml;ffentliches Wiki mit vielen Links</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: ein Freenet-Proxy</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: Softwarearchiv und Informationen zu I2P (mit BitTorrent-Klienten, iMule, I2PFox, I2P-Messenger, ...)</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: Softwarearchiv und Informationen zu I2P (mit BitTorrent-Klienten, iMule, I2PFox, I2P-Messenger,&nbsp;&hellip;)</li>
<li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a>: anonymer Pastebin</li>
</ul><br />
Es gibt viele andere Eepseiten - folge einfach den Links, die du findest,
@ -60,7 +60,7 @@
Deine Dateien im Verzeichnis <code>eepsite/docroot/</code> (oder jedes
Standard-JSP/Servlet <code>.war</code> unter <code>eepsite/webapps</code>,
CGI Scripte unter <code>eepsite/cgi-bin</code>) und schon sind sie
verf&uuml;gbar. Nach dem Starten des <a href="/i2ptunnel/">Eepseiten-Tunnels</a>,
verf&uuml;gbar. Nach dem Starten des <a href="/i2ptunnel/">Eepseiten-Tunnels</a>,
der darauf zeigt, ist Deine Eepseite f&uuml;r andere verf&uuml;gbar.
Detailierte Instruktionen zum Start Deiner eigenen Eepseite findest Du auf
<a href="http://127.0.0.1:7658/">Deiner tempor&auml;ren Eepseite</a>.

View File

@ -1,68 +1,111 @@
<div lang="ru">
<div align="right">
<div class="langbox" align="right"><a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a>
<div class="langbox" align="right">
<a href="/index.jsp?lang=en"><img src="/flags.jsp?c=us" title="English" alt="English"></a>
<a href="/index.jsp?lang=zh"><img src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/index.jsp?lang=de"><img src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/index.jsp?lang=fr"><img src="/flags.jsp?c=fr" title="Français" alt="Français"></a>
<a href="/index.jsp?lang=es"><img src="/flags.jsp?c=es" title="Espa&ntilde;ol" alt="Espa&ntilde;ol"></a>
<a href="/index.jsp?lang=es"><img src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/index.jsp?lang=pt"><img src="/flags.jsp?c=pt" title="Português" alt="Português"></a>
<a href="/index.jsp?lang=nl"><img src="/flags.jsp?c=nl" title="Nederlands" alt="Nederlands"></a>
<a href="/index.jsp?lang=ru"><img src="/flags.jsp?c=ru" title="Русский" alt="Русский"></a>
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div></div>
<div class="welcome"><h2>Добро пожаловать в I2P!</h2></div>
<p>Когда Вы запускаете I2P впервые — числа в графе «Активные» (слева) начнут расти постепенно, это может занять несколько минут. Затем в списке «Локальные туннели» появится запись «коллективные клиенты» (если этого не случилось, <a href="#trouble">см. «устранение неполадок»</a>).
</div>
</div><a name="top"></a>
<div class="welcome"><h2>Добро пожаловать в Невидимый Интернет</h2></div>
<ul class="links"><li class="tidylist"><b>Начало&hellip;</b><br>Если вы только что запустили I2P, число <i>Активных пиров</i>, отображаемых под секцией <i>Пиры</i> на боковой панели должно начать увеличиваться через несколько минут, и вы так же увидите <i>Локальный туннель</i> с именем <i>Коллективные Клиенты</i>, и, возможно, другие клиентские и серверные туннели в зависимости от того, как настроен I2P (если нет, смотрите секцию по разрешению проблем <a href="#trouble">ниже</a>). Эти <i>Локальные туннели</i> предоставляют соединения на разных портах (и иногда разные протоколы) для сети I2P, позволяя функционировать вашим torrent, e-mail, прокси и другим сервисам. Ваша <a href="/netdb">База данных сети I2P</a> показывает всех известных роутеру пиров в сети. Больше информации доступно на <a href="/help">странице помощи</a>.</li>
<p>После появления записи «коллективные клиенты» Вы можете:</p>
<ul>
<li><b>Просматривать I2P-сайты</b> (веб-сайты хостящиеся анонимно внутри I2P сети). Для этого настройте в Вашем браузере <b>HTTP прокси-сервер 127.0.0.1 порт 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/">www.i2p2.i2p</a> или <a href="http://i2p-projekt.i2p">i2p-projekt.i2p</a> — безопасное и анонимное зеркало для <a href="http://www.i2p2.de/">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a> — анонимная поисковая система по I2P-сайтам</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a> — I2P-вики, которую может редактировать любой пользователь, плюс множество ссылок</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a> — Freenet-прокси</li>
<li><a href="http://echelon.i2p">echelon.i2p</a> — архив программного обеспечения для I2P</li>
<li><a href="http://paste.i2p2.i2p">paste.i2p2.i2p</a> — анонимный pastebin-сервис</li>
</ul><br>
Существует множество других I2P-сайтов — пройдитесь по этому списку, добавьте в свои закладки всё, что Вам понравится. Возвращайтесь почаще!
</li><br />
<li class="tidylist"><b>Анонимно просматривать обычные веб-сайты</b> — в I2P по умолчанию настроен глобальный анонимный «внешний прокси» («Outproxy»), через который будут перенаправляться Ваши запросы к http-серверам обычного интернета. (При необходимости Вы можете отключить эту функцию в свойствах i2p-туннеля <a href="/i2ptunnel/">«eepProxy»</a>)</li>
<li class="tidylist"><b>Передавать файлы</b> — для этого есть встроенный <a href="/i2psnark">порт</a> BitTorrent-клиента <a href="http://www.klomp.org/snark/">Snark</a>.</li>
<li class="tidylist"><b>Сетевая интеграция</b><br> Когда вы впервые запускаете I2P, это может занять несколько минут, т.к. роутер выполняет процедуру начальной загрузки (bootstrap) для интеграции в сеть и поиска пиров для оптимизации интегрированности. Будте терпеливы. Когда возле ваших <i>Локальных туннелей</i> загорятся зелёные звёздочки, вы сможете делать с I2P разнообразные вещи, и ниже мы представим вам некоторые из них. </li></ul>
<li class="tidylist"><b>Пользоваться анонимной почтой</b> — спасибо postman-у за создание почтовой системы <a href="http://hq.postman.i2p/">hq.postman.i2p</a> совместимой с обычными почтовыми клиентами (через протоколы POP3/SMTP). С её помощью можно обмениваться почтой как внутри I2P, так и с адресами обычного интернета. Мы также предлагаем попробовать <a href="/susimail/susimail">Susimail</a> — встроенный почтовый клиент с веб-интерфейсом, уже настроенный на работу с сервером postman-а, вам лишь остается создать аккаунт.</li>
<h3>Сервисы в I2P</h3>
<ul class="links">
<li class="tidylist"><b>Общаться в анонимных чатах</b> — запустите любой удобный для Вас IRC-клиент и подключитесь к серверу <b>127.0.0.1 порт 6668</b>. По этому адресу расположен вход на два анонимно хостящихся IRC-сервера. Ваше реальное местоположение будет скрыто как от сервера, так и от других пользователей.
<li class="tidylist"><b>Вести анонимный блог</b> — попробуйте <a href="http://syndie.i2p2.de/">Syndie</a></li>
<li class="tidylist">и многое другое</li>
<li class="tidylist"><b>Невидимый Интернет и просмотр обычных сайтов </b><br>В I2P вы можете заходить на анонимные веб-сайты (так же известные как eepsites) и пользоваться другими сервисами (такими как ssh over I2P, IRC, Jabber и т.д.), а так же поддерживать собственные сервисы. Ещё вы можете выходить в обычный веб анонимно через имеющиеся в I2P веб-прокси (outproxy). <a href="http://www.i2p2.de/htproxyports.html" target="_blank">Настройте ваш браузер</a> на использование <a href="http://proxy.i2p" target="_blank">HTTP proxy</a> на <code>127.0.0.1 порт 4444</code>, затем откройте eepsite или обычный <code>http://</code> адрес. Вы можете попробовать преднастроенный браузер <a href="http://echelon.i2p/i2pfox/">I2PFox</a> - специальную сборку Firefox, сделанную для I2P, с усиленной безопасностью. Если вы хотите отключить или изменить возможность доступа в обычный интернет через outproxy, удалите или измените содержимое <code>false.i2p</code> в поле опции <i>Outproxies</i> на странице <a href="/i2ptunnel/edit?tunnel=0" target="_blank">редактирования HTTP Proxy туннеля</a>. В секции Достопримечательности <a href="#eepsites">ниже</a>, мы представляем список некоторых сайтов, имеющихся в I2P.</li>
<li class="tidylist"><b>Анонимная электронная почта</b><br>Почтовая система Postman-а, расположенная в I2P, доступна через <a href="../../../../../../susimail/">встроенный почтовый клиент с веб-интерфейсом</a>
(susimail), либо через любой почтовый клиент, поддерживающий smtp и pop3.
Пользователи сервиса могут отправлять и получать почту из обычного интернета. Для
получения аккаунта, посетите <a href="http://hq.postman.i2p/" target="_blank">hq.postman.i2p</a>. Так же, доступна <a href="http://i2pbote.i2p/" target="_blank">I2P-Bote</a> - новая безсерверная почтовая система со сквозным шифрованием с веб-интерфейсом и встроенной адресной книгой. Она разрабатывается HungryHobo и может быть установлена как <a href="readme.html#plugins">плагин</a>.</li>
<li class="tidylist"><b>Анонимная передача файлов</b><br><a href="/i2psnark" target="_blank">I2PSnark</a> - интегрированный в I2P <a href="https://secure.wikimedia.org/wikipedia/en/wiki/BitTorrent_%28protocol%29" target="_blank">торрент</a>-клиент, обеспечивающий анонимную и шифрованную передачу файлов. Помимо этого, Sponge разрабатывает битторрент-клиент <a href="http://bob.i2p/Robert.html">Robert</a>, написанный на Python. Так же имеется порт <a href="http://www.emule-project.net/" target="_blank">eMule</a> для I2P, именуемый <a href="http://echelon.i2p/imule">iMule</a> [нуждается в разработчиках!]; анонимная и безопасная реализация <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Gnutella" target="_blank">Gnutella network</a>, доступная через <a href="http://echelon.i2p/i2phex/" target="_blank">I2Phex</a> [поддерживается Complication-ом, ищутся разработчики!], и прочие возможности, включая веб-обменники, для работы с которыми достаточно только браузера.</li>
<li class="tidylist"><b>Анонимный чат</b><br>Запустите ваш IRC-клиент (Chatzilla, Pidgin, XChat и т.п.)
и соединитесь с <a href="irc://127.0.0.1:6668/i2p">сервером</a> на <code>127.0.0.1 порт 6668</code>. Вам не нужно настраивать прокси в IRC-клиенте; I2P предоставляет преднастроенный IRC-туннель (настраиваемый в вашем IRC-клиенте как IRC-сервер). Ваш локальный I2P IRC-туннель на <code>localhost:6668</code> направит вас на один из двух IRC-серверов, поддерживаемых Postman-ом и Badger-ом, но ни вы и ни они не знают, где расположен другой сервер, и ни ваша мама, ни провайдер, ни госорганы не могут перехватить ваши разговоры! Когда вы зайдёте в irc, возможно вам захочется зайти на некоторые из этих каналов - <code>#i2p-help</code>,<code>#i2p</code>,<code>#i2p-chat</code> и <code>#i2p-dev</code>. Так же здесь имеется I2P-ориентированный <a href="http://echelon.i2p/qti2pmessenger">клиент обмена мгновенными сообщениями</a> для неотслеживаемого и безцензурного анонимного общения, который можно считать альтернативой IRC и Jabber-серверам, веб-чатам. И, конечно, вы всецело вольны запускать ваши собственные серверы поверх I2P в любом режиме как вы хотите, или, если вы программист, можете написать собственные <a href="http://www.i2p2.de/applications.html" target="_blank">I2P-приложения</a> (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/User_Datagram_Protocol" target="_blanK">udp</a> и <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Transmission_Control_Protocol" target="_blank">tcp</a> протоколы <a href="http://www.i2p2.i2p/techintro.html#op.transport" target="_blank">предоставлены</a>), и <a href="http://www.i2p2.de/streaming.html" target="_blank">потоковая передача в реальном времени</a> так же возможна. Ещё мы предоставляем полный доступ к <a href="http://docs.i2p2.de/javadoc/" target="_blank"> java-based api</a>.</li>
<li class="tidylist"><b>Форумы и блоги</b><br>Если вы намереваетесь запустить собственный блог или форум, возможно вы заинтересуетесь <a href="http://syndie.i2p2.de/" target="_blank">Syndie</a>, распределённой платформой для форума или ведения блога в I2P [нужны разработчики!]. Ещё есть порт <a href="http://pebble.sourceforge.net/" target="_blank">pebble</a> - написанной на Java блоггинг-платформы, выполненный zzz в виде плагина для I2P, доступен на <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. И, конечно, все обычные блоги, форумы и CMS будут работать через I2P, но будте аккуратны при их настройке, уделите должное внимание безопасности, в том числе и связанному софту (php, MySQL, Python, Apache и т.д.). Так же, в I2P есть несколько форумов на разных языках, поддерживаемых сообществом; <a href="#eepsites">ниже</a> имеется несколько ссылок.</li>
<a name="plugins"></a><li class="tidylist"><b>Плагины для I2P</b><br>Повысьте полезность I2P установив плагины&hellip; блоггинг, чат, обмен файлами и другие плагины уже были написаны или портированы и ждут когда вы их <a href="http://i2plugins.i2p/plugins/" target="_blank">установите</a>! Смотрите плагины и сопутствующую информацию на <a href="http://i2plugins.i2p" target="_blank">i2plugins.i2p</a>. Если вы <a href="http://i2plugins.i2p/developers/" target="_blank">программист</a>, полный языконезависимый фреймворк для написания плагинов доступен и <a href="http://www.i2p2.i2p/plugins.html" target="_blank">документирован</a>; I2P плагины могут быть написаны на любом языке.</li>
</ul>
<h2>Хотите завести собственный I2P-сайт?</h2>
<p>Для этого в I2P есть встроенный http-сервер <a href="http://jetty.mortbay.org/">Jetty</a> работающий по адресу <a href="http://127.0.0.1:7658/">http://127.0.0.1:7658/</a>.
<h3>Анонимный шифрованный веб-хостинг в I2P</h3>
<ul class="links">
Просто поместите свои файлы в директорию <code>eepsite/docroot/</code> (<code>.war</code>-файлы JSP/сервлетов в директорию <code>eepsite/webapps/</code>, а CGI-скрипты в директорию <code>eepsite/cgi-bin/</code>).
<li class="tidylist"><b>Готовы к действию!</b><br>I2P идёт со встроенным готовым к работе веб-сервром для хостинга вашего собственного анонимного веб-сайта (eepsite) в сети I2P: <a href="http://jetty.mortbay.org/" target="_blank">Jetty</a> развёрнут и слушает на <a href="http://127.0.0.1:7658/" target="_blank">http://127.0.0.1:7658/</a>. Для размещения собственного контента,
просто положите ваши файлы в каталог <code>eepsite/docroot/</code> (или положите любой
обычный JSP/Servlet .war файл в <code>eepsite/webapps</code>,
или обычный CGI-скрипт внутрь <code>eepsite/cgi-bin</code>) и они будут показы вам.
Так же вы можете запустить любой другой веб-сервер для работы в I2P и заменить встроенный веб-сервер, либо настроить для него отдельный туннель.</li>
<li class="tidylist"><b>Запустите свой туннель</b><br>
После запуска преднастроенного <a href="/i2ptunnel/" target="_blank">туннеля для веб-сервера</a>,
ваш eepsite будет доступен (но не обнаруживаем) для остальных. Детальные инструкции по запуску
I2P-сайта, регистрации .i2p домена и распространению информации о вашем сайте доступны через ваш I2P веб-сервер на странице <a href="http://127.0.0.1:7658/help/" target="_blank">http://127.0.0.1:7658/help/</a>.</li></ul>
<a name="eepsites"></a>
<h3>Достопримечательности I2P</h3>
<ul class="links">
<li class="tidylist"><b>Официальный веб-сайт Invisible Internet Project (I2P)</b><br><a href="http://www.i2p2.i2p/" target="_blank">www.i2p2.i2p</a> и
его зеркало <a href="http://i2p-projekt.i2p" target="_blank">i2p-projekt.i2p</a>: безопасный и анонимный
доступ к <a href="http://www.i2p2.de/" target="_blank">www.i2p2.de</a>. Так же имеется официальное зеркало на <a href="http://geti2p.net" target="_blank">geti2p.net</a>. Если вы хотите узнать больше о том, как работает I2P, или о том, как вы можете принять участие, это послужит вам точкой входа.</li>
<li class="tidylist"><b>Форумы сообщества I2P</b><br><a href="http://forum.i2p/" target="_blank">forum.i2p</a>: Безопасный
и анонимный доступ к <a href="http://forum.i2p2.de/" target="_blank">forum.i2p2.de</a>, где разработчики и пользователи обсуждают относящиеся к I2P и сопутствующим вещам проблемы и идеи, и <a href="http://zzz.i2p" target="_blank">форумы разработчика zzz</a> как для разработчиков, так и для конечных пользователей.</li>
<li class="tidylist"><b>Анонимный I2P Pastebin</b><br><a href="http://paste.i2p2.i2p" target="_blank">paste.i2p2.i2p</a>:
Безопасный и анонимный pastebin-сервис, предоставляющий возможность анонимного обмена текстом и кодом через I2P.</li>
<li class="tidylist"><b>Ресурсы Echelon-а</b><br><a href="http://echelon.i2p" target="_blank">echelon.i2p</a>: архив I2P
софта с исходными текстами (где позволяет лицензия), информация об I2P, включая <a href="http://echelon.i2p/I2Pguide/index.html" target="_blank">руководство для начинающих</a> и пре-релизные девелоперские сборки I2P для тестирования.</li>
<li class="tidylist"><b>Вики Ugha-и</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a>: Открытая вики, которую может редактировать любой, с изобилием информации об I2P, помощью для начинающих, дополнительными ссылками на ресурсы сети и т.д.</li>
<li class="tidylist"><b>I2P-to-Freenet прокси</b><br><a href="http://fproxy.tino.i2p" target="_blank">fproxy.tino.i2p</a>:
Взгляните в мир обмена данными закрытой сети <a href="http://freenetproject.org/" target="_blank">Freenet</a> с помощью I2P-to-Freenet прокси-сервера Tino.</li>
<li class="tidylist"><b>Планета I2P</b><br><a href="http://planet.i2p/" target="_blank">planet.i2p</a>: RSS-аггрегатор, который собирает новости и события в I2P и публикует их в одном месте. Хороший сайт, который можно посетить и увидеть сообщество в работе!</li>
<li class="tidylist"><b>Поисковик по I2P-сайтам</b><br><a href="http://eepsites.i2p/" target="_blank">eepsites.i2p</a>: Анонимно-хостящийся поисковик по eepsite-ам.</li>
<li class="tidylist"><b>Здоровье сети I2P</b><br><a href="http://stats.i2p/cgi-bin/dashboard.cgi" target="_blank">stats.i2p</a>: посмотрите различные аспекты сетевой производительности с помощью этого сайта для мониторинга сети I2P, поддерживаемого zzz.</li>
<li class="tidylist"><b>Исследуйте I2P</b><br>Здесь много больше eep-сайтов - походите по ссылкам с тех, что вы видите. Добавляйте понравившиеся в закладки, и посещайте их чаще!<br></li>
</ul>
После этого достаточно запустить туннель <a href="/i2ptunnel/">«I2P webserver»</a>, указывающий на Ваш сайт, и он станет доступным для других пользователей.</p>
<p>Подробную пошаговую инструкцию Вы можете найти на <a href="http://127.0.0.1:7658/">временной страничке-заготовке Вашего сайта</a>.</ps>
<h2>Разрешение проблем и дальнейшая поддержка</h2><a name="trouble"></a>
<ul class="links">
<li class="tidylist"><b>Будте терпеливы!</b><br>I2P-роутер может быть медленен во время интеграции в сеть, когда вы запускаете его впервые, так как он выполняет процедуру начальной загрузки (bootstrap) и получает информацию о других пирах. Чем дольше ваш I2P-роутер работает, тем лучше он будет работать, поэтому старайтесь держать ваш роутер включенным как можно дольше, если возможно, 24x7! Если через 30 минут ваш счётчик <i>Активные: [подсоединённые/недавние]</i> будет показывать менее 10-и пиров, или общее количество <i>Интегрированных</i> пиров будет меньше 5-и, есть несколько вещей, которые вы можете проверить с целью выявления проблем:
</li>
<h2><a name="trouble">Поиск и устранение неполадок</a></h2>
<p>Наберитесь терпения — первый старт I2P может занять до получаса из-за начального поиска пиров.
<li class="tidylist"><b>Проверьте ваши настройки ограничения скорости</b><br>I2P функционирует наилучшим образом, когда вы можете точно задать скорость соединения с Интернет в <a href="/config">секции настройки ограничения скорости</a>. По умолчанию настройки I2P имеют довольно консервативны значения, которые не покрывают многие нужды, поэтому пожалуйста потратьте время на проверку этих настроек и, если нужно, скорректируйте. Чем большую полосу пропускания вы выделите, <i>особенно</i> исходящую, тем большую выгоду вы получите от сети.
</li>
<p>Если через 30 минут в графе «Активные» все еще меньше 10 подсоединенных пиров, то для повышения качества соединения Вам нужно открыть порт для I2P на Вашем файерволе или роутере (используемый номер порта можно посмотреть на <a href="/config.jsp">странице настроек</a>).</p>
<li class="tidylist"><b>Файрволлы, модемы и роутеры</b><br>Пожалуйста, обеспечьте для I2P/Java двухсторонний доступ по порту из интернета там, где это возможно, настроив ваш модем/роутер/ПК соответствующим образом.
Если вы за запретительным файрволлом, но имеете неограниченный доступ наружу, I2P может функционировать; вы можете выключить доступ снаружи и полагаться на <a href="http://www.i2p2.i2p/udp.html" target="_blank">SSU IP Address Detection</a> (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Hole_punching" target="_blank">firewall hole punching</a>) для соединения с сетью, и тогда статус сети у вас на боковой панели будет показывать "Заблокирован извне". Для достижения оптимальной производительности, если возможно, пожалуйста обеспечьте доступность <a href="/config">внешнего порта</a> I2P из интернета (более подробно см. ниже).</li>
<li class="tidylist"><b>Проверьте настройки прокси</b><br>Если
вы не можете попасть ни на один eep-сайт (даже на <a href="http://www.i2p2.i2p/" target="_blank">www.i2p2.i2p</a>),
убедитесь, что в браузере прописан именно http-прокси (<i>не</i> https и <i>не</i> socks) <code>127.0.0.1 port 4444</code>. Если вам нужна помощь, здесь есть <a href="http://www.i2p2.i2p/htproxyports.html" target="_blank">руководство</a> по настройке браузера для использования I2P, которое так же <a href="http://www.i2p2.de/htproxyports.html" target="_blank">доступно</a> через обычный интернет. </li>
<p>Если Вы не можете соединиться ни с одним I2P-сайтом (даже <a href="http://www.i2p2.i2p/">www.i2p2.i2p</a>), проверьте, включен ли в Вашем браузере HTTP-прокси 127.0.0.1 порт 4444.</p>
<li class="tidylist"><b>Проверьте логи</b><br><a href="/logs">Логи</a> могут помочь решить проблему. У вас может возникнуть желание запостить часть логов на <a href="http://forum.i2p/viewforum.php?f=10" target="_blank">форум</a>, чтобы получить помощь, или, может быть, на <a href="http://paste.i2p2.i2p" target="_blank">pastebin</a>, чтобы дать ссылку на IRC.</li>
<p>Кроме того, Вам может пригодиться справочная информация на <a href="http://www.i2p2.de/">сайте I2P</a>. Не стесняйтесь задать интересующие вас вопросы на <a href="http://forum.i2p2.de/">форуме I2P</a> или на IRC каналах
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a href="irc://127.0.0.1:6668/i2p">#i2p</a> и <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a>
на серверах <a href="irc://irc.freenode.net/#i2p">irc.freenode.net</a>, irc.postman.i2p или irc.freshcoffee.i2p (последние два объединены в одну сеть, а на freenode работает бот-ретранслятор).</p>
<hr>
</div>
<li class="tidylist"><b>Проверьте свежесть Java</b><br>Убедитесь, что у вас достаточно свежая Java [версия 1.6 рекомендуется и необходима для функционирования некоторых возможностей]. Если у вас не установлена Java, скорее всего, вам требуется какая-нибудь реализация JRE (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/JRE" target="_blank">Java Runtime Engine</a>); если вы программист, <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Java_SDK" target="_blank">SDK</a> так же может быть интересен, и, возможно, <a href="http://ant.apache.org/" target="_blank">Apache Ant</a>, который мы используем для сборки бинарников I2P.
</li>
<li class="tidylist"><b>Проблемы использования на устаревшем железе</b><br>[Linux/Unix/Solaris] Если вы не можете запустить роутер с помощью <code>i2p/i2prouter start</code>, попробуйте воспользоваться скриптом <code>runplain.sh</code>, который находится в той же директории. Root-привилегии обычно не требуются для запуска I2P. Если вам нужно скомпилировать <a href="http://www.i2p2.i2p/jbigi.html" target="_blank">библиотеку jBigi</a> (что необходимо в редких случаях), изучите соответствующую документацию, посетите форумы, или приходите на наш <a href="irc://127.0.0.1:6668/i2p-dev">IRC-канал для разработчиков</a>.
<li class="tidylist"><b>Включите Universal Plug and Play (UPnP)</b><br>Ваш модем или роутер возможно поддерживает <a href="https://secure.wikimedia.org/wikipedia/en/wiki/Universal_Plug_and_Play" target="_blank">Universal Plug &amp; Play</a> (UPnP), который делает возможным автоматический проброс портов. Убедитесь, что поддержка UPnP в I2P включена на <a href="/config">странице настройки</a>, потом попробуйте активировать UPnP на модеме/роутере, и, возможно, на компьютере. Затем перезапустите <a href="/">I2P-роутер</a>. Если всё хорошо, I2P должен отображать сообщение "Сеть: OK" на боковой панели после того как выполнит начальные тесты связности (connectivity).
</li>
<li class="tidylist"><b>Проброс портов</b><br>Для достижения большей связности, откройте <a href="/config">порты I2P</a> на модеме, роутере и/или файрволле (в идеале и UDP и TCP). В дополнение к нашим форумам и IRC-каналам (указанным ниже), больше информации о том, как сделать проброс портов, можно найти на сайте <a href="http://portforward.com" target="_blank">portforward.com</a>. Имейте в виду, что I2P не имеет поддержки режима работы через http или socks прокси [патчи приветствуются!]. Когда I2P-роутер соединён с сетью I2P, вы можете подключаться к прокси-серверами через I2P.
</li>
<li class="tidylist"><b>Получение поддержки в режиме онлайн</b><br>Так же, возможно вам захочется
просмотреть информацию на <a href="http://www.i2p2.i2p/" target="_blank">сайте I2P</a>,
отправить сообщение на <a href="http://forum.i2p2.de/" target="_blank">дискуссионный форум I2P</a>,
или посетить каналы
<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://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p" target="_blank">инсталляции у Sponge-а</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>
<div class="footnote"><hr>Документ обновлён: декабрь 2010.</div>

View File

@ -110,7 +110,7 @@ div.warning h3 {
border: 0;
border-bottom: 5px solid #fb7;
padding-bottom: 10px;
background: #ffd;
background:none #FFFFDD !important;
padding-left: 0;
}
@ -378,7 +378,6 @@ div.wideload p !important {
div.news {
margin: -1px 1px 0 200px;
padding: -10px 0px 8px 0px;
background: #ffffc0;
border: 1px solid #89f;
border-bottom: 1px solid #89f;
@ -389,6 +388,7 @@ div.news {
padding-bottom: 8px;
padding-left: 10px;
padding-right: 10px;
padding: 0 10px 3px 10px;
font-size: 7pt;
}
@ -407,6 +407,10 @@ div.news li {
text-transform: capitalize;
}
div.news h3 {
text-align: left !important;
}
div.news p {
color: #330;
font-size: 9pt;
@ -441,7 +445,7 @@ div.news hr {
background: #cc7;
height: 1px;
border: 0px solid #cc7;
margin: 20px 0 0 0;
margin: 10px 0 2px 0;
}
div.confignav {

View File

@ -71,7 +71,8 @@ button {
}
textarea {
border: 1px solid #ddddc0;
border: 1px solid #aaf;
min-height: 40px;
}
br {

File diff suppressed because it is too large Load Diff

View File

@ -76,6 +76,10 @@ button {
textarea {
border: 1px solid #494;
color: #fff;
background: #020;
margin-left: 4px;
margin-right: 5px !important;
}
br {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load Diff

View File

@ -1,382 +1,384 @@
body {
margin: 0px;
padding: 0px;
text-align: center;
font-family: "Lucida Sans Unicode", Verdana, Helvetica, sans-serif;
background: #eef url('images/snowcamo.png');
color: #001;
font-size: 10pt;
/* we've avoided Tantek Hacks so far,
** but we can't avoid using the non-w3c method of
** box rendering. (and therefore one of mozilla's
** proprietry -moz properties (which hopefully they'll
** drop soon).
*/
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #99f url(images/magic.png);
}
div {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
label {
margin: 0px 4px;
padding: 1px 10px 2px 0px;
float: left;
width: 120px;
height: 24px;
font-weight: normal;
text-align: right;
font-size: 8pt;
font-style: italic;
-moz-box-sizing: border-box;
box-sizing: border-box;
line-height: 120%;
color: #101;
}
h4 {
font-size: 14px;
font-weight: bold !important;
color: #001;
text-align: center;
border: 1px solid #225;
margin: 5px 0 15px 0;
padding: 5px 10px;
background: #eef url(images/header.png) repeat-x center center;
text-transform: uppercase;
letter-spacing: 0.08em;
-moz-box-shadow: inset 0px 0px 4px 0px #bbf;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
}
a {
text-decoration: none;
}
form {
margin: 0px;
}
textarea, input, select, button, a {
-moz-box-sizing: border-box;
box-sizing: border-box;
font-size: 9pt;
float: left;
vertical-align: middle;
}
button {
float: none;
text-decoration: none;
}
textarea {
border: 1px solid #9999ff;
}
br {
clear: left;
}
div.statusNotRunning {
float: left;
width: 68px;
height: 24px;
overflow: hidden;
color: #d00;
background: url('images/console_status_stopped.png') 0 0 no-repeat;
padding-top: 24px;
margin-top: 4px;
}
div.statusRunning {
float: left;
width: 68px;
height: 24px;
overflow: hidden;
color: #0b0;
background: url('images/console_status_running.png') 0 0 no-repeat;
padding-top: 24px;
margin-top: 4px;
}
div.statusStarting {
float: left;
width: 68px;
height: 24px;
overflow: hidden;
color: #339933;
background: url('images/console_status_starting.png') 0 0 no-repeat;
padding-top: 24px;
margin-top: 4px;
}
hr {
display: none;
}
.separator, .subdivider {
clear: both;
height: 1px;
margin: 1px 0px 1px 0px;
border-bottom: 1px solid #225;
/*
display: none;
*/
}
.subdivider {
border-bottom: 1px solid #225;
padding: 5px 0px 0px 0px;
}
.freetext {
width: 150px;
height: 24px;
border: 1px solid #44d;
padding: 2px;
margin: 4px 0 2px 0px;
font: 10pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
font-weight: bold;
background: #ddf;
color: #001;
-moz-border-radius: 0 4px 4px 0;
-khtml-border-radius: 0 4px 4px 0;
border-radius: 0 4px 4px 0;
/*
-moz-box-shadow: inset 0px -1px 1px 0px #fff;
*/
}
.control, control:link, control:visited {
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
min-width: 60px;
font-weight: bold;
background: #ffe;
color: #001;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
text-decoration: none;
}
/*
.control:active {
border: 1px inset;
background-color: #003;
color: #f60;
text-decoration: none;
}
*/
.control:hover, control:visited:hover {
border: 1px solid #eef;
background-color: #f60;
color: #fff !important;
text-decoration: none;
}
.control:link, control:visited {
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
min-width: 60px;
font-weight: bold;
color: #001;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: #ffe url(images/header.png) center center repeat:x !important;
text-decoration: none;
}
.panel {
width: 800px;
margin: 16px auto 16px auto;
overflow: hidden;
text-align: left !important;
font-size: 7pt;
background-color: #fff;
background: url(images/magic.png);
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #002;
padding: 10px 20px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
background: none repeat scroll 0 0 #EEEEFF;
background: #fff url(images/magic.png);
border: 1px solid #444477;
color: #000011;
}
.panel .footer {
float: right;
padding: 4px;
}
.toolbox {
float: right;
}
.rowItem {
width: 750px;
float: left;
margin: 0px;
}
.comment {
font-weight: bold;
display: block;
padding: 2px 10px 0 20px;
text-align: left;
}
.text {
height: 24px;
width: 150px;
padding: 0 0 0 2px;
float: left;
margin: 0;
font-size: 9pt !important;
font-weight: bold;
}
.accessKey {
text-decoration: underline;
}
#globalOperationsPanel {
background-color: #fff;
border: 1px solid #003;
padding: 5px 20px 11px 10px;
-moz-box-shadow: inset 0px 0px 0px 1px #f00;
-moz-box-shadow: inset 0px 0px 1px 0px #f60;
background: #fff url(images/magic.png);
border: 1px solid #444477;
color: #613;
}
#globalOperationsPanel .control {
min-width: 120px;
}
#globalOperationsPanel .control:link {
min-width: 120px;
}
globalOperationsPanel .control:link {
min-width: 120px;
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
font-weight: bold;
background-color: #bbbbff;
color: black;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: #ffe url(images/header.png) 0 0 repeat: x !important;
}
globalOperationsPanel .control:visited {
min-width: 120px;
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
font-weight: bold;
background-color: #ffe;
color: black;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: url(images/header.png) 0 0 repeat: x !important;
}
globalOperationsPanel .control:hover {
min-width: 120px;
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
font-weight: bold;
background-color: #003;
color: #f60;
border: 1px outset #fff;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: url(images/header_on.png) 0 0 repeat: x !important;
}
.header {
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
}
select {
background-color: #eef;
color: #001;
margin: 4px;
font-family: "Lucida Sans Unicode", Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
border: 1px solid #001;
padding: 2px;
min-width: 270px;
font-size: 8pt;
max-height: 24px;
}
a:link{
color: #613;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited{
color: #606;
text-decoration: none;
font-weight: bold;
}
a:hover{
color: #f60;
text-decoration: underline;
font-weight: bold;
}
a:active{
color: #f93;
text-decoration: underline;
font-weight: bold;
}
body {
margin: 0px;
padding: 0px;
text-align: center;
font-family: "Lucida Sans Unicode", Verdana, Helvetica, sans-serif;
background: #eef url('images/snowcamo.png');
color: #001;
font-size: 10pt;
/* we've avoided Tantek Hacks so far,
** but we can't avoid using the non-w3c method of
** box rendering. (and therefore one of mozilla's
** proprietry -moz properties (which hopefully they'll
** drop soon).
*/
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #99f url(images/magic.png);
}
div {
-moz-box-sizing: border-box;
box-sizing: border-box;
}
label {
margin: 0px 4px;
padding: 1px 10px 2px 0px;
float: left;
width: 120px;
height: 24px;
font-weight: normal;
text-align: right;
font-size: 8pt;
font-style: italic;
-moz-box-sizing: border-box;
box-sizing: border-box;
line-height: 120%;
color: #101;
}
h4 {
font-size: 14px;
font-weight: bold !important;
color: #001;
text-align: center;
border: 1px solid #225;
margin: 5px 0 15px 0;
padding: 5px 10px;
background: #eef url(images/header.png) repeat-x center center;
letter-spacing: 0.08em;
-moz-box-shadow: inset 0px 0px 4px 0px #bbf;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
}
a {
text-decoration: none;
}
form {
margin: 0px;
}
textarea, input, select, button, a {
-moz-box-sizing: border-box;
box-sizing: border-box;
font-size: 9pt;
float: left;
vertical-align: middle;
}
button {
float: none;
text-decoration: none;
}
textarea {
border: 1px solid #9999ff;
color: #001;
background: #ddf;
border: 1px solid #44d;
}
br {
clear: left;
}
div.statusNotRunning {
float: left;
width: 68px;
height: 24px;
overflow: hidden;
color: #d00;
background: url('images/console_status_stopped.png') 0 0 no-repeat;
padding-top: 24px;
margin-top: 4px;
}
div.statusRunning {
float: left;
width: 68px;
height: 24px;
overflow: hidden;
color: #0b0;
background: url('images/console_status_running.png') 0 0 no-repeat;
padding-top: 24px;
margin-top: 4px;
}
div.statusStarting {
float: left;
width: 68px;
height: 24px;
overflow: hidden;
color: #339933;
background: url('images/console_status_starting.png') 0 0 no-repeat;
padding-top: 24px;
margin-top: 4px;
}
hr {
display: none;
}
.separator, .subdivider {
clear: both;
height: 1px;
margin: 1px 0px 1px 0px;
border-bottom: 1px solid #225;
/*
display: none;
*/
}
.subdivider {
border-bottom: 1px solid #225;
padding: 5px 0px 0px 0px;
}
.freetext {
width: 150px;
height: 24px;
border: 1px solid #44d;
padding: 2px;
margin: 4px 0 2px 0px;
font: 10pt "Lucida Console", "DejaVu Sans Mono", Courier, mono;
font-weight: bold;
background: #ddf;
color: #001;
-moz-border-radius: 0 4px 4px 0;
-khtml-border-radius: 0 4px 4px 0;
border-radius: 0 4px 4px 0;
/*
-moz-box-shadow: inset 0px -1px 1px 0px #fff;
*/
}
.control, control:link, control:visited {
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
min-width: 60px;
font-weight: bold;
background: #ffe;
color: #001;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
text-decoration: none;
}
/*
.control:active {
border: 1px inset;
background-color: #003;
color: #f60;
text-decoration: none;
}
*/
.control:hover, control:visited:hover {
border: 1px solid #eef;
background-color: #f60;
color: #fff !important;
text-decoration: none;
}
.control:link, control:visited {
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
min-width: 60px;
font-weight: bold;
color: #001;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: #ffe url(images/header.png) center center repeat:x !important;
text-decoration: none;
}
.panel {
width: 800px;
margin: 16px auto 16px auto;
overflow: hidden;
text-align: left !important;
font-size: 7pt;
background-color: #fff;
background: url(images/magic.png);
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
border: 1px solid #002;
padding: 10px 20px;
-moz-box-shadow: inset 0px 0px 1px 0px #002;
background: none repeat scroll 0 0 #EEEEFF;
background: #fff url(images/magic.png);
border: 1px solid #444477;
color: #000011;
}
.panel .footer {
float: right;
padding: 4px;
}
.toolbox {
float: right;
}
.rowItem {
width: 750px;
float: left;
margin: 0px;
}
.comment {
font-weight: bold;
display: block;
padding: 2px 10px 0 20px;
text-align: left;
}
.text {
height: 24px;
width: 150px;
padding: 0 0 0 2px;
float: left;
margin: 0;
font-size: 9pt !important;
font-weight: bold;
}
.accessKey {
text-decoration: underline;
}
#globalOperationsPanel {
background-color: #fff;
border: 1px solid #003;
padding: 5px 20px 11px 10px;
-moz-box-shadow: inset 0px 0px 0px 1px #f00;
-moz-box-shadow: inset 0px 0px 1px 0px #f60;
background: #fff url(images/magic.png);
border: 1px solid #444477;
color: #613;
}
#globalOperationsPanel .control {
min-width: 120px;
}
#globalOperationsPanel .control:link {
min-width: 120px;
}
globalOperationsPanel .control:link {
min-width: 120px;
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
font-weight: bold;
background-color: #bbbbff;
color: black;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: #ffe url(images/header.png) 0 0 repeat: x !important;
}
globalOperationsPanel .control:visited {
min-width: 120px;
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
font-weight: bold;
background-color: #ffe;
color: black;
border: 1px outset #ddddc0;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: url(images/header.png) 0 0 repeat: x !important;
}
globalOperationsPanel .control:hover {
min-width: 120px;
margin: 4px 0 0 4px !important;
padding: 2px;
overflow: hidden;
font-weight: bold;
background-color: #003;
color: #f60;
border: 1px outset #fff;
text-align: center;
white-space: nowrap;
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
margin-top: 8px;
background: url(images/header_on.png) 0 0 repeat: x !important;
}
.header {
-moz-border-radius: 4px;
-khtml-border-radius: 4px;
border-radius: 4px;
}
select {
background-color: #eef;
color: #001;
margin: 4px;
font-family: "Lucida Sans Unicode", Verdana, Tahoma, Helvetica, sans-serif;
font-weight: bold;
border: 1px solid #001;
padding: 2px;
min-width: 270px;
font-size: 8pt;
max-height: 24px;
}
a:link{
color: #613;
text-decoration: none;
font-weight: bold;
word-wrap: break-word;
}
a:visited{
color: #606;
text-decoration: none;
font-weight: bold;
}
a:hover{
color: #f60;
text-decoration: underline;
font-weight: bold;
}
a:active{
color: #f93;
text-decoration: underline;
font-weight: bold;
}

View File

@ -114,7 +114,7 @@ div.warning h3 {
font-variant: small-caps;
text-transform: capitalize;
font-size: 12.5pt;
background: none;
background: none !important;
}
/* console error messages */
@ -428,6 +428,11 @@ div.news li {
font-size: 10pt;
color: #eef;
text-transform: capitalize;
font-weight: bold;
}
div.news h3 {
text-align: left !important;
}
div.news p {
@ -464,11 +469,11 @@ div.news hr {
background: #99f;
height: 1px;
border: 0px solid #99f;
margin: 20px 0 2px 0;
margin: 10px 0 2px 0;
}
div.confignav {
padding: 15px 0;
padding: 14px 0 15px;
background: #000018;
margin: -16px -16px 0 -16px;
border: 1px solid #99f;
@ -552,7 +557,7 @@ h1 {
text-shadow: 0px 0px 2px rgba(255, 255, 255, 0.4);
text-align: center;
border: 1px solid #99f;
padding: 16px 10px 16px 10px;
padding: 15px 10px;
margin: 5px 5px 0 200px;
line-height: 93%;
text-transform: uppercase;
@ -816,8 +821,7 @@ p {
}
.links b {
margin-bottom: 25px !important;
line-height: 250%;
line-height: 170%;
letter-spacing: 0.12em !important;
}
@ -943,10 +947,11 @@ div.footnote {
text-align: right;
color: #99f;
font-size: 7pt;
margin-bottom: -5px;
}
div.footnote hr{
margin: 15px 0 5px 0 !important;
margin: 15px 0 3px 0 !important;
color: #99f;
background: #99f;
height: 1px;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -18,10 +18,10 @@ public class RouterVersion {
/** deprecated */
public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 37;
public final static long BUILD = 4;
/** for example "-test" */
public final static String EXTRA = "-rc";
public final static String EXTRA = "";
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
public static void main(String args[]) {
System.out.println("I2P Router version: " + FULL_VERSION);

View File

@ -40,14 +40,15 @@ public class Reseeder {
// Reject unreasonably big files, because we download into a ByteArrayOutputStream.
private static final long MAX_RESEED_RESPONSE_SIZE = 1024 * 1024;
private static final String DEFAULT_SEED_URL =
public static final String DEFAULT_SEED_URL =
"http://a.netdb.i2p2.de/,http://b.netdb.i2p2.de/,http://c.netdb.i2p2.de/," +
"http://reseed.i2p-projekt.de/,http://www.i2pbote.net/netDb/,http://r31453.ovh.net/static_media/netDb/";
"http://reseed.i2p-projekt.de/,http://www.i2pbote.net/netDb/,http://r31453.ovh.net/static_media/files/netDb/";
/** @since 0.8.2 */
private static final String DEFAULT_SSL_SEED_URL =
public static final String DEFAULT_SSL_SEED_URL =
"https://a.netdb.i2p2.de/,https://c.netdb.i2p2.de/," +
"https://www.i2pbote.net/netDb/";
"https://www.i2pbote.net/netDb/," +
"https://r31453.ovh.net/static_media/files/netDb/";
private static final String PROP_INPROGRESS = "net.i2p.router.web.ReseedHandler.reseedInProgress";
/** the console shows this message while reseedInProgress == false */
@ -62,11 +63,8 @@ public class Reseeder {
public static final String PROP_SSL_DISABLE = "router.reseedSSLDisable";
/** @since 0.8.2 */
public static final String PROP_SSL_REQUIRED = "router.reseedSSLRequired";
private static final String RESEED_TIPS =
_x("Ensure that nothing blocks outbound HTTP, check <a target=\"_top\" href=\"logs.jsp\">logs</a> " +
"and if nothing helps, read the <a target=\"_top\" href=\"http://www.i2p2.de/faq.html\">FAQ</a> about reseeding manually.");
/** @since 0.8.3 */
public static final String PROP_RESEED_URL = "i2p.reseedURL";
public Reseeder(RouterContext ctx) {
_context = ctx;
@ -127,7 +125,9 @@ public class Reseeder {
System.out.println(
"Ensure that nothing blocks outbound HTTP, check the logs, " +
"and if nothing helps, read the FAQ about reseeding manually.");
System.setProperty(PROP_ERROR, _("Reseed failed.") + ' ' + _(RESEED_TIPS));
System.setProperty(PROP_ERROR, _("Reseed failed.") + ' ' +
_("See {0} for help.",
"<a target=\"_top\" href=\"/configreseed\">" + _("reseed configuration page") + "</a>"));
}
System.setProperty(PROP_INPROGRESS, "false");
System.clearProperty(PROP_STATUS);
@ -164,7 +164,7 @@ public class Reseeder {
*/
private int reseed(boolean echoStatus) {
List<String> URLList = new ArrayList();
String URLs = _context.getProperty("i2p.reseedURL");
String URLs = _context.getProperty(PROP_RESEED_URL);
boolean defaulted = URLs == null;
boolean SSLDisable = _context.getBooleanProperty(PROP_SSL_DISABLE);
if (defaulted) {
@ -180,7 +180,7 @@ public class Reseeder {
if (defaulted && !SSLDisable) {
// put the non-SSL at the end of the SSL
List<String> URLList2 = new ArrayList();
tok = new StringTokenizer(DEFAULT_SSL_SEED_URL, " ,");
tok = new StringTokenizer(DEFAULT_SEED_URL, " ,");
while (tok.hasMoreTokens())
URLList2.add(tok.nextToken().trim());
Collections.shuffle(URLList2);
@ -368,6 +368,11 @@ public class Reseeder {
return Translate.getString(key, _context, BUNDLE_NAME);
}
/** translate */
private String _(String s, Object o) {
return Translate.getString(s, o, _context, BUNDLE_NAME);
}
/** translate */
private String _(String s, Object o, Object o2) {
return Translate.getString(s, o, o2, _context, BUNDLE_NAME);

View File

@ -150,7 +150,7 @@ public class WorkingDir {
success &= migrateJettyXml(oldDirf, dirf);
success &= migrateClientsConfig(oldDirf, dirf);
// for later news.xml updates (we don't copy initialNews.xml over anymore)
success &= (new SecureDirectory(dirf, "docs")) .mkdir();
success &= (new SecureDirectory(dirf, "docs")).mkdir();
// Report success or failure
if (success) {

View File

@ -63,6 +63,10 @@ public class NTCPTransport extends TransportImpl {
private long _lastBadSkew;
private static final long[] RATES = { 10*60*1000 };
// Opera doesn't have the char, TODO check UA
//private static final String THINSP = "&thinsp;/&thinsp;";
private static final String THINSP = " / ";
public NTCPTransport(RouterContext ctx) {
super(ctx);
@ -756,7 +760,7 @@ public class NTCPTransport extends TransportImpl {
buf.append("<img src=\"/themes/console/images/outbound.png\" alt=\"Outbound\" title=\"").append(_("Outbound")).append("\"/>");
buf.append("</td><td class=\"cells\" align=\"right\">");
buf.append(DataHelper.formatDuration2(con.getTimeSinceReceive()));
buf.append("&thinsp;/&thinsp;").append(DataHelper.formatDuration2(con.getTimeSinceSend()));
buf.append(THINSP).append(DataHelper.formatDuration2(con.getTimeSinceSend()));
buf.append("</td><td class=\"cells\" align=\"right\">");
if (con.getTimeSinceReceive() < 10*1000) {
buf.append(formatRate(con.getRecvRate()/1024));
@ -764,7 +768,7 @@ public class NTCPTransport extends TransportImpl {
} else {
buf.append(formatRate(0));
}
buf.append("&thinsp;/&thinsp;");
buf.append(THINSP);
if (con.getTimeSinceSend() < 10*1000) {
buf.append(formatRate(con.getSendRate()/1024));
bpsSend += con.getSendRate();
@ -801,7 +805,7 @@ public class NTCPTransport extends TransportImpl {
if (!peers.isEmpty()) {
// buf.append("<tr> <td colspan=\"11\"><hr></td></tr>\n");
buf.append("<tr class=\"tablefooter\"><td align=\"center\"><b>").append(peers.size()).append(' ').append(_("peers")).append("</b></td><td>&nbsp;</td><td>&nbsp;");
buf.append("</td><td align=\"center\"><b>").append(formatRate(bpsRecv/1024)).append("&thinsp;/&thinsp;").append(formatRate(bpsSend/1024)).append("</b>");
buf.append("</td><td align=\"center\"><b>").append(formatRate(bpsRecv/1024)).append(THINSP).append(formatRate(bpsSend/1024)).append("</b>");
buf.append("</td><td align=\"center\"><b>").append(DataHelper.formatDuration2(totalUptime/peers.size()));
buf.append("</b></td><td align=\"center\"><b>").append(DataHelper.formatDuration2(offsetTotal*1000/peers.size()));
buf.append("</b></td><td align=\"center\"><b>").append(totalSend).append("</b></td><td align=\"center\"><b>").append(totalRecv);

View File

@ -170,6 +170,10 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
private static final int TRANSIENT_FAIL_BID = 8;
private final TransportBid[] _cachedBid;
// Opera doesn't have the char, TODO check UA
//private static final String THINSP = "&thinsp;/&thinsp;";
private static final String THINSP = " / ";
public UDPTransport(RouterContext ctx) {
super(ctx);
_context = ctx;
@ -1982,7 +1986,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append("<td class=\"cells\" align=\"right\">");
buf.append(DataHelper.formatDuration2(idleIn));
buf.append("&thinsp/&thinsp;");
buf.append(THINSP);
buf.append(DataHelper.formatDuration2(idleOut));
buf.append("</td>");
@ -1991,7 +1995,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append("<td class=\"cells\" align=\"right\" nowrap>");
buf.append(formatKBps(recvBps));
buf.append("&thinsp;/&thinsp;");
buf.append(THINSP);
buf.append(formatKBps(sendBps));
//buf.append(" K/s");
//buf.append(formatKBps(peer.getReceiveACKBps()));
@ -2017,9 +2021,9 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append("<td class=\"cells\" align=\"right\">");
buf.append(sendWindow/1024);
buf.append("K");
buf.append("&thinsp;/&thinsp;").append(peer.getConcurrentSends());
buf.append("&thinsp;/&thinsp;").append(peer.getConcurrentSendWindow());
buf.append("&thinsp;/&thinsp;").append(peer.getConsecutiveSendRejections());
buf.append(THINSP).append(peer.getConcurrentSends());
buf.append(THINSP).append(peer.getConcurrentSendWindow());
buf.append(THINSP).append(peer.getConsecutiveSendRejections());
buf.append("</td>");
buf.append("<td class=\"cells\" align=\"right\">");
@ -2042,7 +2046,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
buf.append("</td>");
buf.append("<td class=\"cells\" align=\"right\">");
buf.append(peer.getMTU()).append("&thinsp;/&thinsp;").append(peer.getReceiveMTU());
buf.append(peer.getMTU()).append(THINSP).append(peer.getReceiveMTU());
//.append('/');
//buf.append(peer.getMTUIncreases()).append('/');
@ -2102,7 +2106,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
// buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n");
buf.append("<tr class=\"tablefooter\"> <td colspan=\"3\" align=\"left\"><b>").append(_("SUMMARY")).append("</b></td>" +
"<td align=\"center\" nowrap><b>");
buf.append(formatKBps(bpsIn)).append("&thinsp;/&thinsp;").append(formatKBps(bpsOut));
buf.append(formatKBps(bpsIn)).append(THINSP).append(formatKBps(bpsOut));
long x = numPeers > 0 ? uptimeMsTotal/numPeers : 0;
buf.append("</b></td>" +
"<td align=\"center\"><b>").append(DataHelper.formatDuration2(x));