propagate from branch 'i2p.i2p' (head b7ee04ecc7a594239e977b25a52ebdabadce558e)

to branch 'i2p.i2p.zzz.jetty6' (head 2cd4a4dae8b87b9ed2128d83aff1b39e3a818556)
This commit is contained in:
zzz
2012-01-08 14:55:10 +00:00
110 changed files with 16328 additions and 6694 deletions

View File

@ -20,6 +20,7 @@ source_lang = en
trans.ar = apps/routerconsole/locale/messages_ar.po
trans.da = apps/routerconsole/locale/messages_da.po
trans.de = apps/routerconsole/locale/messages_de.po
trans.et_EE = apps/routerconsole/locale/messages_ee.po
trans.es = apps/routerconsole/locale/messages_es.po
trans.fi = apps/routerconsole/locale/messages_fi.po
trans.fr = apps/routerconsole/locale/messages_fr.po

View File

@ -2,7 +2,7 @@ This product includes both public domain code and licensed code as described bel
For all code, unless otherwise stated in the appropriate license, the following applies:
NO WARRANTY
NO WARRANTY
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@ -92,34 +92,34 @@ Installer:
See licenses/LICENSE-Launch4j.txt (in binary packages)
See installer/lib/launch4j/LICENSE.txt (in source packages)
The following projects are used by Launch4j...
MinGW binutils (http://www.mingw.org/)
MinGW binutils (http://www.mingw.org/)
Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)
Commons BeanUtils (http://jakarta.apache.org/commons/beanutils/)
Commons Logging (http://jakarta.apache.org/commons/logging/)
Commons Logging (http://jakarta.apache.org/commons/logging/)
See licenses/LICENSE-Apache2.0.txt
See licenses/NOTICE-Commons-Logging.txt
XStream (http://xstream.codehaus.org/)
XStream (http://xstream.codehaus.org/)
Copyright (c) 2003-2004, Joe Walnes
See licenses/LICENSE-XStream.txt
JGoodies Forms (http://www.jgoodies.com/freeware/forms/)
JGoodies Forms (http://www.jgoodies.com/freeware/forms/)
Copyright (c) 2002-2004 JGoodies Karsten Lentzsch. All rights reserved.
See licenses/LICENSE-JGoodies-Forms.txt
JGoodies Looks (http://www.jgoodies.com/freeware/looks/)
JGoodies Looks (http://www.jgoodies.com/freeware/looks/)
Copyright (c) 2003 JGoodies Karsten Lentzsch. All rights reserved.
See licenses/LICENSE-JGoodies-Looks.txt
Foxtrot (http://foxtrot.sourceforge.net/)
Foxtrot (http://foxtrot.sourceforge.net/)
Copyright (c) 2002, Simone Bordet & Marco Cravero. All rights reserved.
See licenses/LICENSE-Foxtrot.txt
Nuvola Icon Theme (http://www.icon-king.com)
Nuvola Icon Theme (http://www.icon-king.com)
See licenses/LICENSE-LGPLv2.1.txt
Forms were created using Abeille Forms Designer (https://abeille.dev.java.net/)
Forms were created using Abeille Forms Designer (https://abeille.dev.java.net/)
Izpack 4.3.0:
Copyright (c) 2001-2008 Julien Ponge
@ -127,7 +127,7 @@ Installer:
Java Service Wrapper Community Edition 32-bit 3.5.9:
Java Service Wrapper Community Edition 32-bit 3.5.13:
Copyright (C) 1999-2011 Tanuki Software, Ltd. All Rights Reserved.
See licenses/LICENSE-Wrapper.txt
@ -135,10 +135,6 @@ Java Service Wrapper Community Edition 32-bit 3.5.9:
Jbigi Libraries (jbigi.jar):
JNI code public domain.
GMP 4.1.3 / 4.1.4:
Copyright 1991, 1996, 1999, 2000 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv2.1.txt
GMP 4.3.2 / 5.0.2:
Copyright 1991, 1996, 1999, 2000, 2007 Free Software Foundation, Inc.
See licenses/LICENSE-LGPLv3.txt
@ -198,7 +194,7 @@ Applications:
Flag icons:
- Jersey and EU flag icons: public domain, courtesy Xrmap flag
collection http://www.arvernes.com/wiki/index.php/Xrmap
- Guernsey flag from the Open Clip Art Library, released into the public domain
- Guernsey and Isle of Man flags from the Open Clip Art Library, released into the public domain
- All other flag icons: public domain, courtesy mjames@gmail.com http://www.famfamfam.com/
Silk icons: See licenses/LICENSE-SilkIcons.txt

View File

@ -614,7 +614,8 @@ public class Storage
} catch (Exception ex) {
ex.printStackTrace();
}
} }
}
}
_filterNameCache.put(name, rv);
return rv;
}

View File

@ -2073,9 +2073,11 @@ private static class FetchAndAdd implements Runnable {
// buf.append("<input type=\"hidden\" name=\"p\" value=\"").append(peerParam).append("\" >\n");
buf.append(_("Torrent was not retrieved from {0}", urlify(_url)));
String link = _url.replace("&", "&amp;").replace(" ", "%20").replace(":", "%3A").replace("/", "%2F");
/**** FIXME ticket #575
buf.append(" - [<a href=\"/i2psnark/?newURL=").append(link).append("#add\" >");
buf.append(_("Retry"));
buf.append("</a>]");
****/
_manager.addMessage(buf.toString());
}
} finally {

View File

@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-12 11:15+0000\n"
"PO-Revision-Date: 2011-10-07 01:47+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"POT-Creation-Date: 2011-12-27 22:38+0000\n"
"PO-Revision-Date: 2011-12-18 10:52+0000\n"
"Last-Translator: punkibastardo <punkibastardo@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
"Language: es\n"
@ -171,7 +171,7 @@ msgstr "No se puede abrir \"{0}\""
#: ../java/src/org/klomp/snark/SnarkManager.java:661
#: ../java/src/org/klomp/snark/SnarkManager.java:737
#: ../java/src/org/klomp/snark/SnarkManager.java:792
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2036
#, java-format
msgid "Torrent with this info hash is already running: {0}"
msgstr "Ya hay un Torrent con este hash: {0}."
@ -202,7 +202,7 @@ msgid "Torrent in \"{0}\" is invalid"
msgstr "El archivo .torrent en \"{0}\" no es válido."
#: ../java/src/org/klomp/snark/SnarkManager.java:699
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2057
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2058
#, java-format
msgid "ERROR - Out of memory, cannot create torrent from {0}"
msgstr "ERROR - Falta de memoria, no se puede crear un torrent de {0}."
@ -357,10 +357,10 @@ msgstr "Foro"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:251
msgid "Click \"Add torrent\" button to fetch torrent"
msgstr ""
msgstr "Click en el botón \"Añadir torrent\" para cargar un torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:290
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1778
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1779
msgid "Status"
msgstr "Estado"
@ -462,9 +462,8 @@ msgstr[0] "1 par conectado"
msgstr[1] "{0} pares conectados"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:498
#, fuzzy
msgid "Opening the I2P tunnel"
msgstr "Detener todos los torrents y el túnel I2P"
msgstr "Abriendo el túnel I2P"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:505
#, java-format
@ -573,7 +572,7 @@ msgstr "sembrando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1724
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1829
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1830
msgid "Complete"
msgstr "completo"
@ -911,7 +910,7 @@ msgstr "Finalización"
#. else unknown
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1726
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1775
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1776
msgid "Size"
msgstr "Tamaño"
@ -931,71 +930,79 @@ msgstr "Tamaño de las partes"
msgid "Magnet link"
msgstr "Enlace de magnet"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1773
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1812
#. We don't have the hash of the torrent file
#. buf.append("<br>").append(_("Maggot link")).append(": <a href=\"").append(MAGGOT).append(hex).append(':').append(hex).append("\">")
#. .append(MAGGOT).append(hex).append(':').append(hex).append("</a>");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1762
#, fuzzy
msgid "Torrent file"
msgstr "Detalles del torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1774
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1813
msgid "Directory"
msgstr "Carpeta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1782
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1783
msgid "Priority"
msgstr "Prioridad"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1787
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1788
msgid "Up to higher level directory"
msgstr "Subir una herarquía"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1817
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1818
msgid "Torrent not found?"
msgstr "¿No se encotró el archivo torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1826
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1827
msgid "File not found in torrent?"
msgstr "¿Archivo no encontrado en el torrent?"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1839
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1840
msgid "complete"
msgstr "completo"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1840
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1841
msgid "bytes remaining"
msgstr "Bytes faltando"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1865
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1866
msgid "Open"
msgstr "abrir"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1891
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1892
msgid "High"
msgstr "alta"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1896
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1897
msgid "Normal"
msgstr "normal"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1901
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1902
msgid "Skip"
msgstr "dejar de lado"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1910
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1911
msgid "Save priorities"
msgstr "Guardar prioridades"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2026
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2027
#, java-format
msgid "Torrent fetched from {0}"
msgstr "Torrent obtenido desde {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2047
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2048
#, java-format
msgid "Torrent already running: {0}"
msgstr "Torrent ya en marcha: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2049
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2050
#, java-format
msgid "Torrent already in the queue: {0}"
msgstr "Torrent ya encolado: {0}"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2055
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2056
#, java-format
msgid "Torrent at {0} was not valid"
msgstr "Torrent en {0} no era válido"
@ -1004,11 +1011,11 @@ msgstr "Torrent en {0} no era válido"
#. String peerParam = req.getParameter("p");
#. if (peerParam != null)
#. buf.append("<input type=\"hidden\" name=\"p\" value=\"").append(peerParam).append("\" >\n");
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2069
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2070
#, java-format
msgid "Torrent was not retrieved from {0}"
msgstr "El torrent no se ha podido obtener de {0}."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2072
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2073
msgid "Retry"
msgstr ""
msgstr "Reintentar"

File diff suppressed because it is too large Load Diff

View File

@ -8,8 +8,12 @@ import net.i2p.apps.systray.UrlLauncher;
import net.i2p.router.Router;
import net.i2p.router.RouterContext;
import net.i2p.router.startup.ClientAppConfig;
import net.i2p.util.Log;
import org.tanukisoftware.wrapper.WrapperManager;
import org.tanukisoftware.wrapper.event.WrapperControlEvent;
import org.tanukisoftware.wrapper.event.WrapperEvent;
import org.tanukisoftware.wrapper.event.WrapperEventListener;
/**
* Handler to deal with form submissions from the service config form and act
@ -18,6 +22,10 @@ import org.tanukisoftware.wrapper.WrapperManager;
*/
public class ConfigServiceHandler extends FormHandler {
private static WrapperEventListener _signalHandler;
private static final String PROP_GRACEFUL_HUP = "router.gracefulHUP";
/**
* Register two shutdown hooks, one to rekey and/or tell the wrapper we are stopping,
* and a final one to tell the wrapper we are stopped.
@ -127,6 +135,79 @@ public class ConfigServiceHandler extends FormHandler {
}
}
/**
* Register a handler for signals,
* so we can handle HUP from the wrapper (non-Windows only)
*
* @since 0.8.13
*/
synchronized static void registerSignalHandler(RouterContext ctx) {
if (ctx.hasWrapper() && _signalHandler == null &&
!System.getProperty("os.name").startsWith("Win")) {
_signalHandler = new SignalHandler(ctx);
long mask = WrapperEventListener.EVENT_FLAG_CONTROL;
WrapperManager.addWrapperEventListener(_signalHandler, mask);
}
}
/**
* Unregister the handler for signals
*
* @since 0.8.13
*/
public synchronized static void unregisterSignalHandler() {
if (_signalHandler != null) {
WrapperManager.removeWrapperEventListener(_signalHandler);
_signalHandler = null;
}
}
/**
* Catch signals.
* The wrapper will potentially forward HUP, USR1, and USR2.
* But USR1 and USR2 are used by the JVM GC and cannot be trapped.
* So we will only get HUP.
*
* @since 0.8.13
*/
private static class SignalHandler implements WrapperEventListener {
private final RouterContext _ctxt;
public SignalHandler(RouterContext ctx) {
_ctxt = ctx;
}
public void fired(WrapperEvent event) {
if (!(event instanceof WrapperControlEvent))
return;
WrapperControlEvent wce = (WrapperControlEvent) event;
Log log = _ctxt.logManager().getLog(ConfigServiceHandler.class);
if (log.shouldLog(Log.WARN))
log.warn("Got signal: " + wce.getControlEventName());
int sig = wce.getControlEvent();
switch (sig) {
case WrapperManager.WRAPPER_CTRL_HUP_EVENT:
if (_ctxt.getBooleanProperty(PROP_GRACEFUL_HUP)) {
wce.consume();
if (!(_ctxt.router().gracefulShutdownInProgress() ||
_ctxt.router().isFinalShutdownInProgress())) {
System.err.println("WARN: Graceful shutdown initiated by SIGHUP");
log.logAlways(Log.WARN, "Graceful shutdown initiated by SIGHUP");
registerWrapperNotifier(_ctxt, Router.EXIT_GRACEFUL, false);
_ctxt.router().shutdownGracefully();
}
} else {
log.log(Log.CRIT, "Hard shutdown initiated by SIGHUP");
// JVM will call ShutdownHook if we don't do it ourselves
//wce.consume();
//registerWrapperNotifier(_ctxt, Router.EXIT_HARD, false);
//_ctxt.router().shutdown(Router.EXIT_HARD);
}
break;
}
}
}
@Override
protected void processForm() {
if (_action == null) return;
@ -194,6 +275,7 @@ public class ConfigServiceHandler extends FormHandler {
addFormError(_("Warning: unable to install the service") + " - " + ioe.getMessage());
}
}
private void uninstallService() {
try {
Runtime.getRuntime().exec("uninstall_i2p_service_winnt.bat");

View File

@ -53,14 +53,14 @@ public class ConfigUIHelper extends HelperBase {
* Any language-specific flag added to the icon set must be
* added to the top-level build.xml for the updater.
*/
private static final String langs[] = {"ar", "da", "de", "en", "es", "fi",
private static final String langs[] = {"ar", "da", "de", "ee", "en", "es", "fi",
"fr", "it", "nl", "pl", "pt", "ru",
"sv", "uk", "vi", "zh"};
private static final String flags[] = {"lang_ar", "dk", "de", "us", "es", "fi",
private static final String flags[] = {"lang_ar", "dk", "de", "ee", "us", "es", "fi",
"fr", "it", "nl", "pl", "pt", "ru",
"se", "ua", "vn", "cn"};
private static final String xlangs[] = {_x("Arabic"), _x("Danish"),
_x("German"), _x("English"), _x("Spanish"),_x("Finnish"),
_x("German"), _x("Estonian"), _x("English"), _x("Spanish"), _x("Finnish"),
_x("French"), _x("Italian"), _x("Dutch"), _x("Polish"),
_x("Portuguese"), _x("Russian"), _x("Swedish"),
_x("Ukrainian"), _x("Vietnamese"), _x("Chinese")};

View File

@ -10,7 +10,7 @@ import org.mortbay.jetty.Server;
public class LogsHelper extends HelperBase {
public LogsHelper() {}
/** @since 0.8.11 */
/** @since 0.8.12 */
public String getJettyVersion() {
return Server.getVersion();
}

View File

@ -376,9 +376,8 @@ public class NetDbRenderer {
int cost = addr.getCost();
if (!((style.equals("SSU") && cost == 5) || (style.equals("NTCP") && cost == 10)))
buf.append('[').append(_("cost")).append('=').append("" + cost).append("] ");
Properties p = new OrderedProperties();
p.putAll(addr.getOptions());
for (Map.Entry e : p.entrySet()) {
Map p = addr.getOptionsMap();
for (Map.Entry e : (Set<Map.Entry>) p.entrySet()) {
String name = (String) e.getKey();
String val = (String) e.getValue();
buf.append('[').append(_(DataHelper.stripHTML(name))).append('=').append(DataHelper.stripHTML(val)).append("] ");
@ -387,9 +386,10 @@ public class NetDbRenderer {
buf.append("</td></tr>\n");
if (full) {
buf.append("<tr><td>" + _("Stats") + ": <br><code>");
for (Iterator iter = info.getOptions().keySet().iterator(); iter.hasNext(); ) {
String key = (String)iter.next();
String val = info.getOption(key);
Map p = info.getOptionsMap();
for (Map.Entry e : (Set<Map.Entry>) p.entrySet()) {
String key = (String) e.getKey();
String val = (String) e.getValue();
buf.append(DataHelper.stripHTML(key)).append(" = ").append(DataHelper.stripHTML(val)).append("<br>\n");
}
buf.append("</code></td></tr>\n");
@ -412,7 +412,7 @@ public class NetDbRenderer {
if (style.equals("NTCP")) {
rv |= NTCP;
} else if (style.equals("SSU")) {
if (addr.getOptions().getProperty("iport0") != null)
if (addr.getOption("iport0") != null)
rv |= SSUI;
else
rv |= SSU;

View File

@ -17,6 +17,7 @@ import java.util.Properties;
import java.util.StringTokenizer;
import java.util.concurrent.ConcurrentHashMap;
import net.i2p.CoreVersion;
import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
import net.i2p.router.Job;
@ -27,6 +28,7 @@ import net.i2p.util.ConcurrentHashSet;
import net.i2p.util.FileUtil;
import net.i2p.util.Log;
import net.i2p.util.Translate;
import net.i2p.util.VersionComparator;
import org.mortbay.jetty.handler.ContextHandlerCollection;
@ -95,6 +97,41 @@ public class PluginStarter implements Runnable {
log.error("Cannot start nonexistent plugin: " + appName);
return false;
}
Properties props = pluginProperties(ctx, appName);
String minVersion = ConfigClientsHelper.stripHTML(props, "min-i2p-version");
if (minVersion != null &&
(new VersionComparator()).compare(CoreVersion.VERSION, minVersion) < 0) {
String foo = "Plugin " + appName + " requires I2P version " + minVersion + " or higher";
log.error(foo);
throw new Exception(foo);
}
minVersion = ConfigClientsHelper.stripHTML(props, "min-java-version");
if (minVersion != null &&
(new VersionComparator()).compare(System.getProperty("java.version"), minVersion) < 0) {
String foo = "Plugin " + appName + " requires Java version " + minVersion + " or higher";
log.error(foo);
throw new Exception(foo);
}
String jVersion = LogsHelper.jettyVersion();
minVersion = ConfigClientsHelper.stripHTML(props, "min-jetty-version");
if (minVersion != null &&
(new VersionComparator()).compare(minVersion, jVersion) > 0) {
String foo = "Plugin " + appName + " requires Jetty version " + minVersion + " or higher";
log.error(foo);
throw new Exception(foo);
}
String maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version");
if (maxVersion != null &&
(new VersionComparator()).compare(maxVersion, jVersion) < 0) {
String foo = "Plugin " + appName + " requires Jetty version " + maxVersion + " or lower";
log.error(foo);
throw new Exception(foo);
}
if (log.shouldLog(Log.INFO))
log.info("Starting plugin: " + appName);
@ -113,8 +150,8 @@ public class PluginStarter implements Runnable {
// load and start things in clients.config
File clientConfig = new File(pluginDir, "clients.config");
if (clientConfig.exists()) {
Properties props = new Properties();
DataHelper.loadProps(props, clientConfig);
Properties cprops = new Properties();
DataHelper.loadProps(cprops, clientConfig);
List<ClientAppConfig> clients = ClientAppConfig.getClientApps(clientConfig);
runClientApps(ctx, pluginDir, clients, "start");
}
@ -123,7 +160,7 @@ public class PluginStarter implements Runnable {
ContextHandlerCollection server = WebAppStarter.getConsoleServer();
if (server != null) {
File consoleDir = new File(pluginDir, "console");
Properties props = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath());
Properties wprops = RouterConsoleRunner.webAppProperties(consoleDir.getAbsolutePath());
File webappDir = new File(consoleDir, "webapps");
String fileNames[] = webappDir.list(RouterConsoleRunner.WarFilenameFilter.instance());
if (fileNames != null) {
@ -138,7 +175,7 @@ public class PluginStarter implements Runnable {
log.error("Skipping duplicate webapp " + warName + " in plugin " + appName);
continue;
}
String enabled = props.getProperty(RouterConsoleRunner.PREFIX + warName + ENABLED);
String enabled = wprops.getProperty(RouterConsoleRunner.PREFIX + warName + ENABLED);
if (! "false".equals(enabled)) {
if (log.shouldLog(Log.INFO))
log.info("Starting webapp: " + warName);
@ -181,7 +218,6 @@ public class PluginStarter implements Runnable {
}
// add summary bar link
Properties props = pluginProperties(ctx, appName);
String name = ConfigClientsHelper.stripHTML(props, "consoleLinkName_" + Messages.getLanguage(ctx));
if (name == null)
name = ConfigClientsHelper.stripHTML(props, "consoleLinkName");

View File

@ -334,6 +334,21 @@ public class PluginUpdateHandler extends UpdateHandler {
statusDone("<b>" + _("Plugin update requires installed plugin version {0} or lower", maxVersion) + "</b>");
return;
}
oldVersion = LogsHelper.jettyVersion();
minVersion = ConfigClientsHelper.stripHTML(props, "min-jetty-version");
if (minVersion != null &&
(new VersionComparator()).compare(minVersion, oldVersion) > 0) {
to.delete();
statusDone("<b>" + _("Plugin requires Jetty version {0} or higher", minVersion) + "</b>");
return;
}
maxVersion = ConfigClientsHelper.stripHTML(props, "max-jetty-version");
if (maxVersion != null &&
(new VersionComparator()).compare(maxVersion, oldVersion) < 0) {
to.delete();
statusDone("<b>" + _("Plugin requires Jetty version {0} or lower", maxVersion) + "</b>");
return;
}
// check if it is running first?
try {

View File

@ -477,6 +477,7 @@ public class RouterConsoleRunner {
ctx.addShutdownTask(new NewsShutdown(fetcher, newsThread));
// stat summarizer registers its own hook
ctx.addShutdownTask(new ServerShutdown());
ConfigServiceHandler.registerSignalHandler(ctx);
} // else log CRIT ?
}

View File

@ -41,6 +41,7 @@
<a href="/?lang=zh&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=cn" title="中文" alt="中文"></a>
<a href="/?lang=da&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=dk" title="Danish" alt="Danish"></a>
<a href="/?lang=de&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=de" title="Deutsch" alt="Deutsch"></a>
<a href="/?lang=ee&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=ee" title="Eesti" alt="Eesti"></a>
<a href="/?lang=es&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=es" title="Español" alt="Español"></a>
<a href="/?lang=fi&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=fi" title="Suomi" alt="Suomi"></a>
<a href="/?lang=fr&amp;consoleNonce=<%=consoleNonce%>"><img height="11" width="16" style="padding: 0 2px;" src="/flags.jsp?c=fr" title="Français" alt="Français"></a><br>

File diff suppressed because it is too large Load Diff

View File

@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-12 11:15+0000\n"
"PO-Revision-Date: 2011-12-02 01:53+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"POT-Creation-Date: 2011-12-27 22:37+0000\n"
"PO-Revision-Date: 2011-12-18 10:51+0000\n"
"Last-Translator: punkibastardo <punkibastardo@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
"Language: es\n"
@ -34,7 +34,7 @@ msgstr ""
#. {0,number,####} prevents 1234 from being output as 1,234 in the English locale.
#. If you want the digit separator in your locale, translate as {0}.
#. alternates: msec, msecs
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1261
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1348
#, java-format
msgid "1 ms"
msgid_plural "{0,number,####} ms"
@ -43,7 +43,7 @@ msgstr[1] "{0,number,####} ms"
#. seconds
#. alternates: secs, sec. 'seconds' is probably too long.
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1265
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1352
#, java-format
msgid "1 sec"
msgid_plural "{0} sec"
@ -52,7 +52,7 @@ msgstr[1] "{0} s"
#. minutes
#. alternates: mins, min. 'minutes' is probably too long.
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1269
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1356
#, java-format
msgid "1 min"
msgid_plural "{0} min"
@ -61,61 +61,61 @@ msgstr[1] "{0} min"
#. hours
#. alternates: hrs, hr., hrs.
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1273
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1360
#, java-format
msgid "1 hour"
msgid_plural "{0} hours"
msgstr[0] "1 hora"
msgstr[1] "{0} horas"
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1275
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1362
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:315
msgid "n/a"
msgstr "n/d"
#. days
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1278
#: ../../../core/java/src/net/i2p/data/DataHelper.java:1365
#, java-format
msgid "1 day"
msgid_plural "{0} days"
msgstr[0] "1 día"
msgstr[1] "{0} días"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:124
#: ../../../router/java/src/net/i2p/router/Blocklist.java:128
#, java-format
msgid "Banned by router hash: {0}"
msgstr "Baneado por el hash del router: {0}"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:126
#: ../../../router/java/src/net/i2p/router/Blocklist.java:130
msgid "Banned by router hash"
msgstr "baneado por hash del router"
#. Temporary reason, until the job finishes
#: ../../../router/java/src/net/i2p/router/Blocklist.java:683
#: ../../../router/java/src/net/i2p/router/Blocklist.java:756
#: ../../../router/java/src/net/i2p/router/Blocklist.java:681
#: ../../../router/java/src/net/i2p/router/Blocklist.java:754
#, java-format
msgid "IP banned by blocklist.txt entry {0}"
msgstr "IP baneada por la blocklist.txt: {0}"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:794
#: ../../../router/java/src/net/i2p/router/Blocklist.java:793
msgid "IPs Banned Until Restart"
msgstr "IPs prohibidas hasta el reinicio"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:818
#: ../../../router/java/src/net/i2p/router/Blocklist.java:817
msgid "IPs Permanently Banned"
msgstr "IPs permanentemente prohibidas"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:820
#: ../../../router/java/src/net/i2p/router/Blocklist.java:819
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:74
msgid "From"
msgstr "De"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:822
#: ../../../router/java/src/net/i2p/router/Blocklist.java:821
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:75
msgid "To"
msgstr "A"
#: ../../../router/java/src/net/i2p/router/Blocklist.java:858
#: ../../../router/java/src/net/i2p/router/Blocklist.java:857
#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:47
#: ../java/src/net/i2p/router/web/SummaryHelper.java:410
msgid "none"
@ -128,9 +128,8 @@ msgstr "ninguno"
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:82
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:124
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:524
#, fuzzy
msgid "Rejecting tunnels: Starting up"
msgstr "rechazando túneles: apagando"
msgstr "Rechazando túneles: Iniciando"
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:177
msgid "Rejecting tunnels: High message delay"
@ -250,25 +249,25 @@ msgstr "Entrada de la NetDb"
msgid "No transports (hidden or starting up?)"
msgstr "No hay transportes (oculto o iniciando?)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:450
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:448
msgid "Unreachable on any transport"
msgstr "Inalcanzable en cualquier transporte"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:499
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:497
msgid "Router Transport Addresses"
msgstr "Direcciones de transporte del router "
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:504
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:502
#, java-format
msgid "{0} is used for outbound connections only"
msgstr "{0} se utiliza sólo para conexiones salientes"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:518
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:516
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:137
msgid "Help"
msgstr "Ayuda"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:519
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:517
msgid ""
"Your transport connection limits are automatically set based on your "
"configured bandwidth."
@ -276,7 +275,7 @@ msgstr ""
"Los límites de conexiones de transporte se ajustan automáticamente basándose "
"en el ancho de banda configurado."
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:521
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:519
msgid ""
"To override these limits, add the settings i2np.ntcp.maxConnections=nnn and "
"i2np.udp.maxConnections=nnn on the advanced configuration page."
@ -285,12 +284,12 @@ msgstr ""
"maxConnections = nnn y i2np.udp.maxConnections = nnn en la página de "
"configuración avanzada."
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:521
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:259
msgid "Definitions"
msgstr "Definiciones"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:522
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:729
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1953
#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24
@ -301,78 +300,78 @@ msgstr "Definiciones"
msgid "Peer"
msgstr "Par"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:522
msgid "The remote peer, identified by router hash"
msgstr "El par remoto, identificado por el hash del router"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:525
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:730
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1957
msgid "Dir"
msgstr "Dir"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524
msgid "Inbound connection"
msgstr "Conexión entrante"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526
msgid "Outbound connection"
msgstr "Conexión saliente"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528
msgid "They offered to introduce us (help other peers traverse our firewall)"
msgstr ""
"Se han ofrecido a introducirnos (a ayudar a otros pares a atravesar nuestro "
"cortafuegos)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:532
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530
msgid "We offered to introduce them (help other peers traverse their firewall)"
msgstr ""
"Nos hemos ofrecido a introducirlos (a ayudar a otros compañeros a atravesar "
"su cortafuegos)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531
msgid "How long since a packet has been received / sent"
msgstr "Cuánto tiempo hace que un paquete ha sido recibido / enviado"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:731
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1958
msgid "Idle"
msgstr "inactivo"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:532
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:732
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1963
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:164
msgid "In/Out"
msgstr "Entrante/Saliente"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:532
msgid "The smoothed inbound / outbound transfer rate (KBytes per second)"
msgstr "Tasa de transferencia de entrada / salida (KBytes por segundo)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
msgid "How long ago this connection was established"
msgstr "Cuánto tiempo hace que se estableció esta conexión"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:733
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1968
msgid "Up"
msgstr "Subida"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:734
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1970
msgid "Skew"
msgstr "Desincronización"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:534
msgid "The difference between the peer's clock and your own"
msgstr "La diferencia entre el reloj del par y el tuyo"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535
msgid ""
"The congestion window, which is how many bytes can be sent without an "
"acknowledgement"
@ -380,40 +379,40 @@ msgstr ""
"El rango de congestión, que es la cantidad de bytes que se pueden enviar sin "
"recibir confirmación"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536
msgid "The number of sent messages awaiting acknowledgement"
msgstr "El número de mensajes enviados a la espera de confirmación"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537
msgid "The maximum number of concurrent messages to send"
msgstr "El número máximo de mensajes simultáneos para enviar"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538
msgid "The number of pending sends which exceed congestion window"
msgstr "El número de envíos pendientes que superen el rango de congestión"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539
msgid "The slow start threshold"
msgstr "El umbral de incicio lento"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540
msgid "The round trip time in milliseconds"
msgstr "El tiempo de ida y vuelta en milisegundos"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1980
msgid "Dev"
msgstr "Desv"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541
msgid "The standard deviation of the round trip time in milliseconds"
msgstr "La desviación estándar del tiempo de ida y vuelta en milisegundos"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542
msgid "The retransmit timeout in milliseconds"
msgstr "El tiempo de vencimiento de la retransmisión en milisegundos"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543
msgid ""
"Current maximum send packet size / estimated maximum receive packet size "
"(bytes)"
@ -421,115 +420,115 @@ msgstr ""
"Tamaño máximo actual de envío de paquetes / tamaño máximo estimado de "
"paquetes entrantes (bytes)"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:735
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1987
msgid "TX"
msgstr "TX"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544
msgid "The total number of packets sent to the peer"
msgstr "El número total de paquetes enviados al par"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:736
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1989
msgid "RX"
msgstr "RX"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545
msgid "The total number of packets received from the peer"
msgstr "El número total de paquetes recibidos del par"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1992
msgid "Dup TX"
msgstr "TX dup"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546
msgid "The total number of packets retransmitted to the peer"
msgstr "El número total de paquetes retransmitidos al par"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1994
msgid "Dup RX"
msgstr "RX dup"
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549
#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547
msgid "The total number of duplicate packets received from the peer"
msgstr "El número total de paquetes duplicados recibidos de los pares"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:423
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:437
#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19
msgid "Service"
msgstr "Servicio"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:425
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:439
msgid "WAN Common Interface Configuration"
msgstr "Configuración de la interfaz común WAN"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:426
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:432
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:442
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:447
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:440
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:446
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:456
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461
#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:86
msgid "Status"
msgstr "Estado"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:427
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:433
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:443
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:441
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:447
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:457
msgid "Type"
msgstr "Tipo"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:428
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:434
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:442
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:448
msgid "Upstream"
msgstr "Corriente de subida"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:429
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:435
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:443
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:449
msgid "Downstream"
msgstr "Corriente de descarga"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:431
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:445
msgid "WAN PPP Connection"
msgstr "Conexión WAN PPP"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:436
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:444
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:450
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458
msgid "External IP"
msgstr "IP externa"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:438
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452
msgid "Layer 3 Forwarding"
msgstr "Transmisión en capa 3"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:439
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:453
msgid "Default Connection Service"
msgstr "Servicio de conexión por defecto"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:441
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:455
msgid "WAN IP Connection"
msgstr "Conexión IP WAN"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:446
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460
msgid "WAN Ethernet Link Configuration"
msgstr "Configuración del link Ethernet WAN"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:459
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473
msgid "Found Device"
msgstr "Dispositivo encontrado"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475
msgid "Subdevice"
msgstr "Subdispositivo"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:482
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:496
msgid "UPnP Status"
msgstr "Estado UPnP"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:485
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:499
msgid ""
"UPnP has been disabled; Do you have more than one UPnP Internet Gateway "
"Device on your LAN ?"
@ -537,26 +536,26 @@ msgstr ""
"UPnP se ha deshabilitado; ¿Tienes más de un dispositivo pasarela UPnP en tu "
"red local?"
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:488
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:502
msgid "UPnP has not found any UPnP-aware, compatible device on your LAN."
msgstr ""
"UPnP no ha encontrado ningún dispositivo UPnP compatible en tu red local."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:496
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:510
#, java-format
msgid "The current external IP address reported by UPnP is {0}"
msgstr "La dirección IP externa reportada por UPnP es {0}."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:498
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:512
msgid "The current external IP address is not available."
msgstr "La dirección IP externa no está disponible."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:502
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:516
#, java-format
msgid "UPnP reports the maximum downstream bit rate is {0}bits/sec"
msgstr "UPnP informa que la tasa máxima de bits entrantes es {0}bits/seg."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:504
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:518
#, java-format
msgid "UPnP reports the maximum upstream bit rate is {0}bits/sec"
msgstr "UPnP informa que la tasa máxima de bits salientes es {0}bits/seg."
@ -564,12 +563,12 @@ msgstr "UPnP informa que la tasa máxima de bits salientes es {0}bits/seg."
#. {0} is TCP or UDP
#. {1,number,#####} prevents 12345 from being output as 12,345 in the English locale.
#. If you want the digit separator in your locale, translate as {1}.
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:513
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:527
#, java-format
msgid "{0} port {1,number,#####} was successfully forwarded by UPnP."
msgstr "{0} puerto {1,number,#####} fue enviado con éxito por UPnP."
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:515
#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:529
#, java-format
msgid "{0} port {1,number,#####} was not forwarded by UPnP."
msgstr "{0} puerto {1,number,#####} no fue transmitido por UPnP."
@ -3063,12 +3062,11 @@ msgstr "Noticias chequeadas hace {0}."
#: ../java/src/net/i2p/router/web/NewsFetcher.java:149
msgid "Hide news"
msgstr ""
msgstr "Esconder noticias"
#: ../java/src/net/i2p/router/web/NewsFetcher.java:152
#, fuzzy
msgid "Show news"
msgstr "Mostrar túneles"
msgstr "Mostrar noticias"
#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:77
#, java-format
@ -3648,9 +3646,8 @@ msgid "Anonymous webmail client"
msgstr "Cliente webmail anónimo"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:69
#, fuzzy
msgid "Email"
msgstr "Webmail"
msgstr "Email"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:73
msgid "Built-in anonymous BitTorrent Client"
@ -3661,9 +3658,8 @@ msgid "Torrents"
msgstr "Torrents"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:79
#, fuzzy
msgid "Local web server"
msgstr "Servidor web I2P"
msgstr "Servidor web local"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:89
msgid "Configure I2P Router"
@ -3813,9 +3809,8 @@ msgid "Help with firewall configuration"
msgstr "Ayuda con la configuración del cortafuegos"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:314
#, fuzzy
msgid "Check network connection and NAT/firewall"
msgstr "ERR-No hay pares activos, Compruebe la conexión de red y cortafuegos"
msgstr "Comprobar conexión de red y NAT/cortafuegos"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:334
msgid "Reseed"
@ -4010,7 +4005,7 @@ msgstr "ahora"
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:43
#: ../java/src/net/i2p/router/web/TunnelRenderer.java:65
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:321
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:323
msgid "configure"
msgstr "configurar"
@ -4411,9 +4406,8 @@ msgid "itag2"
msgstr "itag2"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:120
#, fuzzy
msgid "configure bandwidth"
msgstr "Configurar ancho de banda del enrutador I2P"
msgstr "Configurar ancho de banda"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:231
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:232
@ -4525,9 +4519,8 @@ msgid "Enable"
msgstr "Activar"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:270
#, fuzzy
msgid "I2P Bandwidth Configuration"
msgstr "Ajustes de Estadísticas I2P"
msgstr "Configuración de ancho de banda I2P"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:325
msgid "Bandwidth limiter"
@ -4596,9 +4589,8 @@ msgstr ""
"ayudas a la red."
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:384
#, fuzzy
msgid "Advanced network configuration page"
msgstr "Configuración I2P avanzada"
msgstr "Página de configuración de red avanzada"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:386
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:332
@ -4830,9 +4822,8 @@ msgid "Configure I2P Logging Options"
msgstr "Configurar las opciones de registro I2P"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:330
#, fuzzy
msgid "Log file"
msgstr "Nombre de archivo del registro"
msgstr "Archivo de registro"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:334
msgid "(the symbol '@' will be replaced during log rotation)"
@ -6081,7 +6072,7 @@ msgid "I2P Version and Running Environment"
msgstr "Versión I2P y entorno de ejecución"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:205
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:313
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:315
msgid ""
"Note that system information, log timestamps, and log messages may provide "
"clues to your location; please review everything you include in a bug report."
@ -6143,15 +6134,15 @@ msgstr "registros"
msgid "I2P Router Logs"
msgstr "Registros del Router I2P"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:315
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:317
msgid "Critical Logs"
msgstr "Registros críticos"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:319
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:321
msgid "Router Logs"
msgstr "Registros del router"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:325
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:327
msgid "Service (Wrapper) Logs"
msgstr "Registros de servicio (Wrapper)"
@ -6229,27 +6220,3 @@ msgstr "Perfil del par"
#, java-format
msgid "Profile for peer {0}"
msgstr "Perfil del par {0}"
#~ msgid "Anonymous resident webserver"
#~ msgstr "Servidor web residente anónimo "
#~ msgid "Webserver"
#~ msgstr "ServidorWeb"
#~ msgid "Check NAT/firewall"
#~ msgstr "Comprobar NAT/cortafuegos"
#~ msgid "Tunnel Counts By Peer"
#~ msgstr "Cantidad de túneles por par"
#~ msgid "% of total"
#~ msgstr "% de todos"
#~ msgid "Our Tunnels"
#~ msgstr "nuestros túneles"
#~ msgid "Participating Tunnels"
#~ msgstr "participando en"
#~ msgid "Totals"
#~ msgstr "Totales"

File diff suppressed because it is too large Load Diff

View File

@ -14,9 +14,9 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-12 11:15+0000\n"
"PO-Revision-Date: 2011-10-07 01:38+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"POT-Creation-Date: 2011-12-27 22:38+0000\n"
"PO-Revision-Date: 2011-12-18 10:54+0000\n"
"Last-Translator: punkibastardo <punkibastardo@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
"Language: es\n"
@ -653,13 +653,12 @@ msgstr ""
"suscrita a www.i2p2.i2p."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:117
#, fuzzy
msgid ""
"Subscribing to additional sites is easy, just add them to your <a href="
"\"subscriptions\">subscriptions</a> file."
msgstr ""
"Suscribirse a otros sitios es fácil, sólo tienes que añadirlos a tu archivo "
"de <a href=\"subscriptions.jsp\">suscripciones</a>."
"Suscribirse a otras páginas es fácil, sólo añádelas a tu archivo de <a href="
"\"subscriptions\">subscripciones</a>."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:119
msgid ""

View File

@ -7,71 +7,72 @@
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-06-11 08:23+0000\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-27 22:38+0000\n"
"PO-Revision-Date: 2011-06-05 16:26+0000\n"
"Last-Translator: PolishAnon <b790979@klzlk.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/I2P/team/pl/)\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2)\n"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:130
#: ../src/java/src/i2p/susi/dns/AddressBean.java:131
#, java-format
msgid "Host name \"{0}\" contains illegal character {1}"
msgstr "Nazwa hosta \"{0}\" zawiera niedozwolony znak {1}"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:143
#: ../src/java/src/i2p/susi/dns/AddressBean.java:145
#: ../src/java/src/i2p/susi/dns/AddressBean.java:152
#: ../src/java/src/i2p/susi/dns/AddressBean.java:144
#: ../src/java/src/i2p/susi/dns/AddressBean.java:146
#: ../src/java/src/i2p/susi/dns/AddressBean.java:153
#, java-format
msgid "Host name cannot start with \"{0}\""
msgstr "Nazwa hosta nie może zaczynać się od \"{0}\""
#: ../src/java/src/i2p/susi/dns/AddressBean.java:147
#: ../src/java/src/i2p/susi/dns/AddressBean.java:149
#: ../src/java/src/i2p/susi/dns/AddressBean.java:148
#: ../src/java/src/i2p/susi/dns/AddressBean.java:150
#, java-format
msgid "Host name cannot end with \"{0}\""
msgstr "Nazwa hosta nie może kończyć się na \"{0}\""
#: ../src/java/src/i2p/susi/dns/AddressBean.java:154
#: ../src/java/src/i2p/susi/dns/AddressBean.java:155
#, java-format
msgid "Host name cannot contain \"{0}\""
msgstr "Nazwa hosta nie może zawierać \"{0}\""
#: ../src/java/src/i2p/susi/dns/AddressBean.java:157
#: ../src/java/src/i2p/susi/dns/AddressBean.java:158
#, java-format
msgid ""
"Host name \"{0}\" requires conversion to ASCII but the conversion library is"
" unavailable in this JVM"
"Host name \"{0}\" requires conversion to ASCII but the conversion library is "
"unavailable in this JVM"
msgstr ""
"Nazwa hosta \"{0}\" wymaga konwersji na ASCII, ale ta biblioteka konwersji "
"jest niedostępna w tym JVM"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:209
#: ../src/java/src/i2p/susi/dns/AddressBean.java:210
msgid "None"
msgstr "Brak"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:217
#: ../src/java/src/i2p/susi/dns/AddressBean.java:218
msgid "Hashcash"
msgstr "Hashcash"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:219
#: ../src/java/src/i2p/susi/dns/AddressBean.java:220
msgid "Hidden"
msgstr "Ukryty"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:221
#: ../src/java/src/i2p/susi/dns/AddressBean.java:222
msgid "Signed"
msgstr "Podpisano"
#: ../src/java/src/i2p/susi/dns/AddressBean.java:223
#: ../src/java/src/i2p/susi/dns/AddressBean.java:224
#, java-format
msgid "Type {0}"
msgstr "Typ {0}"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:232
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:233
#, java-format
msgid "One result for search within filtered list."
msgid_plural "{0} results for search within filtered list."
@ -79,7 +80,7 @@ msgstr[0] "Jeden wynik wyszukiwania w filtrowanej liście."
msgstr[1] "{0} wyniki wyszukiwania w filtrowanej listy."
msgstr[2] "{0} wyników wyszukiwania w filtrowanej listy."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:236
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:237
#, java-format
msgid "Filtered list contains 1 entry."
msgid_plural "Fltered list contains {0} entries."
@ -87,7 +88,7 @@ msgstr[0] "Filtrowana lista zawiera 1 wpis."
msgstr[1] "Filtrowana lista zawiera {0} wpisy."
msgstr[2] "Filtrowana lista zawiera {0} wpisów."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:241
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:242
#, java-format
msgid "One result for search."
msgid_plural "{0} results for search."
@ -95,7 +96,7 @@ msgstr[0] "Jeden wynik wyszukiwania."
msgstr[1] "{0} wyniki wyszukiwania."
msgstr[2] "{0} wyników wyszukiwania."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:250
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:251
#, java-format
msgid "Address book contains 1 entry."
msgid_plural "Address book contains {0} entries."
@ -103,98 +104,98 @@ msgstr[0] "Książka adresowa zawiera 1 wpis."
msgstr[1] "Książka adresowa zawiera {0} wpisy."
msgstr[2] "Książka adresowa zawiera {0} wpisów."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:266
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:267
#, java-format
msgid "Showing {0} of {1}"
msgstr "Wyświetlono {0} z {1}"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:287
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:288
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:231
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:392
msgid "Add"
msgstr "Dodaj"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:287
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:298
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:288
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:299
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:231
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:243
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:390
msgid "Replace"
msgstr "Zastąp"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:297
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:298
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:242
#, java-format
msgid "Host name {0} is already in address book, unchanged."
msgstr "Nazwa hosta {0} jest już w książce adresowej, bez zmian."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:299
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:300
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:244
#, java-format
msgid ""
"Host name {0} is already in address book with a different destination. Click"
" \"Replace\" to overwrite."
"Host name {0} is already in address book with a different destination. Click "
"\"Replace\" to overwrite."
msgstr ""
"Nazwa hosta {0} jest już w książce adresowej z innym miejscem przeznaczenia."
" Kliknij przycisk \"Zmień\", aby nadpisać."
"Nazwa hosta {0} jest już w książce adresowej z innym miejscem przeznaczenia. "
"Kliknij przycisk \"Zmień\", aby nadpisać."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:311
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:313
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:257
#, java-format
msgid "Destination added for {0}."
msgstr "Miejsce przeznaczenia dodane dla {0}."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:313
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:315
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:259
#, java-format
msgid "Destination changed for {0}."
msgstr "Miejsce przeznaczenia zmienione dla {0}."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:315
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:317
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:261
msgid "Warning - host name does not end with \".i2p\""
msgstr "Uwaga - nazwa hosta nie kończy się na \".i2p\""
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:320
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:322
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:269
msgid "Invalid Base 64 destination."
msgstr "Nieprawidłowy miejsca przeznaczenia formatu Base 64."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:326
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:328
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:275
#, java-format
msgid "Invalid host name \"{0}\"."
msgstr "Nieprawidłowa nazwa hosta \"{0}\"."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:329
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:331
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:278
msgid "Please enter a host name and destination"
msgstr "Wpisz nazwę hosta i miejsca przeznaczenia"
#. clear search when deleting
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:333
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:354
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:335
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:356
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:282
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:307
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:261
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:258
msgid "Delete Entry"
msgstr "Usuń wpis"
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:333
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:335
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:282
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:334
msgid "Delete Selected"
msgstr "Usuń zaznaczone"
#. parameter is a host name
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:347
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:349
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:299
#, java-format
msgid "Destination {0} deleted."
msgstr "Miejsce przeznaczenia {0} usunięte."
#. parameter will always be >= 2
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:350
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:352
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:302
#, java-format
msgid "1 destination deleted."
@ -203,30 +204,30 @@ msgstr[0] "1 miejsce przeznaczenia usunięte."
msgstr[1] "{0} miejsca przeznaczenia usunięte."
msgstr[2] "{0} miejsc przeznaczenia usunięte."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:352
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:354
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:304
msgid "No entries selected to delete."
msgstr "Brak wpisów wybranych do usunięcia."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:360
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:362
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:311
msgid "Address book saved."
msgstr "Książka adresowa zapisana."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:363
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:365
msgid "ERROR: Could not write addressbook file."
msgstr "BŁĄD: Nie można zapisać pliku książki adresowej."
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:368
#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:370
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:148
#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:315
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:156
msgid ""
"Invalid form submission, probably because you used the \"back\" or "
"\"reload\" button on your browser. Please resubmit."
"Invalid form submission, probably because you used the \"back\" or \"reload"
"\" button on your browser. Please resubmit."
msgstr ""
"Nieprawidłowy formularz, prawdopodobnie dlatego, że użyto przycisku "
"\"wstecz\" lub \"przeładuj\" w przeglądarce. Proszę prześlij ponownie."
"Nieprawidłowy formularz, prawdopodobnie dlatego, że użyto przycisku \"wstecz"
"\" lub \"przeładuj\" w przeglądarce. Proszę prześlij ponownie."
#: ../src/java/src/i2p/susi/dns/ConfigBean.java:139
#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:131
@ -294,8 +295,8 @@ msgstr "książka adresowa"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:143
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:104
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:120
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:108
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:124
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:105
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:121
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:107
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:104
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:120
@ -304,7 +305,7 @@ msgstr "Przegląd"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:129
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:106
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:110
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:107
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:93
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:106
msgid "Address books"
@ -312,7 +313,7 @@ msgstr "Książki adresowe"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:131
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:108
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:112
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:109
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:95
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:108
msgid "private"
@ -320,7 +321,7 @@ msgstr "prywatne"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:133
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:110
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:114
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:111
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:97
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:110
msgid "master"
@ -328,7 +329,7 @@ msgstr "głowne"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:135
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:112
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:116
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:113
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:99
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:112
msgid "router"
@ -336,7 +337,7 @@ msgstr "router"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:137
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:114
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:118
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:115
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:101
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:114
msgid "published"
@ -344,7 +345,7 @@ msgstr "opublikowane"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:139
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:116
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:120
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:117
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:103
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:116
msgid "Subscriptions"
@ -352,19 +353,19 @@ msgstr "Subskrypcje"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:141
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:118
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:122
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:119
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:105
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:118
msgid "Configuration"
msgstr "Konfiguracja"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:145
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:126
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:123
msgid "Address book"
msgstr "Książka adresowa"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:150
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:131
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:128
msgid "Storage"
msgstr "Pamięć"
@ -403,7 +404,7 @@ msgstr "Linki"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:242
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:384
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:253
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:250
msgid "Destination"
msgstr "Miejsce przeznaczenia"
@ -437,7 +438,7 @@ msgid "Add new destination"
msgstr "Dodaj nowe miejsce przeznaczenia"
#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:380
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:158
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:155
msgid "Host Name"
msgstr "Nazwa hosta"
@ -452,8 +453,8 @@ msgstr "Wskazówki"
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:136
msgid ""
"File and directory paths here are relative to the addressbook's working "
"directory, which is normally ~/.i2p/addressbook/ (Linux) or "
"%APPDATA%\\I2P\\addressbook\\ (Windows)."
"directory, which is normally ~/.i2p/addressbook/ (Linux) or %APPDATA%\\I2P"
"\\addressbook\\ (Windows)."
msgstr ""
"Ścieżki do plików i katalogów są podane w stosunku do roboczego katalogu "
"książki adresowej, którym jest zwykle ~/.i2p/addressbook/ (Linux) lub "
@ -461,8 +462,8 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:138
msgid ""
"If you want to manually add lines to an addressbook, add them to the private"
" or master addressbooks."
"If you want to manually add lines to an addressbook, add them to the private "
"or master addressbooks."
msgstr ""
"Jeśli chcesz ręcznie dodać wiersze do książki adresowej, dodaj je do "
"prywatnych lub głownych książek adresowych."
@ -488,8 +489,8 @@ msgid ""
"Use the private addressbook for private destinations, these are not "
"published."
msgstr ""
"Użyj prywatnej książki adresowej dla prywatnych miejsc przeznaczania, te nie"
" są publikowane."
"Użyj prywatnej książki adresowej dla prywatnych miejsc przeznaczania, te nie "
"są publikowane."
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:146
msgid "Options"
@ -539,16 +540,16 @@ msgstr "Czy aktualizpwać opublikowaną książke adresową"
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:166
msgid ""
"File containing the etags header from the fetched subscription URLs (no need"
" to change)"
"File containing the etags header from the fetched subscription URLs (no need "
"to change)"
msgstr ""
"Plik zawierający nagłówek etagów z pobranych subskrypcji URL (nie trzeba "
"zmieniać)"
#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:168
msgid ""
"File containing the modification timestamp for each fetched subscription URL"
" (no need to change)"
"File containing the modification timestamp for each fetched subscription URL "
"(no need to change)"
msgstr ""
"Plik zawierający modifikacje znaczów czasu dla każdej pobranej subscrypcji "
"URL (nie trzeba zmieniać)"
@ -557,59 +558,59 @@ msgstr ""
msgid "File to log activity to (change to /dev/null if you like)"
msgstr "Plik do logowania działalności (zmień na /dev/null, jeśli chcesz)"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:106
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:103
msgid "addressbook"
msgstr "Ksiazka adresowa"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:174
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:171
msgid "Encoded Name"
msgstr "Zakodowana Nazwa"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:190
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:187
msgid "Base 32 Address"
msgstr "Adress Base 32"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:200
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:197
msgid "Address Helper"
msgstr "Pomoc Adresowa"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:207
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:204
msgid "link"
msgstr "link"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:211
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:208
msgid "Public Key"
msgstr "Klucz publiczny"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:213
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:210
msgid "ElGamal 2048 bit"
msgstr "ElGamal 2048 bitów"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:217
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:214
msgid "Signing Key"
msgstr "Klucz Podpisywania"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:219
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:216
msgid "DSA 1024 bit"
msgstr "DSA 1024 bity"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:223
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:220
msgid "Certificate"
msgstr "Certyfikat"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:229
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:226
msgid "Added Date"
msgstr "Data dodania"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:235
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:232
msgid "Source"
msgstr "Źródło"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:241
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:238
msgid "Last Modified"
msgstr "Ostatnio modyfikowano"
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:247
#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:244
msgid "Notes"
msgstr "Notatki"
@ -635,27 +636,28 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:115
msgid ""
"In the default configuration, the address book is only subscribed to "
"www.i2p2.i2p."
"In the default configuration, the address book is only subscribed to www."
"i2p2.i2p."
msgstr ""
"W domyślnej konfiguracji, książka adresowa jest zapisana tylko do "
"www.i2p2.i2p."
"W domyślnej konfiguracji, książka adresowa jest zapisana tylko do www.i2p2."
"i2p."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:117
#, fuzzy
msgid ""
"Subscribing to additional sites is easy, just add them to your <a "
"href=\"subscriptions.jsp\">subscriptions</a> file."
"Subscribing to additional sites is easy, just add them to your <a href="
"\"subscriptions\">subscriptions</a> file."
msgstr ""
"Zapisywanie się do innych witryn jest proste, wystarczy dodać je do pliku <a"
" href=\"subscriptions.jsp\">subskrypcje</a>."
"Zapisywanie się do innych witryn jest proste, wystarczy dodać je do pliku <a "
"href=\"subscriptions.jsp\">subskrypcje</a>."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:119
msgid ""
"For more information on naming in I2P, see <a "
"href=\"http://www.i2p2.i2p/naming.html\">the overview on www.i2p2.i2p</a>."
"For more information on naming in I2P, see <a href=\"http://www.i2p2.i2p/"
"naming.html\">the overview on www.i2p2.i2p</a>."
msgstr ""
"Aby uzyskać więcej informacji na temat nazewnictwa w I2P, zobacz <a "
"href=\"http://www.i2p2.i2p/naming.html\">przegląd www.i2p2.i2p</a> ."
"Aby uzyskać więcej informacji na temat nazewnictwa w I2P, zobacz <a href="
"\"http://www.i2p2.i2p/naming.html\">przegląd www.i2p2.i2p</a> ."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:121
msgid "How does the addressbook application work?"
@ -666,8 +668,8 @@ msgid ""
"The addressbook application regularly polls your subscriptions and merges "
"their content into your \"router\" address book."
msgstr ""
"Aplikacja książki adresowej regularnie pobiera twoje subskrypcje i łączy ich"
" zawartość w twoja książkę adresowa \"routera\"."
"Aplikacja książki adresowej regularnie pobiera twoje subskrypcje i łączy ich "
"zawartość w twoja książkę adresowa \"routera\"."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:125
msgid ""
@ -680,12 +682,11 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:127
msgid ""
"If configured, the router address book is now written to the \"published\" "
"address book, which will be publicly available if you are running an "
"eepsite."
"address book, which will be publicly available if you are running an eepsite."
msgstr ""
"Jeżeli skonfigurowana, ksiażka adresowa routera jest teraz zapisana do "
"\"opublikowanej\" książki adresowej, która będzie publicznie dostępna jeżeli"
" masz swoją stronę eepsite."
"\"opublikowanej\" książki adresowej, która będzie publicznie dostępna jeżeli "
"masz swoją stronę eepsite."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:129
msgid ""
@ -697,16 +698,16 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:131
msgid ""
"Hosts in the private address book can be accessed by you but their addresses"
" are never distributed to others."
"Hosts in the private address book can be accessed by you but their addresses "
"are never distributed to others."
msgstr ""
"Nazwy hostów w prywatnej książce adresowej mogą być dostępne dla ciebie ale "
"ich adresy nie są nigdy rozpowszechniane dla innych."
#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:133
msgid ""
"The private address book can also be used for aliases of hosts in your other"
" address books."
"The private address book can also be used for aliases of hosts in your other "
"address books."
msgstr ""
"Prywatna książka adresowa może być też użyta dla aliasów nazw hostów w "
"twoich innych książkach adresowych."
@ -723,8 +724,7 @@ msgstr "Plik subskrypcji zawiera listę URLów i2p."
msgid ""
"The addressbook application regularly checks this list for new eepsites."
msgstr ""
"Aplikacja książki adresowej regularnie sprawdza te listę dla nowych "
"eepsites."
"Aplikacja książki adresowej regularnie sprawdza te listę dla nowych eepsites."
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:138
msgid "Those URLs refer to published hosts.txt files."
@ -749,5 +749,3 @@ msgstr ""
#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:144
msgid "See the FAQ for a list of subscription URLs."
msgstr "Więcej w FAQ dla listy subskrypcji adresów URL."

View File

@ -8,14 +8,15 @@
# ducki2p <ducki2p@gmail.com>, 2011.
# foo <foo@bar>, 2009.
# mixy, 2011.
# <punkibastardo@gmail.com>, 2011.
# punkibastardo <punkibastardo@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-12 11:15+0000\n"
"PO-Revision-Date: 2011-10-07 01:33+0000\n"
"Last-Translator: blabla <blabla@trash-mail.com>\n"
"POT-Creation-Date: 2011-12-27 22:38+0000\n"
"PO-Revision-Date: 2011-12-18 10:48+0000\n"
"Last-Translator: punkibastardo <punkibastardo@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
"Language: es\n"
@ -321,7 +322,7 @@ msgstr "Cancelar"
#: src/src/i2p/susi/webmail/WebMail.java:1605
msgid "Learn about I2P mail"
msgstr ""
msgstr "Aprende sobre I2P mail"
#: src/src/i2p/susi/webmail/WebMail.java:1606
msgid "Create Account"

View File

@ -3,166 +3,169 @@
# This file is distributed under the same license as the susimail package.
# To contribute translations, see http://www.i2p2.de/newdevelopers
#
# Translators:
# <b790979@klzlk.com>, 2011.
# <businesshehe@yahoo.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-06-11 08:24+0000\n"
"PO-Revision-Date: 2011-06-01 14:13+0000\n"
"Last-Translator: PolishAnon <b790979@klzlk.com>\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2011-12-27 22:38+0000\n"
"PO-Revision-Date: 2011-12-18 12:27+0000\n"
"Last-Translator: Warton <businesshehe@yahoo.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/I2P/team/pl/)\n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2)\n"
#: src/src/i2p/susi/webmail/WebMail.java:454
#: src/src/i2p/susi/webmail/WebMail.java:455
msgid "unknown"
msgstr "nieznany"
#: src/src/i2p/susi/webmail/WebMail.java:473
#: src/src/i2p/susi/webmail/WebMail.java:474
msgid "Warning: no transfer encoding found, fallback to 7bit."
msgstr "Uwaga: nie znaleziono kodowania transferu, powrót do 7 bitów"
#: src/src/i2p/susi/webmail/WebMail.java:478
#: src/src/i2p/susi/webmail/WebMail.java:479
#, java-format
msgid "No encoder found for encoding \\''{0}\\''."
msgstr "Nr kodeka dla kodowania \\''{0} \\''."
#: src/src/i2p/susi/webmail/WebMail.java:484
#: src/src/i2p/susi/webmail/WebMail.java:485
msgid "Warning: no charset found, fallback to US-ASCII."
msgstr "Uwaga: nie znaleziono zestawu znaków, powrót do US-ASCII."
#: src/src/i2p/susi/webmail/WebMail.java:498
#: src/src/i2p/susi/webmail/WebMail.java:499
#, java-format
msgid "Charset \\''{0}\\'' not supported."
msgstr "Zestaw znaków \\''{0} \\' 'nie obsługiwany."
#: src/src/i2p/susi/webmail/WebMail.java:502
#: src/src/i2p/susi/webmail/WebMail.java:503
#, java-format
msgid "Part ({0}) not shown, because of {1}"
msgstr "Część ({0}) nie pokazana ze względu na {1}"
#: src/src/i2p/susi/webmail/WebMail.java:525
#: src/src/i2p/susi/webmail/WebMail.java:526
msgid "Download"
msgstr "Pobierz"
#: src/src/i2p/susi/webmail/WebMail.java:525
#: src/src/i2p/susi/webmail/WebMail.java:526
msgid "File is packed into a zipfile for security reasons."
msgstr "Plik zapakowany w format ZIP ze względów bezpieczeństwa."
#: src/src/i2p/susi/webmail/WebMail.java:525
#: src/src/i2p/susi/webmail/WebMail.java:526
#, java-format
msgid "attachment ({0})."
msgstr "załącznik ({0})."
#: src/src/i2p/susi/webmail/WebMail.java:529
#: src/src/i2p/susi/webmail/WebMail.java:530
#, java-format
msgid "Attachment ({0})."
msgstr "Załącznik ({0})."
#: src/src/i2p/susi/webmail/WebMail.java:579
#: src/src/i2p/susi/webmail/WebMail.java:580
msgid "Need username for authentication."
msgstr "Potrzebna nazwę użytkownika do uwierzytelnienia."
#: src/src/i2p/susi/webmail/WebMail.java:583
#: src/src/i2p/susi/webmail/WebMail.java:584
msgid "Need password for authentication."
msgstr "Potrzebne hasło do uwierzytelniania."
#: src/src/i2p/susi/webmail/WebMail.java:587
#: src/src/i2p/susi/webmail/WebMail.java:588
msgid "Need hostname for connect."
msgstr "Potrzebuna nazwa host do połączenia."
#: src/src/i2p/susi/webmail/WebMail.java:592
#: src/src/i2p/susi/webmail/WebMail.java:593
msgid "Need port number for pop3 connect."
msgstr "Potrzeba numer portu pop3 do połączenia."
#: src/src/i2p/susi/webmail/WebMail.java:599
#: src/src/i2p/susi/webmail/WebMail.java:600
msgid "POP3 port number is not in range 0..65535."
msgstr "Numeru portu POP3 poza zakresem 0..65535."
#: src/src/i2p/susi/webmail/WebMail.java:605
#: src/src/i2p/susi/webmail/WebMail.java:606
msgid "POP3 port number is invalid."
msgstr "Numeru portu POP3 jest nieprawidłowy."
#: src/src/i2p/susi/webmail/WebMail.java:611
#: src/src/i2p/susi/webmail/WebMail.java:612
msgid "Need port number for smtp connect."
msgstr "Potrzebny numer portu smtp do połączenia."
#: src/src/i2p/susi/webmail/WebMail.java:618
#: src/src/i2p/susi/webmail/WebMail.java:619
msgid "SMTP port number is not in range 0..65535."
msgstr "Numeru portu SMTP poza zakresem 0..65535."
#: src/src/i2p/susi/webmail/WebMail.java:624
#: src/src/i2p/susi/webmail/WebMail.java:625
msgid "SMTP port number is invalid."
msgstr "Numer portu SMTP jest nieprawidłowy."
#: src/src/i2p/susi/webmail/WebMail.java:671
#: src/src/i2p/susi/webmail/WebMail.java:672
msgid "User logged out."
msgstr "Użytkownik wylogowany."
#: src/src/i2p/susi/webmail/WebMail.java:675
#: src/src/i2p/susi/webmail/WebMail.java:676
msgid "Internal error, lost connection."
msgstr "Błąd wewnętrzny, połączenie utracone."
#: src/src/i2p/susi/webmail/WebMail.java:771
#: src/src/i2p/susi/webmail/WebMail.java:772
#, java-format
msgid "On {0} {1} wrote:"
msgstr "Dnia {0} {1} napisał:"
#: src/src/i2p/susi/webmail/WebMail.java:818
#: src/src/i2p/susi/webmail/WebMail.java:819
msgid "begin forwarded mail"
msgstr "Rozpocznij przekazywanie poczty"
#: src/src/i2p/susi/webmail/WebMail.java:840
#: src/src/i2p/susi/webmail/WebMail.java:841
msgid "end forwarded mail"
msgstr "Zakończ przekazywanie poczty"
#: src/src/i2p/susi/webmail/WebMail.java:847
#: src/src/i2p/susi/webmail/WebMail.java:1701
#: src/src/i2p/susi/webmail/WebMail.java:848
#: src/src/i2p/susi/webmail/WebMail.java:1720
msgid "Could not fetch mail body."
msgstr "Nie można pobrać głównej cześci maila"
#: src/src/i2p/susi/webmail/WebMail.java:875
#: src/src/i2p/susi/webmail/WebMail.java:876
msgid "Message id not valid."
msgstr "ID wiadomości niepoprawne."
#: src/src/i2p/susi/webmail/WebMail.java:958
#: src/src/i2p/susi/webmail/WebMail.java:959
#, java-format
msgid "No Encoding found for {0}"
msgstr "Nie znaleziono kodowania dla {0}"
#: src/src/i2p/susi/webmail/WebMail.java:962
#: src/src/i2p/susi/webmail/WebMail.java:963
#, java-format
msgid "Could not encode data: {0}"
msgstr "Nie można zakodować danych: {0}"
#: src/src/i2p/susi/webmail/WebMail.java:967
#: src/src/i2p/susi/webmail/WebMail.java:968
#, java-format
msgid "Error reading uploaded file: {0}"
msgstr "Błąd w odczycie wysłanego pliku: {0}"
#: src/src/i2p/susi/webmail/WebMail.java:1045
#: src/src/i2p/susi/webmail/WebMail.java:1046
msgid "Error parsing download parameter."
msgstr "Błąd pobrania parametru analizy."
#: src/src/i2p/susi/webmail/WebMail.java:1089
#: src/src/i2p/susi/webmail/WebMail.java:1090
msgid "Invalid pagesize number, resetting to default value."
msgstr ""
"Nieprawidłowy numer rozmiaru strony, resetowanie do wartości domyślnej."
#: src/src/i2p/susi/webmail/WebMail.java:1113
#: src/src/i2p/susi/webmail/WebMail.java:1114
msgid "No messages marked for deletion."
msgstr "Brak wiadomości zaznaczonych do usunięcia."
#: src/src/i2p/susi/webmail/WebMail.java:1133
#: src/src/i2p/susi/webmail/WebMail.java:1134
#, java-format
msgid "Error deleting message: {0}"
msgstr "Błąd podczas usuwania wiadomości: {0}"
#: src/src/i2p/susi/webmail/WebMail.java:1144
#: src/src/i2p/susi/webmail/WebMail.java:1145
#, java-format
msgid "1 message deleted."
msgid_plural "{0} messages deleted."
@ -170,12 +173,12 @@ msgstr[0] "1 wiadomość usunięta."
msgstr[1] "{0} wiadomości usuniętych."
msgstr[2] "{0} wiadomości usunięte."
#: src/src/i2p/susi/webmail/WebMail.java:1264
#: src/src/i2p/susi/webmail/WebMail.java:1587
#: src/src/i2p/susi/webmail/WebMail.java:1267
#: src/src/i2p/susi/webmail/WebMail.java:1604
msgid "Login"
msgstr "Zaloguj się"
#: src/src/i2p/susi/webmail/WebMail.java:1266
#: src/src/i2p/susi/webmail/WebMail.java:1269
#, java-format
msgid "1 Message"
msgid_plural "{0} Messages"
@ -183,192 +186,197 @@ msgstr[0] "1 wiadomość"
msgstr[1] "{0} wiadomości"
msgstr[2] "{0} wiadomości"
#: src/src/i2p/susi/webmail/WebMail.java:1268
#: src/src/i2p/susi/webmail/WebMail.java:1271
msgid "Show Message"
msgstr "Pokaż wiadomość"
#: src/src/i2p/susi/webmail/WebMail.java:1325
#: src/src/i2p/susi/webmail/WebMail.java:1333
#, java-format
msgid "Error decoding content: {0}"
msgstr "Błąd dekodowania treści: {0}"
#: src/src/i2p/susi/webmail/WebMail.java:1330
#: src/src/i2p/susi/webmail/WebMail.java:1338
msgid "Error decoding content: No encoder found."
msgstr "Błąd dekodowania treści: Nie znaleziono enkodera."
#: src/src/i2p/susi/webmail/WebMail.java:1377
#: src/src/i2p/susi/webmail/WebMail.java:1385
msgid "no subject"
msgstr "bez tematu"
#: src/src/i2p/susi/webmail/WebMail.java:1394
#: src/src/i2p/susi/webmail/WebMail.java:1402
msgid "Found no valid sender address."
msgstr "Nie znaleziono poprawnego adresu nadawcy."
#: src/src/i2p/susi/webmail/WebMail.java:1400
#: src/src/i2p/susi/webmail/WebMail.java:1408
#, java-format
msgid "Found no valid address in \\''{0}\\''."
msgstr "Nie znaleziono prawidłowego adresu w \\''{0} \\''."
#: src/src/i2p/susi/webmail/WebMail.java:1419
#: src/src/i2p/susi/webmail/WebMail.java:1427
msgid "No recipients found."
msgstr "Nie znaleziono odbiorców."
#: src/src/i2p/susi/webmail/WebMail.java:1426
#: src/src/i2p/susi/webmail/WebMail.java:1434
msgid "Quoted printable encoder not available."
msgstr "Cytowany drukowalny enkoder nie dostepny."
#: src/src/i2p/susi/webmail/WebMail.java:1431
#: src/src/i2p/susi/webmail/WebMail.java:1439
msgid "Header line encoder not available."
msgstr "Enkoder linii nagłówka nie dostępny."
#: src/src/i2p/susi/webmail/WebMail.java:1482
#: src/src/i2p/susi/webmail/WebMail.java:1490
msgid "Mail sent."
msgstr "Mail wysłany."
#: src/src/i2p/susi/webmail/WebMail.java:1519
#: src/src/i2p/susi/webmail/WebMail.java:1529
msgid "Send"
msgstr "Wyślij"
#: src/src/i2p/susi/webmail/WebMail.java:1520
#: src/src/i2p/susi/webmail/WebMail.java:1530
msgid "Cancel"
msgstr "Anuluj"
#: src/src/i2p/susi/webmail/WebMail.java:1521
#: src/src/i2p/susi/webmail/WebMail.java:1531
msgid "Delete Attachment"
msgstr "Usuń załącznik"
#: src/src/i2p/susi/webmail/WebMail.java:1522
#: src/src/i2p/susi/webmail/WebMail.java:1607
#: src/src/i2p/susi/webmail/WebMail.java:1688
#: src/src/i2p/susi/webmail/WebMail.java:1532
#: src/src/i2p/susi/webmail/WebMail.java:1626
#: src/src/i2p/susi/webmail/WebMail.java:1707
msgid "Reload Config"
msgstr "Przeładuj Konfiguracje"
#: src/src/i2p/susi/webmail/WebMail.java:1523
#: src/src/i2p/susi/webmail/WebMail.java:1608
#: src/src/i2p/susi/webmail/WebMail.java:1689
#: src/src/i2p/susi/webmail/WebMail.java:1533
#: src/src/i2p/susi/webmail/WebMail.java:1627
#: src/src/i2p/susi/webmail/WebMail.java:1708
msgid "Logout"
msgstr "Wyloguj się"
#: src/src/i2p/susi/webmail/WebMail.java:1546
#: src/src/i2p/susi/webmail/WebMail.java:1693
#: src/src/i2p/susi/webmail/WebMail.java:1556
#: src/src/i2p/susi/webmail/WebMail.java:1712
msgid "From:"
msgstr "Od:"
#: src/src/i2p/susi/webmail/WebMail.java:1547
#: src/src/i2p/susi/webmail/WebMail.java:1557
msgid "To:"
msgstr "To:"
#: src/src/i2p/susi/webmail/WebMail.java:1548
#: src/src/i2p/susi/webmail/WebMail.java:1558
msgid "Cc:"
msgstr "Cc:"
#: src/src/i2p/susi/webmail/WebMail.java:1549
#: src/src/i2p/susi/webmail/WebMail.java:1559
msgid "Bcc:"
msgstr "Bcc:"
#: src/src/i2p/susi/webmail/WebMail.java:1550
#: src/src/i2p/susi/webmail/WebMail.java:1695
#: src/src/i2p/susi/webmail/WebMail.java:1560
#: src/src/i2p/susi/webmail/WebMail.java:1714
msgid "Subject:"
msgstr "Temat:"
#: src/src/i2p/susi/webmail/WebMail.java:1551
#: src/src/i2p/susi/webmail/WebMail.java:1561
msgid "Bcc to self"
msgstr "Bcc do siebie"
#: src/src/i2p/susi/webmail/WebMail.java:1554
#: src/src/i2p/susi/webmail/WebMail.java:1564
msgid "New Attachment:"
msgstr "Nowy załącznik:"
#: src/src/i2p/susi/webmail/WebMail.java:1554
#: src/src/i2p/susi/webmail/WebMail.java:1564
msgid "Upload File"
msgstr "Prześlij plik"
#: src/src/i2p/susi/webmail/WebMail.java:1560
#: src/src/i2p/susi/webmail/WebMail.java:1570
msgid "Attachments:"
msgstr "Załączniki:"
#: src/src/i2p/susi/webmail/WebMail.java:1582
#. current postman hq length limits 16/12, new postman version 32/32
#: src/src/i2p/susi/webmail/WebMail.java:1593
msgid "User"
msgstr "Użytkownik"
#: src/src/i2p/susi/webmail/WebMail.java:1583
#: src/src/i2p/susi/webmail/WebMail.java:1594
msgid "Password"
msgstr "Password"
msgstr "Hasło"
#: src/src/i2p/susi/webmail/WebMail.java:1584
#: src/src/i2p/susi/webmail/WebMail.java:1599
msgid "Host"
msgstr "Host"
#: src/src/i2p/susi/webmail/WebMail.java:1585
#: src/src/i2p/susi/webmail/WebMail.java:1600
msgid "POP3-Port"
msgstr "POP3-Port"
#: src/src/i2p/susi/webmail/WebMail.java:1586
#: src/src/i2p/susi/webmail/WebMail.java:1601
msgid "SMTP-Port"
msgstr "SMTP-Port"
#: src/src/i2p/susi/webmail/WebMail.java:1587
msgid "Create Account"
msgstr "Załóż konto"
#: src/src/i2p/susi/webmail/WebMail.java:1587
#: src/src/i2p/susi/webmail/WebMail.java:1604
msgid "Reset"
msgstr "Zresetuj"
#: src/src/i2p/susi/webmail/WebMail.java:1599
#: src/src/i2p/susi/webmail/WebMail.java:1605
msgid "Learn about I2P mail"
msgstr "Dowiedz się więcej o poczcie I2P"
#: src/src/i2p/susi/webmail/WebMail.java:1606
msgid "Create Account"
msgstr "Załóż konto"
#: src/src/i2p/susi/webmail/WebMail.java:1618
msgid "Really delete the marked messages?"
msgstr "Czy na pewno usunąć zaznaczone wiadomości?"
#: src/src/i2p/susi/webmail/WebMail.java:1599
#: src/src/i2p/susi/webmail/WebMail.java:1618
msgid "Yes, really delete them!"
msgstr "Tak, naprawdę je usuń!"
#: src/src/i2p/susi/webmail/WebMail.java:1601
#: src/src/i2p/susi/webmail/WebMail.java:1680
#: src/src/i2p/susi/webmail/WebMail.java:1620
#: src/src/i2p/susi/webmail/WebMail.java:1699
msgid "New"
msgstr "Nowe"
#: src/src/i2p/susi/webmail/WebMail.java:1602
#: src/src/i2p/susi/webmail/WebMail.java:1681
#: src/src/i2p/susi/webmail/WebMail.java:1621
#: src/src/i2p/susi/webmail/WebMail.java:1700
msgid "Reply"
msgstr "Odpowiedz"
#: src/src/i2p/susi/webmail/WebMail.java:1603
#: src/src/i2p/susi/webmail/WebMail.java:1682
#: src/src/i2p/susi/webmail/WebMail.java:1622
#: src/src/i2p/susi/webmail/WebMail.java:1701
msgid "Reply All"
msgstr "Odpowiedz wszystkim"
#: src/src/i2p/susi/webmail/WebMail.java:1604
#: src/src/i2p/susi/webmail/WebMail.java:1683
#: src/src/i2p/susi/webmail/WebMail.java:1623
#: src/src/i2p/susi/webmail/WebMail.java:1702
msgid "Forward"
msgstr "Przekaż"
#: src/src/i2p/susi/webmail/WebMail.java:1605
#: src/src/i2p/susi/webmail/WebMail.java:1684
#: src/src/i2p/susi/webmail/WebMail.java:1624
#: src/src/i2p/susi/webmail/WebMail.java:1703
msgid "Delete"
msgstr "Usuń"
#: src/src/i2p/susi/webmail/WebMail.java:1606
#: src/src/i2p/susi/webmail/WebMail.java:1625
msgid "Check Mail"
msgstr "Sprawdź pocztę"
#: src/src/i2p/susi/webmail/WebMail.java:1610
#: src/src/i2p/susi/webmail/WebMail.java:1629
msgid "Sender"
msgstr "Nadawca"
#: src/src/i2p/susi/webmail/WebMail.java:1611
#: src/src/i2p/susi/webmail/WebMail.java:1630
msgid "Subject"
msgstr "Temat"
#: src/src/i2p/susi/webmail/WebMail.java:1612
#: src/src/i2p/susi/webmail/WebMail.java:1631
msgid "Date"
msgstr "Data"
#: src/src/i2p/susi/webmail/WebMail.java:1613
#: src/src/i2p/susi/webmail/WebMail.java:1632
msgid "Size"
msgstr "Rozmiar"
#: src/src/i2p/susi/webmail/WebMail.java:1639
#: src/src/i2p/susi/webmail/WebMail.java:1658
#, java-format
msgid "1 Byte"
msgid_plural "{0} Bytes"
@ -376,71 +384,69 @@ msgstr[0] "1 bajt"
msgstr[1] "{0} bajtów"
msgstr[2] "{0} bajty"
#: src/src/i2p/susi/webmail/WebMail.java:1644
#: src/src/i2p/susi/webmail/WebMail.java:1663
msgid "Mark All"
msgstr "Zaznacz wszystkie"
#: src/src/i2p/susi/webmail/WebMail.java:1645
#: src/src/i2p/susi/webmail/WebMail.java:1664
msgid "Invert Selection"
msgstr "Odwróć zaznaczenie"
#: src/src/i2p/susi/webmail/WebMail.java:1646
#: src/src/i2p/susi/webmail/WebMail.java:1665
msgid "Clear"
msgstr "Wyczyść"
#: src/src/i2p/susi/webmail/WebMail.java:1649
#: src/src/i2p/susi/webmail/WebMail.java:1650
#: src/src/i2p/susi/webmail/WebMail.java:1668
#: src/src/i2p/susi/webmail/WebMail.java:1669
msgid "First"
msgstr "Pierwsze"
#: src/src/i2p/susi/webmail/WebMail.java:1649
#: src/src/i2p/susi/webmail/WebMail.java:1650
#: src/src/i2p/susi/webmail/WebMail.java:1685
#: src/src/i2p/susi/webmail/WebMail.java:1668
#: src/src/i2p/susi/webmail/WebMail.java:1669
#: src/src/i2p/susi/webmail/WebMail.java:1704
msgid "Previous"
msgstr "Poprzedni"
#: src/src/i2p/susi/webmail/WebMail.java:1651
#: src/src/i2p/susi/webmail/WebMail.java:1670
#, java-format
msgid "Page {0} of {1}"
msgstr "Strona {0} z {1}"
#: src/src/i2p/susi/webmail/WebMail.java:1653
#: src/src/i2p/susi/webmail/WebMail.java:1654
#: src/src/i2p/susi/webmail/WebMail.java:1672
#: src/src/i2p/susi/webmail/WebMail.java:1673
msgid "Last"
msgstr "Ostatnie"
#: src/src/i2p/susi/webmail/WebMail.java:1653
#: src/src/i2p/susi/webmail/WebMail.java:1654
#: src/src/i2p/susi/webmail/WebMail.java:1686
#: src/src/i2p/susi/webmail/WebMail.java:1672
#: src/src/i2p/susi/webmail/WebMail.java:1673
#: src/src/i2p/susi/webmail/WebMail.java:1705
msgid "Next"
msgstr "Następne"
#: src/src/i2p/susi/webmail/WebMail.java:1657
#: src/src/i2p/susi/webmail/WebMail.java:1676
msgid "Pagesize:"
msgstr "Rozmiar strony:"
#: src/src/i2p/susi/webmail/WebMail.java:1658
#: src/src/i2p/susi/webmail/WebMail.java:1677
msgid "Set"
msgstr "Ustaw"
#: src/src/i2p/susi/webmail/WebMail.java:1668
#: src/src/i2p/susi/webmail/WebMail.java:1687
msgid "Really delete this message?"
msgstr "Czy na pewno usunąć tę wiadomość?"
#: src/src/i2p/susi/webmail/WebMail.java:1668
#: src/src/i2p/susi/webmail/WebMail.java:1687
msgid "Yes, really delete it!"
msgstr "Tak, naprawdę to usuń!"
#: src/src/i2p/susi/webmail/WebMail.java:1687
#: src/src/i2p/susi/webmail/WebMail.java:1706
msgid "Back to Folder"
msgstr "Powrót do folderu"
#: src/src/i2p/susi/webmail/WebMail.java:1694
#: src/src/i2p/susi/webmail/WebMail.java:1713
msgid "Date:"
msgstr "Data:"
#: src/src/i2p/susi/webmail/WebMail.java:1705
#: src/src/i2p/susi/webmail/WebMail.java:1724
msgid "Could not fetch mail."
msgstr "Nie można pobrać poczty."

View File

@ -34,6 +34,7 @@
<echo message=" updater: Package the built files in i2pupdate.zip (extracts safely over existing installs)" />
<echo message=" updater200: Updater compressed with pack200 (creates i2pupdate200.zip, 60% smaller)" />
<echo message=" updaterWithJavadoc: updater including the javadocs, for display in the console" />
<echo message=" updater200WithJavadoc: updater including the javadocs, for display in the console (creates i2pupdate200.zip)" />
<echo message=" updaterWithJetty: Updater including Jetty" />
<echo message=" updater200withJetty: Updater including Jetty" />
<echo message=" updaterWithJettyFixes: updater including local jetty patches" />
@ -379,7 +380,7 @@
packagenames="*"
use="true"
splitindex="true"
doctitle="I2P Javadocs for Release ${release.number} Build ${build.number}"
doctitle="I2P Javadocs for Release ${release.number} Build ${build.number}${build.extra}"
windowtitle="I2P Anonymous Network - Java Documentation - Version ${release.number}">
<group title="Core SDK (i2p.jar)" packages="net.i2p:net.i2p.*:net.i2p.client:net.i2p.client.*:net.i2p.internal:net.i2p.internal.*:freenet.support.CPUInformation:org.bouncycastle.crypto:org.bouncycastle.crypto.*:gnu.crypto.*:gnu.gettext:org.xlattice.crypto.filters:com.nettgryppa.security:net.metanotion:net.metanotion.*" />
<group title="Streaming Library" packages="net.i2p.client.streaming" />
@ -388,7 +389,7 @@
<!-- apps and bridges starting here, alphabetical please -->
<group title="Addressbook Application" packages="net.i2p.addressbook" />
<group title="BOB Bridge" packages="net.i2p.BOB" />
<group title="Desktopgui Application" packages="net.i2p.desktopgui.*" />
<group title="Desktopgui Application" packages="net.i2p.desktopgui:net.i2p.desktopgui.*" />
<group title="I2PSnark Application" packages="org.klomp.snark:org.klomp.snark.*" />
<group title="I2PTunnel Application" packages="net.i2p.i2ptunnel:net.i2p.i2ptunnel.*" />
<group title="Jetty Logging" packages="org.mortbay.http" />
@ -475,7 +476,12 @@
<arg value="-f1" />
<arg value="-d;" />
</exec>
<echo message="Build number is ${build.number}" />
<exec executable="awk" outputproperty="build.extra" failonerror="false">
<arg value="-F&quot;" />
<arg value="/public final static String EXTRA/{print $2}" />
<arg value="router/java/src/net/i2p/router/RouterVersion.java" />
</exec>
<echo message="Build number is ${build.number}${build.extra}" />
</target>
<target name="clean" depends="pkgclean" >
@ -484,6 +490,9 @@
<delete file="i2pinstall.exe" failonerror="false" quiet="true" />
<delete file="i2p.exe" failonerror="false" quiet="true" />
<delete file="syndie-standalone.zip" failonerror="false" quiet="true" />
<delete>
<fileset dir="." includes="i2pinstall*jar i2pinstall*bz2" />
</delete>
<delete file="i2psnark-standalone.zip" failonerror="false" quiet="true" />
<delete file="BOB-one.jar" failonerror="false" quiet="true" />
<delete dir="core/c/jbigi/bin" />
@ -792,8 +801,8 @@
<copy todir="pkg-temp/docs/" >
<fileset dir="installer/resources/readme/" includes="readme*.html" />
<fileset dir="installer/resources/proxy/" includes="*.ht" />
<!-- lang_ar.png added in 0.8.4; a1,a2,je, and eu.png added in 0.8.9; gg.png added in 0.8.10 -->
<fileset dir="installer/resources/" includes="icons/flags/lang_ar.png icons/flags/gg.png icons/flags/je.png icons/flags/eu.png icons/flags/a1.png icons/flags/a2.png" />
<!-- lang_ar.png added in 0.8.4; a1,a2,je, and eu.png added in 0.8.9; gg.png added in 0.8.10; im.png added in 0.8.12 -->
<fileset dir="installer/resources/" includes="icons/flags/lang_ar.png icons/flags/gg.png icons/flags/je.png icons/flags/eu.png icons/flags/im.png icons/flags/a1.png icons/flags/a2.png" />
</copy>
</target>
@ -812,6 +821,7 @@
<target name="updater200WithJettyFixesAndJbigi" depends="prepjupdatefixes, prepjbigiupdate, preplicenses, pack200, zipit200" />
<target name="updater" depends="prepupdate, preplicenses, zipit" />
<target name="updaterWithJavadoc" depends="prepupdate, preplicenses, copyJavadoc, zipit" />
<target name="updater200WithJavadoc" depends="prepupdate, preplicenses, copyJavadoc, pack200, zipit200" />
<target name="updaterWithGeoIP" depends="prepupdate, prepgeoupdate, preplicenses, zipit" />
<target name="updaterWithJetty" depends="prepjupdate, preplicenses, zipit" />
<target name="updater200WithJetty" depends="prepjupdate, preplicenses, pack200, zipit200" />
@ -1048,14 +1058,14 @@
<mkdir dir="pkg-temp/installer" />
<!-- set if unset -->
<property name="workspace.changes.util.tr" value="" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-freebsd-only.jar" installerType="standard" basedir="${basedir}" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-${build.number}${build.extra}_freebsd-only.jar" installerType="standard" basedir="${basedir}" />
</target>
<target name="installer-linux" depends="clean, preppkg-linux-only, getReleaseNumber, getBuildNumber, buildProperties, util-list-changes, izpack-patches" >
<mkdir dir="pkg-temp/installer" />
<!-- set if unset -->
<property name="workspace.changes.util.tr" value="" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-linux-only.jar" installerType="standard" basedir="${basedir}" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-${build.number}${build.extra}_linux-only.jar" installerType="standard" basedir="${basedir}" />
</target>
@ -1064,7 +1074,7 @@
<mkdir dir="pkg-temp/osx" />
<!-- set if unset -->
<property name="workspace.changes.util.tr" value="" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-osx-only.jar" installerType="standard" basedir="${basedir}" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-${build.number}${build.extra}_osx-only.jar" installerType="standard" basedir="${basedir}" />
<ant target="installer2app" />
<delete dir="pkg-temp/osx" />
</target>
@ -1077,21 +1087,21 @@
<mkdir dir="pkg-temp/osx" />
<exec executable="python" failonerror="true">
<arg value="${user.home}/IzPack/utils/wrappers/izpack2app/izpack2app.py" />
<arg value="${basedir}/i2pinstall_${release.number}-osx-only.jar" />
<arg value="${basedir}/pkg-temp/osx/i2p-${release.number}-osx-install.app" />
<arg value="${basedir}/i2pinstall_${release.number}-${build.number}${build.extra}_osx-only.jar" />
<arg value="${basedir}/pkg-temp/osx/i2p-${release.number}-${build.number}${build.extra}_osx-install.app" />
</exec>
<exec executable="chmod" failonerror="true" osfamily="unix">
<arg value="755" />
<arg value="${basedir}/pkg-temp/osx/i2p-${release.number}-osx-install.app/Contents/MacOS/JavaApplicationStub" />
<arg value="${basedir}/pkg-temp/osx/i2p-${release.number}-${build.number}${build.extra}_osx-install.app/Contents/MacOS/JavaApplicationStub" />
</exec>
<exec executable="tar" osfamily="unix" failonerror="true">
<arg value="--owner=root" />
<arg value="--group=root" />
<arg value="-cjvf" />
<arg value="${basedir}/i2pinstall_${release.number}-osx.tar.bz2" />
<arg value="${basedir}/i2pinstall_${release.number}-${build.number}${build.extra}_osx.tar.bz2" />
<arg value="-C" />
<arg value="${basedir}/pkg-temp/osx" />
<arg value="i2p-${release.number}-osx-install.app" />
<arg value="i2p-${release.number}-${build.number}${build.extra}_osx-install.app" />
</exec>
</target>
@ -1126,7 +1136,7 @@
<attribute name="Workspace-Changes" value="${workspace.changes.util.tr}" />
</manifest>
</jar>
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-windows-only.jar" installerType="standard" basedir="${basedir}" />
<izpack input="${basedir}/installer/install.xml" output="${basedir}/i2pinstall_${release.number}-${build.number}${build.extra}_windows-only.jar" installerType="standard" basedir="${basedir}" />
<delete dir="pkg-temp/win" />
</target>

View File

@ -67,6 +67,6 @@ fi
echo "Compiling C code..."
rm -f jbigi.o $LIBFILE
$CC -c $COMPILEFLAGS $INCLUDES ../../jbigi/src/jbigi.c || exit 1
$CC $LINKFLAGS $INCLUDES $INCLUDELIBS -o $LIBFILE jbigi.o $STATICLIBS || exit 1
$CC $LINKFLAGS $INCLUDES -o $LIBFILE jbigi.o $INCLUDELIBS $STATICLIBS || exit 1
exit 0

View File

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

View File

@ -118,6 +118,17 @@ public class DataHelper {
public static Properties readProperties(InputStream rawStream)
throws DataFormatException, IOException {
Properties props = new OrderedProperties();
readProperties(rawStream, props);
return props;
}
/**
* Ditto, load into an existing properties
* @param props the Properties to load into
* @since 0.8.13
*/
public static Properties readProperties(InputStream rawStream, Properties props)
throws DataFormatException, IOException {
long size = readLong(rawStream, 2);
byte data[] = new byte[(int) size];
int read = read(rawStream, data);
@ -1268,6 +1279,8 @@ public class DataHelper {
* Why? Just because it has to be consistent so signing will work.
* How to spec as returning the same type as the param?
* DEPRECATED - Only used by RouterInfo.
*
* @return a new list
*/
public static List<? extends DataStructure> sortStructures(Collection<? extends DataStructure> dataStructures) {
if (dataStructures == null) return Collections.EMPTY_LIST;

View File

@ -124,16 +124,22 @@ public abstract class DatabaseEntry extends DataStructureImpl {
/**
* Configure the proof that the entity stands behind the info here
*
* @throws IllegalStateException if already signed
*/
public void setSignature(Signature signature) {
if (_signature != null)
throw new IllegalStateException();
_signature = signature;
}
/**
* Sign the structure using the supplied signing key
*
* @throws IllegalStateException if already signed
*/
public void sign(SigningPrivateKey key) throws DataFormatException {
if (_signature != null)
throw new IllegalStateException();
byte[] bytes = getBytes();
if (bytes == null) throw new DataFormatException("Not enough data to sign");
// now sign with the key

View File

@ -12,6 +12,7 @@ package net.i2p.data;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
@ -22,16 +23,24 @@ import net.i2p.util.OrderedProperties;
/**
* Defines a method of communicating with a router
*
* For efficiency, the options methods and structures here are unsynchronized.
* Initialize the structure with readBytes(), or call the setOptions().
* Don't change it after that.
*
* To ensure integrity of the RouterInfo, methods that change an element of the
* RouterInfo will throw an IllegalStateException after the RouterInfo is signed.
*
* @author jrandom
*/
public class RouterAddress extends DataStructureImpl {
private int _cost;
private Date _expiration;
private String _transportStyle;
private Properties _options;
private final Properties _options;
public RouterAddress() {
_cost = -1;
_options = new OrderedProperties();
}
/**
@ -85,28 +94,59 @@ public class RouterAddress extends DataStructureImpl {
/**
* Configure the type of transport that must be used to communicate on this address
*
* @throws IllegalStateException if was already set
*/
public void setTransportStyle(String transportStyle) {
if (_transportStyle != null)
throw new IllegalStateException();
_transportStyle = transportStyle;
}
/**
* Retrieve the transport specific options necessary for communication
*
* @deprecated use getOptionsMap()
* @return sorted, non-null, NOT a copy, do not modify
*/
public Properties getOptions() {
return _options;
}
/**
* Specify the transport specific options necessary for communication
* Retrieve the transport specific options necessary for communication
*
* @return an unmodifiable view, non-null, sorted
* @since 0.8.13
*/
public void setOptions(Properties options) {
_options = options;
public Map getOptionsMap() {
return Collections.unmodifiableMap(_options);
}
/**
* @since 0.8.13
*/
public String getOption(String opt) {
return _options.getProperty(opt);
}
/**
* Specify the transport specific options necessary for communication.
* Makes a copy.
* @param options non-null
* @throws IllegalStateException if was already set
*/
public void setOptions(Properties options) {
if (!_options.isEmpty())
throw new IllegalStateException();
_options.putAll(options);
}
/**
* @throws IllegalStateException if was already read in
*/
public void readBytes(InputStream in) throws DataFormatException, IOException {
if (_transportStyle != null)
throw new IllegalStateException();
_cost = (int) DataHelper.readLong(in, 1);
_expiration = DataHelper.readDate(in);
_transportStyle = DataHelper.readString(in);
@ -115,11 +155,11 @@ public class RouterAddress extends DataStructureImpl {
_transportStyle = "SSU";
else if (_transportStyle.equals("NTCP"))
_transportStyle = "NTCP";
_options = DataHelper.readProperties(in);
DataHelper.readProperties(in, _options);
}
public void writeBytes(OutputStream out) throws DataFormatException, IOException {
if ((_cost < 0) || (_transportStyle == null) || (_options == null))
if ((_cost < 0) || (_transportStyle == null))
throw new DataFormatException("Not enough data to write a router address");
DataHelper.writeLong(out, 1, _cost);
DataHelper.writeDate(out, _expiration);
@ -131,11 +171,12 @@ public class RouterAddress extends DataStructureImpl {
public boolean equals(Object object) {
if ((object == null) || !(object instanceof RouterAddress)) return false;
RouterAddress addr = (RouterAddress) object;
// let's keep this fast as we are putting an address into the RouterInfo set frequently
return
_cost == addr._cost &&
DataHelper.eq(_transportStyle, addr._transportStyle) &&
DataHelper.eq(_options, addr._options) &&
DataHelper.eq(_expiration, addr._expiration);
DataHelper.eq(_transportStyle, addr._transportStyle);
//DataHelper.eq(_options, addr._options) &&
//DataHelper.eq(_expiration, addr._expiration);
}
/**
@ -161,9 +202,7 @@ public class RouterAddress extends DataStructureImpl {
buf.append("\n\tExpiration: ").append(_expiration);
if (_options != null) {
buf.append("\n\tOptions: #: ").append(_options.size());
Properties p = new OrderedProperties();
p.putAll(_options);
for (Map.Entry e : p.entrySet()) {
for (Map.Entry e : _options.entrySet()) {
String key = (String) e.getKey();
String val = (String) e.getValue();
buf.append("\n\t\t[").append(key).append("] = [").append(val).append("]");

View File

@ -19,6 +19,7 @@ import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;
@ -32,6 +33,13 @@ import net.i2p.util.OrderedProperties;
* Defines the data that a router either publishes to the global routing table or
* provides to trusted peers.
*
* For efficiency, the methods and structures here are now unsynchronized.
* Initialize the RI with readBytes(), or call the setters and then sign() in a single thread.
* Don't change it after that.
*
* To ensure integrity of the RouterInfo, methods that change an element of the
* RouterInfo will throw an IllegalStateException after the RouterInfo is signed.
*
* @author jrandom
*/
public class RouterInfo extends DatabaseEntry {
@ -41,7 +49,7 @@ public class RouterInfo extends DatabaseEntry {
private final Set<RouterAddress> _addresses;
/** may be null to save memory, no longer final */
private Set<Hash> _peers;
private /* FIXME final FIXME */ Properties _options;
private final Properties _options;
private volatile boolean _validated;
private volatile boolean _isValid;
private volatile String _stringified;
@ -67,14 +75,19 @@ public class RouterInfo extends DatabaseEntry {
_options = new OrderedProperties();
}
/**
* Used only by Router and PublishLocalRouterInfoJob.
* Copies ONLY the identity and peers.
* Does not copy published, addresses, options, or signature.
*/
public RouterInfo(RouterInfo old) {
this();
setIdentity(old.getIdentity());
setPublished(old.getPublished());
setAddresses(old.getAddresses());
//setPublished(old.getPublished());
//setAddresses(old.getAddresses());
setPeers(old.getPeers());
setOptions(old.getOptions());
setSignature(old.getSignature());
//setOptions(old.getOptions());
//setSignature(old.getSignature());
// copy over _byteified?
}
@ -90,12 +103,6 @@ public class RouterInfo extends DatabaseEntry {
return KEY_TYPE_ROUTERINFO;
}
private void resetCache() {
_stringified = null;
_byteified = null;
_hashCodeInitialized = false;
}
/**
* Retrieve the identity of the router represented
*
@ -107,10 +114,12 @@ public class RouterInfo extends DatabaseEntry {
/**
* Configure the identity of the router represented
*
* @throws IllegalStateException if RouterInfo is already signed
*/
public void setIdentity(RouterIdentity ident) {
if (_signature != null)
throw new IllegalStateException();
_identity = ident;
resetCache();
// We only want to cache the bytes for our own RI, which is frequently written.
// To cache for all RIs doubles the RI memory usage.
// setIdentity() is only called when we are creating our own RI.
@ -133,34 +142,35 @@ public class RouterInfo extends DatabaseEntry {
/**
* Date on which it was published, in milliseconds since Midnight GMT on Jan 01, 1970
*
* @throws IllegalStateException if RouterInfo is already signed
*/
public void setPublished(long published) {
if (_signature != null)
throw new IllegalStateException();
_published = published;
resetCache();
}
/**
* Retrieve the set of RouterAddress structures at which this
* router can be contacted.
*
* @return unmodifiable view, non-null
*/
public Set<RouterAddress> getAddresses() {
synchronized (_addresses) {
return new HashSet(_addresses);
}
return Collections.unmodifiableSet(_addresses);
}
/**
* Specify a set of RouterAddress structures at which this router
* can be contacted.
*
* @throws IllegalStateException if RouterInfo is already signed
*/
public void setAddresses(Set<RouterAddress> addresses) {
synchronized (_addresses) {
_addresses.clear();
if (addresses != null) _addresses.addAll(addresses);
}
resetCache();
if (_signature != null)
throw new IllegalStateException();
_addresses.clear();
if (addresses != null) _addresses.addAll(addresses);
}
/**
@ -180,8 +190,11 @@ public class RouterInfo extends DatabaseEntry {
* this router can be reached through.
*
* @deprecated Implemented here but unused elsewhere
* @throws IllegalStateException if RouterInfo is already signed
*/
public void setPeers(Set<Hash> peers) {
if (_signature != null)
throw new IllegalStateException();
if (peers == null || peers.isEmpty()) {
_peers = null;
return;
@ -192,37 +205,46 @@ public class RouterInfo extends DatabaseEntry {
_peers.clear();
_peers.addAll(peers);
}
resetCache();
}
/**
* Retrieve a set of options or statistics that the router can expose
* Retrieve a set of options or statistics that the router can expose.
*
* @deprecated use getOptionsMap()
* @return sorted, non-null, NOT a copy, do not modify!!!
*/
public Properties getOptions() {
if (_options == null) return new Properties();
synchronized (_options) {
return (Properties) _options.clone();
}
}
public String getOption(String opt) {
if (_options == null) return null;
synchronized (_options) {
return _options.getProperty(opt);
}
return _options;
}
/**
* Configure a set of options or statistics that the router can expose
* Retrieve a set of options or statistics that the router can expose.
*
* @return an unmodifiable view, non-null, sorted
* @since 0.8.13
*/
public Map getOptionsMap() {
return Collections.unmodifiableMap(_options);
}
public String getOption(String opt) {
return _options.getProperty(opt);
}
/**
* Configure a set of options or statistics that the router can expose.
* Makes a copy.
*
* @param options if null, clears current options
* @throws IllegalStateException if RouterInfo is already signed
*/
public void setOptions(Properties options) {
synchronized (_options) {
_options.clear();
if (options != null)
_options.putAll(options);
}
resetCache();
if (_signature != null)
throw new IllegalStateException();
_options.clear();
if (options != null)
_options.putAll(options);
}
/**
@ -234,14 +256,14 @@ public class RouterInfo extends DatabaseEntry {
protected byte[] getBytes() throws DataFormatException {
if (_byteified != null) return _byteified;
if (_identity == null) throw new DataFormatException("Router identity isn't set? wtf!");
if (_addresses == null) throw new DataFormatException("Router addressess isn't set? wtf!");
if (_options == null) throw new DataFormatException("Router options isn't set? wtf!");
//long before = Clock.getInstance().now();
ByteArrayOutputStream out = new ByteArrayOutputStream(6*1024);
ByteArrayOutputStream out = new ByteArrayOutputStream(2*1024);
try {
_identity.writeBytes(out);
DataHelper.writeDate(out, new Date(_published));
// avoid thrashing objects
//DataHelper.writeDate(out, new Date(_published));
DataHelper.writeLong(out, 8, _published);
int sz = _addresses.size();
if (sz <= 0 || isHidden()) {
// Do not send IP address to peers in hidden mode
@ -249,11 +271,12 @@ public class RouterInfo extends DatabaseEntry {
} else {
DataHelper.writeLong(out, 1, sz);
Collection<RouterAddress> addresses = _addresses;
if (sz > 1)
if (sz > 1) {
// WARNING this sort algorithm cannot be changed, as it must be consistent
// network-wide. The signature is not checked at readin time, but only
// later, and the addresses are stored in a Set, not a List.
addresses = (Collection<RouterAddress>) DataHelper.sortStructures(addresses);
}
for (RouterAddress addr : addresses) {
addr.writeBytes(out);
}
@ -293,7 +316,7 @@ public class RouterInfo extends DatabaseEntry {
* Determine whether this router info is authorized with a valid signature
*
*/
public synchronized boolean isValid() {
public boolean isValid() {
if (!_validated) doValidate();
return _isValid;
}
@ -304,11 +327,7 @@ public class RouterInfo extends DatabaseEntry {
* @return -1 if unknown
*/
public int getNetworkId() {
if (_options == null) return -1;
String id = null;
synchronized (_options) {
id = _options.getProperty(PROP_NETWORK_ID);
}
String id = _options.getProperty(PROP_NETWORK_ID);
if (id != null) {
try {
return Integer.parseInt(id);
@ -322,11 +341,7 @@ public class RouterInfo extends DatabaseEntry {
* @return non-null, empty string if none
*/
public String getCapabilities() {
if (_options == null) return "";
String capabilities = null;
synchronized (_options) {
capabilities = _options.getProperty(PROP_CAPABILITIES);
}
String capabilities = _options.getProperty(PROP_CAPABILITIES);
if (capabilities != null)
return capabilities;
else
@ -358,20 +373,27 @@ public class RouterInfo extends DatabaseEntry {
return (bwTier);
}
/**
* @throws IllegalStateException if RouterInfo is already signed
*/
public void addCapability(char cap) {
if (_options == null) _options = new OrderedProperties();
synchronized (_options) {
if (_signature != null)
throw new IllegalStateException();
String caps = _options.getProperty(PROP_CAPABILITIES);
if (caps == null)
_options.setProperty(PROP_CAPABILITIES, ""+cap);
else if (caps.indexOf(cap) == -1)
_options.setProperty(PROP_CAPABILITIES, caps + cap);
}
}
/**
* @throws IllegalStateException if RouterInfo is already signed
*/
public void delCapability(char cap) {
if (_options == null) return;
synchronized (_options) {
if (_signature != null)
throw new IllegalStateException();
String caps = _options.getProperty(PROP_CAPABILITIES);
int idx;
if (caps == null) {
@ -384,7 +406,6 @@ public class RouterInfo extends DatabaseEntry {
buf.deleteCharAt(idx);
_options.setProperty(PROP_CAPABILITIES, buf.toString());
}
}
}
/**
@ -409,12 +430,9 @@ public class RouterInfo extends DatabaseEntry {
*
*/
public RouterAddress getTargetAddress(String transportStyle) {
synchronized (_addresses) {
for (Iterator iter = _addresses.iterator(); iter.hasNext(); ) {
RouterAddress addr = (RouterAddress)iter.next();
if (addr.getTransportStyle().equals(transportStyle))
return addr;
}
for (RouterAddress addr : _addresses) {
if (addr.getTransportStyle().equals(transportStyle))
return addr;
}
return null;
}
@ -425,12 +443,9 @@ public class RouterInfo extends DatabaseEntry {
*/
public List<RouterAddress> getTargetAddresses(String transportStyle) {
List<RouterAddress> ret = new Vector<RouterAddress>();
synchronized(this._addresses) {
for(Object o : this._addresses) {
RouterAddress addr = (RouterAddress)o;
if(addr.getTransportStyle().equals(transportStyle))
ret.add(addr);
}
for (RouterAddress addr : _addresses) {
if(addr.getTransportStyle().equals(transportStyle))
ret.add(addr);
}
return ret;
}
@ -438,9 +453,9 @@ public class RouterInfo extends DatabaseEntry {
/**
* Actually validate the signature
*/
private synchronized void doValidate() {
_validated = true;
private void doValidate() {
_isValid = super.verifySignature();
_validated = true;
if (!_isValid) {
byte data[] = null;
@ -459,15 +474,21 @@ public class RouterInfo extends DatabaseEntry {
/**
* This does NOT validate the signature
*
* @throws IllegalStateException if RouterInfo was already read in
*/
public synchronized void readBytes(InputStream in) throws DataFormatException, IOException {
public void readBytes(InputStream in) throws DataFormatException, IOException {
if (_signature != null)
throw new IllegalStateException();
_identity = new RouterIdentity();
_identity.readBytes(in);
Date when = DataHelper.readDate(in);
if (when == null)
_published = 0;
else
_published = when.getTime();
// avoid thrashing objects
//Date when = DataHelper.readDate(in);
//if (when == null)
// _published = 0;
//else
// _published = when.getTime();
_published = DataHelper.readLong(in, 8);
int numAddresses = (int) DataHelper.readLong(in, 1);
for (int i = 0; i < numAddresses; i++) {
RouterAddress address = new RouterAddress();
@ -485,11 +506,10 @@ public class RouterInfo extends DatabaseEntry {
_peers.add(peerIdentityHash);
}
}
_options = DataHelper.readProperties(in);
DataHelper.readProperties(in, _options);
_signature = new Signature();
_signature.readBytes(in);
resetCache();
//_log.debug("Read routerInfo: " + toString());
}
@ -497,13 +517,13 @@ public class RouterInfo extends DatabaseEntry {
/**
* This does NOT validate the signature
*/
public synchronized void writeBytes(OutputStream out) throws DataFormatException, IOException {
public void writeBytes(OutputStream out) throws DataFormatException, IOException {
if (_identity == null) throw new DataFormatException("Missing identity");
if (_published < 0) throw new DataFormatException("Invalid published date: " + _published);
if (_signature == null) throw new DataFormatException("Signature is null");
//if (!isValid())
// throw new DataFormatException("Data is not valid");
ByteArrayOutputStream baos = new ByteArrayOutputStream(512);
ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
baos.write(getBytes());
_signature.writeBytes(baos);
@ -518,10 +538,11 @@ public class RouterInfo extends DatabaseEntry {
RouterInfo info = (RouterInfo) object;
return DataHelper.eq(_identity, info.getIdentity())
&& DataHelper.eq(_signature, info.getSignature())
&& _published == info.getPublished()
&& DataHelper.eq(_addresses, info.getAddresses())
&& DataHelper.eq(_options, info.getOptions())
&& DataHelper.eq(getPeers(), info.getPeers());
&& _published == info.getPublished();
// Let's speed up the NetDB
//&& DataHelper.eq(_addresses, info.getAddresses())
//&& DataHelper.eq(_options, info.getOptions())
//&& DataHelper.eq(getPeers(), info.getPeers());
}
@Override
@ -541,23 +562,19 @@ public class RouterInfo extends DatabaseEntry {
buf.append("\n\tIdentity: ").append(_identity);
buf.append("\n\tSignature: ").append(_signature);
buf.append("\n\tPublished on: ").append(new Date(_published));
Set addresses = _addresses; // getAddresses()
buf.append("\n\tAddresses: #: ").append(addresses.size());
for (Iterator iter = addresses.iterator(); iter.hasNext();) {
RouterAddress addr = (RouterAddress) iter.next();
buf.append("\n\tAddresses: #: ").append(_addresses.size());
for (RouterAddress addr : _addresses) {
buf.append("\n\t\tAddress: ").append(addr);
}
Set peers = getPeers();
Set<Hash> peers = getPeers();
buf.append("\n\tPeers: #: ").append(peers.size());
for (Iterator iter = peers.iterator(); iter.hasNext();) {
Hash hash = (Hash) iter.next();
for (Hash hash : peers) {
buf.append("\n\t\tPeer hash: ").append(hash);
}
Properties options = _options; // getOptions();
buf.append("\n\tOptions: #: ").append(options.size());
for (Iterator iter = options.keySet().iterator(); iter.hasNext();) {
String key = (String) iter.next();
String val = options.getProperty(key);
buf.append("\n\tOptions: #: ").append(_options.size());
for (Map.Entry e : _options.entrySet()) {
String key = (String) e.getKey();
String val = (String) e.getValue();
buf.append("\n\t\t[").append(key).append("] = [").append(val).append("]");
}
buf.append("]");

View File

@ -220,7 +220,8 @@ public class EepGet {
if (username != null && password != null)
get.addAuthorization(username, password);
get.addStatusListener(get.new CLIStatusListener(markSize, lineLen));
get.fetch(CONNECT_TIMEOUT, -1, inactivityTimeout);
if (!get.fetch(CONNECT_TIMEOUT, -1, inactivityTimeout))
System.exit(1);
}
public static String suggestName(String url) {

View File

@ -92,6 +92,7 @@ public class EepHead extends EepGet {
System.err.println("Etag: " + get.getETag());
} else {
System.err.println("Failed " + url);
System.exit(1);
}
}

View File

@ -260,21 +260,24 @@ public class LogManager {
/**
* Called periodically by the log writer's thread
*
* Do not log here, deadlock of LogWriter
*/
void rereadConfig() {
// perhaps check modification time
if (_log.shouldLog(Log.DEBUG))
_log.debug("Rereading configuration file");
//if (_log.shouldLog(Log.DEBUG))
// _log.debug("Rereading configuration file");
loadConfig();
}
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
*/
private void loadConfig() {
File cfgFile = _locationFile;
if (!cfgFile.exists()) {
if (!_alreadyNoticedMissingConfig) {
if (_log.shouldLog(Log.WARN))
_log.warn("Log file " + _locationFile.getAbsolutePath() + " does not exist");
//if (_log.shouldLog(Log.WARN))
// _log.warn("Log file " + _locationFile.getAbsolutePath() + " does not exist");
_alreadyNoticedMissingConfig = true;
}
parseConfig(new Properties());
@ -284,10 +287,10 @@ public class LogManager {
_alreadyNoticedMissingConfig = false;
if ((_configLastRead > 0) && (_configLastRead >= cfgFile.lastModified())) {
if (_log.shouldLog(Log.INFO))
_log.info("Short circuiting config read (last read: "
+ (_context.clock().now() - _configLastRead) + "ms ago, config file modified "
+ (_context.clock().now() - cfgFile.lastModified()) + "ms ago");
//if (_log.shouldLog(Log.INFO))
// _log.info("Short circuiting config read (last read: "
// + (_context.clock().now() - _configLastRead) + "ms ago, config file modified "
// + (_context.clock().now() - cfgFile.lastModified()) + "ms ago");
return;
}
@ -302,6 +305,9 @@ public class LogManager {
updateLimits();
}
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
*/
private void parseConfig(Properties config) {
String fmt = config.getProperty(PROP_FORMAT, DEFAULT_FORMAT);
_format = fmt.toCharArray();
@ -353,16 +359,22 @@ public class LogManager {
_consoleBufferSize = DEFAULT_CONSOLEBUFFERSIZE;
}
if (_log.shouldLog(Log.DEBUG))
_log.debug("Log set to use the base log file as " + _baseLogfilename);
//if (_log.shouldLog(Log.DEBUG))
// _log.debug("Log set to use the base log file as " + _baseLogfilename);
parseLimits(config);
}
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
*/
private void parseLimits(Properties config) {
parseLimits(config, PROP_RECORD_PREFIX);
}
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
*/
private void parseLimits(Properties config, String recordPrefix) {
_limits.clear();
if (config != null) {
@ -400,6 +412,7 @@ public class LogManager {
/**
* Update the date format
* Do not log here, deadlock of LogWriter via rereadConfig().
*
* @param format null or empty string means use default format for the locale
* (with a SHORT date and a MEDIUM time - see DateFormat)
@ -423,7 +436,7 @@ public class LogManager {
_dateFormat = fmt;
return true;
} catch (IllegalArgumentException iae) {
getLog(LogManager.class).error("Date format is invalid [" + format + "]", iae);
//getLog(LogManager.class).error("Date format is invalid [" + format + "]", iae);
return false;
}
}
@ -496,12 +509,18 @@ public class LogManager {
}
}
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
*/
private void updateLimits() {
for (Log log : _logs.values()) {
updateLimit(log);
}
}
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
*/
private void updateLimit(Log log) {
List<LogLimit> limits = getLimits(log);
LogLimit max = null;
@ -527,7 +546,10 @@ public class LogManager {
}
}
/** @return null if no matches */
/**
* Do not log here, deadlock of LogWriter via rereadConfig().
* @return null if no matches
*/
private List<LogLimit> getLimits(Log log) {
ArrayList<LogLimit> limits = null; // new ArrayList(4);
for (LogLimit limit : _limits) {

View File

@ -83,6 +83,7 @@ public class PartialEepGet extends EepGet {
System.err.println("Etag: " + get.getETag());
} else {
System.err.println("Failed " + url);
System.exit(1);
}
}

View File

@ -59,8 +59,6 @@ public class PortMapper {
*/
public int getPort(String service) {
int port = getPort(service, -1);
if(-1==port)
throw new RuntimeException("No port registered for service "+service);
return port;
}

View File

@ -26,7 +26,6 @@ public class ResettableGZIPInputStream extends InflaterInputStream {
private final ExtraByteInputStream _extraByteInputStream;
/** keep a typesafe copy of this */
private final LookaheadInputStream _lookaheadStream;
private static final byte[] _oneDummyByte = new byte[1];
private final InputStream _sequenceStream = null;
private final CRC32 _crc32;
private final byte _buf1[] = new byte[1];
@ -312,6 +311,7 @@ public class ResettableGZIPInputStream extends InflaterInputStream {
*
* http://code.google.com/p/google-apps-sso-sample/issues/detail?id=8
*
* @since 0.8.12
*/
private static class ExtraByteInputStream extends FilterInputStream {
private static final byte DUMMY = 0;

View File

@ -161,7 +161,8 @@ public class SSLEepGet extends EepGet {
get._saveCerts = true;
get._commandLine = true;
get.addStatusListener(get.new CLIStatusListener(1024, 40));
get.fetch(45*1000, -1, 60*1000);
if(!get.fetch(45*1000, -1, 60*1000))
System.exit(1);
}
private static void usage() {

48
debian/changelog vendored
View File

@ -1,3 +1,51 @@
i2p (0.8.12-2) stable; urgency=low
* postinst: Don't fail if the i2psvc group doesn't exist
-- Kill Your TV <killyourtv@i2pmail.org> Fri, 06 Jan 2012 18:43:09 +0000
i2p (0.8.12-1) stable; urgency=low
* New upstream I2P release
* Debconf:
- add wrapper.java.maxmemory from wrapper.config
- The warning about the daemon user needing to exist was confusing to some
that assumed this meant that i2psvc had to exit. This warning has been
clarified.
- Spanish, Swedish, Ukrainian translation updates
* Initscript changes/fixes:
- increase shutdown wait-time in initscript
- renumber "wrapper.additional" lines (since gaps are allowed with newer
wrapper versions)
- move I2PTEMP to /tmp/i2p-daemon
- move router.ping to /var/run/i2p
- various other clean-ups
- explicity redirect errors to stderr
* maintainer scripts:
- postinst: rewrite the handling of an existing i2psvc account
- postrm: remove /etc/default/i2p if the package is purged
-- Kill Your TV <killyourtv@i2pmail.org> Fri, 06 Jan 2012 02:49:03 +0000
i2p (0.8.11-2) stable; urgency=medium
* Fix STUPID bug running I2P with i2prouter. Thanks soundwave.
-- Kill Your TV <killyourtv@i2pmail.org> Tue, 08 Nov 2011 20:02:05 +0000
i2p (0.8.11-1) stable; urgency=low
* New Upstream Version
* sv and uk debconf translation updates
-- Kill Your TV <killyourtv@i2pmail.org> Mon, 07 Nov 2011 19:20:15 +0000
i2p (0.8.10-1) stable; urgency=medium
* New upstream version
-- Kill Your TV <killyourtv@i2pmail.org> Thu, 20 Oct 2011 05:25:04 +0000
i2p (0.8.9-1) stable; urgency=medium
* New upstream version

100
debian/i2p.init vendored
View File

@ -1,18 +1,18 @@
#!/bin/sh
### BEGIN INIT INFO
# Provides: i2p i2p-router
# Required-Start: $remote_fs $syslog $named $network $time
# Required-Stop: $remote_fs $syslog $named $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop the i2p router
# Description: i2p is a load-balanced unspoofable packet switching network
# Provides: i2p i2p-router
# Required-Start: $remote_fs $syslog $named $network $time
# Required-Stop: $remote_fs $syslog $named $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop the i2p router
# Description: i2p is a load-balanced unspoofable packet switching network
### END INIT INFO
# Check permissions
if [ "`id -ur`" != '0' ]; then
echo 'Error: you must be root.'
echo 'ERROR: You must be root to start this service.' >&2
echo
exit 1
fi
@ -25,17 +25,19 @@ DAEMON="/usr/sbin/wrapper"
PIDFILE="$RUN/$NAME.pid"
JVMPIDFILE="$RUN/routerjvm.pid"
I2P="/usr/share/i2p"
I2PTEMP="/tmp/"
I2PTEMP="/tmp/${NAME}-daemon"
WRAPPERLOG="/var/log/i2p/wrapper.log"
# Don't touch these, edit /etc/default/i2p
RUN_DAEMON="False"
NICE=
NICE=0
I2PUSER="i2psvc"
I2P_ARGS="/etc/i2p/wrapper.config \
wrapper.java.additional.1=-DloggerFilenameOverride=/var/log/i2p/log-router-@.txt \
wrapper.java.additional.5=-Dwrapper.logfile=$WRAPPERLOG \
wrapper.java.additional.10=-Dwrapper.logfile=$WRAPPERLOG \
wrapper.java.additional.11=-Di2p.dir.pid=$RUN \
wrapper.java.additional.12=-Di2p.dir.temp=$I2PTEMP \
wrapper.logfile=$WRAPPERLOG \
wrapper.pidfile=$PIDFILE \
wrapper.java.pidfile=$JVMPIDFILE \
@ -65,8 +67,8 @@ done
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
if [ -z "$RUN_DAEMON" ]; then
echo "/etc/default/$NAME is not set. Aborting."
exit 1
echo "/etc/default/$NAME is not properly configured. Aborting." >&2
exit 1
fi
case "$RUN_DAEMON" in
@ -76,50 +78,52 @@ case "$RUN_DAEMON" in
;;
esac
# is the wrapper from the service-wrapper package even installed?
# if not, bail NOW
# We need the wrapper. If it's not found, abort.
[ -x $DAEMON ] || exit 0
# Ditto for i2prouter. Even though this script doesn't call it,
# if it's not found the package probably hasn't been installed.
[ -r /usr/bin/i2prouter ] || exit 0
# Even though this script doesn't call it, check for i2prouter. If it's not
# found, it probably means that the package isn't installed anymore.
[ -x /usr/bin/i2prouter ] || exit 0
do_start()
{
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null\
|| return 1
[ -d $RUN ] || mkdir $RUN
[ -r $PIDFILE ] || touch $PIDFILE
[ -r $JVMPIDFILE ] || touch $JVMPIDFILE
[ -d $I2PTEMP ] || mkdir $I2PTEMP
chown -Rf $I2PUSER:$I2PUSER $I2PTEMP/*i2p* $I2PTEMP/router.ping $RUN > /dev/null 2>&1
chown -f -R $I2PUSER:adm /var/log/$NAME
TZ=UTC start-stop-daemon --start --quiet -c $I2PUSER --pidfile $PIDFILE --exec $DAEMON $NICE -- \
$I2P_ARGS || return 2
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null 2>&1 \
|| return 1
[ -d $RUN ] || mkdir $RUN > /dev/null 2>&1
[ -d $I2PTEMP ] || mkdir $I2PTEMP > /dev/null 2>&1
if [ -r $PIDFILE ]; then
PID="$(cat ${PIDFILE})"
if ! kill -0 $PID > /dev/null 2>&1; then
rm "$PIDFILE" "$JVMPIDFILE"
else
# we shouldn't get here, but...
echo "ERROR: Another instance of $DESC is already running." >&2
return 1
fi
fi
chown -Rf $I2PUSER:$I2PUSER $I2PTEMP $RUN > /dev/null 2>&1
chown -f -R $I2PUSER:i2psvc /var/log/$NAME > /dev/null 2>&1
TZ=UTC start-stop-daemon --start --quiet -c $I2PUSER --pidfile $PIDFILE --exec $DAEMON -n $NICE -- \
$I2P_ARGS || return 2
}
do_stop()
{
start-stop-daemon --stop --quiet --retry=TERM/15/KILL/5 --pidfile $PIDFILE -u $I2PUSER
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet --retry=TERM/60/KILL/20 --pidfile $PIDFILE -u $I2PUSER
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# start-stop-daemon --stop --quiet --oknodo --retry=TERM/15/KILL/5 -u $I2PUSER
start-stop-daemon --stop --quiet --oknodo --retry=0/60/KILL/20 --exec $DAEMON
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
rm -f "$PIDFILE" "$JVMPIDFILE"
[ -d $RUN ] && rmdir $RUN
rm -rf "$I2PTEMP" > /dev/null 2>&1
[ -d "$RUN" ] && rmdir "$RUN" 2>&1
}
do_dump()
{
start-stop-daemon --stop --quiet -s 3 --pidfile $PIDFILE -u $I2PUSER
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --stop --quiet -s 3 --pidfile $PIDFILE -u $I2PUSER
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
}
case "$1" in
@ -140,7 +144,7 @@ case "$1" in
esac
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) log_end_msg 0 ;;
@ -149,7 +153,7 @@ case "$1" in
;;
status)
status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $?
;;
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
@ -169,10 +173,10 @@ case "$1" in
esac
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|dump|status|restart|force-reload}" >&2
exit 3
;;
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|dump|status|restart|force-reload}" >&2
exit 3
;;
esac

18
debian/i2p.postinst vendored
View File

@ -61,19 +61,17 @@ case "$1" in
< /etc/i2p/wrapper.config > /etc/i2p/wrapper.config.tmp
mv -f /etc/i2p/wrapper.config.tmp /etc/i2p/wrapper.config
migrate_existing_user(){
# Adjust the user/group in /etc/passwd, mainly for upgrades from old packages that didn't
# create $I2PSYSUSER as a system group/user
usermod -c "I2P Router Daemon" -m -d $I2PHOME -g $I2PSYSUSER -s "/bin/false" \
-l $I2PSYSUSER -e 1 > /dev/null 2>&1
echo "Existing user migrated, home directory moved to $I2PHOME"
}
# Create user and group as a system user.
adduser --system --quiet --group --home $I2PHOME $I2PSYSUSER || migrate_existing_user
if getent passwd i2psvc > /dev/null 2>&1 ; then
groupadd -f $I2PSYSUSER || true
usermod -c "I2P Router Daemon" -d $I2PHOME -g $I2PSYSUSER -s "/bin/false" \
$I2PSYSUSER -e 1 > /dev/null 2>&1 || true
else
adduser --system --quiet --group --home $I2PHOME $I2PSYSUSER
fi
[ -d /var/log/i2p ] || mkdir -m0750 /var/log/i2p
chown -f -R $I2PSYSUSER:adm /var/log/i2p
chown -f -R $I2PSYSUSER:i2psvc /var/log/i2p
# Has someone set the permissions with dpkg-statoverride? If so, obey them.
if ! dpkg-statoverride --list $I2PHOME > /dev/null 2>&1

View File

@ -22,7 +22,8 @@ _Description: I2P daemon user:
account name here. For example, if your previous I2P installation is at
/home/user/i2p, you may enter 'user' here.
.
Very important: The account specified here *MUST* already exist.
Very important: If a user other than the default of 'i2psvc' is entered
here, the chosen username *MUST* already exist.
Template: i2p/memory
Type: string

View File

@ -13,7 +13,7 @@ a soname to shut lintian up.
--- a/core/c/jbigi/mbuild_jbigi.sh
+++ b/core/c/jbigi/mbuild_jbigi.sh
@@ -47,7 +47,7 @@
fi
fi
fi
COMPILEFLAGS="-fPIC -Wall"
- INCLUDES="-I. -I../../jbigi/include -I$JAVA_HOME/include -I$JAVA_HOME/include/${UNIXTYPE}"

View File

@ -1,13 +0,0 @@
Add debian package vesion to the EXTRA version field
--- a/router/java/src/net/i2p/router/RouterVersion.java
+++ b/router/java/src/net/i2p/router/RouterVersion.java
@@ -21,7 +21,7 @@
public final static long BUILD = 0;
/** for example "-test" */
- public final static String EXTRA = "";
+ public final static String EXTRA = "deb1";
public final static String FULL_VERSION = VERSION + "-" + BUILD + EXTRA;
public static void main(String args[]) {
System.out.println("I2P Router version: " + FULL_VERSION);

10
debian/po/de.po vendored
View File

@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: i2p 0.8.9-1\n"
"Report-Msgid-Bugs-To: i2p@packages.debian.org\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: 2011-07-20 04:30+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: de\n"
@ -55,7 +55,11 @@ msgstr ""
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
#, fuzzy
#| msgid "Very important: The account specified here *MUST* already exist."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr "WICHTIG; Der hier angegebene Benutzer *MUSS* bereits existieren!"
#. Type: string

34
debian/po/es.po vendored
View File

@ -1,20 +1,24 @@
# Spanish debconf translation
# Copyright (C) 2011 The I2P Project
# This file is distributed under the same license as the i2p package.
# mixxy <m1xxy@mail.i2p>, 2011
#
# Translators:
# mixxy <m1xxy@mail.i2p>, 2011.
# <punkibastardo@gmail.com>, 2011.
msgid ""
msgstr ""
"Project-Id-Version: i2p 0.8.9-1\n"
"Report-Msgid-Bugs-To: i2p@packages.debian.org\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"PO-Revision-Date: 2011-07-20 04:33+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: es\n"
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: 2011-12-21 21:22+0000\n"
"Last-Translator: punkibastardo <punkibastardo@gmail.com>\n"
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/I2P/"
"team/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#. Type: boolean
#. Description
@ -56,20 +60,24 @@ msgstr ""
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
msgstr "Muy importante: El usuario especificado aquí *YA TIENE QUE* existir."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr ""
"Muy importante: Si se introduce un nombre de usuario en este campo distinto "
"a 'i2psvc', el nombre elegido *DEBE* existir de antemano."
#. Type: string
#. Description
#: ../i2p.templates:4001
msgid "Memory that can be allocated to I2P:"
msgstr ""
msgstr "La memoria que puede ser asignada a I2P:"
#. Type: string
#. Description
#: ../i2p.templates:4001
msgid "By default, I2P will only be allowed to use up to 128MB of RAM."
msgstr ""
msgstr "Por defecto, a I2P sólo se le permitirá utilizar 128MB de RAM"
#. Type: string
#. Description
@ -78,3 +86,5 @@ msgid ""
"High bandwidth routers, as well as routers with a lot of active torrents / "
"plugins, may need to have this value increased."
msgstr ""
"Los routers con un alto ancho de banda, así como los routers con muchos "
"torrents activos / plugins, podrían necesitar un aumento este valor."

10
debian/po/pl.po vendored
View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: i2p@packages.debian.org\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: 2011-10-08 12:41+0000\n"
"Last-Translator: PolishAnon <b790979@klzlk.com>\n"
"Language-Team: Polish (http://www.transifex.net/projects/p/I2P/team/pl/)\n"
@ -58,7 +58,11 @@ msgstr ""
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
#, fuzzy
#| msgid "Very important: The account specified here *MUST* already exist."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr "Bardzo ważne: Podane tutaj konto *MUSI* istnieć."
#. Type: string

10
debian/po/ru.po vendored
View File

@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: i2p 0.8.9-1\n"
"Report-Msgid-Bugs-To: i2p@packages.debian.org\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: 2011-06-21 20:59+0500\n"
"Last-Translator: Hidden Z <hiddenz@mail.i2p>\n"
"Language-Team: ru\n"
@ -55,7 +55,11 @@ msgstr ""
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
#, fuzzy
#| msgid "Very important: The account specified here *MUST* already exist."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr ""
"Очень важно: аккаунт, указанный здесь, обязательно должен существовать."

37
debian/po/sv.po vendored
View File

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Swedish debconf translation
# Copyright (C) 2011 The I2P Project
# This file is distributed under the same license as the i2p package.
#
# Translators:
# Martin Svensson <digitalmannen@gmail.com>, 2011.
@ -8,14 +8,15 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"PO-Revision-Date: 2011-12-13 14:12+0000\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: 2011-12-26 09:48+0000\n"
"Last-Translator: Martin Svensson <digitalmannen@gmail.com>\n"
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/team/sv_SE/)\n"
"Language-Team: Swedish (Sweden) (http://www.transifex.net/projects/p/I2P/"
"team/sv_SE/)\n"
"Language: sv_SE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv_SE\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#. Type: boolean
@ -44,21 +45,25 @@ msgstr "Konto för I2P tjänsten:"
#. Description
#: ../i2p.templates:3001
msgid ""
"By default I2P is configured to run under the account i2psvc when running as"
" a daemon. To use an **existing** I2P profile you may enter a different "
"account name here. For example, if your previous I2P installation is at "
"/home/user/i2p, you may enter 'user' here."
"By default I2P is configured to run under the account i2psvc when running as "
"a daemon. To use an **existing** I2P profile you may enter a different "
"account name here. For example, if your previous I2P installation is at /"
"home/user/i2p, you may enter 'user' here."
msgstr ""
"Som standard är I2P inställt för att köras under kontot i2psvc mär den körs "
"som tjänst. För att använda ett **existerande** I2P profil, ange ett annat "
"konto här. Exempelvis, om din tidigare I2P installation är /home/user/i2p så"
" ange 'user' här."
"konto här. Exempelvis, om din tidigare I2P installation är /home/user/i2p så "
"ange 'user' här."
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
msgstr "*OBS!* Kontot som anges *måste* existera."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr ""
"OBS! Viktigt: Om en annan användare än standard 'i2psvc' skrivs in här. "
"\"MÅSTE\" det användarnamnet redan existera."
#. Type: string
#. Description
@ -81,5 +86,3 @@ msgid ""
msgstr ""
"För routrar med hög bandbredd eller routrar med hög aktivitet kan detta "
"behöva ökas"

View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: i2p@packages.debian.org\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -50,7 +50,9 @@ msgstr ""
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr ""
#. Type: string

42
debian/po/uk.po vendored
View File

@ -1,6 +1,6 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Ukrainian debconf translation
# Copyright (C) 2011 The I2P Project
# This file is distributed under the same license as the i2p package.
#
# Translators:
# Denis <gribua@gmail.com>, 2011.
@ -8,15 +8,17 @@ msgid ""
msgstr ""
"Project-Id-Version: I2P\n"
"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n"
"POT-Creation-Date: 2011-12-10 04:00+0000\n"
"POT-Creation-Date: 2011-12-27 22:25+0000\n"
"PO-Revision-Date: 2011-12-16 22:13+0000\n"
"Last-Translator: Denis <gribua@gmail.com>\n"
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.net/projects/p/I2P/team/uk_UA/)\n"
"Language-Team: Ukrainian (Ukraine) (http://www.transifex.net/projects/p/I2P/"
"team/uk_UA/)\n"
"Language: uk_UA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk_UA\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
#. Type: boolean
#. Description
@ -31,8 +33,8 @@ msgid ""
"The I2P router can be run as a daemon that starts automatically when your "
"computer boots up. This is the recommended configuration."
msgstr ""
"I2P роутер може працювати в якості демона, який запускається автоматично під"
" час запуску комп'ютера. Це рекомендована настройка."
"I2P роутер може працювати в якості демона, який запускається автоматично під "
"час запуску комп'ютера. Це рекомендована настройка."
#. Type: string
#. Description
@ -44,20 +46,24 @@ msgstr "Псевдокористувач для I2P-демона:"
#. Description
#: ../i2p.templates:3001
msgid ""
"By default I2P is configured to run under the account i2psvc when running as"
" a daemon. To use an **existing** I2P profile you may enter a different "
"account name here. For example, if your previous I2P installation is at "
"/home/user/i2p, you may enter 'user' here."
"By default I2P is configured to run under the account i2psvc when running as "
"a daemon. To use an **existing** I2P profile you may enter a different "
"account name here. For example, if your previous I2P installation is at /"
"home/user/i2p, you may enter 'user' here."
msgstr ""
"При роботі в якості демона, I2P за замовчуванням використовує аккаунт i2psvc"
" для роботи. Для використовування **існуючого** профіля I2P ви можете ввести"
" тут ім'я іншого користувача. Для прикладу, якщо ваша попередня інсталяція "
"При роботі в якості демона, I2P за замовчуванням використовує аккаунт i2psvc "
"для роботи. Для використовування **існуючого** профіля I2P ви можете ввести "
"тут ім'я іншого користувача. Для прикладу, якщо ваша попередня інсталяція "
"I2p знаходиться в /home/user/i2p, ви можете ввести тут 'user'."
#. Type: string
#. Description
#: ../i2p.templates:3001
msgid "Very important: The account specified here *MUST* already exist."
#, fuzzy
#| msgid "Very important: The account specified here *MUST* already exist."
msgid ""
"Very important: If a user other than the default of 'i2psvc' is entered "
"here, the chosen username *MUST* already exist."
msgstr "Дуже важливо: Аккаунт, вказаний тут * ПОВИНЕН * вже існувати."
#. Type: string
@ -83,5 +89,3 @@ msgstr ""
"Роутери з високою швидкістю передачі інформації, так само як роутери з "
"великою кількістю активних торрентів / плагінів, можуть потребувати "
"збільшення цього значення."

14
debian/rules vendored
View File

@ -26,7 +26,12 @@ build:
JAVA_HOME=/usr/lib/jvm/default-java
I2P=$(CURDIR)/pkg-temp
ROUTERVERSION=$(CURDIR)/router/java/src/net/i2p/router/RouterVersion.java
# I2P's version will be displayed in the router console as "$I2PVERSION-$EXTRAPREFIX$DEBIANVERSION", eg. 0.8.12-0-deb1
export EXTRAPREFIX := deb
export JAVA_HOME I2P
export DEBIANVERSION := $(shell dpkg-parsechangelog |awk -F' ' '/Version/{print $$2}' |sed 's/.*-\([[:digit:]]\{1,\}\).*$$/\1/')
#export DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
%:
@ -35,6 +40,7 @@ export JAVA_HOME I2P
clean: createcopyright
override_dh_auto_clean:
-[ -r $(CURDIR)/debian/routerversion.java.bak ] && mv -f $(CURDIR)/debian/routerversion.java.bak $(ROUTERVERSION)
dh_auto_clean
ant distclean
rm -f core/c/jbigi/*.[s]o
@ -47,8 +53,11 @@ override_dh_auto_build:
binary-indep: build-indep
build-indep:
dh_prep
#mkdir -p $(CURDIR)/installer/lib/wrapper/all
#ln -sf /usr/share/java/wrapper.jar $(CURDIR)/installer/lib/wrapper/all/wrapper.jar
cp -f $(ROUTERVERSION) $(CURDIR)/debian/routerversion.java.bak
sed -e "s/\(.*EXTRA\ =\ \)[^ ]*\"\(.*\)\"/\1\"\2-$$EXTRAPREFIX$$DEBIANVERSION\"/" < $(ROUTERVERSION) > $(ROUTERVERSION).tmp
mv -f $(ROUTERVERSION).tmp $(ROUTERVERSION)
# The next line is used by KYTV when building from source packages
#[ -r jetty/jetty-5.1.15.tgz ] && ln -sf $(CURDIR)/jetty/jetty-5.1.15.tgz $(CURDIR)/apps/jetty/jetty-5.1.15.tgz
ant preppkg-unix javadoc
echo router.updateDisabled=true > $(I2P)/router.config
mv $(I2P)/runplain.sh $(I2P)/i2prouter-nowrapper
@ -74,7 +83,6 @@ createcopyright:
@/bin/echo -e "at http://www.i2p2.de/newdevelopers#getting-the-i2p-code\n\n\n" >> $(CURDIR)/debian/copyright
@/bin/cat $(CURDIR)/LICENSE.txt >> $(CURDIR)/debian/copyright
override_dh_compress:
dh_compress -X.xsl -X.xml

View File

@ -1,3 +1,58 @@
2012-01-08 zzz
* Plugins:
- Enforce min and max Jetty versions at plugin installation
- Enforce I2P, Java, and Jetty versions at plugin startup too
* Router:
- No longer check for updates or start any threads in the Router constructor,
- for ease in building multiple routers in the JVM,
- and also because starting threads in a constructor is bad practice.
- All threads now start in runRouter().
- Installation of updates now only happens via Router.main().
* RouterInfo, RouterAddress: Optimizations and integrity checks
- Remove synchronization
- Do not allow contents to change after being set, throw IllegalStateException
- Do not copy contents out in getters
- Make options final
- Add getOption() and getOptionsMap() methods
* Router shutdown:
- Fix failsafe shutdown hook broken in 0.8.8;
HUP, INT, and TERM signals should now shut down cleanly.
- Shutdown hook no longer prevents other hooks from running
- Trap HUP, if router.gracefulHUP=true, and do graceful shutdown.
Only under wrapper, non-Windows.
- i2prouter stop now uses SIGTERM
- Implement i2prouter graceful using SIGHUP (ticket #580)
- Configure wrapper to ignore SIGUSR1 and SIGUSR2 as they will shut down
or crash the JVM
2012-01-06 kytv
* EepGet: If transfer fails, exit with status 1 (fixes #576)
* 2012-01-06 0.8.12 released
2012-01-04 kytv
* Update geoip.txt based on Maxmind GeoLite Country database from 2011-12-08
2012-01-02 kytv
* Wrapper 3.5.13 for everything other than armv7.
2012-01-02 zzz
* Fix webapp PortMapper lookup for SSL-only console
* Wrapper 3.5.13 for arm v7
2011-12-31 zzz
* Fix log NPE when saveConfig() fails at startup, thx kytv
(backport from jetty6 branch)
2011-12-30 zzz
* New Estonian translation thanks ajutine
2011-12-27 kytv
* Spanish and Swedish translation updates from Transifex
2011-12-23 zzz
* Logging: Eliminate LogWriter/LogManager deadlock
2011-12-18 zzz
* Addresses: Add utility toString() methods
* Blocklist: Buffer input to speed lookup

View File

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

View File

@ -0,0 +1,44 @@
Wrapper update instructions:
Get the community "delta pack" from http://wrapper.tanukisoftware.com/doc/english/download.jsp
Get the source from http://wrapper.tanukisoftware.com/downloads/
From the delta pack, copy lib/wrapper.jar to all/
From the delta pack, strip the binaries in lib/
(if you have the tools to do so for that architecture) and copy
to xxx/librapper.so, libwrapper.jnilib, or wrapper.dll for the following directories.
Don't forget to disable the execute bit.
linux (x86-32)
linux64 (x86-64)
solaris (sparc-32)
win32
From the delta pack, strip the binaries in bin/ and copy
to xxx/i2psvc for the same directories as above.
Don't forget to disable the execute bit.
For armv5 and armv7, build from source following the instructions
in linux-armv7/README.txt.
Don't forget to strip the binaries and disable the execute bit.
We use a trimslice for armv7 building.
For freebsd and freebsd64, we don't use the Tanuki binaries
because they are compiled in FBSD v6. Compile from source in
FreeBSD 7.4 to eliminate the dependency on the compat6x port.
Don't forget to strip the binaries and disable the execute bit.
A walkthrough can be found in freebsd/README.txt.
For linux-ppc, we don't use the Tanuki binaires because they're (mistakenly)
ppc64 compiles (TODO: File bug with Tanuki). Compile the arch-dependent bits
with "ant -Dbits=32 compile-c-unix".
For macosx, combine the universal-32 and universal-64 files
from the delta pack (each a 2-architecture fat file)
into a "quad-fat" binary. Instructions can be found in
macos/README.txt
For win64, build from source following the instructions
in win64/README-x64-win.txt.
Don't forget to strip the binaries and disable the execute bit.

View File

@ -0,0 +1,24 @@
Basic instructions for BSD
--------------------------
Prerequisites for compiling the wrapper can be installed with:
pkg_add -r apache-ant gmake openjdk6
One the prereqs are installed, cd into the wrapper source and run
For 32bit:
ant -Dbits=32 compile-c-unix
For 64bit:
ant -Dbits=64 compile-c-unix
Omit "compile-c-unix" from the command-lines if you want to compile
wrapper.jar too.
Then strip the binaries:
strip --strip-unneeded bin/wrapper lib/libwrapper.so
...and turn off the executable bit:
chmod 644 bin/wrapper lib/libwrapper.so
Don't forget to rename the binary "wrapper" to "i2psvc".

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,12 @@
OSX instructions
----------------
Make the wrapper "quadfat" using lipo:
lipo -create wrapper-macosx-universal-32 wrapper-macosx-universal-64 -output i2psvc
lipo -create libwrapper-macosx-universal-32.jnilib libwrapper-macosx-universal-64.jnilib -output libwrapper.jnilib
Then strip the wrapper:
strip i2psvc
The jnilib file does not need to be stripped.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
Changes will probably be needed for newer versions than 3.5.12.
Changes may be needed for newer versions than 3.5.13.
To use the patch in this directory, copy Makefile-windows-x86-32.nmake to
Makefile-windows-x86-64.nmake then "patch < x64-win.patch".

View File

@ -1,3 +1,10 @@
# Last updated based on Maxmind GeoLite Country
# dated 2011-12-08
# Script borrowed from Tor
#
# wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# cut -d, -f3-5 < GeoIPCountryWhois.csv|sed 's/"//g' > geoip.txt
# cut -d, -f5,6 < GeoIPCountryWhois.csv |sed 's/"//g' | sort | uniq > countries.txt
A1,Anonymous Proxy
A2,Satellite Provider
AD,Andorra
@ -179,6 +186,7 @@ PH,Philippines
PK,Pakistan
PL,Poland
PM,Saint Pierre and Miquelon
PN,Pitcairn Islands
PR,Puerto Rico
PS,Palestinian Territory
PT,Portugal

File diff suppressed because it is too large Load Diff

View File

@ -357,7 +357,11 @@ if [ "$DIST_OS" = "macosx" ]
then
OS_VER=`sw_vers | grep 'ProductVersion:' | grep -o '[0-9]*\.[0-9]*\.[0-9]*'`
DIST_ARCH="universal"
DIST_BITS="64"
if [ $(sysctl -n hw.cpu64bit_capable) -eq 1 ]; then
DIST_BITS="64"
else
DIST_BITS="32"
fi
APP_PLIST_BASE=${PLIST_DOMAIN}.${APP_NAME}
APP_PLIST=${APP_PLIST_BASE}.plist
else
@ -1008,6 +1012,7 @@ start() {
startwait
}
stopit() {
# $1 exit if down flag
@ -1024,7 +1029,7 @@ stopit() {
if [ "X$IGNORE_SIGNALS" = "X" ]
then
# Running so try to stop it.
kill $pid
kill -TERM $pid
if [ $? -ne 0 ]
then
# An explanation for the failure should have been given
@ -1076,6 +1081,43 @@ stopit() {
fi
}
graceful() {
# $1 exit if down flag
eval echo `gettext 'Stopping $APP_LONG_NAME gracefully...'`
getpid
if [ "X$pid" = "X" ]
then
eval echo `gettext '$APP_LONG_NAME was not running.'`
if [ "X$1" = "X1" ]
then
exit 1
fi
else
if [ "X$IGNORE_SIGNALS" = "X" ]
then
# Running so try to stop it.
# This sends HUP. router.gracefulHUP must be set in router.config,
# or else this will do the same as stop.
kill $pid
if [ $? -ne 0 ]
then
# An explanation for the failure should have been given
eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
exit 1
fi
else
rm -f "$ANCHORFILE"
if [ -f "$ANCHORFILE" ]
then
# An explanation for the failure should have been given
eval echo `gettext 'Unable to stop $APP_LONG_NAME.'`
exit 1
fi
fi
fi
}
pause() {
eval echo `gettext 'Pausing $APP_LONG_NAME.'`
}
@ -1553,6 +1595,7 @@ showUsage() {
echo "`gettext ' console Launch in the current console.'`"
echo "`gettext ' start Start in the background as a daemon process.'`"
echo "`gettext ' stop Stop if running as a daemon or in another console.'`"
echo "`gettext ' graceful Stop gracefully, may take up to 11 minutes.'`"
echo "`gettext ' restart Stop if running and then start.'`"
echo "`gettext ' condrestart Restart only if already running.'`"
if [ -n "$PAUSABLE" ] ; then
@ -1620,6 +1663,11 @@ docommand() {
stopit "0"
;;
'graceful')
checkUser "" "$COMMAND"
graceful "0"
;;
'restart')
checkUser touchlock "$COMMAND"
if [ ! -n "$FIXED_COMMAND" ] ; then

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

View File

@ -1,30 +1,15 @@
<!--
<i2p.news date="$Date: 2011-11-08 00:00:00 $">
<i2p.release version="0.8.11" date="2011/11/08" minVersion="0.6" />
<i2p.news date="$Date: 2012-01-06 00:00:00 $">
<i2p.release version="0.8.12" date="2012/01/06" minVersion="0.6" />
-->
<div lang="en">
<h3>2011-11-08: <b>0.8.11 <a href="http://www.i2p2.i2p/release-0.8.11.html">Released</a></b></h3>
<h3>2012-01-06: <b>0.8.12 <a href="http://www.i2p2.i2p/release-0.8.12.html">Released</a></b></h3>
<p>
The unprecedented network growth starting October 5th
has dramatically increased network congestion, especially on evenings (UTC)
and weekends. The last two releases contained a few changes that we hoped
would relieve the pressure, but unfortunately these measures have been only
modest successes. The primary issue is to limit the number of direct router
to-router connections in the network. This isn't a new problem; we've been
working on it for several years, usually with good results. However, the recent
growth pushed us over the edge once again.
</p><p>
Release 0.8.11 includes several more changes to reduce the number of router-to-router
connections and increase connection and tunnel build capacity. The goal, of course,
is to improve tunnel build success rates and general reliability. As always, there's
a few bug fixes and translation updates.
</p><p>
We welcome all our new users. Please be patient as we work to improve network
performance. Debugging congestion problems in a distributed anonymous network
is a continuing challenge. Please help improve the network
by restarting your router once the upgrade is downloaded.
The 0.8.12 release fixes several serious message corruption bugs.
It also contains a redesign of the router's congestion control, and continued
optimization of CPU and memory usage. We are hopeful that these changes will
improve network performance. Upgrading is recommended.
</p><p>
Say hello to the volunteers on the <a href="irc://127.0.0.1:6668/i2p-help">#i2p-help IRC channel</a>.
<a href="http://www.i2p2.i2p/getinvolved.html">Get involved</a>,

View File

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

View File

@ -10,7 +10,6 @@
هما موقع الرسمي للمشروع <a href="http://www.i2p2.de/index_fr.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>محرك بحث</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>ويكي مفتوح التي يستطيع الجميع تحريرها مع الكثير من المعلومات حول الشبكة</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>Freenet مدخل الى شبكة </li>
<li><a href="http://echelon.i2p">echelon.i2p</a>موقع لتحميل مجموعة من البرامج (I2PFox, iMule, I2P-Messenger, ...) <br></li>
</ul>
هناك العديد من eepsites، فقط اتبع هذه الروابط لإكتشاف المزيد!</li>

View File

@ -10,7 +10,6 @@
sichere und anonyme Verbindungen zu <a href="http://www.i2p2.de/index_de.html">www.i2p2.de</a></li>
<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,&nbsp;&hellip;)</li>
<li><a href="http://pastethis.i2p">pastethis.i2p</a>: anonymer Pastebin</li>
</ul><br />

View File

@ -10,7 +10,6 @@
conexiones seguras y an&oacute;nimas a <a href="http://www.i2p2.de/index_de.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: p&aacute;gina de b&uacute;squeda para p&aacute;ginas I2P</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>: p&aacute;gina de Ugha; un wiki p&uacute;blico con muchos enlaces</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: un proxy para acceder a Freenet</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: archivo de software e informaciones sobre I2P (con aplicaciones de BitTorrent, iMule, I2PFox, I2P-Messenger, ...)</li>
<li><a href="http://pastethis.i2p">pastethis.i2p</a>: pastebin an&oacute;nimo</li>
</ul><br />

View File

@ -136,9 +136,6 @@ les pré-versions d'I2P à essayer.</li>
<li class="tidylist"><b>Le Wiki d'Ugha</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a>: un wiki
ouvert et anonyme sur lequel chacun peut modifier toute sorte d'informations sur I2P, l'aide pour les débutants,
des liens supplémentaires dans le réseau, etc&hellip;</li>
<li class="tidylist"><b>Proxy I2P-vers-Freenet</b><br>
<a href="http://fproxy.tino.i2p/" target="_blank">fproxy.tino.i2p</a>: une fenêtre sur le monde du réseau
<a href="http://freenetproject.org/" target="_blank">Freenet</a> grâce au mandataire I2P-vers-Freenet de Tino.</li>
<li class="tidylist"><b>The Planet (sur I2P)</b><br><a href="http://planet.i2p/" target="_blank">planet.i2p</a>:
un site agrégateur RSS qui collecte les nouvelles et évènements concernant I2P et les publie toutes regroupée en un
seul endroit. Un bon aperçu de la communauté au travail!</li>
@ -248,8 +245,7 @@ via le serveur IRC <a href="irc://irc.freenode.net/i2p">Freenode</a>.
<a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Les développeurs discutent sur les
<a href="http://zzz.i2p/" target="_blank">fora de développeurs de zzz</a> ou sur le
<a href="irc://127.0.0.1:6668/i2p-dev">canal des développeurs</a>. Les développeurs peuvent consulter les sources sur
<a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">l'explorateur du dépôt de zzz</a>,
<a href="http://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p" target="_blank">l'instance de Sponge</a>, ou par
<a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">l'explorateur du dépôt de zzz</a> ou par
<a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. Nous utilisons
<a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> pour gérer les sources du code.
</li>

View File

@ -46,8 +46,6 @@ en maak verbinding met de <a href="irc://127.0.0.1:6668/i2p">server</a> op <code
<li class="tidylist"><b>Echelon's I2P Resources</b><br><a href="http://echelon.i2p/" target="_blank">echelon.i2p</a>: I2P software
archief met broncode (waar toegestaan), informatie over I2P, inclusief een <a href="http://echelon.i2p/I2Pguide/index.html" target="_blank">beginner's guide</a> en pre-release ontwikkelaars versies van I2P voor de avonturiers om te proberen.</li>
<li class="tidylist"><b>Ugha's Wiki</b><br><a href="http://ugha.i2p/" target="_blank">ugha.i2p</a>: Een open wiki die iedereen kan bewerken met veel informatie over I2P, help voor beginners en meer links voor het I2P netwerk en meer.</li>
<li class="tidylist"><b>I2P-to-Freenet Proxy</b><br><a href="http://fproxy.tino.i2p/" target="_blank">fproxy.tino.i2p</a>:
Neem een kijkje in de wereld van het <a href="http://freenetproject.org/" target="_blank">Freenet</a> netwerk met 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>: Een RSS aggregator site die nieuwswaardigheden en evenementen rondom I2P verzamelt en publiceerd in één plek. Een goede site om te bezoeken om de community aan het werk te zien!</li>
<li class="tidylist"><b>Eepsite Search Engine</b><br><a href="http://eepsites.i2p/" target="_blank">eepsites.i2p</a>: Een
anonieme zoek machine.</li>
@ -86,7 +84,7 @@ Als je achter een verbiedende firewall zit maar wel onbeperkt uitgaande toegang,
of langs komen in
<a href="irc://127.0.0.1:6668/i2p-help">#i2p-help</a>, <a href="irc://127.0.0.1:6668/i2p">#i2p</a> or <a href="irc://127.0.0.1:6668/i2p-chat">#i2p-chat</a> op I2P's Internet IRC netwerk (<code>irc.postman.i2p</code> or <code>irc.freshcoffee.i2p</code>). Deze kanalen zijn tevens beschikbaar buiten I2P's anonieme versleutelde netwerk via <a href="irc://irc.freenode.net/i2p">Freenode IRC</a>.</li>
<li class="tidylist"><b>Bugs melden</b><br>Als je een bug wil melden, maak een ticket aan op <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Voor ontwikkelaar-gerelateerde discussies, bezoek <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> of bezoek het <a href="irc://127.0.0.1:6668/i2p-dev">developer kanaal</a> op I2P's IRC netwerk. Ontwikkelaars kunnen de broncode doorbladeren op <a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">zzz's mtn repository viewer</a>, <a href="http://i2host.i2p/cgi-bin/view/branch/changes/i2p.i2p" target="_blank">Sponge's instance</a>, of via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We gebruiken hoofdzakelijk <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> om de broncode bij te beheren.</li>
<li class="tidylist"><b>Bugs melden</b><br>Als je een bug wil melden, maak een ticket aan op <a href="http://trac.i2p2.i2p/" target="_blank">trac.i2p2.i2p</a>. Voor ontwikkelaar-gerelateerde discussies, bezoek <a href="http://zzz.i2p/" target="_blank">zzz's developer forums</a> of bezoek het <a href="irc://127.0.0.1:6668/i2p-dev">developer kanaal</a> op I2P's IRC netwerk. Ontwikkelaars kunnen de broncode doorbladeren op <a href="http://stats.i2p/cgi-bin/viewmtn/" target="_blank">zzz's mtn repository viewer</a> of via <a href="http://trac.i2p2.i2p/browser" target="_blank">trac.i2p2.i2p</a>. We gebruiken hoofdzakelijk <a href="http://www.i2p2.i2p/monotone.html" target="_blank">monotone</a> om de broncode bij te beheren.</li>
<li class="tidylist"><b>Raak betrokken!</b><br>I2P word ontwikkeld en onderhouden door hoofdzakelijk ongefinancierde en vrijwillige community leden. We accepteren graag <a href="http://www.i2p2.i2p/donate.html" target="_blank">donaties</a>, welke zullen besteed aan essentiele hosting en administratie kosten. We hebben <a href="http://www.i2p2.i2p/bounties.html" target="_blank">contante beloningen</a> voor aspecten van I2P voor ontwikkelaars welke graag mee willen ontwikkelen, we zijn altijd opzoek naar meer <a href="http://www.i2p2.i2p/newdevelopers.html" target="_blank">Java coders</a>, <a href="http://www.i2p2.i2p/newtranslators.html" target="_blank">vertalers</a>, promoters en gebruikers om I2P te helpen groeien. Hoe groter het I2P netwerk, hoe meer iedereen van de voordelen profiteert, simpelweg al je vrienden vertellen over I2P en ze helpen het te installeren is al een grote hulp. Voor meer informatie over hoe je betrokken kan raken, bezoek de <a href="http://www.i2p2.i2p/getinvolved.html" target="_blank">vrijwilligers pagina</a> op de website.</li>
</ul><div class="topness"><a href="#top">[Naar Boven]</a></div>

View File

@ -10,7 +10,6 @@
conexões seguras e anônimas para <a href="http://www.i2p2.de/index_de.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>: b&uacute;scador para as p&aacute;ginas I2P</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>: p&aacute;gina de Ugha; um wiki p&uacute;blico com muitos links</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>: um proxy para acessar à Freenet</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: arquivo de software e informações sobre I2P (com aplicações de BitTorrent, iMule, I2PFox, I2P-Messenger, ...)</li>
<li><a href="http://pastethis.i2p">pastethis.i2p</a>: pastebin anônimo</li>
</ul><br />

View File

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

View File

@ -20,8 +20,6 @@ href="http://www.i2p2.de/">www.i2p2.de</a></li>
s&ouml;kmotor</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>: ugha's eepsida, en
wiki som alla kan f&ouml;r&auml;ndra, inneh&aring;ller m&aring;nga l&auml;nkar</li>
<li><a href="http://fproxy.tino.i2p">fproxy.tino.i2p</a>:
Freenet proxy</li>
<li><a href="http://echelon.i2p">echelon.i2p</a>: programvaruförråd och information om I2P</li>
<li><a href="http://pastethis.i2p">pastethis.i2p</a>: anonym och säker pastebin</li>
</ul><br>

View File

@ -9,7 +9,6 @@
<li><a href="http://www.i2p2.i2p/index_zh.html">www.i2p2.i2p</a> 与镜像 <a href="http://i2p-projekt.i2p/index_zh.html">i2p-projekt.i2p</a>:&nbsp;可以安全匿名的访问I2P官网 <a href="http://www.i2p2.de/index_zh.html">www.i2p2.de</a></li>
<li><a href="http://eepsites.i2p/">eepsites.i2p</a>:&nbsp;I2P网络里的 “Google” 可以用来搜索各个匿名小站</li>
<li><a href="http://ugha.i2p/">ugha.i2p</a>:UGHA 的 I2P 小站开放编辑的WIKI有丰富的链接</li>
<li><a href="http://fproxy.tino.i2p/">fproxy.tino.i2p</a>:FREENET 代理</li>
<li><a href="http://echelon.i2p/">echelon.i2p</a>:软件存档及有关I2P的相关文档&nbsp;(例如 I2P&nbsp;Messenger 基于I2P的匿名聊天工具等)&nbsp;</li>
<li><a href="http://pastethis.i2p/">pastethis.i2p</a>:安全匿名的公共剪贴板</li>
</ul> <br>

View File

@ -168,6 +168,10 @@ wrapper.logfile.maxfiles=2
# Log Level for sys/event log output. (See docs for log levels)
wrapper.syslog.loglevel=NONE
# these will shut down or crash the JVM
wrapper.signal.mode.usr1=IGNORE
wrapper.signal.mode.usr2=IGNORE
# choose what to do if the JVM kills itself based on the exit code
wrapper.on_exit.default=SHUTDOWN
wrapper.on_exit.0=SHUTDOWN

View File

@ -488,9 +488,7 @@ public class Blocklist {
for (int j = 0; j < paddr.size(); j++) {
RouterAddress pa = (RouterAddress) pladdr.get(j);
if (pa == null) continue;
Properties pprops = pa.getOptions();
if (pprops == null) continue;
String phost = pprops.getProperty("host");
String phost = pa.getOption("host");
if (phost == null) continue;
if (oldphost != null && oldphost.equals(phost)) continue;
oldphost = phost;

View File

@ -12,6 +12,7 @@ package net.i2p.router;
* Defines the criteria for selecting a set of peers for use when searching the
* PeerManager
*
* Only used by PeerTestJob, which may not have a point.
*/
public class PeerSelectionCriteria {
/** The peers will be used in a tunnel */

View File

@ -60,7 +60,7 @@ import net.i2p.util.SimpleScheduler;
*
*/
public class Router implements RouterClock.ClockShiftListener {
private final Log _log;
private Log _log;
private final RouterContext _context;
private final Map<String, String> _config;
/** full path */
@ -77,9 +77,9 @@ public class Router implements RouterClock.ClockShiftListener {
private ShutdownHook _shutdownHook;
/** non-cancellable shutdown has begun */
private volatile boolean _shutdownInProgress;
private final I2PThread _gracefulShutdownDetector;
private final RouterWatchdog _watchdog;
private final Thread _watchdogThread;
private I2PThread _gracefulShutdownDetector;
private RouterWatchdog _watchdog;
private Thread _watchdogThread;
public final static String PROP_CONFIG_FILE = "router.configLocation";
@ -128,9 +128,17 @@ public class Router implements RouterClock.ClockShiftListener {
System.setProperty("Dorg.mortbay.util.FileResource.checkAliases", "true");
}
/**
* Instantiation only. Starts no threads. Does not install updates.
* RouterContext is created but not initialized.
* You must call runRouter() after any constructor to start things up.
*/
public Router() { this(null, null); }
public Router(Properties envProps) { this(null, envProps); }
public Router(String configFilename) { this(configFilename, null); }
public Router(String configFilename, Properties envProps) {
_gracefulExitCode = -1;
_config = new ConcurrentHashMap();
@ -233,16 +241,20 @@ public class Router implements RouterClock.ClockShiftListener {
String now = Long.toString(System.currentTimeMillis());
_config.put("router.firstInstalled", now);
_config.put("router.updateLastInstalled", now);
// only compatible with new i2prouter script
_config.put("router.gracefulHUP", "true");
saveConfig();
}
// ********* Start no threads before here ********* //
}
// This is here so that we can get the directory location from the context
// for the zip file and the base location to unzip to.
// If it does an update, it never returns.
// I guess it's better to have the other-router check above this, we don't want to
// overwrite an existing running router's jar files. Other than ours.
installUpdates();
/**
* Initializes the RouterContext.
* Starts some threads. Does not install updates.
* All this was in the constructor.
* @since 0.8.12
*/
private void startupStuff() {
// ********* Start no threads before here ********* //
//
// NOW we can start the ping file thread.
@ -372,11 +384,18 @@ public class Router implements RouterClock.ClockShiftListener {
public RouterContext getContext() { return _context; }
/**
* Initializes the RouterContext.
* Starts the threads. Does not install updates.
*/
void runRouter() {
if (_isAlive)
throw new IllegalStateException();
startupStuff();
_isAlive = true;
_started = _context.clock().now();
try {
Runtime.getRuntime().removeShutdownHook(_shutdownHook);
Runtime.getRuntime().addShutdownHook(_shutdownHook);
} catch (IllegalStateException ise) {}
I2PThread.addOOMEventListener(_oomListener);
@ -987,9 +1006,12 @@ public class Router implements RouterClock.ClockShiftListener {
/**
* Cancel the JVM runtime hook before calling this.
* Called by the ShutdownHook.
* NOT to be called by others, use shutdown().
*/
public void shutdown2(int exitCode) {
_shutdownInProgress = true;
_log.log(Log.CRIT, "Starting final shutdown(" + exitCode + ')');
// So we can get all the way to the end
// No, you can't do Thread.currentThread.setDaemon(false)
if (_killVMOnEnd) {
@ -1004,6 +1026,7 @@ public class Router implements RouterClock.ClockShiftListener {
// Run the shutdown hooks first in case they want to send some goodbye messages
// Maybe we need a delay after this too?
for (Runnable task : _context.getShutdownTasks()) {
//System.err.println("Running shutdown task " + task.getClass());
if (_log.shouldLog(Log.WARN))
_log.warn("Running shutdown task " + task.getClass());
try {
@ -1098,7 +1121,7 @@ public class Router implements RouterClock.ClockShiftListener {
//Runtime.getRuntime().halt(exitCode);
// allow the Runtime shutdown hooks to execute
Runtime.getRuntime().exit(exitCode);
} else {
} else if (System.getProperty("java.vendor").contains("Android")) {
Runtime.getRuntime().gc();
}
}
@ -1266,13 +1289,18 @@ public class Router implements RouterClock.ClockShiftListener {
public static void main(String args[]) {
System.out.println("Starting I2P " + RouterVersion.FULL_VERSION);
// installUpdates() moved to constructor so we can get file locations from the context
// installUpdates();
//verifyWrapperConfig();
Router r = new Router();
if ( (args != null) && (args.length == 1) && ("rebuild".equals(args[0])) ) {
r.rebuildNewIdentity();
} else {
// This is here so that we can get the directory location from the context
// for the zip file and the base location to unzip to.
// If it does an update, it never returns.
// I guess it's better to have the other-router check above this, we don't want to
// overwrite an existing running router's jar files. Other than ours.
r.installUpdates();
// ********* Start no threads before here ********* //
r.runRouter();
}
}
@ -1281,6 +1309,7 @@ public class Router implements RouterClock.ClockShiftListener {
private static final String DELETE_FILE = "deletelist.txt";
/**
* Context must be available.
* Unzip update file found in the router dir OR base dir, to the base dir
*
* If we can't write to the base dir, complain.

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 = 24;
public final static long BUILD = 1;
/** 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

@ -41,7 +41,7 @@ public class PublishLocalRouterInfoJob extends JobImpl {
RouterInfo ri = new RouterInfo(getContext().router().getRouterInfo());
if (_log.shouldLog(Log.DEBUG))
_log.debug("Old routerInfo contains " + ri.getAddresses().size()
+ " addresses and " + ri.getOptions().size() + " options");
+ " addresses and " + ri.getOptionsMap().size() + " options");
Properties stats = getContext().statPublisher().publishStatistics();
stats.setProperty(RouterInfo.PROP_NETWORK_ID, ""+Router.NETWORK_ID);
try {
@ -60,7 +60,7 @@ public class PublishLocalRouterInfoJob extends JobImpl {
getContext().router().setRouterInfo(ri);
if (_log.shouldLog(Log.INFO))
_log.info("Newly updated routerInfo is published with " + stats.size()
+ "/" + ri.getOptions().size() + " options on "
+ "/" + ri.getOptionsMap().size() + " options on "
+ new Date(ri.getPublished()));
try {
getContext().netDb().publish(ri);

View File

@ -133,8 +133,7 @@ class FloodfillMonitorJob extends JobImpl {
if (ra == null)
happy = false;
else {
Properties props = ra.getOptions();
if (props == null || props.getProperty("ihost0") != null)
if (ra.getOption("ihost0") != null)
happy = false;
}
}

Some files were not shown because too many files have changed in this diff Show More