From 7d2bbaad9432cb69c4c3ad1f9de6ffbd9a8fcfc9 Mon Sep 17 00:00:00 2001 From: m1xxy Date: Sun, 2 Jan 2011 04:35:07 +0000 Subject: [PATCH 01/15] =?UTF-8?q?actualizar=20->=20actualizaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/routerconsole/locale/messages_es.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/routerconsole/locale/messages_es.po b/apps/routerconsole/locale/messages_es.po index 33a6aecb1..3f85ac541 100644 --- a/apps/routerconsole/locale/messages_es.po +++ b/apps/routerconsole/locale/messages_es.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-28 00:08+0000\n" -"PO-Revision-Date: 2010-12-31 03:12+0100\n" +"PO-Revision-Date: 2011-01-02 03:24+0100\n" "Last-Translator: mixxy \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -119,13 +119,13 @@ msgstr "rechazando túneles: límite alcanzado" #. always leave at least 4KBps free when allowing #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:301 msgid "Rejecting tunnels: Bandwidth limit" -msgstr "rechazando túneles: límite de ancho de banda" +msgstr "rechazando túneles: límite del ancho de banda" #. hard to do {0} from here #. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: Bandwidth limit"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:371 msgid "Rejecting most tunnels: Bandwidth limit" -msgstr "rechazando la mayor parte de los túneles: límite de ancho de banda" +msgstr "rechazando la mayor parte de los túneles: límite del ancho de banda" #. hard to do {0} from here #. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels"); @@ -1727,7 +1727,7 @@ msgstr "Buscar actualizaciones" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:235 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:242 msgid "Update" -msgstr "Actualizar" +msgstr "Actualización" #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:266 #, java-format @@ -3887,7 +3887,7 @@ msgstr "Ancho de Banda" #: ../java/strings/Strings.java:58 msgid "BandwidthLimiter" -msgstr "Limitador de Ancho de Banda" +msgstr "Limitador del ancho de banda" #: ../java/strings/Strings.java:59 msgid "ClientMessages" @@ -4089,7 +4089,7 @@ msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:298 msgid "Bandwidth limiter" -msgstr "Limitador de ancho de banda" +msgstr "Limitador del ancho de banda" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:300 msgid "I2P will work best if you configure your rates to match the speed of your internet connection." From 8fdc4bc9b037146be572eb545443bfca6cd7b75b Mon Sep 17 00:00:00 2001 From: m1xxy Date: Sun, 2 Jan 2011 04:36:00 +0000 Subject: [PATCH 02/15] routerconsole de add ; --- apps/routerconsole/locale/messages_de.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/routerconsole/locale/messages_de.po b/apps/routerconsole/locale/messages_de.po index ddd4c2393..4c323cd8e 100644 --- a/apps/routerconsole/locale/messages_de.po +++ b/apps/routerconsole/locale/messages_de.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-28 00:08+0000\n" -"PO-Revision-Date: 2010-12-31 02:47+0100\n" +"PO-Revision-Date: 2011-01-01 21:19+0100\n" "Last-Translator: mixxy \n" "Language-Team: echelon , Sperreingang \n" "MIME-Version: 1.0\n" @@ -2683,7 +2683,7 @@ msgstr "NTCP und SSU mit Hilfsrouter" #: ../java/src/net/i2p/router/web/NewsFetcher.java:93 #, java-format msgid "News last updated {0} ago." -msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0}" +msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0};" #: ../java/src/net/i2p/router/web/NewsFetcher.java:99 #, java-format From 785d1846769b5914b27ded2ea2bd2383a4f6d3c6 Mon Sep 17 00:00:00 2001 From: m1xxy Date: Sun, 2 Jan 2011 06:32:42 +0000 Subject: [PATCH 03/15] corerection on eespite de --- installer/resources/eepsite.help/help/index_de.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/resources/eepsite.help/help/index_de.html b/installer/resources/eepsite.help/help/index_de.html index dec77ee68..3760830e5 100644 --- a/installer/resources/eepsite.help/help/index_de.html +++ b/installer/resources/eepsite.help/help/index_de.html @@ -29,7 +29,7 @@ ~/.i2p/eepsite/docroot/ (Linux) oder %APPDATA%\I2P\eepsite\docroot\ (Windows) und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie – vertreten durch Ihre Eepseite – von anderen im I2P-Netz und, soweit -verfügbar, über private „Out-Proxys“ weltweit auch im offenen Internet erreichbar sein.

+verfügbar, über private „In-Proxys“ weltweit auch im offenen Internet erreichbar sein.

In I2P werden Eepseiten unter Verwendung eines Schlüssels (key) adressiert. Dieser wird durch eine sehr lange Base64-Zeichenkette1 dargestellt. (Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration der Eepseite unter I2PTunnel anzeigen lassen.)

From f015ce1f0bfeef205e5c3c44d35640db72cd4851 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Jan 2011 18:55:26 +0000 Subject: [PATCH 04/15] log tweak --- router/java/src/net/i2p/router/JobQueueRunner.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/router/java/src/net/i2p/router/JobQueueRunner.java b/router/java/src/net/i2p/router/JobQueueRunner.java index 8b55a8c6c..ca0ee3f1b 100644 --- a/router/java/src/net/i2p/router/JobQueueRunner.java +++ b/router/java/src/net/i2p/router/JobQueueRunner.java @@ -161,8 +161,8 @@ class JobQueueRunner implements Runnable { if (_log.shouldLog(Log.CRIT)) _log.log(Log.CRIT, "Error processing job [" + _currentJob.getName() + "] on thread " + _id + ": " + t.getMessage(), t); - if (_log.shouldLog(Log.ERROR)) - _log.error("The above job was enqueued by: ", _currentJob.getAddedBy()); + //if (_log.shouldLog(Log.ERROR)) + // _log.error("The above job was enqueued by: ", _currentJob.getAddedBy()); } } } From af90121b47eb316b4527d233aae4361a7f8719f5 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Jan 2011 18:56:04 +0000 Subject: [PATCH 05/15] cache tweak --- core/java/src/net/i2p/data/SessionTag.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/java/src/net/i2p/data/SessionTag.java b/core/java/src/net/i2p/data/SessionTag.java index 761305d18..c8179771e 100644 --- a/core/java/src/net/i2p/data/SessionTag.java +++ b/core/java/src/net/i2p/data/SessionTag.java @@ -10,6 +10,7 @@ package net.i2p.data; */ import net.i2p.util.RandomSource; +import net.i2p.util.SimpleByteCache; /** * 32 bytes, usually of random data. @@ -28,7 +29,7 @@ public class SessionTag extends SimpleDataStructure { public SessionTag(boolean create) { super(); if (create) { - _data = new byte[BYTE_LENGTH]; + _data = SimpleByteCache.acquire(BYTE_LENGTH); RandomSource.getInstance().nextBytes(_data); } } From bb74bc33d13f0ffcc6b5cdd7aae2336cc5b7ed3c Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Jan 2011 18:56:45 +0000 Subject: [PATCH 06/15] fix bw limits handling in standard session --- core/java/src/net/i2p/client/BWLimitsMessageHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/java/src/net/i2p/client/BWLimitsMessageHandler.java b/core/java/src/net/i2p/client/BWLimitsMessageHandler.java index be00d3fff..34fa81ec8 100644 --- a/core/java/src/net/i2p/client/BWLimitsMessageHandler.java +++ b/core/java/src/net/i2p/client/BWLimitsMessageHandler.java @@ -22,6 +22,6 @@ class BWLimitsMessageHandler extends HandlerImpl { if (_log.shouldLog(Log.DEBUG)) _log.debug("Handle message " + message); BandwidthLimitsMessage msg = (BandwidthLimitsMessage) message; - ((I2PSimpleSession)session).bwReceived(msg.getLimits()); + session.bwReceived(msg.getLimits()); } } From bb39d8c6fd401470d2d875948cc241afecd7b196 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 2 Jan 2011 18:58:06 +0000 Subject: [PATCH 07/15] disable spell check in textareas --- .../java/src/net/i2p/router/web/ConfigLoggingHelper.java | 2 +- apps/routerconsole/jsp/configadvanced.jsp | 2 +- apps/routerconsole/jsp/configkeyring.jsp | 2 +- apps/routerconsole/jsp/configreseed.jsp | 2 +- apps/routerconsole/jsp/configupdate.jsp | 4 ++-- history.txt | 5 +++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java index 7bd4e4546..6b86caeb2 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigLoggingHelper.java @@ -38,7 +38,7 @@ public class ConfigLoggingHelper extends HelperBase { sortedLogs.add(prefix); } - buf.append("

+

" > " > diff --git a/apps/routerconsole/jsp/configkeyring.jsp b/apps/routerconsole/jsp/configkeyring.jsp index b260f843a..7438f5580 100644 --- a/apps/routerconsole/jsp/configkeyring.jsp +++ b/apps/routerconsole/jsp/configkeyring.jsp @@ -38,7 +38,7 @@

- + diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp index 0829112e9..8e9373442 100644 --- a/apps/routerconsole/jsp/configreseed.jsp +++ b/apps/routerconsole/jsp/configreseed.jsp @@ -44,7 +44,7 @@ > <%=intl._("Use non-SSL only")%> - + diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp index 193061421..47b8b9310 100644 --- a/apps/routerconsole/jsp/configupdate.jsp +++ b/apps/routerconsole/jsp/configupdate.jsp @@ -50,9 +50,9 @@ - + - + diff --git a/history.txt b/history.txt index 2796a8d01..db93426e6 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,8 @@ +2011-01-02 zzz + * Console: Disable spellcheck in textareas + * Data Structures: More tweaks + * I2CP: Fix BWLimits Message reply in standard session + 2010-12-31 zzz * Console: - Make themes and history.txt return 403 on error, diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index c10128fe6..fecba78d6 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 6; + public final static long BUILD = 7; /** for example "-test" */ public final static String EXTRA = ""; From aeb1d40658e6498fa2f99b45801a767c75bb2b32 Mon Sep 17 00:00:00 2001 From: m1xxy Date: Mon, 3 Jan 2011 00:07:05 +0000 Subject: [PATCH 08/15] minor tweaks and accomodation in lang=es --- apps/i2psnark/locale/messages_es.po | 10 +++++----- apps/routerconsole/locale/messages_es.po | 12 ++++++------ installer/resources/initialNews/initialNews_es.xml | 4 ++-- installer/resources/readme/readme_es.html | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/apps/i2psnark/locale/messages_es.po b/apps/i2psnark/locale/messages_es.po index c56c95c06..cf863e521 100644 --- a/apps/i2psnark/locale/messages_es.po +++ b/apps/i2psnark/locale/messages_es.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: I2P i2psnark\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-19 03:16+0000\n" -"PO-Revision-Date: 2010-12-31 01:09+0100\n" +"PO-Revision-Date: 2011-01-03 00:58+0100\n" "Last-Translator: mixxy \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -323,7 +323,7 @@ msgstr "Arrancar todos" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372 msgid "No torrents loaded." -msgstr "No cargado ningún torrent" +msgstr "No está cargado ningún torrent" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377 msgid "Totals" @@ -644,7 +644,7 @@ msgstr "Si marcado, los torrents añadidos se iniciarán de forma automática." #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198 msgid "Theme" -msgstr "tema" +msgstr "Tema" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1211 msgid "Startup delay" @@ -664,7 +664,7 @@ msgstr "pares" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244 msgid "Up bandwidth limit" -msgstr "Límite de ancho de banda para la subida" +msgstr "Límite del ancho de banda para la subida" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1247 msgid "Half available bandwidth recommended." @@ -696,7 +696,7 @@ msgstr "Preferencias de salida" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1286 msgid "I2CP host" -msgstr "Huésped I2CP" +msgstr "Anfitrión I2CP" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291 msgid "I2CP port" diff --git a/apps/routerconsole/locale/messages_es.po b/apps/routerconsole/locale/messages_es.po index 3f85ac541..94fe7ce5f 100644 --- a/apps/routerconsole/locale/messages_es.po +++ b/apps/routerconsole/locale/messages_es.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-28 00:08+0000\n" -"PO-Revision-Date: 2011-01-02 03:24+0100\n" +"PO-Revision-Date: 2011-01-03 01:03+0100\n" "Last-Translator: mixxy \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -2412,7 +2412,7 @@ msgstr "Nunca" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90 msgid "Every" -msgstr "Cada" +msgstr "cada" #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:108 msgid "Notify only" @@ -3247,11 +3247,11 @@ msgstr "" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:83 msgid "Webserver" -msgstr "" +msgstr "Servidor web" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:91 msgid "Configure I2P Router" -msgstr "Configura Enrutador I2P" +msgstr "Configura enrutador I2P" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93 msgid "I2P Internals" @@ -3435,7 +3435,7 @@ msgstr "Demora - túnel" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:440 msgid "Backlog" -msgstr "tareas" +msgstr "Peticiones" #: ../java/src/net/i2p/router/web/SummaryHelper.java:106 msgid "ERR-Client Manager I2CP Error - check logs" @@ -5073,7 +5073,7 @@ msgstr "Actualizando" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:317 msgid "News URL" -msgstr "URL de Noticias" +msgstr "URL de noticias" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:321 msgid "Refresh frequency" diff --git a/installer/resources/initialNews/initialNews_es.xml b/installer/resources/initialNews/initialNews_es.xml index 7fca2669e..18283c408 100644 --- a/installer/resources/initialNews/initialNews_es.xml +++ b/installer/resources/initialNews/initialNews_es.xml @@ -5,11 +5,11 @@ ¡Ten todavía paciencia mientras I2P esté arrancando y encontrando otros enrutadores I2P!

-Este es el momento ideal para adaptar tu configuración de ancho de banda en la +Este es el momento ideal para adaptar tu configuración del ancho de banda en la página de configuración.

-En cuanto veas a la izquierda una conexión llamada "shared clients", puedes visitar nuestros FAQ. +En cuanto veas a la izquierda una conexión llamada "clientes diferentes", puedes visitar nuestros FAQ.

¡Conécta tu cliente IRC con el servidor localhost:6668 y ven a saludarnos en los canales diff --git a/installer/resources/readme/readme_es.html b/installer/resources/readme/readme_es.html index 3fe51f222..b04baaf91 100644 --- a/installer/resources/readme/readme_es.html +++ b/installer/resources/readme/readme_es.html @@ -12,7 +12,7 @@ Svenska

¡Bienvenido a I2P!

-

Si acabas de iniciar I2P, al observar el menú de la izquierda, deberías notar que los números al lado de "Active:" subirán en los próximos minutos y luego verás allí un Destino llamado "shared clients" (si no, ¡mira abajo!)
Apenas aparezca esto, puedes:

+

Si acabas de iniciar I2P, al observar el menú de la izquierda, deberías notar que los números al lado de "Activos:" subirán en los próximos minutos y luego verás allí un Destino llamado "clientes diferentes" (si no, ¡mira abajo!)
Apenas aparezca esto, puedes:

  • visitar páginas I2P ("Eepsites") - En I2P hay páginas web anónimas: Configura tu navegador web para usar el proxy HTTP: 127.0.0.1 puerto 4444, luego visita una página I2P:
    From b92ba5edbb1295c2dbeceea49348abd0f99fe8f2 Mon Sep 17 00:00:00 2001 From: m1xxy Date: Mon, 3 Jan 2011 00:14:45 +0000 Subject: [PATCH 09/15] concretization in lang=es --- apps/routerconsole/locale/messages_es.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/routerconsole/locale/messages_es.po b/apps/routerconsole/locale/messages_es.po index 94fe7ce5f..77de2b2d4 100644 --- a/apps/routerconsole/locale/messages_es.po +++ b/apps/routerconsole/locale/messages_es.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: I2P routerconsole\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-28 00:08+0000\n" -"PO-Revision-Date: 2011-01-03 01:03+0100\n" +"PO-Revision-Date: 2011-01-03 01:13+0100\n" "Last-Translator: mixxy \n" "Language-Team: foo \n" "MIME-Version: 1.0\n" @@ -3435,7 +3435,7 @@ msgstr "Demora - túnel" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:440 msgid "Backlog" -msgstr "Peticiones" +msgstr "Peticiones pendientes" #: ../java/src/net/i2p/router/web/SummaryHelper.java:106 msgid "ERR-Client Manager I2CP Error - check logs" From 2e51577f396b7148bf95feef412d6aa392dd8238 Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 4 Jan 2011 22:35:34 +0000 Subject: [PATCH 10/15] fix up findbugs target --- build.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/build.xml b/build.xml index 7f6ee43b4..9c8fa4c4f 100644 --- a/build.xml +++ b/build.xml @@ -763,9 +763,9 @@ - + - + @@ -779,15 +779,16 @@ - - + + - + + From e2c3ea3ffc84faea9f623078dd825fad91d57b89 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Jan 2011 14:47:48 +0000 Subject: [PATCH 11/15] log tweak thx ech --- .../src/net/i2p/router/tunnel/pool/BuildRequestor.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java b/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java index 874c2aebc..7a79f927c 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildRequestor.java @@ -127,8 +127,8 @@ class BuildRequestor { TunnelBuildMessage msg = createTunnelBuildMessage(ctx, pool, cfg, pairedTunnel, exec); long createTime = System.currentTimeMillis()-beforeCreate; if (msg == null) { - if (log.shouldLog(Log.ERROR)) - log.error("Tunnel build failed, as we couldn't create the tunnel build message for " + cfg); + if (log.shouldLog(Log.WARN)) + log.warn("Tunnel build failed, as we couldn't create the tunnel build message for " + cfg); exec.buildComplete(cfg, pool); return; } @@ -202,6 +202,7 @@ class BuildRequestor { * If the tunnel is short enough, and everybody in the tunnel, and the * OBEP or IBGW for the paired tunnel, all support the new variable-sized tunnel build message, * then use that, otherwise the old 8-entry version. + * @return null on error */ private static TunnelBuildMessage createTunnelBuildMessage(RouterContext ctx, TunnelPool pool, PooledTunnelCreatorConfig cfg, TunnelInfo pairedTunnel, BuildExecutor exec) { Log log = ctx.logManager().getLog(BuildRequestor.class); @@ -275,8 +276,8 @@ class BuildRequestor { Hash peer = cfg.getPeer(hop); RouterInfo peerInfo = ctx.netDb().lookupRouterInfoLocally(peer); if (peerInfo == null) { - if (log.shouldLog(Log.ERROR)) - log.error("Peer selected for hop " + i + "/" + hop + " was not found locally: " + if (log.shouldLog(Log.WARN)) + log.warn("Peer selected for hop " + i + "/" + hop + " was not found locally: " + peer.toBase64() + " for " + cfg); return null; } else { From 6822bf7978cc5ce1ceb9930575e3c5a7a3a7dc4c Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Jan 2011 14:49:51 +0000 Subject: [PATCH 12/15] findbugs high-rank issues --- .../net/i2p/i2ptunnel/I2PTunnelClientBase.java | 2 +- core/java/src/net/i2p/crypto/TrustedUpdate.java | 16 ++++++++-------- .../message/OutboundClientMessageOneShotJob.java | 2 +- .../networkdb/kademlia/FloodOnlySearchJob.java | 1 - .../i2p/router/tunnel/PumpedTunnelGateway.java | 1 - 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java index a98551b8c..ae723661c 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java @@ -98,7 +98,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna _clientId = clientId; this.localPort = localPort; this.l = l; - this.handlerName = handlerName + _clientId; + this.handlerName = localPort + " #" + _clientId; _ownDest = true; // == ! shared client _context = tunnel.getContext(); _context.statManager().createRateStat("i2ptunnel.client.closeBacklog", "How many pending sockets remain when we close one due to backlog?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); diff --git a/core/java/src/net/i2p/crypto/TrustedUpdate.java b/core/java/src/net/i2p/crypto/TrustedUpdate.java index fdf63697d..43ca16283 100644 --- a/core/java/src/net/i2p/crypto/TrustedUpdate.java +++ b/core/java/src/net/i2p/crypto/TrustedUpdate.java @@ -182,14 +182,6 @@ JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR * @return true if successful */ public boolean addKey(String key, String name) { - String oldName = _trustedKeys.get(key); - // already there? - if (name.equals(oldName)) - return true; - if (oldName != null && !oldName.equals("")) { - _log.error("Key for " + name + " already stored for different name " + oldName + " : " + key); - return false; - } SigningPublicKey signingPublicKey = new SigningPublicKey(); try { // fromBase64() will throw a DFE if length is not right @@ -198,6 +190,14 @@ JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR _log.error("Invalid signing key for " + name + " : " + key, dfe); return false; } + String oldName = _trustedKeys.get(signingPublicKey); + // already there? + if (name.equals(oldName)) + return true; + if (oldName != null && !oldName.equals("")) { + _log.error("Key for " + name + " already stored for different name " + oldName + " : " + key); + return false; + } if ((!name.equals("")) && _trustedKeys.containsValue(name)) { _log.error("Key mismatch for " + name + ", spoof attempt? : " + key); return false; diff --git a/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java b/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java index 5adadaae2..bfa094199 100644 --- a/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java +++ b/router/java/src/net/i2p/router/message/OutboundClientMessageOneShotJob.java @@ -348,7 +348,7 @@ public class OutboundClientMessageOneShotJob extends JobImpl { } if (_log.shouldLog(Log.INFO)) _log.info(getJobId() + ": Expired from cache - lease for " + _toString); - _leaseCache.remove(_to); + _leaseCache.remove(hashPair()); } } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java index 9f21962c1..72c59ad83 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java @@ -37,7 +37,6 @@ import net.i2p.util.Log; * */ class FloodOnlySearchJob extends FloodSearchJob { - protected volatile int _lookupsRemaining; private volatile boolean _dead; private long _created; private boolean _shouldProcessDSRM; diff --git a/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java b/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java index a761ef120..b27673721 100644 --- a/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java +++ b/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java @@ -135,7 +135,6 @@ public class PumpedTunnelGateway extends TunnelGateway { if (_log.shouldLog(Log.DEBUG)) _log.debug("Time to add " + queueBuf.size() + " messages to " + toString() + ": " + (complete-startAdd) + " delayed? " + delayedFlush + " remaining: " + remaining - + " prepare: " + (beforeLock-startAdd) + " add: " + (afterAdded-beforeLock) + " preprocess: " + (afterPreprocess-afterAdded) + " expire: " + (afterExpire-afterPreprocess) From e826ce723ab44b74567c1de776cb9cf0ecdd4cc1 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Jan 2011 20:21:29 +0000 Subject: [PATCH 13/15] * i2psnark: Refactor request tracking to prevent possible deadlocks --- .../java/src/org/klomp/snark/Peer.java | 1 + .../src/org/klomp/snark/PeerCoordinator.java | 57 +++++-------------- .../java/src/org/klomp/snark/PeerState.java | 3 +- .../java/src/org/klomp/snark/Piece.java | 38 +++++++++++-- 4 files changed, 49 insertions(+), 50 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/Peer.java b/apps/i2psnark/java/src/org/klomp/snark/Peer.java index 73ba93280..cd46bbf8b 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Peer.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Peer.java @@ -431,6 +431,7 @@ public class Peer implements Comparable /** * Are we currently requesting the piece? + * @deprecated deadlocks * @since 0.8.1 */ boolean isRequesting(int p) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 034f74ae7..8026f34f6 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -591,10 +591,7 @@ public class PeerCoordinator implements PeerListener } if (piece == null) wantedSize = wantedPieces.size(); - } // synch - // Don't sync the following, deadlock from calling each Peer's isRequesting() - //Only request a piece we've requested before if there's no other choice. if (piece == null) { // AND if there are almost no wanted pieces left (real end game). @@ -612,22 +609,12 @@ public class PeerCoordinator implements PeerListener Piece p = it2.next(); if (havePieces.get(p.getId())) { // limit number of parallel requests - int requestedCount = 0; - for (Peer pr : peers) { - // deadlock if synced on wantedPieces - if (pr.isRequesting(p.getId())) { - if (pr.equals(peer)) { - // don't give it to him again - requestedCount = MAX_PARALLEL_REQUESTS; - break; - } - if (++requestedCount >= MAX_PARALLEL_REQUESTS) - break; - } - } - if (requestedCount >= MAX_PARALLEL_REQUESTS) - continue; - piece = p; + int requestedCount = p.getRequestCount(); + if (requestedCount < MAX_PARALLEL_REQUESTS && + !p.isRequestedBy(peer)) { + piece = p; + break; + } } } if (piece == null) { @@ -648,9 +635,10 @@ public class PeerCoordinator implements PeerListener if (record) { if (_log.shouldLog(Log.INFO)) _log.info(peer + " is now requesting: piece " + piece + " priority " + piece.getPriority()); - piece.setRequested(true); + piece.setRequested(peer, true); } return piece.getId(); + } // synch } /** @@ -948,7 +936,7 @@ public class PeerCoordinator implements PeerListener } } // else drop the empty partial piece // synchs on wantedPieces... - markUnrequestedIfOnlyOne(peer, pp.getPiece()); + markUnrequested(peer, pp.getPiece()); } if (_log.shouldLog(Log.INFO)) _log.info("Partial list size now: " + partialPieces.size()); @@ -974,7 +962,7 @@ public class PeerCoordinator implements PeerListener // this is just a double-check, it should be in there for(Piece piece : wantedPieces) { if (piece.getId() == savedPiece) { - piece.setRequested(true); + piece.setRequested(peer, true); if (_log.shouldLog(Log.INFO)) { _log.info("Restoring orphaned partial piece " + pp + " Partial list size now: " + partialPieces.size()); @@ -1053,33 +1041,16 @@ public class PeerCoordinator implements PeerListener } } - /** Clear the requested flag for a piece if the peer - ** is the only one requesting it + /** + * Clear the requested flag for a piece */ - private void markUnrequestedIfOnlyOne(Peer peer, int piece) + private void markUnrequested(Peer peer, int piece) { - // see if anybody else is requesting - for (Peer p : peers) { - if (p.equals(peer)) - continue; - if (p.state == null) - continue; - // FIXME don't go into the state - if (p.state.getRequestedPieces().contains(Integer.valueOf(piece))) { - if (_log.shouldLog(Log.DEBUG)) - _log.debug("Another peer is requesting piece " + piece); - return; - } - } - - // nobody is, so mark unrequested synchronized(wantedPieces) { for (Piece pc : wantedPieces) { if (pc.getId() == piece) { - pc.setRequested(false); - if (_log.shouldLog(Log.DEBUG)) - _log.debug("Removing from request list piece " + piece); + pc.setRequested(peer, false); return; } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java index 0c3c9eee8..5551bc90e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java @@ -464,7 +464,7 @@ class PeerState implements DataLoader /** * @return all pieces we are currently requesting, or empty Set */ - synchronized Set getRequestedPieces() { + synchronized private Set getRequestedPieces() { Set rv = new HashSet(outstandingRequests.size() + 1); for (Request req : outstandingRequests) { rv.add(Integer.valueOf(req.piece)); @@ -564,6 +564,7 @@ class PeerState implements DataLoader /** * Are we currently requesting the piece? + * @deprecated deadlocks * @since 0.8.1 */ synchronized boolean isRequesting(int piece) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/Piece.java b/apps/i2psnark/java/src/org/klomp/snark/Piece.java index 68b2ddfd4..f44cdda7d 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Piece.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Piece.java @@ -12,13 +12,15 @@ class Piece implements Comparable { private int id; private Set peers; - private boolean requested; + /** @since 0.8.3 */ + private Set requests; /** @since 0.8.1 */ private int priority; public Piece(int id) { this.id = id; - this.peers = new ConcurrentHashSet(); + this.peers = new ConcurrentHashSet(I2PSnarkUtil.MAX_CONNECTIONS); + this.requests = new ConcurrentHashSet(2); } /** @@ -49,12 +51,36 @@ class Piece implements Comparable { } public int getId() { return this.id; } - /** @deprecated unused */ - public Set getPeers() { return this.peers; } public boolean addPeer(Peer peer) { return this.peers.add(peer.getPeerID()); } public boolean removePeer(Peer peer) { return this.peers.remove(peer.getPeerID()); } - public boolean isRequested() { return this.requested; } - public void setRequested(boolean requested) { this.requested = requested; } + public boolean isRequested() { return !this.requests.isEmpty(); } + + /** + * Since 0.8.3, keep track of who is requesting here, + * to avoid deadlocks from querying each peer. + */ + public void setRequested(Peer peer, boolean requested) { + if (requested) + this.requests.add(peer.getPeerID()); + else + this.requests.remove(peer.getPeerID()); + } + + /** + * Is peer requesting this piece? + * @since 0.8.3 + */ + public boolean isRequestedBy(Peer peer) { + return this.requests.contains(peer.getPeerID()); + } + + /** + * How many peers are requesting this piece? + * @since 0.8.3 + */ + public int getRequestCount() { + return this.requests.size(); + } /** @return default 0 @since 0.8.1 */ public int getPriority() { return this.priority; } From 4005bd6804efd802c9e80f4c38f691371c4c5370 Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Jan 2011 20:34:56 +0000 Subject: [PATCH 14/15] reseed form button tweak --- .../java/src/net/i2p/router/web/ConfigReseedHandler.java | 4 ++-- apps/routerconsole/jsp/configreseed.jsp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java index 1e07d9d24..e24306b3b 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java @@ -14,7 +14,7 @@ public class ConfigReseedHandler extends FormHandler { @Override protected void processForm() { - if (_action.equals(_("Save Configuration and Reseed Now"))) { + if (_action.equals(_("Save changes and reseed now"))) { saveChanges(); boolean reseedInProgress = Boolean.valueOf(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress")).booleanValue(); if (reseedInProgress) { @@ -26,7 +26,7 @@ public class ConfigReseedHandler extends FormHandler { } return; } - if (_action.equals(_("Save Configuration"))) { + if (_action.equals(_("Save changes"))) { saveChanges(); return; } diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp index 8e9373442..593e410d3 100644 --- a/apps/routerconsole/jsp/configreseed.jsp +++ b/apps/routerconsole/jsp/configreseed.jsp @@ -54,6 +54,6 @@
<%=intl._("Dest. name, hash, or full key")%>:
<%=intl._("Encryption Key")%>:
<%=intl._("Reseed URLs")%>
<%=intl._("Enable HTTP proxy (not used for SSL)")%> >
<%=intl._("HTTP Proxy Host")%>:
<%=intl._("eepProxy port")%>: " />
<%=intl._("Update URLs")%>:
<%=intl._("Trusted keys")%>:
<%=intl._("Update with unsigned development builds?")%>
<%=intl._("Unsigned Build URL")%>:


" /> -" /> -" /> +" /> +" />
From ea29c961ed031083202866f181af6a7d68bdcebd Mon Sep 17 00:00:00 2001 From: zzz Date: Wed, 5 Jan 2011 21:01:03 +0000 Subject: [PATCH 15/15] log tweak --- .../src/net/i2p/client/streaming/MessageOutputStream.java | 2 +- history.txt | 7 +++++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java index e61435680..71c9ebce9 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java @@ -497,7 +497,7 @@ class MessageOutputStream extends OutputStream { if (ws.writeFailed()) throw new IOException("Flush available failed"); else if (!ws.writeAccepted()) - throw new InterruptedIOException("Flush available timed out"); + throw new InterruptedIOException("Flush available timed out (" + _writeTimeout + "ms)"); } long afterAccept = System.currentTimeMillis(); if ( (afterAccept - afterBuild > 1000) && (_log.shouldLog(Log.DEBUG)) ) diff --git a/history.txt b/history.txt index db93426e6..894223bdd 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,10 @@ +2011-01-05 zzz + * build.xml: Fix findbugs target + * Fix some miscellaneous findbugs bugs + * i2psnark: Refactor request tracking to prevent possible deadlocks + * OCMOSJ: Fix cache bug + * TrustedUpdate: Fix key store bug + 2011-01-02 zzz * Console: Disable spellcheck in textareas * Data Structures: More tweaks diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index fecba78d6..a6204817e 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 7; + public final static long BUILD = 8; /** for example "-test" */ public final static String EXTRA = "";