diff --git a/.tx/config b/.tx/config index 01bd7def7fad77b5882be86a9fe3af27ca086175..ae6bbab9ec7c35f06dc8b317261f9c8fda0cb2c5 100644 --- a/.tx/config +++ b/.tx/config @@ -10,6 +10,7 @@ trans.fr = apps/i2ptunnel/locale/messages_fr.po trans.hu = apps/i2ptunnel/locale/messages_hu.po trans.it = apps/i2ptunnel/locale/messages_it.po trans.nl = apps/i2ptunnel/locale/messages_nl.po +trans.pt = apps/i2ptunnel/locale/messages_pt.po trans.ru = apps/i2ptunnel/locale/messages_ru.po trans.sv_SE = apps/i2ptunnel/locale/messages_sv.po trans.uk_UA = apps/i2ptunnel/locale/messages_uk.po @@ -32,6 +33,7 @@ trans.hu = apps/routerconsole/locale/messages_hu.po trans.it = apps/routerconsole/locale/messages_it.po trans.nl = apps/routerconsole/locale/messages_nl.po trans.pl = apps/routerconsole/locale/messages_pl.po +trans.pt = apps/routerconsole/locale/messages_pt.po trans.ru = apps/routerconsole/locale/messages_ru.po trans.sv_SE = apps/routerconsole/locale/messages_sv.po trans.uk_UA = apps/routerconsole/locale/messages_uk.po @@ -70,6 +72,7 @@ trans.hu = apps/susidns/locale/messages_hu.po trans.it = apps/susidns/locale/messages_it.po trans.nl = apps/susidns/locale/messages_nl.po trans.pl = apps/susidns/locale/messages_pl.po +trans.pt = apps/susidns/locale/messages_pt.po trans.ru = apps/susidns/locale/messages_ru.po trans.sv_SE = apps/susidns/locale/messages_sv.po trans.uk_UA = apps/susidns/locale/messages_uk.po diff --git a/apps/BOB/src/net/i2p/BOB/I2Plistener.java b/apps/BOB/src/net/i2p/BOB/I2Plistener.java index 861a1fbca09eb097de87366e900f0bc1971c1ec1..a94a40b7e13245a7d9581add53ef5f8f959b9589 100644 --- a/apps/BOB/src/net/i2p/BOB/I2Plistener.java +++ b/apps/BOB/src/net/i2p/BOB/I2Plistener.java @@ -94,7 +94,7 @@ public class I2Plistener implements Runnable { } } catch (I2PException e) { - // bad shit + // bad stuff System.out.println("Exception " + e); } } finally { diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java index 1ef8cd302a5d3a48f65974a79719b4a6f3199f08..592e5474382362e9b602640080c16d3450bf3990 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java +++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java @@ -58,7 +58,7 @@ public class I2PSnarkUtil { private volatile I2PSocketManager _manager; private boolean _configured; private volatile boolean _connecting; - private final Set<Hash> _shitlist; + private final Set<Hash> _banlist; private int _maxUploaders; private int _maxUpBW; private int _maxConnections; @@ -86,7 +86,7 @@ public class I2PSnarkUtil { _opts = new HashMap(); //setProxy("127.0.0.1", 4444); setI2CPConfig("127.0.0.1", 7654, null); - _shitlist = new ConcurrentHashSet(); + _banlist = new ConcurrentHashSet(); _maxUploaders = Snark.MAX_TOTAL_UPLOADERS; _maxUpBW = DEFAULT_MAX_UP_BW; _maxConnections = MAX_CONNECTIONS; @@ -283,7 +283,7 @@ public class I2PSnarkUtil { I2PSocketManager mgr = _manager; // FIXME this can cause race NPEs elsewhere _manager = null; - _shitlist.clear(); + _banlist.clear(); if (mgr != null) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Disconnecting from I2P", new Exception("I did it")); @@ -306,24 +306,24 @@ public class I2PSnarkUtil { if (addr.equals(getMyDestination())) throw new IOException("Attempt to connect to myself"); Hash dest = addr.calculateHash(); - if (_shitlist.contains(dest)) - throw new IOException("Not trying to contact " + dest.toBase64() + ", as they are shitlisted"); + if (_banlist.contains(dest)) + throw new IOException("Not trying to contact " + dest.toBase64() + ", as they are banlisted"); try { I2PSocket rv = _manager.connect(addr); if (rv != null) - _shitlist.remove(dest); + _banlist.remove(dest); return rv; } catch (I2PException ie) { - _shitlist.add(dest); - _context.simpleScheduler().addEvent(new Unshitlist(dest), 10*60*1000); + _banlist.add(dest); + _context.simpleScheduler().addEvent(new Unbanlist(dest), 10*60*1000); throw new IOException("Unable to reach the peer " + peer + ": " + ie.getMessage()); } } - private class Unshitlist implements SimpleTimer.TimedEvent { + private class Unbanlist implements SimpleTimer.TimedEvent { private Hash _dest; - public Unshitlist(Hash dest) { _dest = dest; } - public void timeReached() { _shitlist.remove(_dest); } + public Unbanlist(Hash dest) { _dest = dest; } + public void timeReached() { _banlist.remove(_dest); } } /** diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 08c7109ef977dbf354367677d1fc27887d238f5a..442ac83c6ebd0a976f8d5225e0cd9ec0df248a23 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -377,7 +377,10 @@ class PeerCoordinator implements PeerListener public boolean needOutboundPeers() { //return wantedBytes != 0 && needPeers(); // minus one to make it a little easier for new peers to get in on large swarms - return wantedBytes != 0 && !halted && peers.size() < getMaxConnections() - 1; + return wantedBytes != 0 && + !halted && + peers.size() < getMaxConnections() - 1 && + (storage == null || !storage.isChecking()); } /** @@ -741,7 +744,19 @@ class PeerCoordinator implements PeerListener break; if (havePieces.get(p.getId()) && !p.isRequested()) { - piece = p; + // never ever choose one that's in partialPieces, or we + // will create a second one and leak + boolean hasPartial = false; + for (PartialPiece pp : partialPieces) { + if (pp.getPiece() == p.getId()) { + if (_log.shouldLog(Log.INFO)) + _log.info("wantPiece() skipping partial for " + peer + ": piece = " + pp); + hasPartial = true; + break; + } + } + if (!hasPartial) + piece = p; } else if (p.isRequested()) { @@ -943,11 +958,14 @@ class PeerCoordinator implements PeerListener */ public boolean gotPiece(Peer peer, PartialPiece pp) { - if (metainfo == null || storage == null) + if (metainfo == null || storage == null || storage.isChecking()) { + pp.release(); return true; + } int piece = pp.getPiece(); if (halted) { _log.info("Got while-halted piece " + piece + "/" + metainfo.getPieces() +" from " + peer + " for " + metainfo.getName()); + pp.release(); return true; // We don't actually care anymore. } @@ -962,12 +980,15 @@ class PeerCoordinator implements PeerListener // Assume we got a good piece, we don't really care anymore. // Well, this could be caused by a change in priorities, so // only return true if we already have it, otherwise might as well keep it. - if (storage.getBitField().get(piece)) + if (storage.getBitField().get(piece)) { + pp.release(); return true; + } } try { + // this takes forever if complete, as it rechecks if (storage.putPiece(pp)) { if (_log.shouldLog(Log.INFO)) @@ -1173,6 +1194,8 @@ class PeerCoordinator implements PeerListener public PartialPiece getPartialPiece(Peer peer, BitField havePieces) { if (metainfo == null) return null; + if (storage != null && storage.isChecking()) + return null; synchronized(wantedPieces) { // sorts by remaining bytes, least first Collections.sort(partialPieces); @@ -1277,6 +1300,7 @@ class PeerCoordinator implements PeerListener PartialPiece pp = iter.next(); if (pp.getPiece() == piece) { iter.remove(); + pp.release(); // there should be only one but keep going to be sure } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java index 95bef3c4f981c0fbef55be361769790724dd12c4..8add00d2b9734ff02a0e016f8e689dc963103c08 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java @@ -592,6 +592,7 @@ class PeerState implements DataLoader // Send cancel even when we are choked to make sure that it is // really never ever send. out.sendCancel(req); + req.getPartialPiece().release(); } } } @@ -741,6 +742,10 @@ class PeerState implements DataLoader out.sendRequest(r); lastRequest = r; return true; + } else { + if (_log.shouldLog(Log.WARN)) + _log.warn("Got dup from coord: " + pp); + pp.release(); } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/Storage.java b/apps/i2psnark/java/src/org/klomp/snark/Storage.java index ddead3a58f87fa3cc951d5c64b2a94cb720facfd..a42001ba8c607613804fa34d2c1952b637d64ed0 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Storage.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Storage.java @@ -985,6 +985,8 @@ public class Storage /** * Put the piece in the Storage if it is correct. + * Warning - takes a LONG time if complete as it does the recheck here. + * TODO thread the recheck? * * @return true if the piece was correct (sha metainfo hash * matches), otherwise false. diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index e96eefe0b2e88c1f38f82e4f765e040122057824..d0ff6b06643f0c694037eecfbdef58bf0a195155 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -995,14 +995,16 @@ public class I2PSnarkServlet extends DefaultServlet { } else if (snark.isAllocating()) { statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "stalled.png\" title=\"" + _("Allocating") + "\"></td>" + "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Allocating"); - } else if (err != null) { - if (isRunning && curPeers > 0 && !showPeers) - statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + - "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") + - ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + "\">" + - curPeers + thinsp(noThinsp) + - ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; - else if (isRunning) + } else if (err != null && curPeers == 0) { + // let's only show this if we have no peers, otherwise PEX and DHT should bail us out, user doesn't care + //if (isRunning && curPeers > 0 && !showPeers) + // statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + + // "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") + + // ": <a href=\"" + uri + "?p=" + Base64.encode(snark.getInfoHash()) + "\">" + + // curPeers + thinsp(noThinsp) + + // ngettext("1 peer", "{0} peers", knownPeers) + "</a>"; + //else if (isRunning) + if (isRunning) statusString = "<img alt=\"\" border=\"0\" src=\"" + _imgPath + "trackererror.png\" title=\"" + err + "\"></td>" + "<td class=\"snarkTorrentStatus " + rowClass + "\">" + _("Tracker Error") + ": " + curPeers + thinsp(noThinsp) + @@ -1149,7 +1151,7 @@ public class I2PSnarkServlet extends DefaultServlet { out.write("</a>"); out.write("<td align=\"right\" class=\"snarkTorrentETA " + rowClass + "\">"); - if(isRunning && remainingSeconds > 0) + if(isRunning && remainingSeconds > 0 && !snark.isChecking()) out.write(DataHelper.formatDuration2(Math.max(remainingSeconds, 10) * 1000)); // (eta 6h) out.write("</td>\n\t"); out.write("<td align=\"right\" class=\"snarkTorrentDownloaded " + rowClass + "\">"); diff --git a/apps/i2psnark/locale/messages_it.po b/apps/i2psnark/locale/messages_it.po index ff5ede7cfdd14281c9bfcb1385600f5bf7b60cfc..e0da9dc493c423326aff609b2da1f50b75668145 100644 --- a/apps/i2psnark/locale/messages_it.po +++ b/apps/i2psnark/locale/messages_it.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: I2P\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-12 00:46+0000\n" -"PO-Revision-Date: 2012-10-12 00:39+0000\n" -"Last-Translator: kytv <killyourtv@i2pmail.org>\n" +"POT-Creation-Date: 2012-10-15 17:57+0000\n" +"PO-Revision-Date: 2012-10-12 00:54+0000\n" +"Last-Translator: BadCluster <badcluster@i2pmail.org>\n" "Language-Team: Italian (http://www.transifex.com/projects/p/I2P/language/" "it/)\n" "Language: it\n" @@ -342,7 +342,7 @@ msgstr "Torrent in aggiunta in {0}" #: ../java/src/org/klomp/snark/SnarkManager.java:1374 #, java-format msgid "Up bandwidth limit is {0} KBps" -msgstr "" +msgstr "La banda di Upload massima è {0} KBps" #: ../java/src/org/klomp/snark/SnarkManager.java:1396 #, java-format @@ -606,7 +606,7 @@ msgstr "File torrent eliminato: {0}" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:642 #, java-format msgid "Download deleted: {0}" -msgstr "" +msgstr "Downloads cancellati: {0}" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:656 #, java-format @@ -701,12 +701,12 @@ msgstr "Ripristina tracker di default" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:997 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:998 msgid "Checking" -msgstr "" +msgstr "Controllo (Check)" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1000 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001 msgid "Allocating" -msgstr "" +msgstr "Allocando" #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1005 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011 diff --git a/apps/i2psnark/locale/messages_pt.po b/apps/i2psnark/locale/messages_pt.po index a88e4d85e4bdae8180da6920174bd9d8826c0f40..a49d18ee6f869ea7d4d07e11001a561d9e3d5df2 100644 --- a/apps/i2psnark/locale/messages_pt.po +++ b/apps/i2psnark/locale/messages_pt.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: I2P\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-10-07 14:00+0000\n" +"POT-Creation-Date: 2012-10-19 07:45+0000\n" "PO-Revision-Date: 2011-09-23 20:17+0000\n" "Last-Translator: kytv <killyourtv@i2pmail.org>\n" "Language-Team: duck <duck@mail.i2p>\n" @@ -20,482 +20,629 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -#: ../java/src/org/klomp/snark/SnarkManager.java:355 +#: ../java/src/org/klomp/snark/SnarkManager.java:434 #, java-format msgid "Total uploaders limit changed to {0}" msgstr "Limite total de subidores mudado a {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:357 +#: ../java/src/org/klomp/snark/SnarkManager.java:436 #, java-format msgid "Minimum total uploaders limit is {0}" msgstr "O limite mÃnimo de subidores é {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:369 +#: ../java/src/org/klomp/snark/SnarkManager.java:448 #, java-format msgid "Up BW limit changed to {0}KBps" msgstr "Largura de banda para a subida foi mudada para {0} kbyte/s." -#: ../java/src/org/klomp/snark/SnarkManager.java:371 +#: ../java/src/org/klomp/snark/SnarkManager.java:450 #, java-format msgid "Minimum up bandwidth limit is {0}KBps" msgstr "O limite mÃnimo da largura de banda para a subida está em {0} kbyte/s." -#: ../java/src/org/klomp/snark/SnarkManager.java:383 +#: ../java/src/org/klomp/snark/SnarkManager.java:462 #, java-format msgid "Startup delay changed to {0}" msgstr "Demora do arranque mudado a {0}." -#: ../java/src/org/klomp/snark/SnarkManager.java:394 +#: ../java/src/org/klomp/snark/SnarkManager.java:473 #, java-format msgid "Refresh time changed to {0}" msgstr "" -#: ../java/src/org/klomp/snark/SnarkManager.java:396 +#: ../java/src/org/klomp/snark/SnarkManager.java:475 msgid "Refresh disabled" msgstr "" -#: ../java/src/org/klomp/snark/SnarkManager.java:451 +#: ../java/src/org/klomp/snark/SnarkManager.java:530 msgid "I2CP and tunnel changes will take effect after stopping all torrents" msgstr "" "Mudanças do I2CP e do túnel terão efeito depois de deter todos os torrentes" -#: ../java/src/org/klomp/snark/SnarkManager.java:455 +#: ../java/src/org/klomp/snark/SnarkManager.java:534 #, java-format msgid "I2CP options changed to {0}" msgstr "" -#: ../java/src/org/klomp/snark/SnarkManager.java:460 +#: ../java/src/org/klomp/snark/SnarkManager.java:539 msgid "Disconnecting old I2CP destination" msgstr "Desconectando anterior Destinação I2CP" -#: ../java/src/org/klomp/snark/SnarkManager.java:462 +#: ../java/src/org/klomp/snark/SnarkManager.java:541 #, java-format msgid "I2CP settings changed to {0}" msgstr "Preferências de I2CP mudadas a {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:467 +#: ../java/src/org/klomp/snark/SnarkManager.java:546 msgid "" "Unable to connect with the new settings, reverting to the old I2CP settings" msgstr "" "Conectar-se não foi posÃvel com as novas preferências I2CP, utilizarei as " "anteriores." -#: ../java/src/org/klomp/snark/SnarkManager.java:471 +#: ../java/src/org/klomp/snark/SnarkManager.java:550 msgid "Unable to reconnect with the old settings!" msgstr "ImpossÃvel se conectar usando as preferências anteriores!" -#: ../java/src/org/klomp/snark/SnarkManager.java:473 +#: ../java/src/org/klomp/snark/SnarkManager.java:552 msgid "Reconnected on the new I2CP destination" msgstr "Conectado com a nova Destinação I2CP" -#: ../java/src/org/klomp/snark/SnarkManager.java:480 +#: ../java/src/org/klomp/snark/SnarkManager.java:559 #, java-format msgid "I2CP listener restarted for \"{0}\"" msgstr "Conexão I2CP re-estabelecida para \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:492 +#: ../java/src/org/klomp/snark/SnarkManager.java:571 msgid "New files will be publicly readable" msgstr "" -#: ../java/src/org/klomp/snark/SnarkManager.java:494 +#: ../java/src/org/klomp/snark/SnarkManager.java:573 msgid "New files will not be publicly readable" msgstr "" -#: ../java/src/org/klomp/snark/SnarkManager.java:501 +#: ../java/src/org/klomp/snark/SnarkManager.java:580 msgid "Enabled autostart" msgstr "Ativado o iniciar automáticamente" -#: ../java/src/org/klomp/snark/SnarkManager.java:503 +#: ../java/src/org/klomp/snark/SnarkManager.java:582 msgid "Disabled autostart" msgstr "Desativado o iniciar automáticamente" -#: ../java/src/org/klomp/snark/SnarkManager.java:509 +#: ../java/src/org/klomp/snark/SnarkManager.java:588 msgid "Enabled open trackers - torrent restart required to take effect." msgstr "" "Uso de rastreadores abertos ativado - Para ter efeito é necesário reiniciar " "os torrentes." -#: ../java/src/org/klomp/snark/SnarkManager.java:511 +#: ../java/src/org/klomp/snark/SnarkManager.java:590 msgid "Disabled open trackers - torrent restart required to take effect." msgstr "" "Uso dos rastreadores abertos desativado - Para ter efeito é necesário " "reiniciar os torrentes." -#: ../java/src/org/klomp/snark/SnarkManager.java:519 -msgid "Open Tracker list changed - torrent restart required to take effect." +#: ../java/src/org/klomp/snark/SnarkManager.java:597 +msgid "Enabled DHT." msgstr "" -"Listado de rastreadores abertos mudado - Para ter efeito é necesário " -"reiniciar os torrentes." -#: ../java/src/org/klomp/snark/SnarkManager.java:526 +#: ../java/src/org/klomp/snark/SnarkManager.java:599 +msgid "Disabled DHT." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:601 +msgid "DHT change requires tunnel shutdown and reopen" +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:608 #, java-format msgid "{0} theme loaded, return to main i2psnark page to view." msgstr "Tema {0} foi carregado. Volte no menú principal para vê-lo." -#: ../java/src/org/klomp/snark/SnarkManager.java:533 +#: ../java/src/org/klomp/snark/SnarkManager.java:615 msgid "Configuration unchanged." msgstr "Configuração não mudada." -#: ../java/src/org/klomp/snark/SnarkManager.java:543 +#: ../java/src/org/klomp/snark/SnarkManager.java:647 +msgid "Open Tracker list changed - torrent restart required to take effect." +msgstr "" +"Listado de rastreadores abertos mudado - Para ter efeito é necesário " +"reiniciar os torrentes." + +#: ../java/src/org/klomp/snark/SnarkManager.java:657 +msgid "Private tracker list changed - affects newly created torrents only." +msgstr "" + +#: ../java/src/org/klomp/snark/SnarkManager.java:703 #, java-format msgid "Unable to save the config to {0}" msgstr "Não se pode guardar a configuração em {0}." -#: ../java/src/org/klomp/snark/SnarkManager.java:608 +#: ../java/src/org/klomp/snark/SnarkManager.java:768 msgid "Connecting to I2P" msgstr "Conectando com I2P" -#: ../java/src/org/klomp/snark/SnarkManager.java:611 +#: ../java/src/org/klomp/snark/SnarkManager.java:771 msgid "Error connecting to I2P - check your I2CP settings!" msgstr "Erro ao se conectar com I2P - Verifique a sua configuração I2CP!" -#: ../java/src/org/klomp/snark/SnarkManager.java:620 +#: ../java/src/org/klomp/snark/SnarkManager.java:780 #, java-format msgid "Error: Could not add the torrent {0}" msgstr "Erro: Não se pode adicionar o torrente {0}." #. catch this here so we don't try do delete it below -#: ../java/src/org/klomp/snark/SnarkManager.java:642 +#: ../java/src/org/klomp/snark/SnarkManager.java:802 #, java-format msgid "Cannot open \"{0}\"" msgstr "Não pode se abrir \"{0}\"" #. TODO - if the existing one is a magnet, delete it and add the metainfo instead? -#: ../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:2015 +#: ../java/src/org/klomp/snark/SnarkManager.java:821 +#: ../java/src/org/klomp/snark/SnarkManager.java:899 +#: ../java/src/org/klomp/snark/SnarkManager.java:980 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159 #, java-format msgid "Torrent with this info hash is already running: {0}" msgstr "torrente com este info hash já em marcha: {0}" -#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName())); -#: ../java/src/org/klomp/snark/SnarkManager.java:668 -#, java-format +#: ../java/src/org/klomp/snark/SnarkManager.java:827 +#, fuzzy, java-format +msgid "ERROR - No I2P trackers in private torrent \"{0}\"" +msgstr "" +"ERRO - Não ha espaço suficente, não se pode crear um torrente desde {0}." + +#: ../java/src/org/klomp/snark/SnarkManager.java:829 +#, fuzzy, java-format msgid "" -"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers " -"only." +"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and " +"DHT only." msgstr "" "Aviso - Se ignorarão rastreadores fora de I2P em \"{0}\", anunciando só aos " "rastreadores abertos do I2P." -#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName())); -#: ../java/src/org/klomp/snark/SnarkManager.java:673 -#, java-format +#: ../java/src/org/klomp/snark/SnarkManager.java:832 +#, fuzzy, java-format msgid "" -"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is " -"enabled before starting this torrent." +"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will " +"announce to DHT only." +msgstr "" +"Aviso - Se ignorarão rastreadores fora de I2P em \"{0}\", anunciando só aos " +"rastreadores abertos do I2P." + +#: ../java/src/org/klomp/snark/SnarkManager.java:834 +#, fuzzy, java-format +msgid "" +"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are " +"disabled, you should enable open trackers or DHT before starting the torrent." msgstr "" "Aviso - Se ignorará rastreador não I2P no \"{0}\". Tens que ativá os " "rastreadores abertos antes de iniciar o torrente!" -#: ../java/src/org/klomp/snark/SnarkManager.java:694 +#: ../java/src/org/klomp/snark/SnarkManager.java:856 #, java-format msgid "Torrent in \"{0}\" is invalid" msgstr "O arquivo .torrent em \"{0}\" não é válido." -#: ../java/src/org/klomp/snark/SnarkManager.java:699 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2037 +#: ../java/src/org/klomp/snark/SnarkManager.java:861 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:181 #, java-format msgid "ERROR - Out of memory, cannot create torrent from {0}" msgstr "" "ERRO - Não ha espaço suficente, não se pode crear um torrente desde {0}." -#: ../java/src/org/klomp/snark/SnarkManager.java:711 +#: ../java/src/org/klomp/snark/SnarkManager.java:873 #, java-format msgid "Torrent added and started: \"{0}\"" msgstr "torrente adicionado e iniciado: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:713 +#: ../java/src/org/klomp/snark/SnarkManager.java:875 #, java-format msgid "Torrent added: \"{0}\"" msgstr "torrente adicionado: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:748 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:493 +#: ../java/src/org/klomp/snark/SnarkManager.java:910 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87 #, java-format msgid "Fetching {0}" msgstr "Buscando {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:751 -#, java-format +#: ../java/src/org/klomp/snark/SnarkManager.java:916 +#, fuzzy, java-format msgid "" -"We have no saved peers and no other torrents are running. Fetch of {0} will " -"not succeed until you start another torrent." +"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not " +"succeed until you start another torrent, enable open trackers, or enable DHT." msgstr "" "Não temos pare guardados nem estão ativo outros torrentes. Receber {0} não " "vai dar certo até começa outro torrente." -#: ../java/src/org/klomp/snark/SnarkManager.java:755 +#: ../java/src/org/klomp/snark/SnarkManager.java:920 #, java-format msgid "Adding {0}" msgstr "Adicionando {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:802 -#: ../java/src/org/klomp/snark/SnarkManager.java:825 -#: ../java/src/org/klomp/snark/SnarkManager.java:1260 +#: ../java/src/org/klomp/snark/SnarkManager.java:951 +#, fuzzy, java-format +msgid "Download already running: {0}" +msgstr "torrente já em marcha: {0}" + +#: ../java/src/org/klomp/snark/SnarkManager.java:990 +#: ../java/src/org/klomp/snark/SnarkManager.java:1013 +#: ../java/src/org/klomp/snark/SnarkManager.java:1451 #, java-format msgid "Failed to copy torrent file to {0}" msgstr "Não se pode copiar o torrente para {0}." -#: ../java/src/org/klomp/snark/SnarkManager.java:1052 +#: ../java/src/org/klomp/snark/SnarkManager.java:1240 #, java-format msgid "Too many files in \"{0}\" ({1}), deleting it!" msgstr "Ha arquivos demais no \"{0}\", se apagará ({1}). " -#: ../java/src/org/klomp/snark/SnarkManager.java:1054 +#: ../java/src/org/klomp/snark/SnarkManager.java:1242 #, java-format msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!" msgstr "" "O arquivo de dados do torrente \"{0}\" não pode terminar em \".torrent' e " "será apagado." -#: ../java/src/org/klomp/snark/SnarkManager.java:1056 +#: ../java/src/org/klomp/snark/SnarkManager.java:1244 #, java-format msgid "No pieces in \"{0}\", deleting it!" msgstr "Não ha peças no \"{0}\", se apagará." -#: ../java/src/org/klomp/snark/SnarkManager.java:1058 +#: ../java/src/org/klomp/snark/SnarkManager.java:1246 #, java-format msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!" msgstr "Ha peças demais no \"{0}\" e o limite é {1}. Se apagarão." -#: ../java/src/org/klomp/snark/SnarkManager.java:1060 +#: ../java/src/org/klomp/snark/SnarkManager.java:1248 #, java-format msgid "Pieces are too large in \"{0}\" ({1}B), deleting it." msgstr "Peças no \"{0}\" são grandes demais ({1}B). Se apagarão." -#: ../java/src/org/klomp/snark/SnarkManager.java:1061 +#: ../java/src/org/klomp/snark/SnarkManager.java:1249 #, java-format msgid "Limit is {0}B" msgstr "O limite são \"{0}\"Bytes" -#: ../java/src/org/klomp/snark/SnarkManager.java:1063 +#: ../java/src/org/klomp/snark/SnarkManager.java:1251 #, java-format msgid "Torrent \"{0}\" has no data, deleting it!" msgstr "O torrente \"{0}\" não contem dados e será apagado." -#: ../java/src/org/klomp/snark/SnarkManager.java:1071 +#: ../java/src/org/klomp/snark/SnarkManager.java:1259 #, java-format msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\"" msgstr "" "torrentes maiores que \"{0}\" Bytes ainda não funcionam, se apagará \"{1}\"." -#: ../java/src/org/klomp/snark/SnarkManager.java:1087 +#: ../java/src/org/klomp/snark/SnarkManager.java:1275 #, java-format msgid "Error: Could not remove the torrent {0}" msgstr "Erro: Não se pode quitar o torrente \"{0}\"." -#: ../java/src/org/klomp/snark/SnarkManager.java:1108 -#: ../java/src/org/klomp/snark/SnarkManager.java:1126 +#: ../java/src/org/klomp/snark/SnarkManager.java:1296 +#: ../java/src/org/klomp/snark/SnarkManager.java:1314 #, java-format msgid "Torrent stopped: \"{0}\"" msgstr "torrente detido: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:1147 +#: ../java/src/org/klomp/snark/SnarkManager.java:1335 #, java-format msgid "Torrent removed: \"{0}\"" msgstr "torrente quitado: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:1155 +#: ../java/src/org/klomp/snark/SnarkManager.java:1343 #, java-format msgid "Adding torrents in {0}" msgstr "Os torrentes serão adicionados em {0} ..." -#: ../java/src/org/klomp/snark/SnarkManager.java:1208 +#: ../java/src/org/klomp/snark/SnarkManager.java:1374 +#, fuzzy, java-format +msgid "Up bandwidth limit is {0} KBps" +msgstr "O limite mÃnimo da largura de banda para a subida está em {0} kbyte/s." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1396 #, java-format msgid "Download finished: {0}" msgstr "Finalizada a descarga de \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:1256 +#: ../java/src/org/klomp/snark/SnarkManager.java:1447 #, java-format msgid "Metainfo received for {0}" msgstr "Metainfo recibido para {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1257 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:528 +#: ../java/src/org/klomp/snark/SnarkManager.java:1448 +#: ../java/src/org/klomp/snark/SnarkManager.java:1671 #, java-format msgid "Starting up torrent {0}" msgstr "Iniciando o torrente {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1313 +#: ../java/src/org/klomp/snark/SnarkManager.java:1463 +#, fuzzy, java-format +msgid "Error on torrent {0}" +msgstr "Erro: Não se pode adicionar o torrente {0}." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1489 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1805 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1815 +#, fuzzy +msgid "Magnet" +msgstr "URL magnet" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1520 msgid "Unable to connect to I2P!" msgstr "ImpossÃvel de se conectar com I2P" -#: ../java/src/org/klomp/snark/SnarkManager.java:1319 +#: ../java/src/org/klomp/snark/SnarkManager.java:1526 #, java-format msgid "Unable to add {0}" msgstr "ImpossÃvel de adicionar {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:204 +#: ../java/src/org/klomp/snark/SnarkManager.java:1670 +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124 +#, fuzzy +msgid "Opening the I2P tunnel" +msgstr "Deter todos os torrentes e o túnel I2P" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1694 +msgid "Opening the I2P tunnel and starting all torrents." +msgstr "Abrendo o túnel I2P e iniciando os torrentes ..." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1749 +msgid "Stopping all torrents and closing the I2P tunnel." +msgstr "Detindo todos os torrentes e fechando o túnel I2P" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1768 +#, fuzzy +msgid "Closing I2P tunnel after notifying trackers." +msgstr "Abrendo o túnel I2P e iniciando os torrentes ..." + +#: ../java/src/org/klomp/snark/SnarkManager.java:1775 +#: ../java/src/org/klomp/snark/SnarkManager.java:1786 +msgid "I2P tunnel closed." +msgstr "Túnel I2P fechado" + +#: ../java/src/org/klomp/snark/TrackerClient.java:227 +#, java-format +msgid "No valid trackers for {0} - enable opentrackers or DHT?" +msgstr "" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:75 +#, fuzzy, java-format +msgid "Download torrent file from {0}" +msgstr "torrente obtido de {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:97 +#, java-format +msgid "Torrent was not retrieved from {0}" +msgstr "Não se pode obter torrente de {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:150 +#, java-format +msgid "Torrent fetched from {0}" +msgstr "torrente obtido de {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:171 +#, java-format +msgid "Torrent already running: {0}" +msgstr "torrente já em marcha: {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:173 +#, java-format +msgid "Torrent already in the queue: {0}" +msgstr "torrente já na cola: {0}" + +#: ../java/src/org/klomp/snark/web/FetchAndAdd.java:179 +#, java-format +msgid "Torrent at {0} was not valid" +msgstr "torrente em {0} não foi válido" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:223 msgid "I2PSnark - Anonymous BitTorrent Client" msgstr "I2PSnark - Cliente de BitTorrent Anônimo" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:220 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:236 +msgid "Router is down" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:251 msgid "Torrents" msgstr "torrentes" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:223 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:230 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:261 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1267 msgid "I2PSnark" msgstr "I2PSnark" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:227 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:258 msgid "Refresh page" msgstr "Atualizar página" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:232 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:263 msgid "Forum" msgstr "Foro" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:286 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1758 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:276 +msgid "Click \"Add torrent\" button to fetch torrent" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:311 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312 +msgid "clear messages" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:338 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2261 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2263 msgid "Status" msgstr "Estado" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:292 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:294 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:347 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:349 msgid "Hide Peers" msgstr "ocultar parceiros" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:299 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:301 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:354 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:356 msgid "Show Peers" msgstr "mostrar parceiros" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:308 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1682 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1698 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:363 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2116 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2131 msgid "Torrent" msgstr "torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:370 msgid "Estimated time remaining" msgstr "Tempo que falta para completar" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:315 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:373 msgid "ETA" msgstr "Tempo" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:319 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378 msgid "Downloaded" msgstr "Descarregado" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:322 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:336 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:381 msgid "RX" msgstr "Baixado" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:326 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:386 msgid "Uploaded" msgstr "Subido" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:329 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:389 msgid "TX" msgstr "Subido" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:334 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:395 msgid "Down Rate" msgstr "Taça de descarga" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:339 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348 -msgid "Rate" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398 +#, fuzzy +msgid "RX Rate" msgstr "Taça" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:344 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404 msgid "Up Rate" msgstr "Taça de subida" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:368 +#. Translators: Please keep short or translate as " " +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407 +#, fuzzy +msgid "TX Rate" +msgstr "Taça" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:430 msgid "Stop all torrents and the I2P tunnel" msgstr "Deter todos os torrentes e o túnel I2P" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:370 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:432 msgid "Stop All" msgstr "Deter tudos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:379 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:441 msgid "Start all torrents and the I2P tunnel" msgstr "Iniciar todos os torrentes e o túnel I2P" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:381 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:443 msgid "Start All" msgstr "Arrancar todos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:400 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:463 msgid "No torrents loaded." msgstr "Não carregado nenhum torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:405 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:468 msgid "Totals" msgstr "Total" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:470 #, java-format msgid "1 torrent" msgid_plural "{0} torrents" msgstr[0] "1 torrente" msgstr[1] "{0} torrentes" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:410 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:473 #, java-format msgid "1 connected peer" msgid_plural "{0} connected peers" msgstr[0] "1 parceiro conectado" msgstr[1] "{0} parceiros conectados" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:499 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:479 +#, fuzzy, java-format +msgid "1 DHT peer" +msgid_plural "{0} DHT peers" +msgstr[0] "1 parceiro" +msgstr[1] "{0} parceiros" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572 #, java-format msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\"" msgstr "" "Endereço não válido - tem que começar com \"http://\", \"{0}\", ou \"{1}\"." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:547 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:574 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:614 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:644 #, java-format msgid "Magnet deleted: {0}" msgstr "Apagada o magnet: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:555 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:580 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:650 #, java-format msgid "Torrent file deleted: {0}" msgstr "Apagado o arquivo torrente: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:586 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:596 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:642 +#, fuzzy, java-format +msgid "Download deleted: {0}" +msgstr "Apagada a pasta de dados: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:656 #, java-format msgid "Data file deleted: {0}" msgstr "Apagado o arquivo de dados: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:588 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:598 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:658 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669 #, java-format msgid "Data file could not be deleted: {0}" msgstr "Não se pode apagar o arquivo de dados: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:607 -#, java-format -msgid "Data dir deleted: {0}" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:684 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:693 +#, fuzzy, java-format +msgid "Directory could not be deleted: {0}" +msgstr "Não se pode apagar o arquivo de dados: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:691 +#, fuzzy, java-format +msgid "Directory deleted: {0}" msgstr "Apagada a pasta de dados: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:644 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:738 msgid "Error creating torrent - you must select a tracker" msgstr "Erro ao criar o torrente - Tens que elegir um rastreador." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:659 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:755 #, java-format msgid "Torrent created for \"{0}\"" msgstr "torrente criado para \"{0}\"" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:661 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:757 #, java-format msgid "" "Many I2P trackers require you to register new torrents before seeding - " @@ -504,124 +651,169 @@ msgstr "" "Muitos rastreadores no I2P exigem que você registre novos torrentes antes de " "poder semeá-los. Por favor, faça isto antes de iniciar \"{0}\"!" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:663 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:759 #, java-format msgid "Error creating a torrent for \"{0}\"" msgstr "Erro ao criar o torrente \"{0}\"" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:666 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:762 #, java-format msgid "Cannot create a torrent for the nonexistent data: {0}" msgstr "Não se pode criar um torrente para dados que não existam: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:765 msgid "Error creating torrent - you must enter a file or directory" msgstr "" "Erro ao criar o torrente - Tens que especificar um arquivo ou uma pasta." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:672 -msgid "Stopping all torrents and closing the I2P tunnel." -msgstr "Detindo todos os torrentes e fechando o túnel I2P" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:780 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1771 +msgid "Delete selected" +msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:683 -msgid "I2P tunnel closed." -msgstr "Túnel I2P fechado" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:780 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1772 +#, fuzzy +msgid "Save tracker configuration" +msgstr "Guardar configuração" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:686 -msgid "Opening the I2P tunnel and starting all torrents." -msgstr "Abrendo o túnel I2P e iniciando os torrentes ..." +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:797 +#, fuzzy +msgid "Removed" +msgstr "Quitar" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1775 +#, fuzzy +msgid "Add tracker" +msgstr "Rastreador" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:849 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852 +msgid "Enter valid tracker name and URLs" +msgstr "" + +#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1774 +msgid "Restore defaults" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:857 +msgid "Restored default trackers" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:997 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:998 +msgid "Checking" +msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:808 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:813 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:819 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1000 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001 +msgid "Allocating" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1005 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1018 msgid "Tracker Error" msgstr "Erro do rastreador" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:811 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:815 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:827 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:831 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:839 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:843 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:848 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1008 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1013 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1041 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1046 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1057 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1062 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1068 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1073 #, java-format msgid "1 peer" msgid_plural "{0} peers" msgstr[0] "1 parceiro" msgstr[1] "{0} parceiros" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:824 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:829 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1021 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1022 +#, fuzzy +msgid "Starting" +msgstr "Iniciar" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1030 msgid "Seeding" msgstr "semeando" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:833 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1704 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1809 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1034 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1048 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2203 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2318 msgid "Complete" msgstr "completo" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:836 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:841 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1053 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1059 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1060 msgid "OK" msgstr "bem" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:845 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:850 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1064 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1065 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1070 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1071 msgid "Stalled" msgstr "estancado" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:857 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1075 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1076 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080 msgid "No Peers" msgstr "sem parceiros" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:859 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1082 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1083 msgid "Stopped" msgstr "detenido" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:891 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1116 msgid "Torrent details" msgstr "Detalhes do torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:903 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1167 -msgid "Info" -msgstr "Info" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:918 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1145 msgid "View files" msgstr "mostrar arquivos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:920 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1147 msgid "Open file" msgstr "abrir arquivo" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:962 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1192 msgid "Stop the torrent" msgstr "Deter o torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:964 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1194 msgid "Stop" msgstr "Deter" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:974 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1206 msgid "Start the torrent" msgstr "Iniciar o torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:976 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208 msgid "Start" msgstr "Iniciar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:987 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1220 msgid "Remove the torrent from the active list, deleting the .torrent file" msgstr "Retire o torrente da lista ativa, apagando o arquivo .torrent" #. Can't figure out how to escape double quotes inside the onclick string. #. Single quotes in translate strings with parameters must be doubled. -#. Then the remaining single quite must be escaped -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992 +#. Then the remaining single quote must be escaped +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1225 #, java-format msgid "" "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded " @@ -630,18 +822,18 @@ msgstr "" "Está seguro de que quer apagar o arquivo \\''{0}.torrent\\''? (Dados " "baixados não se apagarão.)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:995 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228 msgid "Remove" msgstr "Quitar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1006 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240 msgid "Delete the .torrent file and the associated data file(s)" msgstr "Apagar o arquivo torrente e o(s) arquivo(s) de dados pertenecentes" #. Can't figure out how to escape double quotes inside the onclick string. #. Single quotes in translate strings with parameters must be doubled. -#. Then the remaining single quite must be escaped -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011 +#. Then the remaining single quote must be escaped +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1245 #, java-format msgid "" "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded " @@ -650,181 +842,180 @@ msgstr "" "Está seguro de que quer apagar o arquivo torrente \\''{0}\\'' e todos os " "dados descarregados deste torrente?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1014 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1248 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738 msgid "Delete" msgstr "Apagar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283 msgid "Unknown" msgstr "desconhecido" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1061 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295 msgid "Seed" msgstr "Semeador" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1084 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1318 msgid "Uninteresting (The peer has no pieces we need)" msgstr "não interessante (O parceiro não tem peças que precisamos.)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1086 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1320 msgid "Choked (The peer is not allowing us to request pieces)" msgstr "" "sufocado (De momento o parceiro não está nos permitindo pedir mais peças.c)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1106 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1340 msgid "Uninterested (We have no pieces the peer needs)" msgstr "desinteressado (Não temos as peças que o parceiro quer.)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1108 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1342 msgid "Choking (We are not allowing the peer to request pieces)" msgstr "" "sufocando (De momento não estamos permitindo que os parceiros peçam mais " "peças)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1166 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1396 #, java-format msgid "Details at {0} tracker" msgstr "Detalhes no rastreador {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1195 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1412 +msgid "Info" +msgstr "Info" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1440 msgid "Add Torrent" msgstr "Adicionar um torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1197 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1442 msgid "From URL" msgstr "URL fonte:" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1200 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445 +#, fuzzy msgid "" -"Enter the torrent file download URL (I2P only), magnet link, or maggot link" +"Enter the torrent file download URL (I2P only), magnet link, maggot link, or " +"info hash" msgstr "Entre aqui a URL do .torrent (só I2P), a URL magnet ou uma URL maggot." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1205 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450 msgid "Add torrent" msgstr "Adicionar torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1453 #, java-format msgid "You can also copy .torrent files to: {0}." msgstr "Também pode copiar arquivos torrentes a {0}." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1210 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1455 msgid "Removing a .torrent will cause it to stop." msgstr "A remoção de um arquivo .torrent fará com que ele pare." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1233 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1478 msgid "Create Torrent" msgstr "Criar um torrente" #. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n"); -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1236 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1481 msgid "Data to seed" msgstr "Dados para semear" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1485 msgid "File or directory to seed (must be within the specified path)" msgstr "Arquivo ou pasta para semear (deve estar no caminho especificado)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1242 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1487 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2153 msgid "Tracker" msgstr "Rastreador" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1489 msgid "Select a tracker" msgstr "Selecione um rastreador" #. out.write(_("Open trackers and DHT only")); -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1249 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1494 msgid "Open trackers only" msgstr "só rastreadores abertos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264 -msgid "or" -msgstr "ou" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1267 -msgid "Specify custom tracker announce URL" -msgstr "Especifique o URL de rastreador personalizado" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1270 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1511 msgid "Create torrent" msgstr "Criar torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1459 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1535 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1784 msgid "Configuration" msgstr "Preferências" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539 msgid "Data directory" msgstr "Pasta de dados" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1297 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1541 msgid "Edit i2psnark.config and restart to change" msgstr "Para mudar, modifique o arquivo i2psnark.config e re-inÃcie!" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1301 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1545 msgid "Files readable by all" msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1305 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1549 msgid "If checked, other users may access the downloaded files" msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1309 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1553 msgid "Auto start" msgstr "Iniciar automáticamente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1313 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1557 msgid "If checked, automatically start torrents that are added" msgstr "se marcado, os torrentes adicionados se iniciarão automaticamente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1317 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1561 msgid "Theme" msgstr "Tema" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1330 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1574 msgid "Refresh time" msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1343 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1587 msgid "Never" msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1349 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1593 msgid "Startup delay" msgstr "Demora do arranque" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1351 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1595 msgid "minutes" msgstr "minutos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1375 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1619 msgid "Total uploader limit" msgstr "Limite global de subidores" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1378 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1622 msgid "peers" msgstr "parceiros" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1382 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1626 msgid "Up bandwidth limit" msgstr "Limite de largura de banda para a subida" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1385 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1629 msgid "Half available bandwidth recommended." msgstr "Se recomenda a metade da largura de banda disponÃvel." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1387 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1631 msgid "View or change router bandwidth" msgstr "mostrar e mudar as preferências da largura de banda do roteador" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1391 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1635 msgid "Use open trackers also" msgstr "usar também rastreadores abertos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1395 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1639 msgid "" "If checked, announce torrents to open trackers as well as the tracker listed " "in the torrent file" @@ -832,155 +1023,187 @@ msgstr "" "Se marcado, anunciar os torrentes aos rastreadores abertos, assim como aos " "rastreadores listados no arquivo torrente" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1399 -msgid "Open tracker announce URLs" -msgstr "URL(s) para anunciar aos rastreadores abertos" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643 +msgid "Enable DHT" +msgstr "" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1647 +msgid "If checked, use DHT" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663 msgid "Inbound Settings" msgstr "Preferências de entrada" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1417 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1669 msgid "Outbound Settings" msgstr "Preferências de saida" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1425 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1677 msgid "I2CP host" msgstr "Anfitrião I2CP" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1430 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1682 msgid "I2CP port" msgstr "Porto I2CP" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697 msgid "I2CP options" msgstr "Opções I2CP" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702 msgid "Save configuration" msgstr "Guardar configuração" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1475 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716 +#, fuzzy +msgid "Trackers" +msgstr "Rastreador" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1721 +msgid "Name" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723 +msgid "Website URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2356 +msgid "Open" +msgstr "abrir" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1727 +msgid "Private" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729 +msgid "Announce URL" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1763 +msgid "Add" +msgstr "" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1800 #, java-format msgid "Invalid magnet URL {0}" msgstr "URL magnet {0} não válida" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1834 #, java-format msgid "Invalid info hash in magnet URL {0}" msgstr "Info hash não válido na URL magnet {0}" #. * dummies for translation -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1958 #, java-format msgid "1 hop" msgid_plural "{0} hops" msgstr[0] "1 salto" msgstr[1] "{0} saltos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1540 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1959 #, java-format msgid "1 tunnel" msgid_plural "{0} tunnels" msgstr[0] "1 túnel" msgstr[1] "{0} túneles" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702 -msgid "Completion" -msgstr "Finalização" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2140 +#, fuzzy +msgid "Torrent file" +msgstr "Detalhes do torrente" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2175 +msgid "Magnet link" +msgstr "URL magnet" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2182 +#, fuzzy +msgid "Private torrent" +msgstr "Criar torrente" -#. else unknown -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1706 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1755 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2191 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2255 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2257 msgid "Size" msgstr "Tamanho" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1711 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2198 +msgid "Completion" +msgstr "Finalização" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2208 +#, fuzzy +msgid "Remaining" +msgstr "Bytes faltando" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2215 msgid "Files" msgstr "Arquivos" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1713 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2220 msgid "Pieces" msgstr "Peças" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1714 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2224 msgid "Piece size" msgstr "Tamanho das peças" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1736 -msgid "Magnet link" -msgstr "URL magnet" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1753 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1792 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2247 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2251 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2301 msgid "Directory" msgstr "Pasta" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1762 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2268 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2270 msgid "Priority" msgstr "Prioridade" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1767 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2276 msgid "Up to higher level directory" msgstr "Subir uma herarquia" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1797 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2306 msgid "Torrent not found?" msgstr "Não achei o arquivo torrente?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1806 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2315 msgid "File not found in torrent?" msgstr "Arquivo não achado no torrente?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1819 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2328 msgid "complete" msgstr "completo" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1820 -msgid "bytes remaining" +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2329 +#, fuzzy +msgid "remaining" msgstr "Bytes faltando" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1845 -msgid "Open" -msgstr "abrir" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1871 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2383 msgid "High" msgstr "alta" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1876 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2388 msgid "Normal" msgstr "normal" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1881 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2393 msgid "Skip" msgstr "Ignorar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1890 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2402 msgid "Save priorities" msgstr "Guardar prioridades" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2006 -#, java-format -msgid "Torrent fetched from {0}" -msgstr "torrente obtido de {0}" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2027 -#, java-format -msgid "Torrent already running: {0}" -msgstr "torrente já em marcha: {0}" - -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2029 -#, java-format -msgid "Torrent already in the queue: {0}" -msgstr "torrente já na cola: {0}" +#~ msgid "or" +#~ msgstr "ou" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2035 -#, java-format -msgid "Torrent at {0} was not valid" -msgstr "torrente em {0} não foi válido" +#~ msgid "Specify custom tracker announce URL" +#~ msgstr "Especifique o URL de rastreador personalizado" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2042 -#, java-format -msgid "Torrent was not retrieved from {0}" -msgstr "Não se pode obter torrente de {0}" +#~ msgid "Open tracker announce URLs" +#~ msgstr "URL(s) para anunciar aos rastreadores abertos" diff --git a/apps/i2psnark/locale/messages_sv.po b/apps/i2psnark/locale/messages_sv.po index e8bee1dea48f4e0e9e956ccd6f963effd73f0071..dc7a00092a93f6cabfd741ed442d2c2173b2b18f 100644 --- a/apps/i2psnark/locale/messages_sv.po +++ b/apps/i2psnark/locale/messages_sv.po @@ -2,379 +2,393 @@ # Copyright (C) 2009 The I2P Project # This file is distributed under the same license as the i2psnark package. # To contribute translations, see http://www.i2p2.de/newdevelopers -# +# # Translators: # 123hund123 <M8R-ra4r1r@mailinator.com>, 2011. # <ducki2p@gmail.com>, 2011. # hottuna <i2p@robertfoss.se>, 2011. # <i2p@robertfoss.se>, 2011. -# Martin Svensson <digitalmannen@gmail.com>, 2011, 2012. +# Martin Svensson <digitalmannen@gmail.com>, 2011-2012. +# <mattias.ohlsson@inprose.com>, 2012. msgid "" msgstr "" "Project-Id-Version: I2P\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-26 19:10+0000\n" -"PO-Revision-Date: 2012-07-25 19:21+0000\n" +"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n" +"POT-Creation-Date: 2012-10-12 00:38+0000\n" +"PO-Revision-Date: 2012-10-15 14:54+0000\n" "Last-Translator: Martin Svensson <digitalmannen@gmail.com>\n" -"Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/I2P/" -"language/sv_SE/)\n" -"Language: sv_SE\n" +"Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/I2P/language/sv_SE/)\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" +"Language: sv_SE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: ../java/src/org/klomp/snark/SnarkManager.java:407 +#: ../java/src/org/klomp/snark/SnarkManager.java:434 #, java-format msgid "Total uploaders limit changed to {0}" msgstr "Gräns för totalt antal uppladdare är bytt till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:409 +#: ../java/src/org/klomp/snark/SnarkManager.java:436 #, java-format msgid "Minimum total uploaders limit is {0}" msgstr "Gräns för totalt minsta antal uppladdare är bytt till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:421 +#: ../java/src/org/klomp/snark/SnarkManager.java:448 #, java-format msgid "Up BW limit changed to {0}KBps" msgstr "Uppladdnings bandbredd bytt till {0}KBps" -#: ../java/src/org/klomp/snark/SnarkManager.java:423 +#: ../java/src/org/klomp/snark/SnarkManager.java:450 #, java-format msgid "Minimum up bandwidth limit is {0}KBps" msgstr "Minsta uppladdnings bandbredd bytt till {0}KBps" -#: ../java/src/org/klomp/snark/SnarkManager.java:435 +#: ../java/src/org/klomp/snark/SnarkManager.java:462 #, java-format msgid "Startup delay changed to {0}" msgstr "Fördröjning vid uppstart bytt till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:446 +#: ../java/src/org/klomp/snark/SnarkManager.java:473 #, java-format msgid "Refresh time changed to {0}" msgstr "Uppdateringstiden ändrad till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:448 +#: ../java/src/org/klomp/snark/SnarkManager.java:475 msgid "Refresh disabled" msgstr "Uppdatering inaktiverad" -#: ../java/src/org/klomp/snark/SnarkManager.java:503 +#: ../java/src/org/klomp/snark/SnarkManager.java:530 msgid "I2CP and tunnel changes will take effect after stopping all torrents" -msgstr "" -"I2CP och tunnel förändringar kommer träda i kraft efter alla torrentar " -"stoppats." +msgstr "I2CP och tunnel förändringar kommer träda i kraft efter alla torrentar stoppats." -#: ../java/src/org/klomp/snark/SnarkManager.java:507 +#: ../java/src/org/klomp/snark/SnarkManager.java:534 #, java-format msgid "I2CP options changed to {0}" msgstr "I2CP valet ändrad till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:512 +#: ../java/src/org/klomp/snark/SnarkManager.java:539 msgid "Disconnecting old I2CP destination" msgstr "Kopplat frÃ¥n gammal I2CP destination" -#: ../java/src/org/klomp/snark/SnarkManager.java:514 +#: ../java/src/org/klomp/snark/SnarkManager.java:541 #, java-format msgid "I2CP settings changed to {0}" msgstr "I2CP-inställningar ändrade till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:519 +#: ../java/src/org/klomp/snark/SnarkManager.java:546 msgid "" "Unable to connect with the new settings, reverting to the old I2CP settings" -msgstr "" -"Misslyckades med anslutningsförsök med nya inställningar, Ã¥terställer de " -"gamla I2CP inställningarna" +msgstr "Misslyckades med anslutningsförsök med nya inställningar, Ã¥terställer de gamla I2CP inställningarna" -#: ../java/src/org/klomp/snark/SnarkManager.java:523 +#: ../java/src/org/klomp/snark/SnarkManager.java:550 msgid "Unable to reconnect with the old settings!" msgstr "Misslyckades med anslutningsförsök med gamla inställningar!" -#: ../java/src/org/klomp/snark/SnarkManager.java:525 +#: ../java/src/org/klomp/snark/SnarkManager.java:552 msgid "Reconnected on the new I2CP destination" msgstr "Ã…teranslöt mot den nya I2CP destinationen" -#: ../java/src/org/klomp/snark/SnarkManager.java:532 +#: ../java/src/org/klomp/snark/SnarkManager.java:559 #, java-format msgid "I2CP listener restarted for \"{0}\"" msgstr "I2CP-lyssnar omstartad pÃ¥ grund av \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:544 +#: ../java/src/org/klomp/snark/SnarkManager.java:571 msgid "New files will be publicly readable" msgstr "Nya filer kommer vara publikt läsbara" -#: ../java/src/org/klomp/snark/SnarkManager.java:546 +#: ../java/src/org/klomp/snark/SnarkManager.java:573 msgid "New files will not be publicly readable" msgstr "Nya filer kommer inte vara publikt läsbara" -#: ../java/src/org/klomp/snark/SnarkManager.java:553 +#: ../java/src/org/klomp/snark/SnarkManager.java:580 msgid "Enabled autostart" msgstr "Aktiverade automatisk start" -#: ../java/src/org/klomp/snark/SnarkManager.java:555 +#: ../java/src/org/klomp/snark/SnarkManager.java:582 msgid "Disabled autostart" msgstr "Avaktiverade automatisk start" -#: ../java/src/org/klomp/snark/SnarkManager.java:561 +#: ../java/src/org/klomp/snark/SnarkManager.java:588 msgid "Enabled open trackers - torrent restart required to take effect." -msgstr "" -"Aktiverade öppna trackers - torrent mÃ¥ste startas om för att inställningen " -"ska träda i kraft" +msgstr "Aktiverade öppna trackers - torrent mÃ¥ste startas om för att inställningen ska träda i kraft" -#: ../java/src/org/klomp/snark/SnarkManager.java:563 +#: ../java/src/org/klomp/snark/SnarkManager.java:590 msgid "Disabled open trackers - torrent restart required to take effect." -msgstr "" -"Avaktiverade öppna trackers - torrent mÃ¥ste startas om för att inställningen " -"ska träda i kraft" +msgstr "Avaktiverade öppna trackers - torrent mÃ¥ste startas om för att inställningen ska träda i kraft" + +#: ../java/src/org/klomp/snark/SnarkManager.java:597 +msgid "Enabled DHT." +msgstr "Aktivera DHT." -#: ../java/src/org/klomp/snark/SnarkManager.java:570 +#: ../java/src/org/klomp/snark/SnarkManager.java:599 +msgid "Disabled DHT." +msgstr "Avaktivera DHT." + +#: ../java/src/org/klomp/snark/SnarkManager.java:601 +msgid "DHT change requires tunnel shutdown and reopen" +msgstr "Förändringar i DHT kräver att tunneln stängs och öppnas igen " + +#: ../java/src/org/klomp/snark/SnarkManager.java:608 #, java-format msgid "{0} theme loaded, return to main i2psnark page to view." msgstr "{0} tema laddat, Ã¥tergÃ¥ till huvudvyn för i2psnark." -#: ../java/src/org/klomp/snark/SnarkManager.java:577 +#: ../java/src/org/klomp/snark/SnarkManager.java:615 msgid "Configuration unchanged." msgstr "Inställningar oförändrade" -#: ../java/src/org/klomp/snark/SnarkManager.java:609 +#: ../java/src/org/klomp/snark/SnarkManager.java:647 msgid "Open Tracker list changed - torrent restart required to take effect." -msgstr "" -"Öppen tracker-lista förändrad - torrent mÃ¥ste startas om för att " -"inställningen ska träda i kraft" +msgstr "Öppen tracker-lista förändrad - torrent mÃ¥ste startas om för att inställningen ska träda i kraft" -#: ../java/src/org/klomp/snark/SnarkManager.java:619 +#: ../java/src/org/klomp/snark/SnarkManager.java:657 msgid "Private tracker list changed - affects newly created torrents only." msgstr "Privat trackerlista ändrad - pÃ¥verkar bara nyligen skapade torrents" -#: ../java/src/org/klomp/snark/SnarkManager.java:665 +#: ../java/src/org/klomp/snark/SnarkManager.java:703 #, java-format msgid "Unable to save the config to {0}" msgstr "Misslyckades med att spara inställningar till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:730 +#: ../java/src/org/klomp/snark/SnarkManager.java:768 msgid "Connecting to I2P" msgstr "Ansluter till I2P" -#: ../java/src/org/klomp/snark/SnarkManager.java:733 +#: ../java/src/org/klomp/snark/SnarkManager.java:771 msgid "Error connecting to I2P - check your I2CP settings!" msgstr "Problem vid anslutning till I2P - kontrollera dina I2CP-inställningar!" -#: ../java/src/org/klomp/snark/SnarkManager.java:742 +#: ../java/src/org/klomp/snark/SnarkManager.java:780 #, java-format msgid "Error: Could not add the torrent {0}" msgstr "Problem: Kunda in lägga till torrent {0}" #. catch this here so we don't try do delete it below -#: ../java/src/org/klomp/snark/SnarkManager.java:764 +#: ../java/src/org/klomp/snark/SnarkManager.java:802 #, java-format msgid "Cannot open \"{0}\"" msgstr "Kan inte öppna \"{0}\"" -#. TODO - if the existing one is a magnet, delete it and add the metainfo instead? -#: ../java/src/org/klomp/snark/SnarkManager.java:783 -#: ../java/src/org/klomp/snark/SnarkManager.java:861 -#: ../java/src/org/klomp/snark/SnarkManager.java:939 +#. TODO - if the existing one is a magnet, delete it and add the metainfo +#. instead? +#: ../java/src/org/klomp/snark/SnarkManager.java:821 +#: ../java/src/org/klomp/snark/SnarkManager.java:899 +#: ../java/src/org/klomp/snark/SnarkManager.java:980 #: ../java/src/org/klomp/snark/web/FetchAndAdd.java:159 #, java-format msgid "Torrent with this info hash is already running: {0}" msgstr "Torrent med denna infohash körs redan: {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:789 +#: ../java/src/org/klomp/snark/SnarkManager.java:827 #, java-format msgid "ERROR - No I2P trackers in private torrent \"{0}\"" msgstr "FEL - Inga I2P trackers den i privata torrenten \"{0}\"" -#. addMessage(_("Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and DHT only.", info.getName())); -#: ../java/src/org/klomp/snark/SnarkManager.java:792 +#: ../java/src/org/klomp/snark/SnarkManager.java:829 #, java-format msgid "" -"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers " -"only." -msgstr "" -"Varning - Inga I2P trackers i \"{0}\", kommer enbart anmäla til öppna " -"trackers i I2P." +"Warning - No I2P trackers in \"{0}\", will announce to I2P open trackers and" +" DHT only." +msgstr "Varning - Ingen I2P tracker i \"{0}\", kommer enbart att annonseras till I2P öppna trackers och DHT." -#. addMessage(_("Warning - No I2P trackers in \"{0}\", and DHT and open trackers are disabled, you should enable open trackers or DHT before starting the torrent.", info.getName())); -#: ../java/src/org/klomp/snark/SnarkManager.java:797 +#: ../java/src/org/klomp/snark/SnarkManager.java:832 #, java-format msgid "" -"Warning - No I2P Trackers found in \"{0}\". Make sure Open Tracker is " -"enabled before starting this torrent." -msgstr "" -"Varning - Inga I2P trackers i \"{0}\". Kontrollera att öppna trackers är " -"pÃ¥slagna innan denhär torrenten startas." +"Warning - No I2P trackers in \"{0}\", and open trackers are disabled, will " +"announce to DHT only." +msgstr "Varning - Ingen I2P tracker i \"{0}\" och öppna trakers är avaktiverade, kommer enbart att annonseras till DHT" -#: ../java/src/org/klomp/snark/SnarkManager.java:818 +#: ../java/src/org/klomp/snark/SnarkManager.java:834 +#, java-format +msgid "" +"Warning - No I2P trackers in \"{0}\", and DHT and open trackers are " +"disabled, you should enable open trackers or DHT before starting the " +"torrent." +msgstr "Varning - Ingen I2P tracker i \"{0}\" och bÃ¥de DHT och öppna trakers är avaktiverade, du bör aktivera öppna trackers eller DHT innan du startar torrenten. " + +#: ../java/src/org/klomp/snark/SnarkManager.java:856 #, java-format msgid "Torrent in \"{0}\" is invalid" msgstr "Torrent i \"{0}\" är ogiltig" -#: ../java/src/org/klomp/snark/SnarkManager.java:823 +#: ../java/src/org/klomp/snark/SnarkManager.java:861 #: ../java/src/org/klomp/snark/web/FetchAndAdd.java:181 #, java-format msgid "ERROR - Out of memory, cannot create torrent from {0}" msgstr "Problem: Minnet har tagit slut, kan inte skapa torrent frÃ¥n {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:835 +#: ../java/src/org/klomp/snark/SnarkManager.java:873 #, java-format msgid "Torrent added and started: \"{0}\"" msgstr "Torrent tillagd och startad: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:837 +#: ../java/src/org/klomp/snark/SnarkManager.java:875 #, java-format msgid "Torrent added: \"{0}\"" msgstr "Torrent tillagd: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:872 +#: ../java/src/org/klomp/snark/SnarkManager.java:910 #: ../java/src/org/klomp/snark/web/FetchAndAdd.java:87 #, java-format msgid "Fetching {0}" msgstr "Hämtar {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:875 +#: ../java/src/org/klomp/snark/SnarkManager.java:916 #, java-format msgid "" -"We have no saved peers and no other torrents are running. Fetch of {0} will " -"not succeed until you start another torrent." -msgstr "" -"Vi har inga sparade nerladdare och inga andra torrents kör. Hämtning av {0} " -"kommer inte lyckas för en annan torrent startas." +"Open trackers are disabled and we have no DHT peers. Fetch of {0} may not " +"succeed until you start another torrent, enable open trackers, or enable " +"DHT." +msgstr "Öppna trackers är avaktiverade och det finns inga DHT peers. Hämtningen av {0} kan inte genomföras innan du startar en annan torrent eller aktiverar öppna trackers eller DHT " -#: ../java/src/org/klomp/snark/SnarkManager.java:879 +#: ../java/src/org/klomp/snark/SnarkManager.java:920 #, java-format msgid "Adding {0}" msgstr "Lägger till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:910 +#: ../java/src/org/klomp/snark/SnarkManager.java:951 #, java-format msgid "Download already running: {0}" msgstr "nerladdning körs: {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:949 -#: ../java/src/org/klomp/snark/SnarkManager.java:972 -#: ../java/src/org/klomp/snark/SnarkManager.java:1408 +#: ../java/src/org/klomp/snark/SnarkManager.java:990 +#: ../java/src/org/klomp/snark/SnarkManager.java:1013 +#: ../java/src/org/klomp/snark/SnarkManager.java:1451 #, java-format msgid "Failed to copy torrent file to {0}" msgstr "Misslyckades att kopiera torrentfil till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1199 +#: ../java/src/org/klomp/snark/SnarkManager.java:1240 #, java-format msgid "Too many files in \"{0}\" ({1}), deleting it!" msgstr "För mÃ¥nga filer i \"{0}\" ({1}), tar bort den!" -#: ../java/src/org/klomp/snark/SnarkManager.java:1201 +#: ../java/src/org/klomp/snark/SnarkManager.java:1242 #, java-format msgid "Torrent file \"{0}\" cannot end in \".torrent\", deleting it!" msgstr "Torrenten \"{0}\" fÃ¥r inte sluta med \".torrent\", tar bort den." -#: ../java/src/org/klomp/snark/SnarkManager.java:1203 +#: ../java/src/org/klomp/snark/SnarkManager.java:1244 #, java-format msgid "No pieces in \"{0}\", deleting it!" msgstr "Inga delar i \"{0}\", tar bort den." -#: ../java/src/org/klomp/snark/SnarkManager.java:1205 +#: ../java/src/org/klomp/snark/SnarkManager.java:1246 #, java-format msgid "Too many pieces in \"{0}\", limit is {1}, deleting it!" msgstr "För mÃ¥nga delar i \"{0}\", gränden är {1}, raderar den!" -#: ../java/src/org/klomp/snark/SnarkManager.java:1207 +#: ../java/src/org/klomp/snark/SnarkManager.java:1248 #, java-format msgid "Pieces are too large in \"{0}\" ({1}B), deleting it." msgstr "För stora delar i \"{0}\" ({1}B), raderar den." -#: ../java/src/org/klomp/snark/SnarkManager.java:1208 +#: ../java/src/org/klomp/snark/SnarkManager.java:1249 #, java-format msgid "Limit is {0}B" msgstr "Gränsen är {0}B" -#: ../java/src/org/klomp/snark/SnarkManager.java:1210 +#: ../java/src/org/klomp/snark/SnarkManager.java:1251 #, java-format msgid "Torrent \"{0}\" has no data, deleting it!" msgstr "Torrenten \"{0}\" har ingen data, tar bort den!" -#: ../java/src/org/klomp/snark/SnarkManager.java:1218 +#: ../java/src/org/klomp/snark/SnarkManager.java:1259 #, java-format msgid "Torrents larger than {0}B are not supported yet, deleting \"{1}\"" msgstr "Torrentar större än {0}B stöds ännu ej, tar bort \"{1}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:1234 +#: ../java/src/org/klomp/snark/SnarkManager.java:1275 #, java-format msgid "Error: Could not remove the torrent {0}" msgstr "Problem: Kunde ej ta bort torrent {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1255 -#: ../java/src/org/klomp/snark/SnarkManager.java:1273 +#: ../java/src/org/klomp/snark/SnarkManager.java:1296 +#: ../java/src/org/klomp/snark/SnarkManager.java:1314 #, java-format msgid "Torrent stopped: \"{0}\"" msgstr "Torrent stannad: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:1294 +#: ../java/src/org/klomp/snark/SnarkManager.java:1335 #, java-format msgid "Torrent removed: \"{0}\"" msgstr "Torrent borttagen: \"{0}\"" -#: ../java/src/org/klomp/snark/SnarkManager.java:1302 +#: ../java/src/org/klomp/snark/SnarkManager.java:1343 #, java-format msgid "Adding torrents in {0}" msgstr "Torrents tillagda i {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1353 +#: ../java/src/org/klomp/snark/SnarkManager.java:1374 +#, java-format +msgid "Up bandwidth limit is {0} KBps" +msgstr "Upp bandbredds gräns är {0} KBps" + +#: ../java/src/org/klomp/snark/SnarkManager.java:1396 #, java-format msgid "Download finished: {0}" msgstr "Nerladdning klar: {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1404 +#: ../java/src/org/klomp/snark/SnarkManager.java:1447 #, java-format msgid "Metainfo received for {0}" msgstr "Metainfo mottagen till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1405 -#: ../java/src/org/klomp/snark/SnarkManager.java:1620 +#: ../java/src/org/klomp/snark/SnarkManager.java:1448 +#: ../java/src/org/klomp/snark/SnarkManager.java:1671 #, java-format msgid "Starting up torrent {0}" msgstr "Startar torrent {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1420 +#: ../java/src/org/klomp/snark/SnarkManager.java:1463 #, java-format msgid "Error on torrent {0}" msgstr "Fel pÃ¥ torrent {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1438 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1765 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1775 +#: ../java/src/org/klomp/snark/SnarkManager.java:1489 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1805 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1815 msgid "Magnet" msgstr "Magnet" -#: ../java/src/org/klomp/snark/SnarkManager.java:1469 +#: ../java/src/org/klomp/snark/SnarkManager.java:1520 msgid "Unable to connect to I2P!" msgstr "Misslyckades med att ansluta till I2P" -#: ../java/src/org/klomp/snark/SnarkManager.java:1475 +#: ../java/src/org/klomp/snark/SnarkManager.java:1526 #, java-format msgid "Unable to add {0}" msgstr "Misslyckades med att lägga till {0}" -#: ../java/src/org/klomp/snark/SnarkManager.java:1619 +#: ../java/src/org/klomp/snark/SnarkManager.java:1670 #: ../java/src/org/klomp/snark/web/FetchAndAdd.java:124 msgid "Opening the I2P tunnel" msgstr "Öpnat I2P tunnel " -#: ../java/src/org/klomp/snark/SnarkManager.java:1643 +#: ../java/src/org/klomp/snark/SnarkManager.java:1694 msgid "Opening the I2P tunnel and starting all torrents." msgstr "Öppnar I2P-tunneln och startar torrents." -#: ../java/src/org/klomp/snark/SnarkManager.java:1698 +#: ../java/src/org/klomp/snark/SnarkManager.java:1749 msgid "Stopping all torrents and closing the I2P tunnel." msgstr "Stoppar alla torrents och stänger I2P-tunneln." -#: ../java/src/org/klomp/snark/SnarkManager.java:1714 +#: ../java/src/org/klomp/snark/SnarkManager.java:1768 msgid "Closing I2P tunnel after notifying trackers." msgstr "Stänger I2P tunnel eter meddelande till trackers." -#: ../java/src/org/klomp/snark/SnarkManager.java:1721 -#: ../java/src/org/klomp/snark/SnarkManager.java:1732 +#: ../java/src/org/klomp/snark/SnarkManager.java:1775 +#: ../java/src/org/klomp/snark/SnarkManager.java:1786 msgid "I2P tunnel closed." msgstr "I2P-tunneln är stängd." +#: ../java/src/org/klomp/snark/TrackerClient.java:227 +#, java-format +msgid "No valid trackers for {0} - enable opentrackers or DHT?" +msgstr "Ingen giltig tracker för {0} - aktiverar öppna trackers eller DHT?" + #: ../java/src/org/klomp/snark/web/FetchAndAdd.java:75 #, java-format msgid "Download torrent file from {0}" @@ -405,718 +419,741 @@ msgstr "Torrent finns redan i kö: {0}" msgid "Torrent at {0} was not valid" msgstr "Torrent vid {0} var inte giltig" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:222 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:223 msgid "I2PSnark - Anonymous BitTorrent Client" msgstr "I2PSnark - Anonym bittorrentklient" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:235 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:236 msgid "Router is down" msgstr "Routen är nere" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:250 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:251 msgid "Torrents" msgstr "Torrents" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:253 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:260 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1236 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:254 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:261 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1267 msgid "I2PSnark" msgstr "I2PSnark" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:257 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:258 msgid "Refresh page" msgstr "Ladda om sida" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:262 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:263 msgid "Forum" msgstr "Forum" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:275 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:276 msgid "Click \"Add torrent\" button to fetch torrent" msgstr "Klicka pÃ¥ \"Lägg till torrent\" för att hämta en trorrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:310 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:311 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:312 msgid "clear messages" msgstr "rensa meddelandena" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:337 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:339 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2219 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2221 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:338 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:340 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2261 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2263 msgid "Status" msgstr "Status" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:346 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:348 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:347 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:349 msgid "Hide Peers" msgstr "Göm nerladdare" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:353 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:355 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:354 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:356 msgid "Show Peers" msgstr "Visa nerladdare" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:362 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:364 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2076 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2091 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:363 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:365 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2116 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2131 msgid "Torrent" msgstr "Torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:369 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:370 msgid "Estimated time remaining" msgstr "Uppskattad Ã¥terstÃ¥ende tid" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:373 msgid "ETA" msgstr "UÃ…T" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:378 msgid "Downloaded" msgstr "Nerladdat" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:380 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:381 msgid "RX" msgstr "RX" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:385 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:386 msgid "Uploaded" msgstr "Uppladdat" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:388 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:389 msgid "TX" msgstr "TX" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:394 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:395 msgid "Down Rate" msgstr "Nerhastighet" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:397 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:398 msgid "RX Rate" msgstr "RX Rate" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:403 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:404 msgid "Up Rate" msgstr "Upphastighet" #. Translators: Please keep short or translate as " " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:406 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:407 msgid "TX Rate" msgstr "TX Rate" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:429 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:430 msgid "Stop all torrents and the I2P tunnel" msgstr "Stoppa alla torrents och I2P-tunneln" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:431 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:432 msgid "Stop All" msgstr "Stoppa alla" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:440 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:441 msgid "Start all torrents and the I2P tunnel" msgstr "Starta alla torrents och I2P-tunneln" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:442 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:443 msgid "Start All" msgstr "Starta alla" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:462 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:463 msgid "No torrents loaded." msgstr "Inga torrents laddade." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:467 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:468 msgid "Totals" msgstr "Totalt" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:469 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:470 #, java-format msgid "1 torrent" msgid_plural "{0} torrents" msgstr[0] "{0} torrent" msgstr[1] "{0} torrents" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:472 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:473 #, java-format msgid "1 connected peer" msgid_plural "{0} connected peers" msgstr[0] "{0} ansluten nerladdare" msgstr[1] "{0} anslutna nerladdare" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:561 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:479 +#, java-format +msgid "1 DHT peer" +msgid_plural "{0} DHT peers" +msgstr[0] "1 DHT peer" +msgstr[1] "{0} DHT peers" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:572 #, java-format msgid "Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\"" msgstr "Ogiltig URL: MÃ¥ste starta med \"http://\", \"{0}\" eller \"{1}\"" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:602 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:629 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:614 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:644 #, java-format msgid "Magnet deleted: {0}" msgstr "Magnet borttagen: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:610 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:635 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:622 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:650 #, java-format msgid "Torrent file deleted: {0}" msgstr "Torrentfil borttagen: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:641 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:642 +#, java-format +msgid "Download deleted: {0}" +msgstr "Nedladdning borttagen: {0}" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:656 #, java-format msgid "Data file deleted: {0}" msgstr "Datafil borttagen: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:643 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:654 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:658 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669 #, java-format msgid "Data file could not be deleted: {0}" msgstr "Datafil kunde inte tas bort: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:669 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:678 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:684 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:693 #, java-format msgid "Directory could not be deleted: {0}" msgstr "Katalogen kunde inta tas bort: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:676 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:691 #, java-format msgid "Directory deleted: {0}" msgstr "Katalogen bort tagen: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:722 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:738 msgid "Error creating torrent - you must select a tracker" msgstr "Misslyckades med att skapa torrent - en tracker mÃ¥ste väljas" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:738 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:755 #, java-format msgid "Torrent created for \"{0}\"" msgstr "Torrent skapad för \"{0}\"" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:740 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:757 #, java-format msgid "" "Many I2P trackers require you to register new torrents before seeding - " "please do so before starting \"{0}\"" -msgstr "" -"MÃ¥nga I2P trackers kräver att användare registrerar sig för uppladdning av " -"torrent - gör det innan \"{0}\" startas" +msgstr "MÃ¥nga I2P trackers kräver att användare registrerar sig för uppladdning av torrent - gör det innan \"{0}\" startas" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:742 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:759 #, java-format msgid "Error creating a torrent for \"{0}\"" msgstr "Misslyckades med att skapa torrent för \"{0}\"" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:745 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:762 #, java-format msgid "Cannot create a torrent for the nonexistent data: {0}" msgstr "Kan ej skapa torrent för data som ej finns: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:748 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:765 msgid "Error creating torrent - you must enter a file or directory" msgstr "Misslyckades med att skapa torrent - en fil eller mapp mÃ¥ste anges" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:763 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1731 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:780 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1771 msgid "Delete selected" msgstr "Ta bort valda" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:763 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1732 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:780 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1772 msgid "Save tracker configuration" msgstr "Spara tracker konfiguration" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:780 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:797 msgid "Removed" msgstr "Borttagen" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:809 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1730 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1735 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:826 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1770 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1775 msgid "Add tracker" msgstr "Lägg till tracker" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:832 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:835 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:849 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:852 msgid "Enter valid tracker name and URLs" msgstr "Ange namn och URL för trackern " -#. "<input type=\"reset\" class=\"cancel\" value=\"").append(_("Cancel")).append("\">\n" + -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:837 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1734 +#. "<input type=\"reset\" class=\"cancel\" +#. value=\"").append(_("Cancel")).append("\">\n" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:854 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1774 msgid "Restore defaults" msgstr "Ã…terställ standardvärden" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:840 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:857 msgid "Restored default trackers" msgstr "Ã…terställ standard trackers " -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:976 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:982 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:989 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:997 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:998 +msgid "Checking" +msgstr "Kontrollerar " + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1000 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001 +msgid "Allocating" +msgstr "Allokerar" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1005 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1011 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1018 msgid "Tracker Error" msgstr "Tracker-fel" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:979 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:984 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1012 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1017 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1028 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1033 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1039 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1044 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1008 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1013 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1041 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1046 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1057 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1062 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1068 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1073 #, java-format msgid "1 peer" msgid_plural "{0} peers" msgstr[0] "{0} nerladdare" msgstr[1] "{0} nerladdare" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:992 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:993 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1021 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1022 msgid "Starting" msgstr "Startar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1001 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1030 msgid "Seeding" msgstr "Uppladdning" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1005 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1019 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1020 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2161 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2276 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1034 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1048 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1049 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2203 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2318 msgid "Complete" msgstr "Färdig" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1024 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1025 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1030 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1031 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1053 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1059 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1060 msgid "OK" msgstr "Ok" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1035 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1036 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1041 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1042 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1064 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1065 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1070 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1071 msgid "Stalled" msgstr "Avstannad" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1046 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1047 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1050 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1051 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1075 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1076 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1079 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1080 msgid "No Peers" msgstr "Inga källor" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1053 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1054 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1082 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1083 msgid "Stopped" msgstr "Stoppad" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1087 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1116 msgid "Torrent details" msgstr "Torrentdetaljer" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1116 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1145 msgid "View files" msgstr "Se filer" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1118 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1147 msgid "Open file" msgstr "Öppna fil" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1161 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1192 msgid "Stop the torrent" msgstr "Stoppa torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1163 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1194 msgid "Stop" msgstr "Stoppa" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1175 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1206 msgid "Start the torrent" msgstr "Starta torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1177 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1208 msgid "Start" msgstr "Starta" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1189 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1220 msgid "Remove the torrent from the active list, deleting the .torrent file" msgstr "Ta bort torrent frÃ¥n den aktiva listan, tar bort .torrent fil" #. Can't figure out how to escape double quotes inside the onclick string. #. Single quotes in translate strings with parameters must be doubled. #. Then the remaining single quote must be escaped -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1194 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1225 #, java-format msgid "" "Are you sure you want to delete the file \\''{0}.torrent\\'' (downloaded " "data will not be deleted) ?" -msgstr "" -"Är du säker pÃ¥ att du vill ta bort filen \"{0}.torrent\" (nerladdad data " -"kommer ej tas bort) ?" +msgstr "Är du säker pÃ¥ att du vill ta bort filen \"{0}.torrent\" (nerladdad data kommer ej tas bort) ?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1197 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1228 msgid "Remove" msgstr "Ta bort" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1209 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1240 msgid "Delete the .torrent file and the associated data file(s)" msgstr "Ta bort .torrent filen och tillhörande datafil(er)" #. Can't figure out how to escape double quotes inside the onclick string. #. Single quotes in translate strings with parameters must be doubled. #. Then the remaining single quote must be escaped -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1214 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1245 #, java-format msgid "" "Are you sure you want to delete the torrent \\''{0}\\'' and all downloaded " "data?" -msgstr "" -"Är du säker pÃ¥ att du vill ta bort torrenten \"{0}\" och all nerladdad data?" +msgstr "Är du säker pÃ¥ att du vill ta bort torrenten \"{0}\" och all nerladdad data?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1217 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1698 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1248 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1738 msgid "Delete" msgstr "Ta bort" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1252 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1283 msgid "Unknown" msgstr "Okänd" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1264 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1295 msgid "Seed" msgstr "Källa" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1287 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1318 msgid "Uninteresting (The peer has no pieces we need)" msgstr "Ointressant (nerladdaren har inga delar vi behöver)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1289 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1320 msgid "Choked (The peer is not allowing us to request pieces)" msgstr "Spärra (nerladdaren lÃ¥ter oss inte be dom delar)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1309 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1340 msgid "Uninterested (We have no pieces the peer needs)" msgstr "Ointresserad (vi har inga delar nerladdaren behöver)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1311 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1342 msgid "Choking (We are not allowing the peer to request pieces)" msgstr "Spärrar (vi lÃ¥ter inte nerladdaren be dom delar)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1365 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1396 #, java-format msgid "Details at {0} tracker" msgstr "Detaljer för {0} tracker" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1381 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1412 msgid "Info" msgstr "Info" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1409 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1440 msgid "Add Torrent" msgstr "Lägg till torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1411 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1442 msgid "From URL" msgstr "FrÃ¥n URL" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1414 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1445 msgid "" -"Enter the torrent file download URL (I2P only), magnet link, maggot link, or " -"info hash" -msgstr "" -"Ange URL för torrentfilen (enbart I2P), magnet link, maggot länk eller info " -"hash" +"Enter the torrent file download URL (I2P only), magnet link, maggot link, or" +" info hash" +msgstr "Ange URL för torrentfilen (enbart I2P), magnet link, maggot länk eller info hash" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1419 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450 msgid "Add torrent" msgstr "Lägg till torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1422 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1453 #, java-format msgid "You can also copy .torrent files to: {0}." msgstr "Du kan även kopiera .torrent filer till: {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1424 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1455 msgid "Removing a .torrent will cause it to stop." msgstr "Borttagning av .torrent fil kommer stanna den." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1447 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1478 msgid "Create Torrent" msgstr "Skapa torrent" -#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>\n"); -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1450 +#. out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" +#. value=\"" + newFile + "\" /><br>\n"); +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1481 msgid "Data to seed" msgstr "Data att ladda upp" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1454 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1485 msgid "File or directory to seed (must be within the specified path)" msgstr "Fil eller mapp att ladda upp (mÃ¥ste finnas pÃ¥ angiven plats)" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1456 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2111 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1487 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2153 msgid "Tracker" msgstr "Tracker" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1458 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1489 msgid "Select a tracker" msgstr "Välj en tracker" #. out.write(_("Open trackers and DHT only")); -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1463 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1494 msgid "Open trackers only" msgstr "Enbart öppna trackers" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1480 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1511 msgid "Create torrent" msgstr "Skapa torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1503 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1744 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1535 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1784 msgid "Configuration" msgstr "Inställningar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1507 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1539 msgid "Data directory" msgstr "Datamapp" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1509 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1541 msgid "Edit i2psnark.config and restart to change" -msgstr "Förändra i2psnark.conig och starta om för att ändra" +msgstr "Förändra i2psnark.config och starta om för att ändra" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1513 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1545 msgid "Files readable by all" msgstr "Filer läsbara för alla" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1517 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1549 msgid "If checked, other users may access the downloaded files" msgstr "Om vald, kommer andra användare att kunna komma Ã¥t nerladdade filer" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1521 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1553 msgid "Auto start" msgstr "Automatisk start" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1525 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1557 msgid "If checked, automatically start torrents that are added" msgstr "Om ikryssad, startas automatiskt tillagda torrents" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1529 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1561 msgid "Theme" msgstr "Tema" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1542 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1574 msgid "Refresh time" msgstr "Uppdateringsintervall" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1555 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1587 msgid "Never" msgstr "Aldrig" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1561 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1593 msgid "Startup delay" msgstr "Fördröjning av uppstart" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1563 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1595 msgid "minutes" msgstr "minuter" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1587 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1619 msgid "Total uploader limit" msgstr "Gräns för totalt antal uppladdare" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1590 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1622 msgid "peers" msgstr "nerladdare" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1594 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1626 msgid "Up bandwidth limit" msgstr "Gräns för bandbredd uppÃ¥t" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1597 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1629 msgid "Half available bandwidth recommended." msgstr "Hälften av tillgänglig bandbredd rekommenderas." -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1599 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1631 msgid "View or change router bandwidth" msgstr "Se eller ändra routerns bandbredd" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1603 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1635 msgid "Use open trackers also" msgstr "Använd öppna trackers med" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1607 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1639 msgid "" -"If checked, announce torrents to open trackers as well as the tracker listed " -"in the torrent file" -msgstr "" -"Om ikryssad, anmäl torrents till öppna trackers och tracker angiven i " -"torrentfilen" +"If checked, announce torrents to open trackers as well as the tracker listed" +" in the torrent file" +msgstr "Om ikryssad, anmäl torrents till öppna trackers och tracker angiven i torrentfilen" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1643 +msgid "Enable DHT" +msgstr "Aktivera DHT" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1623 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1647 +msgid "If checked, use DHT" +msgstr "om vald, använd DHT" + +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1663 msgid "Inbound Settings" msgstr "Inkommande inställningar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1629 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1669 msgid "Outbound Settings" msgstr "UtgÃ¥ende inställningar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1637 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1677 msgid "I2CP host" msgstr "I2CP-värd" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1642 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1682 msgid "I2CP port" msgstr "I2CP-port" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1657 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1697 msgid "I2CP options" msgstr "I2CP-inställningar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1662 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1702 msgid "Save configuration" msgstr "Spara inställningar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1676 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1716 msgid "Trackers" msgstr "Trackers" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1681 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1721 msgid "Name" msgstr "Namn" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1683 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723 msgid "Website URL" msgstr "Webbplats URL" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1685 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2314 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1725 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2356 msgid "Open" msgstr "Öppna" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1687 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1727 msgid "Private" msgstr "Privat" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1689 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1729 msgid "Announce URL" msgstr "Tillkännage URLen" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1723 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1763 msgid "Add" msgstr "Lägg till" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1760 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1800 #, java-format msgid "Invalid magnet URL {0}" msgstr "Ogiltig magnet URL {0}" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1794 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1834 #, java-format msgid "Invalid info hash in magnet URL {0}" msgstr "Ogiltig infohash i magnet URL {0}" #. * dummies for translation -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1918 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1958 #, java-format msgid "1 hop" msgid_plural "{0} hops" msgstr[0] "{0} hopp" msgstr[1] "{0} hopp" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1919 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1959 #, java-format msgid "1 tunnel" msgid_plural "{0} tunnels" msgstr[0] "{0} tunnel" msgstr[1] "{0} tunnlar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2098 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2140 msgid "Torrent file" msgstr "Torrent fil" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2133 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2175 msgid "Magnet link" msgstr "Magnet länk" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2140 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2182 msgid "Private torrent" msgstr "Privat torrent" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2149 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2213 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2215 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2191 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2255 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2257 msgid "Size" msgstr "Storlek" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2156 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2198 msgid "Completion" msgstr "Färdiställning" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2166 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2208 msgid "Remaining" msgstr "Kvar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2173 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2215 msgid "Files" msgstr "Filer" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2178 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2220 msgid "Pieces" msgstr "Delar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2182 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2224 msgid "Piece size" msgstr "Delstorlek" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2205 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2209 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2259 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2247 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2251 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2301 msgid "Directory" msgstr "Mapp" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2226 -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2228 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2268 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2270 msgid "Priority" msgstr "Prioritet" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2234 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2276 msgid "Up to higher level directory" msgstr "Up till högre mappnivÃ¥" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2264 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2306 msgid "Torrent not found?" msgstr "Torrent hittades ej?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2273 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2315 msgid "File not found in torrent?" msgstr "Fil hittades ej i torrent?" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2286 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2328 msgid "complete" msgstr "färdig" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2287 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2329 msgid "remaining" msgstr "kvar" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2341 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2383 msgid "High" msgstr "Hög" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2346 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2388 msgid "Normal" msgstr "Normal" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2351 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2393 msgid "Skip" msgstr "Hoppa över" -#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2360 +#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:2402 msgid "Save priorities" msgstr "Spara prioriteter" diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java index 04ca75e75aa069237266bfa4c2e0215cbe0e1ebd..142aaf49bbd10f7e92235ac7a1244f86dd6e56f6 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelConnectClient.java @@ -13,6 +13,7 @@ import java.util.Locale; import java.util.Properties; import java.util.StringTokenizer; +import net.i2p.I2PAppContext; import net.i2p.I2PException; import net.i2p.client.streaming.I2PSocket; import net.i2p.client.streaming.I2PSocketOptions; @@ -20,7 +21,6 @@ import net.i2p.data.Base64; import net.i2p.data.DataHelper; import net.i2p.data.Destination; import net.i2p.util.EventDispatcher; -import net.i2p.util.FileUtil; import net.i2p.util.Log; import net.i2p.util.PortMapper; @@ -58,6 +58,8 @@ import net.i2p.util.PortMapper; */ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements Runnable { + public static final String AUTH_REALM = "I2P SSL Proxy"; + private final static byte[] ERR_DESTINATION_UNKNOWN = ("HTTP/1.1 503 Service Unavailable\r\n"+ "Content-Type: text/html; charset=iso-8859-1\r\n"+ @@ -89,17 +91,6 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R "Your browser is misconfigured. Do not use the proxy to access the router console or other localhost destinations.<BR>") .getBytes(); - private final static byte[] ERR_AUTH = - ("HTTP/1.1 407 Proxy Authentication Required\r\n"+ - "Content-Type: text/html; charset=UTF-8\r\n"+ - "Cache-control: no-cache\r\n"+ - "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.5\r\n" + // try to get a UTF-8-encoded response back for the password - "Proxy-Authenticate: Basic realm=\"I2P SSL Proxy\"\r\n" + - "\r\n"+ - "<html><body><H1>I2P ERROR: PROXY AUTHENTICATION REQUIRED</H1>"+ - "This proxy is configured to require authentication.<BR>") - .getBytes(); - private final static byte[] SUCCESS_RESPONSE = ("HTTP/1.1 200 Connection Established\r\n"+ "Proxy-agent: I2P\r\n"+ @@ -165,6 +156,11 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R return super.close(forced); } + /** @since 0.9.4 */ + protected String getRealm() { + return AUTH_REALM; + } + protected void clientConnectionRun(Socket s) { InputStream in = null; OutputStream out = null; @@ -237,10 +233,10 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R _log.debug(getPrefix(requestId) + "REST :" + restofline + ":"); _log.debug(getPrefix(requestId) + "DEST :" + destination + ":"); } - } else if (line.toLowerCase(Locale.US).startsWith("proxy-authorization: basic ")) { + } else if (line.toLowerCase(Locale.US).startsWith("proxy-authorization: ")) { // strip Proxy-Authenticate from the response in HTTPResponseOutputStream // save for auth check below - authorization = line.substring(27); // "proxy-authorization: basic ".length() + authorization = line.substring(21); // "proxy-authorization: ".length() line = null; } else if (line.length() > 0) { // Additional lines - shouldn't be too many. Firefox sends: @@ -281,30 +277,26 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R } // Authorization - if (!authorize(s, requestId, authorization)) { + AuthResult result = authorize(s, requestId, method, authorization); + if (result != AuthResult.AUTH_GOOD) { if (_log.shouldLog(Log.WARN)) { if (authorization != null) _log.warn(getPrefix(requestId) + "Auth failed, sending 407 again"); else _log.warn(getPrefix(requestId) + "Auth required, sending 407"); } - writeErrorMessage(ERR_AUTH, out); + out.write(getAuthError(result == AuthResult.AUTH_STALE).getBytes()); s.close(); return; } Destination clientDest = _context.namingService().lookup(destination); if (clientDest == null) { - String str; byte[] header; if (usingWWWProxy) - str = FileUtil.readTextFile((new File(_errorDir, "dnfp-header.ht")).getAbsolutePath(), 100, true); + header = getErrorPage("dnfp-header.ht", ERR_DESTINATION_UNKNOWN); else - str = FileUtil.readTextFile((new File(_errorDir, "dnfh-header.ht")).getAbsolutePath(), 100, true); - if (str != null) - header = str.getBytes(); - else - header = ERR_DESTINATION_UNKNOWN; + header = getErrorPage("dnfh-header.ht", ERR_DESTINATION_UNKNOWN); writeErrorMessage(header, out, targetRequest, usingWWWProxy, destination); s.close(); return; @@ -341,12 +333,13 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R } private static class OnTimeout implements Runnable { - private Socket _socket; - private OutputStream _out; - private String _target; - private boolean _usingProxy; - private String _wwwProxy; - private long _requestId; + private final Socket _socket; + private final OutputStream _out; + private final String _target; + private final boolean _usingProxy; + private final String _wwwProxy; + private final long _requestId; + public OnTimeout(Socket s, OutputStream out, String target, boolean usingProxy, String wwwProxy, long id) { _socket = s; _out = out; @@ -355,6 +348,7 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R _wwwProxy = wwwProxy; _requestId = id; } + public void run() { //if (_log.shouldLog(Log.DEBUG)) // _log.debug("Timeout occured requesting " + _target); @@ -391,17 +385,12 @@ public class I2PTunnelConnectClient extends I2PTunnelHTTPClientBase implements R boolean usingWWWProxy, String wwwProxy, long requestId) { if (out == null) return; + byte[] header; + if (usingWWWProxy) + header = getErrorPage(I2PAppContext.getGlobalContext(), "dnfp-header.ht", ERR_DESTINATION_UNKNOWN); + else + header = getErrorPage(I2PAppContext.getGlobalContext(), "dnf-header.ht", ERR_DESTINATION_UNKNOWN); try { - String str; - byte[] header; - if (usingWWWProxy) - str = FileUtil.readTextFile((new File(_errorDir, "dnfp-header.ht")).getAbsolutePath(), 100, true); - else - str = FileUtil.readTextFile((new File(_errorDir, "dnf-header.ht")).getAbsolutePath(), 100, true); - if (str != null) - header = str.getBytes(); - else - header = ERR_DESTINATION_UNKNOWN; writeErrorMessage(header, out, targetRequest, usingWWWProxy, wwwProxy); } catch (IOException ioe) {} } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java index bc7a474774d1013047a57a236f8b540f2b0e75ea..518e7dcdcbd957a9d815e4c67e6e17d9619259b3 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java @@ -3,9 +3,7 @@ */ package net.i2p.i2ptunnel; -import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -73,10 +71,14 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn * via address helper links */ private final ConcurrentHashMap<String, String> addressHelpers = new ConcurrentHashMap(8); + /** * Used to protect actions via http://proxy.i2p/ */ private final String _proxyNonce; + + public static final String AUTH_REALM = "I2P HTTP Proxy"; + /** * These are backups if the xxx.ht error page is missing. */ @@ -167,15 +169,6 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn "\r\n" + "<html><body><H1>I2P ERROR: REQUEST DENIED</H1>" + "Your browser is misconfigured. Do not use the proxy to access the router console or other localhost destinations.<BR>").getBytes(); - private final static byte[] ERR_AUTH = - ("HTTP/1.1 407 Proxy Authentication Required\r\n" + - "Content-Type: text/html; charset=UTF-8\r\n" + - "Cache-control: no-cache\r\n" + - "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.5\r\n" + // try to get a UTF-8-encoded response back for the password - "Proxy-Authenticate: Basic realm=\"I2P HTTP Proxy\"\r\n" + - "\r\n" + - "<html><body><H1>I2P ERROR: PROXY AUTHENTICATION REQUIRED</H1>" + - "This proxy is configured to require authentication.<BR>").getBytes(); /** * This constructor always starts the tunnel (ignoring the i2cp.delayOpen option). @@ -300,6 +293,12 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn } return rv; } + + /** @since 0.9.4 */ + protected String getRealm() { + return AUTH_REALM; + } + private static final String HELPER_PARAM = "i2paddresshelper"; public static final String LOCAL_SERVER = "proxy.i2p"; private static final boolean DEFAULT_GZIP = true; @@ -769,10 +768,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn // hop-by-hop header, and we definitely want to block Windows NTLM after a far-end 407. // Response to far-end shouldn't happen, as we // strip Proxy-Authenticate from the response in HTTPResponseOutputStream - if(lowercaseLine.startsWith("proxy-authorization: basic ")) // save for auth check below - { - authorization = line.substring(27); // "proxy-authorization: basic ".length() - } + authorization = line.substring(21); // "proxy-authorization: ".length() line = null; continue; } else if(lowercaseLine.startsWith("icy")) { @@ -850,7 +846,8 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn } // Authorization - if(!authorize(s, requestId, authorization)) { + AuthResult result = authorize(s, requestId, method, authorization); + if (result != AuthResult.AUTH_GOOD) { if(_log.shouldLog(Log.WARN)) { if(authorization != null) { _log.warn(getPrefix(requestId) + "Auth failed, sending 407 again"); @@ -858,7 +855,7 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn _log.warn(getPrefix(requestId) + "Auth required, sending 407"); } } - out.write(getErrorPage("auth", ERR_AUTH)); + out.write(getAuthError(result == AuthResult.AUTH_STALE).getBytes()); writeFooter(out); s.close(); return; @@ -1095,61 +1092,6 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn return Base32.encode(_dest.calculateHash().getData()) + ".b32.i2p"; } - /** - * foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, - * or the backup byte array on fail. - * - * .ht files must be UTF-8 encoded and use \r\n terminators so the - * HTTP headers are conformant. - * We can't use FileUtil.readFile() because it strips \r - * - * @return non-null - */ - private byte[] getErrorPage(String base, byte[] backup) { - return getErrorPage(_context, base, backup); - } - - private static byte[] getErrorPage(I2PAppContext ctx, String base, byte[] backup) { - File errorDir = new File(ctx.getBaseDir(), "docs"); - String lang = ctx.getProperty("routerconsole.lang", Locale.getDefault().getLanguage()); - if(lang != null && lang.length() > 0 && !lang.equals("en")) { - File file = new File(errorDir, base + "-header_" + lang + ".ht"); - try { - return readFile(file); - } catch(IOException ioe) { - // try the english version now - } - } - File file = new File(errorDir, base + "-header.ht"); - try { - return readFile(file); - } catch(IOException ioe) { - return backup; - } - } - - private static byte[] readFile(File file) throws IOException { - FileInputStream fis = null; - byte[] buf = new byte[512]; - ByteArrayOutputStream baos = new ByteArrayOutputStream(2048); - try { - int len = 0; - fis = new FileInputStream(file); - while((len = fis.read(buf)) > 0) { - baos.write(buf, 0, len); - } - return baos.toByteArray(); - } finally { - try { - if(fis != null) { - fis.close(); - } - } catch(IOException foo) { - } - } - // we won't ever get here - } - /** * Public only for LocalHTTPServer, not for general use */ @@ -1163,12 +1105,12 @@ public class I2PTunnelHTTPClient extends I2PTunnelHTTPClientBase implements Runn private static class OnTimeout implements Runnable { - private Socket _socket; - private OutputStream _out; - private String _target; - private boolean _usingProxy; - private String _wwwProxy; - private long _requestId; + private final Socket _socket; + private final OutputStream _out; + private final String _target; + private final boolean _usingProxy; + private final String _wwwProxy; + private final long _requestId; public OnTimeout(Socket s, OutputStream out, String target, boolean usingProxy, String wwwProxy, long id) { _socket = s; diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java index f14de68b4b1550d7ed26ae0ef8e384255a13e4d3..1a88969141e7bbccf7d9402948d3bfcb28bbbf13 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClientBase.java @@ -3,19 +3,26 @@ */ package net.i2p.i2ptunnel; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.util.ArrayList; import java.io.File; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import net.i2p.I2PAppContext; import net.i2p.client.streaming.I2PSocketManager; import net.i2p.data.Base64; +import net.i2p.data.DataHelper; import net.i2p.util.EventDispatcher; import net.i2p.util.InternalSocket; import net.i2p.util.Log; +import net.i2p.util.PasswordManager; /** * Common things for HTTPClient and ConnectClient @@ -25,6 +32,25 @@ import net.i2p.util.Log; */ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implements Runnable { + private static final int PROXYNONCE_BYTES = 8; + private static final int MD5_BYTES = 16; + /** 24 */ + private static final int NONCE_BYTES = DataHelper.DATE_LENGTH + MD5_BYTES; + private static final long MAX_NONCE_AGE = 30*24*60*60*1000L; + + private static final String ERR_AUTH1 = + "HTTP/1.1 407 Proxy Authentication Required\r\n" + + "Content-Type: text/html; charset=UTF-8\r\n" + + "Cache-control: no-cache\r\n" + + "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.5\r\n" + // try to get a UTF-8-encoded response back for the password + "Proxy-Authenticate: "; + // put the auth type and realm in between + private static final String ERR_AUTH2 = + "\r\n" + + "\r\n" + + "<html><body><H1>I2P ERROR: PROXY AUTHENTICATION REQUIRED</H1>" + + "This proxy is configured to require authentication."; + protected final List<String> _proxyList; protected final static byte[] ERR_NO_OUTPROXY = @@ -40,7 +66,7 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem /** used to assign unique IDs to the threads / clients. no logic or functionality */ protected static volatile long __clientId = 0; - protected static final File _errorDir = new File(I2PAppContext.getGlobalContext().getBaseDir(), "docs"); + private final byte[] _proxyNonce; protected String getPrefix(long requestId) { return "Client[" + _clientId + "/" + requestId + "]: "; } @@ -63,6 +89,8 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem I2PTunnel tunnel) throws IllegalArgumentException { super(localPort, ownDest, l, notifyThis, handlerName, tunnel); _proxyList = new ArrayList(4); + _proxyNonce = new byte[PROXYNONCE_BYTES]; + _context.random().nextBytes(_proxyNonce); } /** @@ -76,8 +104,12 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem throws IllegalArgumentException { super(localPort, l, sktMgr, tunnel, notifyThis, clientId); _proxyList = new ArrayList(4); + _proxyNonce = new byte[PROXYNONCE_BYTES]; + _context.random().nextBytes(_proxyNonce); } + //////// Authorization stuff + /** all auth @since 0.8.2 */ public static final String PROP_AUTH = "proxyAuth"; public static final String PROP_USER = "proxyUsername"; @@ -90,68 +122,349 @@ public abstract class I2PTunnelHTTPClientBase extends I2PTunnelClientBase implem /** passwords for specific outproxies may be added with outproxyUsername.fooproxy.i2p=user and outproxyPassword.fooproxy.i2p=pw */ public static final String PROP_OUTPROXY_USER_PREFIX = PROP_OUTPROXY_USER + '.'; public static final String PROP_OUTPROXY_PW_PREFIX = PROP_OUTPROXY_PW + '.'; + /** new style MD5 auth */ + public static final String PROP_PROXY_DIGEST_PREFIX = "proxy.auth."; + public static final String PROP_PROXY_DIGEST_SUFFIX = ".md5"; + public static final String BASIC_AUTH = "basic"; + public static final String DIGEST_AUTH = "digest"; + + protected abstract String getRealm(); + + protected enum AuthResult {AUTH_BAD_REQ, AUTH_BAD, AUTH_STALE, AUTH_GOOD} /** - * @param authorization may be null + * @since 0.9.4 + */ + protected boolean isDigestAuthRequired() { + String authRequired = getTunnel().getClientOptions().getProperty(PROP_AUTH); + if (authRequired == null) + return false; + return authRequired.toLowerCase(Locale.US).equals("digest"); + } + + /** + * Authorization + * Ref: RFC 2617 + * If the socket is an InternalSocket, no auth required. + * + * @param method GET, POST, etc. + * @param authorization may be null, the full auth line e.g. "Basic lskjlksjf" * @return success */ - protected boolean authorize(Socket s, long requestId, String authorization) { - // Authorization - // Ref: RFC 2617 - // If the socket is an InternalSocket, no auth required. + protected AuthResult authorize(Socket s, long requestId, String method, String authorization) { String authRequired = getTunnel().getClientOptions().getProperty(PROP_AUTH); - if (Boolean.parseBoolean(authRequired) || - (authRequired != null && "basic".equals(authRequired.toLowerCase(Locale.US)))) { - if (s instanceof InternalSocket) { - if (_log.shouldLog(Log.INFO)) - _log.info(getPrefix(requestId) + "Internal access, no auth required"); - return true; - } else if (authorization != null) { - // hmm safeDecode(foo, true) to use standard alphabet is private in Base64 - byte[] decoded = Base64.decode(authorization.replace("/", "~").replace("+", "=")); - if (decoded != null) { - // We send Accept-Charset: UTF-8 in the 407 so hopefully it comes back that way inside the B64 ? - try { - String dec = new String(decoded, "UTF-8"); - String[] parts = dec.split(":"); - String user = parts[0]; - String pw = parts[1]; - // first try pw for that user - String configPW = getTunnel().getClientOptions().getProperty(PROP_PW_PREFIX + user); - if (configPW == null) { - // if not, look at default user and pw - String configUser = getTunnel().getClientOptions().getProperty(PROP_USER); - if (user.equals(configUser)) - configPW = getTunnel().getClientOptions().getProperty(PROP_PW); - } - if (configPW != null) { - if (pw.equals(configPW)) { - if (_log.shouldLog(Log.INFO)) - _log.info(getPrefix(requestId) + "Good auth - user: " + user + " pw: " + pw); - return true; - } else { - if (_log.shouldLog(Log.WARN)) - _log.warn(getPrefix(requestId) + "Bad auth, pw mismatch - user: " + user + " pw: " + pw + " expected: " + configPW); - } - } else { - if (_log.shouldLog(Log.WARN)) - _log.warn(getPrefix(requestId) + "Bad auth, no stored pw for user: " + user + " pw: " + pw); + if (authRequired == null) + return AuthResult.AUTH_GOOD; + authRequired = authRequired.toLowerCase(Locale.US); + if (authRequired.equals("false")) + return AuthResult.AUTH_GOOD; + if (s instanceof InternalSocket) { + if (_log.shouldLog(Log.INFO)) + _log.info(getPrefix(requestId) + "Internal access, no auth required"); + return AuthResult.AUTH_GOOD; + } + if (authorization == null) + return AuthResult.AUTH_BAD; + if (_log.shouldLog(Log.INFO)) + _log.info(getPrefix(requestId) + "Auth: " + authorization); + String authLC = authorization.toLowerCase(Locale.US); + if (authRequired.equals("true") || authRequired.equals(BASIC_AUTH)) { + if (!authLC.startsWith("basic ")) + return AuthResult.AUTH_BAD; + authorization = authorization.substring(6); + + // hmm safeDecode(foo, true) to use standard alphabet is private in Base64 + byte[] decoded = Base64.decode(authorization.replace("/", "~").replace("+", "=")); + if (decoded != null) { + // We send Accept-Charset: UTF-8 in the 407 so hopefully it comes back that way inside the B64 ? + try { + String dec = new String(decoded, "UTF-8"); + String[] parts = dec.split(":"); + String user = parts[0]; + String pw = parts[1]; + // first try pw for that user + String configPW = getTunnel().getClientOptions().getProperty(PROP_PW_PREFIX + user); + if (configPW == null) { + // if not, look at default user and pw + String configUser = getTunnel().getClientOptions().getProperty(PROP_USER); + if (user.equals(configUser)) + configPW = getTunnel().getClientOptions().getProperty(PROP_PW); + } + if (configPW != null) { + if (pw.equals(configPW)) { + if (_log.shouldLog(Log.INFO)) + _log.info(getPrefix(requestId) + "Good auth - user: " + user + " pw: " + pw); + return AuthResult.AUTH_GOOD; } - } catch (UnsupportedEncodingException uee) { - _log.error(getPrefix(requestId) + "No UTF-8 support? B64: " + authorization, uee); - } catch (ArrayIndexOutOfBoundsException aioobe) { - // no ':' in response - if (_log.shouldLog(Log.WARN)) - _log.warn(getPrefix(requestId) + "Bad auth B64: " + authorization, aioobe); } - } else { + _log.logAlways(Log.WARN, "PROXY AUTH FAILURE: user " + user); + } catch (UnsupportedEncodingException uee) { + _log.error(getPrefix(requestId) + "No UTF-8 support? B64: " + authorization, uee); + } catch (ArrayIndexOutOfBoundsException aioobe) { + // no ':' in response if (_log.shouldLog(Log.WARN)) - _log.warn(getPrefix(requestId) + "Bad auth B64: " + authorization); + _log.warn(getPrefix(requestId) + "Bad auth B64: " + authorization, aioobe); + return AuthResult.AUTH_BAD_REQ; } + return AuthResult.AUTH_BAD; + } else { + if (_log.shouldLog(Log.WARN)) + _log.warn(getPrefix(requestId) + "Bad auth B64: " + authorization); + return AuthResult.AUTH_BAD_REQ; } - return false; + } else if (authRequired.equals(DIGEST_AUTH)) { + if (!authLC.startsWith("digest ")) + return AuthResult.AUTH_BAD; + authorization = authorization.substring(7); + Map<String, String> args = parseArgs(authorization); + AuthResult rv = validateDigest(method, args); + return rv; } else { - return true; + _log.error("Unknown proxy authorization type configured: " + authRequired); + return AuthResult.AUTH_BAD_REQ; + } + } + + /** + * Verify all of it. + * Ref: RFC 2617 + * @since 0.9.4 + */ + private AuthResult validateDigest(String method, Map<String, String> args) { + String user = args.get("username"); + String realm = args.get("realm"); + String nonce = args.get("nonce"); + String qop = args.get("qop"); + String uri = args.get("uri"); + String cnonce = args.get("cnonce"); + String nc = args.get("nc"); + String response = args.get("response"); + if (user == null || realm == null || nonce == null || qop == null || + uri == null || cnonce == null || nc == null || response == null) { + if (_log.shouldLog(Log.INFO)) + _log.info("Bad digest request: " + DataHelper.toString(args)); + return AuthResult.AUTH_BAD_REQ; + } + // nonce check + AuthResult check = verifyNonce(nonce); + if (check != AuthResult.AUTH_GOOD) { + if (_log.shouldLog(Log.INFO)) + _log.info("Bad digest nonce: " + check + ' ' + DataHelper.toString(args)); + return check; + } + // get H(A1) == stored password + String ha1 = getTunnel().getClientOptions().getProperty(PROP_PROXY_DIGEST_PREFIX + user + + PROP_PROXY_DIGEST_SUFFIX); + if (ha1 == null) { + _log.logAlways(Log.WARN, "PROXY AUTH FAILURE: user " + user); + return AuthResult.AUTH_BAD; + } + // get H(A2) + String a2 = method + ':' + uri; + String ha2 = PasswordManager.md5Hex(a2); + // response check + String kd = ha1 + ':' + nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2; + String hkd = PasswordManager.md5Hex(kd); + if (!response.equals(hkd)) { + _log.logAlways(Log.WARN, "PROXY AUTH FAILURE: user " + user); + if (_log.shouldLog(Log.INFO)) + _log.info("Bad digest auth: " + DataHelper.toString(args)); + return AuthResult.AUTH_BAD; + } + if (_log.shouldLog(Log.INFO)) + _log.info("Good digest auth - user: " + user); + return AuthResult.AUTH_GOOD; + } + + /** + * The Base 64 of 24 bytes: (now, md5 of (now, proxy nonce)) + * @since 0.9.4 + */ + private String getNonce() { + byte[] b = new byte[DataHelper.DATE_LENGTH + PROXYNONCE_BYTES]; + byte[] n = new byte[NONCE_BYTES]; + long now = _context.clock().now(); + DataHelper.toLong(b, 0, DataHelper.DATE_LENGTH, now); + System.arraycopy(_proxyNonce, 0, b, DataHelper.DATE_LENGTH, PROXYNONCE_BYTES); + System.arraycopy(b, 0, n, 0, DataHelper.DATE_LENGTH); + byte[] md5 = PasswordManager.md5Sum(b); + System.arraycopy(md5, 0, n, DataHelper.DATE_LENGTH, MD5_BYTES); + return Base64.encode(n); + } + + /** + * Verify the Base 64 of 24 bytes: (now, md5 of (now, proxy nonce)) + * @since 0.9.4 + */ + private AuthResult verifyNonce(String b64) { + byte[] n = Base64.decode(b64); + if (n == null || n.length != NONCE_BYTES) + return AuthResult.AUTH_BAD; + long now = _context.clock().now(); + long stamp = DataHelper.fromLong(n, 0, DataHelper.DATE_LENGTH); + if (now - stamp > MAX_NONCE_AGE) + return AuthResult.AUTH_STALE; + byte[] b = new byte[DataHelper.DATE_LENGTH + PROXYNONCE_BYTES]; + System.arraycopy(n, 0, b, 0, DataHelper.DATE_LENGTH); + System.arraycopy(_proxyNonce, 0, b, DataHelper.DATE_LENGTH, PROXYNONCE_BYTES); + byte[] md5 = PasswordManager.md5Sum(b); + if (!DataHelper.eq(md5, 0, n, DataHelper.DATE_LENGTH, MD5_BYTES)) + return AuthResult.AUTH_BAD; + return AuthResult.AUTH_GOOD; + } + + /** + * What to send if digest auth fails + * @since 0.9.4 + */ + protected String getAuthError(boolean isStale) { + boolean isDigest = isDigestAuthRequired(); + return + ERR_AUTH1 + + (isDigest ? "Digest" : "Basic") + + " realm=\"" + getRealm() + '"' + + (isDigest ? ", nonce=\"" + getNonce() + "\"," + + " algorithm=MD5," + + " qop=\"auth\"" + + (isStale ? ", stale=true" : "") + : "") + + ERR_AUTH2; + } + + /** + * Modified from LoadClientAppsJob. + * All keys are mapped to lower case. + * Ref: RFC 2617 + * + * @param args non-null + * @since 0.9.4 + */ + private static Map<String, String> parseArgs(String args) { + Map<String, String> rv = new HashMap(8); + char data[] = args.toCharArray(); + StringBuilder buf = new StringBuilder(32); + boolean isQuoted = false; + String key = null; + for (int i = 0; i < data.length; i++) { + switch (data[i]) { + case '\"': + if (isQuoted) { + // keys never quoted + if (key != null) { + rv.put(key, buf.toString().trim()); + key = null; + } + buf.setLength(0); + } + isQuoted = !isQuoted; + break; + + case ' ': + case '\r': + case '\n': + case '\t': + case ',': + // whitespace - if we're in a quoted section, keep this as part of the quote, + // otherwise use it as a delim + if (isQuoted) { + buf.append(data[i]); + } else { + if (key != null) { + rv.put(key, buf.toString().trim()); + key = null; + } + buf.setLength(0); + } + break; + + case '=': + if (isQuoted) { + buf.append(data[i]); + } else { + key = buf.toString().trim().toLowerCase(Locale.US); + buf.setLength(0); + } + break; + + default: + buf.append(data[i]); + break; + } + } + if (key != null) + rv.put(key, buf.toString().trim()); + return rv; + } + + //////// Error page stuff + + /** + * foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, + * or the backup byte array on fail. + * + * .ht files must be UTF-8 encoded and use \r\n terminators so the + * HTTP headers are conformant. + * We can't use FileUtil.readFile() because it strips \r + * + * @return non-null + * @since 0.9.4 moved from I2PTunnelHTTPClient + */ + protected byte[] getErrorPage(String base, byte[] backup) { + return getErrorPage(_context, base, backup); + } + + /** + * foo => errordir/foo-header_xx.ht for lang xx, or errordir/foo-header.ht, + * or the backup byte array on fail. + * + * .ht files must be UTF-8 encoded and use \r\n terminators so the + * HTTP headers are conformant. + * We can't use FileUtil.readFile() because it strips \r + * + * @return non-null + * @since 0.9.4 moved from I2PTunnelHTTPClient + */ + protected static byte[] getErrorPage(I2PAppContext ctx, String base, byte[] backup) { + File errorDir = new File(ctx.getBaseDir(), "docs"); + String lang = ctx.getProperty("routerconsole.lang", Locale.getDefault().getLanguage()); + if(lang != null && lang.length() > 0 && !lang.equals("en")) { + File file = new File(errorDir, base + "-header_" + lang + ".ht"); + try { + return readFile(file); + } catch(IOException ioe) { + // try the english version now + } + } + File file = new File(errorDir, base + "-header.ht"); + try { + return readFile(file); + } catch(IOException ioe) { + return backup; + } + } + + /** + * @since 0.9.4 moved from I2PTunnelHTTPClient + */ + private static byte[] readFile(File file) throws IOException { + FileInputStream fis = null; + byte[] buf = new byte[2048]; + ByteArrayOutputStream baos = new ByteArrayOutputStream(2048); + try { + int len = 0; + fis = new FileInputStream(file); + while((len = fis.read(buf)) > 0) { + baos.write(buf, 0, len); + } + return baos.toByteArray(); + } finally { + try { + if(fis != null) { + fis.close(); + } + } catch(IOException foo) { + } } + // we won't ever get here } } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java index 600464f87302e0ef7acc1ba38a8276b3017c43c4..5592b5b878334b52b7bb0ffcec18db340573363f 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/TunnelControllerGroup.java @@ -12,6 +12,8 @@ import java.util.Properties; import java.util.Set; import net.i2p.I2PAppContext; +import net.i2p.app.*; +import static net.i2p.app.ClientAppState.*; import net.i2p.client.I2PSession; import net.i2p.client.I2PSessionException; import net.i2p.data.DataHelper; @@ -23,16 +25,21 @@ import net.i2p.util.OrderedProperties; * Coordinate a set of tunnels within the JVM, loading and storing their config * to disk, and building new ones as requested. * - * Warning - this is a singleton. Todo: fix + * This is the entry point from clients.config. */ -public class TunnelControllerGroup { - private Log _log; - private static TunnelControllerGroup _instance; +public class TunnelControllerGroup implements ClientApp { + private final Log _log; + private volatile ClientAppState _state; + private final I2PAppContext _context; + private final ClientAppManager _mgr; + private static volatile TunnelControllerGroup _instance; static final String DEFAULT_CONFIG_FILE = "i2ptunnel.config"; private final List<TunnelController> _controllers; - private String _configFile = DEFAULT_CONFIG_FILE; + private final String _configFile; + private static final String REGISTERED_NAME = "i2ptunnel"; + /** * Map of I2PSession to a Set of TunnelController objects * using the session (to prevent closing the session until @@ -41,48 +48,143 @@ public class TunnelControllerGroup { */ private final Map<I2PSession, Set<TunnelController>> _sessions; + /** + * In I2PAppContext will instantiate if necessary and always return non-null. + * As of 0.9.4, when in RouterContext, will return null + * if the TCG has not yet been started by the router. + * + * @throws IllegalArgumentException if unable to load from i2ptunnel.config + */ public static TunnelControllerGroup getInstance() { synchronized (TunnelControllerGroup.class) { - if (_instance == null) - _instance = new TunnelControllerGroup(DEFAULT_CONFIG_FILE); + if (_instance == null) { + I2PAppContext ctx = I2PAppContext.getGlobalContext(); + if (!ctx.isRouterContext()) { + _instance = new TunnelControllerGroup(ctx, null, null); + _instance.startup(); + } // else wait for the router to start it + } return _instance; } } - private TunnelControllerGroup(String configFile) { - _log = I2PAppContext.getGlobalContext().logManager().getLog(TunnelControllerGroup.class); - _controllers = Collections.synchronizedList(new ArrayList()); - _configFile = configFile; + /** + * Instantiation only. Caller must call startup(). + * Config file problems will not throw exception until startup(). + * + * @param mgr may be null + * @param args one arg, the config file, if not absolute will be relative to the context's config dir, + * if empty or null, the default is i2ptunnel.config + * @since 0.9.4 + */ + public TunnelControllerGroup(I2PAppContext context, ClientAppManager mgr, String[] args) { + _state = UNINITIALIZED; + _context = context; + _mgr = mgr; + _log = _context.logManager().getLog(TunnelControllerGroup.class); + _controllers = new ArrayList(); + if (args == null || args.length <= 0) + _configFile = DEFAULT_CONFIG_FILE; + else if (args.length == 1) + _configFile = args[0]; + else + throw new IllegalArgumentException("Usage: TunnelControllerGroup [filename]"); _sessions = new HashMap(4); - loadControllers(_configFile); - I2PAppContext.getGlobalContext().addShutdownTask(new Shutdown()); + synchronized (TunnelControllerGroup.class) { + if (_instance == null) + _instance = this; + } + if (_instance != this) { + _log.logAlways(Log.WARN, "New TunnelControllerGroup, now you have two"); + if (_log.shouldLog(Log.WARN)) + _log.warn("I did it", new Exception()); + } + _state = INITIALIZED; } + /** + * @param args one arg, the config file, if not absolute will be relative to the context's config dir, + * if no args, the default is i2ptunnel.config + * @throws IllegalArgumentException if unable to load from config from file + */ public static void main(String args[]) { synchronized (TunnelControllerGroup.class) { if (_instance != null) return; // already loaded through the web - - if ( (args == null) || (args.length <= 0) ) { - _instance = new TunnelControllerGroup(DEFAULT_CONFIG_FILE); - } else if (args.length == 1) { - _instance = new TunnelControllerGroup(args[0]); - } else { - System.err.println("Usage: TunnelControllerGroup [filename]"); - return; - } + _instance = new TunnelControllerGroup(I2PAppContext.getGlobalContext(), null, args); + _instance.startup(); } } + /** + * ClientApp interface + * @throws IllegalArgumentException if unable to load config from file + * @since 0.9.4 + */ + public void startup() { + loadControllers(_configFile); + if (_mgr != null) + _mgr.register(this); + _context.addShutdownTask(new Shutdown()); + } + + /** + * ClientApp interface + * @since 0.9.4 + */ + public ClientAppState getState() { + return _state; + } + + /** + * ClientApp interface + * @since 0.9.4 + */ + public String getName() { + return REGISTERED_NAME; + } + + /** + * ClientApp interface + * @since 0.9.4 + */ + public String getDisplayName() { + return REGISTERED_NAME; + } + + /** + * @since 0.9.4 + */ + private void changeState(ClientAppState state) { + changeState(state, null); + } + + /** + * @since 0.9.4 + */ + private synchronized void changeState(ClientAppState state, Exception e) { + _state = state; + if (_mgr != null) + _mgr.notify(this, state, null, e); + } + /** * Warning - destroys the singleton! * @since 0.8.8 */ - private static class Shutdown implements Runnable { + private class Shutdown implements Runnable { public void run() { shutdown(); } } + /** + * ClientApp interface + * @since 0.9.4 + */ + public void shutdown(String[] args) { + shutdown(); + } + /** * Warning - destroys the singleton! * Caller must root a new context before calling instance() or main() again. @@ -91,28 +193,31 @@ public class TunnelControllerGroup { * * @since 0.8.8 */ - public static void shutdown() { + public void shutdown() { + changeState(STOPPING); + if (_mgr != null) + _mgr.unregister(this); + unloadControllers(); synchronized (TunnelControllerGroup.class) { - if (_instance == null) return; - _instance.unloadControllers(); - _instance._log = null; - _instance = null; + if (_instance == this) + _instance = null; } +/// fixme static I2PTunnelClientBase.killClientExecutor(); + changeState(STOPPED); } /** * Load up all of the tunnels configured in the given file (but do not start * them) * + * DEPRECATED for use outside this class. Use startup() or getInstance(). + * + * @throws IllegalArgumentException if unable to load from file */ - public void loadControllers(String configFile) { + public synchronized void loadControllers(String configFile) { + changeState(STARTING); Properties cfg = loadConfig(configFile); - if (cfg == null) { - if (_log.shouldLog(Log.WARN)) - _log.warn("Unable to load the config from " + configFile); - return; - } int i = 0; while (true) { String type = cfg.getProperty("tunnel." + i + ".type"); @@ -127,20 +232,28 @@ public class TunnelControllerGroup { if (_log.shouldLog(Log.INFO)) _log.info(i + " controllers loaded from " + configFile); + changeState(RUNNING); } private class StartControllers implements Runnable { public void run() { - for (int i = 0; i < _controllers.size(); i++) { - TunnelController controller = _controllers.get(i); - if (controller.getStartOnLoad()) - controller.startTunnel(); + synchronized(TunnelControllerGroup.this) { + for (int i = 0; i < _controllers.size(); i++) { + TunnelController controller = _controllers.get(i); + if (controller.getStartOnLoad()) + controller.startTunnel(); + } } } } - - public void reloadControllers() { + /** + * Stop all tunnels, reload config, and restart those configured to do so. + * WARNING - Does NOT simply reload the configuration!!! This is probably not what you want. + * + * @throws IllegalArgumentException if unable to reload config file + */ + public synchronized void reloadControllers() { unloadControllers(); loadControllers(_configFile); } @@ -150,7 +263,7 @@ public class TunnelControllerGroup { * file or do other silly things) * */ - public void unloadControllers() { + public synchronized void unloadControllers() { stopAllControllers(); _controllers.clear(); if (_log.shouldLog(Log.INFO)) @@ -162,14 +275,14 @@ public class TunnelControllerGroup { * a config file or start it or anything) * */ - public void addController(TunnelController controller) { _controllers.add(controller); } + public synchronized void addController(TunnelController controller) { _controllers.add(controller); } /** * Stop and remove the given tunnel * * @return list of messages from the controller as it is stopped */ - public List<String> removeController(TunnelController controller) { + public synchronized List<String> removeController(TunnelController controller) { if (controller == null) return new ArrayList(); controller.stopTunnel(); List<String> msgs = controller.clearMessages(); @@ -183,7 +296,7 @@ public class TunnelControllerGroup { * * @return list of messages the tunnels generate when stopped */ - public List<String> stopAllControllers() { + public synchronized List<String> stopAllControllers() { List<String> msgs = new ArrayList(); for (int i = 0; i < _controllers.size(); i++) { TunnelController controller = _controllers.get(i); @@ -200,7 +313,7 @@ public class TunnelControllerGroup { * * @return list of messages the tunnels generate when started */ - public List<String> startAllControllers() { + public synchronized List<String> startAllControllers() { List<String> msgs = new ArrayList(); for (int i = 0; i < _controllers.size(); i++) { TunnelController controller = _controllers.get(i); @@ -218,7 +331,7 @@ public class TunnelControllerGroup { * * @return list of messages the tunnels generate when restarted */ - public List<String> restartAllControllers() { + public synchronized List<String> restartAllControllers() { List<String> msgs = new ArrayList(); for (int i = 0; i < _controllers.size(); i++) { TunnelController controller = _controllers.get(i); @@ -235,7 +348,7 @@ public class TunnelControllerGroup { * * @return list of messages the tunnels have generated */ - public List<String> clearAllMessages() { + public synchronized List<String> clearAllMessages() { List<String> msgs = new ArrayList(); for (int i = 0; i < _controllers.size(); i++) { TunnelController controller = _controllers.get(i); @@ -257,8 +370,7 @@ public class TunnelControllerGroup { * Save the configuration of all known tunnels to the given file * */ - public void saveConfig(String configFile) throws IOException { - _configFile = configFile; + public synchronized void saveConfig(String configFile) throws IOException { File cfgFile = new File(configFile); if (!cfgFile.isAbsolute()) cfgFile = new File(I2PAppContext.getGlobalContext().getConfigDir(), configFile); @@ -279,16 +391,17 @@ public class TunnelControllerGroup { /** * Load up the config data from the file * - * @return properties loaded or null if there was an error + * @return properties loaded + * @throws IllegalArgumentException if unable to load from file */ - private Properties loadConfig(String configFile) { + private synchronized Properties loadConfig(String configFile) { File cfgFile = new File(configFile); if (!cfgFile.isAbsolute()) cfgFile = new File(I2PAppContext.getGlobalContext().getConfigDir(), configFile); if (!cfgFile.exists()) { if (_log.shouldLog(Log.ERROR)) _log.error("Unable to load the controllers from " + cfgFile.getAbsolutePath()); - return null; + throw new IllegalArgumentException("Unable to load the controllers from " + cfgFile.getAbsolutePath()); } Properties props = new Properties(); @@ -298,7 +411,7 @@ public class TunnelControllerGroup { } catch (IOException ioe) { if (_log.shouldLog(Log.ERROR)) _log.error("Error reading the controllers from " + cfgFile.getAbsolutePath(), ioe); - return null; + throw new IllegalArgumentException("Error reading the controllers from " + cfgFile.getAbsolutePath(), ioe); } } @@ -307,7 +420,9 @@ public class TunnelControllerGroup { * * @return list of TunnelController objects */ - public List<TunnelController> getControllers() { return _controllers; } + public synchronized List<TunnelController> getControllers() { + return new ArrayList(_controllers); + } /** diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java index a0c38616e80b536f8bce34b6e4f4bc480ad5de3b..1413360703a71e49666a7a336f7982f96a7d3314 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/EditBean.java @@ -29,8 +29,8 @@ import net.i2p.util.Addresses; /** * Ugly little accessor for the edit page * - * Warning - This class is not part of the i2ptunnel API, and at some point - * it will be moved from the jar to the war. + * Warning - This class is not part of the i2ptunnel API, + * it has been moved from the jar to the war. * Usage by classes outside of i2ptunnel.war is deprecated. */ public class EditBean extends IndexBean { @@ -38,6 +38,8 @@ public class EditBean extends IndexBean { public static boolean staticIsClient(int tunnel) { TunnelControllerGroup group = TunnelControllerGroup.getInstance(); + if (group == null) + return false; List controllers = group.getControllers(); if (controllers.size() > tunnel) { TunnelController cur = (TunnelController)controllers.get(tunnel); @@ -55,6 +57,7 @@ public class EditBean extends IndexBean { else return "127.0.0.1"; } + public String getTargetPort(int tunnel) { TunnelController tun = getController(tunnel); if (tun != null && tun.getTargetPort() != null) @@ -62,6 +65,7 @@ public class EditBean extends IndexBean { else return ""; } + public String getSpoofedHost(int tunnel) { TunnelController tun = getController(tunnel); if (tun != null && tun.getSpoofedHost() != null) @@ -69,12 +73,13 @@ public class EditBean extends IndexBean { else return ""; } + public String getPrivateKeyFile(int tunnel) { TunnelController tun = getController(tunnel); if (tun != null && tun.getPrivKeyFile() != null) return tun.getPrivKeyFile(); if (tunnel < 0) - tunnel = _group.getControllers().size(); + tunnel = _group == null ? 1 : _group.getControllers().size() + 1; return "i2ptunnel" + tunnel + "-privKeys.dat"; } @@ -221,19 +226,7 @@ public class EditBean extends IndexBean { /** all proxy auth @since 0.8.2 */ public boolean getProxyAuth(int tunnel) { - return getBooleanProperty(tunnel, I2PTunnelHTTPClientBase.PROP_AUTH) && - getProxyUsername(tunnel).length() > 0 && - getProxyPassword(tunnel).length() > 0; - } - - public String getProxyUsername(int tunnel) { - return getProperty(tunnel, I2PTunnelHTTPClientBase.PROP_USER, ""); - } - - public String getProxyPassword(int tunnel) { - if (getProxyUsername(tunnel).length() <= 0) - return ""; - return getProperty(tunnel, I2PTunnelHTTPClientBase.PROP_PW, ""); + return getProperty(tunnel, I2PTunnelHTTPClientBase.PROP_AUTH, "false") != "false"; } public boolean getOutproxyAuth(int tunnel) { @@ -354,10 +347,17 @@ public class EditBean extends IndexBean { if (opts == null) return ""; StringBuilder buf = new StringBuilder(64); int i = 0; + boolean isMD5Proxy = "httpclient".equals(tun.getType()) || + "connectclient".equals(tun.getType()); for (Iterator iter = opts.keySet().iterator(); iter.hasNext(); ) { String key = (String)iter.next(); if (_noShowSet.contains(key)) continue; + // leave in for HTTP and Connect so it can get migrated to MD5 + // hide for SOCKS until migrated to MD5 + if ((!isMD5Proxy) && + _nonProxyNoShowSet.contains(key)) + continue; String val = opts.getProperty(key); if (i != 0) buf.append(' '); buf.append(key).append('=').append(val); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java index 363c9a60b132ae907d229a9e7256f84ff378790c..838377624e680a5c0f72641b798f1b655eddae56 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/web/IndexBean.java @@ -27,6 +27,7 @@ import net.i2p.data.Certificate; import net.i2p.data.Destination; import net.i2p.data.PrivateKeyFile; import net.i2p.data.SessionKey; +import net.i2p.i2ptunnel.I2PTunnelConnectClient; import net.i2p.i2ptunnel.I2PTunnelHTTPClient; import net.i2p.i2ptunnel.I2PTunnelHTTPClientBase; import net.i2p.i2ptunnel.I2PTunnelIRCClient; @@ -36,18 +37,20 @@ import net.i2p.util.Addresses; import net.i2p.util.ConcurrentHashSet; import net.i2p.util.FileUtil; import net.i2p.util.Log; +import net.i2p.util.PasswordManager; /** * Simple accessor for exposing tunnel info, but also an ugly form handler * - * Warning - This class is not part of the i2ptunnel API, and at some point - * it will be moved from the jar to the war. + * Warning - This class is not part of the i2ptunnel API, + * it has been moved from the jar to the war. * Usage by classes outside of i2ptunnel.war is deprecated. */ public class IndexBean { protected final I2PAppContext _context; protected final Log _log; protected final TunnelControllerGroup _group; + private final String _fatalError; private String _action; private int _tunnel; //private long _prevNonce; @@ -83,15 +86,14 @@ public class IndexBean { private int _hashCashValue; private int _certType; private String _certSigner; + private String _newProxyUser; + private String _newProxyPW; public static final int RUNNING = 1; public static final int STARTING = 2; public static final int NOT_RUNNING = 3; public static final int STANDBY = 4; - /** deprecated unimplemented, now using routerconsole realm */ - //public static final String PROP_TUNNEL_PASSPHRASE = "i2ptunnel.passphrase"; - public static final String PROP_TUNNEL_PASSPHRASE = "consolePassword"; //static final String PROP_NONCE = IndexBean.class.getName() + ".nonce"; //static final String PROP_NONCE_OLD = PROP_NONCE + '2'; /** 3 wasn't enough for some browsers. They are reloading the page for some reason - maybe HEAD? @since 0.8.1 */ @@ -104,11 +106,23 @@ public class IndexBean { public static final String DEFAULT_THEME = "light"; public static final String PROP_CSS_DISABLED = "routerconsole.css.disabled"; public static final String PROP_JS_DISABLED = "routerconsole.javascript.disabled"; + private static final String PROP_PW_ENABLE = "routerconsole.auth.enable"; public IndexBean() { _context = I2PAppContext.getGlobalContext(); _log = _context.logManager().getLog(IndexBean.class); - _group = TunnelControllerGroup.getInstance(); + TunnelControllerGroup tcg; + String error; + try { + tcg = TunnelControllerGroup.getInstance(); + error = tcg == null ? _("Tunnels are not initialized yet, please reload in two minutes.") + : null; + } catch (IllegalArgumentException iae) { + tcg = null; + error = iae.toString(); + } + _group = tcg; + _fatalError = error; _tunnel = -1; _curNonce = "-1"; addNonce(); @@ -116,6 +130,13 @@ public class IndexBean { _otherOptions = new ConcurrentHashMap(4); } + /** + * @since 0.9.4 + */ + public boolean isInitialized() { + return _group != null; + } + public static String getNextNonce() { synchronized (_nonces) { return _nonces.get(0); @@ -145,14 +166,11 @@ public class IndexBean { } } - /** deprecated unimplemented, now using routerconsole realm */ - public void setPassphrase(String phrase) { - } - public void setAction(String action) { if ( (action == null) || (action.trim().length() <= 0) ) return; _action = action; } + public void setTunnel(String tunnel) { if ( (tunnel == null) || (tunnel.trim().length() <= 0) ) return; try { @@ -162,17 +180,17 @@ public class IndexBean { } } - /** just check if console password option is set, jetty will do auth */ - private boolean validPassphrase() { - String pass = _context.getProperty(PROP_TUNNEL_PASSPHRASE); - return pass != null && pass.trim().length() > 0; - } - private String processAction() { if ( (_action == null) || (_action.trim().length() <= 0) || ("Cancel".equals(_action))) return ""; - if ( (!haveNonce(_curNonce)) && (!validPassphrase()) ) - return _("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit."); + if (_group == null) + return "Error - tunnels are not initialized yet"; + // If passwords are turned on, all is assumed good + if (!_context.getBooleanProperty(PROP_PW_ENABLE) && + !haveNonce(_curNonce)) + return _("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.") + + ' ' + + _("If the problem persists, verify that you have cookies enabled in your browser."); if ("Stop all".equals(_action)) return stopAll(); else if ("Start all".equals(_action)) @@ -200,33 +218,33 @@ public class IndexBean { else return "Action " + _action + " unknown"; } + private String stopAll() { - if (_group == null) return ""; List<String> msgs = _group.stopAllControllers(); return getMessages(msgs); } + private String startAll() { - if (_group == null) return ""; List<String> msgs = _group.startAllControllers(); return getMessages(msgs); } + private String restartAll() { - if (_group == null) return ""; List<String> msgs = _group.restartAllControllers(); return getMessages(msgs); } + private String reloadConfig() { - if (_group == null) return ""; - _group.reloadControllers(); return _("Configuration reloaded for all tunnels"); } + private String start() { if (_tunnel < 0) return "Invalid tunnel"; - List controllers = _group.getControllers(); + List<TunnelController> controllers = _group.getControllers(); if (_tunnel >= controllers.size()) return "Invalid tunnel"; - TunnelController controller = (TunnelController)controllers.get(_tunnel); + TunnelController controller = controllers.get(_tunnel); controller.startTunnelBackground(); // give the messages a chance to make it to the window try { Thread.sleep(1000); } catch (InterruptedException ie) {} @@ -237,9 +255,9 @@ public class IndexBean { private String stop() { if (_tunnel < 0) return "Invalid tunnel"; - List controllers = _group.getControllers(); + List<TunnelController> controllers = _group.getControllers(); if (_tunnel >= controllers.size()) return "Invalid tunnel"; - TunnelController controller = (TunnelController)controllers.get(_tunnel); + TunnelController controller = controllers.get(_tunnel); controller.stopTunnel(); // give the messages a chance to make it to the window try { Thread.sleep(1000); } catch (InterruptedException ie) {} @@ -268,10 +286,10 @@ public class IndexBean { // if the current tunnel is shared, and of supported type if (Boolean.parseBoolean(cur.getSharedClient()) && isClient(cur.getType())) { // all clients use the same I2CP session, and as such, use the same I2CP options - List controllers = _group.getControllers(); + List<TunnelController> controllers = _group.getControllers(); for (int i = 0; i < controllers.size(); i++) { - TunnelController c = (TunnelController)controllers.get(i); + TunnelController c = controllers.get(i); // Current tunnel modified by user, skip if (c == cur) continue; @@ -375,7 +393,7 @@ public class IndexBean { */ public String getMessages() { if (_group == null) - return ""; + return _fatalError; StringBuilder buf = new StringBuilder(512); if (_action != null) { @@ -804,21 +822,22 @@ public class IndexBean { /** all proxy auth @since 0.8.2 */ public void setProxyAuth(String s) { - _booleanOptions.add(I2PTunnelHTTPClientBase.PROP_AUTH); + if (s != null) + _otherOptions.put(I2PTunnelHTTPClientBase.PROP_AUTH, I2PTunnelHTTPClientBase.DIGEST_AUTH); } public void setProxyUsername(String s) { if (s != null) - _otherOptions.put(I2PTunnelHTTPClientBase.PROP_USER, s.trim()); + _newProxyUser = s.trim(); } public void setProxyPassword(String s) { if (s != null) - _otherOptions.put(I2PTunnelHTTPClientBase.PROP_PW, s.trim()); + _newProxyPW = s.trim(); } public void setOutproxyAuth(String s) { - _booleanOptions.add(I2PTunnelHTTPClientBase.PROP_OUTPROXY_AUTH); + _otherOptions.put(I2PTunnelHTTPClientBase.PROP_OUTPROXY_AUTH, I2PTunnelHTTPClientBase.DIGEST_AUTH); } public void setOutproxyUsername(String s) { @@ -1040,6 +1059,45 @@ public class IndexBean { config.setProperty("proxyList", _proxyList); } + // Proxy auth including migration to MD5 + if ("httpclient".equals(_type) || "connectclient".equals(_type)) { + // Migrate even if auth is disabled + // go get the old from custom options that updateConfigGeneric() put in there + String puser = "option." + I2PTunnelHTTPClientBase.PROP_USER; + String user = config.getProperty(puser); + String ppw = "option." + I2PTunnelHTTPClientBase.PROP_PW; + String pw = config.getProperty(ppw); + if (user != null && pw != null && user.length() > 0 && pw.length() > 0) { + String pmd5 = "option." + I2PTunnelHTTPClientBase.PROP_PROXY_DIGEST_PREFIX + + user + I2PTunnelHTTPClientBase.PROP_PROXY_DIGEST_SUFFIX; + if (config.getProperty(pmd5) == null) { + // not in there, migrate + String realm = _type.equals("httpclient") ? I2PTunnelHTTPClient.AUTH_REALM + : I2PTunnelConnectClient.AUTH_REALM; + String hex = PasswordManager.md5Hex(realm, user, pw); + if (hex != null) { + config.setProperty(pmd5, hex); + config.remove(puser); + config.remove(ppw); + } + } + } + // New user/password + String auth = _otherOptions.get(I2PTunnelHTTPClientBase.PROP_AUTH); + if (auth != null && !auth.equals("false")) { + if (_newProxyUser != null && _newProxyPW != null && + _newProxyUser.length() > 0 && _newProxyPW.length() > 0) { + String pmd5 = "option." + I2PTunnelHTTPClientBase.PROP_PROXY_DIGEST_PREFIX + + _newProxyUser + I2PTunnelHTTPClientBase.PROP_PROXY_DIGEST_SUFFIX; + String realm = _type.equals("httpclient") ? I2PTunnelHTTPClient.AUTH_REALM + : I2PTunnelConnectClient.AUTH_REALM; + String hex = PasswordManager.md5Hex(realm, _newProxyUser, _newProxyPW); + if (hex != null) + config.setProperty(pmd5, hex); + } + } + } + if ("ircclient".equals(_type) || "client".equals(_type) || "streamrclient".equals(_type)) { if (_targetDestination != null) config.setProperty("targetDestination", _targetDestination); @@ -1084,15 +1142,16 @@ public class IndexBean { "i2cp.reduceOnIdle", "i2cp.closeOnIdle", "i2cp.newDestOnResume", "persistentClientKey", "i2cp.delayOpen" }; private static final String _booleanProxyOpts[] = { - I2PTunnelHTTPClientBase.PROP_AUTH, I2PTunnelHTTPClientBase.PROP_OUTPROXY_AUTH + I2PTunnelHTTPClientBase.PROP_OUTPROXY_AUTH }; private static final String _booleanServerOpts[] = { "i2cp.reduceOnIdle", "i2cp.encryptLeaseSet", PROP_ENABLE_ACCESS_LIST, PROP_ENABLE_BLACKLIST }; private static final String _otherClientOpts[] = { "i2cp.reduceIdleTime", "i2cp.reduceQuantity", "i2cp.closeIdleTime", - "proxyUsername", "proxyPassword", "outproxyUsername", "outproxyPassword", - I2PTunnelHTTPClient.PROP_JUMP_SERVERS + "outproxyUsername", "outproxyPassword", + I2PTunnelHTTPClient.PROP_JUMP_SERVERS, + I2PTunnelHTTPClientBase.PROP_AUTH }; private static final String _otherServerOpts[] = { "i2cp.reduceIdleTime", "i2cp.reduceQuantity", "i2cp.leaseSetKey", "i2cp.accessList", @@ -1101,7 +1160,17 @@ public class IndexBean { PROP_MAX_STREAMS }; + /** + * do NOT add these to noShoOpts, we must leave them in for HTTPClient and ConnectCLient + * so they will get migrated to MD5 + * TODO migrate socks to MD5 + */ + private static final String _otherProxyOpts[] = { + "proxyUsername", "proxyPassword" + }; + protected static final Set _noShowSet = new HashSet(64); + protected static final Set _nonProxyNoShowSet = new HashSet(4); static { _noShowSet.addAll(Arrays.asList(_noShowOpts)); _noShowSet.addAll(Arrays.asList(_booleanClientOpts)); @@ -1109,6 +1178,7 @@ public class IndexBean { _noShowSet.addAll(Arrays.asList(_booleanServerOpts)); _noShowSet.addAll(Arrays.asList(_otherClientOpts)); _noShowSet.addAll(Arrays.asList(_otherServerOpts)); + _nonProxyNoShowSet.addAll(Arrays.asList(_otherProxyOpts)); } private void updateConfigGeneric(Properties config) { @@ -1139,6 +1209,12 @@ public class IndexBean { String key = pair.substring(0, eq); if (_noShowSet.contains(key)) continue; + // leave in for HTTP and Connect so it can get migrated to MD5 + // hide for SOCKS until migrated to MD5 + if ((!"httpclient".equals(_type)) && + (! "connectclient".equals(_type)) && + _nonProxyNoShowSet.contains(key)) + continue; String val = pair.substring(eq+1); config.setProperty("option." + key, val); } @@ -1190,9 +1266,9 @@ public class IndexBean { protected TunnelController getController(int tunnel) { if (tunnel < 0) return null; if (_group == null) return null; - List controllers = _group.getControllers(); + List<TunnelController> controllers = _group.getControllers(); if (controllers.size() > tunnel) - return (TunnelController)controllers.get(tunnel); + return controllers.get(tunnel); else return null; } diff --git a/apps/i2ptunnel/jsp/editClient.jsp b/apps/i2ptunnel/jsp/editClient.jsp index d2ca8f7ad331cbc8d65fd30fdec720047d9ec7c7..92d2c1fd9229d7eec9457bf0d5f874551439c359 100644 --- a/apps/i2ptunnel/jsp/editClient.jsp +++ b/apps/i2ptunnel/jsp/editClient.jsp @@ -31,7 +31,11 @@ <body id="tunnelEditPage"> <div id="pageHeader"> </div> +<% + if (editBean.isInitialized()) { + +%> <form method="post" action="list"> <div id="tunnelEditPanel" class="panel"> @@ -435,13 +439,13 @@ <label> <%=intl._("Username")%>: </label> - <input type="text" id="clientPort" name="proxyUsername" title="Set username for this service" value="<%=editBean.getProxyUsername(curTunnel)%>" class="freetext" /> + <input type="text" id="clientPort" name="proxyUsername" title="Set username for this service" value="" class="freetext" /> </div> <div id="portField" class="rowItem"> <label> <%=intl._("Password")%>: </label> - <input type="password" id="clientPort" name="proxyPassword" title="Set password for this service" value="<%=editBean.getProxyPassword(curTunnel)%>" class="freetext" /> + <input type="password" id="clientPort" name="proxyPassword" title="Set password for this service" value="" class="freetext" /> </div> <div class="subdivider"> <hr /> @@ -508,5 +512,12 @@ </form> <div id="pageFooter"> </div> +<% + + } else { + %>Tunnels are not initialized yet, please reload in two minutes.<% + } // isInitialized() + +%> </body> </html> diff --git a/apps/i2ptunnel/jsp/editServer.jsp b/apps/i2ptunnel/jsp/editServer.jsp index 1931182cce3d84df048895f9ff10c24e53be2108..9447fc36873025f04ffe74a285927afd3a9e3266 100644 --- a/apps/i2ptunnel/jsp/editServer.jsp +++ b/apps/i2ptunnel/jsp/editServer.jsp @@ -31,7 +31,11 @@ <body id="tunnelEditPage"> <div id="pageHeader"> </div> +<% + if (editBean.isInitialized()) { + +%> <form method="post" action="list"> <div id="tunnelEditPanel" class="panel"> @@ -518,5 +522,12 @@ </form> <div id="pageFooter"> </div> +<% + + } else { + %>Tunnels are not initialized yet, please reload in two minutes.<% + } // isInitialized() + +%> </body> </html> diff --git a/apps/i2ptunnel/jsp/index.jsp b/apps/i2ptunnel/jsp/index.jsp index 6494430e4ea742d637ca89226677d3b2902edbc3..c8982e73c6d1db2164905c0188c939bf00e30650 100644 --- a/apps/i2ptunnel/jsp/index.jsp +++ b/apps/i2ptunnel/jsp/index.jsp @@ -55,12 +55,23 @@ </div> </div> </div> +<% + + if (indexBean.isInitialized()) { +%> <div id="globalOperationsPanel" class="panel"> <div class="header"></div> <div class="footer"> <div class="toolbox"> - <a class="control" href="wizard"><%=intl._("Tunnel Wizard")%></a> <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Stop%20all"><%=intl._("Stop All")%></a> <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Start%20all"><%=intl._("Start All")%></a> <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Restart%20all"><%=intl._("Restart All")%></a> <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Reload%20configuration"><%=intl._("Reload Config")%></a> + <a class="control" href="wizard"><%=intl._("Tunnel Wizard")%></a> + <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Stop%20all"><%=intl._("Stop All")%></a> + <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Start%20all"><%=intl._("Start All")%></a> + <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Restart%20all"><%=intl._("Restart All")%></a> +<%-- + //this is really bad because it stops and restarts all tunnels, which is probably not what you want + <a class="control" href="list?nonce=<%=indexBean.getNextNonce()%>&action=Reload%20configuration"><%=intl._("Reload Config")%></a> +--%> </div> </div> </div> @@ -285,7 +296,9 @@ </label> <div class="text"> <% String cdest = indexBean.getClientDestination(curClient); - if (cdest.length() > 0) { + if (cdest.length() > 70) { // Probably a B64 (a B32 is 60 chars) so truncate + %><%=cdest.substring(0, 45)%>…<%=cdest.substring(cdest.length() - 15, cdest.length())%><% + } else if (cdest.length() > 0) { %><%=cdest%><% } else { %><i><%=intl._("none")%></i><% @@ -327,6 +340,11 @@ </form> </div> </div> +<% + + } // isInitialized() + +%> <div id="pageFooter"> </div> </body> diff --git a/apps/i2ptunnel/locale/messages_es.po b/apps/i2ptunnel/locale/messages_es.po index c5bbeaf039ead9e135b934708b05b9dc7390224e..b3170c14b7f19a384b8ec702634cb73bb293acef 100644 --- a/apps/i2ptunnel/locale/messages_es.po +++ b/apps/i2ptunnel/locale/messages_es.po @@ -2,10 +2,11 @@ # Copyright (C) 2009 The I2P Project # This file is distributed under the same license as the i2ptunnel package. # To contribute translations, see http://www.i2p2.de/newdevelopers -# +# # Translators: # "blabla", 2011. # <blabla@trash-mail.com>, 2011, 2012. +# Daniel Mustieles <daniel.mustieles@gmail.com>, 2012. # ducki2p <ducki2p@gmail.com>, 2011. # foo <foo@bar>, 2009. # <punkibastardo@gmail.com>, 2011, 2012. @@ -13,17 +14,16 @@ msgid "" msgstr "" "Project-Id-Version: I2P\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-26 19:45+0000\n" -"PO-Revision-Date: 2012-07-21 19:52+0000\n" -"Last-Translator: blabla <blabla@trash-mail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/I2P/language/" -"es/)\n" -"Language: es\n" +"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n" +"POT-Creation-Date: 2012-10-12 00:38+0000\n" +"PO-Revision-Date: 2012-10-18 08:55+0000\n" +"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/I2P/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" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554 msgid "This seems to be a bad destination:" @@ -36,13 +36,10 @@ msgstr "El ayudante de direcciones no te puede ayudar con un destino asÃ." #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:621 #, java-format msgid "" -"To visit the destination in your host database, click <a href=\"{0}\">here</" -"a>. To visit the conflicting addresshelper destination, click <a href=" -"\"{1}\">here</a>." -msgstr "" -"Para visitar el destino en la base de datos de hosts, ¡pincha <a href=" -"\"{0}\">aquÃ</a>! Para visitar el destino del ayudante de direcciones en " -"conflicto, ¡pincha <a href=\"{1}\">aquÃ</a>!" +"To visit the destination in your host database, click <a " +"href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, " +"click <a href=\"{1}\">here</a>." +msgstr "Para visitar el destino en la base de datos de hosts, ¡pincha <a href=\"{0}\">aquÃ</a>! Para visitar el destino del ayudante de direcciones en conflicto, ¡pincha <a href=\"{1}\">aquÃ</a>!" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1023 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:403 @@ -57,7 +54,7 @@ msgid "Base 32" msgstr "Base 32" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1031 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:380 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:374 msgid "Destination" msgstr "Destino" @@ -69,21 +66,18 @@ msgstr "Acceder a {0} sin guardar" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1042 #, java-format msgid "Save {0} to router address book and continue to eepsite" -msgstr "" -"Guardar {0} a la libreta de direcciones del router y acceder al sitio i2p." +msgstr "Guardar {0} a la libreta de direcciones del router y acceder al sitio i2p." #. only blockfile supports multiple books #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1045 #, java-format msgid "Save {0} to master address book and continue to eepsite" -msgstr "" -"Guardar {0} a la libreta de direcciones principal y acceder al sitio i2p." +msgstr "Guardar {0} a la libreta de direcciones principal y acceder al sitio i2p." #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046 #, java-format msgid "Save {0} to private address book and continue to eepsite" -msgstr "" -"Guardar {0} a la libreta de direcciones privada y acceder al sitio i2p." +msgstr "Guardar {0} a la libreta de direcciones privada y acceder al sitio i2p." #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1211 msgid "HTTP Outproxy" @@ -91,10 +85,9 @@ msgstr "Puerta de salida HTTP" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1216 msgid "" -"Click a link below to look for an address helper by using a \"jump\" service:" -msgstr "" -"Pincha en un enlace de debajo para buscar un ayudante de direcciones " -"mediante el uso de un servicio de \"salto\":" +"Click a link below to look for an address helper by using a \"jump\" " +"service:" +msgstr "Pincha en un enlace de debajo para buscar un ayudante de direcciones mediante el uso de un servicio de \"salto\":" #. Translators: parameter is a host name #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1252 @@ -146,97 +139,109 @@ msgstr "¡Haz click aquà si no estás siendo enviado automáticamente!" msgid "internal" msgstr "interno" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:174 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175 msgid "" "Invalid form submission, probably because you used the 'back' or 'reload' " "button on your browser. Please resubmit." -msgstr "" -"El formulario presentado es inválido, probablemente porque has utilizado el " -"botón 'atrás' o 'recargar' de tu navegador. Por favor, ¡vuelve a enviarlo!" +msgstr "El formulario presentado es inválido, probablemente porque has utilizado el botón 'atrás' o 'recargar' de tu navegador. Por favor, ¡vuelve a enviarlo!" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:221 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222 msgid "Configuration reloaded for all tunnels" msgstr "Configuración recargada para todos los túneles" #. and give them something to look at in any case -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:233 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234 msgid "Starting tunnel" msgstr "Inicializando el túnel" #. and give them something to look at in any case -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:246 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247 msgid "Stopping tunnel" msgstr "Deteniendo el túnel" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315 msgid "Configuration changes saved" msgstr "Cambios en la configuración guardados" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:317 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318 msgid "Failed to save configuration" msgstr "No se pudo guardar la configuración" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:437 msgid "New Tunnel" msgstr "Nuevo túnel" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:470 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:587 +msgid "Port not set" +msgstr "Puerto no establecido" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:589 +msgid "Invalid port" +msgstr "Puerto no válido" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466 +msgid "Warning - ports less than 1024 are not recommended" +msgstr "Advertencia: no se recomienda usar puertos inferiores al 1024" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:482 msgid "Standard client" msgstr "Cliente estándar" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:483 msgid "HTTP client" msgstr "Cliente HTTP" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:484 msgid "IRC client" msgstr "Cliente IRC" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:485 msgid "Standard server" msgstr "Servidor estándar" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:486 msgid "HTTP server" msgstr "Servidor HTTP" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:487 msgid "SOCKS 4/4a/5 proxy" msgstr "Proxy SOCKS 4/4a/5" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:488 msgid "SOCKS IRC proxy" msgstr "Proxy IRC SOCKS" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:489 msgid "CONNECT/SSL/HTTPS proxy" msgstr "Proxy CONNECT/SSL/HTTPS" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:490 msgid "IRC server" msgstr "Servidor de IRC" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:491 msgid "Streamr client" msgstr "Cliente Streamr" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:492 msgid "Streamr server" msgstr "Servidor Streamr" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:493 msgid "HTTP bidir" msgstr "HTTP bidir" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:305 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:581 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:299 msgid "Host not set" msgstr "Host no establecido" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:287 -msgid "Port not set" -msgstr "Puerto no establecido" +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:583 +msgid "Invalid address" +msgstr "Dirección no válida" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:82 msgid "I2P Tunnel Manager - Edit Client Tunnel" @@ -263,14 +268,14 @@ msgstr "Nombre" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:127 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:127 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:261 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:288 msgid "Type" msgstr "Tipo" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:131 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:131 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:393 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330 msgid "Description" msgstr "Descripción" @@ -329,9 +334,7 @@ msgstr "Túnel Compartido" msgid "" "(Share tunnels with other clients and irc/httpclients? Change requires " "restart of client proxy)" -msgstr "" -"(¿Compartir túneles con otros clientes y clientes de IRC/http? Cambiar esto " -"requiere reiniciar el proxy de cliente)" +msgstr "(¿Compartir túneles con otros clientes y clientes de IRC/http? Cambiar esto requiere reiniciar el proxy de cliente)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:225 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:135 @@ -359,9 +362,7 @@ msgstr "Opciones de red avanzadas" msgid "" "(NOTE: when this client proxy is configured to share tunnels, then these " "options are for all the shared proxy clients!)" -msgstr "" -"(NOTA: Si este proxy de cliente está configurado para compartir túneles, " -"estas opciones se aplicarán a todos los proxys de cliente compartidos.)" +msgstr "(NOTA: Si este proxy de cliente está configurado para compartir túneles, estas opciones se aplicarán a todos los proxys de cliente compartidos.)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:245 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:255 @@ -412,23 +413,18 @@ msgstr "Variación de 0 saltos (sin aleatoriedad, rendimiento constante)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:300 msgid "" "+ 0-1 hop variance (medium additive randomisation, subtractive performance)" -msgstr "" -"Variación de + 0-1 salto (aleatoriedad media aditiva, rendimiento " -"substractivo)" +msgstr "Variación de + 0-1 salto (aleatoriedad media aditiva, rendimiento substractivo)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:294 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:304 msgid "" "+ 0-2 hop variance (high additive randomisation, subtractive performance)" -msgstr "" -"Variación de + 0-2 saltos (aleatoriedad alta aditiva, rendimiento " -"substractivo)" +msgstr "Variación de + 0-2 saltos (aleatoriedad alta aditiva, rendimiento substractivo)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:298 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:308 msgid "+/- 0-1 hop variance (standard randomisation, standard performance)" -msgstr "" -"Variación de +/- 0-1 salto (aleatoriedad estándar, rendimiento estándar)" +msgstr "Variación de +/- 0-1 salto (aleatoriedad estándar, rendimiento estándar)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:302 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:312 @@ -448,25 +444,20 @@ msgstr "Cantidad" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335 msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)" -msgstr "" -"1 túnel entrante, 1 de salida (bajo uso de ancho de banda, menos fiabilidad)" +msgstr "1 túnel entrante, 1 de salida (bajo uso de ancho de banda, menos fiabilidad)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:329 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:339 msgid "" "2 inbound, 2 outbound tunnels (standard bandwidth usage, standard " "reliability)" -msgstr "" -"2 túneles entrantes, 2 de salida (uso de ancho de banda estándar, fiabilidad " -"estándar)" +msgstr "2 túneles entrantes, 2 de salida (uso de ancho de banda estándar, fiabilidad estándar)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:333 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:343 msgid "" "3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)" -msgstr "" -"3 túneles entrantes, 3 de salida (mayor uso de ancho de banda, mayor " -"fiabilidad)" +msgstr "3 túneles entrantes, 3 de salida (mayor uso de ancho de banda, mayor fiabilidad)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:341 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:351 @@ -486,24 +477,18 @@ msgstr "0 túneles de respaldo (redundancia 0, no aumenta el uso de recursos)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:357 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:367 msgid "1 backup tunnel each direction (low redundancy, low resource usage)" -msgstr "" -"1 túnel de respaldo en cada dirección (redundancia baja, uso bajo de " -"recursos)" +msgstr "1 túnel de respaldo en cada dirección (redundancia baja, uso bajo de recursos)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:361 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:371 msgid "" "2 backup tunnels each direction (medium redundancy, medium resource usage)" -msgstr "" -"2 túneles de respaldo en cada dirección (redundancia media, uso de recursos " -"medio)" +msgstr "2 túneles de respaldo en cada dirección (redundancia media, uso de recursos medio)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:375 msgid "3 backup tunnels each direction (high redundancy, high resource usage)" -msgstr "" -"3 túneles de respaldo en cada dirección (alta redundancia, uso de recursos " -"alto)" +msgstr "3 túneles de respaldo en cada dirección (alta redundancia, uso de recursos alto)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:373 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:383 @@ -835,7 +820,7 @@ msgstr "Vista previa" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:129 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:192 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:312 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:306 msgid "Status" msgstr "Estado" @@ -848,30 +833,30 @@ msgid "No Preview" msgstr "Sin vista previa" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:199 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:319 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:313 msgid "Starting..." msgstr "Iniciando..." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:206 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:326 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:340 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:354 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:320 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:334 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:348 msgid "Stop" msgstr "Detener" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:213 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:347 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:341 msgid "Running" msgstr "Ejecutándose" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:227 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:361 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:355 msgid "Stopped" msgstr "Detenido" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:368 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:362 msgid "Start" msgstr "Iniciar" @@ -880,7 +865,7 @@ msgid "New server tunnel" msgstr "Nuevo servidor de túnel" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:409 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:403 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295 @@ -890,7 +875,7 @@ msgid "Standard" msgstr "Estándar" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:411 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:405 msgid "Create" msgstr "Crear" @@ -899,23 +884,23 @@ msgid "I2P Client Tunnels" msgstr "Túneles de cliente I2P" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:263 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:298 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:292 msgid "Interface" msgstr "Interfaz" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:333 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:327 msgid "Standby" msgstr "En espera" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:377 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:371 msgid "Outproxy" msgstr "Puerta de salida" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:394 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:388 msgid "none" msgstr "ninguno" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:407 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401 msgid "New client tunnel" msgstr "Nuevo túnel cliente" @@ -959,35 +944,27 @@ msgstr "Asistente completado" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:189 msgid "" -"This wizard will take you through the various options available for creating " -"tunnels in I2P." -msgstr "" -"Este asistente le guiará a través de las distintas opciones disponibles para " -"la creación de túneles en I2P." +"This wizard will take you through the various options available for creating" +" tunnels in I2P." +msgstr "Este asistente le guiará a través de las distintas opciones disponibles para la creación de túneles en I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:191 msgid "" -"The first thing to decide is whether you want to create a server or a client " -"tunnel." -msgstr "" -"Lo primero que debe decidir es si se desea crear un túnel de servidor o de " -"cliente." +"The first thing to decide is whether you want to create a server or a client" +" tunnel." +msgstr "Lo primero que debe decidir es si se desea crear un túnel de servidor o de cliente." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:193 msgid "" -"If you need to connect to a remote service, such as an IRC server inside I2P " -"or a code repository, then you will require a CLIENT tunnel." -msgstr "" -"Si necesita conectarse a un servicio remoto, como un servidor de IRC dentro " -"de I2P o un repositorio de código, va a requerir un túnel CLIENTE." +"If you need to connect to a remote service, such as an IRC server inside I2P" +" or a code repository, then you will require a CLIENT tunnel." +msgstr "Si necesita conectarse a un servicio remoto, como un servidor de IRC dentro de I2P o un repositorio de código, va a requerir un túnel CLIENTE." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:195 msgid "" "On the other hand, if you wish to host a service for others to connect to " "you'll need to create a SERVER tunnel." -msgstr "" -"Por otro lado, si desea hospedar un servicio para que otros puedan " -"conectarse a usted, necesitará crear un túnel SERVIDOR." +msgstr "Por otro lado, si desea hospedar un servicio para que otros puedan conectarse a usted, necesitará crear un túnel SERVIDOR." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:197 msgid "Server Tunnel" @@ -1010,9 +987,7 @@ msgstr "Túnel básico para la conexión a un servicio dentro de I2P." msgid "" "Try this if none of the tunnel types below fit your requirements, or you " "don't know what type of tunnel you need." -msgstr "" -"Pruebe esto si ninguno de los tipos de túneles a continuación se ajustan a " -"sus requerimientos, o si no sabe qué tipo de túnel necesita." +msgstr "Pruebe esto si ninguno de los tipos de túneles a continuación se ajustan a sus requerimientos, o si no sabe qué tipo de túnel necesita." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:229 msgid "Tunnel that acts as an HTTP proxy for reaching eepsites inside I2P." @@ -1021,20 +996,15 @@ msgstr "Túnel que actúa como un proxy HTTP para llegar a eepsites dentro I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:231 msgid "" "Set your browser to use this tunnel as an http proxy, or set your " -"\"http_proxy\" environment variable for command-line applications in GNU/" -"Linux." -msgstr "" -"Configure su navegador para usar este túnel como un proxy HTTP, o configure " -"su variable de entorno \"http_proxy\" para aplicaciones de lÃnea de comandos " -"en GNU / Linux." +"\"http_proxy\" environment variable for command-line applications in " +"GNU/Linux." +msgstr "Configure su navegador para usar este túnel como un proxy HTTP, o configure su variable de entorno \"http_proxy\" para aplicaciones de lÃnea de comandos en GNU / Linux." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:233 msgid "" "Websites outside I2P can also be reached if an HTTP proxy within I2P is " "known." -msgstr "" -"También es posible llegar a sitios web de fuera de I2P si se conoce algún " -"proxy HTTP dentro de I2P." +msgstr "También es posible llegar a sitios web de fuera de I2P si se conoce algún proxy HTTP dentro de I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:235 msgid "Customised client tunnel specific for IRC connections." @@ -1044,17 +1014,13 @@ msgstr "Túnel de cliente personalizado especÃficamente para conexiones de IRC. msgid "" "With this tunnel type, your IRC client will be able to connect to an IRC " "network inside I2P." -msgstr "" -"Con este tipo de túnel, su cliente de IRC será capaz de conectarse a una red " -"de IRC dentro de I2P." +msgstr "Con este tipo de túnel, su cliente de IRC será capaz de conectarse a una red de IRC dentro de I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:239 msgid "" "Each IRC network in I2P that you wish to connect to will require its own " "tunnel. (See Also, SOCKS IRC)" -msgstr "" -"Cada red IRC en I2P a la que desee conectarse requerirá su propio túnel. " -"(Véase también, SOCKS IRC)" +msgstr "Cada red IRC en I2P a la que desee conectarse requerirá su propio túnel. (Véase también, SOCKS IRC)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:241 msgid "A tunnel that implements the SOCKS protocol." @@ -1064,45 +1030,33 @@ msgstr "Un túnel que implementa el protocolo SOCKS." msgid "" "This enables both TCP and UDP connections to be made through a SOCKS " "outproxy within I2P." -msgstr "" -"Esto permite que las conexiones TCP y UDP se hagan a través de un outproxy " -"SOCKS que esté dentro de I2P." +msgstr "Esto permite que las conexiones TCP y UDP se hagan a través de un outproxy SOCKS que esté dentro de I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:245 msgid "" "A client tunnel implementing the SOCKS protocol, which is customised for " "connecting to IRC networks." -msgstr "" -"Un túnel de cliente que implementa el protocolo SOCKS, personalizado para la " -"conexión con redes IRC." +msgstr "Un túnel de cliente que implementa el protocolo SOCKS, personalizado para la conexión con redes IRC." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:247 msgid "" "With this tunnel type, IRC networks in I2P can be reached by typing the I2P " "address into your IRC client, and configuring the IRC client to use this " "SOCKS tunnel." -msgstr "" -"Con este tipo de túnel, las redes IRC de I2P pueden ser alcanzadas " -"escribiendo directamente la dirección I2P en el cliente de IRC, y " -"configurando el cliente de IRC para utilizar este túnel SOCKS." +msgstr "Con este tipo de túnel, las redes IRC de I2P pueden ser alcanzadas escribiendo directamente la dirección I2P en el cliente de IRC, y configurando el cliente de IRC para utilizar este túnel SOCKS." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:249 msgid "" "This means that only one I2P tunnel is required rather than a separate " "tunnel per IRC network." -msgstr "" -"Esto significa que sólo es necesario un único túnel I2P en lugar de un túnel " -"distinto por cada red IRC." +msgstr "Esto significa que sólo es necesario un único túnel I2P en lugar de un túnel distinto por cada red IRC." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:251 msgid "" "IRC networks outside I2P can also be reached if a SOCKS outproxy within I2P " "is known, though it depends on whether or not the outproxy has been blocked " "by the IRC network." -msgstr "" -"También se puede llegar a redes IRC de fuera de I2P si se conoce un outproxy " -"SOCKS en I2P, aunque depende de si el outproxy ha sido bloqueado por la red " -"IRC." +msgstr "También se puede llegar a redes IRC de fuera de I2P si se conoce un outproxy SOCKS en I2P, aunque depende de si el outproxy ha sido bloqueado por la red IRC." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:253 msgid "A client tunnel that implements the HTTP CONNECT command." @@ -1112,9 +1066,7 @@ msgstr "Un túnel de cliente que implementa el comando HTTP CONNECT." msgid "" "This enables TCP connections to be made through an HTTP outproxy, assuming " "the proxy supports the CONNECT command." -msgstr "" -"Esto permite hacer conexiones TCP a través de un outproxy HTTP, suponiendo " -"que el servidor proxy admita el comando CONNECT." +msgstr "Esto permite hacer conexiones TCP a través de un outproxy HTTP, suponiendo que el servidor proxy admita el comando CONNECT." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:257 msgid "A customised client tunnel for Streamr." @@ -1122,8 +1074,7 @@ msgstr "Un túnel de cliente personalizado para Streamr." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:267 msgid "A basic server tunnel for hosting a generic service inside I2P." -msgstr "" -"Un túnel básico de servidor para alojar un servicio genérico dentro de I2P." +msgstr "Un túnel básico de servidor para alojar un servicio genérico dentro de I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:271 msgid "A server tunnel that is customised for HTTP connections." @@ -1137,28 +1088,21 @@ msgstr "Utilice este tipo de túnel si desea alojar una eepsite." msgid "" "A customised server tunnel that can both serve HTTP data and connect to " "other server tunnels." -msgstr "" -"Un túnel de servidor personalizado que puede servir tanto datos HTTP como " -"conectar a otros túneles de servidor." +msgstr "Un túnel de servidor personalizado que puede servir tanto datos HTTP como conectar a otros túneles de servidor." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:277 msgid "This tunnel type is predominantly used when running a Seedless server." -msgstr "" -"Este tipo de túnel se utiliza principalmente cuando se ejecuta un servidor " -"sin semillas (Seedless)." +msgstr "Este tipo de túnel se utiliza principalmente cuando se ejecuta un servidor sin semillas (Seedless)." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:279 msgid "A customised server tunnel for hosting IRC networks inside I2P." -msgstr "" -"Un túnel de servidor personalizado para alojar redes IRC dentro de I2P." +msgstr "Un túnel de servidor personalizado para alojar redes IRC dentro de I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:281 msgid "" "Usually, a separate tunnel needs to be created for each IRC server that is " "to be accessible inside I2P." -msgstr "" -"Normalmente, se debe crear un túnel por separado para cada servidor IRC, que " -"será accesible dentro de I2P." +msgstr "Normalmente, se debe crear un túnel por separado para cada servidor IRC, que será accesible dentro de I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:283 msgid "A customised server tunnel for Streamr." @@ -1172,17 +1116,13 @@ msgstr "Elegir un nombre y una descripción para su túnel." msgid "" "These can be anything you want - they are just for ease of identifying the " "tunnel in the routerconsole." -msgstr "" -"Estos pueden ser lo que se quiera - son sólo para facilitar la " -"identificación del túnel en la consola del router." +msgstr "Estos pueden ser lo que se quiera - son sólo para facilitar la identificación del túnel en la consola del router." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:354 msgid "" "If you know of any outproxies for this type of tunnel (either HTTP or " "SOCKS), fill them in below." -msgstr "" -"Si conoce algún outproxie para este tipo de túnel (HTTP o SOCKS), rellénelo " -"a continuación." +msgstr "Si conoce algún outproxie para este tipo de túnel (HTTP o SOCKS), rellénelo a continuación." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:356 msgid "Separate multiple proxies with commas." @@ -1192,35 +1132,27 @@ msgstr "Separe múltiples servidores proxy con comas." msgid "" "Type in the I2P destination of the service that this client tunnel should " "connect to." -msgstr "" -"Introduzca el destino de I2P del servicio al que este túnel de cliente debe " -"conectarse." +msgstr "Introduzca el destino de I2P del servicio al que este túnel de cliente debe conectarse." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:376 msgid "" "This could be the full base 64 destination key, or an I2P URL from your " "address book." -msgstr "" -"Este puede ser la clave de destino en base 64 o una dirección URL I2P de su " -"libreta de direcciones." +msgstr "Este puede ser la clave de destino en base 64 o una dirección URL I2P de su libreta de direcciones." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:406 msgid "" "This is the IP that your service is running on, this is usually on the same " "machine so 127.0.0.1 is autofilled." -msgstr "" -"Esta es la IP en la que el servicio se está ejecutando, esto suele ser en la " -"misma máquina, por lo que se ha auto-rellenado con 127.0.0.1 " +msgstr "Esta es la IP en la que el servicio se está ejecutando, esto suele ser en la misma máquina, por lo que se ha auto-rellenado con 127.0.0.1 " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:429 msgid "This is the port that the service is accepting connections on." -msgstr "" -"Este es el puerto por el que el servicio está aceptando conexiones entrantes." +msgstr "Este es el puerto por el que el servicio está aceptando conexiones entrantes." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:450 msgid "This is the port that the client tunnel will be accessed from locally." -msgstr "" -"Este es el puerto por el que se accederá al túnel de cliente localmente." +msgstr "Este es el puerto por el que se accederá al túnel de cliente localmente." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:452 msgid "This is also the client port for the HTTPBidir server tunnel." @@ -1230,9 +1162,7 @@ msgstr "También es el puerto de cliente para el túnel de servidor HTTPBidir." msgid "" "How do you want this tunnel to be accessed? By just this machine, your " "entire subnet, or external internet?" -msgstr "" -"¿Cómo quiere que se acceda a este túnel? ¿Sólo esta máquina, su subred " -"entera, o todo el internet externo?" +msgstr "¿Cómo quiere que se acceda a este túnel? ¿Sólo esta máquina, su subred entera, o todo el internet externo?" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:473 msgid "You will most likely want to just allow 127.0.0.1" @@ -1242,41 +1172,30 @@ msgstr "Lo más probable es que desee permitir sólo 127.0.0.1" msgid "" "The I2P router can automatically start this tunnel for you when the router " "is started." -msgstr "" -"El router I2P puede activar automáticamente este túnel cuando el router se " -"inicie" +msgstr "El router I2P puede activar automáticamente este túnel cuando el router se inicie" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:517 msgid "" "This can be useful for frequently-used tunnels (especially server tunnels), " "but for tunnels that are only used occassionally it would mean that the I2P " "router is creating and maintaining unnecessary tunnels." -msgstr "" -"Esto puede ser útil para los túneles de uso frecuente (especialmente en los " -"túneles de servidor), pero para los túneles que sólo se utilizan " -"ocasionalmente, significarÃa que el router I2P está creando y manteniendo " -"túneles innecesarios." +msgstr "Esto puede ser útil para los túneles de uso frecuente (especialmente en los túneles de servidor), pero para los túneles que sólo se utilizan ocasionalmente, significarÃa que el router I2P está creando y manteniendo túneles innecesarios." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:543 msgid "The wizard has now collected enough information to create your tunnel." -msgstr "" -"El asistente ya ha recogido suficiente información para crear el túnel." +msgstr "El asistente ya ha recogido suficiente información para crear el túnel." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:545 msgid "" "Upon clicking the Save button below, the wizard will set up the tunnel, and " "take you back to the main I2PTunnel page." -msgstr "" -"Al hacer clic en el botón Guardar a continuación, el asistente creará el " -"túnel, y le llevará de vuelta a la página principal de túneles I2P." +msgstr "Al hacer clic en el botón Guardar a continuación, el asistente creará el túnel, y le llevará de vuelta a la página principal de túneles I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:550 msgid "" "Because you chose to automatically start the tunnel when the router starts, " "you don't have to do anything further." -msgstr "" -"Como ha decidido iniciar automáticamente el túnel cuando el router se " -"inicie, no tiene que hacer nada más." +msgstr "Como ha decidido iniciar automáticamente el túnel cuando el router se inicie, no tiene que hacer nada más." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:552 msgid "The router will start the tunnel once it has been set up." @@ -1286,17 +1205,13 @@ msgstr "El router iniciará el túnel una vez haya sido establecido." msgid "" "Because you chose not to automatically start the tunnel, you will have to " "manually start it." -msgstr "" -"Como usted ha decidido no iniciar automáticamente el túnel, tendrá que " -"iniciarlo de forma manual." +msgstr "Como usted ha decidido no iniciar automáticamente el túnel, tendrá que iniciarlo de forma manual." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:558 msgid "" "You can do this by clicking the Start button on the main page which " "corresponds to the new tunnel." -msgstr "" -"Esto se puede hacer haciendo clic en el botón Iniciar en la página principal " -"que corresponde al nuevo túnel." +msgstr "Esto se puede hacer haciendo clic en el botón Iniciar en la página principal que corresponde al nuevo túnel." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:562 msgid "Below is a summary of the options you chose:" @@ -1306,19 +1221,14 @@ msgstr "A continuación se muestra un resumen de las opciones que ha elegido:" msgid "" "Alongside these basic settings, there are a number of advanced options for " "tunnel configuration." -msgstr "" -"Junto a estos valores básicos, hay una serie de opciones avanzadas para la " -"configuración de túneles." +msgstr "Junto a estos valores básicos, hay una serie de opciones avanzadas para la configuración de túneles." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:662 msgid "" "The wizard will set reasonably sensible default values for these, but you " "can view and/or edit these by clicking on the tunnel's name in the main " "I2PTunnel page." -msgstr "" -"El asistente establecerá valores razonablemente sensibles para ellos por " -"defecto, pero se pueden ver y/o editar haciendo clic en el nombre del túnel " -"en la página de túneles I2P principal." +msgstr "El asistente establecerá valores razonablemente sensibles para ellos por defecto, pero se pueden ver y/o editar haciendo clic en el nombre del túnel en la página de túneles I2P principal." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:704 msgid "Previous" diff --git a/apps/i2ptunnel/locale/messages_it.po b/apps/i2ptunnel/locale/messages_it.po index 6df2bc725353d75c611f9eecdbc3b4417eb1f637..8e2217db2e0856eb1807806ad639912004216f91 100644 --- a/apps/i2ptunnel/locale/messages_it.po +++ b/apps/i2ptunnel/locale/messages_it.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: I2P\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-12 00:46+0000\n" -"PO-Revision-Date: 2012-10-12 00:40+0000\n" -"Last-Translator: kytv <killyourtv@i2pmail.org>\n" +"POT-Creation-Date: 2012-10-15 17:57+0000\n" +"PO-Revision-Date: 2012-10-12 00:51+0000\n" +"Last-Translator: BadCluster <badcluster@i2pmail.org>\n" "Language-Team: Italian (http://www.transifex.com/projects/p/I2P/language/" "it/)\n" "Language: it\n" @@ -185,11 +185,11 @@ msgstr "Porta non impostata" #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463 #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:589 msgid "Invalid port" -msgstr "" +msgstr "Porta non valida" #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466 msgid "Warning - ports less than 1024 are not recommended" -msgstr "" +msgstr "Attenzione - E' meglio non utilizzare porte inderiori alla 1024" #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:482 msgid "Standard client" @@ -246,7 +246,7 @@ msgstr "Host non impostato" #: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:583 msgid "Invalid address" -msgstr "" +msgstr "Indirizzo non valido" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:82 msgid "I2P Tunnel Manager - Edit Client Tunnel" diff --git a/apps/i2ptunnel/locale/messages_pt.po b/apps/i2ptunnel/locale/messages_pt.po new file mode 100644 index 0000000000000000000000000000000000000000..a8ffa151ecb3b8cfaf71516a365e5a15be42a9ec --- /dev/null +++ b/apps/i2ptunnel/locale/messages_pt.po @@ -0,0 +1,1259 @@ +# I2P +# Copyright (C) 2009 The I2P Project +# This file is distributed under the same license as the i2ptunnel package. +# To contribute translations, see http://www.i2p2.de/newdevelopers +# +# Translators: +# <wicked@riseup.net>, 2012. +msgid "" +msgstr "" +"Project-Id-Version: I2P\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-10-19 07:45+0000\n" +"PO-Revision-Date: 2012-10-18 23:41+0000\n" +"Last-Translator: wicked <wicked@riseup.net>\n" +"Language-Team: Portuguese (http://www.transifex.com/projects/p/I2P/language/" +"pt/)\n" +"Language: pt\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" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554 +msgid "This seems to be a bad destination:" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554 +msgid "i2paddresshelper cannot help you with a destination like that!" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:621 +#, java-format +msgid "" +"To visit the destination in your host database, click <a href=\"{0}\">here</" +"a>. To visit the conflicting addresshelper destination, click <a href=" +"\"{1}\">here</a>." +msgstr "" +"Para visitar o destino da sua base de dados, clique <a href=\"{0}\">aqui</" +"a>. Para visitar o endereço de ajuda do conflito, clique <a href=" +"\"{1}\">aqui</a>." + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1023 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:403 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:153 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:407 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:410 +msgid "Host" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1027 +msgid "Base 32" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1031 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:374 +msgid "Destination" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1037 +#, java-format +msgid "Continue to {0} without saving" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1042 +#, java-format +msgid "Save {0} to router address book and continue to eepsite" +msgstr "" + +#. only blockfile supports multiple books +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1045 +#, java-format +msgid "Save {0} to master address book and continue to eepsite" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1046 +#, java-format +msgid "Save {0} to private address book and continue to eepsite" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1211 +msgid "HTTP Outproxy" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1216 +msgid "" +"Click a link below to look for an address helper by using a \"jump\" service:" +msgstr "" +"Clique no link abaixo para procurar um ajudante de endereços usando um " +"serviço \"jump\":" + +#. Translators: parameter is a host name +#: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1252 +#, java-format +msgid "{0} jump service" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:159 +msgid "Added via address helper" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:183 +#, java-format +msgid "Redirecting to {0}" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:189 +msgid "Router Console" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:190 +msgid "Addressbook" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:190 +msgid "Configuration" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:190 +msgid "Help" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:195 +#, java-format +msgid "Saved {0} to the {1} addressbook, redirecting now." +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:196 +#, java-format +msgid "Failed to save {0} to the {1} addressbook, redirecting now." +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/localServer/LocalHTTPServer.java:198 +msgid "Click here if you are not redirected automatically." +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:332 +#: ../java/src/net/i2p/i2ptunnel/web/EditBean.java:342 +msgid "internal" +msgstr "interno" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175 +msgid "" +"Invalid form submission, probably because you used the 'back' or 'reload' " +"button on your browser. Please resubmit." +msgstr "" +"Envio de formulário inválido, provavelmente porque você usou o 'voltar' ou " +"'recarregar' no seu navegador. Por favor reenvie." + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222 +msgid "Configuration reloaded for all tunnels" +msgstr "Configuração recarregada em todos os túneis" + +#. and give them something to look at in any case +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234 +msgid "Starting tunnel" +msgstr "Iniciar túnel" + +#. and give them something to look at in any case +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247 +msgid "Stopping tunnel" +msgstr "Parar túnel" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315 +msgid "Configuration changes saved" +msgstr "As configurações foram guardadas" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318 +msgid "Failed to save configuration" +msgstr "Falha a guardar as configurações" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:437 +msgid "New Tunnel" +msgstr "Novo Túnel" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:470 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:587 +msgid "Port not set" +msgstr "Porto não definido" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:589 +msgid "Invalid port" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466 +msgid "Warning - ports less than 1024 are not recommended" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:482 +msgid "Standard client" +msgstr "Cliente padrão" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:483 +msgid "HTTP client" +msgstr "Cliente HTTP" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:484 +msgid "IRC client" +msgstr "Cliente IRC" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:485 +msgid "Standard server" +msgstr "Servidor Padrão" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:486 +msgid "HTTP server" +msgstr "Servidor HTTP" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:487 +msgid "SOCKS 4/4a/5 proxy" +msgstr "SOCKS 4/4a/5 proxy" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:488 +msgid "SOCKS IRC proxy" +msgstr "SOCKS IRC proxy" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:489 +msgid "CONNECT/SSL/HTTPS proxy" +msgstr "CONNECT/SSL/HTTPS proxy" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:490 +msgid "IRC server" +msgstr "Servidor IRC" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:491 +msgid "Streamr client" +msgstr "Cliente Streamr" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:492 +msgid "Streamr server" +msgstr "Servidor Streamr" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:493 +msgid "HTTP bidir" +msgstr "HTTP bidir" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:581 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:299 +msgid "Host not set" +msgstr "Host por definir" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:583 +msgid "Invalid address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:82 +msgid "I2P Tunnel Manager - Edit Client Tunnel" +msgstr "Gestor de Túnel I2P - Editar o Cliente do Túnel" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:104 +msgid "Edit proxy settings" +msgstr "Editar as definições da proxy" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:112 +msgid "New proxy settings" +msgstr "Novas definições da proxy" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:123 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:123 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:123 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:137 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:257 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:272 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:326 +msgid "Name" +msgstr "Nome" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:127 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:127 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:261 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:288 +msgid "Type" +msgstr "Tipo" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:131 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:131 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:393 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330 +msgid "Description" +msgstr "Descrição" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:137 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:147 +msgid "Target" +msgstr "Alvo" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:141 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:143 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:173 +msgid "Access Point" +msgstr "Ponto de Acesso" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:148 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:161 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:164 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:178 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:223 +msgid "required" +msgstr "obrigatório" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:169 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:188 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:479 +msgid "Reachable by" +msgstr "Ao alcance de" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:190 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:358 +msgid "Outproxies" +msgstr "Proxys de saÃda" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:197 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:378 +msgid "Tunnel Destination" +msgstr "Destino do Túnel" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:382 +msgid "name or destination" +msgstr "nome ou destino" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:385 +msgid "b32 not recommended" +msgstr "b32 não é recomendado" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:217 +msgid "Shared Client" +msgstr "Cliente Partilhado" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:221 +msgid "" +"(Share tunnels with other clients and irc/httpclients? Change requires " +"restart of client proxy)" +msgstr "" +"(Compartilhe túneis com outros clientes e IRC / httpclients? Mudança requer " +"a reinicialização do proxy do cliente)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:225 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:135 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:519 +msgid "Auto Start" +msgstr "Inicio Automático" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:229 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:237 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:523 +msgid "(Check the Box for 'YES')" +msgstr "(Marque a Caixa para 'SIM')" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:233 +msgid "Enable DCC" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:241 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:253 +msgid "Advanced networking options" +msgstr "Opções avançadas da rede" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:243 +msgid "" +"(NOTE: when this client proxy is configured to share tunnels, then these " +"options are for all the shared proxy clients!)" +msgstr "" +"(NOTA: quando esse cliente proxy é configurado para partilhar túneis, então, " +"essas opções são para todos os clientes proxy compartilhados!)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:245 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:255 +msgid "Tunnel Options" +msgstr "Opções de Túnel" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:247 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:257 +msgid "Length" +msgstr "Comprimento" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:254 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:264 +msgid "0 hop tunnel (low anonymity, low latency)" +msgstr "0 túneis de salto (baixo anonimato, baixa latência)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:258 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:268 +msgid "1 hop tunnel (medium anonymity, medium latency)" +msgstr "1 túnel de salto (médio anonimato, média latência)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:262 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:272 +msgid "2 hop tunnel (high anonymity, high latency)" +msgstr "2 túneis de salto (alto anonimato, alta latência)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:266 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:276 +msgid "3 hop tunnel (very high anonymity, poor performance)" +msgstr "3 túneis de salto (muito alto anonimato, muito alta latência)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:274 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:284 +msgid "hop tunnel (very poor performance)" +msgstr "túnel de salto (muito baixa performance)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:279 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:289 +msgid "Variance" +msgstr "Variação" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:286 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:296 +msgid "0 hop variance (no randomisation, consistant performance)" +msgstr "0 variações de salto (sem randomização, performance constante)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:300 +msgid "" +"+ 0-1 hop variance (medium additive randomisation, subtractive performance)" +msgstr "" +"+ 0-1 variações de salto (randomização aditivada media, performance " +"subtraÃda)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:304 +msgid "" +"+ 0-2 hop variance (high additive randomisation, subtractive performance)" +msgstr "" +"+ 0-2 variações de salto (randomização aditivada alta, performance subtraÃda)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:298 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:308 +msgid "+/- 0-1 hop variance (standard randomisation, standard performance)" +msgstr "+/- 0-1 variações de salto (randomização padrão, performance padrão)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:302 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:312 +msgid "+/- 0-2 hop variance (not recommended)" +msgstr "+/- 0-2 variações de salto (não recomendado)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:313 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:323 +msgid "hop variance" +msgstr "variação de salto" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:318 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:328 +msgid "Count" +msgstr "Contar" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335 +msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)" +msgstr "" +"1 entrada, 1 túnel de saÃda (baixo uso de largura de banda, menor confiança)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:329 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:339 +msgid "" +"2 inbound, 2 outbound tunnels (standard bandwidth usage, standard " +"reliability)" +msgstr "" +"2 entrada, 2 túneis de saÃda (uso de largura de banda padrão, confiança " +"padrão)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:333 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:343 +msgid "" +"3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)" +msgstr "" +"3 entrada, 3 túneis de saÃda (uso de largura de banda alto, alta confiança)" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:341 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:351 +msgid "tunnels" +msgstr "túneis" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:346 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:356 +msgid "Backup Count" +msgstr "Contagem de Backups" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:353 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:363 +msgid "0 backup tunnels (0 redundancy, no added resource usage)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:357 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:367 +msgid "1 backup tunnel each direction (low redundancy, low resource usage)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:361 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:371 +msgid "" +"2 backup tunnels each direction (medium redundancy, medium resource usage)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:375 +msgid "3 backup tunnels each direction (high redundancy, high resource usage)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:373 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:383 +msgid "backup tunnels" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:380 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:390 +msgid "Profile" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:387 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:397 +msgid "interactive connection" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:391 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:401 +msgid "bulk connection (downloads/websites/BT)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:393 +msgid "Delay Connect" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:397 +msgid "for request/response connections" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:401 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:405 +msgid "Router I2CP Address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:411 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:159 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:415 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:259 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:281 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:431 +msgid "Port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:421 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:485 +msgid "Reduce tunnel quantity when idle" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:423 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:437 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:445 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:457 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:467 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:486 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:500 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:425 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:487 +msgid "Enable" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:427 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:491 +msgid "Reduced tunnel count" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:431 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:451 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:495 +msgid "Idle minutes" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:435 +msgid "Close tunnels when idle" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:441 +msgid "New Keys on Reopen" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:449 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:441 +msgid "Disable" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:455 +msgid "Delay tunnel open until required" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:465 +msgid "Persistent private key" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:471 +msgid "File" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:475 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:230 +msgid "Local destination" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:479 +msgid "(if known)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:484 +msgid "Local Authorization" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:490 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:504 +msgid "Username" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:494 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:508 +msgid "Password" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:498 +msgid "Outproxy Authorization" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:515 +msgid "Jump URL List" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:521 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:531 +msgid "Custom options" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:525 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:535 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:699 +msgid "Cancel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:529 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:539 +msgid "Delete" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:531 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:541 +msgid "Save" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:82 +msgid "I2P Tunnel Manager - Edit Server Tunnel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:104 +msgid "Edit server settings" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:112 +msgid "New server settings" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:209 +msgid "Website name" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:213 +msgid "(leave blank for outproxies)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:218 +msgid "Private key file" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:240 +msgid "Add to local addressbook" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:247 +msgid "Hostname Signature" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:423 +msgid "Encrypt Leaseset" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:429 +msgid "Encryption Key" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:433 +msgid "Generate New Key" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:435 +msgid "Generate" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:437 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:529 +msgid "(Tunnel must be stopped first)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:439 +msgid "Restricted Access List" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:445 +msgid "Whitelist" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:449 +msgid "Blacklist" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:453 +msgid "Access List" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:457 +msgid "Inbound connection limits (0=unlimited)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:459 +msgid "Per client" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:461 +msgid "Per minute" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:465 +msgid "Per hour" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:469 +msgid "Per day" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:473 +msgid "Total" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:481 +msgid "Max concurrent connections (0=unlimited)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:499 +msgid "New Certificate type" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:501 +msgid "None" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:505 +msgid "Hashcash (effort)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:511 +msgid "Hashcash Calc Time" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:513 +msgid "Estimate" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:515 +msgid "Hidden" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:519 +msgid "Signed (signed by)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:525 +msgid "Modify Certificate" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:527 +msgid "Modify" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:83 +msgid "I2P Tunnel Manager - List" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:97 +msgid "Status Messages" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:101 +msgid "Refresh" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:103 +msgid "Tunnel Wizard" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:107 +msgid "Stop All" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:111 +msgid "Start All" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:115 +msgid "Restart All" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:119 +msgid "Reload Config" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:121 +msgid "I2P Server Tunnels" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:125 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:146 +msgid "Points at" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:127 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:168 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:172 +msgid "Preview" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:129 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:192 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:306 +msgid "Status" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:178 +msgid "Base32 Address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:186 +msgid "No Preview" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:199 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:313 +msgid "Starting..." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:206 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:320 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:334 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:348 +msgid "Stop" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:213 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:341 +msgid "Running" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:227 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:355 +msgid "Stopped" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:362 +msgid "Start" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:249 +msgid "New server tunnel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:403 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:301 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:573 +msgid "Standard" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:405 +msgid "Create" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:255 +msgid "I2P Client Tunnels" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:263 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:292 +msgid "Interface" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:327 +msgid "Standby" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:371 +msgid "Outproxy" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:388 +msgid "none" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401 +msgid "New client tunnel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:119 +msgid "I2P Tunnel Manager - Tunnel Creation Wizard" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:564 +msgid "Server or client tunnel?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:145 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:568 +msgid "Tunnel type" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:151 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:598 +msgid "Tunnel name and description" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:157 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:607 +msgid "Tunnel destination" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:163 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:623 +msgid "Binding address and port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:169 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:649 +msgid "Tunnel auto-start" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:175 +msgid "Wizard completed" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:189 +msgid "" +"This wizard will take you through the various options available for creating " +"tunnels in I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:191 +msgid "" +"The first thing to decide is whether you want to create a server or a client " +"tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:193 +msgid "" +"If you need to connect to a remote service, such as an IRC server inside I2P " +"or a code repository, then you will require a CLIENT tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:195 +msgid "" +"On the other hand, if you wish to host a service for others to connect to " +"you'll need to create a SERVER tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:197 +msgid "Server Tunnel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:199 +msgid "Client Tunnel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:217 +msgid "There are several types of tunnels to choose from:" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:225 +msgid "Basic tunnel for connecting to a single service inside I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:227 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:269 +msgid "" +"Try this if none of the tunnel types below fit your requirements, or you " +"don't know what type of tunnel you need." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:229 +msgid "Tunnel that acts as an HTTP proxy for reaching eepsites inside I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:231 +msgid "" +"Set your browser to use this tunnel as an http proxy, or set your " +"\"http_proxy\" environment variable for command-line applications in GNU/" +"Linux." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:233 +msgid "" +"Websites outside I2P can also be reached if an HTTP proxy within I2P is " +"known." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:235 +msgid "Customised client tunnel specific for IRC connections." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:237 +msgid "" +"With this tunnel type, your IRC client will be able to connect to an IRC " +"network inside I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:239 +msgid "" +"Each IRC network in I2P that you wish to connect to will require its own " +"tunnel. (See Also, SOCKS IRC)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:241 +msgid "A tunnel that implements the SOCKS protocol." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:243 +msgid "" +"This enables both TCP and UDP connections to be made through a SOCKS " +"outproxy within I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:245 +msgid "" +"A client tunnel implementing the SOCKS protocol, which is customised for " +"connecting to IRC networks." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:247 +msgid "" +"With this tunnel type, IRC networks in I2P can be reached by typing the I2P " +"address into your IRC client, and configuring the IRC client to use this " +"SOCKS tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:249 +msgid "" +"This means that only one I2P tunnel is required rather than a separate " +"tunnel per IRC network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:251 +msgid "" +"IRC networks outside I2P can also be reached if a SOCKS outproxy within I2P " +"is known, though it depends on whether or not the outproxy has been blocked " +"by the IRC network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:253 +msgid "A client tunnel that implements the HTTP CONNECT command." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:255 +msgid "" +"This enables TCP connections to be made through an HTTP outproxy, assuming " +"the proxy supports the CONNECT command." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:257 +msgid "A customised client tunnel for Streamr." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:267 +msgid "A basic server tunnel for hosting a generic service inside I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:271 +msgid "A server tunnel that is customised for HTTP connections." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:273 +msgid "Use this tunnel type if you want to host an eepsite." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:275 +msgid "" +"A customised server tunnel that can both serve HTTP data and connect to " +"other server tunnels." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:277 +msgid "This tunnel type is predominantly used when running a Seedless server." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:279 +msgid "A customised server tunnel for hosting IRC networks inside I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:281 +msgid "" +"Usually, a separate tunnel needs to be created for each IRC server that is " +"to be accessible inside I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:283 +msgid "A customised server tunnel for Streamr." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:322 +msgid "Choose a name and description for your tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:324 +msgid "" +"These can be anything you want - they are just for ease of identifying the " +"tunnel in the routerconsole." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:354 +msgid "" +"If you know of any outproxies for this type of tunnel (either HTTP or " +"SOCKS), fill them in below." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:356 +msgid "Separate multiple proxies with commas." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:374 +msgid "" +"Type in the I2P destination of the service that this client tunnel should " +"connect to." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:376 +msgid "" +"This could be the full base 64 destination key, or an I2P URL from your " +"address book." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:406 +msgid "" +"This is the IP that your service is running on, this is usually on the same " +"machine so 127.0.0.1 is autofilled." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:429 +msgid "This is the port that the service is accepting connections on." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:450 +msgid "This is the port that the client tunnel will be accessed from locally." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:452 +msgid "This is also the client port for the HTTPBidir server tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:471 +msgid "" +"How do you want this tunnel to be accessed? By just this machine, your " +"entire subnet, or external internet?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:473 +msgid "You will most likely want to just allow 127.0.0.1" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:515 +msgid "" +"The I2P router can automatically start this tunnel for you when the router " +"is started." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:517 +msgid "" +"This can be useful for frequently-used tunnels (especially server tunnels), " +"but for tunnels that are only used occassionally it would mean that the I2P " +"router is creating and maintaining unnecessary tunnels." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:543 +msgid "The wizard has now collected enough information to create your tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:545 +msgid "" +"Upon clicking the Save button below, the wizard will set up the tunnel, and " +"take you back to the main I2PTunnel page." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:550 +msgid "" +"Because you chose to automatically start the tunnel when the router starts, " +"you don't have to do anything further." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:552 +msgid "The router will start the tunnel once it has been set up." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:556 +msgid "" +"Because you chose not to automatically start the tunnel, you will have to " +"manually start it." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:558 +msgid "" +"You can do this by clicking the Start button on the main page which " +"corresponds to the new tunnel." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:562 +msgid "Below is a summary of the options you chose:" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:660 +msgid "" +"Alongside these basic settings, there are a number of advanced options for " +"tunnel configuration." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:662 +msgid "" +"The wizard will set reasonably sensible default values for these, but you " +"can view and/or edit these by clicking on the tunnel's name in the main " +"I2PTunnel page." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:704 +msgid "Previous" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:712 +msgid "Save Tunnel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:718 +msgid "Finish" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:724 +msgid "Next" +msgstr "" diff --git a/apps/i2ptunnel/locale/messages_sv.po b/apps/i2ptunnel/locale/messages_sv.po index d55649d575b4db010b59a1bb2409735b598eec58..3389e08f70b1125f1ffea1f3f6671395099cbed5 100644 --- a/apps/i2ptunnel/locale/messages_sv.po +++ b/apps/i2ptunnel/locale/messages_sv.po @@ -2,23 +2,22 @@ # Copyright (C) 2009 The I2P Project # This file is distributed under the same license as the i2ptunnel package. # To contribute translations, see http://www.i2p2.de/newdevelopers -# +# # Translators: # Martin Svensson <digitalmannen@gmail.com>, 2011, 2012. msgid "" msgstr "" "Project-Id-Version: I2P\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-26 19:10+0000\n" -"PO-Revision-Date: 2012-07-23 16:31+0000\n" -"Last-Translator: Martin Svensson <digitalmannen@gmail.com>\n" -"Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/I2P/" -"language/sv_SE/)\n" -"Language: sv_SE\n" +"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n" +"POT-Creation-Date: 2012-10-12 00:38+0000\n" +"PO-Revision-Date: 2012-10-12 00:40+0000\n" +"Last-Translator: kytv <killyourtv@i2pmail.org>\n" +"Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/I2P/language/sv_SE/)\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" +"Language: sv_SE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:554 msgid "This seems to be a bad destination:" @@ -31,13 +30,10 @@ msgstr "i2padresshjälp kan inte hjälpa dig med ett sÃ¥dant mÃ¥l!" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:621 #, java-format msgid "" -"To visit the destination in your host database, click <a href=\"{0}\">here</" -"a>. To visit the conflicting addresshelper destination, click <a href=" -"\"{1}\">here</a>." -msgstr "" -"För att besöka mÃ¥let i din värd databas href=\"{0}\"> klicka <a här </ a>. " -"För att besöka de motstridiga hjälpaddresserna,<a href=\"{1}\"> klicka <a " -"här </ a>." +"To visit the destination in your host database, click <a " +"href=\"{0}\">here</a>. To visit the conflicting addresshelper destination, " +"click <a href=\"{1}\">here</a>." +msgstr "För att besöka mÃ¥let i din värd databas href=\"{0}\"> klicka <a här </ a>. För att besöka de motstridiga hjälpaddresserna,<a href=\"{1}\"> klicka <a här </ a>." #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1023 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:403 @@ -52,7 +48,7 @@ msgid "Base 32" msgstr "Bas 32" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1031 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:380 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:374 msgid "Destination" msgstr "MÃ¥l" @@ -83,10 +79,9 @@ msgstr "HTTP Utproxy" #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1216 msgid "" -"Click a link below to look for an address helper by using a \"jump\" service:" -msgstr "" -"Klicka pÃ¥ en länk nedan för att söka efter en hjälpaddress genom att använda " -"en \"hopp\" tjänst" +"Click a link below to look for an address helper by using a \"jump\" " +"service:" +msgstr "Klicka pÃ¥ en länk nedan för att söka efter en hjälpaddress genom att använda en \"hopp\" tjänst" #. Translators: parameter is a host name #: ../java/src/net/i2p/i2ptunnel/I2PTunnelHTTPClient.java:1252 @@ -138,97 +133,109 @@ msgstr "Klicka här om du inte omdirigeras automatiskt " msgid "internal" msgstr "Intern " -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:174 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:175 msgid "" "Invalid form submission, probably because you used the 'back' or 'reload' " "button on your browser. Please resubmit." -msgstr "" -"Ogiltigt formulärbegäran, beror troligtvis pÃ¥ attt du använde 'tillbaka' " -"eller 'uppdatera' knappen. Försök att skicka igen" +msgstr "Ogiltigt formulärbegäran, beror troligtvis pÃ¥ attt du använde 'tillbaka' eller 'uppdatera' knappen. Försök att skicka igen" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:221 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:222 msgid "Configuration reloaded for all tunnels" msgstr "Konfigurationen uppdateras för alla tunnlar" #. and give them something to look at in any case -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:233 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:234 msgid "Starting tunnel" msgstr "Startar tunnel" #. and give them something to look at in any case -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:246 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:247 msgid "Stopping tunnel" msgstr "Stannar tunnel" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:314 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:315 msgid "Configuration changes saved" msgstr "Konfigurationsändringar sparas" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:317 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:318 msgid "Failed to save configuration" msgstr "Det gick inte att spara konfigurationen" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:436 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:437 msgid "New Tunnel" msgstr "Ny tunnel" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:456 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:470 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:587 +msgid "Port not set" +msgstr "Ingen port angiven" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:589 +msgid "Invalid port" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466 +msgid "Warning - ports less than 1024 are not recommended" +msgstr "" + +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:482 msgid "Standard client" msgstr "Standard klient" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:457 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:483 msgid "HTTP client" msgstr "HTTP-klient" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:458 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:484 msgid "IRC client" msgstr "IRC-klient" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:459 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:485 msgid "Standard server" msgstr "Standard server" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:460 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:486 msgid "HTTP server" msgstr "HTTP server" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:461 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:487 msgid "SOCKS 4/4a/5 proxy" msgstr "SOCKS 4/4a/5 proxy" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:462 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:488 msgid "SOCKS IRC proxy" msgstr "SOCKS IRC proxy" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:463 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:489 msgid "CONNECT/SSL/HTTPS proxy" msgstr "CONNECT/SSL/HTTPS proxy" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:464 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:490 msgid "IRC server" msgstr "IRC-server" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:465 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:491 msgid "Streamr client" msgstr "Klient för Streamr " -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:466 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:492 msgid "Streamr server" msgstr "Server för Streamr" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:467 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:493 msgid "HTTP bidir" msgstr "HTTP bidir" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:555 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:305 +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:581 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:299 msgid "Host not set" msgstr "Ingen värd angiven" -#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:559 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:287 -msgid "Port not set" -msgstr "Ingen port angiven" +#: ../java/src/net/i2p/i2ptunnel/web/IndexBean.java:583 +msgid "Invalid address" +msgstr "" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:82 msgid "I2P Tunnel Manager - Edit Client Tunnel" @@ -255,14 +262,14 @@ msgstr "Namn" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:127 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:127 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:261 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:288 msgid "Type" msgstr "Typ" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:131 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:131 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:241 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:399 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:393 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:330 msgid "Description" msgstr "Beskrivning" @@ -321,9 +328,7 @@ msgstr "Delad klient" msgid "" "(Share tunnels with other clients and irc/httpclients? Change requires " "restart of client proxy)" -msgstr "" -"(Dela tunnlarna med andra klienter och irc/HTTP-klienter? Ändring kräver " -"omstart av klientproxyn)" +msgstr "(Dela tunnlarna med andra klienter och irc/HTTP-klienter? Ändring kräver omstart av klientproxyn)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:225 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:135 @@ -351,9 +356,7 @@ msgstr "Avancerade nätverks instälningar" msgid "" "(NOTE: when this client proxy is configured to share tunnels, then these " "options are for all the shared proxy clients!)" -msgstr "" -"(OBS: när denna klientproxyn är konfigurerad för att dela tunnlar, dÃ¥ gäller " -"dessa alternativ för alla delade proxyklienter!)" +msgstr "(OBS: när denna klientproxyn är konfigurerad för att dela tunnlar, dÃ¥ gäller dessa alternativ för alla delade proxyklienter!)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:245 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:255 @@ -435,26 +438,20 @@ msgstr "Antal" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:325 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:335 msgid "1 inbound, 1 outbound tunnel (low bandwidth usage, less reliability)" -msgstr "" -"1 inkommande, 1 utgÃ¥ende tunnlar (lÃ¥g bandbreddsanvändning, lÃ¥g " -"tillförlitlighet)" +msgstr "1 inkommande, 1 utgÃ¥ende tunnlar (lÃ¥g bandbreddsanvändning, lÃ¥g tillförlitlighet)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:329 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:339 msgid "" "2 inbound, 2 outbound tunnels (standard bandwidth usage, standard " "reliability)" -msgstr "" -"2 inkommande, 2 utgÃ¥ende tunnlar (normal bandbreddsanvändning, normal " -"tillförlitlighet)" +msgstr "2 inkommande, 2 utgÃ¥ende tunnlar (normal bandbreddsanvändning, normal tillförlitlighet)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:333 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:343 msgid "" "3 inbound, 3 outbound tunnels (higher bandwidth usage, higher reliability)" -msgstr "" -"3 inkommande, 3 utgÃ¥ende tunnlar (Högre bandbreddsanvändning, högre " -"tillförlitlighet)" +msgstr "3 inkommande, 3 utgÃ¥ende tunnlar (Högre bandbreddsanvändning, högre tillförlitlighet)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:341 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:351 @@ -469,8 +466,7 @@ msgstr "Antal reserver" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:353 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:363 msgid "0 backup tunnels (0 redundancy, no added resource usage)" -msgstr "" -"0 reserv tunnlar i varje riktning (ingen redundans, ingen resursanvändning)" +msgstr "0 reserv tunnlar i varje riktning (ingen redundans, ingen resursanvändning)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:357 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:367 @@ -481,15 +477,12 @@ msgstr "1 reserv tunnel i varje riktning (lÃ¥g redundans, lÃ¥g resursanvändning #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:371 msgid "" "2 backup tunnels each direction (medium redundancy, medium resource usage)" -msgstr "" -"2 reserv tunnlar i varje riktning (medel hög redundans, medel hög " -"resursanvändning)" +msgstr "2 reserv tunnlar i varje riktning (medel hög redundans, medel hög resursanvändning)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:365 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:375 msgid "3 backup tunnels each direction (high redundancy, high resource usage)" -msgstr "" -"3 reserv tunnlar i varje riktning (hög redundans, hög resursanvändning)" +msgstr "3 reserv tunnlar i varje riktning (hög redundans, hög resursanvändning)" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editClient_jsp.java:373 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/editServer_jsp.java:383 @@ -821,7 +814,7 @@ msgstr "förhandsvisning" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:129 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:192 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:265 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:312 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:306 msgid "Status" msgstr "Status" @@ -834,30 +827,30 @@ msgid "No Preview" msgstr "Ingen förhandsvisning" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:199 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:319 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:313 msgid "Starting..." msgstr "Startar..." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:206 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:220 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:326 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:340 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:354 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:320 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:334 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:348 msgid "Stop" msgstr "Stopp" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:213 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:347 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:341 msgid "Running" msgstr "Kör" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:227 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:361 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:355 msgid "Stopped" msgstr "Stoppad" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:234 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:368 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:362 msgid "Start" msgstr "Start" @@ -866,7 +859,7 @@ msgid "New server tunnel" msgstr "Ny severtunnel " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:251 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:409 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:403 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:223 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:265 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:295 @@ -876,7 +869,7 @@ msgid "Standard" msgstr "Standard" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:253 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:411 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:405 msgid "Create" msgstr "Skapa" @@ -885,23 +878,23 @@ msgid "I2P Client Tunnels" msgstr "I2P Klienttunnel" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:263 -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:298 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:292 msgid "Interface" msgstr "Gränssnitt " -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:333 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:327 msgid "Standby" msgstr "Standby" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:377 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:371 msgid "Outproxy" msgstr "Utproxy" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:394 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:388 msgid "none" msgstr "Ingen" -#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:407 +#: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/index_jsp.java:401 msgid "New client tunnel" msgstr "Ny klienttunnel" @@ -945,33 +938,27 @@ msgstr "Guiden färdig " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:189 msgid "" -"This wizard will take you through the various options available for creating " -"tunnels in I2P." -msgstr "" -"Guiden tar dig igenom de olika inställningsmöjligheterna för att skapa " -"tunnlar." +"This wizard will take you through the various options available for creating" +" tunnels in I2P." +msgstr "Guiden tar dig igenom de olika inställningsmöjligheterna för att skapa tunnlar." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:191 msgid "" -"The first thing to decide is whether you want to create a server or a client " -"tunnel." -msgstr "" -"Det första är att bestämma om det skall vara en server- eller klient-tunnel. " +"The first thing to decide is whether you want to create a server or a client" +" tunnel." +msgstr "Det första är att bestämma om det skall vara en server- eller klient-tunnel. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:193 msgid "" -"If you need to connect to a remote service, such as an IRC server inside I2P " -"or a code repository, then you will require a CLIENT tunnel." -msgstr "" -"Om du ansluter till en fjärrtjänst sÃ¥ som tex en IRC-server inom I2P, behövs " -"en KLIENT-tunnel. " +"If you need to connect to a remote service, such as an IRC server inside I2P" +" or a code repository, then you will require a CLIENT tunnel." +msgstr "Om du ansluter till en fjärrtjänst sÃ¥ som tex en IRC-server inom I2P, behövs en KLIENT-tunnel. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:195 msgid "" "On the other hand, if you wish to host a service for others to connect to " "you'll need to create a SERVER tunnel." -msgstr "" -"Men om du vill göra en tjänst tillgänglig för andra behövs en SERVER-tunnel." +msgstr "Men om du vill göra en tjänst tillgänglig för andra behövs en SERVER-tunnel." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:197 msgid "Server Tunnel" @@ -987,32 +974,25 @@ msgstr "Det finns flera typer av tunnlar att välja pÃ¥:" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:225 msgid "Basic tunnel for connecting to a single service inside I2P." -msgstr "" -"Grundläggande tunnel för anslutning till en snigel tjänst innanför I2P. " +msgstr "Grundläggande tunnel för anslutning till en snigel tjänst innanför I2P. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:227 #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:269 msgid "" "Try this if none of the tunnel types below fit your requirements, or you " "don't know what type of tunnel you need." -msgstr "" -"Prova detta om ingen av valen passar eller du inte vet vilken typ av tunnel " -"som behövs." +msgstr "Prova detta om ingen av valen passar eller du inte vet vilken typ av tunnel som behövs." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:229 msgid "Tunnel that acts as an HTTP proxy for reaching eepsites inside I2P." -msgstr "" -"Tunneln agerar som en HTTP-proxy för att komma Ã¥t eepsites innanför I2P. " +msgstr "Tunneln agerar som en HTTP-proxy för att komma Ã¥t eepsites innanför I2P. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:231 msgid "" "Set your browser to use this tunnel as an http proxy, or set your " -"\"http_proxy\" environment variable for command-line applications in GNU/" -"Linux." -msgstr "" -"Peka din webbläsare pÃ¥ denna tunnel som en http-proxy eller ställ in " -"miljövariabeln \"http_proxy\" för terminal baserade applikationer i GNU/" -"Linux." +"\"http_proxy\" environment variable for command-line applications in " +"GNU/Linux." +msgstr "Peka din webbläsare pÃ¥ denna tunnel som en http-proxy eller ställ in miljövariabeln \"http_proxy\" för terminal baserade applikationer i GNU/Linux." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:233 msgid "" @@ -1034,9 +1014,7 @@ msgstr "Med denna tunneltyp kan IRC-klienter ansluta till IRC-nät inom I2P " msgid "" "Each IRC network in I2P that you wish to connect to will require its own " "tunnel. (See Also, SOCKS IRC)" -msgstr "" -"Varje IRC-nät inom I2P som du vill ansluta till kräver en egen tunnel (Se " -"även: SOCKS IRC) " +msgstr "Varje IRC-nät inom I2P som du vill ansluta till kräver en egen tunnel (Se även: SOCKS IRC) " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:241 msgid "A tunnel that implements the SOCKS protocol." @@ -1046,9 +1024,7 @@ msgstr "En tunnel som implementerar SOCKS protokollet." msgid "" "This enables both TCP and UDP connections to be made through a SOCKS " "outproxy within I2P." -msgstr "" -"Detta möjliggör bÃ¥de TCP och UDP anslutningar genom SOCKS utgÃ¥ende-proxy " -"innanför I2P " +msgstr "Detta möjliggör bÃ¥de TCP och UDP anslutningar genom SOCKS utgÃ¥ende-proxy innanför I2P " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:245 msgid "" @@ -1061,27 +1037,20 @@ msgid "" "With this tunnel type, IRC networks in I2P can be reached by typing the I2P " "address into your IRC client, and configuring the IRC client to use this " "SOCKS tunnel." -msgstr "" -"Med denna tunnel typen kan IRC-nät inom I2P nÃ¥s genom att skriva in I2P " -"adressen i IRC-klienten och konfigurera IRC-klienten att använda denna SOCKS-" -"tunneln." +msgstr "Med denna tunnel typen kan IRC-nät inom I2P nÃ¥s genom att skriva in I2P adressen i IRC-klienten och konfigurera IRC-klienten att använda denna SOCKS-tunneln." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:249 msgid "" "This means that only one I2P tunnel is required rather than a separate " "tunnel per IRC network." -msgstr "" -"Detta innebär att enbart en I2P-tunnel behövs istället för en tunnel per IRC-" -"nät." +msgstr "Detta innebär att enbart en I2P-tunnel behövs istället för en tunnel per IRC-nät." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:251 msgid "" "IRC networks outside I2P can also be reached if a SOCKS outproxy within I2P " "is known, though it depends on whether or not the outproxy has been blocked " "by the IRC network." -msgstr "" -"IRC-nät utanför I2P kan nÃ¥s om en SOCKS-proxy innanför I2P är känd, men det " -"bror pÃ¥ om utgÃ¥ende-proxy har blockerats av IRC-nätet." +msgstr "IRC-nät utanför I2P kan nÃ¥s om en SOCKS-proxy innanför I2P är känd, men det bror pÃ¥ om utgÃ¥ende-proxy har blockerats av IRC-nätet." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:253 msgid "A client tunnel that implements the HTTP CONNECT command." @@ -1091,9 +1060,7 @@ msgstr "En klient-tunnel som implementerar HTTP CONNECT kommandot. " msgid "" "This enables TCP connections to be made through an HTTP outproxy, assuming " "the proxy supports the CONNECT command." -msgstr "" -"Detta möjliggör TCP anslutningar genom en HTTP utgÃ¥ende-proxy om proxyn " -"stödjer CONNECT kommandot" +msgstr "Detta möjliggör TCP anslutningar genom en HTTP utgÃ¥ende-proxy om proxyn stödjer CONNECT kommandot" #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:257 msgid "A customised client tunnel for Streamr." @@ -1115,9 +1082,7 @@ msgstr "Använd denna denna typ av tunnel om du vill köra en eepsite." msgid "" "A customised server tunnel that can both serve HTTP data and connect to " "other server tunnels." -msgstr "" -"En anpassad server tunnel som hanterar bÃ¥de HTTP data och anslutningar till " -"andra server-tunnlar." +msgstr "En anpassad server tunnel som hanterar bÃ¥de HTTP data och anslutningar till andra server-tunnlar." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:277 msgid "This tunnel type is predominantly used when running a Seedless server." @@ -1131,9 +1096,7 @@ msgstr "En server-tunnel för IRC-Nät innanför I2P." msgid "" "Usually, a separate tunnel needs to be created for each IRC server that is " "to be accessible inside I2P." -msgstr "" -"Vanligtvis behövs en separat tunnel för varje IRC-server som skall anslutas " -"till innanför I2P." +msgstr "Vanligtvis behövs en separat tunnel för varje IRC-server som skall anslutas till innanför I2P." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:283 msgid "A customised server tunnel for Streamr." @@ -1147,17 +1110,13 @@ msgstr "Välj namn och beskrivning av tunneln." msgid "" "These can be anything you want - they are just for ease of identifying the " "tunnel in the routerconsole." -msgstr "" -"Kan vad som helst, används enbart för att enkelt identifiera tunneln i " -"routerkonsolen " +msgstr "Kan vad som helst, används enbart för att enkelt identifiera tunneln i routerkonsolen " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:354 msgid "" "If you know of any outproxies for this type of tunnel (either HTTP or " "SOCKS), fill them in below." -msgstr "" -"Om du känner till nÃ¥gra utgÃ¥ende proxies för denna typen av tunnlar (HTTP " -"eller SOCKS), fyll i dem nedan. " +msgstr "Om du känner till nÃ¥gra utgÃ¥ende proxies för denna typen av tunnlar (HTTP eller SOCKS), fyll i dem nedan. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:356 msgid "Separate multiple proxies with commas." @@ -1179,9 +1138,7 @@ msgstr "Kan vara hela base 64 mÃ¥lsnyckeln eller en I2P URL frÃ¥n adressboken." msgid "" "This is the IP that your service is running on, this is usually on the same " "machine so 127.0.0.1 is autofilled." -msgstr "" -"Detta är IP-adressen som tjänsten körs pÃ¥, detta är vanligtvis pÃ¥ samma " -"maskin sÃ¥ 127.0.0.1 fylls i automatiskt. " +msgstr "Detta är IP-adressen som tjänsten körs pÃ¥, detta är vanligtvis pÃ¥ samma maskin sÃ¥ 127.0.0.1 fylls i automatiskt. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:429 msgid "This is the port that the service is accepting connections on." @@ -1199,9 +1156,7 @@ msgstr "Detta är ocksÃ¥ en klient-port för HTTPBidir server-tunneln." msgid "" "How do you want this tunnel to be accessed? By just this machine, your " "entire subnet, or external internet?" -msgstr "" -"Hur du vill att tunneln ska nÃ¥s? Enbart denna maskinen, ditt lokala nät " -"eller hela internet? " +msgstr "Hur du vill att tunneln ska nÃ¥s? Enbart denna maskinen, ditt lokala nät eller hela internet? " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:473 msgid "You will most likely want to just allow 127.0.0.1" @@ -1218,10 +1173,7 @@ msgid "" "This can be useful for frequently-used tunnels (especially server tunnels), " "but for tunnels that are only used occassionally it would mean that the I2P " "router is creating and maintaining unnecessary tunnels." -msgstr "" -"Detta kan vara användbart för tunnlar som används ofta (tex server-tunnlar) " -"men för tunnlar som används sällan innebär det att onödiga tunnlar " -"upprättas. " +msgstr "Detta kan vara användbart för tunnlar som används ofta (tex server-tunnlar) men för tunnlar som används sällan innebär det att onödiga tunnlar upprättas. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:543 msgid "The wizard has now collected enough information to create your tunnel." @@ -1231,17 +1183,13 @@ msgstr "Guiden hat samlat tillräckligt med information för att skapa tunneln. msgid "" "Upon clicking the Save button below, the wizard will set up the tunnel, and " "take you back to the main I2PTunnel page." -msgstr "" -"När du klickar pÃ¥ \"spara\" kommer guiden att skapa tunneln och sedan ta dig " -"till sidan för tunnlar." +msgstr "När du klickar pÃ¥ \"spara\" kommer guiden att skapa tunneln och sedan ta dig till sidan för tunnlar." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:550 msgid "" "Because you chose to automatically start the tunnel when the router starts, " "you don't have to do anything further." -msgstr "" -"Efter som du valt att starta tunneln samtidigt som routern startas behövs " -"inget mer göras. " +msgstr "Efter som du valt att starta tunneln samtidigt som routern startas behövs inget mer göras. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:552 msgid "The router will start the tunnel once it has been set up." @@ -1251,9 +1199,7 @@ msgstr "Routern starta tunneln när den skapats. " msgid "" "Because you chose not to automatically start the tunnel, you will have to " "manually start it." -msgstr "" -"Efter som du valt att inte starta tunneln samtidigt som routern startas, " -"behövs den startas manuellt." +msgstr "Efter som du valt att inte starta tunneln samtidigt som routern startas, behövs den startas manuellt." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:558 msgid "" @@ -1269,18 +1215,14 @@ msgstr "Nedan är en sammanfattning över valen du kan göra:" msgid "" "Alongside these basic settings, there are a number of advanced options for " "tunnel configuration." -msgstr "" -"Vid sidan om dessa grundägande inställningar finns att par avancerade val " -"för tunneln. " +msgstr "Vid sidan om dessa grundägande inställningar finns att par avancerade val för tunneln. " #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:662 msgid "" "The wizard will set reasonably sensible default values for these, but you " "can view and/or edit these by clicking on the tunnel's name in the main " "I2PTunnel page." -msgstr "" -"Guiden väljer lämpliga värden för dessa. Men du kan ändra/se värdena pÃ¥ " -"huvudsidan för I2P-tunnlar." +msgstr "Guiden väljer lämpliga värden för dessa. Men du kan ändra/se värdena pÃ¥ huvudsidan för I2P-tunnlar." #: ../jsp/WEB-INF/classes/net/i2p/i2ptunnel/jsp/wizard_jsp.java:704 msgid "Previous" diff --git a/apps/jetty/java/src/net/i2p/jetty/JettyStart.java b/apps/jetty/java/src/net/i2p/jetty/JettyStart.java new file mode 100644 index 0000000000000000000000000000000000000000..f5b3295b546deeff4525c7aceab865df990c72d6 --- /dev/null +++ b/apps/jetty/java/src/net/i2p/jetty/JettyStart.java @@ -0,0 +1,170 @@ +package net.i2p.jetty; + +// Contains code from org.mortbay.xml.XmlConfiguation: + +// ======================================================================== +// Copyright 2004-2005 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ======================================================================== + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +import net.i2p.I2PAppContext; +import net.i2p.app.*; +import static net.i2p.app.ClientAppState.*; + +import org.mortbay.component.LifeCycle; +import org.mortbay.resource.Resource; +import org.mortbay.xml.XmlConfiguration; + +/** + * Start Jetty where the args are one or more XML files. + * Save a reference to the Server so it can be cleanly stopped later. + * + * This is like XmlConfiguration.main(), which is essentially what + * org.mortbay.start.Main does. + * + * @since 0.9.4 + */ +public class JettyStart implements ClientApp { + + private final I2PAppContext _context; + private final ClientAppManager _mgr; + private final String[] _args; + private final List<LifeCycle> _jettys; + private volatile ClientAppState _state; + + /** + * All args must be XML file names. + * Does not support any of the other argument types from org.mortbay.start.Main. + */ + public JettyStart(I2PAppContext context, ClientAppManager mgr, String[] args) throws Exception { + _state = UNINITIALIZED; + _context = context; + _mgr = mgr; + _args = args; + _jettys = new ArrayList(args.length); + parseArgs(args); + _state = INITIALIZED; + } + + /** + * Modified from XmlConfiguration.main() + */ + public void parseArgs(String[] args) throws Exception { + Properties properties=new Properties(); + XmlConfiguration last=null; + for (int i = 0; i < args.length; i++) { + if (args[i].toLowerCase().endsWith(".properties")) { + properties.load(Resource.newResource(args[i]).getInputStream()); + } else { + XmlConfiguration configuration = new XmlConfiguration(Resource.newResource(args[i]).getURL()); + if (last!=null) + configuration.getIdMap().putAll(last.getIdMap()); + if (properties.size()>0) + configuration.setProperties(properties); + Object o = configuration.configure(); + if (o instanceof LifeCycle) + _jettys.add((LifeCycle)o); + last=configuration; + } + } + } + + public void startup() { + if (_state != INITIALIZED) + return; + if (_jettys.isEmpty()) { + changeState(START_FAILED); + } else { + (new Starter()).start(); + } + } + + private class Starter extends Thread { + public Starter() { + super("JettyStarter"); + } + + /** + * Modified from XmlConfiguration.main() + */ + public void run() { + changeState(STARTING); + for (LifeCycle lc : _jettys) { + if (!lc.isRunning()) { + try { + lc.start(); + } catch (Exception e) { + changeState(START_FAILED, e); + return; + } + } + } + changeState(RUNNING); + } + } + + public void shutdown(String[] args) { + if (_state != RUNNING) + return; + if (_jettys.isEmpty()) { + changeState(STOPPED); + } else { + (new Stopper()).start(); + } + } + + private class Stopper extends Thread { + public Stopper() { + super("JettyStopper"); + } + + public void run() { + changeState(STOPPING); + for (LifeCycle lc : _jettys) { + if (lc.isRunning()) { + try { + lc.stop(); + } catch (Exception e) { + changeState(STOPPING, e); + } + } + } + changeState(STOPPED); + } + } + + public ClientAppState getState() { + return _state; + } + + public String getName() { + return "Jetty"; + } + + public String getDisplayName() { + return "Jetty " + Arrays.toString(_args); + } + + private void changeState(ClientAppState state) { + changeState(state, null); + } + + private synchronized void changeState(ClientAppState state, Exception e) { + _state = state; + _mgr.notify(this, state, null, e); + } +} diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ShitlistRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java similarity index 89% rename from apps/routerconsole/java/src/net/i2p/router/web/ShitlistRenderer.java rename to apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java index 1c1c39ac3638111c86045a2a3e35a7bef004de82..276a6a5df205421a1ad0d4e2ced3ec14e065b8b1 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ShitlistRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java @@ -18,15 +18,15 @@ import java.util.TreeMap; import net.i2p.data.DataHelper; import net.i2p.data.Hash; import net.i2p.router.RouterContext; -import net.i2p.router.Shitlist; +import net.i2p.router.Banlist; /** - * Moved from Shitlist.java + * Moved from Banlist.java */ -public class ShitlistRenderer { +public class BanlistRenderer { private final RouterContext _context; - public ShitlistRenderer(RouterContext context) { + public BanlistRenderer(RouterContext context) { _context = context; } @@ -40,9 +40,9 @@ public class ShitlistRenderer { StringBuilder buf = new StringBuilder(1024); // move to the jsp //buf.append("<h2>Banned Peers</h2>"); - Map<Hash, Shitlist.Entry> entries = new TreeMap(new HashComparator()); + Map<Hash, Banlist.Entry> entries = new TreeMap(new HashComparator()); - entries.putAll(_context.shitlist().getEntries()); + entries.putAll(_context.banlist().getEntries()); if (entries.isEmpty()) { buf.append("<i>").append(_("none")).append("</i>"); out.write(buf.toString()); @@ -51,9 +51,9 @@ public class ShitlistRenderer { buf.append("<ul>"); - for (Map.Entry<Hash, Shitlist.Entry> e : entries.entrySet()) { + for (Map.Entry<Hash, Banlist.Entry> e : entries.entrySet()) { Hash key = e.getKey(); - Shitlist.Entry entry = e.getValue(); + Banlist.Entry entry = e.getValue(); long expires = entry.expireOn-_context.clock().now(); if (expires <= 0) continue; diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java index 038d61d1bcf48fb6886914ab19dd606bffff7c82..851b7ab0b96535135224dacf09974b52d15e5bdc 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHandler.java @@ -23,7 +23,6 @@ import org.mortbay.jetty.handler.ContextHandlerCollection; * Saves changes to clients.config or webapps.config */ public class ConfigClientsHandler extends FormHandler { - private Map _settings; @Override protected void processForm() { @@ -171,8 +170,6 @@ public class ConfigClientsHandler extends FormHandler { } - public void setSettings(Map settings) { _settings = new HashMap(settings); } - private void saveClientChanges() { List<ClientAppConfig> clients = ClientAppConfig.getClientApps(_context); for (int cur = 0; cur < clients.size(); cur++) { @@ -216,15 +213,8 @@ public class ConfigClientsHandler extends FormHandler { } ClientAppConfig.writeClientAppConfig(_context, clients); - addFormNotice(_("Client configuration saved successfully - restart required to take effect.")); - } - - /** curses Jetty for returning arrays */ - private String getJettyString(String key) { - String[] arr = (String[]) _settings.get(key); - if (arr == null) - return null; - return arr[0].trim(); + addFormNotice(_("Client configuration saved successfully")); + addFormNotice(_("Restart required to take effect")); } // STUB for stopClient, not completed yet. @@ -248,7 +238,7 @@ public class ConfigClientsHandler extends FormHandler { return; } ClientAppConfig ca = clients.get(i); - LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), _log); + LoadClientAppsJob.runClient(ca.className, ca.clientName, LoadClientAppsJob.parseArgs(ca.args), _context, _log); addFormNotice(_("Client") + ' ' + _(ca.clientName) + ' ' + _("started") + '.'); } @@ -264,7 +254,7 @@ public class ConfigClientsHandler extends FormHandler { } private void saveWebAppChanges() { - Properties props = RouterConsoleRunner.webAppProperties(); + Properties props = RouterConsoleRunner.webAppProperties(_context); Set keys = props.keySet(); for (Iterator iter = keys.iterator(); iter.hasNext(); ) { String name = (String)iter.next(); @@ -275,7 +265,7 @@ public class ConfigClientsHandler extends FormHandler { if (! RouterConsoleRunner.ROUTERCONSOLE.equals(app)) props.setProperty(name, "" + (val != null)); } - RouterConsoleRunner.storeWebAppProperties(props); + RouterConsoleRunner.storeWebAppProperties(_context, props); addFormNotice(_("WebApp configuration saved.")); } @@ -416,11 +406,12 @@ public class ConfigClientsHandler extends FormHandler { if (intfc != null) changes.put(ClientManagerFacadeImpl.PROP_CLIENT_HOST, intfc); String user = getJettyString("user"); - if (user != null) - changes.put(ConfigClientsHelper.PROP_USER, user); String pw = getJettyString("pw"); - if (pw != null) - changes.put(ConfigClientsHelper.PROP_PW, pw); + if (user != null && pw != null && user.length() > 0 && pw.length() > 0) { + ConsolePasswordManager mgr = new ConsolePasswordManager(_context); + mgr.saveHash(ConfigClientsHelper.PROP_AUTH, user, pw); + addFormNotice(_("Added user {0}", user)); + } String mode = getJettyString("mode"); boolean disabled = "0".equals(mode); boolean ssl = "2".equals(mode); @@ -433,9 +424,10 @@ public class ConfigClientsHandler extends FormHandler { boolean all = "0.0.0.0".equals(intfc) || "0:0:0:0:0:0:0:0".equals(intfc) || "::".equals(intfc); changes.put(ConfigClientsHelper.BIND_ALL_INTERFACES, Boolean.toString(all)); - if (_context.router().saveConfig(changes, null)) - addFormNotice(_("Interface configuration saved successfully - restart required to take effect.")); - else + if (_context.router().saveConfig(changes, null)) { + addFormNotice(_("Interface configuration saved")); + addFormNotice(_("Restart required to take effect")); + } else addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs")); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java index b4a1155ffcc4eee69439d2350f88a7674905af6b..80251d217a2818eecc8a016c77d914c7980de7c6 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigClientsHelper.java @@ -24,8 +24,6 @@ public class ConfigClientsHelper extends HelperBase { public static final String PROP_ENABLE_SSL = "i2cp.SSL"; /** from ClientMessageEventListener */ public static final String PROP_AUTH = "i2cp.auth"; - public static final String PROP_USER = "i2cp.username"; - public static final String PROP_PW = "i2cp.password"; public ConfigClientsHelper() {} @@ -35,16 +33,6 @@ public class ConfigClientsHelper extends HelperBase { Integer.toString(ClientManagerFacadeImpl.DEFAULT_PORT)); } - /** @since 0.8.3 */ - public String getUser() { - return _context.getProperty(PROP_USER, ""); - } - - /** @since 0.8.3 */ - public String getPw() { - return _context.getProperty(PROP_PW, ""); - } - /** @since 0.8.3 */ public String i2cpModeChecked(int mode) { boolean disabled = _context.getBooleanProperty(PROP_DISABLE_EXTERNAL); @@ -128,7 +116,7 @@ public class ConfigClientsHelper extends HelperBase { StringBuilder buf = new StringBuilder(1024); buf.append("<table>\n"); buf.append("<tr><th align=\"right\">" + _("WebApp") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n"); - Properties props = RouterConsoleRunner.webAppProperties(); + Properties props = RouterConsoleRunner.webAppProperties(_context); Set<String> keys = new TreeSet(props.keySet()); for (Iterator<String> iter = keys.iterator(); iter.hasNext(); ) { String name = iter.next(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java index e944f367eca055df5bac60f68848f5df5268539f..c8b3d0e74545f8f1d3b2ad133e999030afc74583 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigHomeHandler.java @@ -1,11 +1,9 @@ package net.i2p.router.web; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.Map; import net.i2p.data.DataHelper; @@ -16,8 +14,6 @@ import net.i2p.data.DataHelper; */ public class ConfigHomeHandler extends FormHandler { - private Map _settings; - @Override protected void processForm() { if (_action == null) return; @@ -106,14 +102,4 @@ public class ConfigHomeHandler extends FormHandler { addFormError(_("Unsupported")); } } - - public void setSettings(Map settings) { _settings = new HashMap(settings); } - - /** curses Jetty for returning arrays */ - private String getJettyString(String key) { - String[] arr = (String[]) _settings.get(key); - if (arr == null) - return null; - return arr[0].trim(); - } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java index cd1f103caf3cc9d109c708681c269301e8b67e76..67c47fbb7f7a6b88cb1be0a5dee5289b27745330 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigNetHandler.java @@ -280,9 +280,10 @@ public class ConfigNetHandler extends FormHandler { _upnp) { // This is minor, don't set restartRequired if (_upnp) - addFormNotice(_("Enabling UPnP, restart required to take effect")); + addFormNotice(_("Enabling UPnP")); else - addFormNotice(_("Disabling UPnP, restart required to take effect")); + addFormNotice(_("Disabling UPnP")); + addFormNotice(_("Restart required to take effect")); } changes.put(TransportManager.PROP_ENABLE_UPNP, "" + _upnp); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java index 5af095d2c49489eec5101cf5e977eac81b5c9aa5..350bae04924daf061338f888ba2f3918b800033f 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigPeerHandler.java @@ -20,7 +20,7 @@ public class ConfigPeerHandler extends FormHandler { } else if (_action.equals(_("Ban peer until restart"))) { Hash h = getHash(); if (h != null) { - _context.shitlist().shitlistRouterForever(h, _("Manually banned via {0}"), "<a href=\"configpeer\">configpeer</a>"); + _context.banlist().banlistRouterForever(h, _("Manually banned via {0}"), "<a href=\"configpeer\">configpeer</a>"); addFormNotice(_("Peer") + " " + _peer + " " + _("banned until restart") ); return; } @@ -28,8 +28,8 @@ public class ConfigPeerHandler extends FormHandler { } else if (_action.equals(_("Unban peer"))) { Hash h = getHash(); if (h != null) { - if (_context.shitlist().isShitlisted(h)) { - _context.shitlist().unshitlistRouter(h); + if (_context.banlist().isBanlisted(h)) { + _context.banlist().unbanlistRouter(h); addFormNotice(_("Peer") + " " + _peer + " " + _("unbanned") ); } else addFormNotice(_("Peer") + " " + _peer + " " + _("is not currently banned") ); 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 53da37bc7ade63700a0d61d44fc48269888f84ac..09f7a8934378be1804e73a7317434fcb15db5d22 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigReseedHandler.java @@ -11,7 +11,6 @@ import net.i2p.router.networkdb.reseed.Reseeder; * @since 0.8.3 */ public class ConfigReseedHandler extends FormHandler { - private Map _settings; private final Map<String, String> changes = new HashMap(); private final List<String> removes = new ArrayList(); @@ -34,16 +33,6 @@ public class ConfigReseedHandler extends FormHandler { } addFormError(_("Unsupported") + ' ' + _action + '.'); } - - public void setSettings(Map settings) { _settings = new HashMap(settings); } - - /** curses Jetty for returning arrays */ - private String getJettyString(String key) { - String[] arr = (String[]) _settings.get(key); - if (arr == null) - return null; - return arr[0].trim(); - } /** @since 0.8.9 */ private void saveString(String config, String param) { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java index 3419ba2146c125cacb03a170a7e36032bed2bc06..5a1b6c807b854e0fe0d20895a98c8307e25f990c 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigServiceHandler.java @@ -8,6 +8,7 @@ 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.PortMapper; import net.i2p.util.SystemVersion; import net.i2p.util.VersionComparator; @@ -257,7 +258,9 @@ public class ConfigServiceHandler extends FormHandler { } // releases <= 0.6.5 deleted the entry completely if (shouldLaunchBrowser && !found) { - ClientAppConfig ca = new ClientAppConfig(UrlLauncher.class.getName(), "consoleBrowser", "http://127.0.0.1:7657", 5, false); + int port = _context.portMapper().getPort(PortMapper.SVC_CONSOLE, RouterConsoleRunner.DEFAULT_LISTEN_PORT); + ClientAppConfig ca = new ClientAppConfig(UrlLauncher.class.getName(), "consoleBrowser", + "http://127.0.0.1:" + port + '/', 5, false); clients.add(ca); } ClientAppConfig.writeClientAppConfig(_context, clients); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java index 07f220f7a096268399173627aeb66170b7de1c7f..e867a8b32fa6a6187d26b8b1f21dfb4bccafd133 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHandler.java @@ -116,9 +116,10 @@ public class ConfigStatsHandler extends FormHandler { addFormNotice(_("Stat filter and location updated successfully to") + ": " + stats.toString()); if (fullChanged) { if (_isFull) - addFormNotice(_("Full statistics enabled - restart required to take effect")); + addFormNotice(_("Full statistics enabled")); else - addFormNotice(_("Full statistics disabled - restart required to take effect")); + addFormNotice(_("Full statistics disabled")); + addFormNotice(_("Restart required to take effect")); } if (graphsChanged) addFormNotice(_("Graph list updated, may take up to 60s to be reflected here and on the <a href=\"graphs.jsp\">Graphs Page</a>")); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java index 7d5c2677697f409091aec6ec3a349a99d6f083e7..9965f63c305c7afd034e3219cb0ef6202a3388b6 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigSummaryHandler.java @@ -1,7 +1,6 @@ package net.i2p.router.web; import java.util.Collection; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; @@ -16,8 +15,6 @@ import net.i2p.data.DataHelper; * @since 0.9.1 */ public class ConfigSummaryHandler extends FormHandler { - - private Map _settings; @Override protected void processForm() { @@ -144,16 +141,6 @@ public class ConfigSummaryHandler extends FormHandler { } } - public void setSettings(Map settings) { _settings = new HashMap(settings); } - - /** curses Jetty for returning arrays */ - private String getJettyString(String key) { - String[] arr = (String[]) _settings.get(key); - if (arr == null) - return null; - return arr[0].trim(); - } - public void setMovingAction() { for (Object o : _settings.keySet()) { if (!(o instanceof String)) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java index 9616e74b348c03408964e0a063fa239ab3670113..923395096f9d384d89fa878b41c3f9b6fb0c4a07 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHandler.java @@ -13,8 +13,13 @@ public class ConfigUIHandler extends FormHandler { @Override protected void processForm() { - if (_shouldSave) + if (_shouldSave) { saveChanges(); + } else if (_action.equals(_("Delete selected"))) { + delUser(); + } else if (_action.equals(_("Add user"))) { + addUser(); + } } public void setShouldsave(String moo) { _shouldSave = true; } @@ -51,4 +56,48 @@ public class ConfigUIHandler extends FormHandler { addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs.")); } } + + private void addUser() { + String name = getJettyString("name"); + if (name == null || name.length() <= 0) { + addFormError(_("No user name entered")); + return; + } + String pw = getJettyString("pw"); + if (pw == null || pw.length() <= 0) { + addFormError(_("No password entered")); + return; + } + ConsolePasswordManager mgr = new ConsolePasswordManager(_context); + // rfc 2617 + if (mgr.saveMD5(RouterConsoleRunner.PROP_CONSOLE_PW, RouterConsoleRunner.JETTY_REALM, name, pw)) { + if (!_context.getBooleanProperty(RouterConsoleRunner.PROP_PW_ENABLE)) + _context.router().saveConfig(RouterConsoleRunner.PROP_PW_ENABLE, "true"); + addFormNotice(_("Added user {0}", name)); + addFormNotice(_("Restart required to take effect")); + } else { + addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs.")); + } + } + + private void delUser() { + ConsolePasswordManager mgr = new ConsolePasswordManager(_context); + boolean success = false; + for (Object o : _settings.keySet()) { + if (!(o instanceof String)) + continue; + String k = (String) o; + if (!k.startsWith("delete_")) + continue; + k = k.substring(7); + if (mgr.remove(RouterConsoleRunner.PROP_CONSOLE_PW, k)) { + addFormNotice(_("Removed user {0}", k)); + success = true; + } else { + addFormError(_("Error saving the configuration (applied but not saved) - please see the error logs.")); + } + } + if (success) + addFormNotice(_("Restart required to take effect")); + } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java index 990572ab489aacaf8fd214a602018d4cef450361..273c8521d8ce656961b62f83b911b169576deac5 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java @@ -2,8 +2,9 @@ package net.i2p.router.web; import java.io.File; import java.util.Iterator; -import java.util.TreeSet; +import java.util.Map; import java.util.Set; +import java.util.TreeSet; public class ConfigUIHelper extends HelperBase { @@ -87,4 +88,38 @@ public class ConfigUIHelper extends HelperBase { } return buf.toString(); } + + /** @since 0.9.4 */ + public String getPasswordForm() { + StringBuilder buf = new StringBuilder(512); + ConsolePasswordManager mgr = new ConsolePasswordManager(_context); + Map<String, String> userpw = mgr.getMD5(RouterConsoleRunner.PROP_CONSOLE_PW); + buf.append("<table>"); + if (userpw.isEmpty()) { + buf.append("<tr><td colspan=\"3\">"); + buf.append(_("Add a user and password to enable.")); + buf.append("</td></tr>"); + } else { + buf.append("<tr><th>") + .append(_("Remove")) + .append("</th><th>") + .append(_("User Name")) + .append("</th><th> </th></tr>\n"); + for (String name : userpw.keySet()) { + buf.append("<tr><td align=\"center\"><input type=\"checkbox\" class=\"optbox\" name=\"delete_") + .append(name) + .append("\"></td><td colspan=\"2\">") + .append(name) + .append("</td></tr>\n"); + } + } + buf.append("<tr><td align=\"center\"><b>") + .append(_("Add")).append(":</b>" + + "</td><td align=\"left\"><input type=\"text\" name=\"name\">" + + "</td><td align=\"left\"><b>"); + buf.append(_("Password")).append(":</b> " + + "<input type=\"password\" size=\"40\" name=\"pw\"></td></tr>" + + "</table>\n"); + return buf.toString(); + } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConsolePasswordManager.java b/apps/routerconsole/java/src/net/i2p/router/web/ConsolePasswordManager.java new file mode 100644 index 0000000000000000000000000000000000000000..681d6bcb3de05f83105009e8adbc3f93bfc4af17 --- /dev/null +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConsolePasswordManager.java @@ -0,0 +1,213 @@ +package net.i2p.router.web; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.i2p.data.Base64; +import net.i2p.data.DataHelper; +import net.i2p.router.Router; +import net.i2p.router.RouterContext; +import net.i2p.router.util.RouterPasswordManager; + +//import org.mortbay.jetty.security.UnixCrypt; + +/** + * Manage both plaintext and salted/hashed password storage in + * router.config. + * + * @since 0.9.4 + */ +public class ConsolePasswordManager extends RouterPasswordManager { + + private static final String PROP_MIGRATED = "routerconsole.passwordManager.migrated"; + // migrate these to hash + private static final String PROP_CONSOLE_OLD = "consolePassword"; + private static final String CONSOLE_USER = "admin"; + + public ConsolePasswordManager(RouterContext ctx) { + super(ctx); + migrateConsole(); + } + + /** + * The username is the salt + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return if pw verified + */ +/**** + public boolean checkCrypt(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String cr = _context.getProperty(pfx + PROP_CRYPT); + if (cr == null) + return false; + return cr.equals(UnixCrypt.crypt(pw, cr)); + } +****/ + + /** + * Straight MD5. Compatible with Jetty. + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return if pw verified + */ + public boolean checkMD5(String realm, String subrealm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String hex = _context.getProperty(pfx + PROP_MD5); + if (hex == null) + return false; + return hex.equals(md5Hex(subrealm, user, pw)); + } + + /** + * Get all MD5 usernames and passwords. Compatible with Jetty. + * Any "null" user is NOT included.. + * + * @param realm e.g. i2cp, routerconsole, etc. + * @return Map of usernames to passwords (hex with leading zeros, 32 characters) + */ + public Map<String, String> getMD5(String realm) { + String pfx = realm + '.'; + Map<String, String> rv = new HashMap(4); + for (Map.Entry<String, String> e : _context.router().getConfigMap().entrySet()) { + String prop = e.getKey(); + if (prop.startsWith(pfx) && prop.endsWith(PROP_MD5)) { + String user = prop.substring(0, prop.length() - PROP_MD5.length()).substring(pfx.length()); + String hex = e.getValue(); + if (user.length() > 0 && hex.length() == 32) + rv.put(user, hex); + } + } + return rv; + } + + /** + * Migrate from plaintext to MD5 hash + * Ref: RFC 2617 + * + * @return success or nothing to migrate + */ + private boolean migrateConsole() { + synchronized(ConsolePasswordManager.class) { + if (_context.getBooleanProperty(PROP_MIGRATED)) + return true; + // consolePassword + String pw = _context.getProperty(PROP_CONSOLE_OLD); + if (pw != null) { + Map toAdd = new HashMap(2); + if (pw.length() > 0) { + saveMD5(RouterConsoleRunner.PROP_CONSOLE_PW, RouterConsoleRunner.JETTY_REALM, + CONSOLE_USER, pw); + toAdd.put(RouterConsoleRunner.PROP_PW_ENABLE, "true"); + } + toAdd.put(PROP_MIGRATED, "true"); + List toDel = Collections.singletonList(PROP_CONSOLE_OLD); + return _context.router().saveConfig(toAdd, toDel); + } + return true; + } + } + + /** + * This will fail if + * user contains '#' or '=' or starts with '!' + * The user is the salt. + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return success + */ +/**** + public boolean saveCrypt(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String salt = user != null ? user : ""; + String crypt = UnixCrypt.crypt(pw, salt); + Map<String, String> toAdd = Collections.singletonMap(pfx + PROP_CRYPT, crypt); + List<String> toDel = new ArrayList(4); + toDel.add(pfx + PROP_PW); + toDel.add(pfx + PROP_B64); + toDel.add(pfx + PROP_MD5); + toDel.add(pfx + PROP_SHASH); + return _context.router().saveConfig(toAdd, toDel); + } +****/ + + /** + * Straight MD5, no salt + * Compatible with Jetty and RFC 2617. + * + * @param realm The full realm, e.g. routerconsole.auth.i2prouter, etc. + * @param subrealm to be used in creating the checksum + * @param user non-null, non-empty, already trimmed + * @param pw plain text + * @return if pw verified + */ + public boolean saveMD5(String realm, String subrealm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String hex = md5Hex(subrealm, user, pw); + if (hex == null) + return false; + Map<String, String> toAdd = Collections.singletonMap(pfx + PROP_MD5, hex); + List<String> toDel = new ArrayList(4); + toDel.add(pfx + PROP_PW); + toDel.add(pfx + PROP_B64); + toDel.add(pfx + PROP_CRYPT); + toDel.add(pfx + PROP_SHASH); + return _context.router().saveConfig(toAdd, toDel); + } + + public static void main(String args[]) { + RouterContext ctx = (new Router()).getContext(); + ConsolePasswordManager pm = new ConsolePasswordManager(ctx); + if (!pm.migrate()) + System.out.println("Fail 1"); + if (!pm.migrateConsole()) + System.out.println("Fail 1a"); + + System.out.println("Test plain"); + if (!pm.savePlain("type1", "user1", "pw1")) + System.out.println("Fail 2"); + if (!pm.checkPlain("type1", "user1", "pw1")) + System.out.println("Fail 3"); + + System.out.println("Test B64"); + if (!pm.saveB64("type2", "user2", "pw2")) + System.out.println("Fail 4"); + if (!pm.checkB64("type2", "user2", "pw2")) + System.out.println("Fail 5"); + + System.out.println("Test MD5"); + if (!pm.saveMD5("type3", "realm", "user3", "pw3")) + System.out.println("Fail 6"); + if (!pm.checkMD5("type3", "realm", "user3", "pw3")) + System.out.println("Fail 7"); + + //System.out.println("Test crypt"); + //if (!pm.saveCrypt("type4", "user4", "pw4")) + // System.out.println("Fail 8"); + //if (!pm.checkCrypt("type4", "user4", "pw4")) + // System.out.println("Fail 9"); + + System.out.println("Test hash"); + if (!pm.saveHash("type5", "user5", "pw5")) + System.out.println("Fail 10"); + if (!pm.checkHash("type5", "user5", "pw5")) + System.out.println("Fail 11"); + } +} diff --git a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java index 2f16cd359bc8d5e4f82aacc4689735c1814b0722..ba5856632a851e85f49bb391cfb14ff79ff4eb37 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/FormHandler.java @@ -1,7 +1,9 @@ package net.i2p.router.web; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import net.i2p.router.RouterContext; import net.i2p.util.Log; @@ -18,16 +20,14 @@ import net.i2p.util.Log; public class FormHandler { protected RouterContext _context; protected Log _log; - private String _nonce; + protected Map _settings; + private String _nonce, _nonce1, _nonce2; protected String _action; protected String _method; - protected String _passphrase; private final List<String> _errors; private final List<String> _notices; private boolean _processed; private boolean _valid; - private static final String NONCE_SUFFIX = ".nonce"; - private static final String PREV_SUFFIX = "Prev"; public FormHandler() { _errors = new ArrayList(); @@ -52,7 +52,28 @@ public class FormHandler { public void setNonce(String val) { _nonce = val; } public void setAction(String val) { _action = val; } - public void setPassphrase(String val) { _passphrase = val; } + + /** + * For many forms, it's easiest just to put all the parameters here. + * + * @since 0.9.4 consolidated from numerous FormHandlers + */ + public void setSettings(Map settings) { _settings = new HashMap(settings); } + + /** + * setSettings() must have been called previously + * Curses Jetty for returning arrays. + * + * @since 0.9.4 consolidated from numerous FormHandlers + */ + protected String getJettyString(String key) { + if (_settings == null) + return null; + String[] arr = (String[]) _settings.get(key); + if (arr == null) + return null; + return arr[0].trim(); + } /** * Call this to prevent changes using GET @@ -61,6 +82,15 @@ public class FormHandler { * @since 0.8.2 */ public void storeMethod(String val) { _method = val; } + + /** + * The old nonces from the session + * @since 0.9.4 + */ + public void storeNonces(String n1, String n2) { + _nonce1 = n1; + _nonce2 = n2; + } /** * Override this to perform the final processing (in turn, adding formNotice @@ -147,35 +177,33 @@ public class FormHandler { _valid = false; return; } - if (_nonce == null) { - //addFormError("You trying to mess with me? Huh? Are you?"); - _valid = false; - return; - } // To prevent actions with GET, jsps must call storeMethod() if (_method != null && !"POST".equals(_method)) { addFormError("Invalid form submission, requires POST not " + _method); _valid = false; return; } + // If passwords are turned on, all is assumed good + if (_context.getBooleanProperty(RouterConsoleRunner.PROP_PW_ENABLE)) { + _valid = true; + return; + } + if (_nonce == null) { + //addFormError("You trying to mess with me? Huh? Are you?"); + _valid = false; + return; + } String sharedNonce = System.getProperty("router.consoleNonce"); if ( (sharedNonce != null) && (sharedNonce.equals(_nonce) ) ) { return; } - String nonce = System.getProperty(getClass().getName() + NONCE_SUFFIX); - String noncePrev = nonce + PREV_SUFFIX; - if ( ( (nonce == null) || (!_nonce.equals(nonce)) ) && - ( (noncePrev == null) || (!_nonce.equals(noncePrev)) ) ) { - - String expected = _context.getProperty("consolePassword"); - if ( (expected != null) && (expected.trim().length() > 0) && (expected.equals(_passphrase)) ) { - // ok - } else { - addFormError(_("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.")); + if (!_nonce.equals(_nonce1) && !_nonce.equals(_nonce2)) { + addFormError(_("Invalid form submission, probably because you used the 'back' or 'reload' button on your browser. Please resubmit.") + + ' ' + + _("If the problem persists, verify that you have cookies enabled in your browser.")); _valid = false; - } } } @@ -204,18 +232,13 @@ public class FormHandler { } /** - * Generate a new nonce, store old and new in the system properties. + * Generate a new nonce. * Only call once per page! * @return a new random long as a String * @since 0.8.5 */ public String getNewNonce() { - String prop = getClass().getName() + NONCE_SUFFIX; - String prev = System.getProperty(prop); - if (prev != null) - System.setProperty(prop + PREV_SUFFIX, prev); String rv = Long.toString(_context.random().nextLong()); - System.setProperty(prop, rv); return rv; } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java index 09d4d0666e0b47100a4c32583a5c9e404035fde6..7ec9b7895e991766b5a124fdad5a6b1cdc6a3d15 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/PluginStarter.java @@ -662,7 +662,7 @@ public class PluginStarter implements Runnable { // quick check, will throw ClassNotFoundException on error LoadClientAppsJob.testClient(app.className, cl); // run this guy now - LoadClientAppsJob.runClient(app.className, app.clientName, argVal, log, pluginThreadGroup, cl); + LoadClientAppsJob.runClient(app.className, app.clientName, argVal, ctx, log, pluginThreadGroup, cl); } else { // If there is some delay, there may be a really good reason for it. // Loading a class would be one of them! diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java index a1dce25341cf6eb1ca7f99cbccfaeae0c376884a..aeb3639030cb55d35d76c63a2b0253f77e1e71d3 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java @@ -168,7 +168,7 @@ class ProfileOrganizerRenderer { } buf.append("</td><td align=\"right\">").append(num(prof.getIntegrationValue())); buf.append("</td><td align=\"center\">"); - if (_context.shitlist().isShitlisted(peer)) buf.append(_("Banned")); + if (_context.banlist().isBanlisted(peer)) buf.append(_("Banned")); if (prof.getIsFailing()) buf.append(' ').append(_("Failing")); if (_context.commSystem().wasUnreachable(peer)) buf.append(' ').append(_("Unreachable")); Rate failed = prof.getTunnelHistory().getFailedRate().getRate(30*60*1000); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java index 2aa1c2afd758dc9aed089168771bad015cf89520..6645558d5d730a2fc5b48c5c11557bcdf33eb811 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfilesHelper.java @@ -46,7 +46,7 @@ public class ProfilesHelper extends HelperBase { renderNavBar(); } catch (IOException ioe) {} if (_full == 3) - getShitlistSummary(); + getBanlistSummary(); else getProfileSummary(); return ""; @@ -64,9 +64,9 @@ public class ProfilesHelper extends HelperBase { } /** @return empty string, writes directly to _out */ - public String getShitlistSummary() { + public String getBanlistSummary() { try { - ShitlistRenderer rend = new ShitlistRenderer(_context); + BanlistRenderer rend = new BanlistRenderer(_context); rend.renderStatusHTML(_out); } catch (IOException ioe) { ioe.printStackTrace(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java index 2144fc8c1d1606ff809292b1b990bb7716426f1d..f812050d4e0e7ffff10092ef811b1e479b3a6dc7 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/RouterConsoleRunner.java @@ -23,11 +23,15 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import net.i2p.I2PAppContext; +import net.i2p.app.ClientAppManager; +import net.i2p.app.ClientAppState; +import static net.i2p.app.ClientAppState.*; import net.i2p.apps.systray.SysTray; import net.i2p.data.Base32; import net.i2p.data.DataHelper; import net.i2p.router.RouterContext; import net.i2p.router.update.ConsoleUpdateManager; +import net.i2p.router.app.RouterApp; import net.i2p.util.Addresses; import net.i2p.util.FileUtil; import net.i2p.util.I2PAppThread; @@ -48,6 +52,7 @@ import org.mortbay.jetty.handler.DefaultHandler; import org.mortbay.jetty.handler.HandlerCollection; import org.mortbay.jetty.handler.RequestLogHandler; import org.mortbay.jetty.nio.SelectChannelConnector; +import org.mortbay.jetty.security.Credential.MD5; import org.mortbay.jetty.security.DigestAuthenticator; import org.mortbay.jetty.security.HashUserRealm; import org.mortbay.jetty.security.Constraint; @@ -65,7 +70,10 @@ import org.mortbay.thread.concurrent.ThreadPool; /** * Start the router console. */ -public class RouterConsoleRunner { +public class RouterConsoleRunner implements RouterApp { + private final RouterContext _context; + private final ClientAppManager _mgr; + private volatile ClientAppState _state = UNINITIALIZED; private static Server _server; private String _listenPort; private String _listenHost; @@ -74,14 +82,21 @@ public class RouterConsoleRunner { private String _webAppsDir; private static final String DEFAULT_WEBAPP_CONFIG_FILENAME = "webapps.config"; + + // Jetty Auth private static final DigestAuthenticator authenticator = new DigestAuthenticator(); + public static final String JETTY_REALM = "i2prouter"; + private static final String JETTY_ROLE = "routerAdmin"; + public static final String PROP_CONSOLE_PW = "routerconsole.auth." + JETTY_REALM; + public static final String PROP_PW_ENABLE = "routerconsole.auth.enable"; + public static final String ROUTERCONSOLE = "routerconsole"; public static final String PREFIX = "webapps."; public static final String ENABLED = ".startOnLoad"; private static final String PROP_KEYSTORE_PASSWORD = "routerconsole.keystorePassword"; private static final String DEFAULT_KEYSTORE_PASSWORD = "changeit"; private static final String PROP_KEY_PASSWORD = "routerconsole.keyPassword"; - private static final String DEFAULT_LISTEN_PORT = "7657"; + public static final int DEFAULT_LISTEN_PORT = 7657; private static final String DEFAULT_LISTEN_HOST = "127.0.0.1"; private static final String DEFAULT_WEBAPPS_DIR = "./webapps/"; private static final String USAGE = "Bad RouterConsoleRunner arguments, check clientApp.0.args in your clients.config file! " + @@ -125,10 +140,12 @@ public class RouterConsoleRunner { * to both, we can't connect to [::1]:7657 for some reason. * So the wise choice is ::1,127.0.0.1 */ - public RouterConsoleRunner(String args[]) { + public RouterConsoleRunner(RouterContext ctx, ClientAppManager mgr, String args[]) { + _context = ctx; + _mgr = mgr; if (args.length == 0) { // _listenHost and _webAppsDir are defaulted below - _listenPort = DEFAULT_LISTEN_PORT; + _listenPort = Integer.toString(DEFAULT_LISTEN_PORT); } else { boolean ssl = false; for (int i = 0; i < args.length; i++) { @@ -161,14 +178,61 @@ public class RouterConsoleRunner { System.err.println(USAGE); throw new IllegalArgumentException(USAGE); } + _state = INITIALIZED; } public static void main(String args[]) { - startTrayApp(); - RouterConsoleRunner runner = new RouterConsoleRunner(args); - runner.startConsole(); + List<RouterContext> contexts = RouterContext.listContexts(); + if (contexts == null || contexts.isEmpty()) + throw new IllegalStateException("no router context"); + RouterConsoleRunner runner = new RouterConsoleRunner(contexts.get(0), null, args); + runner.startup(); } + /////// ClientApp methods + + /** @since 0.9.4 */ + public void startup() { + changeState(STARTING); + startTrayApp(_context); + startConsole(); + } + + /** @since 0.9.4 */ + public void shutdown(String[] args) { + changeState(STOPPING); + try { + _server.stop(); + } catch (Exception ie) {} + PortMapper portMapper = _context.portMapper(); + portMapper.unregister(PortMapper.SVC_CONSOLE); + portMapper.unregister(PortMapper.SVC_HTTPS_CONSOLE); + changeState(STOPPED); + } + + /** @since 0.9.4 */ + public ClientAppState getState() { + return _state; + } + + /** @since 0.9.4 */ + public String getName() { + return "console"; + } + + /** @since 0.9.4 */ + public String getDisplayName() { + return "Router Console"; + } + + /////// end ClientApp methods + + private synchronized void changeState(ClientAppState state) { + _state = state; + if (_mgr != null) + _mgr.notify(this, state, null, null); + } + /** * SInce _server is now static * @return may be null or stopped perhaps @@ -178,13 +242,13 @@ public class RouterConsoleRunner { return _server; } - private static void startTrayApp() { + private static void startTrayApp(I2PAppContext ctx) { try { //TODO: move away from routerconsole into a separate application. //ApplicationManager? boolean recentJava = SystemVersion.isJava6(); // default false for now - boolean desktopguiEnabled = I2PAppContext.getGlobalContext().getBooleanProperty("desktopgui.enabled"); + boolean desktopguiEnabled = ctx.getBooleanProperty("desktopgui.enabled"); if (recentJava && desktopguiEnabled) { //Check if we are in a headless environment, set properties accordingly System.setProperty("java.awt.headless", Boolean.toString(GraphicsEnvironment.isHeadless())); @@ -219,7 +283,7 @@ public class RouterConsoleRunner { *</pre> */ public void startConsole() { - File workDir = new SecureDirectory(I2PAppContext.getGlobalContext().getTempDir(), "jetty-work"); + File workDir = new SecureDirectory(_context.getTempDir(), "jetty-work"); boolean workDirRemoved = FileUtil.rmdir(workDir, false); if (!workDirRemoved) System.err.println("ERROR: Unable to remove Jetty temporary work directory"); @@ -228,7 +292,7 @@ public class RouterConsoleRunner { System.err.println("ERROR: Unable to create Jetty temporary work directory"); //try { - // Log.setLog(new I2PLogger(I2PAppContext.getGlobalContext())); + // Log.setLog(new I2PLogger(_context)); //} catch (Throwable t) { // System.err.println("INFO: I2P Jetty logging class not found, logging to wrapper log"); //} @@ -236,7 +300,7 @@ public class RouterConsoleRunner { System.setProperty("org.mortbay.log.class", "net.i2p.jetty.I2PLogger"); // so Jetty can find WebAppConfiguration - System.setProperty("jetty.class.path", I2PAppContext.getGlobalContext().getBaseDir() + "/lib/routerconsole.jar"); + System.setProperty("jetty.class.path", _context.getBaseDir() + "/lib/routerconsole.jar"); _server = new Server(); _server.setGracefulShutdown(1000); @@ -259,11 +323,11 @@ public class RouterConsoleRunner { hColl.addHandler(chColl); hColl.addHandler(new DefaultHandler()); - String log = I2PAppContext.getGlobalContext().getProperty("routerconsole.log"); + String log = _context.getProperty("routerconsole.log"); if (log != null) { File logFile = new File(log); if (!logFile.isAbsolute()) - logFile = new File(I2PAppContext.getGlobalContext().getLogDir(), "logs/" + log); + logFile = new File(_context.getLogDir(), "logs/" + log); try { RequestLogHandler rhl = new RequestLogHandler(); rhl.setRequestLog(new NCSARequestLog(logFile.getAbsolutePath())); @@ -283,7 +347,7 @@ public class RouterConsoleRunner { // We assume relative to the base install dir for backward compatibility File app = new File(_webAppsDir); if (!app.isAbsolute()) { - app = new File(I2PAppContext.getGlobalContext().getBaseDir(), _webAppsDir); + app = new File(_context.getBaseDir(), _webAppsDir); try { _webAppsDir = app.getCanonicalPath(); } catch (IOException ioe) {} @@ -363,7 +427,7 @@ public class RouterConsoleRunner { } } // XXX: what if listenhosts do not include 127.0.0.1? (Should that ever even happen?) - I2PAppContext.getGlobalContext().portMapper().register(PortMapper.SVC_CONSOLE,lport); + _context.portMapper().register(PortMapper.SVC_CONSOLE,lport); } // add SSL listeners @@ -376,8 +440,7 @@ public class RouterConsoleRunner { System.err.println("Bad routerconsole SSL port " + _sslListenPort); } if (sslPort > 0) { - I2PAppContext ctx = I2PAppContext.getGlobalContext(); - File keyStore = new File(ctx.getConfigDir(), "keystore/console.ks"); + File keyStore = new File(_context.getConfigDir(), "keystore/console.ks"); if (verifyKeyStore(keyStore)) { StringTokenizer tok = new StringTokenizer(_sslListenHost, " ,"); while (tok.hasMoreTokens()) { @@ -408,9 +471,9 @@ public class RouterConsoleRunner { SslSelectChannelConnector sssll = new SslSelectChannelConnector(); // the keystore path and password sssll.setKeystore(keyStore.getAbsolutePath()); - sssll.setPassword(ctx.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD)); + sssll.setPassword(_context.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD)); // the X.509 cert password (if not present, verifyKeyStore() returned false) - sssll.setKeyPassword(ctx.getProperty(PROP_KEY_PASSWORD, "thisWontWork")); + sssll.setKeyPassword(_context.getProperty(PROP_KEY_PASSWORD, "thisWontWork")); sssll.setUseDirectBuffers(false); // default true seems to be leaky ssll = sssll; } else { @@ -418,9 +481,9 @@ public class RouterConsoleRunner { SslSocketConnector sssll = new SslSocketConnector(); // the keystore path and password sssll.setKeystore(keyStore.getAbsolutePath()); - sssll.setPassword(ctx.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD)); + sssll.setPassword(_context.getProperty(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD)); // the X.509 cert password (if not present, verifyKeyStore() returned false) - sssll.setKeyPassword(ctx.getProperty(PROP_KEY_PASSWORD, "thisWontWork")); + sssll.setKeyPassword(_context.getProperty(PROP_KEY_PASSWORD, "thisWontWork")); ssll = sssll; } ssll.setHost(host); @@ -437,7 +500,7 @@ public class RouterConsoleRunner { System.err.println("You may ignore this warning if the console is still available at https://localhost:" + sslPort); } } - I2PAppContext.getGlobalContext().portMapper().register(PortMapper.SVC_HTTPS_CONSOLE,sslPort); + _context.portMapper().register(PortMapper.SVC_HTTPS_CONSOLE,sslPort); } else { System.err.println("Unable to create or access keystore for SSL: " + keyStore.getAbsolutePath()); } @@ -448,7 +511,7 @@ public class RouterConsoleRunner { return; } - rootWebApp = new LocaleWebAppHandler(I2PAppContext.getGlobalContext(), + rootWebApp = new LocaleWebAppHandler(_context, "/", _webAppsDir + ROUTERCONSOLE + ".war"); File tmpdir = new SecureDirectory(workDir, ROUTERCONSOLE + "-" + (_listenPort != null ? _listenPort : _sslListenPort)); @@ -458,7 +521,7 @@ public class RouterConsoleRunner { rootWebApp.setSessionHandler(new SessionHandler()); rootServletHandler = new ServletHandler(); rootWebApp.setServletHandler(rootServletHandler); - initialize(rootWebApp); + initialize(_context, rootWebApp); chColl.addHandler(rootWebApp); } catch (Exception ioe) { @@ -495,7 +558,7 @@ public class RouterConsoleRunner { } if (error) { System.err.println("WARNING: Error starting one or more listeners of the Router Console server.\n" + - "If your console is still accessible at http://127.0.0.1:7657/,\n" + + "If your console is still accessible at http://127.0.0.1:" + _listenPort + "/,\n" + "this may be a problem only with binding to the IPV6 address ::1.\n" + "If so, you may ignore this error, or remove the\n" + "\"::1,\" in the \"clientApp.0.args\" line of the clients.config file."); @@ -517,7 +580,7 @@ public class RouterConsoleRunner { if (! "false".equals(enabled)) { try { String path = new File(dir, fileNames[i]).getCanonicalPath(); - WebAppStarter.startWebApp(I2PAppContext.getGlobalContext(), chColl, appName, path); + WebAppStarter.startWebApp(_context, chColl, appName, path); if (enabled == null) { // do this so configclients.jsp knows about all apps from reading the config props.setProperty(PREFIX + appName + ENABLED, "true"); @@ -532,13 +595,15 @@ public class RouterConsoleRunner { notStarted.add(appName); } } + changeState(RUNNING); } } else { System.err.println("ERROR: Router console did not start, not starting webapps"); + changeState(START_FAILED); } if (rewrite) - storeWebAppProperties(props); + storeWebAppProperties(_context, props); if (rootServletHandler != null && notStarted.size() > 0) { // map each not-started webapp to the error page @@ -565,35 +630,29 @@ public class RouterConsoleRunner { t.setPriority(Thread.NORM_PRIORITY - 1); t.start(); - List<RouterContext> contexts = RouterContext.listContexts(); - if (contexts != null) { - RouterContext ctx = contexts.get(0); - - ConsoleUpdateManager um = new ConsoleUpdateManager(ctx); + ConsoleUpdateManager um = new ConsoleUpdateManager(_context); um.start(); - if (PluginStarter.pluginsEnabled(ctx)) { - t = new I2PAppThread(new PluginStarter(ctx), "PluginStarter", true); + if (PluginStarter.pluginsEnabled(_context)) { + t = new I2PAppThread(new PluginStarter(_context), "PluginStarter", true); t.setPriority(Thread.NORM_PRIORITY - 1); t.start(); - ctx.addShutdownTask(new PluginStopper(ctx)); + _context.addShutdownTask(new PluginStopper(_context)); } // stat summarizer registers its own hook - ctx.addShutdownTask(new ServerShutdown()); - ConfigServiceHandler.registerSignalHandler(ctx); - } // else log CRIT ? + _context.addShutdownTask(new ServerShutdown()); + ConfigServiceHandler.registerSignalHandler(_context); } /** * @return success if it exists and we have a password, or it was created successfully. * @since 0.8.3 */ - private static boolean verifyKeyStore(File ks) { + private boolean verifyKeyStore(File ks) { if (ks.exists()) { - I2PAppContext ctx = I2PAppContext.getGlobalContext(); - boolean rv = ctx.getProperty(PROP_KEY_PASSWORD) != null; + boolean rv = _context.getProperty(PROP_KEY_PASSWORD) != null; if (!rv) - System.err.println("Console SSL error, must set " + PROP_KEY_PASSWORD + " in " + (new File(ctx.getConfigDir(), "router.config")).getAbsolutePath()); + System.err.println("Console SSL error, must set " + PROP_KEY_PASSWORD + " in " + (new File(_context.getConfigDir(), "router.config")).getAbsolutePath()); return rv; } File dir = ks.getParentFile(); @@ -614,14 +673,13 @@ public class RouterConsoleRunner { * @return success * @since 0.8.3 */ - private static boolean createKeyStore(File ks) { - I2PAppContext ctx = I2PAppContext.getGlobalContext(); + private boolean createKeyStore(File ks) { // make a random 48 character password (30 * 8 / 5) byte[] rand = new byte[30]; - ctx.random().nextBytes(rand); + _context.random().nextBytes(rand); String keyPassword = Base32.encode(rand); // and one for the cname - ctx.random().nextBytes(rand); + _context.random().nextBytes(rand); String cname = Base32.encode(rand) + ".console.i2p.net"; String keytool = (new File(System.getProperty("java.home"), "bin/keytool")).getAbsolutePath(); @@ -643,11 +701,10 @@ public class RouterConsoleRunner { if (success) { SecureFileOutputStream.setPerms(ks); try { - RouterContext rctx = (RouterContext) ctx; Map<String, String> changes = new HashMap(); changes.put(PROP_KEYSTORE_PASSWORD, DEFAULT_KEYSTORE_PASSWORD); changes.put(PROP_KEY_PASSWORD, keyPassword); - rctx.router().saveConfig(changes, null); + _context.router().saveConfig(changes, null); } catch (Exception e) {} // class cast exception } } @@ -664,27 +721,42 @@ public class RouterConsoleRunner { System.err.println(buf.toString()); System.err.println("This is for the Sun/Oracle keytool, others may be incompatible.\n" + "If you create the keystore manually, you must add " + PROP_KEYSTORE_PASSWORD + " and " + PROP_KEY_PASSWORD + - " to " + (new File(ctx.getConfigDir(), "router.config")).getAbsolutePath()); + " to " + (new File(_context.getConfigDir(), "router.config")).getAbsolutePath()); } return success; } - static void initialize(WebAppContext context) { + /** + * Set up basic security constraints for the webapp. + * Add all users and passwords. + */ + static void initialize(RouterContext ctx, WebAppContext context) { SecurityHandler sec = new SecurityHandler(); List<ConstraintMapping> constraints = new ArrayList(4); - String password = getPassword(); - if (password != null) { - HashUserRealm realm = new HashUserRealm("i2prouter"); - realm.put("admin", password); - realm.addUserToRole("admin", "routerAdmin"); - sec.setUserRealm(realm); - sec.setAuthenticator(authenticator); - Constraint constraint = new Constraint("admin", "routerAdmin"); - constraint.setAuthenticate(true); - ConstraintMapping cm = new ConstraintMapping(); - cm.setConstraint(constraint); - cm.setPathSpec("/"); - constraints.add(cm); + ConsolePasswordManager mgr = new ConsolePasswordManager(ctx); + boolean enable = ctx.getBooleanProperty(PROP_PW_ENABLE); + if (enable) { + Map<String, String> userpw = mgr.getMD5(PROP_CONSOLE_PW); + if (userpw.isEmpty()) { + enable = false; + ctx.router().saveConfig(PROP_CONSOLE_PW, "false"); + } else { + HashUserRealm realm = new HashUserRealm(JETTY_REALM); + sec.setUserRealm(realm); + sec.setAuthenticator(authenticator); + for (Map.Entry<String, String> e : userpw.entrySet()) { + String user = e.getKey(); + String pw = e.getValue(); + realm.put(user, MD5.__TYPE + pw); + realm.addUserToRole(user, JETTY_ROLE); + Constraint constraint = new Constraint(user, JETTY_ROLE); + constraint.setAuthenticate(true); + ConstraintMapping cm = new ConstraintMapping(); + cm.setConstraint(constraint); + cm.setPathSpec("/"); + constraints.add(cm); + } + } } // This forces a '403 Forbidden' response for TRACE and OPTIONS unless the @@ -719,24 +791,10 @@ public class RouterConsoleRunner { context.setSecurityHandler(sec); } - static String getPassword() { - List<RouterContext> contexts = RouterContext.listContexts(); - if (contexts != null) { - for (int i = 0; i < contexts.size(); i++) { - RouterContext ctx = contexts.get(i); - String password = ctx.getProperty("consolePassword"); - if (password != null) { - password = password.trim(); - if (password.length() > 0) { - return password; - } - } - } - // no password in any context - return null; - } else { - // no contexts?! - return null; + /** @since 0.8.8 */ + private class ServerShutdown implements Runnable { + public void run() { + shutdown(null); } } @@ -748,14 +806,19 @@ public class RouterConsoleRunner { } catch (Exception ie) {} } } - - public static Properties webAppProperties() { - return webAppProperties(I2PAppContext.getGlobalContext().getConfigDir().getAbsolutePath()); + + private Properties webAppProperties() { + return webAppProperties(_context.getConfigDir().getAbsolutePath()); + } + + /** @since 0.9.4 */ + public static Properties webAppProperties(I2PAppContext ctx) { + return webAppProperties(ctx.getConfigDir().getAbsolutePath()); } public static Properties webAppProperties(String dir) { Properties rv = new Properties(); - // String webappConfigFile = ctx.getProperty(PROP_WEBAPP_CONFIG_FILENAME, DEFAULT_WEBAPP_CONFIG_FILENAME); + // String webappConfigFile = _context.getProperty(PROP_WEBAPP_CONFIG_FILENAME, DEFAULT_WEBAPP_CONFIG_FILENAME); String webappConfigFile = DEFAULT_WEBAPP_CONFIG_FILENAME; File cfgFile = new File(dir, webappConfigFile); @@ -768,10 +831,10 @@ public class RouterConsoleRunner { return rv; } - public static void storeWebAppProperties(Properties props) { - // String webappConfigFile = ctx.getProperty(PROP_WEBAPP_CONFIG_FILENAME, DEFAULT_WEBAPP_CONFIG_FILENAME); + public static void storeWebAppProperties(RouterContext ctx, Properties props) { + // String webappConfigFile = _context.getProperty(PROP_WEBAPP_CONFIG_FILENAME, DEFAULT_WEBAPP_CONFIG_FILENAME); String webappConfigFile = DEFAULT_WEBAPP_CONFIG_FILENAME; - File cfgFile = new File(I2PAppContext.getGlobalContext().getConfigDir(), webappConfigFile); + File cfgFile = new File(ctx.getConfigDir(), webappConfigFile); try { DataHelper.storeProps(props, cfgFile); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index 63bf2a564679df06f9e30b4c7536e3eb26387933..2bd763606f9cd33f70dc8b4b2494f7ba985281bc 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -172,6 +172,8 @@ public class SummaryHelper extends HelperBase { //if (_context.router().getRouterInfo().getCapabilities().indexOf('O') >= 0) // return _("WARN-Firewalled and Fast"); return _("Firewalled"); + case CommSystemFacade.STATUS_DISCONNECTED: + return _("Disconnected - check network cable"); case CommSystemFacade.STATUS_HOSED: return _("ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and restart"); case CommSystemFacade.STATUS_UNKNOWN: // fallthrough @@ -283,11 +285,11 @@ public class SummaryHelper extends HelperBase { * */ /******** - public int getShitlistedPeers() { + public int getBanlistedPeers() { if (_context == null) return 0; else - return _context.shitlist().getRouterCount(); + return _context.banlist().getRouterCount(); } ********/ diff --git a/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java b/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java index 5afa5d2db080a466fd2b7e7bf36a3d4da1e1399a..74c744170b0abb11d8502fd3ee69b67e0e6eed84 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/WebAppConfiguration.java @@ -74,7 +74,7 @@ public class WebAppConfiguration implements Configuration { cp = props.getProperty(RouterConsoleRunner.PREFIX + appName + CLASSPATH); dir = pluginDir; } else { - Properties props = RouterConsoleRunner.webAppProperties(); + Properties props = RouterConsoleRunner.webAppProperties(i2pContext); cp = props.getProperty(RouterConsoleRunner.PREFIX + appName + CLASSPATH); } if (cp == null) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java b/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java index 53f71b348608be5d57e72930779b591b5b4d4202..a7506d65fb9375a789df4243078c999a89b15c82 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/WebAppStarter.java @@ -6,7 +6,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import net.i2p.I2PAppContext; +import net.i2p.router.RouterContext; import net.i2p.util.FileUtil; import net.i2p.util.SecureDirectory; @@ -51,7 +51,7 @@ public class WebAppStarter { * adds and starts * @throws just about anything, caller would be wise to catch Throwable */ - static void startWebApp(I2PAppContext ctx, ContextHandlerCollection server, + static void startWebApp(RouterContext ctx, ContextHandlerCollection server, String appName, String warPath) throws Exception { File tmpdir = new SecureDirectory(ctx.getTempDir(), "jetty-work-" + appName + ctx.random().nextInt()); WebAppContext wac = addWebApp(ctx, server, appName, warPath, tmpdir); @@ -65,7 +65,7 @@ public class WebAppStarter { * This is used only by RouterConsoleRunner, which adds all the webapps first * and then starts all at once. */ - static WebAppContext addWebApp(I2PAppContext ctx, ContextHandlerCollection server, + static WebAppContext addWebApp(RouterContext ctx, ContextHandlerCollection server, String appName, String warPath, File tmpdir) throws IOException { // Jetty will happily load one context on top of another without stopping @@ -103,7 +103,7 @@ public class WebAppStarter { wac.setExtractWAR(false); // this does the passwords... - RouterConsoleRunner.initialize(wac); + RouterConsoleRunner.initialize(ctx, wac); // see WebAppConfiguration for info String[] classNames = wac.getConfigurationClasses(); diff --git a/apps/routerconsole/jsp/config.jsp b/apps/routerconsole/jsp/config.jsp index 0d56b5f59d2045633f7b6ca43e729e03118a282b..538fb8a5f25f0e96f892b1cc7e6a507cabd10274 100644 --- a/apps/routerconsole/jsp/config.jsp +++ b/apps/routerconsole/jsp/config.jsp @@ -19,13 +19,10 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>"> <input type="hidden" name="action" value="blah" > <input type="hidden" name="ratesOnly" value="1" > <h3><%=intl._("Bandwidth limiter")%></h3><p> diff --git a/apps/routerconsole/jsp/configadvanced.jsp b/apps/routerconsole/jsp/configadvanced.jsp index 53a8b227f5c7a3087f8e3128ff11b3c0502a400e..d8a19e35055a3580f97496a5ac7994c5c1327c6c 100644 --- a/apps/routerconsole/jsp/configadvanced.jsp +++ b/apps/routerconsole/jsp/configadvanced.jsp @@ -21,14 +21,11 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigAdvancedHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"> <div class="wideload"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="action" value="blah" > <h3><%=intl._("Advanced I2P Configuration")%></h3> <textarea rows="32" cols="60" name="config" wrap="off" spellcheck="false"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr> diff --git a/apps/routerconsole/jsp/configclients.jsp b/apps/routerconsole/jsp/configclients.jsp index e97b22968d8c4fa0180bdea6108e632666cffdf2..3d0cf7cda6998c90410d7f387e91b415909978a2 100644 --- a/apps/routerconsole/jsp/configclients.jsp +++ b/apps/routerconsole/jsp/configclients.jsp @@ -25,16 +25,8 @@ input.default { width: 1px; height: 1px; visibility: hidden; } <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigClientsHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter(\"action\")%>" /> - <jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter(\"nonce\")%>" /> - <jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"> -<% - String pageNonce = formhandler.getNewNonce(); -%> <h3><%=intl._("Client Configuration")%></h3><p> <%=intl._("The Java clients listed below are started by the router and run in the same JVM.")%> </p><div class="wideload"> @@ -85,9 +77,9 @@ input.default { width: 1px; height: 1px; visibility: hidden; } <input type="checkbox" class="optbox" name="auth" value="true" <jsp:getProperty name="clientshelper" property="auth" /> > <%=intl._("Require username and password")%><br> <%=intl._("Username")%>: -<input name="user" type="text" value="<jsp:getProperty name="clientshelper" property="user" />" ><br> +<input name="user" type="text" value="" /><br> <%=intl._("Password")%>: -<input name="pw" type="password" value="<jsp:getProperty name="clientshelper" property="pw" />" ><br> +<input name="pw" type="password" value="" /><br> </p><p><b><%=intl._("The default settings will work for most people.")%></b> <%=intl._("Any changes made here must also be configured in the external client.")%> <%=intl._("Many clients do not support SSL or authorization.")%> diff --git a/apps/routerconsole/jsp/confighome.jsp b/apps/routerconsole/jsp/confighome.jsp index b8296fcbbbedccd253199b66cebb1db6f9090487..6be2d9d2e9fdf9988df568c5158a3d5c91c43954 100644 --- a/apps/routerconsole/jsp/confighome.jsp +++ b/apps/routerconsole/jsp/confighome.jsp @@ -22,14 +22,7 @@ input.default { <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigHomeHandler" id="formhandler" scope="request" /> -<% formhandler.storeMethod(request.getMethod()); %> -<jsp:setProperty name="formhandler" property="*" /> -<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> -<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> -<jsp:getProperty name="formhandler" property="allMessages" /> -<% - String pageNonce = formhandler.getNewNonce(); -%> +<%@include file="formhandler.jsi" %> <jsp:useBean class="net.i2p.router.web.HomeHelper" id="homehelper" scope="request" /> <jsp:setProperty name="homehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> diff --git a/apps/routerconsole/jsp/configkeyring.jsp b/apps/routerconsole/jsp/configkeyring.jsp index e8b4089371fb38b0fd19c11a1d834ba673dbd5d1..b2f5ef657cd8258e79880c4d97489f2ebe17b03c 100644 --- a/apps/routerconsole/jsp/configkeyring.jsp +++ b/apps/routerconsole/jsp/configkeyring.jsp @@ -15,10 +15,7 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigKeyringHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigKeyringHelper" id="keyringhelper" scope="request" /> <jsp:setProperty name="keyringhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <div class="configure"><h2><%=intl._("Keyring")%></h2><p> @@ -29,7 +26,7 @@ </div> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <h3><%=intl._("Manual Keyring Addition")%></h3><p> <%=intl._("Enter keys for encrypted remote destinations here.")%> <%=intl._("Keys for local destinations must be entered on the")%> <a href="i2ptunnel/"><%=intl._("I2PTunnel page")%></a>. diff --git a/apps/routerconsole/jsp/configlogging.jsp b/apps/routerconsole/jsp/configlogging.jsp index c6f3ed945a1e3c75432ccd4f817fc3aa84144f2d..837ed81b8a126e97313979b430252b54efe02682 100644 --- a/apps/routerconsole/jsp/configlogging.jsp +++ b/apps/routerconsole/jsp/configlogging.jsp @@ -18,13 +18,10 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigLoggingHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="action" value="blah" > <h3><%=intl._("Configure I2P Logging Options")%></h3> <div class="wideload"> diff --git a/apps/routerconsole/jsp/confignet.jsp b/apps/routerconsole/jsp/confignet.jsp index 7fb74500d918a3805ded794d005b8ee1528127cb..cd1ad65f7b049990f840969a6a5fd52d3317951b 100644 --- a/apps/routerconsole/jsp/confignet.jsp +++ b/apps/routerconsole/jsp/confignet.jsp @@ -18,13 +18,10 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigNetHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="action" value="blah" > <h3><%=intl._("IP and Transport Configuration")%></h3><p> <img src="/themes/console/images/itoopie_xsm.png" alt=""> @@ -207,7 +204,7 @@ <p> This setting causes your router identity to be regenerated every time your IP address changes. If you have a dynamic IP this option can speed up your reintegration into - the network (since people will have shitlisted your old router identity), and, for + the network (since people will have banned your old router identity), and, for very weak adversaries, help frustrate trivial <a href="http://www.i2p.net/how_threatmodel#intersection">intersection attacks</a> against the NetDB. Your different router identities would only be diff --git a/apps/routerconsole/jsp/configpeer.jsp b/apps/routerconsole/jsp/configpeer.jsp index 9952db5534fcbef79e0e795daa0330520aa69ac7..4e4010ecac402ed3b9a9c15a975e3f0394be4db5 100644 --- a/apps/routerconsole/jsp/configpeer.jsp +++ b/apps/routerconsole/jsp/configpeer.jsp @@ -15,13 +15,7 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigPeerHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> - - - +<%@include file="formhandler.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigPeerHelper" id="peerhelper" scope="request" /> <jsp:setProperty name="peerhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> @@ -31,7 +25,7 @@ %> <div class="configure"> <form action="configpeer" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <a name="sh"> </a> <a name="unsh"> </a> <a name="bonus"> </a> @@ -61,11 +55,11 @@ <input type="text" size="8" name="capacity" value="<%=capacity%>" /> <input type="submit" name="action" class="add" value="<%=intl._("Adjust peer bonuses")%>" /></p></div> </form> - <a name="shitlist"> </a><h2><%=intl._("Banned Peers")%></h2> + <a name="banlist"> </a><h2><%=intl._("Banned Peers")%></h2> <jsp:useBean class="net.i2p.router.web.ProfilesHelper" id="profilesHelper" scope="request" /> <jsp:setProperty name="profilesHelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <% profilesHelper.storeWriter(out); %> - <jsp:getProperty name="profilesHelper" property="shitlistSummary" /> + <jsp:getProperty name="profilesHelper" property="banlistSummary" /> <div class="wideload"><h2><%=intl._("Banned IPs")%></h2> <jsp:getProperty name="peerhelper" property="blocklistSummary" /> diff --git a/apps/routerconsole/jsp/configreseed.jsp b/apps/routerconsole/jsp/configreseed.jsp index 39df228c698224742b9b1585071302791a975318..c83ed389dd0487820155c275335dcc11a25f877a 100644 --- a/apps/routerconsole/jsp/configreseed.jsp +++ b/apps/routerconsole/jsp/configreseed.jsp @@ -18,14 +18,9 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigReseedHandler" id="formhandler" scope="request" /> -<% formhandler.storeMethod(request.getMethod()); %> -<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> -<jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter(\"action\")%>" /> -<jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter(\"nonce\")%>" /> -<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> -<jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"><form action="" method="POST"> -<input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > +<input type="hidden" name="nonce" value="<%=pageNonce%>" > <h3><%=intl._("Reseeding Configuration")%></h3> <p><%=intl._("Reseeding is the bootstrapping process used to find other routers when you first install I2P, or when your router has too few router references remaining.")%> <%=intl._("If reseeding has failed, you should first check your network connection.")%> diff --git a/apps/routerconsole/jsp/configservice.jsp b/apps/routerconsole/jsp/configservice.jsp index 303fa4d31cb370be4a1f332d6129ce00fa585902..c6711cc43c54078182cd4372b5cb12f932c09577 100644 --- a/apps/routerconsole/jsp/configservice.jsp +++ b/apps/routerconsole/jsp/configservice.jsp @@ -15,13 +15,10 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigServiceHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <h3><%=intl._("Shutdown the router")%></h3> <p><%=intl._("Graceful shutdown lets the router satisfy the agreements it has already made before shutting down, but may take a few minutes.")%> <%=intl._("If you need to kill the router immediately, that option is available as well.")%></p> diff --git a/apps/routerconsole/jsp/configsidebar.jsp b/apps/routerconsole/jsp/configsidebar.jsp index 074fcfda30049066a95176993fe5df29083179d1..129feaa10701cf0dcf5b1f635ddf6b533a25008a 100644 --- a/apps/routerconsole/jsp/configsidebar.jsp +++ b/apps/routerconsole/jsp/configsidebar.jsp @@ -22,17 +22,10 @@ input.default { <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigSummaryHandler" id="formhandler" scope="request" /> -<% formhandler.storeMethod(request.getMethod()); %> -<jsp:setProperty name="formhandler" property="*" /> -<jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> -<jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> +<%@include file="formhandler.jsi" %> <% formhandler.setMovingAction(); %> -<jsp:getProperty name="formhandler" property="allMessages" /> -<% - String pageNonce = formhandler.getNewNonce(); -%> <jsp:useBean class="net.i2p.router.web.SummaryHelper" id="summaryhelper" scope="request" /> <jsp:setProperty name="summaryhelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> diff --git a/apps/routerconsole/jsp/configstats.jsp b/apps/routerconsole/jsp/configstats.jsp index 8a70c84bc4d470ee0eaee7f2ce386e5dfb325037..d6bd67c1e5f50d50e1c52595de51e630476e512d 100644 --- a/apps/routerconsole/jsp/configstats.jsp +++ b/apps/routerconsole/jsp/configstats.jsp @@ -66,17 +66,13 @@ function toggleAll(category) <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigStatsHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> - +<%@include file="formhandler.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigStatsHelper" id="statshelper" scope="request" /> <jsp:setProperty name="statshelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <div class="configure"> <form id="statsForm" name="statsForm" action="" method="POST"> <input type="hidden" name="action" value="foo" > - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <h3><%=intl._("Configure I2P Stat Collection")%></h3> <p><%=intl._("Enable full stats?")%> <input type="checkbox" class="optbox" name="isFull" value="true" <% diff --git a/apps/routerconsole/jsp/configtunnels.jsp b/apps/routerconsole/jsp/configtunnels.jsp index e2eab6658f2c7f23e76bbaefab7f145bb8213c9e..de82f0027d813fa7e9050396f240ea92f42a0a86 100644 --- a/apps/routerconsole/jsp/configtunnels.jsp +++ b/apps/routerconsole/jsp/configtunnels.jsp @@ -17,13 +17,7 @@ <div class="main" id="main"> <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigTunnelsHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:setProperty name="formhandler" property="shouldsave" value="<%=request.getParameter(\"shouldsave\")%>" /> - <jsp:setProperty name="formhandler" property="action" value="<%=request.getParameter(\"action\")%>" /> - <jsp:setProperty name="formhandler" property="nonce" value="<%=request.getParameter(\"nonce\")%>" /> - <jsp:setProperty name="formhandler" property="settings" value="<%=request.getParameterMap()%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"><p> <%=intl._("NOTE")%>: <%=intl._("The default settings work for most people.")%> @@ -33,7 +27,7 @@ <%=intl._("Change these settings with care, and adjust them if you have problems.")%> <div class="wideload"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="action" value="blah" > <jsp:getProperty name="tunnelshelper" property="form" /> <%=intl._("Note")%>: <%=intl._("Exploratory tunnel setting changes are stored in the router.config file.")%> diff --git a/apps/routerconsole/jsp/configui.jsp b/apps/routerconsole/jsp/configui.jsp index a2f43971373c0282b6d99c3eed7ccbded67b21f0..f1555a8920d1b99430144430c2030555ca810054 100644 --- a/apps/routerconsole/jsp/configui.jsp +++ b/apps/routerconsole/jsp/configui.jsp @@ -6,6 +6,13 @@ <html><head> <%@include file="css.jsi" %> <%=intl.title("config UI")%> +<style type='text/css'> +input.default { + width: 1px; + height: 1px; + visibility: hidden; +} +</style> <script src="/js/ajax.js" type="text/javascript"></script> <%@include file="summaryajax.jsi" %> </head><body onload="initAjax()"> @@ -21,10 +28,7 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigUIHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <div class="configure"><div class="topshimten"><h3><%=uihelper._("Router Console Theme")%></h3></div> <form action="" method="POST"> <% @@ -36,7 +40,7 @@ } %> <input type="hidden" name="consoleNonce" value="<%=consoleNonce%>" > - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <input type="hidden" name="action" value="blah" > <% String userAgent = request.getHeader("User-Agent"); @@ -54,5 +58,17 @@ </p><hr><div class="formaction"> <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" > <input type="submit" name="shouldsave" class="accept" value="<%=intl._("Apply")%>" > -</div></form></div> +</div></form> + +<h3><%=uihelper._("Router Console Password")%></h3> +<form action="" method="POST"> + <input type="hidden" name="nonce" value="<%=pageNonce%>" > + <jsp:getProperty name="uihelper" property="passwordForm" /> + <div class="formaction"> + <input type="submit" name="action" class="default" value="<%=intl._("Add user")%>" > + <input type="submit" name="action" class="delete" value="<%=intl._("Delete selected")%>" > + <input type="reset" class="cancel" value="<%=intl._("Cancel")%>" > + <input type="submit" name="action" class="add" value="<%=intl._("Add user")%>" > + </div> +</form></div> </div></body></html> diff --git a/apps/routerconsole/jsp/configupdate.jsp b/apps/routerconsole/jsp/configupdate.jsp index a792bb07b3f28eb00c01a165c525a77e19d64343..2d2e54d25782046cf2e580f6e137bc8727a277c4 100644 --- a/apps/routerconsole/jsp/configupdate.jsp +++ b/apps/routerconsole/jsp/configupdate.jsp @@ -16,17 +16,14 @@ <%@include file="confignav.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigUpdateHandler" id="formhandler" scope="request" /> - <% formhandler.storeMethod(request.getMethod()); %> - <jsp:setProperty name="formhandler" property="*" /> - <jsp:setProperty name="formhandler" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> - <jsp:getProperty name="formhandler" property="allMessages" /> +<%@include file="formhandler.jsi" %> <jsp:useBean class="net.i2p.router.web.ConfigUpdateHelper" id="updatehelper" scope="request" /> <jsp:setProperty name="updatehelper" property="contextId" value="<%=(String)session.getAttribute(\"i2p.contextId\")%>" /> <div class="messages"> <jsp:getProperty name="updatehelper" property="newsStatus" /></div> <div class="configure"> <form action="" method="POST"> - <input type="hidden" name="nonce" value="<jsp:getProperty name="formhandler" property="newNonce" />" > + <input type="hidden" name="nonce" value="<%=pageNonce%>" > <% /* set hidden default */ %> <input type="submit" name="action" value="" style="display:none" > <% if (updatehelper.canInstall()) { %> diff --git a/apps/routerconsole/jsp/formhandler.jsi b/apps/routerconsole/jsp/formhandler.jsi new file mode 100644 index 0000000000000000000000000000000000000000..dc8c65b304045a15e008756a43131d9e8ab24874 --- /dev/null +++ b/apps/routerconsole/jsp/formhandler.jsi @@ -0,0 +1,43 @@ +<% + /* + * Does the standard setup for all form handlers, then + * displays the message box (which drives the form processing). + * + * Included ~15 times, keep whitespace to a minimum + * + * Include this directly after the line: + * <jsp:useBean class="net.i2p.router.web.xxxHandler" id="formhandler" scope="request" /> + */ + + // This initializes the RouterContext - must be the first thing + formhandler.setContextId((String)session.getAttribute("i2p.contextId")); + + // Prevents any saves via GET + formhandler.storeMethod(request.getMethod()); + + // Store the nonces for verification + String klass = formhandler.getClass().getName(); + String nonceAttr1 = klass + ".nonce"; + String nonceAttr2 = nonceAttr1 + "Prev"; + String nonce1 = (String) session.getAttribute(nonceAttr1); + String nonce2 = (String) session.getAttribute(nonceAttr2); + formhandler.storeNonces(nonce1, nonce2); + + // Put all the params in the map, some handlers use this instead of individual setters + // We also call all of the setters below. + formhandler.setSettings(request.getParameterMap()); + +%> +<jsp:setProperty name="formhandler" property="*" /> +<jsp:getProperty name="formhandler" property="allMessages" /> +<% + + // Only call this once per page, do not getProperty("newNonce") elsewhere, + // use the variable instead. + // This shuffles down the nonces, so it must be after getAllMessages() above, + // since it does the form validation. + String pageNonce = formhandler.getNewNonce(); + session.setAttribute(nonceAttr2, nonce1); + session.setAttribute(nonceAttr1, pageNonce); + +%> diff --git a/apps/routerconsole/locale/messages_es.po b/apps/routerconsole/locale/messages_es.po index fdb129e04341b7d2f8044d5bdec85c05eb9010e3..889845f709b57384b17474f5c852eb206425e45f 100644 --- a/apps/routerconsole/locale/messages_es.po +++ b/apps/routerconsole/locale/messages_es.po @@ -2,10 +2,11 @@ # Copyright (C) 2009 The I2P Project # This file is distributed under the same license as the routerconsole package. # To contribute translations, see http://www.i2p2.de/newdevelopers -# +# # Translators: # "blabla", 2011. # <blabla@trash-mail.com>, 2011, 2012. +# Daniel Mustieles <daniel.mustieles@gmail.com>, 2012. # ducki2p <ducki2p@gmail.com>, 2011. # foo <foo@bar>, 2009. # mixxy, 2011. @@ -14,27 +15,29 @@ msgid "" msgstr "" "Project-Id-Version: I2P\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-28 21:17+0000\n" -"PO-Revision-Date: 2012-07-27 23:19+0000\n" -"Last-Translator: blabla <blabla@trash-mail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/I2P/language/" -"es/)\n" -"Language: es\n" +"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n" +"POT-Creation-Date: 2012-10-12 00:38+0000\n" +"PO-Revision-Date: 2012-10-18 08:53+0000\n" +"Last-Translator: Daniel Mustieles <daniel.mustieles@gmail.com>\n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/I2P/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" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. NOTE TO TRANSLATORS: Feel free to translate all these as you see fit, there are several options... -#. spaces or not, '.' or not, plural or not. Try not to make it too long, it is used in +#. NOTE TO TRANSLATORS: Feel free to translate all these as you see fit, there +#. are several options... +#. spaces or not, '.' or not, plural or not. Try not to make it too long, it +#. is used in #. a lot of tables. #. milliseconds #. Note to translators, may be negative or zero, 2999 maximum. -#. {0,number,####} prevents 1234 from being output as 1,234 in the English locale. +#. {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:1370 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1415 #, java-format msgid "1 ms" msgid_plural "{0,number,####} ms" @@ -43,7 +46,7 @@ msgstr[1] "{0,number,####} ms" #. seconds #. alternates: secs, sec. 'seconds' is probably too long. -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1374 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1419 #, java-format msgid "1 sec" msgid_plural "{0} sec" @@ -52,7 +55,7 @@ msgstr[1] "{0} s" #. minutes #. alternates: mins, min. 'minutes' is probably too long. -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1378 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1423 #, java-format msgid "1 min" msgid_plural "{0} min" @@ -61,61 +64,61 @@ msgstr[1] "{0} min" #. hours #. alternates: hrs, hr., hrs. -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1382 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1427 #, 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:1384 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1429 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:341 msgid "n/a" msgstr "n/d" #. days -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1387 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1432 #, 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:127 +#: ../../../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:129 +#: ../../../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:672 -#: ../../../router/java/src/net/i2p/router/Blocklist.java:745 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:653 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:726 #, 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:784 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:765 msgid "IPs Banned Until Restart" msgstr "IPs prohibidas hasta el reinicio" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:808 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:789 msgid "IPs Permanently Banned" msgstr "IPs permanentemente prohibidas" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:810 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:791 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:66 msgid "From" msgstr "De" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:812 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:793 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:67 msgid "To" msgstr "A" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:848 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:829 #: ../java/src/net/i2p/router/web/ShitlistRenderer.java:47 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:647 #: ../java/src/net/i2p/router/web/SummaryHelper.java:451 @@ -124,7 +127,8 @@ msgstr "ninguno" #. NPE, too early #. if (_context.router().getRouterInfo().getBandwidthTier().equals("K")) -#. setTunnelStatus("Not expecting tunnel requests: Advertised bandwidth too low"); +#. setTunnelStatus("Not expecting tunnel requests: Advertised bandwidth too +#. low"); #. else #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:73 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:115 @@ -137,7 +141,8 @@ msgid "Rejecting tunnels: High message delay" msgstr "rechazando túneles: alta tardanza de los mensajes" #. hard to do {0} from here -#. setTunnelStatus("Rejecting " + (100 - (int) probAccept*100) + "% of tunnels: High number of requests"); +#. setTunnelStatus("Rejecting " + (100 - (int) probAccept*100) + "% of +#. tunnels: High number of requests"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:207 msgid "Rejecting most tunnels: High number of requests" msgstr "rechazando la mayorÃa de túneles: alto número de peticiones" @@ -154,13 +159,15 @@ msgid "Rejecting tunnels: Bandwidth limit" msgstr "rechazando túneles: lÃmite de ancho de banda" #. hard to do {0} from here -#. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: Bandwidth limit"); +#. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: +#. Bandwidth limit"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:400 msgid "Rejecting most tunnels: Bandwidth limit" msgstr "rechazando la mayor parte de los túneles: lÃmite de ancho de banda" #. hard to do {0} from here -#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels"); +#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of +#. tunnels"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:404 msgid "Accepting most tunnels" msgstr "aceptando la mayorÃa de los túneles" @@ -177,44 +184,43 @@ msgstr "rechazando túneles: apagando" msgid "Rejecting tunnels" msgstr "Rechazando túneles" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:149 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:151 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:22 msgid "Reseeding" msgstr "Resembrando" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:161 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:163 #, java-format msgid "Reseed fetched only 1 router." msgid_plural "Reseed fetched only {0} routers." msgstr[0] "El proceso de resembrar ha encontrado un solo router." msgstr[1] "El proceso de resembrar ha encontrado sólo {0} routers." -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:168 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:170 msgid "Reseed failed." msgstr "El proceso de resembrar ha fallado" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:169 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:171 #, java-format msgid "See {0} for help." msgstr "Consulta {0} para obtener ayuda." -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:170 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:172 msgid "reseed configuration page" msgstr "Página de configuración del proceso de resembrar" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:311 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:313 msgid "Reseeding: fetching seed URL." msgstr "Resembrar: Buscando URL sembradora" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:369 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:371 #, java-format msgid "" "Reseeding: fetching router info from seed URL ({0} successful, {1} errors)." -msgstr "" -"Resembrar: buscando informaciones de routers desde la URL sembradora ({0} " -"exitosas, {1} errores)." +msgstr "Resembrar: buscando informaciones de routers desde la URL sembradora ({0} exitosas, {1} errores)." -#. NOTE TO TRANSLATORS - each of these phrases is a description for a statistic +#. NOTE TO TRANSLATORS - each of these phrases is a description for a +#. statistic #. to be displayed on /stats.jsp and in the graphs on /graphs.jsp. #. Please keep relatively short so it will fit on the graphs. #: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:33 @@ -241,59 +247,55 @@ msgstr "Con cuántos pares estamos hablando activamente" msgid "Known fast peers" msgstr "pares rápidos conocidos" -#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:529 +#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:530 msgid "NetDb entry" msgstr "Entrada de la NetDb" -#. This used to be "no common transports" but it is almost always no transports at all +#. This used to be "no common transports" but it is almost always no +#. transports at all #: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70 msgid "No transports (hidden or starting up?)" msgstr "No hay transportes (oculto o iniciando?)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:453 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:455 msgid "Unreachable on any transport" msgstr "Inalcanzable en cualquier transporte" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:502 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:504 msgid "Router Transport Addresses" msgstr "Direcciones de transporte del router " -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:507 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:509 #, 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:521 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523 #: ../java/src/net/i2p/router/web/HomeHelper.java:32 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:152 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:154 msgid "Help" msgstr "Ayuda" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:522 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524 msgid "" "Your transport connection limits are automatically set based on your " "configured bandwidth." -msgstr "" -"Los lÃmites de conexiones de transporte se ajustan automáticamente basándose " -"en el ancho de banda configurado." +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:524 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526 msgid "" "To override these limits, add the settings i2np.ntcp.maxConnections=nnn and " "i2np.udp.maxConnections=nnn on the advanced configuration page." -msgstr "" -"Para sobreescribir estos lÃmites, se deben agregar los comandos i2np.ntcp." -"maxConnections = nnn y i2np.udp.maxConnections = nnn en la página de " -"configuración avanzada." +msgstr "Para sobreescribir estos lÃmites, se deben agregar los comandos i2np.ntcp.maxConnections = nnn y i2np.udp.maxConnections = nnn en la página de configuración avanzada." -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:279 msgid "Definitions" msgstr "Definiciones" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:527 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:752 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1958 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2173 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 @@ -302,281 +304,266 @@ msgstr "Definiciones" msgid "Peer" msgstr "Par" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:527 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 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:528 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:753 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1962 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2177 msgid "Dir" msgstr "Dir" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531 msgid "Inbound connection" msgstr "Conexión entrante" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533 msgid "Outbound connection" msgstr "Conexión saliente" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535 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)" +msgstr "Se han ofrecido a introducirnos (a ayudar a otros pares a atravesar nuestro cortafuegos)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535 -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:537 +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:536 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 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:536 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:754 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1963 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2178 msgid "Idle" msgstr "inactivo" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:755 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1968 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2183 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:157 msgid "In/Out" msgstr "Entrante/Saliente" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 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:538 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 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:538 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:756 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1973 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:834 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2188 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:835 msgid "Up" msgstr "Subida" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:757 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1975 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2190 msgid "Skew" msgstr "Desincronización" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 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:540 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542 msgid "" "The congestion window, which is how many bytes can be sent without an " "acknowledgement" -msgstr "" -"El rango de congestión, que es la cantidad de bytes que se pueden enviar sin " -"recibir confirmación" +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:541 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543 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:542 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544 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:543 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545 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:544 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546 msgid "The slow start threshold" msgstr "El umbral de incicio lento" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547 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:546 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1985 -msgid "Dev" -msgstr "Desv" - -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546 -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:547 +#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The +#. standard deviation of the round trip time in +#. milliseconds")).append("<br>\n" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549 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:548 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550 msgid "" "Current maximum send packet size / estimated maximum receive packet size " "(bytes)" -msgstr "" -"Tamaño máximo actual de envÃo de paquetes / tamaño máximo estimado de " -"paquetes entrantes (bytes)" +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:549 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:758 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1992 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2207 msgid "TX" msgstr "TX" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 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:550 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:759 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1994 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2209 msgid "RX" msgstr "RX" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 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:551 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1997 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2212 msgid "Dup TX" msgstr "TX dup" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553 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:552 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1999 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2214 msgid "Dup RX" msgstr "RX dup" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554 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:437 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 msgid "Service" msgstr "Servicio" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:439 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:454 msgid "WAN Common Interface Configuration" msgstr "Configuración de la interfaz común WAN" -#: ../../../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:455 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:471 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:476 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:96 msgid "Status" msgstr "Estado" -#: ../../../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 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:456 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:462 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:472 msgid "Type" msgstr "Tipo" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:442 -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:448 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:457 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:463 msgid "Upstream" msgstr "Corriente de subida" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:443 -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:449 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:464 msgid "Downstream" msgstr "Corriente de descarga" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:445 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460 msgid "WAN PPP Connection" msgstr "Conexión WAN PPP" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:450 -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:465 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473 msgid "External IP" msgstr "IP externa" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:467 msgid "Layer 3 Forwarding" msgstr "Transmisión en capa 3" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:453 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:468 msgid "Default Connection Service" msgstr "Servicio de conexión por defecto" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:455 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:470 msgid "WAN IP Connection" msgstr "Conexión IP WAN" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475 msgid "WAN Ethernet Link Configuration" msgstr "Configuración del link Ethernet WAN" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:488 msgid "Found Device" msgstr "Dispositivo encontrado" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:490 msgid "Subdevice" msgstr "Subdispositivo" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:496 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:511 msgid "UPnP Status" msgstr "Estado UPnP" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:499 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:514 msgid "" "UPnP has been disabled; Do you have more than one UPnP Internet Gateway " "Device on your LAN ?" -msgstr "" -"UPnP se ha deshabilitado; ¿Tienes más de un dispositivo pasarela UPnP en tu " -"red local?" +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:502 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:517 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." +msgstr "UPnP no ha encontrado ningún dispositivo UPnP compatible en tu red local." -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:510 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:525 #, 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:512 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:527 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:516 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:531 #, 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:518 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:533 #, 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." #. {0} is TCP or UDP -#. {1,number,#####} prevents 12345 from being output as 12,345 in the English locale. +#. {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:527 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:541 #, 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:529 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:543 #, java-format msgid "{0} port {1,number,#####} was not forwarded by UPnP." msgstr "{0} puerto {1,number,#####} no fue transmitido por UPnP." -#: ../../../router/java/src/net/i2p/router/transport/UPnPManager.java:162 +#: ../../../router/java/src/net/i2p/router/transport/UPnPManager.java:200 msgid "UPnP is not enabled" msgstr "UPnP no está habilitado." @@ -591,12 +578,12 @@ msgid "NTCP connections" msgstr "Conexiones NTCP" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:748 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1954 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2169 msgid "Limit" msgstr "LÃmite" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:749 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1955 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2170 msgid "Timeout" msgstr "Tiempo de espera" @@ -609,13 +596,13 @@ msgid "Backlogged?" msgstr "Atrasadas?" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:775 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2017 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2232 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88 msgid "Inbound" msgstr "Entrante" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:777 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2019 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2234 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88 msgid "Outbound" msgstr "Saliente" @@ -625,143 +612,144 @@ msgstr "Saliente" msgid "peers" msgstr "pares" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1953 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2168 msgid "UDP connections" msgstr "conexiones UDP" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1960 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2175 msgid "Sort by peer hash" msgstr "Ordenar por hash" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1962 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2177 msgid "Direction/Introduction" msgstr "Dirección/Introducción" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1964 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2179 msgid "Sort by idle inbound" msgstr "Ordenar por inactividad de entrada" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1966 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2181 msgid "Sort by idle outbound" msgstr "Ordenar por inactividad de salida" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1969 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2184 msgid "Sort by inbound rate" msgstr "Ordenar por tasa de entrada" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1971 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2186 msgid "Sort by outbound rate" msgstr "Ordenar por tasa de salida" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1974 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2189 msgid "Sort by connection uptime" msgstr "Ordenar por el tiempo de actividad" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1976 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2191 msgid "Sort by clock skew" msgstr "Ordenar por desviación de reloj" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1979 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2194 msgid "Sort by congestion window" msgstr "Ordenar por ventana de congestión" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1981 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2196 msgid "Sort by slow start threshold" msgstr "Ordenar por umbral de inicio lento" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1984 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2199 msgid "Sort by round trip time" msgstr "Ordenar por el tiempo de ida y vuelta" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1986 -msgid "Sort by round trip time deviation" -msgstr "Ordenar por desviación de tiempo de ida y vuelta" - -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1988 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2203 msgid "Sort by retransmission timeout" msgstr "Ordenar por tiempo de espera de retransmisión" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1991 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2206 msgid "Sort by outbound maximum transmit unit" msgstr "Ordenar por unidad de transmisión máxima de salida" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1993 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2208 msgid "Sort by packets sent" msgstr "Ordenar por paquetes enviados" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1995 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2210 msgid "Sort by packets received" msgstr "Ordenar por paquetes recibidos" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1998 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2213 msgid "Sort by packets retransmitted" msgstr "Ordenar por paquetes retransmitidos" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2000 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2215 msgid "Sort by packets received more than once" msgstr "Ordenar por paquetes recibidos más de una vez" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2021 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2236 msgid "We offered to introduce them" msgstr "Nos hemos ofrecido a introducirlos" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2023 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2238 msgid "They offered to introduce us" msgstr "Se han ofrecido a introducirnos" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2027 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2242 msgid "Choked" msgstr "Atascado" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2035 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2250 msgid "1 fail" msgstr "1 fallado" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2037 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2252 #, java-format msgid "{0} fails" msgstr "{0} fallados" #. 1 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2043 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2258 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171 #: ../java/src/net/i2p/router/web/ProfilesHelper.java:13 msgid "Banned" msgstr "Baneado" +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2310 +msgid "backlogged" +msgstr "atrasados" + #. buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n"); -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2173 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2390 msgid "SUMMARY" msgstr "RESUMEN" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:187 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:190 msgid "Dropping tunnel requests: Too slow" msgstr "Descartando solicitudes de túneles: Demasiado lento" #. don't even bother, since we are so overloaded locally -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:330 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:333 msgid "Dropping tunnel requests: Overloaded" msgstr "Descartando solicitudes de túnel: sobrecarga" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:539 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:542 msgid "Rejecting tunnels: Request overload" msgstr "Rechazando túneles: Sobrecarga de solicitudes" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:570 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:573 msgid "Rejecting tunnels: Connection limit" msgstr "Rechazando túneles: LÃmite de conexión" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:773 -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:794 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:777 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:798 msgid "Dropping tunnel requests: High load" msgstr "Descartando solicitudes de túnel: Carga alta" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:786 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:877 msgid "Dropping tunnel requests: Queue time" msgstr "Descartando solicitudes de túnel: Tiempo de cola" #. Automatically generated pseudo-java for xgettext - do not edit -#. Translators may wish to translate a few of these, do not bother to translate all of them!! +#. Translators may wish to translate a few of these, do not bother to +#. translate all of them!! #: ../java/build/Countries.java:3 msgid "Anonymous Proxy" msgstr "Proxy anónimo" @@ -1750,7 +1738,7 @@ msgstr "Zambia" msgid "Zimbabwe" msgstr "Zimbabwe" -#: ../java/src/net/i2p/router/web/CSSHelper.java:117 +#: ../java/src/net/i2p/router/web/CSSHelper.java:118 #: ../java/src/net/i2p/router/web/HomeHelper.java:33 #: ../java/strings/Strings.java:29 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:203 @@ -1790,7 +1778,7 @@ msgstr "Zimbabwe" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:209 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:222 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:148 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:150 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:214 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:232 @@ -1845,25 +1833,21 @@ msgstr "Consola del Router I2P" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:51 msgid "Error updating the configuration - please see the error logs" -msgstr "" -"Error al actualizar la configuración - ¡por favor consulta los registros de " -"errores!" +msgstr "Error al actualizar la configuración - ¡por favor consulta los registros de errores!" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:61 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:297 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:322 msgid "Configuration saved successfully" msgstr "Configuración guardada con éxito" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:63 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:427 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:299 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:324 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:96 msgid "" "Error saving the configuration (applied but not saved) - please see the " "error logs" -msgstr "" -"Error al guardar la configuración (aplicada pero no guardada) - ¡por favor " -"consulta los registros de errores!" +msgstr "Error al guardar la configuración (aplicada pero no guardada) - ¡por favor consulta los registros de errores!" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:35 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:437 @@ -1940,9 +1924,7 @@ msgstr "Nuevo cliente añadido" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:215 msgid "" "Client configuration saved successfully - restart required to take effect." -msgstr "" -"Configuración de cliente guardada - Es necesario reiniciar para que los " -"cambios surtan efecto." +msgstr "Configuración de cliente guardada - Es necesario reiniciar para que los cambios surtan efecto." #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:230 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:243 @@ -1950,9 +1932,8 @@ msgstr "" msgid "Bad client index." msgstr "Ãndice de clientes en mal estado." -#. #. What do we do here? -#. +#. #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:237 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:248 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:259 @@ -2040,10 +2021,9 @@ msgstr "Error al iniciar el complemento {0}" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:425 msgid "" -"Interface configuration saved successfully - restart required to take effect." -msgstr "" -"Configuración de interfaz guardada - Es necesario reiniciar para que los " -"cambios surtan efecto." +"Interface configuration saved successfully - restart required to take " +"effect." +msgstr "Configuración de interfaz guardada - Es necesario reiniciar para que los cambios surtan efecto." #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:86 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:267 @@ -2140,7 +2120,7 @@ msgstr "Borrar" #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:25 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:26 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:854 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:855 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:419 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:439 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:455 @@ -2149,7 +2129,7 @@ msgstr "Eliminar seleccionados" #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:26 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:27 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:873 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:874 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:417 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:425 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:437 @@ -2255,17 +2235,13 @@ msgstr "Guardados los ajustes de los registros" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48 msgid "" "Add additional logging statements above. Example: net.i2p.router.tunnel=WARN" -msgstr "" -"Añadir nuevos argumentos para el registro arriba. Ejemplo: net.i2p.router." -"tunnel=WARN" +msgstr "Añadir nuevos argumentos para el registro arriba. Ejemplo: net.i2p.router.tunnel=WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:49 msgid "" -"Or put entries in the logger.config file. Example: logger.record.net.i2p." -"router.tunnel=WARN" -msgstr "" -"O añadir nuevos argumentos en el archivo logger.config Ejemplo: logger." -"record.net.i2p.router.tunnel =WARN" +"Or put entries in the logger.config file. Example: " +"logger.record.net.i2p.router.tunnel=WARN" +msgstr "O añadir nuevos argumentos en el archivo logger.config Ejemplo: logger.record.net.i2p.router.tunnel =WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:50 msgid "Valid levels are DEBUG, INFO, WARN, ERROR, CRIT" @@ -2275,7 +2251,7 @@ msgstr "Los niveles válidos son DEBUG, INFO, WARN, ERROR, CRIT" #. http://www.dhs.gov/xinfoshare/programs/Copy_of_press_release_0046.shtm #. but pink instead of yellow for WARN #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:106 +#: ../java/src/net/i2p/router/web/LogsHelper.java:114 msgid "CRIT" msgstr "CRIT" @@ -2284,23 +2260,23 @@ msgid "DEBUG" msgstr "DEBUG" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:108 +#: ../java/src/net/i2p/router/web/LogsHelper.java:116 msgid "ERROR" msgstr "ERROR" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:112 +#: ../java/src/net/i2p/router/web/LogsHelper.java:120 msgid "INFO" msgstr "INFO" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:110 +#: ../java/src/net/i2p/router/web/LogsHelper.java:118 msgid "WARN" msgstr "WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:88 #: ../java/src/net/i2p/router/web/HomeHelper.java:192 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:808 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:809 msgid "Remove" msgstr "Quitar" @@ -2408,7 +2384,7 @@ msgstr "EstadÃsticas" msgid "Advanced" msgstr "Avanzado" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:54 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:53 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:31 #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:34 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:417 @@ -2421,100 +2397,105 @@ msgstr "Avanzado" msgid "Save changes" msgstr "Guardar cambios" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:136 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:135 msgid "Rechecking router reachability..." msgstr "Repitida verificación de la accesibilidad del router ..." -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:174 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176 msgid "Updating IP address" msgstr "Actualizando dirección IP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:193 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:195 msgid "Disabling TCP completely" msgstr "Desactivando TCP por completo" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:198 -msgid "Updating inbound TCP address to" -msgstr "Actualizando las direcciones de entrada TCP a " +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:200 +#, java-format +msgid "Updating TCP address to {0}" +msgstr "Actualizando la dirección TCP a {0}" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:203 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:207 msgid "Disabling inbound TCP" msgstr "Desactivando TCP entrante" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:205 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:209 msgid "Updating inbound TCP address to auto" msgstr "Actualizando la dirección TCP de entrada a automático" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:216 -msgid "Updating inbound TCP port to" -msgstr "Actualizando el puerto de entrada TCP a " +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:222 +#, java-format +msgid "Updating TCP port to {0}" +msgstr "Actualizando el puerto TCP a {0}" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:219 -msgid "Updating inbound TCP port to auto" -msgstr "Actualizando el puerto de entrada TCP a automático" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:224 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 +msgid "Warning - ports less than 1024 are not recommended" +msgstr "Advertencia: no se recomienda usar puertos inferiores al 1024" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 -msgid "Updating UDP port from" -msgstr "Actualizando el puerto UDP desde" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:228 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:255 +msgid "Invalid port" +msgstr "Puerto no válido" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 -msgid "to" -msgstr "a" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:233 +msgid "Updating inbound TCP port to auto" +msgstr "Actualizando el puerto de entrada TCP a automático" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 +#, java-format +msgid "Updating UDP port to {0}" +msgstr "Actualizando el puerto UDP a {0}" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:272 msgid "Gracefully restarting into Hidden Router Mode" msgstr "Reiniciando de forma controlada en modo router oculto" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:274 msgid "Gracefully restarting to exit Hidden Router Mode" msgstr "Reiniciando de forma controlada para salir del modo router oculto" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:258 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:283 msgid "Enabling UPnP, restart required to take effect" -msgstr "" -"Activando UPnP, se requiere un reinicio para que los cambios surtan efecto." +msgstr "Activando UPnP, se requiere un reinicio para que los cambios surtan efecto." -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:260 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:285 msgid "Disabling UPnP, restart required to take effect" -msgstr "" -"Deshabilitando UPnP, se requiere un reinicio para que los cambios surtan " -"efecto." +msgstr "Deshabilitando UPnP, se requiere un reinicio para que los cambios surtan efecto." -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:268 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:293 msgid "Enabling laptop mode" msgstr "Activando el modo ordenador portátil" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:270 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:295 msgid "Disabling laptop mode" msgstr "Desactivando el modo ordenador portátil" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:277 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:302 msgid "Disabling UDP" msgstr "Deshabilitando UDP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:279 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:304 msgid "Enabling UDP" msgstr "Habilitando UDP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:286 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:311 msgid "Requiring SSU introducers" msgstr "Requeriendo introductores SSU" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:345 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:369 +msgid "Invalid address" +msgstr "Dirección no válida" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:374 #, java-format msgid "The hostname or IP {0} is not publicly routable" msgstr "El nombre de host o IP {0} no es enrutable públicamente" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:348 -#, java-format -msgid "The hostname or IP {0} is invalid" -msgstr "El nombre de host o IP {0} no es válido" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:374 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:399 msgid "Updating bandwidth share percentage" msgstr "Actualizando el porcentaje de compartición del ancho de banda" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:404 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:429 msgid "Updated bandwidth limits" msgstr "LÃmites del ancho de banda actualizados" @@ -2601,7 +2582,7 @@ msgstr "Configuración guardada con éxito." #. Normal browsers send value, IE sends button label #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:34 -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:174 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:175 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:393 msgid "Shutdown immediately" msgstr "Apagar en seguida" @@ -2623,7 +2604,7 @@ msgstr "Reiniciar inmediatamente" #. ctx.router().shutdown(Router.EXIT_HARD_RESTART); // never returns #. give the UI time to respond #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:47 -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:142 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:163 msgid "Restart" msgstr "Reiniciar" @@ -2649,113 +2630,122 @@ msgstr "Apagando en {0}" msgid "Restart in {0}" msgstr "Reiniciando en {0}" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:169 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:170 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:391 msgid "Shutdown gracefully" msgstr "Apagar de forma controlada" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:173 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:174 msgid "Graceful shutdown initiated" msgstr "Iniciado el apagado controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:178 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:179 msgid "Shutdown immediately! boom bye bye bad bwoy" msgstr "Apagar inmediatamente! Boom adiós chico malo" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:179 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:180 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:395 msgid "Cancel graceful shutdown" msgstr "Cancelar el apagado controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:181 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:182 msgid "Graceful shutdown cancelled" msgstr "Cancelado el apagado controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:182 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:183 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:407 msgid "Graceful restart" msgstr "Reinicio controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:187 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:188 msgid "Graceful restart requested" msgstr "Ha sido solicitado el reinicio controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:188 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:189 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:409 msgid "Hard restart" msgstr "Reinicio brusco" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:193 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:194 msgid "Hard restart requested" msgstr "Reinicio brusco solicitado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:194 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:195 msgid "Rekey and Restart" msgstr "Cambiar claves y reiniciar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:195 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:196 msgid "Rekeying after graceful restart" msgstr "Reinicio de claves después del reinicio controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:198 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:199 msgid "Rekey and Shutdown" msgstr "Cambiar claves y apagar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:199 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:200 msgid "Rekeying after graceful shutdown" msgstr "Reinicio de claves después del apagado controlado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:202 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:203 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:435 msgid "Run I2P on startup" msgstr "Ejecutar I2P al arrancar el sistema" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:204 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:205 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:437 msgid "Don't run I2P on startup" msgstr "No ejecutar I2P al arrancar el sistema" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:206 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:455 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:461 msgid "Dump threads" msgstr "Deshechar threads" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:213 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:214 #, java-format msgid "Threads dumped to {0}" msgstr "hilos desechados a {0}" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:214 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:463 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:215 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:469 msgid "View console on startup" msgstr "Mostrar consola al iniciar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:216 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:217 msgid "Console is to be shown on startup" msgstr "La consola se mostrará al iniciar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:465 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:218 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:471 msgid "Do not view console on startup" msgstr "No mostrar consola al iniciar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:219 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:220 msgid "Console is not to be shown on startup" msgstr "La consola no se mostrará al iniciar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:228 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:457 +msgid "Force GC" +msgstr "Forzar GC" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:223 +msgid "Full garbage collection requested" +msgstr "Solicitada recolección completa" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:232 msgid "Service installed" msgstr "Servicio instalado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:230 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:234 msgid "Warning: unable to install the service" msgstr "Advertencia: no se puede instalar el servicio" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:237 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:241 msgid "Service removed" msgstr "Servicio quitado" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:239 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:243 msgid "Warning: unable to remove the service" msgstr "Advertencia: no se puede quitar el servicio" @@ -2765,23 +2755,17 @@ msgstr "Filtro de estadÃsticas y ubicación actualizados correctamente a " #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:119 msgid "Full statistics enabled - restart required to take effect" -msgstr "" -"EstadÃsticas completas habilitadas - Es necesario reiniciar para que surtan " -"efecto." +msgstr "EstadÃsticas completas habilitadas - Es necesario reiniciar para que surtan efecto." #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:121 msgid "Full statistics disabled - restart required to take effect" -msgstr "" -"EstadÃsticas completas deshabilitadas - Es necesario reiniciar para que " -"surtan efecto." +msgstr "EstadÃsticas completas deshabilitadas - Es necesario reiniciar para que surtan efecto." #: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:124 msgid "" "Graph list updated, may take up to 60s to be reflected here and on the <a " "href=\"graphs.jsp\">Graphs Page</a>" -msgstr "" -"Lista de los gráficos actualizada, puede tardar hasta 60s en reflejarse aquà " -"y en la <a href=\"graphs.jsp\">Página de Gráficos</a>" +msgstr "Lista de los gráficos actualizada, puede tardar hasta 60s en reflejarse aquà y en la <a href=\"graphs.jsp\">Página de Gráficos</a>" #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:28 msgid "Save order" @@ -2846,7 +2830,8 @@ msgstr "movido" msgid "Saved order of sections." msgstr "sucesión de secciones guardada" -#. the count isn't really correct anyway, since we don't check for actual changes +#. the count isn't really correct anyway, since we don't check for actual +#. changes #. addFormNotice("Updated settings for " + updated + " pools."); #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:136 msgid "Updated settings for all pools." @@ -2857,13 +2842,11 @@ msgid "Exploratory tunnel configuration saved successfully." msgstr "Ajustes de los túneles exploratorios guardados con éxito" #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:143 -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:37 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:51 msgid "" "Error saving the configuration (applied but not saved) - please see the " "error logs." -msgstr "" -"Error al guardar la configuración (aplicada pero no guardada) - ¡por favor " -"consulta los registros de errores!" +msgstr "Error al guardar la configuración (aplicada pero no guardada) - ¡por favor consulta los registros de errores!" #. * dummies for translation #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14 @@ -2896,19 +2879,15 @@ msgstr "ADVERTENCIA DE ANONIMATO - Los ajustes incluyen túneles de 0 saltos." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:80 msgid "ANONYMITY WARNING - Settings include 1-hop tunnels." -msgstr "" -"ADVERTENCIA DE ANONIMATO - Los ajustes incluyen los túneles de 1 salto." +msgstr "ADVERTENCIA DE ANONIMATO - Los ajustes incluyen los túneles de 1 salto." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:83 msgid "PERFORMANCE WARNING - Settings include very long tunnels." -msgstr "" -"ADVERTENCIA DE RENDIMIENTO - Los ajustes incluyen túneles de gran longitud." +msgstr "ADVERTENCIA DE RENDIMIENTO - Los ajustes incluyen túneles de gran longitud." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:86 msgid "PERFORMANCE WARNING - Settings include high tunnel quantities." -msgstr "" -"ADVERTENCIA DE RENDIMIENTO - Los ajustes incluyen grandes cantidades de " -"túneles." +msgstr "ADVERTENCIA DE RENDIMIENTO - Los ajustes incluyen grandes cantidades de túneles." #. buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n"); #. tunnel depth @@ -2939,91 +2918,95 @@ msgstr "Opciones de Entrada" msgid "Outbound options" msgstr "Opciones de Salida" -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:32 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:46 msgid "Theme change saved." msgstr "Cambio del tema guardado." -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:34 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:48 msgid "Refresh the page to view." msgstr "Actualiza la página para ver." -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:62 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:25 +msgid "Set theme universally across all apps" +msgstr "Establecer el tema para todas las aplicaciones" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 msgid "Arabic" msgstr "Ãrabe" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:62 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 msgid "Czech" msgstr "Checo" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:62 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 msgid "Danish" msgstr "Danés" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "English" msgstr "Inglés" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Estonian" msgstr "Estoniano" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Finnish" msgstr "Finlandés" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "German" msgstr "Alemán" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Greek" msgstr "Griego" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Spanish" msgstr "Español" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Dutch" msgstr "Neerlandés" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "French" msgstr "Francés" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Hungarian" msgstr "Húngaro" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Italian" msgstr "Italiano" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Polish" msgstr "Polaco" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:65 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 msgid "Portuguese" msgstr "Portugués" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:65 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 msgid "Russian" msgstr "Ruso" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:65 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 msgid "Swedish" msgstr "Sueco" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:66 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 msgid "Chinese" msgstr "Chino" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:66 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 msgid "Ukrainian" msgstr "Ucraniano" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:66 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 msgid "Vietnamese" msgstr "Vietnamita" @@ -3033,9 +3016,7 @@ msgstr "Actualización disponible; tratando de descargarla" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:105 msgid "Update available, click button on left to download" -msgstr "" -"Actualización disponible; ¡presiona el botón al lado izquierdo para " -"descargarla!" +msgstr "Actualización disponible; ¡presiona el botón al lado izquierdo para descargarla!" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111 msgid "No update available" @@ -3069,7 +3050,7 @@ msgid "Updating refresh frequency to {0}" msgstr "Actualizando la frecuencia de refresco a {0}" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:151 -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:112 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:111 #: ../java/src/net/i2p/router/web/GraphHelper.java:361 msgid "Never" msgstr "Nunca" @@ -3092,19 +3073,19 @@ msgstr "Actualizando claves de confianza." msgid "Updating unsigned update URL to {0}" msgstr "Actualizando URL de actualización sin firma a {0}" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:114 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:113 msgid "Every" msgstr "cada" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:132 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:131 msgid "Notify only" msgstr "Sólo notificar" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:139 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:138 msgid "Download and verify only" msgstr "Sólo descargar y verificar" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:147 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:146 msgid "Download, verify, and restart" msgstr "Descargar, verificar y reiniciar" @@ -3112,9 +3093,7 @@ msgstr "Descargar, verificar y reiniciar" msgid "" "Invalid form submission, probably because you used the 'back' or 'reload' " "button on your browser. Please resubmit." -msgstr "" -"El formulario introducido es inválido, probablemente por haber utilizado el " -"botón 'atrás' ó 'refrescar' del navegador. Por favor, reinténtelo." +msgstr "El formulario introducido es inválido, probablemente por haber utilizado el botón 'atrás' ó 'refrescar' del navegador. Por favor, reinténtelo." #: ../java/src/net/i2p/router/web/GraphHelper.java:159 msgid "Combined bandwidth graph" @@ -3245,9 +3224,7 @@ msgstr "Libreta de direcciones" #: ../java/src/net/i2p/router/web/HomeHelper.java:27 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:250 msgid "Manage your I2P hosts file here (I2P domain name resolution)" -msgstr "" -"Administrar el archivo hosts de I2P aquà (resolución de nombres de dominio " -"I2P)" +msgstr "Administrar el archivo hosts de I2P aquà (resolución de nombres de dominio I2P)" #: ../java/src/net/i2p/router/web/HomeHelper.java:28 msgid "Configure Bandwidth" @@ -3291,7 +3268,7 @@ msgid "I2P Router Help" msgstr "Ayuda de Router I2P" #: ../java/src/net/i2p/router/web/HomeHelper.java:33 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:146 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:148 msgid "Router Console" msgstr "Consola del Router" @@ -3318,10 +3295,8 @@ msgstr "Informes de errores" msgid "Bug tracker" msgstr "Rastreador de errores" -#: ../java/src/net/i2p/router/web/HomeHelper.java:40 -msgid "The Italian Bittorrent Resource" -msgstr "El Recurso Bittorrent Italiano" - +#. "colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http +#. ://colombo-bt.i2p/" + S + I + "colomboicon.png" + S + #: ../java/src/net/i2p/router/web/HomeHelper.java:41 msgid "Dev Forum" msgstr "Foro de desarrollo" @@ -3363,9 +3338,7 @@ msgstr "Foro" msgid "" "A public anonymous Git hosting site - supports pulling via Git and HTTP and " "pushing via SSH" -msgstr "" -"un sitio anfitrión git anónimo y público - soporta halar a través de Git y " -"HTTP, y empujar a través de SSH" +msgstr "un sitio anfitrión git anónimo y público - soporta halar a través de Git y HTTP, y empujar a través de SSH" #: ../java/src/net/i2p/router/web/HomeHelper.java:46 msgid "Anonymous Git Hosting" @@ -3392,7 +3365,8 @@ msgstr "Documentación técnica" msgid "Debian and Tahoe-LAFS repositories" msgstr "Repositorios de Debian y Tahoe-LAFS" -#. _x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S + I + "education.png" + S + +#. _x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S +#. + I + "education.png" + S + #: ../java/src/net/i2p/router/web/HomeHelper.java:50 msgid "killyourtv.i2p" msgstr "killyourtv.i2p" @@ -3431,7 +3405,7 @@ msgstr "Sitio web del proyecto" #: ../java/src/net/i2p/router/web/HomeHelper.java:56 msgid "I2P Network Statistics" -msgstr "EstadÃsticas de red I2P" +msgstr "EstadÃsticas de redes I2P" #: ../java/src/net/i2p/router/web/HomeHelper.java:57 msgid "Technical Docs" @@ -3460,12 +3434,10 @@ msgstr "El proxy HTTP no está activo" #: ../java/src/net/i2p/router/web/HomeHelper.java:103 #, java-format msgid "Your browser is not properly configured to use the HTTP proxy at {0}" -msgstr "" -"Tu navegador no está correctamente configurado para utilizar el proxy HTTP " -"en {0}" +msgstr "Tu navegador no está correctamente configurado para utilizar el proxy HTTP en {0}" #: ../java/src/net/i2p/router/web/HomeHelper.java:194 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:810 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:811 msgid "Name" msgstr "Nombre" @@ -3474,20 +3446,20 @@ msgid "URL" msgstr "URL" #: ../java/src/net/i2p/router/web/HomeHelper.java:214 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:856 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:857 msgid "Add" msgstr "Añadir" -#: ../java/src/net/i2p/router/web/LogsHelper.java:29 -#: ../java/src/net/i2p/router/web/LogsHelper.java:72 +#: ../java/src/net/i2p/router/web/LogsHelper.java:32 +#: ../java/src/net/i2p/router/web/LogsHelper.java:79 msgid "File location" msgstr "Ubicación del archivo" -#: ../java/src/net/i2p/router/web/LogsHelper.java:69 +#: ../java/src/net/i2p/router/web/LogsHelper.java:76 msgid "File not found" msgstr "Archivo no encontrado" -#: ../java/src/net/i2p/router/web/LogsHelper.java:87 +#: ../java/src/net/i2p/router/web/LogsHelper.java:94 msgid "No log messages" msgstr "No hay mensajes de registro" @@ -3766,10 +3738,10 @@ msgstr "El complemento de {0} está dañado." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:212 #, java-format msgid "Plugin from {0} does not contain the required configuration file" -msgstr "" -"El complemento de {0} no contiene el archivo de configuración necesario." +msgstr "El complemento de {0} no contiene el archivo de configuración necesario." -#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' + signer + "</b>"); +#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' +#. + signer + "</b>"); #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:225 #, java-format msgid "Plugin from {0} contains an invalid key" @@ -3806,14 +3778,11 @@ msgstr "Este complemento requiere la versión {0} o superior de Java." msgid "" "Downloaded plugin is for new installs only, but the plugin is already " "installed" -msgstr "" -"El complemento descargado es sólo para instalaciones nuevas, pero el " -"complemento ya está instalado." +msgstr "El complemento descargado es sólo para instalaciones nuevas, pero el complemento ya está instalado." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:329 msgid "Installed plugin does not contain the required configuration file" -msgstr "" -"El complemento instalado no contiene el archivo de configuración necesario." +msgstr "El complemento instalado no contiene el archivo de configuración necesario." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:337 msgid "Signature of downloaded plugin does not match installed plugin" @@ -3822,23 +3791,17 @@ msgstr "La firma del complemento descargado no coincide con la del instalado." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:344 #, java-format msgid "Downloaded plugin version {0} is not newer than installed plugin" -msgstr "" -"El complemento descargado con versión {0} no es más reciente que la versión " -"ya instalada." +msgstr "El complemento descargado con versión {0} no es más reciente que la versión ya instalada." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:351 #, java-format msgid "Plugin update requires installed plugin version {0} or higher" -msgstr "" -"La actualización del complemento requiere tener instalada la versión {0} o " -"superior de este complemento." +msgstr "La actualización del complemento requiere tener instalada la versión {0} o superior de este complemento." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:358 #, java-format msgid "Plugin update requires installed plugin version {0} or lower" -msgstr "" -"La actualización del complemento requiere tener instalada la versión {0} o " -"inferior de este complemento." +msgstr "La actualización del complemento requiere tener instalada la versión {0} o inferior de este complemento." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:366 #, java-format @@ -3861,9 +3824,7 @@ msgstr "El complemento se instalará al siguiente reinicio." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:410 msgid "Plugin is for upgrades only, but the plugin is not installed" -msgstr "" -"El complemento es sólo para actualizaciones, pero el complemento aún no está " -"instalado." +msgstr "El complemento es sólo para actualizaciones, pero el complemento aún no está instalado." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:423 #, java-format @@ -4073,9 +4034,7 @@ msgstr "capacidades" msgid "" "peak throughput (bytes per second) over a 1 minute period that the peer has " "sustained in a single tunnel" -msgstr "" -"rendimiento máximo (bytes por segundo) durante un perÃodo de 1 minuto que el " -"par ha sostenido en un solo túnel" +msgstr "rendimiento máximo (bytes por segundo) durante un perÃodo de 1 minuto que el par ha sostenido en un solo túnel" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282 msgid "speed" @@ -4133,61 +4092,57 @@ msgstr "Baneado hasta el reinicio o en {0}" msgid "unban now" msgstr "Desbanear ahora" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:313 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:314 msgid "Bandwidth usage" msgstr "Uso de ancho de banda" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:323 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:324 msgid "Outbound Bytes/sec" msgstr "bytes/seg de salida" #. def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3); -#: ../java/src/net/i2p/router/web/StatSummarizer.java:325 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:326 msgid "Inbound Bytes/sec" msgstr "bytes/seg de entrada" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 #: ../java/src/net/i2p/router/web/StatSummarizer.java:329 #: ../java/src/net/i2p/router/web/StatSummarizer.java:330 #: ../java/src/net/i2p/router/web/StatSummarizer.java:331 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:332 msgid "Bps" msgstr "B/seg." -#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 msgid "Out average" msgstr "Promedio de salida" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 -#: ../java/src/net/i2p/router/web/StatSummarizer.java:331 -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:150 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:330 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:332 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:155 msgid "max" msgstr "max" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:330 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:331 msgid "In average" msgstr "Promedio de entrada" -#: ../java/src/net/i2p/router/web/StatsGenerator.java:57 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:58 msgid "GO" msgstr "¡Adelante!" -#: ../java/src/net/i2p/router/web/StatsGenerator.java:60 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:61 msgid "Statistics gathered during this router's uptime" msgstr "EstadÃsticas recopiladas durante el funcionamiento de este router" -#: ../java/src/net/i2p/router/web/StatsGenerator.java:63 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:64 msgid "" "The data gathered is quantized over a 1 minute period, so should just be " "used as an estimate." -msgstr "" -"Los datos recogidos se cuantifican en un perÃodo de 1 minuto, por lo que " -"sólo deben utilizarse como estimación." +msgstr "Los datos recogidos se cuantifican en un perÃodo de 1 minuto, por lo que sólo deben utilizarse como estimación." -#: ../java/src/net/i2p/router/web/StatsGenerator.java:64 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:65 msgid "These statistics are primarily used for development and debugging." -msgstr "" -"Estas estadÃsticas se utilizan principalmente para el desarrollo y " -"depuración." +msgstr "Estas estadÃsticas se utilizan principalmente para el desarrollo y depuración." #: ../java/src/net/i2p/router/web/StatsGenerator.java:106 #: ../java/src/net/i2p/router/web/StatsGenerator.java:157 @@ -4206,12 +4161,14 @@ msgstr "Promedio de eventos móviles por perÃodo" msgid "Highest events per period" msgstr "Más altos eventos por perÃodo" -#. if (showAll && (curFreq.getMaxAverageEventsPerPeriod() > 0) && (curFreq.getAverageEventsPerPeriod() > 0) ) { +#. if (showAll && (curFreq.getMaxAverageEventsPerPeriod() > 0) && +#. (curFreq.getAverageEventsPerPeriod() > 0) ) { #. buf.append("(current is "); #. buf.append(pct(curFreq.getAverageEventsPerPeriod()/curFreq.getMaxAverageEventsPerPeriod())); #. buf.append(" of max)"); #. } -#. buf.append(" <i>avg interval between updates:</i> (").append(num(curFreq.getAverageInterval())).append("ms, min "); +#. buf.append(" <i>avg interval between updates:</i> +#. (").append(num(curFreq.getAverageInterval())).append("ms, min "); #. buf.append(num(curFreq.getMinAverageInterval())).append("ms)"); #: ../java/src/net/i2p/router/web/StatsGenerator.java:136 msgid "Lifetime average events per period" @@ -4295,9 +4252,7 @@ msgstr "Ayuda" msgid "" "Configure startup of clients and webapps (services); manually start dormant " "services" -msgstr "" -"Configura el arranque de clientes y servicios (webapps) o lanza servicios no " -"activados" +msgstr "Configura el arranque de clientes y servicios (webapps) o lanza servicios no activados" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 msgid "I2P Services" @@ -4375,9 +4330,7 @@ msgstr "General" msgid "" "Your Local Identity is your unique I2P router identity, similar to an ip " "address but tailored to I2P. " -msgstr "" -"La identidad local es la identidad única de tu router, similar a una " -"dirección ip, pero en el ámbito de i2p." +msgstr "La identidad local es la identidad única de tu router, similar a una dirección ip, pero en el ámbito de i2p." #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:274 msgid "Never disclose this to anyone, as it can reveal your real world ip." @@ -4417,9 +4370,7 @@ msgstr "Tiempo de servicio" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:341 msgid "" "Help with configuring your firewall and router for optimal I2P performance" -msgstr "" -"Ayuda con la configuración de cortafuegos y router para un rendimiento " -"óptimo de I2P" +msgstr "Ayuda con la configuración de cortafuegos y router para un rendimiento óptimo de I2P" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:356 msgid "Configure I2P Updates" @@ -4431,8 +4382,7 @@ msgstr "Actualización de I2P" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:383 msgid "Peers we've been talking to in the last few minutes/last hour" -msgstr "" -"pares con los que hemos comunicado en los últimos minutos / la última hora" +msgstr "pares con los que hemos comunicado en los últimos minutos / la última hora" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:386 msgid "Active" @@ -4456,8 +4406,7 @@ msgstr "Alta capacidad" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:413 msgid "The number of peers available for network database inquiries" -msgstr "" -"cantidad de pares disponibles para consultas a la base de datos sobre la red" +msgstr "El número de pares disponibles para las consultas de la base de datos de redes" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:422 msgid "The total number of peers in our network database" @@ -4485,7 +4434,8 @@ msgstr "Usado" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:496 msgid "" -"Used for building and testing tunnels, and communicating with floodfill peers" +"Used for building and testing tunnels, and communicating with floodfill " +"peers" msgstr "para crear y probar túneles, y para comunicar con los pares floodfill" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:499 @@ -4500,9 +4450,7 @@ msgstr "túneles que usas para acceder o provisionar servicios en la red" msgid "" "Tunnels we are participating in, directly contributing bandwith to the " "network" -msgstr "" -"Túneles en los que tomamos parte, asà aportando de forma directa ancho de " -"banda a la red. " +msgstr "Túneles en los que tomamos parte, asà aportando de forma directa ancho de banda a la red. " #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:517 msgid "Participating" @@ -4512,9 +4460,7 @@ msgstr "Participando en" msgid "" "The ratio of tunnel hops we provide to tunnel hops we use - a value greater " "than 1.00 indicates a positive contribution to the network" -msgstr "" -"La relación de saltos de túnel que proporcionamos y los que usamos - un " -"valor mayor de 1,00 indica una aportación positiva a la red." +msgstr "La relación de saltos de túnel que proporcionamos y los que usamos - un valor mayor de 1,00 indica una aportación positiva a la red." #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:526 msgid "Share ratio" @@ -4611,9 +4557,7 @@ msgstr "Bloqueado por un cortafuegos" msgid "" "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and " "restart" -msgstr "" -"ERR-puerto UDP en uso - ¡establece i2np.udp.internalPort=xxxx = en la " -"configuración avanzada y reinicia!" +msgstr "ERR-puerto UDP en uso - ¡establece i2np.udp.internalPort=xxxx = en la configuración avanzada y reinicia!" #: ../java/src/net/i2p/router/web/SummaryHelper.java:181 msgid "ERR-No Active Peers, Check Network Connection and Firewall" @@ -4621,8 +4565,7 @@ msgstr "ERR-No hay pares activos, Compruebe la conexión de red y cortafuegos" #: ../java/src/net/i2p/router/web/SummaryHelper.java:184 msgid "ERR-UDP Disabled and Inbound TCP host/port not set" -msgstr "" -"ERR-UDP deshabilitado y el puerto/host de entrada TCP no ha sido establecido" +msgstr "ERR-UDP deshabilitado y el puerto/host de entrada TCP no ha sido establecido" #: ../java/src/net/i2p/router/web/SummaryHelper.java:186 msgid "WARN-Firewalled with UDP Disabled" @@ -4630,8 +4573,7 @@ msgstr "AVISO-Tras cortafuegos con UDP deshabilitado" #: ../java/src/net/i2p/router/web/SummaryHelper.java:411 msgid "Add/remove/edit & control your client and server tunnels" -msgstr "" -"Agregar/quitar/editar & controlar tus túneles de cliente y servidor" +msgstr "Agregar/quitar/editar & controlar tus túneles de cliente y servidor" #: ../java/src/net/i2p/router/web/SummaryHelper.java:423 msgid "Server" @@ -4686,7 +4628,8 @@ msgstr "Descargar actualización ( {0} )" #. Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC" #. <br> is optional, to help the browser make the lines even in the button -#. If the translation is shorter than the English, you should probably not include <br> +#. If the translation is shorter than the English, you should probably not +#. include <br> #: ../java/src/net/i2p/router/web/SummaryHelper.java:684 #, java-format msgid "Download Unsigned<br>Update {0}" @@ -4704,45 +4647,45 @@ msgstr "Comprobar conexión de red y NAT/cortafuegos" msgid "Reseed" msgstr "Resembrar" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:812 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:813 msgid "Order" msgstr "orden" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:829 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:830 msgid "Top" msgstr "cabeza" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:842 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:843 msgid "Down" msgstr "abajo" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:847 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:848 msgid "Bottom" msgstr "fondo" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:859 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:860 msgid "Select a section to add" msgstr "elegir una sección a añadir" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:118 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:121 #, java-format msgid "events in {0}" msgstr "eventos en {0}" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:120 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:123 #, java-format msgid "averaged for {0}" msgstr "promedio por {0}" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:130 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:133 msgid "Events per period" msgstr "Eventos por perÃodo" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:149 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:154 msgid "avg" msgstr "promedio" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:151 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:156 msgid "now" msgstr "ahora" @@ -5201,7 +5144,8 @@ msgstr "Configurar ancho de banda" msgid "Router is down" msgstr "Router está caÃdo" -#. We have intl defined when this is included, but not when compiled standalone. +#. We have intl defined when this is included, but not when compiled +#. standalone. #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:291 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:291 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:317 @@ -5299,9 +5243,7 @@ msgstr "Limitador de ancho de banda" msgid "" "I2P will work best if you configure your rates to match the speed of your " "internet connection." -msgstr "" -"I2P funcionará mejor si configuras tus tasas de modo que coincidan con la " -"velocidad de tu conexión a Internet." +msgstr "I2P funcionará mejor si configuras tus tasas de modo que coincidan con la velocidad de tu conexión a Internet." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:361 msgid "KBps In" @@ -5334,15 +5276,12 @@ msgstr "I2P requiere al menos 12KBps para permitir el intercambio." msgid "" "Please enable sharing (participating in tunnels) by configuring more " "bandwidth. " -msgstr "" -"Por favor, ¡activa la compartición (participación en túneles) configurando " -"un mayor ancho de banda." +msgstr "Por favor, ¡activa la compartición (participación en túneles) configurando un mayor ancho de banda." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:404 msgid "" "It improves your anonymity by creating cover traffic, and helps the network." -msgstr "" -"Esto mejorará tu anonimato creando tráfico de cobertura, y ayuda a la red." +msgstr "Esto mejorará tu anonimato creando tráfico de cobertura, y ayuda a la red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:406 #, java-format @@ -5353,9 +5292,7 @@ msgstr "Has configurado I2P para compartir {0} KBps." msgid "" "The higher the share bandwidth the more you improve your anonymity and help " "the network." -msgstr "" -"Cuanto mayor sea el ancho de banda compartido, mayor es el anonimato y más " -"ayudas a la red." +msgstr "Cuanto mayor sea el ancho de banda compartido, mayor es el anonimato y más ayudas a la red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:413 msgid "Advanced network configuration page" @@ -5414,9 +5351,7 @@ msgstr "Configuración Clientes" msgid "" "The Java clients listed below are started by the router and run in the same " "JVM." -msgstr "" -"Los clientes de Java que se enumeran a continuación son iniciados por el " -"router y se ejecutan en la misma JVM." +msgstr "Los clientes de Java que se enumeran a continuación son iniciados por el router y se ejecutan en la misma JVM." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:420 msgid "To change other client options, edit the file" @@ -5446,9 +5381,7 @@ msgstr "Habilitada con SSL obligatorio" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:461 msgid "Disabled - Clients outside this Java process may not connect" -msgstr "" -"Deshabilitada - Los clientes fuera de este proceso Java podrÃan no fallar en " -"conectarse" +msgstr "Deshabilitada - Los clientes fuera de este proceso Java podrÃan no fallar en conectarse" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:463 msgid "I2CP Port" @@ -5482,9 +5415,7 @@ msgstr "La configuración por defecto funcionará para la mayorÃa de la gente." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:501 msgid "Any changes made here must also be configured in the external client." -msgstr "" -"Cualquier cambio realizado aquà también debe configurarse en el cliente " -"externo." +msgstr "Cualquier cambio realizado aquà también debe configurarse en el cliente externo." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:503 msgid "Many clients do not support SSL or authorization." @@ -5498,18 +5429,11 @@ msgstr "Configuración de las Applicaciones Web" msgid "" "The Java web applications listed below are started by the webConsole client " "and run in the same JVM as the router. They are usually web applications " -"accessible through the router console. They may be complete applications (e." -"g. i2psnark),front-ends to another client or application which must be " +"accessible through the router console. They may be complete applications " +"(e.g. i2psnark),front-ends to another client or application which must be " "separately enabled (e.g. susidns, i2ptunnel), or have no web interface at " "all (e.g. addressbook)." -msgstr "" -"Las aplicaciones web Java que se enumeran a continuación son iniciadas por " -"el cliente de consola web y se ejecutan en la misma JVM que el router. Por " -"lo general son aplicaciones web, accesibles a través de la consola del " -"router. Pueden ser aplicaciones completas (i2psnark por ejemplo), interfaces " -"de otro cliente o aplicaciónes que deben ser habilitadas por separado (por " -"ejemplo, susidns, i2ptunnel), o que no tienen interfaz web en absoluto (por " -"ejemplo, la libreta de direcciones)." +msgstr "Las aplicaciones web Java que se enumeran a continuación son iniciadas por el cliente de consola web y se ejecutan en la misma JVM que el router. Por lo general son aplicaciones web, accesibles a través de la consola del router. Pueden ser aplicaciones completas (i2psnark por ejemplo), interfaces de otro cliente o aplicaciónes que deben ser habilitadas por separado (por ejemplo, susidns, i2ptunnel), o que no tienen interfaz web en absoluto (por ejemplo, la libreta de direcciones)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:517 msgid "" @@ -5517,11 +5441,7 @@ msgid "" "directory; however the .war file and web app will reappear when you update " "your router to a newer version, so disabling the web app here is the " "preferred method." -msgstr "" -"Una aplicación web también se puede desactivar quitando el archivo .war del " -"directorio de aplicaciones web; Sin embargo, el archivo .war y la aplicación " -"web volverán a aparecer al actualizar el router a una nueva versión, asà que " -"el método preferido es deshabilitar la aplicación web aquÃ." +msgstr "Una aplicación web también se puede desactivar quitando el archivo .war del directorio de aplicaciones web; Sin embargo, el archivo .war y la aplicación web volverán a aparecer al actualizar el router a una nueva versión, asà que el método preferido es deshabilitar la aplicación web aquÃ." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:531 msgid "Plugin Configuration" @@ -5529,9 +5449,7 @@ msgstr "Configuración de Complementos" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:533 msgid "The plugins listed below are started by the webConsole client." -msgstr "" -"Los complementos enumerados a continuación son iniciados por el cliente de " -"consola web." +msgstr "Los complementos enumerados a continuación son iniciados por el cliente de consola web." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:543 msgid "Plugin Installation" @@ -5581,9 +5499,7 @@ msgstr "El llavero del router se utiliza para descifrar leaseSets encriptados." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:402 msgid "" "The keyring may contain keys for local or remote encrypted destinations." -msgstr "" -"El llavero puede contener claves de cifrado para los destinos locales o " -"remotos." +msgstr "El llavero puede contener claves de cifrado para los destinos locales o remotos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:408 msgid "Manual Keyring Addition" @@ -5636,8 +5552,7 @@ msgstr "Formato de escritura del registro" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:367 msgid "" "(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)" -msgstr "" -"(usa 'd' = fecha, 'c' = clase, 't' = hilo, 'p' = prioridad, 'm' = mensaje)" +msgstr "(usa 'd' = fecha, 'c' = clase, 't' = hilo, 'p' = prioridad, 'm' = mensaje)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:369 msgid "Log date format" @@ -5647,9 +5562,7 @@ msgstr "Formato de fecha del registro" msgid "" "('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' " "= millisecond)" -msgstr "" -"('MM' = mes, 'dd' = dÃa, 'HH' = hora, 'mm' = minuto, 'ss' = segundo, 'SSS' = " -"milisegundo)" +msgstr "('MM' = mes, 'dd' = dÃa, 'HH' = hora, 'mm' = minuto, 'ss' = segundo, 'SSS' = milisegundo)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:375 msgid "Max log file size" @@ -5663,9 +5576,7 @@ msgstr "Nivel predeterminado de registro" msgid "" "(DEBUG and INFO are not recommended defaults, as they will drastically slow " "down your router)" -msgstr "" -"(DEBUG e INFO no se recomiendan por defecto, ya que ralentizaran " -"drásticamente el router)" +msgstr "(DEBUG e INFO no se recomiendan por defecto, ya que ralentizaran drásticamente el router)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:385 msgid "Log level overrides" @@ -5753,9 +5664,7 @@ msgstr "Acción al cambiar de IP" msgid "" "Laptop mode - Change router identity and UDP port when IP changes for " "enhanced anonymity" -msgstr "" -"Modo Portátil - cambia la identidad del router y el puerto UDP cuando cambia " -"la IP para aumentar el anonimato" +msgstr "Modo Portátil - cambia la identidad del router y el puerto UDP cuando cambia la IP para aumentar el anonimato" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:464 msgid "Experimental" @@ -5776,8 +5685,7 @@ msgstr "Desactivar por completo" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:476 msgid "(select only if behind a firewall that blocks outbound UDP)" -msgstr "" -"(seleccionar sólo si se encuentra tras un firewall que bloquea UDP saliente)" +msgstr "(seleccionar sólo si se encuentra tras un firewall que bloquea UDP saliente)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:488 msgid "TCP Configuration" @@ -5798,9 +5706,7 @@ msgstr "si no estamos bloqueados por el cortafuegos" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:504 msgid "Always use auto-detected IP address (Not firewalled)" -msgstr "" -"Siempre utilizar la dirección IP detectada automáticamente (no bloqueado por " -"cortafuegos)" +msgstr "Siempre utilizar la dirección IP detectada automáticamente (no bloqueado por cortafuegos)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:514 msgid "Disable inbound (Firewalled)" @@ -5809,9 +5715,7 @@ msgstr "Deshabilitar entrada (bloqueado por cortafuegos)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:520 msgid "" "(select only if behind a firewall that throttles or blocks outbound TCP)" -msgstr "" -"(Selecciona sólo si estás detrás de un cortafuegos que regule o bloquee la " -"salida por TCP)" +msgstr "(Selecciona sólo si estás detrás de un cortafuegos que regule o bloquee la salida por TCP)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:522 msgid "Externally reachable TCP port" @@ -5833,9 +5737,7 @@ msgstr "Notas" msgid "" "a) Do not reveal your port numbers to anyone! b) Changing these settings " "will restart your router." -msgstr "" -"a) ¡No reveles tus números de puerto a nadie! b) La modificación de estos " -"ajustes reiniciará el router." +msgstr "a) ¡No reveles tus números de puerto a nadie! b) La modificación de estos ajustes reiniciará el router." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:547 msgid "Configuration Help" @@ -5845,57 +5747,42 @@ msgstr "Ayuda de Configuración" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:598 msgid "" "While I2P will work fine behind most firewalls, your speeds and network " -"integration will generally improve if the I2P port is forwarded for both UDP " -"and TCP." -msgstr "" -"Mientras I2P funcionará bien incluso bloqueado por la mayorÃa de " -"cotrafuegos, las velocidades y la integración en la red mejorarán " -"generalmente si el puerto de I2P está abierto tanto para UDP como para TCP." +"integration will generally improve if the I2P port is forwarded for both UDP" +" and TCP." +msgstr "Mientras I2P funcionará bien incluso bloqueado por la mayorÃa de cotrafuegos, las velocidades y la integración en la red mejorarán generalmente si el puerto de I2P está abierto tanto para UDP como para TCP." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:551 msgid "" -"If you can, please poke a hole in your firewall to allow unsolicited UDP and " -"TCP packets to reach you." -msgstr "" -"Si es posible, ¡por favor permite el paso de los paquetes TCP y UDP no " -"solicitados por el cortafuegos!" +"If you can, please poke a hole in your firewall to allow unsolicited UDP and" +" TCP packets to reach you." +msgstr "Si es posible, ¡por favor permite el paso de los paquetes TCP y UDP no solicitados por el cortafuegos!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:553 msgid "" "If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole " "punching with \"SSU introductions\" to relay traffic." -msgstr "" -"Si no puede ser, I2P soporta UPnP (Universal Plug and Play) y UDP hole " -"punching con \"introducciones SSU\" para transmitir tráfico." +msgstr "Si no puede ser, I2P soporta UPnP (Universal Plug and Play) y UDP hole punching con \"introducciones SSU\" para transmitir tráfico." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:555 msgid "" -"Most of the options above are for special situations, for example where UPnP " -"does not work correctly, or a firewall not under your control is doing harm." -msgstr "" -"La mayorÃa de las opciones anteriores son para situaciones especiales, por " -"ejemplo, cuando UPnP no funciona correctamente, o un cortafuegos que no está " -"bajo tu control está haciendo daño." +"Most of the options above are for special situations, for example where UPnP" +" does not work correctly, or a firewall not under your control is doing " +"harm." +msgstr "La mayorÃa de las opciones anteriores son para situaciones especiales, por ejemplo, cuando UPnP no funciona correctamente, o un cortafuegos que no está bajo tu control está haciendo daño." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:557 msgid "Certain firewalls such as symmetric NATs may not work well with I2P." -msgstr "" -"Puede que algunos cortafuegos como NATs simétricos no funcionen bien con I2P." +msgstr "Puede que algunos cortafuegos como NATs simétricos no funcionen bien con I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:566 msgid "" "UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect " "the external IP address and forward ports." -msgstr "" -"UPnP se utiliza para comunicarse con dispositivos de puerta de enlace a " -"Internet (IGDs) para detectar la dirección IP externa y los puertos que se " -"deben abrir." +msgstr "UPnP se utiliza para comunicarse con dispositivos de puerta de enlace a Internet (IGDs) para detectar la dirección IP externa y los puertos que se deben abrir." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:568 msgid "UPnP support is beta, and may not work for any number of reasons" -msgstr "" -"El soporte de UPnP está en fase beta, y puede no funcionar correctamente por " -"varias razones" +msgstr "El soporte de UPnP está en fase beta, y puede no funcionar correctamente por varias razones" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:570 msgid "No UPnP-compatible device present" @@ -5919,8 +5806,7 @@ msgstr "Múltiples cotrafuegos/routers en la ruta de conexión a Internet" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:580 msgid "UPnP device change, reset, or address change" -msgstr "" -"El dispositivo UPnP ha cambiado, reiniciado, o ha cambiado de dirección" +msgstr "El dispositivo UPnP ha cambiado, reiniciado, o ha cambiado de dirección" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:582 msgid "Review the UPnP status here." @@ -5930,15 +5816,11 @@ msgstr "Revisar el estado de UPnP aquÃ." msgid "" "UPnP may be enabled or disabled above, but a change requires a router " "restart to take effect." -msgstr "" -"Encima de esto UPnP puede ser activado o desactivado, pero un cambio " -"requiere un reinicio del router para que surta efecto." +msgstr "Encima de esto UPnP puede ser activado o desactivado, pero un cambio requiere un reinicio del router para que surta efecto." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:586 msgid "Hostnames entered above will be published in the network database." -msgstr "" -"Los nombres de host introducidos arriba se publicarán en la base de datos de " -"red." +msgstr "Los nombres de host introducidos arriba se publicarán en la base de datos de red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:588 msgid "They are <b>not private</b>." @@ -5946,20 +5828,16 @@ msgstr "<b>No son privados.</b>" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:590 msgid "" -"Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1." -msgstr "" -"Además, <b>no se debe introducir una dirección IP privada</b> como 127.0.0.1 " -"o 192.168.1.1." +"Also, <b>do not enter a private IP address</b> like 127.0.0.1 or " +"192.168.1.1." +msgstr "Además, <b>no se debe introducir una dirección IP privada</b> como 127.0.0.1 o 192.168.1.1." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:592 msgid "" "If you specify the wrong IP address or hostname, or do not properly " "configure your NAT or firewall, your network performance will degrade " "substantially." -msgstr "" -"Si se especifica una dirección IP o nombre de host incorrectos, o no se " -"configura correctamente el NAT o cortafuegos, el rendimiento de la red se " -"degradará considerablemente." +msgstr "Si se especifica una dirección IP o nombre de host incorrectos, o no se configura correctamente el NAT o cortafuegos, el rendimiento de la red se degradará considerablemente." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:594 msgid "When in doubt, leave the settings at the defaults." @@ -5974,18 +5852,13 @@ msgid "" "If you think you have opened up your firewall and I2P still thinks you are " "firewalled, remember that you may have multiple firewalls, for example both " "software packages and external hardware routers." -msgstr "" -"Si crees que has abierto el cortafuegos y I2P todavÃa piensa que sigue " -"bloqueado por uno, recuerda que podrÃas tener múltiples cortafuegos, por " -"ejemplo, en paquetes de software o en routers externos." +msgstr "Si crees que has abierto el cortafuegos y I2P todavÃa piensa que sigue bloqueado por uno, recuerda que podrÃas tener múltiples cortafuegos, por ejemplo, en paquetes de software o en routers externos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:604 msgid "" "If there is an error, the <a href=\"logs.jsp\">logs</a> may also help " "diagnose the problem." -msgstr "" -"Si hay un error, el <a href=\"logs.jsp\">registro</a> también puede ayudar a " -"diagnosticar el problema." +msgstr "Si hay un error, el <a href=\"logs.jsp\">registro</a> también puede ayudar a diagnosticar el problema." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:608 msgid "Your UDP port does not appear to be firewalled." @@ -5999,75 +5872,55 @@ msgstr "El puerto UDP parece estar bloqueado por un cortafuegos." msgid "" "As the firewall detection methods are not 100% reliable, this may " "occasionally be displayed in error." -msgstr "" -"Como los métodos de detección de cortafuegos no son 100% fiables, esto puede " -"aparecer por error." +msgstr "Como los métodos de detección de cortafuegos no son 100% fiables, esto puede aparecer por error." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:616 msgid "" "However, if it appears consistently, you should check whether both your " "external and internal firewalls are open for your port." -msgstr "" -"Sin embargo, si aparece constantemente, deberÃas comprobar si tanto el " -"cortafuegos interno como externo tienen los puertos abiertos." +msgstr "Sin embargo, si aparece constantemente, deberÃas comprobar si tanto el cortafuegos interno como externo tienen los puertos abiertos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:618 msgid "" "I2P will work fine when firewalled, there is no reason for concern. When " "firewalled, the router uses \"introducers\" to relay inbound connections." -msgstr "" -"I2P funcionará bien aún bloqueado por un cortafuegos, no hay motivo de " -"preocupación. Si se está detrás de un cortafuegos, el router utiliza " -"\"introductores\" para transmitir las conexiones entrantes." +msgstr "I2P funcionará bien aún bloqueado por un cortafuegos, no hay motivo de preocupación. Si se está detrás de un cortafuegos, el router utiliza \"introductores\" para transmitir las conexiones entrantes." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:620 msgid "" "However, you will get more participating traffic and help the network more " "if you can open your firewall(s)." -msgstr "" -"No obstante, obtendrás más tráfico participante y ayudará más a la red si " -"puedes abrir el/los cortafuegos." +msgstr "No obstante, obtendrás más tráfico participante y ayudará más a la red si puedes abrir el/los cortafuegos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:622 msgid "" "If you think you have already done so, remember that you may have both a " "hardware and a software firewall, or be behind an additional, institutional " "firewall you cannot control." -msgstr "" -"Si crees que ya lo has hecho, recuerda que podrÃas tener tanto un " -"cortafuegos de hardware como un cortafuegos por software, o podrÃas estar " -"detrás de otro cortafuegos institucional fuera de tu control." +msgstr "Si crees que ya lo has hecho, recuerda que podrÃas tener tanto un cortafuegos de hardware como un cortafuegos por software, o podrÃas estar detrás de otro cortafuegos institucional fuera de tu control." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:624 msgid "" "Also, some routers cannot correctly forward both TCP and UDP on a single " "port, or may have other limitations or bugs that prevent them from passing " "traffic through to I2P." -msgstr "" -"Además, algunos routers no pueden encaminar correctamente TCP y UDP por el " -"mismo puerto, o pueden tener otras limitaciones o bugs que les impidan pasar " -"tráfico a través de I2P." +msgstr "Además, algunos routers no pueden encaminar correctamente TCP y UDP por el mismo puerto, o pueden tener otras limitaciones o bugs que les impidan pasar tráfico a través de I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:628 msgid "The router is currently testing whether your UDP port is firewalled." -msgstr "" -"El router está probando si tu puerto UDP está bloqueado por un cortafuegos." +msgstr "El router está probando si tu puerto UDP está bloqueado por un cortafuegos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:632 msgid "" "The router is not configured to publish its address, therefore it does not " "expect incoming connections." -msgstr "" -"El router no está configurado para publicar su dirección, por lo tanto, no " -"espera conexiones entrantes." +msgstr "El router no está configurado para publicar su dirección, por lo tanto, no espera conexiones entrantes." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:634 msgid "" "Hidden mode is automatically enabled for added protection in certain " "countries." -msgstr "" -"El modo oculto se activa automáticamente para mayor protección en algunos " -"paÃses." +msgstr "El modo oculto se activa automáticamente para mayor protección en algunos paÃses." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:636 msgid "WARN - Firewalled and Fast" @@ -6075,21 +5928,16 @@ msgstr "AVISO - Bloqueado por cortafuegos y rápido" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:638 msgid "" -"You have configured I2P to share more than 128KBps of bandwidth, but you are " -"firewalled." -msgstr "" -"Has configurado I2P para compartir más de 128 kbps de ancho de banda, pero " -"te encuentras bloqueado por un cortafuegos" +"You have configured I2P to share more than 128KBps of bandwidth, but you are" +" firewalled." +msgstr "Has configurado I2P para compartir más de 128 kbps de ancho de banda, pero te encuentras bloqueado por un cortafuegos" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:640 msgid "" "While I2P will work fine in this configuration, if you really have over " "128KBps of bandwidth to share, it will be much more helpful to the network " "if you open your firewall." -msgstr "" -"Aunque I2P funcionará bien con esta configuración, si realmente tiene más de " -"128 kbps de ancho de banda para compartir, será mucho más útil a la red si " -"abre los puertos de su router." +msgstr "Aunque I2P funcionará bien con esta configuración, si realmente tiene más de 128 kbps de ancho de banda para compartir, será mucho más útil a la red si abre los puertos de su router." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:642 msgid "WARN - Firewalled and Floodfill" @@ -6098,16 +5946,12 @@ msgstr "AVISO - Bloqueado por cortafuegos y Floodfill" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:644 msgid "" "You have configured I2P to be a floodfill router, but you are firewalled." -msgstr "" -"Has configurado I2P ser un router floodfill, pero estás bloqueado por un " -"cortafuegos." +msgstr "Has configurado I2P ser un router floodfill, pero estás bloqueado por un cortafuegos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:646 msgid "" "For best participation as a floodfill router, you should open your firewall." -msgstr "" -"Para mejorar la participación como router floodfill, deberÃas abrir tu " -"cortafuegos." +msgstr "Para mejorar la participación como router floodfill, deberÃas abrir tu cortafuegos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:648 msgid "WARN - Firewalled with Inbound TCP Enabled" @@ -6117,24 +5961,17 @@ msgstr "AVISO - Bloqueado por cortafuegos con TCP entrante activado" msgid "" "You have configured inbound TCP, however your UDP port is firewalled, and " "therefore it is likely that your TCP port is firewalled as well." -msgstr "" -"Has configurado TCP entrante, sin embargo el puerto UDP está bloqueado por " -"un cortafuegos, y por lo tanto es probable que el puerto TCP esté bloqueado " -"también." +msgstr "Has configurado TCP entrante, sin embargo el puerto UDP está bloqueado por un cortafuegos, y por lo tanto es probable que el puerto TCP esté bloqueado también." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:652 msgid "" -"If your TCP port is firewalled with inbound TCP enabled, routers will not be " -"able to contact you via TCP, which will hurt the network." -msgstr "" -"Si el puerto TCP está bloqueado por un cortafuegos con TCP entrante " -"habilitado, los routers no podrán ponerse en contacto con el tuyo a través " -"de TCP, lo que perjudicará a la red." +"If your TCP port is firewalled with inbound TCP enabled, routers will not be" +" able to contact you via TCP, which will hurt the network." +msgstr "Si el puerto TCP está bloqueado por un cortafuegos con TCP entrante habilitado, los routers no podrán ponerse en contacto con el tuyo a través de TCP, lo que perjudicará a la red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:654 msgid "Please open your firewall or disable inbound TCP above." -msgstr "" -"Por favor, ¡abre los puertos del cortafuegos o desactiva TCP entrante arriba!" +msgstr "Por favor, ¡abre los puertos del cortafuegos o desactiva TCP entrante arriba!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:656 msgid "WARN - Firewalled with UDP Disabled" @@ -6148,9 +5985,7 @@ msgstr "Has configurado TCP entrante, sin embargo has deshabilitado UDP." msgid "" "You appear to be firewalled on TCP, therefore your router cannot accept " "inbound connections." -msgstr "" -"Parece que estás siendo bloqueado por un cortafuegos en TCP, por lo tanto el " -"router no puede aceptar conexiones entrantes." +msgstr "Parece que estás siendo bloqueado por un cortafuegos en TCP, por lo tanto el router no puede aceptar conexiones entrantes." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:662 msgid "Please open your firewall or enable UDP." @@ -6164,8 +5999,7 @@ msgstr "ERR - desviación de reloj" msgid "" "Your system's clock is skewed, which will make it difficult to participate " "in the network." -msgstr "" -"El reloj del sistema está desviado, lo que hará difÃcil participar en la red." +msgstr "El reloj del sistema está desviado, lo que hará difÃcil participar en la red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:668 msgid "Correct your clock setting if this error persists." @@ -6179,9 +6013,7 @@ msgstr "ERR - Dirección TCP privada" msgid "" "You must never advertise an unroutable IP address such as 127.0.0.1 or " "192.168.1.1 as your external address." -msgstr "" -"Nunca debes anunciar una dirección IP no enrutable, como 127.0.0.1 o " -"192.168.1.1 como tu dirección externa." +msgstr "Nunca debes anunciar una dirección IP no enrutable, como 127.0.0.1 o 192.168.1.1 como tu dirección externa." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:674 msgid "Correct the address or disable inbound TCP above." @@ -6200,18 +6032,13 @@ msgid "" "I2P does not work well behind this type of firewall. You will probably not " "be able to accept inbound connections, which will limit your participation " "in the network." -msgstr "" -"I2P no funciona bien detrás de este tipo de cortafuegos. Probablemente no " -"serás capaz de aceptar conexiones entrantes, lo que limitará tu " -"participación en la red." +msgstr "I2P no funciona bien detrás de este tipo de cortafuegos. Probablemente no serás capaz de aceptar conexiones entrantes, lo que limitará tu participación en la red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:682 msgid "" "ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config " "and restart" -msgstr "" -"ERR - el puerto UDP está en uso - ¡Establece i2np.udp.internalPort=xxxx en " -"configuración avanzada reinicia!" +msgstr "ERR - el puerto UDP está en uso - ¡Establece i2np.udp.internalPort=xxxx en configuración avanzada reinicia!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:684 msgid "I2P was unable to bind to port 8887 or other configured port." @@ -6221,37 +6048,27 @@ msgstr "I2P no pudo enlazar con el puerto 8887 o el otro puerto configurado." msgid "" "Check to see if another program is using the configured port. If so, stop " "that program or configure I2P to use a different port." -msgstr "" -"Comprueba si otro programa está utilizando el puerto configurado. Si es asÃ, " -"cierra el programa o configura I2P para utilizar un puerto diferente." +msgstr "Comprueba si otro programa está utilizando el puerto configurado. Si es asÃ, cierra el programa o configura I2P para utilizar un puerto diferente." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:688 msgid "" "This may be a transient error, if the other program is no longer using the " "port." -msgstr "" -"Esto puede ser un error transitorio, si el otro programa ya no utiliza el " -"puerto." +msgstr "Esto puede ser un error transitorio, si el otro programa ya no utiliza el puerto." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:690 msgid "However, a restart is always required after this error." -msgstr "" -"Sin embargo, siempre es necesario reiniciar después de que aparezca este " -"error." +msgstr "Sin embargo, siempre es necesario reiniciar después de que aparezca este error." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:692 msgid "ERR - UDP Disabled and Inbound TCP host/port not set" -msgstr "" -"ERR - UDP deshabilitado y el host/puerto de entrada TCP no ha sido " -"establecido" +msgstr "ERR - UDP deshabilitado y el host/puerto de entrada TCP no ha sido establecido" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:694 msgid "" "You have not configured inbound TCP with a hostname and port above, however " "you have disabled UDP." -msgstr "" -"Arriba no has configurado TCP entrante con un nombre de host y puerto, sin " -"embargo has deshabilitado UDP." +msgstr "Arriba no has configurado TCP entrante con un nombre de host y puerto, sin embargo has deshabilitado UDP." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:696 msgid "Therefore your router cannot accept inbound connections." @@ -6267,17 +6084,13 @@ msgstr "ERR - Error Client Manager I2CP - verificar los registros" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:702 msgid "This is usually due to a port 7654 conflict. Check the logs to verify." -msgstr "" -"Esto se debe generalmente a un conflicto en el puerto 7654. ¡Revisa los " -"registros para verificarlo!" +msgstr "Esto se debe generalmente a un conflicto en el puerto 7654. ¡Revisa los registros para verificarlo!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:704 msgid "" "Do you have another I2P instance running? Stop the conflicting program and " "restart I2P." -msgstr "" -"¿Tienes otra instancia I2P funcionando? ¡Deten el programa en conflicto y " -"reinicia I2P!" +msgstr "¿Tienes otra instancia I2P funcionando? ¡Deten el programa en conflicto y reinicia I2P!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:139 msgid "config peers" @@ -6302,9 +6115,7 @@ msgstr "Banear / Desbanear manualmente a un par" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:413 msgid "" "Banning will prevent the participation of this peer in tunnels you create." -msgstr "" -"Banear evitará que este par participe en cualquiera de los túneles que vayas " -"crear." +msgstr "Banear evitará que este par participe en cualquiera de los túneles que vayas crear." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:423 msgid "Adjust Profile Bonuses" @@ -6312,15 +6123,11 @@ msgstr "Ajustar Perfil de Bonus" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:425 msgid "" -"Bonuses may be positive or negative, and affect the peer's inclusion in Fast " -"and High Capacity tiers. Fast peers are used for client tunnels, and High " +"Bonuses may be positive or negative, and affect the peer's inclusion in Fast" +" and High Capacity tiers. Fast peers are used for client tunnels, and High " "Capacity peers are used for some exploratory tunnels. Current bonuses are " "displayed on the" -msgstr "" -"Los bonus pueden ser positivos o negativos, y afectan a la inclusión de un " -"par en los niveles 'Rápido' y 'de alta capacidad'. Los pares rápidos se " -"utilizan para los túneles de clientes, los par de alta capacidad se utilizan " -"para algunos túneles exploratorios. Los bonus actuales se muestran en la" +msgstr "Los bonus pueden ser positivos o negativos, y afectan a la inclusión de un par en los niveles 'Rápido' y 'de alta capacidad'. Los pares rápidos se utilizan para los túneles de clientes, los par de alta capacidad se utilizan para algunos túneles exploratorios. Los bonus actuales se muestran en la" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:427 msgid "profiles page" @@ -6351,26 +6158,18 @@ msgid "" "Reseeding is the bootstrapping process used to find other routers when you " "first install I2P, or when your router has too few router references " "remaining." -msgstr "" -"Resembrar es el proceso de bootstrapping para encontrar otros routers cuando " -"I2P se instala por primera vez o cuando al router le quedan muy pocas " -"referencias de otros routers." +msgstr "Resembrar es el proceso de bootstrapping para encontrar otros routers cuando I2P se instala por primera vez o cuando al router le quedan muy pocas referencias de otros routers." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:404 msgid "" "If reseeding has failed, you should first check your network connection." -msgstr "" -"El proceso de resembrar ha fallado, primero debes comprobar la conexión de " -"red." +msgstr "El proceso de resembrar ha fallado, primero debes comprobar la conexión de red." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:408 msgid "" "Change these only if HTTP is blocked by a restrictive firewall, reseed has " "failed, and you have access to an HTTP proxy." -msgstr "" -"¡Cambia estos parámetros solamente si HTTP está bloqueado por un cortafuegos " -"restrictivo, el proceso de resembrar ha fracasado, y si tienes acceso a un " -"proxy HTTP!" +msgstr "¡Cambia estos parámetros solamente si HTTP está bloqueado por un cortafuegos restrictivo, el proceso de resembrar ha fracasado, y si tienes acceso a un proxy HTTP!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:410 #, java-format @@ -6463,51 +6262,40 @@ msgstr "Apagar el router" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:387 msgid "" -"Graceful shutdown lets the router satisfy the agreements it has already made " -"before shutting down, but may take a few minutes." -msgstr "" -"El apagado controlado permite al router cumplir los acuerdos que ya ha hecho " -"antes de apagar, pero puede tardar unos minutos." +"Graceful shutdown lets the router satisfy the agreements it has already made" +" before shutting down, but may take a few minutes." +msgstr "El apagado controlado permite al router cumplir los acuerdos que ya ha hecho antes de apagar, pero puede tardar unos minutos." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:389 msgid "" -"If you need to kill the router immediately, that option is available as well." -msgstr "" -"Si tienes que apagar el router inmediatamente, también tienes esa opción" +"If you need to kill the router immediately, that option is available as " +"well." +msgstr "Si tienes que apagar el router inmediatamente, también tienes esa opción" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:399 msgid "" -"If you want the router to restart itself after shutting down, you can choose " -"one of the following." -msgstr "" -"Si deseas que el router se reinicie después del apagado, puedes elegir una " -"de las siguientes opciones." +"If you want the router to restart itself after shutting down, you can choose" +" one of the following." +msgstr "Si deseas que el router se reinicie después del apagado, puedes elegir una de las siguientes opciones." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:401 msgid "" "This is useful in some situations - for example, if you changed some " "settings that client applications only read at startup, such as the " "routerconsole password or the interface it listens on." -msgstr "" -"Esto es útil en algunas situaciones - por ejemplo, si has cambiado algunas " -"opciones de aplicaciones cliente que sólo se leen al iniciar, como la " -"contraseña de la consola del router o tu interfaz de escucha." +msgstr "Esto es útil en algunas situaciones - por ejemplo, si has cambiado algunas opciones de aplicaciones cliente que sólo se leen al iniciar, como la contraseña de la consola del router o tu interfaz de escucha." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:403 msgid "" "A graceful restart will take a few minutes (but your peers will appreciate " "your patience), while a hard restart does so immediately." -msgstr "" -"Un reinicio controlado tardará unos minutos (pero tus pares te agradecerán " -"tu paciencia), mientras que un reinicio duro lo hace inmediatamente." +msgstr "Un reinicio controlado tardará unos minutos (pero tus pares te agradecerán tu paciencia), mientras que un reinicio duro lo hace inmediatamente." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:405 msgid "" -"After tearing down the router, it will wait 1 minute before starting back up " -"again." -msgstr "" -"Después de apagarse completamente, el router esperará 1 minuto antes de " -"volverse a iniciar." +"After tearing down the router, it will wait 1 minute before starting back up" +" again." +msgstr "Después de apagarse completamente, el router esperará 1 minuto antes de volverse a iniciar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:415 msgid "Systray integration" @@ -6517,20 +6305,17 @@ msgstr "integración con la bandeja del sistema" msgid "" "On the windows platform, there is a small application to sit in the system " "tray, allowing you to view the router's status" -msgstr "" -"En la plataforma Windows, hay una pequeña aplicación que se queda en la " -"bandeja del sistema, lo que le permite ver el estado del router" +msgstr "En la plataforma Windows, hay una pequeña aplicación que se queda en la bandeja del sistema, lo que le permite ver el estado del router" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:419 msgid "" "(later on, I2P client applications will be able to integrate their own " "functionality into the system tray as well)." -msgstr "" -"(Más adelante, las aplicaciones I2P de clientes serán capaces de integrar su " -"propia funcionalidad en la bandeja de sistema también)." +msgstr "(Más adelante, las aplicaciones I2P de clientes serán capaces de integrar su propia funcionalidad en la bandeja de sistema también)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:421 -msgid "If you are on windows, you can either enable or disable that icon here." +msgid "" +"If you are on windows, you can either enable or disable that icon here." msgstr "Si estás en Windows, puedes activar o desactivar ese icono aquÃ." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:423 @@ -6547,12 +6332,9 @@ msgstr "Lanzar al iniciar" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:429 msgid "" -"You can control whether I2P is run on startup or not by selecting one of the " -"following options - I2P will install (or remove) a service accordingly." -msgstr "" -"Puedes controlar si I2P se ejecuta automaticamente al arrancar el equipo o " -"no, seleccionando una de las siguientes opciones - I2P instalará (o " -"eliminará) un servicio en consecuencia." +"You can control whether I2P is run on startup or not by selecting one of the" +" following options - I2P will install (or remove) a service accordingly." +msgstr "Puedes controlar si I2P se ejecuta automaticamente al arrancar el equipo o no, seleccionando una de las siguientes opciones - I2P instalará (o eliminará) un servicio en consecuencia." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:431 msgid "If you prefer the command line, you can also run the " @@ -6565,19 +6347,15 @@ msgstr "Nota" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:441 msgid "" -"If you are running I2P as service right now, removing it will shut down your " -"router immediately." -msgstr "" -"Si estás ejecutando I2p como servicio en este momento, quitarlo hará que se " -"apague el router de inmediato." +"If you are running I2P as service right now, removing it will shut down your" +" router immediately." +msgstr "Si estás ejecutando I2p como servicio en este momento, quitarlo hará que se apague el router de inmediato." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:443 msgid "" "You may want to consider shutting down gracefully, as above, then running " "uninstall_i2p_service_winnt.bat." -msgstr "" -"Es recomendable que consideres el apagado controlado como se indica arriba, " -"para ello, ejecuta uninstall_i2p_service_winnt.bat." +msgstr "Es recomendable que consideres el apagado controlado como se indica arriba, para ello, ejecuta uninstall_i2p_service_winnt.bat." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:447 msgid "Debugging" @@ -6589,25 +6367,20 @@ msgstr "Ver cola de tareas" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:453 msgid "" -"At times, it may be helpful to debug I2P by getting a thread dump. To do so, " -"please select the following option and review the thread dumped to <a href=" -"\"logs.jsp#servicelogs\">wrapper.log</a>." -msgstr "" -"A veces, puede ser útil depurar I2P consiguiendo un volcado de hilo. Para " -"ello, selecciona la opción siguiente y revisa el dump en <a href=\"logs." -"jsp#servicelogs\">wrapper.log</a> ." +"At times, it may be helpful to debug I2P by getting a thread dump. To do so," +" please select the following option and review the thread dumped to <a " +"href=\"logs.jsp#servicelogs\">wrapper.log</a>." +msgstr "A veces, puede ser útil depurar I2P consiguiendo un volcado de hilo. Para ello, selecciona la opción siguiente y revisa el dump en <a href=\"logs.jsp#servicelogs\">wrapper.log</a> ." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:459 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:465 msgid "Launch browser on router startup?" msgstr "Iniciar el navegador al arrancar el router?" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:461 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:467 msgid "" "I2P's main configuration interface is this web console, so for your " "convenience I2P can launch a web browser on startup pointing at" -msgstr "" -"La interfaz de configuración principal de I2P es esta consola Web. Para tu " -"comodidad I2P puede lanzar el navegador web en al iniciar apuntando a" +msgstr "La interfaz de configuración principal de I2P es esta consola Web. Para tu comodidad I2P puede lanzar el navegador web en al iniciar apuntando a" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:139 msgid "config summary bar" @@ -6694,35 +6467,26 @@ msgstr "Hay un equilibrio fundamental entre el anonimato y el rendimiento." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:417 msgid "" "Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 " -"hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely " -"reduce performance or reliability." -msgstr "" -"Los túneles de más de tres saltos (por ejemplo, 2 + 0-2 saltos, 3 saltos+ " -"0-1 saltos, 3 saltos + 0-2 saltos), o una alta cantidad incluyendo túneles " -"de respaldo, pueden reducir severamente el rendimiento o la fiabilidad." +"hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely" +" reduce performance or reliability." +msgstr "Los túneles de más de tres saltos (por ejemplo, 2 + 0-2 saltos, 3 saltos+ 0-1 saltos, 3 saltos + 0-2 saltos), o una alta cantidad incluyendo túneles de respaldo, pueden reducir severamente el rendimiento o la fiabilidad." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:420 msgid "High CPU and/or high outbound bandwidth usage may result." -msgstr "" -"Puede resultar en un uso alto de CPU y/o un uso de gran ancho de banda de " -"salida " +msgstr "Puede resultar en un uso alto de CPU y/o un uso de gran ancho de banda de salida " #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:423 msgid "Change these settings with care, and adjust them if you have problems." -msgstr "" -"Cambia esta configuración con cuidado, y ajústala en caso de tener problemas." +msgstr "Cambia esta configuración con cuidado, y ajústala en caso de tener problemas." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:433 msgid "" "Exploratory tunnel setting changes are stored in the router.config file." -msgstr "" -"Los cambios en los túneles exploratorios se almacenan en el archivo router." -"config." +msgstr "Los cambios en los túneles exploratorios se almacenan en el archivo router.config." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:436 msgid "Client tunnel changes are temporary and are not saved." -msgstr "" -"Los cambios en túnel de cliente son de carácter temporal y no se guardarán." +msgstr "Los cambios en túnel de cliente son de carácter temporal y no se guardarán." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:438 msgid "To make permanent client tunnel changes see the" @@ -6746,20 +6510,14 @@ msgstr "Tema de la Consola del Router" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:374 msgid "Theme selection disabled for Internet Explorer, sorry." -msgstr "" -"Lo sentimos, pero la selección de temas está deshabilitada para Internet " -"Explorer." +msgstr "Lo sentimos, pero la selección de temas está deshabilitada para Internet Explorer." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:376 msgid "" "If you're not using IE, it's likely that your browser is pretending to be " "IE; please configure your browser (or proxy) to use a different User Agent " "string if you'd like to access the console themes." -msgstr "" -"Si no estás utilizando Internet Explorer, es probable que tu navegador se " -"esté haciendo pasar por el IE, por favor, configura tu navegador (o proxy) " -"para utilizar un agente de usuario diferente si deseas acceder a los temas " -"de la consola." +msgstr "Si no estás utilizando Internet Explorer, es probable que tu navegador se esté haciendo pasar por el IE, por favor, configura tu navegador (o proxy) para utilizar un agente de usuario diferente si deseas acceder a los temas de la consola." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:379 msgid "Router Console Language" @@ -6769,10 +6527,7 @@ msgstr "Idioma de la Consola del Router" msgid "" "Please contribute to the router console translation project! Contact the " "developers in #i2p-dev on IRC to help." -msgstr "" -"Por favor, ¡contribuye al proyecto de traducción de la consola del router! " -"Ponte en contacto con los desarrolladores en los canales #i2p-dev y #i2p-es " -"del IRC para ayudar." +msgstr "Por favor, ¡contribuye al proyecto de traducción de la consola del router! Ponte en contacto con los desarrolladores en los canales #i2p-dev y #i2p-es del IRC para ayudar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:389 msgid "Apply" @@ -6885,63 +6640,58 @@ msgstr "Tu navegador no soporta iFrames." msgid "Click here to continue." msgstr "Pincha aquà para continuar." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:146 msgid "Internal Error" msgstr "Error interno" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:150 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:152 msgid "Configuration" msgstr "Configuración" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:157 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:160 msgid "Sorry! There has been an internal error." msgstr "Lo sentimos. Se ha producido un error interno." #. note to translators - both parameters are URLs -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:161 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:164 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:335 #, java-format msgid "Please report bugs on {0} or {1}." msgstr "Por favor, ¡informa sobre errores en {0} o {1}!" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:164 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:168 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:339 msgid "" -"You may use the username \"guest\" and password \"guest\" if you do not wish " -"to register." -msgstr "" -"Puedes utilizar el nombre de usuario \"guest\" y contraseña \"guest\" si no " -"deseas registrarte." +"You may use the username \"guest\" and password \"guest\" if you do not wish" +" to register." +msgstr "Puedes utilizar el nombre de usuario \"guest\" y contraseña \"guest\" si no deseas registrarte." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:168 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:170 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:341 msgid "Please include this information in bug reports" msgstr "Por favor, ¡incluye esta información en los informes de error!" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:170 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:172 msgid "Error Details" msgstr "Detalles del error" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:172 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:174 #, java-format msgid "Error {0}" msgstr "Error {0}" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:191 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:194 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:331 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:232 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:241 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:390 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." -msgstr "" -"Ten en cuenta que la información del sistema, las marcas de tiempo del " -"registro y los mensajes del registro pueden proporcionar pistas sobre tu " -"ubicación. Por favor, ¡revisa todos los datos antes de incliurlos en un " -"informe de error!" +"clues to your location; please review everything you include in a bug " +"report." +msgstr "Ten en cuenta que la información del sistema, las marcas de tiempo del registro y los mensajes del registro pueden proporcionar pistas sobre tu ubicación. Por favor, ¡revisa todos los datos antes de incliurlos en un informe de error!" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:148 msgid "Page Not Found" @@ -6951,9 +6701,7 @@ msgstr "Página no encontrada" msgid "" "Sorry! You appear to be requesting a non-existent Router Console page or " "resource." -msgstr "" -"Lo sentimos! Pareces estar intentando entrar en una página de la consola del " -"router o un recurso inexistentes." +msgstr "Lo sentimos! Pareces estar intentando entrar en una página de la consola del router o un recurso inexistentes." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:321 msgid "Error 404" @@ -6977,9 +6725,7 @@ msgstr "Gráficos de rendimiento de I2P" msgid "" "Click a flag to select a language. Click 'configure language' below to " "change it later." -msgstr "" -"Haga click en una bandera para elegir idioma. Click en 'configurar idioma' a " -"continuación para cambiarlo después." +msgstr "Haga click en una bandera para elegir idioma. Click en 'configurar idioma' a continuación para cambiarlo después." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:362 msgid "Search I2P" @@ -7051,11 +6797,9 @@ msgstr "La aplicación web solicitada no se está ejecutando" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:337 msgid "" -"Please visit the <a href=\"/configclients.jsp#webapp\">config clients page</" -"a> to start it." -msgstr "" -"Por favor visita la <a href=\"/configclients.jsp#webapp\">página de " -"configuración de clientes</a> para iniciarla." +"Please visit the <a href=\"/configclients.jsp#webapp\">config clients " +"page</a> to start it." +msgstr "Por favor visita la <a href=\"/configclients.jsp#webapp\">página de configuración de clientes</a> para iniciarla." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:136 msgid "peer connections" diff --git a/apps/routerconsole/locale/messages_it.po b/apps/routerconsole/locale/messages_it.po index 6c0e3ced08edbf50b3a52b0cc4e4fde3a60fb484..ff5a9c6171f7f846c482e525557512f1fb8cd391 100644 --- a/apps/routerconsole/locale/messages_it.po +++ b/apps/routerconsole/locale/messages_it.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: I2P\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-10-12 00:46+0000\n" -"PO-Revision-Date: 2012-10-12 00:44+0000\n" +"POT-Creation-Date: 2012-10-15 17:57+0000\n" +"PO-Revision-Date: 2012-10-12 00:50+0000\n" "Last-Translator: BadCluster <badcluster@i2pmail.org>\n" "Language-Team: Italian (http://www.transifex.com/projects/p/I2P/language/" "it/)\n" @@ -361,7 +361,7 @@ msgstr "Quanto è passato dall'inizio di questa connessione" #: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:756 #: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2188 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:835 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:836 msgid "Up" msgstr "Su" @@ -722,7 +722,7 @@ msgstr "Bannato" #: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2310 msgid "backlogged" -msgstr "" +msgstr "ritardi" #. buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n"); #: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2390 @@ -2134,7 +2134,7 @@ msgstr "Cancella" #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:25 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:26 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:855 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:856 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:419 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:439 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:455 @@ -2143,7 +2143,7 @@ msgstr "Elimina selezionati" #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:26 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:27 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:874 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:875 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:417 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:425 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:437 @@ -2294,7 +2294,7 @@ msgstr "WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:88 #: ../java/src/net/i2p/router/web/HomeHelper.java:192 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:809 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:810 msgid "Remove" msgstr "Rimuovi" @@ -2448,12 +2448,12 @@ msgstr "Aggiornamento porta TCP a {0}" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:224 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 msgid "Warning - ports less than 1024 are not recommended" -msgstr "" +msgstr "Attenzione - è meglio non utilizzare le porte da 0 a 1024!" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:228 #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:255 msgid "Invalid port" -msgstr "" +msgstr "Porta non valida" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:233 msgid "Updating inbound TCP port to auto" @@ -2462,7 +2462,7 @@ msgstr "Aggiornando le porte TCP entranti a automatiche" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 #, java-format msgid "Updating UDP port to {0}" -msgstr "" +msgstr "Aggiornamento porta UDP a {0}" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:272 msgid "Gracefully restarting into Hidden Router Mode" @@ -2502,7 +2502,7 @@ msgstr "Introduttori SSU richiesti" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:369 msgid "Invalid address" -msgstr "" +msgstr "Indirizzo non valido" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:374 #, java-format @@ -2745,11 +2745,11 @@ msgstr "La console non verrà mostrata all'avvio" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:221 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:457 msgid "Force GC" -msgstr "" +msgstr "Forza GC" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:223 msgid "Full garbage collection requested" -msgstr "" +msgstr "Richieste totali" #: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:232 msgid "Service installed" @@ -3468,7 +3468,7 @@ msgstr "" "Il tuo browser non è configurato correttamente per usare il proxy HTTP al {0}" #: ../java/src/net/i2p/router/web/HomeHelper.java:194 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:811 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:812 msgid "Name" msgstr "Nome" @@ -3477,7 +3477,7 @@ msgid "URL" msgstr "URL" #: ../java/src/net/i2p/router/web/HomeHelper.java:214 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:857 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:858 msgid "Add" msgstr "Aggiungi" @@ -4135,37 +4135,37 @@ msgstr "Bannato fino al riavvio o in {0}" msgid "unban now" msgstr "riammissione istantanea" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:314 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:312 msgid "Bandwidth usage" msgstr "Utilizzo di larghezza di banda" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:324 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:322 msgid "Outbound Bytes/sec" msgstr "Bytes/s In Uscita" #. def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3); -#: ../java/src/net/i2p/router/web/StatSummarizer.java:326 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:324 msgid "Inbound Bytes/sec" msgstr "Bytes/s In Entrata" +#: ../java/src/net/i2p/router/web/StatSummarizer.java:327 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 #: ../java/src/net/i2p/router/web/StatSummarizer.java:329 #: ../java/src/net/i2p/router/web/StatSummarizer.java:330 -#: ../java/src/net/i2p/router/web/StatSummarizer.java:331 -#: ../java/src/net/i2p/router/web/StatSummarizer.java:332 msgid "Bps" msgstr "Bps" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:327 msgid "Out average" msgstr "Media In Uscita" +#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 #: ../java/src/net/i2p/router/web/StatSummarizer.java:330 -#: ../java/src/net/i2p/router/web/StatSummarizer.java:332 #: ../java/src/net/i2p/router/web/SummaryRenderer.java:155 msgid "max" msgstr "massimo" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:331 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 msgid "In average" msgstr "Media In Entrata" @@ -4678,13 +4678,13 @@ msgstr "Costruendo i tunnel" #. nicely under 'local destinations' in the summary bar #. note that if the wording changes in i2ptunnel.config, we have to #. keep the old string here as well for existing installs -#: ../java/src/net/i2p/router/web/SummaryHelper.java:462 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:459 #: ../java/strings/Strings.java:36 msgid "shared clients" msgstr "client condivisi" #. Note to translators: parameter is a version, e.g. "0.8.4" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:676 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:677 #, java-format msgid "Download {0} Update" msgstr "Scaricamento {0} Aggiornamento" @@ -4692,40 +4692,40 @@ msgstr "Scaricamento {0} Aggiornamento" #. Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC" #. <br> is optional, to help the browser make the lines even in the button #. If the translation is shorter than the English, you should probably not include <br> -#: ../java/src/net/i2p/router/web/SummaryHelper.java:684 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:685 #, java-format msgid "Download Unsigned<br>Update {0}" msgstr "Scaricamento Aggiornamento {0} Non Firmato<br>" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:709 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:710 msgid "Help with firewall configuration" msgstr "Aiuto con la configurazione del firewall" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:711 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:712 msgid "Check network connection and NAT/firewall" msgstr "Controlla la connessione di rete e il NAT/firewall" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:730 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:731 msgid "Reseed" msgstr "Reseed" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:813 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:814 msgid "Order" msgstr "Ordine" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:830 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:831 msgid "Top" msgstr "Sopra" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:843 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:844 msgid "Down" msgstr "Sotto" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:848 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:849 msgid "Bottom" msgstr "Basso" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:860 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:861 msgid "Select a section to add" msgstr "Seleziona una sezione da aggiungere" diff --git a/apps/routerconsole/locale/messages_pt.po b/apps/routerconsole/locale/messages_pt.po new file mode 100644 index 0000000000000000000000000000000000000000..7ec80b85bd35f5394fc9dc9960c8f68598310fcb --- /dev/null +++ b/apps/routerconsole/locale/messages_pt.po @@ -0,0 +1,6853 @@ +# I2P +# Copyright (C) 2009 The I2P Project +# This file is distributed under the same license as the routerconsole package. +# To contribute translations, see http://www.i2p2.de/newdevelopers +# +# Translators: +# <rutweiller@hotmail.com>, 2012. +# <wicked@riseup.net>, 2012. +msgid "" +msgstr "" +"Project-Id-Version: I2P\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-10-19 07:45+0000\n" +"PO-Revision-Date: 2012-10-19 03:21+0000\n" +"Last-Translator: wicked <wicked@riseup.net>\n" +"Language-Team: Portuguese (http://www.transifex.com/projects/p/I2P/language/" +"pt/)\n" +"Language: pt\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" + +#. NOTE TO TRANSLATORS: Feel free to translate all these as you see fit, there are several options... +#. spaces or not, '.' or not, plural or not. Try not to make it too long, it is used in +#. a lot of tables. +#. milliseconds +#. Note to translators, may be negative or zero, 2999 maximum. +#. {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:1415 +#, java-format +msgid "1 ms" +msgid_plural "{0,number,####} ms" +msgstr[0] "1 ms" +msgstr[1] "{0,number,####} ms" + +#. seconds +#. alternates: secs, sec. 'seconds' is probably too long. +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1419 +#, java-format +msgid "1 sec" +msgid_plural "{0} sec" +msgstr[0] "1 seg" +msgstr[1] "{0} seg" + +#. minutes +#. alternates: mins, min. 'minutes' is probably too long. +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1423 +#, java-format +msgid "1 min" +msgid_plural "{0} min" +msgstr[0] "1 min" +msgstr[1] "{0} min" + +#. hours +#. alternates: hrs, hr., hrs. +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1427 +#, 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:1429 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:341 +msgid "n/a" +msgstr "n/a" + +#. days +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1432 +#, java-format +msgid "1 day" +msgid_plural "{0} days" +msgstr[0] "1 dia" +msgstr[1] "{0} dias" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:128 +#, java-format +msgid "Banned by router hash: {0}" +msgstr "Banido pelo router: {0}" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:130 +msgid "Banned by router hash" +msgstr "Banido pelo router" + +#. Temporary reason, until the job finishes +#: ../../../router/java/src/net/i2p/router/Blocklist.java:653 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:726 +#, java-format +msgid "IP banned by blocklist.txt entry {0}" +msgstr "IP banido pela definição na blocklist.txt {0}" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:765 +msgid "IPs Banned Until Restart" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:789 +msgid "IPs Permanently Banned" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:791 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:66 +msgid "From" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:793 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:67 +msgid "To" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/Blocklist.java:829 +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:47 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:647 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:451 +msgid "none" +msgstr "" + +#. NPE, too early +#. if (_context.router().getRouterInfo().getBandwidthTier().equals("K")) +#. setTunnelStatus("Not expecting tunnel requests: Advertised bandwidth too low"); +#. else +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:73 +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:115 +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:517 +msgid "Rejecting tunnels: Starting up" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:168 +msgid "Rejecting tunnels: High message delay" +msgstr "A rejeitar túneis: Grande atraso nas mensagens" + +#. hard to do {0} from here +#. setTunnelStatus("Rejecting " + (100 - (int) probAccept*100) + "% of tunnels: High number of requests"); +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:207 +msgid "Rejecting most tunnels: High number of requests" +msgstr "A rejeitar a maioria dos túneis: Grande numero de pedidos" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:262 +msgid "Rejecting tunnels: Limit reached" +msgstr "A rejeitar túneis: Limite atingido" + +#. .067KBps +#. * also limited to 90% - see below +#. always leave at least 4KBps free when allowing +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:330 +msgid "Rejecting tunnels: Bandwidth limit" +msgstr "A rejeitar túneis: Limite de largura 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:400 +msgid "Rejecting most tunnels: Bandwidth limit" +msgstr "A rejeitar a maioria dos túneis: Limite de largura de banda" + +#. hard to do {0} from here +#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels"); +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:404 +msgid "Accepting most tunnels" +msgstr "Aceitar a maioria dos túneis" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:406 +msgid "Accepting tunnels" +msgstr "A aceitar túneis" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:522 +msgid "Rejecting tunnels: Shutting down" +msgstr "A rejeitar túneis: A Desligar" + +#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:527 +msgid "Rejecting tunnels" +msgstr "A rejeitar túneis" + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:151 +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:22 +msgid "Reseeding" +msgstr "Propagar" + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:163 +#, java-format +msgid "Reseed fetched only 1 router." +msgid_plural "Reseed fetched only {0} routers." +msgstr[0] "A propagação encontrou apenas 1 router." +msgstr[1] "A propagação encontrou {0} routers." + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:170 +msgid "Reseed failed." +msgstr "A propagação falhou." + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:171 +#, java-format +msgid "See {0} for help." +msgstr "Ver {0} para ajuda." + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:172 +msgid "reseed configuration page" +msgstr "página de configuração de propagação" + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:313 +msgid "Reseeding: fetching seed URL." +msgstr "Propagação: procurar semente de URL" + +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:371 +#, java-format +msgid "" +"Reseeding: fetching router info from seed URL ({0} successful, {1} errors)." +msgstr "" +"Propagação: procurar informação do router apartir da semente do URL ({0} com " +"sucesso, {1} erros)." + +#. NOTE TO TRANSLATORS - each of these phrases is a description for a statistic +#. to be displayed on /stats.jsp and in the graphs on /graphs.jsp. +#. Please keep relatively short so it will fit on the graphs. +#: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:33 +msgid "Message receive rate (bytes/sec)" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:34 +msgid "Message send rate (bytes/sec)" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:35 +msgid "Low-level send rate (bytes/sec)" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:36 +msgid "Low-level receive rate (bytes/sec)" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:37 +msgid "How many peers we are actively talking with" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:40 +msgid "Known fast peers" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:530 +msgid "NetDb entry" +msgstr "Entrada na NetDb" + +#. This used to be "no common transports" but it is almost always no transports at all +#: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70 +msgid "No transports (hidden or starting up?)" +msgstr "Sem transportes (escondidos ou a iniciar?)" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:455 +msgid "Unreachable on any transport" +msgstr "Inalcançável em qualquer transporte" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:504 +msgid "Router Transport Addresses" +msgstr "Endereço de Transporte do Router" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:509 +#, java-format +msgid "{0} is used for outbound connections only" +msgstr "{0} é usado para conexões de saÃda apenas" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523 +#: ../java/src/net/i2p/router/web/HomeHelper.java:32 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:154 +msgid "Help" +msgstr "Ajuda" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524 +msgid "" +"Your transport connection limits are automatically set based on your " +"configured bandwidth." +msgstr "" +"O limite da tua conexão de transporte foi definido automaticamente baseado " +"na configuração de largura de banda." + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526 +msgid "" +"To override these limits, add the settings i2np.ntcp.maxConnections=nnn and " +"i2np.udp.maxConnections=nnn on the advanced configuration page." +msgstr "" +"Para substituir esses limites, adiciona as definições i2np.ntcp." +"maxConnections=nnn e i2np.udp.maxConnections=nnn na página de configuração " +"avançada." + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:279 +msgid "Definitions" +msgstr "Definições" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:752 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2173 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:91 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:204 +msgid "Peer" +msgstr "Peer" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 +msgid "The remote peer, identified by router hash" +msgstr "A peer remota, identificada pelo router" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:753 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2177 +msgid "Dir" +msgstr "Dir" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531 +msgid "Inbound connection" +msgstr "Conexões de entrada" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533 +msgid "Outbound connection" +msgstr "Conexões de saÃda" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535 +msgid "They offered to introduce us (help other peers traverse our firewall)" +msgstr "" +"Eles ofereceram-se para nos apresentar (ajudar outras peers atravessar a " +"nossa firewall)" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537 +msgid "We offered to introduce them (help other peers traverse their firewall)" +msgstr "" +"Oferecemos-nos para os apresentar (ajudar outros atravessar a firewall deles)" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 +msgid "How long since a packet has been received / sent" +msgstr "Quanto tempo desde que o ultimo pacote foi recebido / enviado" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:754 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2178 +msgid "Idle" +msgstr "Inativo" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:755 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2183 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:157 +msgid "In/Out" +msgstr "Entrada/SaÃda" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 +msgid "The smoothed inbound / outbound transfer rate (KBytes per second)" +msgstr "" +"A suavizada taxa de transferência de entrada / saÃda (KBytes por segundo)" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 +msgid "How long ago this connection was established" +msgstr "A quanto tempo foi estabelecida esta conexão" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:756 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2188 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:836 +msgid "Up" +msgstr "Cima" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:757 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2190 +msgid "Skew" +msgstr "Skew" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 +msgid "The difference between the peer's clock and your own" +msgstr "A diferença entre o relógio do peer e o teu" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542 +msgid "" +"The congestion window, which is how many bytes can be sent without an " +"acknowledgement" +msgstr "" +"A janela de congestionamento, que é quantos bytes podem ser enviados sem " +"reconhecimento" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543 +msgid "The number of sent messages awaiting acknowledgement" +msgstr "O numero de mensagens enviadas que aguardam reconhecimento" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544 +msgid "The maximum number of concurrent messages to send" +msgstr "O numero máximo de mensagens para enviar em simultâneo" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545 +msgid "The number of pending sends which exceed congestion window" +msgstr "O numero de envios pendentes que excede a janela de congestionamento" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546 +msgid "The slow start threshold" +msgstr "O limitador de inicio lento " + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547 +msgid "The round trip time in milliseconds" +msgstr "O tempo de ida e volta em milisegundos" + +#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The standard deviation of the round trip time in milliseconds")).append("<br>\n" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549 +msgid "The retransmit timeout in milliseconds" +msgstr "O tempo limite de retransmissão de milisegundos" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550 +msgid "" +"Current maximum send packet size / estimated maximum receive packet size " +"(bytes)" +msgstr "" +"Limite máximo actual de tamanho de pacotes / máximo estimado de tamanho de " +"pacotes (bytes)" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:758 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2207 +msgid "TX" +msgstr "TX" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 +msgid "The total number of packets sent to the peer" +msgstr "O numero total de pacotes enviados pela peer" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:759 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2209 +msgid "RX" +msgstr "RX" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 +msgid "The total number of packets received from the peer" +msgstr "O numero total de pacotes recebidos pela peer" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2212 +msgid "Dup TX" +msgstr "Dup TX" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553 +msgid "The total number of packets retransmitted to the peer" +msgstr "O numero total de pacotes retrasmitidos pela peer" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2214 +msgid "Dup RX" +msgstr "Dup RX" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554 +msgid "The total number of duplicate packets received from the peer" +msgstr "O numero total de pacotes recebidos em duplicado pela peer" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452 +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 +msgid "Service" +msgstr "Service" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:454 +msgid "WAN Common Interface Configuration" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:455 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:471 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:476 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:96 +msgid "Status" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:456 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:462 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:472 +msgid "Type" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:457 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:463 +msgid "Upstream" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:464 +msgid "Downstream" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460 +msgid "WAN PPP Connection" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:465 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473 +msgid "External IP" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:467 +msgid "Layer 3 Forwarding" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:468 +msgid "Default Connection Service" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:470 +msgid "WAN IP Connection" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475 +msgid "WAN Ethernet Link Configuration" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:488 +msgid "Found Device" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:490 +msgid "Subdevice" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:511 +msgid "UPnP Status" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:514 +msgid "" +"UPnP has been disabled; Do you have more than one UPnP Internet Gateway " +"Device on your LAN ?" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:517 +msgid "UPnP has not found any UPnP-aware, compatible device on your LAN." +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:525 +#, java-format +msgid "The current external IP address reported by UPnP is {0}" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:527 +msgid "The current external IP address is not available." +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:531 +#, java-format +msgid "UPnP reports the maximum downstream bit rate is {0}bits/sec" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:533 +#, java-format +msgid "UPnP reports the maximum upstream bit rate is {0}bits/sec" +msgstr "" + +#. {0} is TCP or UDP +#. {1,number,#####} prevents 12345 from being output as 12,345 in the English locale. +#. If you want the digit separator in your locale, translate as {1}. +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:541 +#, java-format +msgid "{0} port {1,number,#####} was successfully forwarded by UPnP." +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:543 +#, java-format +msgid "{0} port {1,number,#####} was not forwarded by UPnP." +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/UPnPManager.java:200 +msgid "UPnP is not enabled" +msgstr "" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:401 +#: ../../../router/java/src/net/i2p/router/transport/ntcp/EstablishState.java:618 +#, java-format +msgid "Excessive clock skew: {0}" +msgstr "Desacertar excessivo do relógio: {0}" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:747 +msgid "NTCP connections" +msgstr "Conexões NTCP" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:748 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2169 +msgid "Limit" +msgstr "Limite" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:749 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2170 +msgid "Timeout" +msgstr "Tempo Limite" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:760 +msgid "Out Queue" +msgstr "Fila de SaÃda" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:761 +msgid "Backlogged?" +msgstr "Voltar Logado?" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:775 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2232 +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88 +msgid "Inbound" +msgstr "Entrada" + +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:777 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2234 +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88 +msgid "Outbound" +msgstr "SaÃda" + +#. buf.append("<tr> <td colspan=\"11\"><hr></td></tr>\n"); +#: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:826 +msgid "peers" +msgstr "peers" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2168 +msgid "UDP connections" +msgstr "Conexões UDP" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2175 +msgid "Sort by peer hash" +msgstr "Ordenar por tipos de peers" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2177 +msgid "Direction/Introduction" +msgstr "Direcção/Introdução" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2179 +msgid "Sort by idle inbound" +msgstr "Ordenar por entrada inactiva" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2181 +msgid "Sort by idle outbound" +msgstr "Ordenar por saÃda inactiva" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2184 +msgid "Sort by inbound rate" +msgstr "Ordenar por taxa de entrada" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2186 +msgid "Sort by outbound rate" +msgstr "Ordenar por taxa de saÃda" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2189 +msgid "Sort by connection uptime" +msgstr "Ordenar por tempo de conexão ligada" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2191 +msgid "Sort by clock skew" +msgstr "Ordenar por desajustamento do relógio" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2194 +msgid "Sort by congestion window" +msgstr "Ordenar por janela de congestionamento" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2196 +msgid "Sort by slow start threshold" +msgstr "Ordenar por limitador de inicio lento " + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2199 +msgid "Sort by round trip time" +msgstr "Ordenar por tempo de ida e volta" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2203 +msgid "Sort by retransmission timeout" +msgstr "Ordenar por tempo limite de retransmissão" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2206 +msgid "Sort by outbound maximum transmit unit" +msgstr "Ordenar por unidade de transmissão de saÃda máxima" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2208 +msgid "Sort by packets sent" +msgstr "Ordenar por envio de pacotes" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2210 +msgid "Sort by packets received" +msgstr "Ordenar por pacotes recebidos" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2213 +msgid "Sort by packets retransmitted" +msgstr "Ordenar por pacotes retransmitidos" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2215 +msgid "Sort by packets received more than once" +msgstr "Ordenar por pacotes recebidos mais que uma vez" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2236 +msgid "We offered to introduce them" +msgstr "Oferecemos-nos para os apresentar" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2238 +msgid "They offered to introduce us" +msgstr "Eles oferecem-se para nos apresentar" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2242 +msgid "Choked" +msgstr "Sufocada" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2250 +msgid "1 fail" +msgstr "1 falha" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2252 +#, java-format +msgid "{0} fails" +msgstr "{0} falhas" + +#. 1 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2258 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171 +#: ../java/src/net/i2p/router/web/ProfilesHelper.java:13 +msgid "Banned" +msgstr "Banido" + +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2310 +msgid "backlogged" +msgstr "" + +#. buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n"); +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2390 +msgid "SUMMARY" +msgstr "SUMARIO" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:190 +msgid "Dropping tunnel requests: Too slow" +msgstr "A cancelar pedidos de túneis: Demasiado lento" + +#. don't even bother, since we are so overloaded locally +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:333 +msgid "Dropping tunnel requests: Overloaded" +msgstr "A descartar pedidos de túnel: Sobrecarregado" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:542 +msgid "Rejecting tunnels: Request overload" +msgstr "A rejeitar túneis: Sobrecarga de pedidos" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:573 +msgid "Rejecting tunnels: Connection limit" +msgstr "A rejeitar túneis: Limite de conexão" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:777 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:798 +msgid "Dropping tunnel requests: High load" +msgstr "A rejeitar pedidos de túneis: Carga elevada" + +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:877 +msgid "Dropping tunnel requests: Queue time" +msgstr "A descartar pedidos de túneis: Tempo de fila" + +#. Automatically generated pseudo-java for xgettext - do not edit +#. Translators may wish to translate a few of these, do not bother to translate all of them!! +#: ../java/build/Countries.java:3 +msgid "Anonymous Proxy" +msgstr "" + +#: ../java/build/Countries.java:4 +msgid "Satellite Provider" +msgstr "" + +#: ../java/build/Countries.java:5 +msgid "Andorra" +msgstr "Andorra" + +#: ../java/build/Countries.java:6 +msgid "United Arab Emirates" +msgstr "Emirados Ãrabes Unidos" + +#: ../java/build/Countries.java:7 +msgid "Afghanistan" +msgstr "Afeganistão" + +#: ../java/build/Countries.java:8 +msgid "Antigua and Barbuda" +msgstr "AntÃgua e Barbuda" + +#: ../java/build/Countries.java:9 +msgid "Anguilla" +msgstr "Anguilla" + +#: ../java/build/Countries.java:10 +msgid "Albania" +msgstr "Albânia" + +#: ../java/build/Countries.java:11 +msgid "Armenia" +msgstr "Armênia" + +#: ../java/build/Countries.java:12 +msgid "Netherlands Antilles" +msgstr "Antilhas Holandesas" + +#: ../java/build/Countries.java:13 +msgid "Angola" +msgstr "Angola" + +#: ../java/build/Countries.java:14 +msgid "Antarctica" +msgstr "Antártica" + +#: ../java/build/Countries.java:15 +msgid "Argentina" +msgstr "Argentina" + +#: ../java/build/Countries.java:16 +msgid "American Samoa" +msgstr "Samoa Americana" + +#: ../java/build/Countries.java:17 +msgid "Austria" +msgstr "Ãustria" + +#: ../java/build/Countries.java:18 +msgid "Australia" +msgstr "Austrália" + +#: ../java/build/Countries.java:19 +msgid "Aruba" +msgstr "Aruba" + +#: ../java/build/Countries.java:20 +msgid "Ã…land Islands" +msgstr "" + +#: ../java/build/Countries.java:21 +msgid "Azerbaijan" +msgstr "Azerbaijão" + +#: ../java/build/Countries.java:22 +msgid "Bosnia and Herzegovina" +msgstr "Bósnia e Herzegovina" + +#: ../java/build/Countries.java:23 +msgid "Barbados" +msgstr "Barbados" + +#: ../java/build/Countries.java:24 +msgid "Bangladesh" +msgstr "Bangladesh" + +#: ../java/build/Countries.java:25 +msgid "Belgium" +msgstr "Bélgica" + +#: ../java/build/Countries.java:26 +msgid "Burkina Faso" +msgstr "Burkina Faso" + +#: ../java/build/Countries.java:27 +msgid "Bulgaria" +msgstr "Bulgária" + +#: ../java/build/Countries.java:28 +msgid "Bahrain" +msgstr "Bahrain" + +#: ../java/build/Countries.java:29 +msgid "Burundi" +msgstr "Burundi" + +#: ../java/build/Countries.java:30 +msgid "Benin" +msgstr "Benin" + +#: ../java/build/Countries.java:31 +msgid "Bermuda" +msgstr "Bermudas" + +#: ../java/build/Countries.java:32 +msgid "Brunei Darussalam" +msgstr "Brunei Darussalam" + +#: ../java/build/Countries.java:33 +msgid "Bolivia" +msgstr "BolÃvia" + +#: ../java/build/Countries.java:34 +msgid "Brazil" +msgstr "Brasil" + +#: ../java/build/Countries.java:35 +msgid "Bahamas" +msgstr "Bahamas" + +#: ../java/build/Countries.java:36 +msgid "Bhutan" +msgstr "Butão" + +#: ../java/build/Countries.java:37 +msgid "Bouvet Island" +msgstr "Ilha Bouvet " + +#: ../java/build/Countries.java:38 +msgid "Botswana" +msgstr "Botswana" + +#: ../java/build/Countries.java:39 +msgid "Belarus" +msgstr "Bielorrússia" + +#: ../java/build/Countries.java:40 +msgid "Belize" +msgstr "Belize" + +#: ../java/build/Countries.java:41 +msgid "Canada" +msgstr "Canadá" + +#: ../java/build/Countries.java:42 +msgid "Cocos (Keeling) Islands" +msgstr "" + +#: ../java/build/Countries.java:43 +msgid "The Democratic Republic of the Congo" +msgstr "A Republica Democrata do Congo" + +#: ../java/build/Countries.java:44 +msgid "Central African Republic" +msgstr "Republica Central Africana" + +#: ../java/build/Countries.java:45 +msgid "Congo" +msgstr "Congo" + +#: ../java/build/Countries.java:46 +msgid "Switzerland" +msgstr "SuÃça" + +#: ../java/build/Countries.java:47 +msgid "Cote D'Ivoire" +msgstr "Cote D'Ivoire" + +#: ../java/build/Countries.java:48 +msgid "Cook Islands" +msgstr "Ilhas Cook" + +#: ../java/build/Countries.java:49 +msgid "Chile" +msgstr "Chile" + +#: ../java/build/Countries.java:50 +msgid "Cameroon" +msgstr "Camarões" + +#: ../java/build/Countries.java:51 +msgid "China" +msgstr "China" + +#: ../java/build/Countries.java:52 +msgid "Colombia" +msgstr "Colombia" + +#: ../java/build/Countries.java:53 +msgid "Costa Rica" +msgstr "Costa Rica" + +#: ../java/build/Countries.java:54 +msgid "Serbia and Montenegro" +msgstr "" + +#: ../java/build/Countries.java:55 +msgid "Cuba" +msgstr "Cuba" + +#: ../java/build/Countries.java:56 +msgid "Cape Verde" +msgstr "Cabo Verde" + +#: ../java/build/Countries.java:57 +msgid "Christmas Island" +msgstr "" + +#: ../java/build/Countries.java:58 +msgid "Cyprus" +msgstr "Chipre" + +#: ../java/build/Countries.java:59 +msgid "Czech Republic" +msgstr "Republica Checa" + +#: ../java/build/Countries.java:60 +msgid "Germany" +msgstr "Alemanha" + +#: ../java/build/Countries.java:61 +msgid "Djibouti" +msgstr "Djibouti" + +#: ../java/build/Countries.java:62 +msgid "Denmark" +msgstr "Dinamarca" + +#: ../java/build/Countries.java:63 +msgid "Dominica" +msgstr "Dominica" + +#: ../java/build/Countries.java:64 +msgid "Dominican Republic" +msgstr "Republica Dominicana" + +#: ../java/build/Countries.java:65 +msgid "Algeria" +msgstr "Argélia" + +#: ../java/build/Countries.java:66 +msgid "Ecuador" +msgstr "Equador" + +#: ../java/build/Countries.java:67 +msgid "Estonia" +msgstr "Estônia" + +#: ../java/build/Countries.java:68 +msgid "Egypt" +msgstr "Egito" + +#: ../java/build/Countries.java:69 +msgid "Western Sahara" +msgstr "" + +#: ../java/build/Countries.java:70 +msgid "Eritrea" +msgstr "Eritreia" + +#: ../java/build/Countries.java:71 +msgid "Spain" +msgstr "Espanha" + +#: ../java/build/Countries.java:72 +msgid "Ethiopia" +msgstr "Etiópia" + +#: ../java/build/Countries.java:73 +msgid "European Union" +msgstr "" + +#: ../java/build/Countries.java:74 +msgid "Finland" +msgstr "Finlândia" + +#: ../java/build/Countries.java:75 +msgid "Fiji" +msgstr "Fiji" + +#: ../java/build/Countries.java:76 +msgid "Falkland Islands (Malvinas)" +msgstr "Ilhas Falkland (Malvinas)" + +#: ../java/build/Countries.java:77 +msgid "Federated States of Micronesia" +msgstr "Estados Federados da Micronésia" + +#: ../java/build/Countries.java:78 +msgid "Faroe Islands" +msgstr "Ilhas Faroe" + +#: ../java/build/Countries.java:79 +msgid "France" +msgstr "França" + +#: ../java/build/Countries.java:80 +msgid "Gabon" +msgstr "Gabão" + +#: ../java/build/Countries.java:81 +msgid "United Kingdom" +msgstr "Reino Unido" + +#: ../java/build/Countries.java:82 +msgid "Grenada" +msgstr "Granada" + +#: ../java/build/Countries.java:83 +msgid "Georgia" +msgstr "Geórgia" + +#: ../java/build/Countries.java:84 +msgid "French Guiana" +msgstr "Guiana Francesa" + +#: ../java/build/Countries.java:85 +msgid "Guernsey" +msgstr "" + +#: ../java/build/Countries.java:86 +msgid "Ghana" +msgstr "Gana" + +#: ../java/build/Countries.java:87 +msgid "Gibraltar" +msgstr "Gibraltar" + +#: ../java/build/Countries.java:88 +msgid "Greenland" +msgstr "Greenland" + +#: ../java/build/Countries.java:89 +msgid "Gambia" +msgstr "Gambia" + +#: ../java/build/Countries.java:90 +msgid "Guinea" +msgstr "Guinea" + +#: ../java/build/Countries.java:91 +msgid "Guadeloupe" +msgstr "Guadeloupe" + +#: ../java/build/Countries.java:92 +msgid "Equatorial Guinea" +msgstr "Equatorial Guinea" + +#: ../java/build/Countries.java:93 +msgid "Greece" +msgstr "Greece" + +#: ../java/build/Countries.java:94 +msgid "South Georgia and the South Sandwich Islands" +msgstr "South Georgia and the South Sandwich Islands" + +#: ../java/build/Countries.java:95 +msgid "Guatemala" +msgstr "Guatemala" + +#: ../java/build/Countries.java:96 +msgid "Guam" +msgstr "Guam" + +#: ../java/build/Countries.java:97 +msgid "Guinea-Bissau" +msgstr "Guiné-Bissau" + +#: ../java/build/Countries.java:98 +msgid "Guyana" +msgstr "Guiana" + +#: ../java/build/Countries.java:99 +msgid "Hong Kong" +msgstr "Hong Kong" + +#: ../java/build/Countries.java:100 +msgid "Honduras" +msgstr "Honduras" + +#: ../java/build/Countries.java:101 +msgid "Croatia" +msgstr "Croácia" + +#: ../java/build/Countries.java:102 +msgid "Haiti" +msgstr "Haiti" + +#: ../java/build/Countries.java:103 +msgid "Hungary" +msgstr "Hungria" + +#: ../java/build/Countries.java:104 +msgid "Indonesia" +msgstr "Indonesia" + +#: ../java/build/Countries.java:105 +msgid "Ireland" +msgstr "Irlanda" + +#: ../java/build/Countries.java:106 +msgid "Israel" +msgstr "Israel" + +#: ../java/build/Countries.java:107 +msgid "Isle of Man" +msgstr "" + +#: ../java/build/Countries.java:108 +msgid "India" +msgstr "Ãndia" + +#: ../java/build/Countries.java:109 +msgid "British Indian Ocean Territory" +msgstr "Território Oceânico Indiano Britânico" + +#: ../java/build/Countries.java:110 +msgid "Iraq" +msgstr "Iraque" + +#: ../java/build/Countries.java:111 +msgid "Islamic Republic of Iran" +msgstr "Republica Islâmica do Irão" + +#: ../java/build/Countries.java:112 +msgid "Iceland" +msgstr "Islândia" + +#: ../java/build/Countries.java:113 +msgid "Italy" +msgstr "Itália" + +#: ../java/build/Countries.java:114 +msgid "Jersey" +msgstr "" + +#: ../java/build/Countries.java:115 +msgid "Jamaica" +msgstr "Jamaica" + +#: ../java/build/Countries.java:116 +msgid "Jordan" +msgstr "Jordânia" + +#: ../java/build/Countries.java:117 +msgid "Japan" +msgstr "Japão" + +#: ../java/build/Countries.java:118 +msgid "Kenya" +msgstr "Quénia" + +#: ../java/build/Countries.java:119 +msgid "Kyrgyzstan" +msgstr "Quirguistão" + +#: ../java/build/Countries.java:120 +msgid "Cambodia" +msgstr "Cambodja" + +#: ../java/build/Countries.java:121 +msgid "Kiribati" +msgstr "Kiribati" + +#: ../java/build/Countries.java:122 +msgid "Comoros" +msgstr "Comores" + +#: ../java/build/Countries.java:123 +msgid "Saint Kitts and Nevis" +msgstr "São Cristóvão e Nevis" + +#: ../java/build/Countries.java:124 +msgid "The Democratic People's Republic of Korea" +msgstr "" + +#: ../java/build/Countries.java:125 +msgid "Republic of Korea" +msgstr "República da Koreia" + +#: ../java/build/Countries.java:126 +msgid "Kuwait" +msgstr "Kuweit" + +#: ../java/build/Countries.java:127 +msgid "Cayman Islands" +msgstr "Ilhas Caimão" + +#: ../java/build/Countries.java:128 +msgid "Kazakhstan" +msgstr "Cazaquistão" + +#: ../java/build/Countries.java:129 +msgid "Lao People's Democratic Republic" +msgstr "República Democrática Popular do Laos" + +#: ../java/build/Countries.java:130 +msgid "Lebanon" +msgstr "Libâno" + +#: ../java/build/Countries.java:131 +msgid "Saint Lucia" +msgstr "Santa Lúcia" + +#: ../java/build/Countries.java:132 +msgid "Liechtenstein" +msgstr "Liechtenstein" + +#: ../java/build/Countries.java:133 +msgid "Sri Lanka" +msgstr "Sri Lanka" + +#: ../java/build/Countries.java:134 +msgid "Liberia" +msgstr "Libéria" + +#: ../java/build/Countries.java:135 +msgid "Lesotho" +msgstr "Lesoto" + +#: ../java/build/Countries.java:136 +msgid "Lithuania" +msgstr "Lituânia" + +#: ../java/build/Countries.java:137 +msgid "Luxembourg" +msgstr "Luxemburgo" + +#: ../java/build/Countries.java:138 +msgid "Latvia" +msgstr "Látvia" + +#: ../java/build/Countries.java:139 +msgid "Libyan Arab Jamahiriya" +msgstr "LÃbia" + +#: ../java/build/Countries.java:140 +msgid "Morocco" +msgstr "Marrocos" + +#: ../java/build/Countries.java:141 +msgid "Monaco" +msgstr "Mónaco" + +#: ../java/build/Countries.java:142 +msgid "Republic of Moldova" +msgstr "República da Moldávia" + +#: ../java/build/Countries.java:143 +msgid "Montenegro" +msgstr "" + +#: ../java/build/Countries.java:144 +msgid "Saint Martin" +msgstr "" + +#: ../java/build/Countries.java:145 +msgid "Madagascar" +msgstr "Madagascar" + +#: ../java/build/Countries.java:146 +msgid "Marshall Islands" +msgstr "Ilhas Marshall" + +#: ../java/build/Countries.java:147 +msgid "The Former Yugoslav Republic of Macedonia" +msgstr " Antiga República Jugoslava da Macedónia" + +#: ../java/build/Countries.java:148 +msgid "Mali" +msgstr "Mali" + +#: ../java/build/Countries.java:149 +msgid "Myanmar" +msgstr "Mianmar" + +#: ../java/build/Countries.java:150 +msgid "Mongolia" +msgstr "Mongolia" + +#: ../java/build/Countries.java:151 +msgid "Macao" +msgstr "Macau" + +#: ../java/build/Countries.java:152 +msgid "Northern Mariana Islands" +msgstr "Ilhas Marianas do Norte" + +#: ../java/build/Countries.java:153 +msgid "Martinique" +msgstr "Martinica" + +#: ../java/build/Countries.java:154 +msgid "Mauritania" +msgstr "Mauritânia" + +#: ../java/build/Countries.java:155 +msgid "Montserrat" +msgstr "Montserrat" + +#: ../java/build/Countries.java:156 +msgid "Malta" +msgstr "Malta" + +#: ../java/build/Countries.java:157 +msgid "Mauritius" +msgstr "MaurÃcio" + +#: ../java/build/Countries.java:158 +msgid "Maldives" +msgstr "Maldivas" + +#: ../java/build/Countries.java:159 +msgid "Malawi" +msgstr "Malai" + +#: ../java/build/Countries.java:160 +msgid "Mexico" +msgstr "México" + +#: ../java/build/Countries.java:161 +msgid "Malaysia" +msgstr "Malásia" + +#: ../java/build/Countries.java:162 +msgid "Mozambique" +msgstr "Mocambique" + +#: ../java/build/Countries.java:163 +msgid "Namibia" +msgstr "NamÃbia" + +#: ../java/build/Countries.java:164 +msgid "New Caledonia" +msgstr "Nova Caledônia" + +#: ../java/build/Countries.java:165 +msgid "Niger" +msgstr "NÃger" + +#: ../java/build/Countries.java:166 +msgid "Norfolk Island" +msgstr "Ilha Norfolk" + +#: ../java/build/Countries.java:167 +msgid "Nigeria" +msgstr "Nigéria" + +#: ../java/build/Countries.java:168 +msgid "Nicaragua" +msgstr "Nicarágua" + +#: ../java/build/Countries.java:169 +msgid "Netherlands" +msgstr "Holanda" + +#: ../java/build/Countries.java:170 +msgid "Norway" +msgstr "Noruega" + +#: ../java/build/Countries.java:171 +msgid "Nepal" +msgstr "Nepal" + +#: ../java/build/Countries.java:172 +msgid "Nauru" +msgstr "Nauru" + +#: ../java/build/Countries.java:173 +msgid "Niue" +msgstr "Niue" + +#: ../java/build/Countries.java:174 +msgid "New Zealand" +msgstr "Nova Zelândia" + +#: ../java/build/Countries.java:175 +msgid "Oman" +msgstr "Omã" + +#: ../java/build/Countries.java:176 +msgid "Panama" +msgstr "Panamá" + +#: ../java/build/Countries.java:177 +msgid "Peru" +msgstr "Peru" + +#: ../java/build/Countries.java:178 +msgid "French Polynesia" +msgstr "Polinésia Francesa" + +#: ../java/build/Countries.java:179 +msgid "Papua New Guinea" +msgstr "Papua Nova Guiné" + +#: ../java/build/Countries.java:180 +msgid "Philippines" +msgstr "Filipinas" + +#: ../java/build/Countries.java:181 +msgid "Pakistan" +msgstr "" + +#: ../java/build/Countries.java:182 +msgid "Poland" +msgstr "" + +#: ../java/build/Countries.java:183 +msgid "Saint Pierre and Miquelon" +msgstr "" + +#: ../java/build/Countries.java:184 +msgid "Pitcairn Islands" +msgstr "" + +#: ../java/build/Countries.java:185 +msgid "Puerto Rico" +msgstr "" + +#: ../java/build/Countries.java:186 +msgid "Palestinian Territory" +msgstr "" + +#: ../java/build/Countries.java:187 +msgid "Portugal" +msgstr "" + +#: ../java/build/Countries.java:188 +msgid "Palau" +msgstr "" + +#: ../java/build/Countries.java:189 +msgid "Paraguay" +msgstr "" + +#: ../java/build/Countries.java:190 +msgid "Qatar" +msgstr "" + +#: ../java/build/Countries.java:191 +msgid "Réunion" +msgstr "" + +#: ../java/build/Countries.java:192 +msgid "Romania" +msgstr "" + +#: ../java/build/Countries.java:193 +msgid "Serbia" +msgstr "" + +#: ../java/build/Countries.java:194 +msgid "Russian Federation" +msgstr "" + +#: ../java/build/Countries.java:195 +msgid "Rwanda" +msgstr "" + +#: ../java/build/Countries.java:196 +msgid "Saudi Arabia" +msgstr "" + +#: ../java/build/Countries.java:197 +msgid "Solomon Islands" +msgstr "" + +#: ../java/build/Countries.java:198 +msgid "Seychelles" +msgstr "" + +#: ../java/build/Countries.java:199 +msgid "Sudan" +msgstr "" + +#: ../java/build/Countries.java:200 +msgid "Sweden" +msgstr "" + +#: ../java/build/Countries.java:201 +msgid "Singapore" +msgstr "" + +#: ../java/build/Countries.java:202 +msgid "Saint Helena" +msgstr "" + +#: ../java/build/Countries.java:203 +msgid "Slovenia" +msgstr "" + +#: ../java/build/Countries.java:204 +msgid "Svalbard and Jan Mayen" +msgstr "" + +#: ../java/build/Countries.java:205 +msgid "Slovakia" +msgstr "" + +#: ../java/build/Countries.java:206 +msgid "Sierra Leone" +msgstr "" + +#: ../java/build/Countries.java:207 +msgid "San Marino" +msgstr "" + +#: ../java/build/Countries.java:208 +msgid "Senegal" +msgstr "" + +#: ../java/build/Countries.java:209 +msgid "Somalia" +msgstr "" + +#: ../java/build/Countries.java:210 +msgid "Suriname" +msgstr "" + +#: ../java/build/Countries.java:211 +msgid "Sao Tome and Principe" +msgstr "" + +#: ../java/build/Countries.java:212 +msgid "El Salvador" +msgstr "" + +#: ../java/build/Countries.java:213 +msgid "Syrian Arab Republic" +msgstr "" + +#: ../java/build/Countries.java:214 +msgid "Swaziland" +msgstr "" + +#: ../java/build/Countries.java:215 +msgid "Turks and Caicos Islands" +msgstr "Ilhas Turks e Caicos" + +#: ../java/build/Countries.java:216 +msgid "Chad" +msgstr "Chade" + +#: ../java/build/Countries.java:217 +msgid "French Southern Territories" +msgstr "Territórios Franceses do Sul" + +#: ../java/build/Countries.java:218 +msgid "Togo" +msgstr "Togo" + +#: ../java/build/Countries.java:219 +msgid "Thailand" +msgstr "Tailândia" + +#: ../java/build/Countries.java:220 +msgid "Tajikistan" +msgstr "Tajiquistão" + +#: ../java/build/Countries.java:221 +msgid "Tokelau" +msgstr "" + +#: ../java/build/Countries.java:222 +msgid "Timor-Leste" +msgstr "Timor-Leste" + +#: ../java/build/Countries.java:223 +msgid "Turkmenistan" +msgstr "Turcomenistão" + +#: ../java/build/Countries.java:224 +msgid "Tunisia" +msgstr "TunÃsia" + +#: ../java/build/Countries.java:225 +msgid "Tonga" +msgstr "Tonga" + +#: ../java/build/Countries.java:226 +msgid "Turkey" +msgstr "Turquia" + +#: ../java/build/Countries.java:227 +msgid "Trinidad and Tobago" +msgstr "Trindade e Tobago" + +#: ../java/build/Countries.java:228 +msgid "Tuvalu" +msgstr "Tuvalu" + +#: ../java/build/Countries.java:229 +msgid "Taiwan" +msgstr "Taiwan" + +#: ../java/build/Countries.java:230 +msgid "United Republic of Tanzania" +msgstr "República Unida da Tanzânia" + +#: ../java/build/Countries.java:231 +msgid "Ukraine" +msgstr "Ucrânia" + +#: ../java/build/Countries.java:232 +msgid "Uganda" +msgstr "Uganda" + +#: ../java/build/Countries.java:233 +msgid "United States Minor Outlying Islands" +msgstr "Estados Unidos das Distantes Ilhas Menores " + +#: ../java/build/Countries.java:234 +msgid "United States" +msgstr "Estados Unidos" + +#: ../java/build/Countries.java:235 +msgid "Uruguay" +msgstr "UruguaÃ" + +#: ../java/build/Countries.java:236 +msgid "Uzbekistan" +msgstr "Uzbequistão" + +#: ../java/build/Countries.java:237 +msgid "Holy See (Vatican City State)" +msgstr "Santa Sé (Vaticano)" + +#: ../java/build/Countries.java:238 +msgid "Saint Vincent and the Grenadines" +msgstr "São Vicente e Granadinas" + +#: ../java/build/Countries.java:239 +msgid "Venezuela" +msgstr "Venezuela" + +#: ../java/build/Countries.java:240 ../java/build/Countries.java:241 +msgid "Virgin Islands" +msgstr "Ilhas Virgens" + +#: ../java/build/Countries.java:242 +msgid "Viet Nam" +msgstr "Vietnam" + +#: ../java/build/Countries.java:243 +msgid "Vanuatu" +msgstr "Vanuatu" + +#: ../java/build/Countries.java:244 +msgid "Wallis and Futuna" +msgstr "Wallis e Futuna" + +#: ../java/build/Countries.java:245 +msgid "Samoa" +msgstr "Samoa" + +#: ../java/build/Countries.java:246 +msgid "Yemen" +msgstr "Yemen" + +#: ../java/build/Countries.java:247 +msgid "Mayotte" +msgstr "Mayotte" + +#: ../java/build/Countries.java:248 +msgid "South Africa" +msgstr "Ãfrica do Sul" + +#: ../java/build/Countries.java:249 +msgid "Zambia" +msgstr "Zambia" + +#: ../java/build/Countries.java:250 +msgid "Zimbabwe" +msgstr "Zimbabué" + +#: ../java/src/net/i2p/router/web/CSSHelper.java:118 +#: ../java/src/net/i2p/router/web/HomeHelper.java:33 +#: ../java/strings/Strings.java:29 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:203 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:205 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:203 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:205 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:213 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:215 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:203 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:205 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:210 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:212 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:203 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:205 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:203 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:205 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:211 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:310 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:222 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:150 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:214 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:216 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:232 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:234 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:223 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:225 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:195 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:197 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:284 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:223 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:211 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:211 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:213 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:215 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:209 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:211 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:213 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:222 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:202 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:204 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:220 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:222 +msgid "I2P Router Console" +msgstr "I2P Router Console" + +#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:51 +msgid "Error updating the configuration - please see the error logs" +msgstr "Erro ao atualizar a configuração - consulte os logs de erros" + +#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:61 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:322 +msgid "Configuration saved successfully" +msgstr "Configuração salva com sucesso" + +#: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:63 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:427 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:324 +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:96 +msgid "" +"Error saving the configuration (applied but not saved) - please see the " +"error logs" +msgstr "" +"Erro ao salvar a configuração (aplicada, mas não salva) - consulte os logs " +"de erros" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:35 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:437 +msgid "Save Client Configuration" +msgstr "Guardar configuração do cliente" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:39 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:507 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:511 +msgid "Save Interface Configuration" +msgstr "Guardar configuração de interface" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:43 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:527 +msgid "Save WebApp Configuration" +msgstr "Guardar configuração WebApp" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:47 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:541 +msgid "Save Plugin Configuration" +msgstr "Guardar configuração Plugin" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:51 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:549 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:553 +msgid "Install Plugin" +msgstr "Instalar Plugin" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:55 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:555 +msgid "Update All Installed Plugins" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:95 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:124 +#, java-format +msgid "Error stopping plugin {0}" +msgstr "parar erro de Plugin {0}" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:100 +#, java-format +msgid "Deleted plugin {0}" +msgstr "Plugin apagado {0}" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:102 +#, java-format +msgid "Error deleting plugin {0}" +msgstr "excluir erro de Plugin {0}" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:122 +#, java-format +msgid "Stopped plugin {0}" +msgstr "Plugin parou {0}" + +#. label (IE) +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:146 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:264 +msgid "Start" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:165 +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:106 +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:49 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:61 +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:35 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:143 +msgid "Unsupported" +msgstr "não suportado" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:211 +msgid "New client added" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:215 +msgid "" +"Client configuration saved successfully - restart required to take effect." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:230 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:243 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:254 +msgid "Bad client index." +msgstr "" + +#. +#. What do we do here? +#. +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:237 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:248 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:259 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:103 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:508 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:425 +msgid "Client" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:237 +msgid "stopped" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:248 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:305 +msgid "started" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:259 +msgid "deleted" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:275 +msgid "WebApp configuration saved." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:290 +msgid "Plugin configuration saved." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:305 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:130 +msgid "WebApp" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:307 +msgid "Failed to start" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:312 +msgid "Failed to find server." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:318 +msgid "No plugin URL specified." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:328 +#, java-format +msgid "No update URL specified for {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:337 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:350 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:355 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:368 +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:373 +msgid "Plugin or update download already in progress." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:340 +msgid "Updating all plugins" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:359 +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:140 +#, java-format +msgid "Downloading plugin from {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:377 +#, java-format +msgid "Checking plugin {0} for updates" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:387 +#, java-format +msgid "Started plugin {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:389 +#, java-format +msgid "Error starting plugin {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:425 +msgid "" +"Interface configuration saved successfully - restart required to take effect." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:86 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:267 +msgid "Edit" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:95 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:433 +msgid "Add Client" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:103 +msgid "Class and arguments" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:103 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:130 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:154 +msgid "Control" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:103 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:130 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:154 +msgid "Run at Startup?" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:130 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:154 +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:203 +msgid "Description" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:154 +msgid "Plugin" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:167 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:290 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:293 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:319 +msgid "Version" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:169 +msgid "Signed by" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:186 +msgid "Date" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:192 +msgid "Author" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:208 +msgid "License" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:213 +#: ../java/src/net/i2p/router/web/HomeHelper.java:35 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:174 +msgid "Website" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:218 +msgid "Update link" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:269 +msgid "Stop" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:271 +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:96 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:381 +msgid "Check for updates" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:272 +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 +msgid "Update" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:277 +#, java-format +msgid "Are you sure you want to delete {0}?" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:279 +msgid "Delete" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:25 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:26 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:856 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:419 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:439 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:455 +msgid "Delete selected" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:26 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:27 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:875 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:417 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:425 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:437 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:445 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:453 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:461 +msgid "Add item" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:27 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:423 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:443 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:459 +msgid "Restore defaults" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:28 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:30 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:405 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:409 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:439 +msgid "Save" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:33 +msgid "Home page changed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:53 +msgid "Restored default settings" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:65 +msgid "No name entered" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:70 +msgid "No URL entered" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:83 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:85 +msgid "Added" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:100 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:111 +msgid "Removed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:18 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:425 +msgid "Add key" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:19 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:423 +msgid "Delete key" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:21 +msgid "You must enter a destination" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:23 +msgid "You must enter a key" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 +msgid "Key for" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:34 +msgid "added to keyring" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:36 +msgid "Invalid destination or key" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:41 +msgid "removed from keyring" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:43 +msgid "not found in keyring" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigKeyringHandler.java:45 +msgid "Invalid destination" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHandler.java:82 +msgid "Log overrides updated" +msgstr "Substituições de registros atualizadas" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHandler.java:161 +msgid "Log configuration saved" +msgstr "Log de configuração salva" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48 +msgid "" +"Add additional logging statements above. Example: net.i2p.router.tunnel=WARN" +msgstr "" +"Adicione outras declarações de registo acima. Exemplo: net.i2p.router.tunnel " +"= WARN" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:49 +msgid "" +"Or put entries in the logger.config file. Example: logger.record.net.i2p." +"router.tunnel=WARN" +msgstr "" +" colocar entradas no arquivo, logger.config. Exemplo: logger.record.net.i2p." +"router.tunnel = WARN" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:50 +msgid "Valid levels are DEBUG, INFO, WARN, ERROR, CRIT" +msgstr "NÃveis válidos são DEBUG, INFO, WARN, ERROR, CRIT" + +#. Homeland Security Advisory System +#. http://www.dhs.gov/xinfoshare/programs/Copy_of_press_release_0046.shtm +#. but pink instead of yellow for WARN +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 +#: ../java/src/net/i2p/router/web/LogsHelper.java:114 +msgid "CRIT" +msgstr "CRIT" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 +msgid "DEBUG" +msgstr "DEBUG" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 +#: ../java/src/net/i2p/router/web/LogsHelper.java:116 +msgid "ERROR" +msgstr "ERRO" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 +#: ../java/src/net/i2p/router/web/LogsHelper.java:120 +msgid "INFO" +msgstr "INFO." + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 +#: ../java/src/net/i2p/router/web/LogsHelper.java:118 +msgid "WARN" +msgstr "WARN" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:88 +#: ../java/src/net/i2p/router/web/HomeHelper.java:192 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:810 +msgid "Remove" +msgstr "Remover" + +#: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:125 +msgid "Select a class to add" +msgstr "Selecione uma classe para adicionar" + +#. stat groups for stats.jsp +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +#: ../java/strings/Strings.java:57 +msgid "Bandwidth" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +msgid "Home Page" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:343 +msgid "Network" +msgstr "Network" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:278 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:278 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:288 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:278 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:304 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:278 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:278 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:284 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:289 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:326 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:298 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:296 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:303 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:303 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:307 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:282 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:277 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:295 +msgid "Summary Bar" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:19 +msgid "UI" +msgstr "UI" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:196 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:491 +#: ../java/strings/Strings.java:72 +msgid "Tunnels" +msgstr "Tunnels" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:21 +msgid "Clients" +msgstr "Clientes" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:21 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:397 +msgid "Keyring" +msgstr "Keyring " + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:21 +msgid "Logging" +msgstr "Logging" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:21 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:202 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:377 +#: ../java/strings/Strings.java:67 +msgid "Peers" +msgstr "Peers" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:21 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:410 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:240 +msgid "Stats" +msgstr "Stats" + +#: ../java/src/net/i2p/router/web/ConfigNavHelper.java:22 +msgid "Advanced" +msgstr "Advanced " + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:53 +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:31 +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:34 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:417 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:361 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:395 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:545 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:482 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:478 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:444 +msgid "Save changes" +msgstr "Salvar alterações" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:135 +msgid "Rechecking router reachability..." +msgstr "Reverificação acessibilidade do router ..." + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176 +msgid "Updating IP address" +msgstr "Atualizando endereço de IP" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:195 +msgid "Disabling TCP completely" +msgstr "Desativação completa do TCP " + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:200 +#, java-format +msgid "Updating TCP address to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:207 +msgid "Disabling inbound TCP" +msgstr "Desativando TCP de entrada" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:209 +msgid "Updating inbound TCP address to auto" +msgstr "Atualizando endereço TCP de entrada para auto" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:222 +#, java-format +msgid "Updating TCP port to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:224 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 +msgid "Warning - ports less than 1024 are not recommended" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:228 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:255 +msgid "Invalid port" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:233 +msgid "Updating inbound TCP port to auto" +msgstr "Atualizando porta TCP de entrada para auto" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 +#, java-format +msgid "Updating UDP port to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:272 +msgid "Gracefully restarting into Hidden Router Mode" +msgstr "Graciosamente reiniciar em Modo Router InvisÃvel" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:274 +msgid "Gracefully restarting to exit Hidden Router Mode" +msgstr "Graciosamente reiniciar para sair do Modo Router InvisÃvel" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:283 +msgid "Enabling UPnP, restart required to take effect" +msgstr "Ativar UPnP, é necessário reiniciar para ter efeito" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:285 +msgid "Disabling UPnP, restart required to take effect" +msgstr "Desativar UPnP, é necessário reiniciar para ter efeito" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:293 +msgid "Enabling laptop mode" +msgstr "Ativar o modo de laptop" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:295 +msgid "Disabling laptop mode" +msgstr "Desativar o modo de laptop" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:302 +msgid "Disabling UDP" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:304 +msgid "Enabling UDP" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:311 +msgid "Requiring SSU introducers" +msgstr "Exigir introdutores de SSU " + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:369 +msgid "Invalid address" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:374 +#, java-format +msgid "The hostname or IP {0} is not publicly routable" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:399 +msgid "Updating bandwidth share percentage" +msgstr "Actualizando participação percentual de banda larga" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:429 +msgid "Updated bandwidth limits" +msgstr "Actualizado limites de banda larga" + +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:38 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:46 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:49 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:56 +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:59 +msgid "unknown" +msgstr "Desconhecido" + +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:171 +msgid "bits per second" +msgstr "bits por segundo" + +#: ../java/src/net/i2p/router/web/ConfigNetHelper.java:172 +#, java-format +msgid "or {0} bytes per month maximum" +msgstr "ou {0} bytes por mês no máximo" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:20 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:415 +msgid "Ban peer until restart" +msgstr " Ban peer até reiniciar" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:23 +#, java-format +msgid "Manually banned via {0}" +msgstr "Manualmente banido via {0}" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 +msgid "banned until restart" +msgstr "banido até iniciar" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:27 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:38 +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:59 +msgid "Invalid peer" +msgstr " peer invalido" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:28 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:417 +msgid "Unban peer" +msgstr "Unban peer" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 +msgid "unbanned" +msgstr "desbanido" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 +msgid "is not currently banned" +msgstr "actualmente não é banido" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:39 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:443 +msgid "Adjust peer bonuses" +msgstr "Adjust peer bonuses" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:47 +msgid "Bad speed value" +msgstr "Valor de velocidade ruim" + +#: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:52 +msgid "Bad capacity value" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:21 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:480 +msgid "Save changes and reseed now" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:24 +msgid "Reseeding is already in progress" +msgstr "" + +#. skip the nonce checking in ReseedHandler +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:27 +msgid "Starting reseed process" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:94 +msgid "Configuration saved successfully." +msgstr "" + +#. Normal browsers send value, IE sends button label +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:34 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:175 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:393 +msgid "Shutdown immediately" +msgstr "" + +#. ctx.router().shutdown(Router.EXIT_HARD); // never returns +#. give the UI time to respond +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:39 +msgid "Cancel shutdown" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:40 +msgid "Cancel restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:42 +msgid "Restart immediately" +msgstr "" + +#. ctx.router().shutdown(Router.EXIT_HARD_RESTART); // never returns +#. give the UI time to respond +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:47 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:163 +msgid "Restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:51 +msgid "Shutdown" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:65 +msgid "Restart imminent" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:67 +msgid "Shutdown imminent" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:71 +#, java-format +msgid "Shutdown in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigRestartBean.java:76 +#, java-format +msgid "Restart in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:170 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:391 +msgid "Shutdown gracefully" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:174 +msgid "Graceful shutdown initiated" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:179 +msgid "Shutdown immediately! boom bye bye bad bwoy" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:180 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:395 +msgid "Cancel graceful shutdown" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:182 +msgid "Graceful shutdown cancelled" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:183 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:407 +msgid "Graceful restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:188 +msgid "Graceful restart requested" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:189 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:409 +msgid "Hard restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:194 +msgid "Hard restart requested" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:195 +msgid "Rekey and Restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:196 +msgid "Rekeying after graceful restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:199 +msgid "Rekey and Shutdown" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:200 +msgid "Rekeying after graceful shutdown" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:203 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:435 +msgid "Run I2P on startup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:205 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:437 +msgid "Don't run I2P on startup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:461 +msgid "Dump threads" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:214 +#, java-format +msgid "Threads dumped to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:215 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:469 +msgid "View console on startup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:217 +msgid "Console is to be shown on startup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:218 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:471 +msgid "Do not view console on startup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:220 +msgid "Console is not to be shown on startup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:457 +msgid "Force GC" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:223 +msgid "Full garbage collection requested" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:232 +msgid "Service installed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:234 +msgid "Warning: unable to install the service" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:241 +msgid "Service removed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:243 +msgid "Warning: unable to remove the service" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:116 +msgid "Stat filter and location updated successfully to" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:119 +msgid "Full statistics enabled - restart required to take effect" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:121 +msgid "Full statistics disabled - restart required to take effect" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigStatsHandler.java:124 +msgid "" +"Graph list updated, may take up to 60s to be reflected here and on the <a " +"href=\"graphs.jsp\">Graphs Page</a>" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:28 +msgid "Save order" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:35 +msgid "Refresh interval changed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:37 +#, java-format +msgid "Refresh interval must be at least {0} seconds" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:39 +msgid "Refresh interval must be a number" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:42 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:417 +msgid "Restore full default" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:44 +msgid "Full summary bar default restored." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:45 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:49 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:141 +msgid "Summary bar will refresh shortly." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:46 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:419 +msgid "Restore minimal default" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:48 +msgid "Minimal summary bar default restored." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:65 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:87 +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:135 +msgid "Order must be an integer" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:72 +msgid "No section selected" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:77 +msgid "No order entered" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:133 +msgid "Moved" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:140 +msgid "Saved order of sections." +msgstr "" + +#. the count isn't really correct anyway, since we don't check for actual changes +#. addFormNotice("Updated settings for " + updated + " pools."); +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:136 +msgid "Updated settings for all pools." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:141 +msgid "Exploratory tunnel configuration saved successfully." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:143 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:51 +msgid "" +"Error saving the configuration (applied but not saved) - please see the " +"error logs." +msgstr "" + +#. * dummies for translation +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14 +#, java-format +msgid "1 hop" +msgid_plural "{0} hops" +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:15 +#, java-format +msgid "1 tunnel" +msgid_plural "{0} tunnels" +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:35 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:35 +msgid "Exploratory tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:51 +#, java-format +msgid "Client tunnels for {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:75 +msgid "ANONYMITY WARNING - Settings include 0-hop tunnels." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:80 +msgid "ANONYMITY WARNING - Settings include 1-hop tunnels." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:83 +msgid "PERFORMANCE WARNING - Settings include very long tunnels." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:86 +msgid "PERFORMANCE WARNING - Settings include high tunnel quantities." +msgstr "" + +#. buf.append("<tr><th></th><th>Inbound</th><th>Outbound</th></tr>\n"); +#. tunnel depth +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:93 +msgid "Length" +msgstr "" + +#. tunnel depth variance +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:110 +msgid "Randomization" +msgstr "" + +#. tunnel quantity +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:134 +msgid "Quantity" +msgstr "" + +#. tunnel backup quantity +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:151 +msgid "Backup quantity" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:173 +msgid "Inbound options" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:186 +msgid "Outbound options" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:46 +msgid "Theme change saved." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:48 +msgid "Refresh the page to view." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:25 +msgid "Set theme universally across all apps" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 +msgid "Arabic" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 +msgid "Czech" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 +msgid "Danish" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 +msgid "English" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 +msgid "Estonian" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 +msgid "Finnish" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 +msgid "German" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 +msgid "Greek" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 +msgid "Spanish" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 +msgid "Dutch" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 +msgid "French" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 +msgid "Hungarian" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 +msgid "Italian" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 +msgid "Polish" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 +msgid "Portuguese" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 +msgid "Russian" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 +msgid "Swedish" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 +msgid "Chinese" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 +msgid "Ukrainian" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 +msgid "Vietnamese" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:103 +msgid "Update available, attempting to download now" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:105 +msgid "Update available, click button on left to download" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111 +msgid "No update available" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:122 +#, java-format +msgid "Updating news URL to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:126 +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:134 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:52 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:58 +msgid "internal" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:130 +#, java-format +msgid "Updating proxy host to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:138 +#, java-format +msgid "Updating proxy port to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:150 +#, java-format +msgid "Updating refresh frequency to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:151 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:111 +#: ../java/src/net/i2p/router/web/GraphHelper.java:361 +msgid "Never" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:158 +#, java-format +msgid "Updating update policy to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:167 +msgid "Updating update URLs." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:178 +msgid "Updating trusted keys." +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:186 +#, java-format +msgid "Updating unsigned update URL to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:113 +msgid "Every" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:131 +msgid "Notify only" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:138 +msgid "Download and verify only" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:146 +msgid "Download, verify, and restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/FormHandler.java:176 +msgid "" +"Invalid form submission, probably because you used the 'back' or 'reload' " +"button on your browser. Please resubmit." +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:159 +msgid "Combined bandwidth graph" +msgstr "" + +#. e.g. "statname for 60m" +#: ../java/src/net/i2p/router/web/GraphHelper.java:172 +#: ../java/src/net/i2p/router/web/GraphHelper.java:221 +#, java-format +msgid "{0} for {1}" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:223 +#, java-format +msgid "ending {0} ago" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:238 +msgid "Larger" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:244 +msgid "Smaller" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:250 +msgid "Taller" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:256 +msgid "Shorter" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:262 +msgid "Wider" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:268 +msgid "Narrower" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:275 +msgid "Larger interval" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:281 +msgid "Smaller interval" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:288 +msgid "Previous interval" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:299 +msgid "Next interval" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:305 +#: ../java/src/net/i2p/router/web/GraphHelper.java:345 +msgid "Plot averages" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:305 +#: ../java/src/net/i2p/router/web/GraphHelper.java:346 +msgid "plot events" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:308 +msgid "All times are UTC." +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:340 +msgid "Configure Graph Display" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:340 +msgid "Select Stats" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:344 +msgid "Periods" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:346 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:440 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:433 +msgid "or" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:347 +msgid "Image sizes" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:347 +msgid "width" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:348 +msgid "height" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:348 +#: ../java/src/net/i2p/router/web/GraphHelper.java:349 +msgid "pixels" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:350 +msgid "Refresh delay" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:365 +msgid "Store graph data on disk?" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:371 +msgid "Save settings and redraw graphs" +msgstr "" + +#: ../java/src/net/i2p/router/web/GraphHelper.java:426 +msgid "Graph settings saved" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:27 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:252 +msgid "Addressbook" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:27 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:250 +msgid "Manage your I2P hosts file here (I2P domain name resolution)" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:28 +msgid "Configure Bandwidth" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:28 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:314 +msgid "I2P Bandwidth Configuration" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:29 +msgid "Configure Language" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:29 +msgid "Console Language Selection" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:30 +msgid "Customize Home Page" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:30 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:330 +msgid "I2P Home Page Configuration" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:31 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:160 +msgid "Anonymous webmail client" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:31 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:162 +msgid "Email" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:32 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:266 +msgid "I2P Router Help" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:33 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:148 +msgid "Router Console" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:34 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:166 +msgid "Built-in anonymous BitTorrent Client" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:34 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:168 +msgid "Torrents" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:35 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:172 +msgid "Local web server" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:39 +msgid "Bug Reports" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:39 +msgid "Bug tracker" +msgstr "" + +#. "colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http://colombo-bt.i2p/" + S + I + "colomboicon.png" + S + +#: ../java/src/net/i2p/router/web/HomeHelper.java:41 +msgid "Dev Forum" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:41 +msgid "Development forum" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:42 +#: ../java/src/net/i2p/router/web/HomeHelper.java:54 +msgid "Bittorrent tracker" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:42 +msgid "diftracker" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:43 +msgid "I2P Applications" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:44 +msgid "FAQ" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:44 +msgid "Frequently Asked Questions" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:45 +msgid "Community forum" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:45 +msgid "Forum" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:46 +msgid "" +"A public anonymous Git hosting site - supports pulling via Git and HTTP and " +"pushing via SSH" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:46 +msgid "Anonymous Git Hosting" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:47 +msgid "Microblog" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:47 +msgid "Your premier microblogging service on I2P" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:48 +msgid "Javadocs" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:48 +#: ../java/src/net/i2p/router/web/HomeHelper.java:57 +msgid "Technical documentation" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:50 +msgid "Debian and Tahoe-LAFS repositories" +msgstr "" + +#. _x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S + I + "education.png" + S + +#: ../java/src/net/i2p/router/web/HomeHelper.java:50 +msgid "killyourtv.i2p" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:51 +msgid "I2P Pastebin" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:51 +msgid "Pastebin" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:52 +msgid "I2P News" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:53 +msgid "Add-on directory" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:53 +msgid "Plugins" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:54 +msgid "Postman's Tracker" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:55 +msgid "I2P home page" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:55 +msgid "Project Website" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:56 +msgid "I2P Network Statistics" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:57 +msgid "Technical Docs" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:58 +msgid "Trac Wiki" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:59 +msgid "Ugha's Wiki" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:60 +msgid "Seedless and the Robert BitTorrent applications" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:60 +msgid "Sponge's main site" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:101 +msgid "The HTTP proxy is not up" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:103 +#, java-format +msgid "Your browser is not properly configured to use the HTTP proxy at {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:194 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:812 +msgid "Name" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:196 +msgid "URL" +msgstr "" + +#: ../java/src/net/i2p/router/web/HomeHelper.java:214 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:858 +msgid "Add" +msgstr "" + +#: ../java/src/net/i2p/router/web/LogsHelper.java:32 +#: ../java/src/net/i2p/router/web/LogsHelper.java:79 +msgid "File location" +msgstr "" + +#: ../java/src/net/i2p/router/web/LogsHelper.java:76 +msgid "File not found" +msgstr "" + +#: ../java/src/net/i2p/router/web/LogsHelper.java:94 +msgid "No log messages" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbHelper.java:19 +msgid "Summary" +msgstr "" + +#. 0 +#: ../java/src/net/i2p/router/web/NetDbHelper.java:20 +msgid "Local Router" +msgstr "" + +#. 1 +#: ../java/src/net/i2p/router/web/NetDbHelper.java:21 +msgid "Router Lookup" +msgstr "" + +#. 2 +#: ../java/src/net/i2p/router/web/NetDbHelper.java:22 +msgid "All Routers" +msgstr "" + +#. 3 +#: ../java/src/net/i2p/router/web/NetDbHelper.java:23 +msgid "All Routers with Full Stats" +msgstr "" + +#. 4 +#. 5 +#: ../java/src/net/i2p/router/web/NetDbHelper.java:25 +msgid "LeaseSets" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:92 +#: ../java/strings/Strings.java:68 +msgid "Router" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:92 +msgid "not found in network database" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:135 +msgid "LeaseSet" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:137 +msgid "Local" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:139 +msgid "Unpublished" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:140 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:147 +msgid "Destination" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:157 +#, java-format +msgid "Expires in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:159 +#, java-format +msgid "Expired {0} ago" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:174 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:157 +msgid "Gateway" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:174 +msgid "Lease" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:176 +msgid "Tunnel" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:232 +msgid "Not initialized" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:283 +msgid "Network Database Router Statistics" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:290 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:304 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:322 +msgid "Count" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:304 +msgid "Transports" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:322 +msgid "Country" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:367 +msgid "Our info" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:369 +msgid "Peer info for" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:371 +msgid "Full entry" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:378 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:152 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:630 +msgid "Hidden" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:378 +msgid "Updated" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:379 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:382 +#, java-format +msgid "{0} ago" +msgstr "" + +#. shouldnt happen +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:381 +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:385 +msgid "Published" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:387 +msgid "Address(es)" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:400 +msgid "cost" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:425 +msgid "Hidden or starting up" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:425 +msgid "SSU" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:425 +msgid "SSU with introducers" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:426 +msgid "NTCP" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:426 +msgid "NTCP and SSU" +msgstr "" + +#: ../java/src/net/i2p/router/web/NetDbRenderer.java:426 +msgid "NTCP and SSU with introducers" +msgstr "" + +#: ../java/src/net/i2p/router/web/NewsFetcher.java:131 +#, java-format +msgid "News last updated {0} ago." +msgstr "" + +#: ../java/src/net/i2p/router/web/NewsFetcher.java:137 +#, java-format +msgid "News last checked {0} ago." +msgstr "" + +#: ../java/src/net/i2p/router/web/NewsFetcher.java:146 +msgid "Hide news" +msgstr "" + +#: ../java/src/net/i2p/router/web/NewsFetcher.java:149 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:642 +msgid "Show news" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginStarter.java:122 +msgid "Checking for plugin updates" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginStarter.java:160 +#, java-format +msgid "1 plugin updated" +msgid_plural "{0} plugins updated" +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/PluginStarter.java:162 +msgid "Plugin update check complete" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:81 +#, java-format +msgid "Cannot check, plugin {0} is not installed" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:151 +#, java-format +msgid "Checking for update of plugin {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:181 +#, java-format +msgid "New plugin version {0} is available" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:184 +#, java-format +msgid "No new version is available for plugin {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateChecker.java:194 +#, java-format +msgid "Update check failed for plugin {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:125 +#, java-format +msgid "Attempting to install from file {0}" +msgstr "" + +#. This is actually what String.isEmpty() does, so it should be safe. +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:129 +#, java-format +msgid "No file specified {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:136 +#, java-format +msgid "Failed to install from file {0}, copy failed." +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:162 +msgid "Downloading plugin" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:169 +#, java-format +msgid "{0}B transferred" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:177 +msgid "Plugin downloaded" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:182 +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:415 +#, java-format +msgid "Cannot create plugin directory {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:191 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:302 +#, java-format +msgid "from {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:201 +#, java-format +msgid "Plugin from {0} is corrupt" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:212 +#, java-format +msgid "Plugin from {0} does not contain the required configuration file" +msgstr "" + +#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' + signer + "</b>"); +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:225 +#, java-format +msgid "Plugin from {0} contains an invalid key" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:249 +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:259 +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:273 +#, java-format +msgid "Plugin signature verification of {0} failed" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:288 +#, java-format +msgid "Plugin from {0} has invalid name or version" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:293 +#, java-format +msgid "Plugin {0} has mismatched versions" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:301 +#, java-format +msgid "This plugin requires I2P version {0} or higher" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:309 +#, java-format +msgid "This plugin requires Java version {0} or higher" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:318 +msgid "" +"Downloaded plugin is for new installs only, but the plugin is already " +"installed" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:329 +msgid "Installed plugin does not contain the required configuration file" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:337 +msgid "Signature of downloaded plugin does not match installed plugin" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:344 +#, java-format +msgid "Downloaded plugin version {0} is not newer than installed plugin" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:351 +#, java-format +msgid "Plugin update requires installed plugin version {0} or higher" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:358 +#, java-format +msgid "Plugin update requires installed plugin version {0} or lower" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:366 +#, java-format +msgid "Plugin requires Jetty version {0} or higher" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:373 +#, java-format +msgid "Plugin requires Jetty version {0} or lower" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:382 +#, java-format +msgid "Cannot copy plugin to directory {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:392 +msgid "Plugin will be installed on next restart." +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:410 +msgid "Plugin is for upgrades only, but the plugin is not installed" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:423 +#, java-format +msgid "Failed to install plugin in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:430 +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:458 +#, java-format +msgid "Plugin {0} installed" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:449 +#, java-format +msgid "Plugin {0} installed and started" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:452 +#, java-format +msgid "Plugin {0} installed but failed to start, check logs" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:454 +#, java-format +msgid "Plugin {0} installed but failed to start" +msgstr "" + +#: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:466 +#, java-format +msgid "Failed to download plugin from {0}" +msgstr "" + +#. buf.append("<h2>").append(_("Peer Profiles")).append("</h2>\n<p>"); +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:83 +#, java-format +msgid "Showing 1 recent profile." +msgid_plural "Showing {0} recent profiles." +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:85 +#, java-format +msgid "Hiding 1 older profile." +msgid_plural "Hiding {0} older profiles." +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:87 +#, java-format +msgid "Hiding 1 standard profile." +msgid_plural "Hiding {0} standard profiles." +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:92 +msgid "Groups (Caps)" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:93 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:273 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:435 +msgid "Speed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:94 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:275 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:439 +msgid "Capacity" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:95 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:277 +msgid "Integration" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:135 +msgid "Fast, High Capacity" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:136 +#: ../java/src/net/i2p/router/web/ProfilesHelper.java:11 +msgid "High Capacity" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:137 +msgid "Standard" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:138 +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:172 +msgid "Failing" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:140 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:416 +msgid "Integrated" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:173 +msgid "Unreachable" +msgstr "" + +#. hide if < 10% +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:180 +msgid "Test Fails" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:186 +msgid "profile" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:205 +msgid "Caps" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:206 +msgid "Integ. Value" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:207 +msgid "Last Heard About" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:208 +msgid "Last Heard From" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:209 +msgid "Last Good Send" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:210 +msgid "Last Bad Send" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:211 +msgid "10m Resp. Time" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:212 +msgid "1h Resp. Time" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:213 +msgid "1d Resp. Time" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:214 +msgid "Last Good Lookup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:215 +msgid "Last Bad Lookup" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:216 +msgid "Last Good Store" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:217 +msgid "Last Bad Store" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:218 +msgid "1h Fail Rate" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:219 +msgid "1d Fail Rate" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:272 +msgid "Thresholds" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:274 +msgid "fast peers" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:276 +msgid "high capacity peers" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:278 +msgid " well integrated peers" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:280 +msgid "as determined by the profile organizer" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:280 +msgid "groups" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:281 +msgid "capabilities in the netDb, not used to determine profiles" +msgstr "" + +#. capabilities +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:281 +#: ../java/strings/Strings.java:81 +msgid "caps" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282 +msgid "" +"peak throughput (bytes per second) over a 1 minute period that the peer has " +"sustained in a single tunnel" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282 +msgid "speed" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:283 +msgid "capacity" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:283 +msgid "how many tunnels can we ask them to join in an hour?" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:284 +msgid "how many new peers have they told us about lately?" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:284 +msgid "integration" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:285 +msgid "is the peer banned, or unreachable, or failing tunnel tests?" +msgstr "" + +#: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:285 +msgid "status" +msgstr "" + +#. 0 +#: ../java/src/net/i2p/router/web/ProfilesHelper.java:12 +msgid "Floodfill " +msgstr "" + +#. 2 +#: ../java/src/net/i2p/router/web/ProfilesHelper.java:14 +msgid "All" +msgstr "" + +#: ../java/src/net/i2p/router/web/SearchHelper.java:74 +msgid "Select search engine" +msgstr "" + +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:64 +#, java-format +msgid "Temporary ban expiring in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:66 +#, java-format +msgid "Banned until restart or in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ShitlistRenderer.java:78 +msgid "unban now" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatSummarizer.java:312 +msgid "Bandwidth usage" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatSummarizer.java:322 +msgid "Outbound Bytes/sec" +msgstr "" + +#. def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3); +#: ../java/src/net/i2p/router/web/StatSummarizer.java:324 +msgid "Inbound Bytes/sec" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatSummarizer.java:327 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:330 +msgid "Bps" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatSummarizer.java:327 +msgid "Out average" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:330 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:155 +msgid "max" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 +msgid "In average" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:58 +msgid "GO" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:61 +msgid "Statistics gathered during this router's uptime" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:64 +msgid "" +"The data gathered is quantized over a 1 minute period, so should just be " +"used as an estimate." +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:65 +msgid "These statistics are primarily used for development and debugging." +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:106 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:157 +msgid "No lifetime events" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:117 +msgid "frequency" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:121 +msgid "Rolling average events per period" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:125 +msgid "Highest events per period" +msgstr "" + +#. if (showAll && (curFreq.getMaxAverageEventsPerPeriod() > 0) && (curFreq.getAverageEventsPerPeriod() > 0) ) { +#. buf.append("(current is "); +#. buf.append(pct(curFreq.getAverageEventsPerPeriod()/curFreq.getMaxAverageEventsPerPeriod())); +#. buf.append(" of max)"); +#. } +#. buf.append(" <i>avg interval between updates:</i> (").append(num(curFreq.getAverageInterval())).append("ms, min "); +#. buf.append(num(curFreq.getMinAverageInterval())).append("ms)"); +#: ../java/src/net/i2p/router/web/StatsGenerator.java:136 +msgid "Lifetime average events per period" +msgstr "" + +#. Display the strict average +#: ../java/src/net/i2p/router/web/StatsGenerator.java:141 +msgid "Lifetime average frequency" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:144 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:233 +#, java-format +msgid "1 event" +msgid_plural "{0} events" +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:169 +msgid "rate" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:171 +msgid "Average" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:174 +msgid "Highest average" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:201 +#, java-format +msgid "There was 1 event in this period." +msgid_plural "There were {0} events in this period." +msgstr[0] "" +msgstr[1] "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:203 +#, java-format +msgid "The period ended {0} ago." +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:205 +msgid "No events" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:210 +msgid "Average event count" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:212 +msgid "Events in peak period" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:220 +msgid "Graph Data" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:222 +msgid "Graph Event Count" +msgstr "" + +#: ../java/src/net/i2p/router/web/StatsGenerator.java:225 +msgid "Export Data as XML" +msgstr "" + +#. Display the strict average +#: ../java/src/net/i2p/router/web/StatsGenerator.java:230 +msgid "Lifetime average value" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:142 +msgid "I2P Router Help & FAQ" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:144 +msgid "Help & FAQ" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:152 +msgid "" +"Configure startup of clients and webapps (services); manually start dormant " +"services" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 +msgid "I2P Services" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:186 +msgid "Configure I2P Router" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:188 +msgid "I2P Internals" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:194 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:489 +msgid "View existing tunnels and tunnel build status" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:200 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:375 +msgid "Show all current peer connections" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:206 +msgid "Show recent peer performance profiles" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:208 +msgid "Profiles" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:212 +msgid "Show list of all known I2P routers" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:214 +msgid "NetDB" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:218 +msgid "Health Report" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:220 +msgid "Logs" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:231 +msgid "Graph router performance" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:233 +msgid "Graphs" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:238 +msgid "Textual router performance statistics" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:244 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:411 +msgid "Local Destinations" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:246 +#: ../java/strings/Strings.java:62 +msgid "I2PTunnel" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:268 +msgid "General" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:273 +msgid "" +"Your Local Identity is your unique I2P router identity, similar to an ip " +"address but tailored to I2P. " +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:274 +msgid "Never disclose this to anyone, as it can reveal your real world ip." +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:276 +msgid "Local Identity" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:280 +msgid "Your unique I2P router identity is" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:284 +msgid "never reveal it to anyone" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:286 +msgid "show" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:290 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:316 +msgid "The version of the I2P software we are running" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:300 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:326 +msgid "How long we've been running for this session" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:303 +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:329 +msgid "Uptime" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:341 +msgid "" +"Help with configuring your firewall and router for optimal I2P performance" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:356 +msgid "Configure I2P Updates" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:358 +msgid "I2P Update" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:383 +msgid "Peers we've been talking to in the last few minutes/last hour" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:386 +msgid "Active" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:395 +msgid "The number of peers available for building client tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:398 +msgid "Fast" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:404 +msgid "The number of peers available for building exploratory tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:407 +msgid "High capacity" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:413 +msgid "The number of peers available for network database inquiries" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:422 +msgid "The total number of peers in our network database" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:425 +msgid "Known" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:445 +msgid "Configure router bandwidth allocation" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:447 +msgid "Bandwidth in/out" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:467 +msgid "Total" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:474 +msgid "Used" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:496 +msgid "" +"Used for building and testing tunnels, and communicating with floodfill peers" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:499 +msgid "Exploratory" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:505 +msgid "Tunnels we are using to provide or access services on the network" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:514 +msgid "" +"Tunnels we are participating in, directly contributing bandwith to the " +"network" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:517 +msgid "Participating" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:523 +msgid "" +"The ratio of tunnel hops we provide to tunnel hops we use - a value greater " +"than 1.00 indicates a positive contribution to the network" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:526 +msgid "Share ratio" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:539 +msgid "What's in the router's job queue?" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:541 +msgid "Congestion" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:546 +msgid "Indicates router performance" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:549 +msgid "Job lag" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:555 +msgid "Indicates how quickly outbound messages to other I2P routers are sent" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:558 +msgid "Message delay" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:565 +msgid "Round trip time for a tunnel test" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:568 +msgid "Tunnel lag" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:575 +msgid "Queued requests from other routers to participate in tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:578 +msgid "Backlog" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:613 +msgid "News & Updates" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:143 +msgid "ERR-Client Manager I2CP Error - check logs" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:150 +#, java-format +msgid "ERR-Clock Skew of {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:155 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:188 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:626 +msgid "Testing" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:162 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:606 +msgid "OK" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:163 +msgid "ERR-Private TCP Address" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:165 +msgid "ERR-SymmetricNAT" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:168 +msgid "WARN-Firewalled with Inbound TCP Enabled" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:170 +msgid "WARN-Firewalled and Floodfill" +msgstr "" + +#. if (_context.router().getRouterInfo().getCapabilities().indexOf('O') >= 0) +#. return _("WARN-Firewalled and Fast"); +#: ../java/src/net/i2p/router/web/SummaryHelper.java:173 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:610 +msgid "Firewalled" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:175 +msgid "" +"ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and " +"restart" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:181 +msgid "ERR-No Active Peers, Check Network Connection and Firewall" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:184 +msgid "ERR-UDP Disabled and Inbound TCP host/port not set" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:186 +msgid "WARN-Firewalled with UDP Disabled" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:411 +msgid "Add/remove/edit & control your client and server tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:423 +msgid "Server" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:427 +msgid "Show tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:438 +msgid "Leases expired" +msgstr "" + +#. red or yellow light +#: ../java/src/net/i2p/router/web/SummaryHelper.java:438 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:439 +msgid "Rebuilding" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:439 +msgid "ago" +msgstr "" + +#. green light +#: ../java/src/net/i2p/router/web/SummaryHelper.java:442 +msgid "Ready" +msgstr "" + +#. yellow light +#: ../java/src/net/i2p/router/web/SummaryHelper.java:446 +msgid "Building" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:446 +msgid "Building tunnels" +msgstr "" + +#. tunnel nicknames, taken from i2ptunnel.config so they will display +#. nicely under 'local destinations' in the summary bar +#. note that if the wording changes in i2ptunnel.config, we have to +#. keep the old string here as well for existing installs +#: ../java/src/net/i2p/router/web/SummaryHelper.java:459 +#: ../java/strings/Strings.java:36 +msgid "shared clients" +msgstr "" + +#. Note to translators: parameter is a version, e.g. "0.8.4" +#: ../java/src/net/i2p/router/web/SummaryHelper.java:677 +#, java-format +msgid "Download {0} Update" +msgstr "" + +#. Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC" +#. <br> is optional, to help the browser make the lines even in the button +#. If the translation is shorter than the English, you should probably not include <br> +#: ../java/src/net/i2p/router/web/SummaryHelper.java:685 +#, java-format +msgid "Download Unsigned<br>Update {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:710 +msgid "Help with firewall configuration" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:712 +msgid "Check network connection and NAT/firewall" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:731 +msgid "Reseed" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:814 +msgid "Order" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:831 +msgid "Top" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:844 +msgid "Down" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:849 +msgid "Bottom" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryHelper.java:861 +msgid "Select a section to add" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:121 +#, java-format +msgid "events in {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:123 +#, java-format +msgid "averaged for {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:133 +msgid "Events per period" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:154 +msgid "avg" +msgstr "" + +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:156 +msgid "now" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:35 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:57 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:398 +msgid "configure" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:55 +msgid "Client tunnels for" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:59 +msgid "dead" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:65 +msgid "Participating tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:66 +msgid "Receive on" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:67 +msgid "Expiration" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:67 +msgid "Send on" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:68 +msgid "Rate" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:68 +msgid "Role" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:68 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:157 +msgid "Usage" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:106 +msgid "grace period" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:116 +msgid "Outbound Endpoint" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:118 +msgid "Inbound Gateway" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:120 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:163 +msgid "Participant" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:125 +#, java-format +msgid "Limited display to the {0} tunnels with the highest usage" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:126 +msgid "Inactive participating tunnels" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:127 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:219 +msgid "Lifetime bandwidth usage" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:157 +msgid "Expiry" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:160 +msgid "Participants" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:166 +msgid "Endpoint" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:206 +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:213 +msgid "Build in progress" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:206 +msgid "inbound" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:213 +msgid "outbound" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:218 +msgid "No tunnels; waiting for the grace period to end." +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:220 +msgid "in" +msgstr "" + +#: ../java/src/net/i2p/router/web/TunnelRenderer.java:221 +msgid "out" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:67 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:146 +msgid "Updating" +msgstr "" + +#. Process the .sud/.su2 file +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:89 +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:111 +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:116 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:266 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:290 +msgid "Update downloaded" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:92 +#, java-format +msgid "Unsigned update file from {0} is corrupt" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:111 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:285 +msgid "Restarting" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:118 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:292 +msgid "Click Restart to install" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:120 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:294 +msgid "Click Shutdown and restart to install" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:121 +#: ../java/src/net/i2p/router/web/UpdateHandler.java:296 +#, java-format +msgid "Version {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/UnsignedUpdateHandler.java:126 +#, java-format +msgid "Failed copy to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/UpdateHandler.java:187 +#, java-format +msgid "Updating from {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/UpdateHandler.java:243 +#, java-format +msgid "{0} downloaded" +msgstr "" + +#: ../java/src/net/i2p/router/web/UpdateHandler.java:258 +#, java-format +msgid "No new version found at {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/UpdateHandler.java:285 +msgid "Update verified" +msgstr "" + +#: ../java/src/net/i2p/router/web/UpdateHandler.java:311 +#, java-format +msgid "Transfer failed from {0}" +msgstr "" + +#. wars for ConfigClientsHelper +#: ../java/strings/Strings.java:12 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:154 +msgid "addressbook" +msgstr "" + +#: ../java/strings/Strings.java:13 +msgid "i2psnark" +msgstr "" + +#: ../java/strings/Strings.java:14 +msgid "i2ptunnel" +msgstr "" + +#: ../java/strings/Strings.java:15 +msgid "susimail" +msgstr "" + +#: ../java/strings/Strings.java:16 +msgid "susidns" +msgstr "" + +#: ../java/strings/Strings.java:17 +msgid "routerconsole" +msgstr "" + +#. clients, taken from clients.config, for ConfigClientsHelper +#. note that if the wording changes in clients.config, we have to +#. keep the old string here as well for existing installs +#: ../java/strings/Strings.java:22 +msgid "Web console" +msgstr "" + +#: ../java/strings/Strings.java:23 +msgid "SAM application bridge" +msgstr "" + +#: ../java/strings/Strings.java:24 +msgid "Application tunnels" +msgstr "" + +#: ../java/strings/Strings.java:25 +msgid "My eepsite web server" +msgstr "" + +#: ../java/strings/Strings.java:26 +msgid "I2P webserver (eepsite)" +msgstr "" + +#: ../java/strings/Strings.java:27 +msgid "Browser launch at startup" +msgstr "" + +#: ../java/strings/Strings.java:28 +msgid "BOB application bridge" +msgstr "" + +#: ../java/strings/Strings.java:30 +msgid "Open Router Console in web browser at startup" +msgstr "" + +#: ../java/strings/Strings.java:37 +msgid "IRC proxy" +msgstr "" + +#: ../java/strings/Strings.java:38 +msgid "eepsite" +msgstr "" + +#: ../java/strings/Strings.java:39 +msgid "I2P webserver" +msgstr "" + +#: ../java/strings/Strings.java:40 +msgid "HTTP Proxy" +msgstr "" + +#. older names for pre-0.7.4 installs +#: ../java/strings/Strings.java:42 +msgid "eepProxy" +msgstr "" + +#: ../java/strings/Strings.java:43 +msgid "ircProxy" +msgstr "" + +#. hardcoded in i2psnark +#: ../java/strings/Strings.java:45 +msgid "I2PSnark" +msgstr "" + +#. hardcoded in iMule? +#: ../java/strings/Strings.java:47 +msgid "iMule" +msgstr "" + +#. standard themes for ConfigUIHelper +#: ../java/strings/Strings.java:51 +msgid "classic" +msgstr "" + +#: ../java/strings/Strings.java:52 +msgid "dark" +msgstr "" + +#: ../java/strings/Strings.java:53 +msgid "light" +msgstr "" + +#: ../java/strings/Strings.java:54 +msgid "midnight" +msgstr "" + +#: ../java/strings/Strings.java:58 +msgid "BandwidthLimiter" +msgstr "" + +#: ../java/strings/Strings.java:59 +msgid "ClientMessages" +msgstr "" + +#: ../java/strings/Strings.java:60 +msgid "Encryption" +msgstr "" + +#: ../java/strings/Strings.java:61 +msgid "i2cp" +msgstr "" + +#: ../java/strings/Strings.java:63 +msgid "InNetPool" +msgstr "" + +#: ../java/strings/Strings.java:64 +msgid "JobQueue" +msgstr "" + +#: ../java/strings/Strings.java:65 +msgid "NetworkDatabase" +msgstr "" + +#: ../java/strings/Strings.java:66 +msgid "ntcp" +msgstr "" + +#: ../java/strings/Strings.java:69 +msgid "Stream" +msgstr "" + +#: ../java/strings/Strings.java:70 +msgid "Throttle" +msgstr "" + +#: ../java/strings/Strings.java:71 +msgid "Transport" +msgstr "" + +#: ../java/strings/Strings.java:73 +msgid "udp" +msgstr "" + +#. parameters in transport addresses (netdb.jsp) +#. may or may not be worth translating +#: ../java/strings/Strings.java:77 +msgid "host" +msgstr "" + +#: ../java/strings/Strings.java:78 +msgid "key" +msgstr "" + +#: ../java/strings/Strings.java:79 +msgid "port" +msgstr "" + +#. introducer host +#: ../java/strings/Strings.java:83 +msgid "ihost0" +msgstr "" + +#: ../java/strings/Strings.java:84 +msgid "ihost1" +msgstr "" + +#: ../java/strings/Strings.java:85 +msgid "ihost2" +msgstr "" + +#. introducer port +#: ../java/strings/Strings.java:87 +msgid "iport0" +msgstr "" + +#: ../java/strings/Strings.java:88 +msgid "iport1" +msgstr "" + +#: ../java/strings/Strings.java:89 +msgid "iport2" +msgstr "" + +#. introducer key +#: ../java/strings/Strings.java:91 +msgid "ikey0" +msgstr "" + +#: ../java/strings/Strings.java:92 +msgid "ikey1" +msgstr "" + +#: ../java/strings/Strings.java:93 +msgid "ikey2" +msgstr "" + +#. introducer tag +#: ../java/strings/Strings.java:95 +msgid "itag0" +msgstr "" + +#: ../java/strings/Strings.java:96 +msgid "itag1" +msgstr "" + +#: ../java/strings/Strings.java:97 +msgid "itag2" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:137 +msgid "configure bandwidth" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:140 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:140 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:140 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:140 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:142 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:140 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:140 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:157 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:151 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:164 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:160 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:157 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:141 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:141 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:145 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:157 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:139 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:157 +msgid "Router is down" +msgstr "" + +#. We have intl defined when this is included, but not when compiled standalone. +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:291 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:291 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:301 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:291 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:317 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:291 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:291 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:297 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:308 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:302 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:339 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:311 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:309 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:316 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:316 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:320 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:288 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:308 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:290 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:308 +msgid "Refresh (s)" +msgstr "" + +#. ditto +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:305 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:321 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:295 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:301 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:312 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:306 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:343 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:315 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005far_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005ffr_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fnl_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_005fru_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/help_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:313 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:320 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:320 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:324 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/oldconsole_jsp.java:299 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:291 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:312 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:294 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:312 +msgid "Enable" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:355 +msgid "Bandwidth limiter" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:357 +msgid "" +"I2P will work best if you configure your rates to match the speed of your " +"internet connection." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:361 +msgid "KBps In" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:375 +msgid "KBps Out" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:390 +msgid "Share" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:397 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:363 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:408 +msgid "NOTE" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:399 +#, java-format +msgid "You have configured I2P to share only {0} KBps." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:402 +msgid "I2P requires at least 12KBps to enable sharing. " +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:403 +msgid "" +"Please enable sharing (participating in tunnels) by configuring more " +"bandwidth. " +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:404 +msgid "" +"It improves your anonymity by creating cover traffic, and helps the network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:406 +#, java-format +msgid "You have configured I2P to share {0} KBps." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:409 +msgid "" +"The higher the share bandwidth the more you improve your anonymity and help " +"the network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:413 +msgid "Advanced network configuration page" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:415 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:359 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:429 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:509 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:525 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:539 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:551 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:421 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:441 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:457 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:421 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:393 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:543 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:478 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:476 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:442 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:387 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:437 +msgid "Cancel" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:137 +msgid "config advanced" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:314 +msgid "I2P Advanced Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:355 +msgid "Advanced I2P Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:365 +msgid "Some changes may require a restart to take effect." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:139 +msgid "config clients" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:346 +msgid "I2P Client Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:412 +msgid "Client Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:414 +msgid "" +"The Java clients listed below are started by the router and run in the same " +"JVM." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:420 +msgid "To change other client options, edit the file" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:427 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:505 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:523 +msgid "All changes require restart to take effect." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:439 +msgid "Advanced Client Interface Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:443 +msgid "External I2CP (I2P Client Protocol) Interface Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:449 +msgid "Enabled without SSL" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:455 +msgid "Enabled with SSL required" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:461 +msgid "Disabled - Clients outside this Java process may not connect" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:463 +msgid "I2CP Port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:467 +msgid "I2CP Interface" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:483 +msgid "Authorization" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:489 +msgid "Require username and password" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:491 +msgid "Username" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:495 +msgid "Password" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:499 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:400 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:406 +msgid "The default settings will work for most people." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:501 +msgid "Any changes made here must also be configured in the external client." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:503 +msgid "Many clients do not support SSL or authorization." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:513 +msgid "WebApp Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:515 +msgid "" +"The Java web applications listed below are started by the webConsole client " +"and run in the same JVM as the router. They are usually web applications " +"accessible through the router console. They may be complete applications (e." +"g. i2psnark),front-ends to another client or application which must be " +"separately enabled (e.g. susidns, i2ptunnel), or have no web interface at " +"all (e.g. addressbook)." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:517 +msgid "" +"A web app may also be disabled by removing the .war file from the webapps " +"directory; however the .war file and web app will reappear when you update " +"your router to a newer version, so disabling the web app here is the " +"preferred method." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:531 +msgid "Plugin Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:533 +msgid "The plugins listed below are started by the webConsole client." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:543 +msgid "Plugin Installation" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:545 +msgid "To install a plugin, enter the download URL:" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:139 +msgid "config home" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:397 +msgid "Default Home Page" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:403 +msgid "Use old home page" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:411 +msgid "Search Engines" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:431 +msgid "Recommended Eepsites" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:447 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:386 +msgid "Local Services" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:139 +msgid "config keyring" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:330 +msgid "I2P Keyring Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:399 +msgid "The router keyring is used to decrypt encrypted leaseSets." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:402 +msgid "" +"The keyring may contain keys for local or remote encrypted destinations." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:408 +msgid "Manual Keyring Addition" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:410 +msgid "Enter keys for encrypted remote destinations here." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:413 +msgid "Keys for local destinations must be entered on the" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:415 +msgid "I2PTunnel page" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:417 +msgid "Dest. name, hash, or full key" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:419 +msgid "Encryption Key" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:137 +msgid "config logging" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:314 +msgid "I2P Logging Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:355 +msgid "Configure I2P Logging Options" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:357 +msgid "Log file" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:361 +msgid "(the symbol '@' will be replaced during log rotation)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:363 +msgid "Log record format" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:367 +msgid "" +"(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:369 +msgid "Log date format" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:373 +msgid "" +"('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' " +"= millisecond)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:375 +msgid "Max log file size" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:379 +msgid "Default log level" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:383 +msgid "" +"(DEBUG and INFO are not recommended defaults, as they will drastically slow " +"down your router)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:385 +msgid "Log level overrides" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:389 +msgid "New override" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:139 +msgid "config networking" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:343 +msgid "I2P Network Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:398 +msgid "IP and Transport Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:402 +msgid "There is help below." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:404 +msgid "UPnP Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:408 +msgid "Enable UPnP to open firewall ports" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:410 +msgid "UPnP status" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:412 +msgid "IP Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:414 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:490 +msgid "Externally reachable hostname or IP address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:418 +msgid "Use all auto-detect methods" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:422 +msgid "Disable UPnP IP address detection" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:426 +msgid "Ignore local interface IP address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:430 +msgid "Use SSU IP address detection only" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:434 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:508 +msgid "Specify hostname or IP" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:440 +msgid "Select Interface" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:454 +msgid "Hidden mode - do not publish IP" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:456 +msgid "(prevents participating traffic)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:458 +msgid "Action when IP changes" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:462 +msgid "" +"Laptop mode - Change router identity and UDP port when IP changes for " +"enhanced anonymity" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:464 +msgid "Experimental" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:466 +msgid "UDP Configuration:" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:468 +msgid "UDP port:" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:474 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:518 +msgid "Completely disable" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:476 +msgid "(select only if behind a firewall that blocks outbound UDP)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:488 +msgid "TCP Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:494 +msgid "Use auto-detected IP address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:496 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:528 +msgid "currently" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:500 +msgid "if we are not firewalled" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:504 +msgid "Always use auto-detected IP address (Not firewalled)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:514 +msgid "Disable inbound (Firewalled)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:520 +msgid "" +"(select only if behind a firewall that throttles or blocks outbound TCP)" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:522 +msgid "Externally reachable TCP port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:526 +msgid "Use the same port configured for UDP" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:534 +msgid "Specify Port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:538 +msgid "Notes" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:541 +msgid "" +"a) Do not reveal your port numbers to anyone! b) Changing these settings " +"will restart your router." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:547 +msgid "Configuration Help" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:549 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:598 +msgid "" +"While I2P will work fine behind most firewalls, your speeds and network " +"integration will generally improve if the I2P port is forwarded for both UDP " +"and TCP." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:551 +msgid "" +"If you can, please poke a hole in your firewall to allow unsolicited UDP and " +"TCP packets to reach you." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:553 +msgid "" +"If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole " +"punching with \"SSU introductions\" to relay traffic." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:555 +msgid "" +"Most of the options above are for special situations, for example where UPnP " +"does not work correctly, or a firewall not under your control is doing harm." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:557 +msgid "Certain firewalls such as symmetric NATs may not work well with I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:566 +msgid "" +"UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect " +"the external IP address and forward ports." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:568 +msgid "UPnP support is beta, and may not work for any number of reasons" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:570 +msgid "No UPnP-compatible device present" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:572 +msgid "UPnP disabled on the device" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:574 +msgid "Software firewall interference with UPnP" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:576 +msgid "Bugs in the device's UPnP implementation" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:578 +msgid "Multiple firewall/routers in the internet connection path" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:580 +msgid "UPnP device change, reset, or address change" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:582 +msgid "Review the UPnP status here." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:584 +msgid "" +"UPnP may be enabled or disabled above, but a change requires a router " +"restart to take effect." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:586 +msgid "Hostnames entered above will be published in the network database." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:588 +msgid "They are <b>not private</b>." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:590 +msgid "" +"Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:592 +msgid "" +"If you specify the wrong IP address or hostname, or do not properly " +"configure your NAT or firewall, your network performance will degrade " +"substantially." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:594 +msgid "When in doubt, leave the settings at the defaults." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:596 +msgid "Reachability Help" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:601 +msgid "" +"If you think you have opened up your firewall and I2P still thinks you are " +"firewalled, remember that you may have multiple firewalls, for example both " +"software packages and external hardware routers." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:604 +msgid "" +"If there is an error, the <a href=\"logs.jsp\">logs</a> may also help " +"diagnose the problem." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:608 +msgid "Your UDP port does not appear to be firewalled." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:612 +msgid "Your UDP port appears to be firewalled." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:614 +msgid "" +"As the firewall detection methods are not 100% reliable, this may " +"occasionally be displayed in error." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:616 +msgid "" +"However, if it appears consistently, you should check whether both your " +"external and internal firewalls are open for your port." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:618 +msgid "" +"I2P will work fine when firewalled, there is no reason for concern. When " +"firewalled, the router uses \"introducers\" to relay inbound connections." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:620 +msgid "" +"However, you will get more participating traffic and help the network more " +"if you can open your firewall(s)." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:622 +msgid "" +"If you think you have already done so, remember that you may have both a " +"hardware and a software firewall, or be behind an additional, institutional " +"firewall you cannot control." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:624 +msgid "" +"Also, some routers cannot correctly forward both TCP and UDP on a single " +"port, or may have other limitations or bugs that prevent them from passing " +"traffic through to I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:628 +msgid "The router is currently testing whether your UDP port is firewalled." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:632 +msgid "" +"The router is not configured to publish its address, therefore it does not " +"expect incoming connections." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:634 +msgid "" +"Hidden mode is automatically enabled for added protection in certain " +"countries." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:636 +msgid "WARN - Firewalled and Fast" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:638 +msgid "" +"You have configured I2P to share more than 128KBps of bandwidth, but you are " +"firewalled." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:640 +msgid "" +"While I2P will work fine in this configuration, if you really have over " +"128KBps of bandwidth to share, it will be much more helpful to the network " +"if you open your firewall." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:642 +msgid "WARN - Firewalled and Floodfill" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:644 +msgid "" +"You have configured I2P to be a floodfill router, but you are firewalled." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:646 +msgid "" +"For best participation as a floodfill router, you should open your firewall." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:648 +msgid "WARN - Firewalled with Inbound TCP Enabled" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:650 +msgid "" +"You have configured inbound TCP, however your UDP port is firewalled, and " +"therefore it is likely that your TCP port is firewalled as well." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:652 +msgid "" +"If your TCP port is firewalled with inbound TCP enabled, routers will not be " +"able to contact you via TCP, which will hurt the network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:654 +msgid "Please open your firewall or disable inbound TCP above." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:656 +msgid "WARN - Firewalled with UDP Disabled" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:658 +msgid "You have configured inbound TCP, however you have disabled UDP." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:660 +msgid "" +"You appear to be firewalled on TCP, therefore your router cannot accept " +"inbound connections." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:662 +msgid "Please open your firewall or enable UDP." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:664 +msgid "ERR - Clock Skew" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:666 +msgid "" +"Your system's clock is skewed, which will make it difficult to participate " +"in the network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:668 +msgid "Correct your clock setting if this error persists." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:670 +msgid "ERR - Private TCP Address" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:672 +msgid "" +"You must never advertise an unroutable IP address such as 127.0.0.1 or " +"192.168.1.1 as your external address." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:674 +msgid "Correct the address or disable inbound TCP above." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:676 +msgid "ERR - SymmetricNAT" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:678 +msgid "I2P detected that you are firewalled by a Symmetric NAT." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:680 +msgid "" +"I2P does not work well behind this type of firewall. You will probably not " +"be able to accept inbound connections, which will limit your participation " +"in the network." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:682 +msgid "" +"ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config " +"and restart" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:684 +msgid "I2P was unable to bind to port 8887 or other configured port." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:686 +msgid "" +"Check to see if another program is using the configured port. If so, stop " +"that program or configure I2P to use a different port." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:688 +msgid "" +"This may be a transient error, if the other program is no longer using the " +"port." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:690 +msgid "However, a restart is always required after this error." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:692 +msgid "ERR - UDP Disabled and Inbound TCP host/port not set" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:694 +msgid "" +"You have not configured inbound TCP with a hostname and port above, however " +"you have disabled UDP." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:696 +msgid "Therefore your router cannot accept inbound connections." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:698 +msgid "Please configure a TCP host and port above or enable UDP." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:700 +msgid "ERR - Client Manager I2CP Error - check logs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:702 +msgid "This is usually due to a port 7654 conflict. Check the logs to verify." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:704 +msgid "" +"Do you have another I2P instance running? Stop the conflicting program and " +"restart I2P." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:139 +msgid "config peers" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:330 +msgid "I2P Peer Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:405 +msgid "Manual Peer Controls" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:407 +msgid "Router Hash" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:411 +msgid "Manually Ban / Unban a Peer" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:413 +msgid "" +"Banning will prevent the participation of this peer in tunnels you create." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:423 +msgid "Adjust Profile Bonuses" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:425 +msgid "" +"Bonuses may be positive or negative, and affect the peer's inclusion in Fast " +"and High Capacity tiers. Fast peers are used for client tunnels, and High " +"Capacity peers are used for some exploratory tunnels. Current bonuses are " +"displayed on the" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:427 +msgid "profiles page" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:445 +msgid "Banned Peers" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:466 +msgid "Banned IPs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:139 +msgid "config reseeding" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:343 +msgid "I2P Reseeding Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:400 +msgid "Reseeding Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:402 +msgid "" +"Reseeding is the bootstrapping process used to find other routers when you " +"first install I2P, or when your router has too few router references " +"remaining." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:404 +msgid "" +"If reseeding has failed, you should first check your network connection." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:408 +msgid "" +"Change these only if HTTP is blocked by a restrictive firewall, reseed has " +"failed, and you have access to an HTTP proxy." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:410 +#, java-format +msgid "See {0} for instructions on reseeding manually." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:410 +msgid "the FAQ" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:412 +msgid "Reseed URL Selection" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:416 +msgid "Try SSL first then non-SSL" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:420 +msgid "Use SSL only" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:424 +msgid "Use non-SSL only" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:426 +msgid "Reseed URLs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:430 +msgid "Enable HTTP Proxy?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:434 +msgid "HTTP Proxy Host" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:438 +msgid "HTTP Proxy Port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:442 +msgid "Use HTTP Proxy Authorization?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:446 +msgid "HTTP Proxy Username" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:450 +msgid "HTTP Proxy Password" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:454 +msgid "Enable HTTPS Proxy?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:458 +msgid "HTTPS Proxy Host" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:462 +msgid "HTTPS Proxy Port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:466 +msgid "Use HTTPS Proxy Authorization?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:470 +msgid "HTTPS Proxy Username" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:474 +msgid "HTTPS Proxy Password" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:139 +msgid "config service" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:330 +msgid "I2P Service Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:385 +msgid "Shutdown the router" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:387 +msgid "" +"Graceful shutdown lets the router satisfy the agreements it has already made " +"before shutting down, but may take a few minutes." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:389 +msgid "" +"If you need to kill the router immediately, that option is available as well." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:399 +msgid "" +"If you want the router to restart itself after shutting down, you can choose " +"one of the following." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:401 +msgid "" +"This is useful in some situations - for example, if you changed some " +"settings that client applications only read at startup, such as the " +"routerconsole password or the interface it listens on." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:403 +msgid "" +"A graceful restart will take a few minutes (but your peers will appreciate " +"your patience), while a hard restart does so immediately." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:405 +msgid "" +"After tearing down the router, it will wait 1 minute before starting back up " +"again." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:415 +msgid "Systray integration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:417 +msgid "" +"On the windows platform, there is a small application to sit in the system " +"tray, allowing you to view the router's status" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:419 +msgid "" +"(later on, I2P client applications will be able to integrate their own " +"functionality into the system tray as well)." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:421 +msgid "If you are on windows, you can either enable or disable that icon here." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:423 +msgid "Show systray icon" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:425 +msgid "Hide systray icon" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:427 +msgid "Run on startup" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:429 +msgid "" +"You can control whether I2P is run on startup or not by selecting one of the " +"following options - I2P will install (or remove) a service accordingly." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:431 +msgid "If you prefer the command line, you can also run the " +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:439 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:430 +msgid "Note" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:441 +msgid "" +"If you are running I2P as service right now, removing it will shut down your " +"router immediately." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:443 +msgid "" +"You may want to consider shutting down gracefully, as above, then running " +"uninstall_i2p_service_winnt.bat." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:447 +msgid "Debugging" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:449 +msgid "View the job queue" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:453 +msgid "" +"At times, it may be helpful to debug I2P by getting a thread dump. To do so, " +"please select the following option and review the thread dumped to <a href=" +"\"logs.jsp#servicelogs\">wrapper.log</a>." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:465 +msgid "Launch browser on router startup?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:467 +msgid "" +"I2P's main configuration interface is this web console, so for your " +"convenience I2P can launch a web browser on startup pointing at" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:139 +msgid "config summary bar" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:330 +msgid "I2P Summary Bar Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:401 +msgid "Refresh Interval" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:407 +msgid "seconds" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:411 +msgid "Customize Summary Bar" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:137 +msgid "config stats" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:304 +msgid "I2P Stats Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:355 +msgid "Configure I2P Stat Collection" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:357 +msgid "Enable full stats?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:364 +msgid "change requires restart to take effect" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:373 +msgid "Stat file" +msgstr "" + +#. shouldShowLog +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:382 +msgid "Filter" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:384 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:395 +msgid "toggle all" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:403 +msgid "Log" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:411 +msgid "Graph" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configstats_jsp.java:466 +msgid "Advanced filter" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:139 +msgid "config tunnels" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:343 +msgid "I2P Tunnel Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:410 +msgid "The default settings work for most people." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:414 +msgid "There is a fundamental tradeoff between anonymity and performance." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:417 +msgid "" +"Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 " +"hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely " +"reduce performance or reliability." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:420 +msgid "High CPU and/or high outbound bandwidth usage may result." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:423 +msgid "Change these settings with care, and adjust them if you have problems." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:433 +msgid "" +"Exploratory tunnel setting changes are stored in the router.config file." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:436 +msgid "Client tunnel changes are temporary and are not saved." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:438 +msgid "To make permanent client tunnel changes see the" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:440 +msgid "i2ptunnel page" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:137 +msgid "config UI" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:314 +msgid "I2P UI Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:353 +msgid "Router Console Theme" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:374 +msgid "Theme selection disabled for Internet Explorer, sorry." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:376 +msgid "" +"If you're not using IE, it's likely that your browser is pretending to be " +"IE; please configure your browser (or proxy) to use a different User Agent " +"string if you'd like to access the console themes." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:379 +msgid "Router Console Language" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:385 +msgid "" +"Please contribute to the router console translation project! Contact the " +"developers in #i2p-dev on IRC to help." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:389 +msgid "Apply" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:137 +msgid "config update" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:304 +msgid "I2P Update Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:361 +msgid "Check for I2P and news updates" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:363 +msgid "News & I2P Updates" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:367 +msgid "Check for news updates" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:369 +msgid "News Updates" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:377 +msgid "Update In Progress" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:385 +msgid "News URL" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:389 +msgid "Refresh frequency" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:395 +msgid "Update policy" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:401 +msgid "Update through the eepProxy?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:405 +msgid "eepProxy host" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:409 +msgid "eepProxy port" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:415 +msgid "Update URLs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:419 +msgid "Trusted keys" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:423 +msgid "Update with unsigned development builds?" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:427 +msgid "Unsigned Build URL" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:433 +msgid "Updates will be dispatched via your package manager." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:136 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:136 +msgid "home" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/console_jsp.java:383 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:354 +msgid "Welcome to I2P" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:321 +msgid "I2P Addressbook" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:323 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:324 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:323 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:323 +msgid "Open in new tab" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:327 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:328 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:327 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:327 +msgid "Your browser does not support iFrames." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:329 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:330 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:329 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:329 +msgid "Click here to continue." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:146 +msgid "Internal Error" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:152 +msgid "Configuration" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:160 +msgid "Sorry! There has been an internal error." +msgstr "" + +#. note to translators - both parameters are URLs +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:164 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:335 +#, java-format +msgid "Please report bugs on {0} or {1}." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:168 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:339 +msgid "" +"You may use the username \"guest\" and password \"guest\" if you do not wish " +"to register." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:170 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:341 +msgid "Please include this information in bug reports" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:172 +msgid "Error Details" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:174 +#, java-format +msgid "Error {0}" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:194 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:331 +msgid "I2P Version and Running Environment" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:241 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:390 +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." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:148 +msgid "Page Not Found" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:319 +msgid "" +"Sorry! You appear to be requesting a non-existent Router Console page or " +"resource." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:321 +msgid "Error 404" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:326 +msgid "not found" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:138 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:136 +msgid "graphs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:352 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graphs_jsp.java:324 +msgid "I2P Performance Graphs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:312 +msgid "" +"Click a flag to select a language. Click 'configure language' below to " +"change it later." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:362 +msgid "Search I2P" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:382 +msgid "Eepsites of Interest" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:154 +msgid "i2p tunnel manager" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/i2ptunnelmgr_jsp.java:322 +msgid "I2P Tunnel Manager" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jars_jsp.java:138 +msgid "Jar File Dump" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:136 +msgid "job queue" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/jobs_jsp.java:303 +msgid "I2P Router Job Queue" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:138 +msgid "logs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:329 +msgid "I2P Router Logs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:392 +msgid "Critical Logs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:396 +msgid "Router Logs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:402 +msgid "Service (Wrapper) Logs" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:136 +msgid "network database" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/netdb_jsp.java:303 +msgid "I2P Network Database" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:142 +msgid "WebApp Not Found" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:333 +msgid "Web Application Not Running" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:335 +msgid "The requested web application is not running." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:337 +msgid "" +"Please visit the <a href=\"/configclients.jsp#webapp\">config clients page</" +"a> to start it." +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:136 +msgid "peer connections" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:303 +msgid "I2P Network Peers" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:136 +msgid "peer profiles" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/profiles_jsp.java:303 +msgid "I2P Network Peer Profiles" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:136 +msgid "statistics" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/stats_jsp.java:316 +msgid "I2P Router Statistics" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/summaryframe_jsp.java:301 +#, java-format +msgid "Disable {0} Refresh" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:154 +msgid "torrents" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/torrents_jsp.java:321 +msgid "I2P Torrent Downloader" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:136 +msgid "tunnel summary" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/tunnels_jsp.java:303 +msgid "I2P Tunnel Summary" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:136 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:303 +msgid "Peer Profile" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/viewprofile_jsp.java:326 +#, java-format +msgid "Profile for peer {0}" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:154 +msgid "webmail" +msgstr "" + +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/webmail_jsp.java:321 +msgid "I2P Webmail" +msgstr "" diff --git a/apps/routerconsole/locale/messages_sv.po b/apps/routerconsole/locale/messages_sv.po index 570a490b8618897c325f4f96cbb86333968812b9..106981c30b799fa897d666057e2400b5fb8b26e9 100644 --- a/apps/routerconsole/locale/messages_sv.po +++ b/apps/routerconsole/locale/messages_sv.po @@ -2,36 +2,38 @@ # Copyright (C) 2009 The I2P Project # This file is distributed under the same license as the routerconsole package. # To contribute translations, see http://www.i2p2.de/newdevelopers -# +# # Translators: # 123hund123 <M8R-ra4r1r@mailinator.com>, 2011. # hottuna <i2p@robertfoss.se>, 2011. # <i2p@robertfoss.se>, 2011. -# Martin Svensson <digitalmannen@gmail.com>, 2011, 2012. +# Martin Svensson <digitalmannen@gmail.com>, 2011-2012. msgid "" msgstr "" "Project-Id-Version: I2P\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-07-26 19:10+0000\n" -"PO-Revision-Date: 2012-07-25 19:16+0000\n" -"Last-Translator: Martin Svensson <digitalmannen@gmail.com>\n" -"Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/I2P/" -"language/sv_SE/)\n" -"Language: sv_SE\n" +"Report-Msgid-Bugs-To: https://trac.i2p2.de/\n" +"POT-Creation-Date: 2012-10-12 00:38+0000\n" +"PO-Revision-Date: 2012-10-12 00:41+0000\n" +"Last-Translator: kytv <killyourtv@i2pmail.org>\n" +"Language-Team: Swedish (Sweden) (http://www.transifex.com/projects/p/I2P/language/sv_SE/)\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" +"Language: sv_SE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. NOTE TO TRANSLATORS: Feel free to translate all these as you see fit, there are several options... -#. spaces or not, '.' or not, plural or not. Try not to make it too long, it is used in +#. NOTE TO TRANSLATORS: Feel free to translate all these as you see fit, there +#. are several options... +#. spaces or not, '.' or not, plural or not. Try not to make it too long, it +#. is used in #. a lot of tables. #. milliseconds #. Note to translators, may be negative or zero, 2999 maximum. -#. {0,number,####} prevents 1234 from being output as 1,234 in the English locale. +#. {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:1370 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1415 #, java-format msgid "1 ms" msgid_plural "{0,number,####} ms" @@ -40,7 +42,7 @@ msgstr[1] "{0,number,####} ms" #. seconds #. alternates: secs, sec. 'seconds' is probably too long. -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1374 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1419 #, java-format msgid "1 sec" msgid_plural "{0} sec" @@ -49,7 +51,7 @@ msgstr[1] "{0} sek" #. minutes #. alternates: mins, min. 'minutes' is probably too long. -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1378 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1423 #, java-format msgid "1 min" msgid_plural "{0} min" @@ -58,61 +60,61 @@ msgstr[1] "{0} min" #. hours #. alternates: hrs, hr., hrs. -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1382 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1427 #, java-format msgid "1 hour" msgid_plural "{0} hours" msgstr[0] "1 timme" msgstr[1] "{0} timmar" -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1384 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1429 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:341 msgid "n/a" msgstr "n/a" #. days -#: ../../../core/java/src/net/i2p/data/DataHelper.java:1387 +#: ../../../core/java/src/net/i2p/data/DataHelper.java:1432 #, java-format msgid "1 day" msgid_plural "{0} days" msgstr[0] "1 dag" msgstr[1] "{0} dagar" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:127 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:128 #, java-format msgid "Banned by router hash: {0}" msgstr "Bannad med hjälp av routerhash: {0}" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:129 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:130 msgid "Banned by router hash" msgstr "Bannad med hjälp av routerhash" #. Temporary reason, until the job finishes -#: ../../../router/java/src/net/i2p/router/Blocklist.java:672 -#: ../../../router/java/src/net/i2p/router/Blocklist.java:745 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:653 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:726 #, java-format msgid "IP banned by blocklist.txt entry {0}" msgstr "IP bannad med hjälp av blocklist.txt post {0}" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:784 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:765 msgid "IPs Banned Until Restart" msgstr "IP blockerade tills omstart " -#: ../../../router/java/src/net/i2p/router/Blocklist.java:808 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:789 msgid "IPs Permanently Banned" msgstr "IP permanent blockerat" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:810 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:791 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:66 msgid "From" msgstr "FrÃ¥n" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:812 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:793 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:67 msgid "To" msgstr "Till" -#: ../../../router/java/src/net/i2p/router/Blocklist.java:848 +#: ../../../router/java/src/net/i2p/router/Blocklist.java:829 #: ../java/src/net/i2p/router/web/ShitlistRenderer.java:47 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:647 #: ../java/src/net/i2p/router/web/SummaryHelper.java:451 @@ -121,7 +123,8 @@ msgstr "ingen" #. NPE, too early #. if (_context.router().getRouterInfo().getBandwidthTier().equals("K")) -#. setTunnelStatus("Not expecting tunnel requests: Advertised bandwidth too low"); +#. setTunnelStatus("Not expecting tunnel requests: Advertised bandwidth too +#. low"); #. else #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:73 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:115 @@ -134,7 +137,8 @@ msgid "Rejecting tunnels: High message delay" msgstr "Avvisar tunnlar: Hög meddelandefördröjning" #. hard to do {0} from here -#. setTunnelStatus("Rejecting " + (100 - (int) probAccept*100) + "% of tunnels: High number of requests"); +#. setTunnelStatus("Rejecting " + (100 - (int) probAccept*100) + "% of +#. tunnels: High number of requests"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:207 msgid "Rejecting most tunnels: High number of requests" msgstr "Avvisar tunnlar: Högt antal förfrÃ¥gningar" @@ -151,13 +155,15 @@ msgid "Rejecting tunnels: Bandwidth limit" msgstr "Avvisar tunnlar: Bandbreddsgräns" #. hard to do {0} from here -#. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: Bandwidth limit"); +#. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: +#. Bandwidth limit"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:400 msgid "Rejecting most tunnels: Bandwidth limit" msgstr "Avvisar de flesta tunnlarna: Bandbreddsgräns" #. hard to do {0} from here -#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels"); +#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of +#. tunnels"); #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:404 msgid "Accepting most tunnels" msgstr "Accepterar de flesta tunnlarna" @@ -174,42 +180,43 @@ msgstr "Avvisar tunnlar: Stänger ner" msgid "Rejecting tunnels" msgstr "Avvisar tunnlar" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:149 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:151 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:22 msgid "Reseeding" msgstr "Reseedar" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:161 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:163 #, java-format msgid "Reseed fetched only 1 router." msgid_plural "Reseed fetched only {0} routers." msgstr[0] "Reseed hämtad endast en router." msgstr[1] "Reseed hämtad endast {0} routrar." -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:168 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:170 msgid "Reseed failed." msgstr "Reseed misslyckades." -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:169 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:171 #, java-format msgid "See {0} for help." msgstr "Se {0} för hjälp" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:170 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:172 msgid "reseed configuration page" msgstr "sida för konfiguration av omseedning" -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:311 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:313 msgid "Reseeding: fetching seed URL." msgstr "Reseed: hämtar seed URL." -#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:369 +#: ../../../router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java:371 #, java-format msgid "" "Reseeding: fetching router info from seed URL ({0} successful, {1} errors)." msgstr "Reseed: hämtar router info frÃ¥n seed URL ({0} lyckade, {1} fel)" -#. NOTE TO TRANSLATORS - each of these phrases is a description for a statistic +#. NOTE TO TRANSLATORS - each of these phrases is a description for a +#. statistic #. to be displayed on /stats.jsp and in the graphs on /graphs.jsp. #. Please keep relatively short so it will fit on the graphs. #: ../../../router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java:33 @@ -236,59 +243,55 @@ msgstr "Hur mÃ¥nga peers vi aktivt talar med" msgid "Known fast peers" msgstr "Snabba kända peerer" -#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:529 +#: ../../../router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java:530 msgid "NetDb entry" msgstr "NetDb post" -#. This used to be "no common transports" but it is almost always no transports at all +#. This used to be "no common transports" but it is almost always no +#. transports at all #: ../../../router/java/src/net/i2p/router/transport/GetBidsJob.java:70 msgid "No transports (hidden or starting up?)" msgstr "Inga transporter (gömd eller hÃ¥ller pÃ¥ att startas?)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:453 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:455 msgid "Unreachable on any transport" msgstr "OnÃ¥bar pÃ¥ varje transport" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:502 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:504 msgid "Router Transport Addresses" msgstr "Router transport adresser" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:507 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:509 #, java-format msgid "{0} is used for outbound connections only" msgstr "{0} används för utgÃ¥ende anslutningar enbart" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:521 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:523 #: ../java/src/net/i2p/router/web/HomeHelper.java:32 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:152 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:154 msgid "Help" msgstr "Hjälp" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:522 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524 msgid "" "Your transport connection limits are automatically set based on your " "configured bandwidth." -msgstr "" -"Din transportförbindelses gränser sätts automatiskt baserat pÃ¥ din " -"konfigurerade bandbredd." +msgstr "Din transportförbindelses gränser sätts automatiskt baserat pÃ¥ din konfigurerade bandbredd." -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:524 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526 msgid "" "To override these limits, add the settings i2np.ntcp.maxConnections=nnn and " "i2np.udp.maxConnections=nnn on the advanced configuration page." -msgstr "" -"För att Ã¥sidosätta dessa gränser, lägg till inställningarna i2np.ntcp." -"maxConnections = nnn och i2np.udp.maxConnections = nnn pÃ¥ den avancerade " -"inställningarsidan." +msgstr "För att Ã¥sidosätta dessa gränser, lägg till inställningarna i2np.ntcp.maxConnections = nnn och i2np.udp.maxConnections = nnn pÃ¥ den avancerade inställningarsidan." -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:526 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:279 msgid "Definitions" msgstr "Definitioner" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:527 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:752 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1958 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2173 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:24 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:33 #: ../java/src/net/i2p/router/web/ConfigPeerHandler.java:35 @@ -297,280 +300,266 @@ msgstr "Definitioner" msgid "Peer" msgstr "Peer" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:527 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 msgid "The remote peer, identified by router hash" msgstr "Fjärr peeren, identifierad med routerhash" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:528 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:530 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:753 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1962 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2177 msgid "Dir" msgstr "Mapp" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:529 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531 msgid "Inbound connection" msgstr "Inkommande anslutning" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:531 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533 msgid "Outbound connection" msgstr "UtgÃ¥ende anslutning" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:533 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535 msgid "They offered to introduce us (help other peers traverse our firewall)" msgstr "De erbjöd att introducera oss (hjälp andra traversera vÃ¥r brandvägg)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:535 -msgid "We offered to introduce them (help other peers traverse their firewall)" -msgstr "" -"Vi erbjöd att introducera dom (hjälp andra att traversera deras brandvägg)" +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537 +msgid "" +"We offered to introduce them (help other peers traverse their firewall)" +msgstr "Vi erbjöd att introducera dom (hjälp andra att traversera deras brandvägg)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 msgid "How long since a packet has been received / sent" msgstr "Tiden sedan ett paket har mottagits / sänts" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:536 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:754 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1963 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2178 msgid "Idle" msgstr "StillastÃ¥ende" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:755 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1968 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2183 #: ../java/src/net/i2p/router/web/TunnelRenderer.java:157 msgid "In/Out" msgstr "In/Ut" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:537 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 msgid "The smoothed inbound / outbound transfer rate (KBytes per second)" -msgstr "" -"Den utjämnade ingÃ¥ende / utgÃ¥ende överföringshastigheten (KByte per sekund)" +msgstr "Den utjämnade ingÃ¥ende / utgÃ¥ende överföringshastigheten (KByte per sekund)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 msgid "How long ago this connection was established" msgstr "Tiden sedan denna anslutning etablerades" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:538 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:756 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1973 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:834 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2188 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:835 msgid "Up" msgstr "Uppe" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:757 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1975 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2190 msgid "Skew" msgstr "Tidsförvridning" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:539 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 msgid "The difference between the peer's clock and your own" msgstr "Skillnaden mellan peerens klocka och din" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:540 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542 msgid "" "The congestion window, which is how many bytes can be sent without an " "acknowledgement" -msgstr "" -"Överbelastningsfönster, vilket är hur mÃ¥nga bytes kan sändas utan en " -"bekräftelse" +msgstr "Överbelastningsfönster, vilket är hur mÃ¥nga bytes kan sändas utan en bekräftelse" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:541 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543 msgid "The number of sent messages awaiting acknowledgement" msgstr "Antalet skickade meddelanden som väntar pÃ¥ bekräftelse" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:542 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544 msgid "The maximum number of concurrent messages to send" msgstr "Maximala antalet samtidiga meddelande som ska skickas" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:543 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545 msgid "The number of pending sends which exceed congestion window" msgstr "Antalet försändningar som överstiger överbelastningsfönstret" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:544 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546 msgid "The slow start threshold" msgstr "Den tröskel för lÃ¥ngsam start" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:545 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547 msgid "The round trip time in milliseconds" msgstr "Tur och returtid i millisekunder" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1985 -msgid "Dev" -msgstr "Utvecklare" - -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:546 -msgid "The standard deviation of the round trip time in milliseconds" -msgstr "Standardavvikelsen för tur och retur i millisekunder" - -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:547 +#. "<b id=\"def.dev\">").append(_("Dev")).append("</b>: ").append(_("The +#. standard deviation of the round trip time in +#. milliseconds")).append("<br>\n" + +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549 msgid "The retransmit timeout in milliseconds" msgstr "Ã…tersändnings timeout i millisekunder" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:548 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550 msgid "" "Current maximum send packet size / estimated maximum receive packet size " "(bytes)" -msgstr "" -"Nuvarande maximala försändningsstorlek för paket / uppskattad maximal " -"mottagningsstorlek för paket (bytes)" +msgstr "Nuvarande maximala försändningsstorlek för paket / uppskattad maximal mottagningsstorlek för paket (bytes)" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:758 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1992 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2207 msgid "TX" msgstr "TX" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:549 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 msgid "The total number of packets sent to the peer" msgstr "Det totala antalet paket som skickats till denna peer" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:759 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1994 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2209 msgid "RX" msgstr "RX" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:550 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 msgid "The total number of packets received from the peer" msgstr "Det totala antalet paket som har mottagits frÃ¥n denna peer" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1997 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2212 msgid "Dup TX" msgstr "DUP TX" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:551 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:553 msgid "The total number of packets retransmitted to the peer" msgstr "Det totala antalet paket som Ã¥terutsänds till peer" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1999 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2214 msgid "Dup RX" msgstr "DUP RX" -#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:552 +#: ../../../router/java/src/net/i2p/router/transport/TransportManager.java:554 msgid "The total number of duplicate packets received from the peer" msgstr "Totalt antal dupplicerade paket mottagna frÃ¥n peeren" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:437 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452 #: ../java/src/net/i2p/router/web/ConfigNavHelper.java:20 msgid "Service" msgstr "Service" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:439 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:454 msgid "WAN Common Interface Configuration" msgstr "Grundinställningar WAN inställningar" -#: ../../../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:455 #: ../../../router/java/src/net/i2p/router/transport/UPnP.java:461 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:471 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:476 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:96 msgid "Status" msgstr "Status" -#: ../../../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 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:456 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:462 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:472 msgid "Type" msgstr "Typ" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:442 -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:448 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:457 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:463 msgid "Upstream" msgstr "Uppström" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:443 -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:449 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:464 msgid "Downstream" msgstr "Nerström" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:445 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460 msgid "WAN PPP Connection" msgstr "WAN PPP anslutning" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:450 -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:458 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:465 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473 msgid "External IP" msgstr "Extern IP" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:452 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:467 msgid "Layer 3 Forwarding" msgstr "Lager 3 vidarebefordring" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:453 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:468 msgid "Default Connection Service" msgstr "Standard anslutningstjänst" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:455 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:470 msgid "WAN IP Connection" msgstr "WAN IP Anslutning" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:460 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475 msgid "WAN Ethernet Link Configuration" msgstr "WAN Ethernet Link-konfiguration" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:473 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:488 msgid "Found Device" msgstr "Hittade enhet" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:475 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:490 msgid "Subdevice" msgstr "Subenhet " -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:496 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:511 msgid "UPnP Status" msgstr "UPnP Status" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:499 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:514 msgid "" "UPnP has been disabled; Do you have more than one UPnP Internet Gateway " "Device on your LAN ?" -msgstr "" -"UPnP har deaktiverats. Har du mer än en UPnP Internet Gateway enhet i ditt " -"LAN?" +msgstr "UPnP har deaktiverats. Har du mer än en UPnP Internet Gateway enhet i ditt LAN?" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:502 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:517 msgid "UPnP has not found any UPnP-aware, compatible device on your LAN." msgstr "UPnP har inte hittat nÃ¥gon UPnP-aware kompatibel enhet pÃ¥ ditt LAN." -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:510 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:525 #, java-format msgid "The current external IP address reported by UPnP is {0}" msgstr "Den nuvarande externa IP-adress som rapporterats av UPnP är {0}" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:512 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:527 msgid "The current external IP address is not available." msgstr "Den aktuella externa IP-adress är inte tillgänglig." -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:516 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:531 #, java-format msgid "UPnP reports the maximum downstream bit rate is {0}bits/sec" -msgstr "" -"UPnP rapporterar att den högsta nedströms hastigheten är {0} bits / sekund" +msgstr "UPnP rapporterar att den högsta nedströms hastigheten är {0} bits / sekund" -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:518 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:533 #, java-format msgid "UPnP reports the maximum upstream bit rate is {0}bits/sec" -msgstr "" -"UPnP rapporterar att den högsta uppströms hastigheten är {0} bits / sekund" +msgstr "UPnP rapporterar att den högsta uppströms hastigheten är {0} bits / sekund" #. {0} is TCP or UDP -#. {1,number,#####} prevents 12345 from being output as 12,345 in the English locale. +#. {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:527 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:541 #, java-format msgid "{0} port {1,number,#####} was successfully forwarded by UPnP." msgstr "{0} port {1,number,#####} var framgÃ¥ngsrikt vidarebefordrad av UPnP." -#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:529 +#: ../../../router/java/src/net/i2p/router/transport/UPnP.java:543 #, java-format msgid "{0} port {1,number,#####} was not forwarded by UPnP." msgstr "{0} port {1,number,#####} blev inte vidarebefordrad av UPnP." -#: ../../../router/java/src/net/i2p/router/transport/UPnPManager.java:162 +#: ../../../router/java/src/net/i2p/router/transport/UPnPManager.java:200 msgid "UPnP is not enabled" msgstr "UPnP är inte aktiverat" @@ -585,12 +574,12 @@ msgid "NTCP connections" msgstr "NTCPanslutningar" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:748 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1954 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2169 msgid "Limit" msgstr "Gräns" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:749 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1955 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2170 msgid "Timeout" msgstr "Timeout" @@ -603,13 +592,13 @@ msgid "Backlogged?" msgstr "Släpar efter?" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:775 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2017 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2232 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88 msgid "Inbound" msgstr "Inkommande" #: ../../../router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java:777 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2019 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2234 #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:88 msgid "Outbound" msgstr "UtgÃ¥ende" @@ -619,143 +608,144 @@ msgstr "UtgÃ¥ende" msgid "peers" msgstr "peers" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1953 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2168 msgid "UDP connections" msgstr "UDP-anslutningar" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1960 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2175 msgid "Sort by peer hash" msgstr "Sortera efter peer hash" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1962 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2177 msgid "Direction/Introduction" msgstr "Riktning/Inledning" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1964 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2179 msgid "Sort by idle inbound" msgstr "Sortera efter stillastÃ¥ende inkommande" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1966 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2181 msgid "Sort by idle outbound" msgstr "Sortera efter utgÃ¥ende utgÃ¥ende" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1969 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2184 msgid "Sort by inbound rate" msgstr "Sortera efter inkommande hastighet" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1971 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2186 msgid "Sort by outbound rate" msgstr "Sortera efter utgÃ¥ende hastighet" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1974 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2189 msgid "Sort by connection uptime" msgstr "Sortera efter anslutningsupptid" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1976 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2191 msgid "Sort by clock skew" msgstr "Sortera efter klockanvridning" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1979 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2194 msgid "Sort by congestion window" msgstr "Sortera efter överbelastningfönster" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1981 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2196 msgid "Sort by slow start threshold" msgstr "Sortera efter lÃ¥ngsam starttröskel" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1984 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2199 msgid "Sort by round trip time" msgstr "Sortera efter tur och returtid" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1986 -msgid "Sort by round trip time deviation" -msgstr "Sortera efter rundtur tidsavvikelse" - -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1988 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2203 msgid "Sort by retransmission timeout" msgstr "Sortera efter omsändningstimeout" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1991 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2206 msgid "Sort by outbound maximum transmit unit" msgstr "Sortera efter utgÃ¥ende maximal överföringsenhet" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1993 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2208 msgid "Sort by packets sent" msgstr "Sortera efter paket som skickats" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1995 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2210 msgid "Sort by packets received" msgstr "Sortera efter paket som mottagits" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:1998 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2213 msgid "Sort by packets retransmitted" msgstr "Sortera efter paket som Ã¥terutsänds" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2000 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2215 msgid "Sort by packets received more than once" msgstr "Sortera efter paket som mottagits fler än en gÃ¥ng" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2021 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2236 msgid "We offered to introduce them" msgstr "Vi erbjöd oss att introducera dem" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2023 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2238 msgid "They offered to introduce us" msgstr "De erbjöd sig att introducera oss" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2027 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2242 msgid "Choked" msgstr "Strypt" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2035 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2250 msgid "1 fail" msgstr "1 misslyckande" -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2037 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2252 #, java-format msgid "{0} fails" msgstr "{0} misslyckande" #. 1 -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2043 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2258 #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:171 #: ../java/src/net/i2p/router/web/ProfilesHelper.java:13 msgid "Banned" msgstr "Förbjudna" +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2310 +msgid "backlogged" +msgstr "" + #. buf.append("<tr><td colspan=\"16\"><hr></td></tr>\n"); -#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2173 +#: ../../../router/java/src/net/i2p/router/transport/udp/UDPTransport.java:2390 msgid "SUMMARY" msgstr "SAMMANFATTNING" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:187 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:190 msgid "Dropping tunnel requests: Too slow" msgstr "Släpper tunnelförfrÃ¥gningar: För lÃ¥ngsam" #. don't even bother, since we are so overloaded locally -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:330 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:333 msgid "Dropping tunnel requests: Overloaded" msgstr "Släpper tunnelförfrÃ¥gningar: Överlastad" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:539 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:542 msgid "Rejecting tunnels: Request overload" msgstr "Avvisar tunnlar: Begäran överlastad" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:570 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:573 msgid "Rejecting tunnels: Connection limit" msgstr "Avvisar tunnlar: Anslutningsgräns" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:773 -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:794 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:777 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:798 msgid "Dropping tunnel requests: High load" msgstr "Släpper tunnelförfrÃ¥gningar: Hög belastning" -#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:786 +#: ../../../router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java:877 msgid "Dropping tunnel requests: Queue time" msgstr "Släpper tunnelförfrÃ¥gningar: Kötid" #. Automatically generated pseudo-java for xgettext - do not edit -#. Translators may wish to translate a few of these, do not bother to translate all of them!! +#. Translators may wish to translate a few of these, do not bother to +#. translate all of them!! #: ../java/build/Countries.java:3 msgid "Anonymous Proxy" msgstr "Anonym proxy" @@ -1744,7 +1734,7 @@ msgstr "Zambia" msgid "Zimbabwe" msgstr "Zimbabwe" -#: ../java/src/net/i2p/router/web/CSSHelper.java:117 +#: ../java/src/net/i2p/router/web/CSSHelper.java:118 #: ../java/src/net/i2p/router/web/HomeHelper.java:33 #: ../java/strings/Strings.java:29 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:203 @@ -1784,7 +1774,7 @@ msgstr "Zimbabwe" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/debug_jsp.java:209 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:220 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/dns_jsp.java:222 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:148 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:150 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:214 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:216 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/graph_jsp.java:232 @@ -1842,20 +1832,18 @@ msgid "Error updating the configuration - please see the error logs" msgstr "Fel vid uppdatering av konfiguration - se felloggar" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:61 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:297 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:322 msgid "Configuration saved successfully" msgstr "Konfigurationen sparades utan problem" #: ../java/src/net/i2p/router/web/ConfigAdvancedHandler.java:63 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:427 -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:299 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:324 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:96 msgid "" "Error saving the configuration (applied but not saved) - please see the " "error logs" -msgstr "" -"Fel vid sparning ab konfigurationen (tillämpad men inte sparat) - se " -"felloggar" +msgstr "Fel vid sparning ab konfigurationen (tillämpad men inte sparat) - se felloggar" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:35 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:437 @@ -1940,9 +1928,8 @@ msgstr "Klientkonfigureringen sparad - kräver omstart för att träda i kraft." msgid "Bad client index." msgstr "Felaktigt klientindex" -#. #. What do we do here? -#. +#. #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:237 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:248 #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:259 @@ -2030,9 +2017,9 @@ msgstr "Fel när plugin {0} startades" #: ../java/src/net/i2p/router/web/ConfigClientsHandler.java:425 msgid "" -"Interface configuration saved successfully - restart required to take effect." -msgstr "" -"Gränssnittskonfiguration sparad - kräver omstart för att träda i kraft." +"Interface configuration saved successfully - restart required to take " +"effect." +msgstr "Gränssnittskonfiguration sparad - kräver omstart för att träda i kraft." #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:86 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:267 @@ -2129,7 +2116,7 @@ msgstr "Ta bort" #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:25 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:26 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:854 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:855 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:419 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:439 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:455 @@ -2138,7 +2125,7 @@ msgstr "Ta bort valda" #: ../java/src/net/i2p/router/web/ConfigHomeHandler.java:26 #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:27 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:873 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:874 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:417 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:425 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confighome_jsp.java:437 @@ -2244,16 +2231,13 @@ msgstr "Loggkonfiguration sparades" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:48 msgid "" "Add additional logging statements above. Example: net.i2p.router.tunnel=WARN" -msgstr "" -"Lägg till ytterligare inställningar ovan. Exempel: net.i2p.router.tunnel=WARN" +msgstr "Lägg till ytterligare inställningar ovan. Exempel: net.i2p.router.tunnel=WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:49 msgid "" -"Or put entries in the logger.config file. Example: logger.record.net.i2p." -"router.tunnel=WARN" -msgstr "" -"Eller placera poster i logger.config filen. Exempel: logger.record.net.i2p." -"router.tunnel=WARN" +"Or put entries in the logger.config file. Example: " +"logger.record.net.i2p.router.tunnel=WARN" +msgstr "Eller placera poster i logger.config filen. Exempel: logger.record.net.i2p.router.tunnel=WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:50 msgid "Valid levels are DEBUG, INFO, WARN, ERROR, CRIT" @@ -2263,7 +2247,7 @@ msgstr "Giltiga nivÃ¥er är DEBUG, INFO, WARN, ERROR, CRIT" #. http://www.dhs.gov/xinfoshare/programs/Copy_of_press_release_0046.shtm #. but pink instead of yellow for WARN #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:106 +#: ../java/src/net/i2p/router/web/LogsHelper.java:114 msgid "CRIT" msgstr "CRIT" @@ -2272,23 +2256,23 @@ msgid "DEBUG" msgstr "DEBUG" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:108 +#: ../java/src/net/i2p/router/web/LogsHelper.java:116 msgid "ERROR" msgstr "ERROR" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:112 +#: ../java/src/net/i2p/router/web/LogsHelper.java:120 msgid "INFO" msgstr "INFO" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:68 -#: ../java/src/net/i2p/router/web/LogsHelper.java:110 +#: ../java/src/net/i2p/router/web/LogsHelper.java:118 msgid "WARN" msgstr "WARN" #: ../java/src/net/i2p/router/web/ConfigLoggingHelper.java:88 #: ../java/src/net/i2p/router/web/HomeHelper.java:192 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:808 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:809 msgid "Remove" msgstr "Ta bort" @@ -2396,7 +2380,7 @@ msgstr "Statistik" msgid "Advanced" msgstr "Avancerad" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:54 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:53 #: ../java/src/net/i2p/router/web/ConfigReseedHandler.java:31 #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:34 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:417 @@ -2409,97 +2393,105 @@ msgstr "Avancerad" msgid "Save changes" msgstr "Spara ändringar" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:136 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:135 msgid "Rechecking router reachability..." msgstr "Ã…terkontrollerar router nÃ¥barhet..." -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:174 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:176 msgid "Updating IP address" msgstr "Uppdaterar IP-adress" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:193 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:195 msgid "Disabling TCP completely" msgstr "Inaktiverar TCP helt" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:198 -msgid "Updating inbound TCP address to" -msgstr "Uppdaterar ingÃ¥ende TCP address till" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:200 +#, java-format +msgid "Updating TCP address to {0}" +msgstr "" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:203 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:207 msgid "Disabling inbound TCP" msgstr "Inaktiverar inkommande TCP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:205 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:209 msgid "Updating inbound TCP address to auto" msgstr "Uppdaterar inkommande TCP-adress till auto" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:216 -msgid "Updating inbound TCP port to" -msgstr "Uppdaterar inkommande TCP-port till" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:222 +#, java-format +msgid "Updating TCP port to {0}" +msgstr "" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:219 -msgid "Updating inbound TCP port to auto" -msgstr "Uppdaterar inkommande TCP-port till auto" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:224 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 +msgid "Warning - ports less than 1024 are not recommended" +msgstr "" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 -msgid "Updating UDP port from" -msgstr "Uppdaterar UDP-port frÃ¥n" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:228 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:255 +msgid "Invalid port" +msgstr "" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:231 -msgid "to" -msgstr "till" +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:233 +msgid "Updating inbound TCP port to auto" +msgstr "Uppdaterar inkommande TCP-port till auto" #: ../java/src/net/i2p/router/web/ConfigNetHandler.java:247 +#, java-format +msgid "Updating UDP port to {0}" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:272 msgid "Gracefully restarting into Hidden Router Mode" msgstr "Försiktig omstart till dolt routerläge" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:249 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:274 msgid "Gracefully restarting to exit Hidden Router Mode" msgstr "Försiktig omstart ut ur dolt routerläge" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:258 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:283 msgid "Enabling UPnP, restart required to take effect" msgstr "Aktiverar UPnP, omstart krävs för att ändringarna ska börja gälla" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:260 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:285 msgid "Disabling UPnP, restart required to take effect" msgstr "Avaktiverar UPnP, omstart krävs för att ändringarna ska börja gälla" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:268 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:293 msgid "Enabling laptop mode" msgstr "Aktiverar läge för bärbara datorer" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:270 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:295 msgid "Disabling laptop mode" msgstr "Inaktiverar läge för bärbara datorer" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:277 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:302 msgid "Disabling UDP" msgstr "Avaktivera UDP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:279 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:304 msgid "Enabling UDP" msgstr "Aktivera UDP" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:286 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:311 msgid "Requiring SSU introducers" msgstr "Kräver SSU introducerare" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:345 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:369 +msgid "Invalid address" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:374 #, java-format msgid "The hostname or IP {0} is not publicly routable" msgstr "Värdnamnet eller IP {0} är inte publikt routningsbart " -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:348 -#, java-format -msgid "The hostname or IP {0} is invalid" -msgstr "Värdnamnet eller IP {0} är ogiltigt" - -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:374 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:399 msgid "Updating bandwidth share percentage" msgstr "Uppdaterar bandbreddsprocent för delning" -#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:404 +#: ../java/src/net/i2p/router/web/ConfigNetHandler.java:429 msgid "Updated bandwidth limits" msgstr "Uppdaterade bandbreddsgräns" @@ -2586,7 +2578,7 @@ msgstr "Konfiguration sparad utan fel." #. Normal browsers send value, IE sends button label #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:34 -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:174 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:175 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:393 msgid "Shutdown immediately" msgstr "Stäng ner omedelbart" @@ -2608,7 +2600,7 @@ msgstr "Starta om omedelbart" #. ctx.router().shutdown(Router.EXIT_HARD_RESTART); // never returns #. give the UI time to respond #: ../java/src/net/i2p/router/web/ConfigRestartBean.java:47 -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:142 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:163 msgid "Restart" msgstr "Omstart" @@ -2634,113 +2626,122 @@ msgstr "Stänger av om {0}" msgid "Restart in {0}" msgstr "Omstart om {0}" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:169 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:170 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:391 msgid "Shutdown gracefully" msgstr "Graciös avstängning" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:173 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:174 msgid "Graceful shutdown initiated" msgstr "Graciös avstängning initierad" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:178 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:179 msgid "Shutdown immediately! boom bye bye bad bwoy" msgstr "Stänger av omedelbart! Pangbom hejsvejs stygging" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:179 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:180 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:395 msgid "Cancel graceful shutdown" msgstr "Avbryt försiktig avstängning" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:181 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:182 msgid "Graceful shutdown cancelled" msgstr "Försiktig avstängning avbruten" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:182 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:183 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:407 msgid "Graceful restart" msgstr "Försiktig omstart" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:187 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:188 msgid "Graceful restart requested" msgstr "Försiktig omstart ombedd" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:188 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:189 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:409 msgid "Hard restart" msgstr "HÃ¥rd omstart" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:193 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:194 msgid "Hard restart requested" msgstr "Försiktig omstart ombedd" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:194 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:195 msgid "Rekey and Restart" msgstr "Skapa nya nycklar och starta om" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:195 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:196 msgid "Rekeying after graceful restart" msgstr "Skapar nya nycklar efter försiktig omstart" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:198 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:199 msgid "Rekey and Shutdown" msgstr "Skapa nya nycklar och stäng av" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:199 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:200 msgid "Rekeying after graceful shutdown" msgstr "Skapar nya nycklar efter försiktig avstängning" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:202 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:203 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:435 msgid "Run I2P on startup" msgstr "Kör I2P vid start" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:204 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:205 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:437 msgid "Don't run I2P on startup" msgstr "Kör inte I2P vid start" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:206 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:455 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:207 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:461 msgid "Dump threads" msgstr "Dumpa trÃ¥dar" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:213 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:214 #, java-format msgid "Threads dumped to {0}" msgstr "TrÃ¥dar dumpade till {0}" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:214 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:463 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:215 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:469 msgid "View console on startup" msgstr "Visa konsol vid uppstart" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:216 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:217 msgid "Console is to be shown on startup" msgstr "Konsolen ska visas vid uppstart" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:217 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:465 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:218 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:471 msgid "Do not view console on startup" msgstr "Visa inte konsolen vid start" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:219 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:220 msgid "Console is not to be shown on startup" msgstr "Konsolen ska inte visas vid start" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:228 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:221 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:457 +msgid "Force GC" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:223 +msgid "Full garbage collection requested" +msgstr "" + +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:232 msgid "Service installed" msgstr "Tjänst installerad" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:230 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:234 msgid "Warning: unable to install the service" msgstr "Varning: kunde inte installera tjänsten" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:237 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:241 msgid "Service removed" msgstr "Tjänst borttagen" -#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:239 +#: ../java/src/net/i2p/router/web/ConfigServiceHandler.java:243 msgid "Warning: unable to remove the service" msgstr "Varning: kunde ej ta bort tjänsten" @@ -2760,9 +2761,7 @@ msgstr "Full statistik avaktiverad - kräver omstart för att träda i kraft" msgid "" "Graph list updated, may take up to 60s to be reflected here and on the <a " "href=\"graphs.jsp\">Graphs Page</a>" -msgstr "" -"Diagramlistan uppdateras, det kan ta upp till 60 sekunder innan det " -"Ã¥terspeglas här och pÃ¥ <a href=\"graphs.jsp\">diagramsidan</a>" +msgstr "Diagramlistan uppdateras, det kan ta upp till 60 sekunder innan det Ã¥terspeglas här och pÃ¥ <a href=\"graphs.jsp\">diagramsidan</a>" #: ../java/src/net/i2p/router/web/ConfigSummaryHandler.java:28 msgid "Save order" @@ -2827,7 +2826,8 @@ msgstr "Flyttad" msgid "Saved order of sections." msgstr "Sparar ordningen pÃ¥ valen " -#. the count isn't really correct anyway, since we don't check for actual changes +#. the count isn't really correct anyway, since we don't check for actual +#. changes #. addFormNotice("Updated settings for " + updated + " pools."); #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:136 msgid "Updated settings for all pools." @@ -2838,13 +2838,11 @@ msgid "Exploratory tunnel configuration saved successfully." msgstr "Konfiguration för förberadande tunnlar har sparats." #: ../java/src/net/i2p/router/web/ConfigTunnelsHandler.java:143 -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:37 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:51 msgid "" "Error saving the configuration (applied but not saved) - please see the " "error logs." -msgstr "" -"Problem: konfiguration för förberadande tunnlar kunde ej sparas (träder dock " -"i kraft nu) - kontrollera felloggarna." +msgstr "Problem: konfiguration för förberadande tunnlar kunde ej sparas (träder dock i kraft nu) - kontrollera felloggarna." #. * dummies for translation #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:14 @@ -2881,8 +2879,7 @@ msgstr "Anonymitetsvarning - Inställningar inkluderar tunnlar med 1-hopp." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:83 msgid "PERFORMANCE WARNING - Settings include very long tunnels." -msgstr "" -"Prestantavarning - Inställningar inkluderar tunnlar med väldigt mÃ¥nga hopp." +msgstr "Prestantavarning - Inställningar inkluderar tunnlar med väldigt mÃ¥nga hopp." #: ../java/src/net/i2p/router/web/ConfigTunnelsHelper.java:86 msgid "PERFORMANCE WARNING - Settings include high tunnel quantities." @@ -2917,91 +2914,95 @@ msgstr "Inkommande alternativ" msgid "Outbound options" msgstr "UtgÃ¥ende alternativ" -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:32 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:46 msgid "Theme change saved." msgstr "Temaförändring sparad." -#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:34 +#: ../java/src/net/i2p/router/web/ConfigUIHandler.java:48 msgid "Refresh the page to view." msgstr "Uppdatera sidan för att se." -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:62 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:25 +msgid "Set theme universally across all apps" +msgstr "Använd temat i alla program" + +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 msgid "Arabic" msgstr "Arabiska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:62 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 msgid "Czech" msgstr "Tjeckiska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:62 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:69 msgid "Danish" msgstr "Danska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "English" msgstr "Engelska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Estonian" msgstr "Estland" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Finnish" msgstr "Finska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "German" msgstr "Tyska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Greek" msgstr "Grekiska " -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:63 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:70 msgid "Spanish" msgstr "Spanska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Dutch" msgstr "Nederländska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "French" msgstr "Franska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Hungarian" msgstr "Ungerska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Italian" msgstr "Italienska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:64 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:71 msgid "Polish" msgstr "Polska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:65 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 msgid "Portuguese" msgstr "Portugisiska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:65 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 msgid "Russian" msgstr "Ryska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:65 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:72 msgid "Swedish" msgstr "Svenska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:66 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 msgid "Chinese" msgstr "Kinesiska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:66 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 msgid "Ukrainian" msgstr "Ukrainska" -#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:66 +#: ../java/src/net/i2p/router/web/ConfigUIHelper.java:73 msgid "Vietnamese" msgstr "Vietnamesiska" @@ -3011,8 +3012,7 @@ msgstr "Uppdatering tillgänglig, försöker ladda ner nu" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:105 msgid "Update available, click button on left to download" -msgstr "" -"Uppdatering tillgänglig, klicka pÃ¥ knappen till vänster för att ladda ner" +msgstr "Uppdatering tillgänglig, klicka pÃ¥ knappen till vänster för att ladda ner" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:111 msgid "No update available" @@ -3046,7 +3046,7 @@ msgid "Updating refresh frequency to {0}" msgstr "Uppdaterar uppdateringsfrekvensen till {0}" #: ../java/src/net/i2p/router/web/ConfigUpdateHandler.java:151 -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:112 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:111 #: ../java/src/net/i2p/router/web/GraphHelper.java:361 msgid "Never" msgstr "Aldrig" @@ -3069,19 +3069,19 @@ msgstr "Uppdaterar nycklar med tillit till." msgid "Updating unsigned update URL to {0}" msgstr "Uppdaterar osignerad uppdaterings URL till {0}" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:114 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:113 msgid "Every" msgstr "Alltid" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:132 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:131 msgid "Notify only" msgstr "Berätta endast" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:139 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:138 msgid "Download and verify only" msgstr "Ladda ner och kontrollera endast" -#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:147 +#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:146 msgid "Download, verify, and restart" msgstr "Ladda ner, kontrollera och starta om" @@ -3089,9 +3089,7 @@ msgstr "Ladda ner, kontrollera och starta om" msgid "" "Invalid form submission, probably because you used the 'back' or 'reload' " "button on your browser. Please resubmit." -msgstr "" -"Ogiltigt formulärdata, förmodligen för att du använde \"back\" eller \"reload" -"\" knappen i din webbläsare. Vänligen skicka om." +msgstr "Ogiltigt formulärdata, förmodligen för att du använde \"back\" eller \"reload\" knappen i din webbläsare. Vänligen skicka om." #: ../java/src/net/i2p/router/web/GraphHelper.java:159 msgid "Combined bandwidth graph" @@ -3266,7 +3264,7 @@ msgid "I2P Router Help" msgstr "I2P Router Hjälp" #: ../java/src/net/i2p/router/web/HomeHelper.java:33 -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:146 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:148 msgid "Router Console" msgstr "Router Konsol" @@ -3293,10 +3291,8 @@ msgstr "Bugg rapporter" msgid "Bug tracker" msgstr "Bugg tracker" -#: ../java/src/net/i2p/router/web/HomeHelper.java:40 -msgid "The Italian Bittorrent Resource" -msgstr "The Italian Bittorrent Resource" - +#. "colombo-bt.i2p" + S + _x("The Italian Bittorrent Resource") + S + "http +#. ://colombo-bt.i2p/" + S + I + "colomboicon.png" + S + #: ../java/src/net/i2p/router/web/HomeHelper.java:41 msgid "Dev Forum" msgstr "Utv Forum" @@ -3338,9 +3334,7 @@ msgstr "Forum" msgid "" "A public anonymous Git hosting site - supports pulling via Git and HTTP and " "pushing via SSH" -msgstr "" -"En publik anonym Git hostnings site - stödje pulling via Git och HTTP och " -"pushing vis SSH" +msgstr "En publik anonym Git hostnings site - stödje pulling via Git och HTTP och pushing vis SSH" #: ../java/src/net/i2p/router/web/HomeHelper.java:46 msgid "Anonymous Git Hosting" @@ -3367,7 +3361,8 @@ msgstr "Teknisk dokumentation" msgid "Debian and Tahoe-LAFS repositories" msgstr "Debian och Tahoe-LAFS programarkiv" -#. _x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S + I + "education.png" + S + +#. _x("Key Server") + S + _x("OpenPGP Keyserver") + S + "http://keys.i2p/" + S +#. + I + "education.png" + S + #: ../java/src/net/i2p/router/web/HomeHelper.java:50 msgid "killyourtv.i2p" msgstr "killyourtv.i2p" @@ -3406,7 +3401,7 @@ msgstr "Project Website" #: ../java/src/net/i2p/router/web/HomeHelper.java:56 msgid "I2P Network Statistics" -msgstr "I2P Nätverksstatistik " +msgstr "I2P Nätverksstatistik" #: ../java/src/net/i2p/router/web/HomeHelper.java:57 msgid "Technical Docs" @@ -3435,11 +3430,10 @@ msgstr "HTTP proxyn är inte uppe" #: ../java/src/net/i2p/router/web/HomeHelper.java:103 #, java-format msgid "Your browser is not properly configured to use the HTTP proxy at {0}" -msgstr "" -"Din webbläsare är inte korrekt konfigurerad för att använda HTTP-proxy pÃ¥ {0}" +msgstr "Din webbläsare är inte korrekt konfigurerad för att använda HTTP-proxy pÃ¥ {0}" #: ../java/src/net/i2p/router/web/HomeHelper.java:194 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:810 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:811 msgid "Name" msgstr "Namn" @@ -3448,20 +3442,20 @@ msgid "URL" msgstr "URL" #: ../java/src/net/i2p/router/web/HomeHelper.java:214 -#: ../java/src/net/i2p/router/web/SummaryHelper.java:856 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:857 msgid "Add" msgstr "Lägg till " -#: ../java/src/net/i2p/router/web/LogsHelper.java:29 -#: ../java/src/net/i2p/router/web/LogsHelper.java:72 +#: ../java/src/net/i2p/router/web/LogsHelper.java:32 +#: ../java/src/net/i2p/router/web/LogsHelper.java:79 msgid "File location" msgstr "Filposition" -#: ../java/src/net/i2p/router/web/LogsHelper.java:69 +#: ../java/src/net/i2p/router/web/LogsHelper.java:76 msgid "File not found" msgstr "Fil inte funnen" -#: ../java/src/net/i2p/router/web/LogsHelper.java:87 +#: ../java/src/net/i2p/router/web/LogsHelper.java:94 msgid "No log messages" msgstr "Inga logmeddelande" @@ -3742,7 +3736,8 @@ msgstr "Plugin frÃ¥n {0} är korrupt" msgid "Plugin from {0} does not contain the required configuration file" msgstr "Plugin frÃ¥n {0} innehÃ¥ller inte deb konfiguration som krävs" -#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' + signer + "</b>"); +#. updateStatus("<b>" + "Plugin contains an invalid key" + ' ' + pubkey + ' ' +#. + signer + "</b>"); #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:225 #, java-format msgid "Plugin from {0} contains an invalid key" @@ -3779,9 +3774,7 @@ msgstr "Denna plugin kräver Java version {0} eller högre" msgid "" "Downloaded plugin is for new installs only, but the plugin is already " "installed" -msgstr "" -"Nedladdad plugin är för nya endast för nya installationer, men denna plugin " -"är redan installerad" +msgstr "Nedladdad plugin är för nya endast för nya installationer, men denna plugin är redan installerad" #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:329 msgid "Installed plugin does not contain the required configuration file" @@ -3789,8 +3782,7 @@ msgstr "Installerad plugin innehÃ¥ller inte den konfigurations som krävs" #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:337 msgid "Signature of downloaded plugin does not match installed plugin" -msgstr "" -"Signaturen av nerladdad plugin matchar inte den plugin som är installerad" +msgstr "Signaturen av nerladdad plugin matchar inte den plugin som är installerad" #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:344 #, java-format @@ -3828,8 +3820,7 @@ msgstr "Insticksprogrammet kommer att installeras vid nästa omstart." #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:410 msgid "Plugin is for upgrades only, but the plugin is not installed" -msgstr "" -"Plugin är endast för uppdateringar, men denna plugin är inte installerad" +msgstr "Plugin är endast för uppdateringar, men denna plugin är inte installerad" #: ../java/src/net/i2p/router/web/PluginUpdateHandler.java:423 #, java-format @@ -4039,9 +4030,7 @@ msgstr "kap." msgid "" "peak throughput (bytes per second) over a 1 minute period that the peer has " "sustained in a single tunnel" -msgstr "" -"topp genomströmning (bytes per sekund) under en period av1 minut som " -"klienten har upprätthÃ¥llit i en tunnel" +msgstr "topp genomströmning (bytes per sekund) under en period av1 minut som klienten har upprätthÃ¥llit i en tunnel" #: ../java/src/net/i2p/router/web/ProfileOrganizerRenderer.java:282 msgid "speed" @@ -4099,57 +4088,55 @@ msgstr "Förbjuden till omstart eller {0}" msgid "unban now" msgstr "unban nu" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:313 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:314 msgid "Bandwidth usage" msgstr "Bandbreddsanvändning" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:323 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:324 msgid "Outbound Bytes/sec" msgstr "UtgÃ¥ende Bytes/sek" #. def.line(sendName, Color.BLUE, "Outbound bytes/sec", 3); -#: ../java/src/net/i2p/router/web/StatSummarizer.java:325 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:326 msgid "Inbound Bytes/sec" msgstr "Inkommande Bytes/sek" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 #: ../java/src/net/i2p/router/web/StatSummarizer.java:329 #: ../java/src/net/i2p/router/web/StatSummarizer.java:330 #: ../java/src/net/i2p/router/web/StatSummarizer.java:331 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:332 msgid "Bps" msgstr "Bps" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:328 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 msgid "Out average" msgstr "Genomsnittligt ut" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:329 -#: ../java/src/net/i2p/router/web/StatSummarizer.java:331 -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:150 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:330 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:332 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:155 msgid "max" msgstr "max" -#: ../java/src/net/i2p/router/web/StatSummarizer.java:330 +#: ../java/src/net/i2p/router/web/StatSummarizer.java:331 msgid "In average" msgstr "Genomsnittligt in" -#: ../java/src/net/i2p/router/web/StatsGenerator.java:57 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:58 msgid "GO" msgstr "GÃ…" -#: ../java/src/net/i2p/router/web/StatsGenerator.java:60 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:61 msgid "Statistics gathered during this router's uptime" msgstr "Statistik som samlats in under routerns driftstid" -#: ../java/src/net/i2p/router/web/StatsGenerator.java:63 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:64 msgid "" "The data gathered is quantized over a 1 minute period, so should just be " "used as an estimate." -msgstr "" -"De uppgifter som samlats in är kvantiserade över en 1 minuts period, sÃ¥ de " -"skall bara användas som en uppskattning." +msgstr "De uppgifter som samlats in är kvantiserade över en 1 minuts period, sÃ¥ de skall bara användas som en uppskattning." -#: ../java/src/net/i2p/router/web/StatsGenerator.java:64 +#: ../java/src/net/i2p/router/web/StatsGenerator.java:65 msgid "These statistics are primarily used for development and debugging." msgstr "Statistiken används främst för utveckling och felsökning." @@ -4170,12 +4157,14 @@ msgstr "Glidande medelvärde, händelser per period" msgid "Highest events per period" msgstr "Högsta händelser per period" -#. if (showAll && (curFreq.getMaxAverageEventsPerPeriod() > 0) && (curFreq.getAverageEventsPerPeriod() > 0) ) { +#. if (showAll && (curFreq.getMaxAverageEventsPerPeriod() > 0) && +#. (curFreq.getAverageEventsPerPeriod() > 0) ) { #. buf.append("(current is "); #. buf.append(pct(curFreq.getAverageEventsPerPeriod()/curFreq.getMaxAverageEventsPerPeriod())); #. buf.append(" of max)"); #. } -#. buf.append(" <i>avg interval between updates:</i> (").append(num(curFreq.getAverageInterval())).append("ms, min "); +#. buf.append(" <i>avg interval between updates:</i> +#. (").append(num(curFreq.getAverageInterval())).append("ms, min "); #. buf.append(num(curFreq.getMinAverageInterval())).append("ms)"); #: ../java/src/net/i2p/router/web/StatsGenerator.java:136 msgid "Lifetime average events per period" @@ -4259,9 +4248,7 @@ msgstr "Hjälp & FAQ" msgid "" "Configure startup of clients and webapps (services); manually start dormant " "services" -msgstr "" -"Konfigurera start av klienter och webbappar (tjänster), starta vilande " -"tjänster manuellt" +msgstr "Konfigurera start av klienter och webbappar (tjänster), starta vilande tjänster manuellt" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:154 msgid "I2P Services" @@ -4339,9 +4326,7 @@ msgstr "Allmänt" msgid "" "Your Local Identity is your unique I2P router identity, similar to an ip " "address but tailored to I2P. " -msgstr "" -"Din lokala identitet är din unika I2P routers identitet, liknande en ip-" -"adress men anpassad för I2P." +msgstr "Din lokala identitet är din unika I2P routers identitet, liknande en ip-adress men anpassad för I2P." #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:274 msgid "Never disclose this to anyone, as it can reveal your real world ip." @@ -4381,9 +4366,7 @@ msgstr "Upptid" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:341 msgid "" "Help with configuring your firewall and router for optimal I2P performance" -msgstr "" -"Hjälp med att konfigurera din brandvägg och router för optimal prestanda för " -"I2P" +msgstr "Hjälp med att konfigurera din brandvägg och router för optimal prestanda för I2P" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:356 msgid "Configure I2P Updates" @@ -4419,7 +4402,7 @@ msgstr "Hög kapacitet" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:413 msgid "The number of peers available for network database inquiries" -msgstr "Antal peers tillgängliga för nätverksdatabas förfrÃ¥gningar" +msgstr "Anta tillgängliga för nätverksdatabasförfrÃ¥gningar" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:422 msgid "The total number of peers in our network database" @@ -4447,9 +4430,9 @@ msgstr "Använda" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:496 msgid "" -"Used for building and testing tunnels, and communicating with floodfill peers" -msgstr "" -"Används för att bygga och testa tunnlar och kommunicera med floodfill peers" +"Used for building and testing tunnels, and communicating with floodfill " +"peers" +msgstr "Används för att bygga och testa tunnlar och kommunicera med floodfill peers" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:499 msgid "Exploratory" @@ -4457,9 +4440,7 @@ msgstr "Utforskande" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:505 msgid "Tunnels we are using to provide or access services on the network" -msgstr "" -"Tunnlar vi använder för att tillhandahÃ¥lla eller fÃ¥ tillgÃ¥ng till tjänster i " -"nätverket" +msgstr "Tunnlar vi använder för att tillhandahÃ¥lla eller fÃ¥ tillgÃ¥ng till tjänster i nätverket" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:514 msgid "" @@ -4475,9 +4456,7 @@ msgstr "Deltagande" msgid "" "The ratio of tunnel hops we provide to tunnel hops we use - a value greater " "than 1.00 indicates a positive contribution to the network" -msgstr "" -"FörhÃ¥llandet mellan tunneln hopp ger vi tillhandahÃ¥ller och använder - ett " -"värde större än 1,00 indikerar ett positivt bidrag till nätverket" +msgstr "FörhÃ¥llandet mellan tunneln hopp ger vi tillhandahÃ¥ller och använder - ett värde större än 1,00 indikerar ett positivt bidrag till nätverket" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:526 msgid "Share ratio" @@ -4501,8 +4480,7 @@ msgstr "Arbetsfördröjning" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:555 msgid "Indicates how quickly outbound messages to other I2P routers are sent" -msgstr "" -"Indikerar hur snabbt utÃ¥tgÃ¥endemeddelanden till andra I2P routers sänds " +msgstr "Indikerar hur snabbt utÃ¥tgÃ¥endemeddelanden till andra I2P routers sänds " #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:558 msgid "Message delay" @@ -4575,9 +4553,7 @@ msgstr "Bakom brandvägg" msgid "" "ERR-UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config and " "restart" -msgstr "" -"ERR-UDP port används redan - Sätt i2np.udp.internalPort=xxxx i advancerade " -"inställningar och starta om" +msgstr "ERR-UDP port används redan - Sätt i2np.udp.internalPort=xxxx i advancerade inställningar och starta om" #: ../java/src/net/i2p/router/web/SummaryHelper.java:181 msgid "ERR-No Active Peers, Check Network Connection and Firewall" @@ -4648,7 +4624,8 @@ msgstr "Hämtat {0} uppdateringar" #. Note to translators: parameter is a date and time, e.g. "02-Mar 20:34 UTC" #. <br> is optional, to help the browser make the lines even in the button -#. If the translation is shorter than the English, you should probably not include <br> +#. If the translation is shorter than the English, you should probably not +#. include <br> #: ../java/src/net/i2p/router/web/SummaryHelper.java:684 #, java-format msgid "Download Unsigned<br>Update {0}" @@ -4666,45 +4643,45 @@ msgstr "Kontrollera nätverksanslutningen och NAT/brandvägg " msgid "Reseed" msgstr "Reseed" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:812 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:813 msgid "Order" msgstr "Ordning" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:829 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:830 msgid "Top" msgstr "Top" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:842 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:843 msgid "Down" msgstr "Ner" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:847 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:848 msgid "Bottom" msgstr "Botten" -#: ../java/src/net/i2p/router/web/SummaryHelper.java:859 +#: ../java/src/net/i2p/router/web/SummaryHelper.java:860 msgid "Select a section to add" msgstr "Välj ett avsnitt för att lägga till det" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:118 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:121 #, java-format msgid "events in {0}" msgstr "händelser i {0}" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:120 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:123 #, java-format msgid "averaged for {0}" msgstr "genomsnittad för {0}" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:130 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:133 msgid "Events per period" msgstr "Händelser per period" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:149 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:154 msgid "avg" msgstr "genomsnitt" -#: ../java/src/net/i2p/router/web/SummaryRenderer.java:151 +#: ../java/src/net/i2p/router/web/SummaryRenderer.java:156 msgid "now" msgstr "nu" @@ -5163,7 +5140,8 @@ msgstr "konfigurera bandbredd " msgid "Router is down" msgstr "Routern är nere" -#. We have intl defined when this is included, but not when compiled standalone. +#. We have intl defined when this is included, but not when compiled +#. standalone. #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:291 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configadvanced_jsp.java:291 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:317 @@ -5261,9 +5239,7 @@ msgstr "Bandbreddsbegränsare" msgid "" "I2P will work best if you configure your rates to match the speed of your " "internet connection." -msgstr "" -"I2P fungerar bäst om du konfigurerar hastigheter som överensstämmer med din " -"internetuppkoplings hastighet." +msgstr "I2P fungerar bäst om du konfigurerar hastigheter som överensstämmer med din internetuppkoplings hastighet." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:361 msgid "KBps In" @@ -5296,16 +5272,12 @@ msgstr "I2P kräver Ã¥tminstone 12KBps att aktivera delning. " msgid "" "Please enable sharing (participating in tunnels) by configuring more " "bandwidth. " -msgstr "" -"Snälla slÃ¥ pÃ¥ delning (deltagande i andras tunnlar) genom att konfigurera " -"mer bandbredd." +msgstr "Snälla slÃ¥ pÃ¥ delning (deltagande i andras tunnlar) genom att konfigurera mer bandbredd." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:404 msgid "" "It improves your anonymity by creating cover traffic, and helps the network." -msgstr "" -"Det förbättrar din anonymitet genom att dölja din trafik med andras trafik " -"och hjälper nätverket." +msgstr "Det förbättrar din anonymitet genom att dölja din trafik med andras trafik och hjälper nätverket." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:406 #, java-format @@ -5316,9 +5288,7 @@ msgstr "Du har konfigurerat I2P att dela {0} kbps." msgid "" "The higher the share bandwidth the more you improve your anonymity and help " "the network." -msgstr "" -"Desto högre bandbredd som delas ju mer du förbättras din anonymitet och " -"hjälpen till nätverket." +msgstr "Desto högre bandbredd som delas ju mer du förbättras din anonymitet och hjälpen till nätverket." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:413 msgid "Advanced network configuration page" @@ -5377,8 +5347,7 @@ msgstr "Klientkonfiguration" msgid "" "The Java clients listed below are started by the router and run in the same " "JVM." -msgstr "" -"Java klienter som anges nedan startade av routern och körs i samma JVM." +msgstr "Java klienter som anges nedan startade av routern och körs i samma JVM." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:420 msgid "To change other client options, edit the file" @@ -5442,8 +5411,7 @@ msgstr "Standardinställningarna fungerar för de flesta." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:501 msgid "Any changes made here must also be configured in the external client." -msgstr "" -"Alla ändringar som görs här mÃ¥ste ocksÃ¥ konfigureras i den externa klienten." +msgstr "Alla ändringar som görs här mÃ¥ste ocksÃ¥ konfigureras i den externa klienten." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:503 msgid "Many clients do not support SSL or authorization." @@ -5457,17 +5425,11 @@ msgstr "WebApp inställningar" msgid "" "The Java web applications listed below are started by the webConsole client " "and run in the same JVM as the router. They are usually web applications " -"accessible through the router console. They may be complete applications (e." -"g. i2psnark),front-ends to another client or application which must be " +"accessible through the router console. They may be complete applications " +"(e.g. i2psnark),front-ends to another client or application which must be " "separately enabled (e.g. susidns, i2ptunnel), or have no web interface at " "all (e.g. addressbook)." -msgstr "" -"Java webbapplikationer som anges nedan startas av webConsole klienten och " -"körs i samma JVM som routern. Vanligtvis är det webbapplikationer som är " -"tillgängliga genom routern konsolen. De kan vara kompletta program (t.ex. " -"i2psnark), gränssnitt till en annan klient eller tillämpningar som mÃ¥ste " -"aktiveras separat (t.ex. susidns, i2ptunnel), eller som saknar " -"webbgränssnitt över huvud taget (t.ex. adressbok)." +msgstr "Java webbapplikationer som anges nedan startas av webConsole klienten och körs i samma JVM som routern. Vanligtvis är det webbapplikationer som är tillgängliga genom routern konsolen. De kan vara kompletta program (t.ex. i2psnark), gränssnitt till en annan klient eller tillämpningar som mÃ¥ste aktiveras separat (t.ex. susidns, i2ptunnel), eller som saknar webbgränssnitt över huvud taget (t.ex. adressbok)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:517 msgid "" @@ -5475,11 +5437,7 @@ msgid "" "directory; however the .war file and web app will reappear when you update " "your router to a newer version, so disabling the web app here is the " "preferred method." -msgstr "" -"En webbapp kan ocksÃ¥ inaktiveras genom att ta bort .war filen frÃ¥n webapps " -"katalogen. Men .war filen och webbappen visas igen när du uppdaterar din " -"router till en nyare version, sÃ¥ att inaktivera webbapp här är den bästa " -"metoden." +msgstr "En webbapp kan ocksÃ¥ inaktiveras genom att ta bort .war filen frÃ¥n webapps katalogen. Men .war filen och webbappen visas igen när du uppdaterar din router till en nyare version, sÃ¥ att inaktivera webbapp här är den bästa metoden." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configclients_jsp.java:531 msgid "Plugin Configuration" @@ -5537,8 +5495,7 @@ msgstr "Router-nyckelringen används för att dekryptera krypterade leaseSets." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:402 msgid "" "The keyring may contain keys for local or remote encrypted destinations." -msgstr "" -"Nyckelringen kan innehÃ¥lla nycklar för krypterad lokala eller fjärrmÃ¥l ." +msgstr "Nyckelringen kan innehÃ¥lla nycklar för krypterad lokala eller fjärrmÃ¥l ." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configkeyring_jsp.java:408 msgid "Manual Keyring Addition" @@ -5591,9 +5548,7 @@ msgstr "Logginläggformat" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:367 msgid "" "(use 'd' = date, 'c' = class, 't' = thread, 'p' = priority, 'm' = message)" -msgstr "" -"(använd 'd' = daum, 'c' = klass, 't' = trÃ¥d, 'p' = prioritet, 'm' = " -"meddelande)" +msgstr "(använd 'd' = daum, 'c' = klass, 't' = trÃ¥d, 'p' = prioritet, 'm' = meddelande)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:369 msgid "Log date format" @@ -5603,9 +5558,7 @@ msgstr "Logg datumformat" msgid "" "('MM' = month, 'dd' = day, 'HH' = hour, 'mm' = minute, 'ss' = second, 'SSS' " "= millisecond)" -msgstr "" -"('MM' = mÃ¥nad, 'dd' = dag, 'HH' = timme, 'mm' = minut, 'ss' = sekund, 'SSS' " -"= millisekund)" +msgstr "('MM' = mÃ¥nad, 'dd' = dag, 'HH' = timme, 'mm' = minut, 'ss' = sekund, 'SSS' = millisekund)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:375 msgid "Max log file size" @@ -5619,9 +5572,7 @@ msgstr "Standard loggnings nivÃ¥ " msgid "" "(DEBUG and INFO are not recommended defaults, as they will drastically slow " "down your router)" -msgstr "" -"(DEBUG och INFO rekommenderas inte som standard, eftersom de drastiskt " -"kommer att sakta ner din router)" +msgstr "(DEBUG och INFO rekommenderas inte som standard, eftersom de drastiskt kommer att sakta ner din router)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configlogging_jsp.java:385 msgid "Log level overrides" @@ -5709,9 +5660,7 @@ msgstr "Ã…tgärd när IP-adressen ändras" msgid "" "Laptop mode - Change router identity and UDP port when IP changes for " "enhanced anonymity" -msgstr "" -"Laptop-läge - Ändra routeridentitet och UDP-port när IP-adressen ändras, för " -"ökad anonymitet" +msgstr "Laptop-läge - Ändra routeridentitet och UDP-port när IP-adressen ändras, för ökad anonymitet" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:464 msgid "Experimental" @@ -5753,9 +5702,7 @@ msgstr "om vi inte är stoppade av brandvägg" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:504 msgid "Always use auto-detected IP address (Not firewalled)" -msgstr "" -"Använd alltid automatiskt uptäckta IP adresser (som inte finns bakom en " -"brandvägg)" +msgstr "Använd alltid automatiskt uptäckta IP adresser (som inte finns bakom en brandvägg)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:514 msgid "Disable inbound (Firewalled)" @@ -5764,9 +5711,7 @@ msgstr "Inaktivera inkommande (bakom brandvägg)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:520 msgid "" "(select only if behind a firewall that throttles or blocks outbound TCP)" -msgstr "" -"(välj endast om du är bakom en brandvägg som stryper eller blockerar " -"utgÃ¥ende TCP)" +msgstr "(välj endast om du är bakom en brandvägg som stryper eller blockerar utgÃ¥ende TCP)" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:522 msgid "Externally reachable TCP port" @@ -5788,9 +5733,7 @@ msgstr "Anteckningar" msgid "" "a) Do not reveal your port numbers to anyone! b) Changing these settings " "will restart your router." -msgstr "" -"a) avslöja inte dit portnummer för nÃ¥gon! b) om dessa inställningar ändras " -"kommer din router starta om." +msgstr "a) avslöja inte dit portnummer för nÃ¥gon! b) om dessa inställningar ändras kommer din router starta om." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:547 msgid "Configuration Help" @@ -5800,37 +5743,28 @@ msgstr "Konfigurationshjälp" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:598 msgid "" "While I2P will work fine behind most firewalls, your speeds and network " -"integration will generally improve if the I2P port is forwarded for both UDP " -"and TCP." -msgstr "" -"Även om I2P fungera bra bakom de flesta brandväggar kommer din hastighet och " -"nätverksintegrering allmänt förbättra om I2P porten vidarebefordrar bÃ¥de UDP " -"och TCP." +"integration will generally improve if the I2P port is forwarded for both UDP" +" and TCP." +msgstr "Även om I2P fungera bra bakom de flesta brandväggar kommer din hastighet och nätverksintegrering allmänt förbättra om I2P porten vidarebefordrar bÃ¥de UDP och TCP." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:551 msgid "" -"If you can, please poke a hole in your firewall to allow unsolicited UDP and " -"TCP packets to reach you." -msgstr "" -"Om du kan, du öppna ett hÃ¥l i din brandvägg för att tillÃ¥ta att icke begärda " -"UDP och TCP-paket kan nÃ¥ dig." +"If you can, please poke a hole in your firewall to allow unsolicited UDP and" +" TCP packets to reach you." +msgstr "Om du kan, du öppna ett hÃ¥l i din brandvägg för att tillÃ¥ta att icke begärda UDP och TCP-paket kan nÃ¥ dig." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:553 msgid "" "If you can't, I2P supports UPnP (Universal Plug and Play) and UDP hole " "punching with \"SSU introductions\" to relay traffic." -msgstr "" -"Om du inte kan, sÃ¥ stöder I2P UPnP (Universal Plug and Play) och UDP " -"hÃ¥lsöppning med \"SSU introductions \" för att förmedla trafiken." +msgstr "Om du inte kan, sÃ¥ stöder I2P UPnP (Universal Plug and Play) och UDP hÃ¥lsöppning med \"SSU introductions \" för att förmedla trafiken." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:555 msgid "" -"Most of the options above are for special situations, for example where UPnP " -"does not work correctly, or a firewall not under your control is doing harm." -msgstr "" -"De flesta av alternativen ovan gäller för särskilda situationer, exempelvis " -"när UPnP inte fungerar korrekt, eller en brandvägg som inte är under din " -"kontroll gör skada." +"Most of the options above are for special situations, for example where UPnP" +" does not work correctly, or a firewall not under your control is doing " +"harm." +msgstr "De flesta av alternativen ovan gäller för särskilda situationer, exempelvis när UPnP inte fungerar korrekt, eller en brandvägg som inte är under din kontroll gör skada." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:557 msgid "Certain firewalls such as symmetric NATs may not work well with I2P." @@ -5840,9 +5774,7 @@ msgstr "Vissa brandväggar sÃ¥som symmetriska NAT kan fungerar dÃ¥ligt med I2P. msgid "" "UPnP is used to communicate with Internet Gateway Devices (IGDs) to detect " "the external IP address and forward ports." -msgstr "" -"UPnP används för att kommunicera med Internet Gateway-enheter (IGDs) för att " -"upptäcka den externa IP-adressen och att vidarebefordra portar" +msgstr "UPnP används för att kommunicera med Internet Gateway-enheter (IGDs) för att upptäcka den externa IP-adressen och att vidarebefordra portar" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:568 msgid "UPnP support is beta, and may not work for any number of reasons" @@ -5880,9 +5812,7 @@ msgstr "Granska UPnP statusen här." msgid "" "UPnP may be enabled or disabled above, but a change requires a router " "restart to take effect." -msgstr "" -"UPnP kan aktiveras eller inaktiveras ovan, men förändring kräver att routern " -"startars om." +msgstr "UPnP kan aktiveras eller inaktiveras ovan, men förändring kräver att routern startars om." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:586 msgid "Hostnames entered above will be published in the network database." @@ -5894,18 +5824,16 @@ msgstr "De är <b> ej privata </b>." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:590 msgid "" -"Also, <b>do not enter a private IP address</b> like 127.0.0.1 or 192.168.1.1." -msgstr "" -"Ange <b> inte en privat IP-adress </b> som 127.0.0.1 eller 192.168.1.1." +"Also, <b>do not enter a private IP address</b> like 127.0.0.1 or " +"192.168.1.1." +msgstr "Ange <b> inte en privat IP-adress </b> som 127.0.0.1 eller 192.168.1.1." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:592 msgid "" "If you specify the wrong IP address or hostname, or do not properly " "configure your NAT or firewall, your network performance will degrade " "substantially." -msgstr "" -"Om du anger fel IP-adress, värdnamn eller inte konfigurera din NAT eller " -"brandvägg, kommer din nätverkets prestanda att försämras avsevärt." +msgstr "Om du anger fel IP-adress, värdnamn eller inte konfigurera din NAT eller brandvägg, kommer din nätverkets prestanda att försämras avsevärt." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:594 msgid "When in doubt, leave the settings at the defaults." @@ -5920,18 +5848,13 @@ msgid "" "If you think you have opened up your firewall and I2P still thinks you are " "firewalled, remember that you may have multiple firewalls, for example both " "software packages and external hardware routers." -msgstr "" -"Om du tror att du har öppnat din brandvägg och I2P fortfarande tror att du " -"är bakom en branvägg, kom ihÃ¥g att du kan ha flera brandväggar, exempelvis " -"bÃ¥deprogramvaru- och hÃ¥rdvarubrandväggar." +msgstr "Om du tror att du har öppnat din brandvägg och I2P fortfarande tror att du är bakom en branvägg, kom ihÃ¥g att du kan ha flera brandväggar, exempelvis bÃ¥deprogramvaru- och hÃ¥rdvarubrandväggar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:604 msgid "" "If there is an error, the <a href=\"logs.jsp\">logs</a> may also help " "diagnose the problem." -msgstr "" -"Om det finns ett fel, kan <a href=\"logs.jsp\">loggar</a> hjälpa till att " -"diagnostisera problemet." +msgstr "Om det finns ett fel, kan <a href=\"logs.jsp\">loggar</a> hjälpa till att diagnostisera problemet." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:608 msgid "Your UDP port does not appear to be firewalled." @@ -5945,53 +5868,39 @@ msgstr "Din UDP port verkar vara bakom en brandvägg." msgid "" "As the firewall detection methods are not 100% reliable, this may " "occasionally be displayed in error." -msgstr "" -"Brandvägg detekteringsmetoderna är inte 100% tillförlitliga, det kan ibland " -"vara felaktigta." +msgstr "Brandvägg detekteringsmetoderna är inte 100% tillförlitliga, det kan ibland vara felaktigta." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:616 msgid "" "However, if it appears consistently, you should check whether both your " "external and internal firewalls are open for your port." -msgstr "" -"Men om det visar sig konsekvent, bör du kontrollera om bÃ¥de din yttre och " -"inre brandväggar är öppna för porten." +msgstr "Men om det visar sig konsekvent, bör du kontrollera om bÃ¥de din yttre och inre brandväggar är öppna för porten." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:618 msgid "" "I2P will work fine when firewalled, there is no reason for concern. When " "firewalled, the router uses \"introducers\" to relay inbound connections." -msgstr "" -"I2P fungera bra bakom en brandvägg, det finns ingen anledning till oro. När " -"routern är bakom en brandvägg används \"introducers \" för att förmedla " -"inkommande anslutningar." +msgstr "I2P fungera bra bakom en brandvägg, det finns ingen anledning till oro. När routern är bakom en brandvägg används \"introducers \" för att förmedla inkommande anslutningar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:620 msgid "" "However, you will get more participating traffic and help the network more " "if you can open your firewall(s)." -msgstr "" -"Men du kommer fÃ¥ fler deltagande trafik och hjälper nätverket mer om du kan " -"öppna din brandvägg." +msgstr "Men du kommer fÃ¥ fler deltagande trafik och hjälper nätverket mer om du kan öppna din brandvägg." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:622 msgid "" "If you think you have already done so, remember that you may have both a " "hardware and a software firewall, or be behind an additional, institutional " "firewall you cannot control." -msgstr "" -"Om du tror att du redan gjort det, kom ihÃ¥g att du kan ha bÃ¥de hÃ¥rdvaru- och " -"mjukvarubrandvägg, eller är bakom en extra brandvägg som du inte kontrollera." +msgstr "Om du tror att du redan gjort det, kom ihÃ¥g att du kan ha bÃ¥de hÃ¥rdvaru- och mjukvarubrandvägg, eller är bakom en extra brandvägg som du inte kontrollera." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:624 msgid "" "Also, some routers cannot correctly forward both TCP and UDP on a single " "port, or may have other limitations or bugs that prevent them from passing " "traffic through to I2P." -msgstr "" -"Dessutom kan vissa routrar inte riktigt vidarebefordra bÃ¥de TCP och UDP pÃ¥ " -"en enda port, eller kan ha andra begränsningar eller buggar som hindrar dem " -"frÃ¥n skicka trafik genom I2P." +msgstr "Dessutom kan vissa routrar inte riktigt vidarebefordra bÃ¥de TCP och UDP pÃ¥ en enda port, eller kan ha andra begränsningar eller buggar som hindrar dem frÃ¥n skicka trafik genom I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:628 msgid "The router is currently testing whether your UDP port is firewalled." @@ -6001,9 +5910,7 @@ msgstr "Routern testar för närvarande om din UDPport är bakom en brandvägg." msgid "" "The router is not configured to publish its address, therefore it does not " "expect incoming connections." -msgstr "" -"Routern är inte konfigurerad för att offentliggöra dess adress, " -"därförförväntar den inte inkommande anslutningar." +msgstr "Routern är inte konfigurerad för att offentliggöra dess adress, därförförväntar den inte inkommande anslutningar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:634 msgid "" @@ -6017,21 +5924,16 @@ msgstr "VARNING - bakom brandvägg och snabb" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:638 msgid "" -"You have configured I2P to share more than 128KBps of bandwidth, but you are " -"firewalled." -msgstr "" -"Du har konfigurerat I2P för att dela mer än 128kbps bandbredd, men du är " -"bakom en brandvägg." +"You have configured I2P to share more than 128KBps of bandwidth, but you are" +" firewalled." +msgstr "Du har konfigurerat I2P för att dela mer än 128kbps bandbredd, men du är bakom en brandvägg." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:640 msgid "" "While I2P will work fine in this configuration, if you really have over " "128KBps of bandwidth to share, it will be much more helpful to the network " "if you open your firewall." -msgstr "" -"Även om I2P kommer att fungera bra i denna konfiguration. Men om du " -"verkligen har mer än 128 kbit/s bandbredd för att dela, kommer det att vara " -"mycket mer användbart för nätverket om du öppnar din brandvägg." +msgstr "Även om I2P kommer att fungera bra i denna konfiguration. Men om du verkligen har mer än 128 kbit/s bandbredd för att dela, kommer det att vara mycket mer användbart för nätverket om du öppnar din brandvägg." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:642 msgid "WARN - Firewalled and Floodfill" @@ -6040,9 +5942,7 @@ msgstr "VARNING - bakom en brandvägg och Floodfill" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:644 msgid "" "You have configured I2P to be a floodfill router, but you are firewalled." -msgstr "" -"Du har konfigurerat I2P för att vara en floodfill router, men din port är " -"bakom en brandvägg." +msgstr "Du har konfigurerat I2P för att vara en floodfill router, men din port är bakom en brandvägg." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:646 msgid "" @@ -6057,19 +5957,13 @@ msgstr "VARNING - brandvägg med Inkommande TCP aktiverad" msgid "" "You have configured inbound TCP, however your UDP port is firewalled, and " "therefore it is likely that your TCP port is firewalled as well." -msgstr "" -"Du har konfigurerat inkommande TCP, men dina UDP portar är bakom en " -"brandvägg, och därför är det troligt att ditt TCP portar är bakom en " -"brandvägg ocksÃ¥." +msgstr "Du har konfigurerat inkommande TCP, men dina UDP portar är bakom en brandvägg, och därför är det troligt att ditt TCP portar är bakom en brandvägg ocksÃ¥." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:652 msgid "" -"If your TCP port is firewalled with inbound TCP enabled, routers will not be " -"able to contact you via TCP, which will hurt the network." -msgstr "" -"Om din TCPport är bakom en brandvägg med inkommande TCP aktiverat kommer " -"routrar inte att kunna kontakta dig via TCP, vilket kommer att skada " -"nätverket." +"If your TCP port is firewalled with inbound TCP enabled, routers will not be" +" able to contact you via TCP, which will hurt the network." +msgstr "Om din TCPport är bakom en brandvägg med inkommande TCP aktiverat kommer routrar inte att kunna kontakta dig via TCP, vilket kommer att skada nätverket." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:654 msgid "Please open your firewall or disable inbound TCP above." @@ -6087,9 +5981,7 @@ msgstr "Du har konfigurerat för inkommande TCP, men du har inaktiverat UDP." msgid "" "You appear to be firewalled on TCP, therefore your router cannot accept " "inbound connections." -msgstr "" -"Det verkar vara en brandväggsregel pÃ¥ TCP, därför dina router inte kan " -"acceptera inkommande anslutningar." +msgstr "Det verkar vara en brandväggsregel pÃ¥ TCP, därför dina router inte kan acceptera inkommande anslutningar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:662 msgid "Please open your firewall or enable UDP." @@ -6103,8 +5995,7 @@ msgstr "FEL - Klockan är förskjuten" msgid "" "Your system's clock is skewed, which will make it difficult to participate " "in the network." -msgstr "" -"Ditt system klocka är gÃ¥r fel, vilket gör det svÃ¥rt att delta i nätverket." +msgstr "Ditt system klocka är gÃ¥r fel, vilket gör det svÃ¥rt att delta i nätverket." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:668 msgid "Correct your clock setting if this error persists." @@ -6118,9 +6009,7 @@ msgstr "FEL - Rivat TCP adress" msgid "" "You must never advertise an unroutable IP address such as 127.0.0.1 or " "192.168.1.1 as your external address." -msgstr "" -"Du fÃ¥r aldrig annonsera en icke-routbar IP-adress som 127.0.0.1 eller " -"192.168.1.1 som din externa adress." +msgstr "Du fÃ¥r aldrig annonsera en icke-routbar IP-adress som 127.0.0.1 eller 192.168.1.1 som din externa adress." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:674 msgid "Correct the address or disable inbound TCP above." @@ -6139,18 +6028,13 @@ msgid "" "I2P does not work well behind this type of firewall. You will probably not " "be able to accept inbound connections, which will limit your participation " "in the network." -msgstr "" -"I2P fungerar inte bra bakom denna typ av brandvägg. Du kommer förmodligen " -"inte att kunna acceptera inkommande anslutningar, vilket kommer att begränsa " -"ditt deltagande i nätverket." +msgstr "I2P fungerar inte bra bakom denna typ av brandvägg. Du kommer förmodligen inte att kunna acceptera inkommande anslutningar, vilket kommer att begränsa ditt deltagande i nätverket." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:682 msgid "" "ERR - UDP Port In Use - Set i2np.udp.internalPort=xxxx in advanced config " "and restart" -msgstr "" -"FEL - UDP-port används - ändra i2np.udp.internalPort = xxxx i avancerade " -"inställningar och starta om" +msgstr "FEL - UDP-port används - ändra i2np.udp.internalPort = xxxx i avancerade inställningar och starta om" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:684 msgid "I2P was unable to bind to port 8887 or other configured port." @@ -6160,17 +6044,13 @@ msgstr "I2P kunde inte binda till port 8887 eller andra valda portar." msgid "" "Check to see if another program is using the configured port. If so, stop " "that program or configure I2P to use a different port." -msgstr "" -"Kontrollera om ett annat program använder den valda porten. Om sÃ¥ är fallet, " -"avsluta det programmet eller konfigurera I2P att använda annan port." +msgstr "Kontrollera om ett annat program använder den valda porten. Om sÃ¥ är fallet, avsluta det programmet eller konfigurera I2P att använda annan port." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:688 msgid "" "This may be a transient error, if the other program is no longer using the " "port." -msgstr "" -"Detta kan vara tillfällig fel, om det andra programmet inte längre använder " -"porten." +msgstr "Detta kan vara tillfällig fel, om det andra programmet inte längre använder porten." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:690 msgid "However, a restart is always required after this error." @@ -6184,9 +6064,7 @@ msgstr "FEL - UDP Inaktivera och Inkommande TCP värd/port inte satt" msgid "" "You have not configured inbound TCP with a hostname and port above, however " "you have disabled UDP." -msgstr "" -"Du har inte konfigurerat inkommande TCP med värdnamn och port ovan, men du " -"har inaktiverat UDP." +msgstr "Du har inte konfigurerat inkommande TCP med värdnamn och port ovan, men du har inaktiverat UDP." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:696 msgid "Therefore your router cannot accept inbound connections." @@ -6202,17 +6080,13 @@ msgstr "FEL - I2CP klienthanterings fel - kolla loggarna" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:702 msgid "This is usually due to a port 7654 conflict. Check the logs to verify." -msgstr "" -"Detta beror vanligtvis pÃ¥ att port 7654 används av annat program. " -"Kontrollera loggarna för att verifiera." +msgstr "Detta beror vanligtvis pÃ¥ att port 7654 används av annat program. Kontrollera loggarna för att verifiera." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/confignet_jsp.java:704 msgid "" "Do you have another I2P instance running? Stop the conflicting program and " "restart I2P." -msgstr "" -"Har du en annan instans av I2P som körs? Stoppa det kolliderande programmet " -"och starta om I2P." +msgstr "Har du en annan instans av I2P som körs? Stoppa det kolliderande programmet och starta om I2P." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:139 msgid "config peers" @@ -6245,15 +6119,11 @@ msgstr "Justera profil bonus" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:425 msgid "" -"Bonuses may be positive or negative, and affect the peer's inclusion in Fast " -"and High Capacity tiers. Fast peers are used for client tunnels, and High " +"Bonuses may be positive or negative, and affect the peer's inclusion in Fast" +" and High Capacity tiers. Fast peers are used for client tunnels, and High " "Capacity peers are used for some exploratory tunnels. Current bonuses are " "displayed on the" -msgstr "" -"Bonusar kan vara positiv eller negativ, och pÃ¥verkar peer inräknande i " -"snabbt och högkapacitets nivÃ¥er. Snabba peers används för klient tunnlar, " -"och hög kapacitet peers används för vissa sonderande tunnlar. Aktuell bonus " -"visas pÃ¥" +msgstr "Bonusar kan vara positiv eller negativ, och pÃ¥verkar peer inräknande i snabbt och högkapacitets nivÃ¥er. Snabba peers används för klient tunnlar, och hög kapacitet peers används för vissa sonderande tunnlar. Aktuell bonus visas pÃ¥" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configpeer_jsp.java:427 msgid "profiles page" @@ -6284,25 +6154,18 @@ msgid "" "Reseeding is the bootstrapping process used to find other routers when you " "first install I2P, or when your router has too few router references " "remaining." -msgstr "" -"Reseeding är en uppstarts (bootstrapping) process som används för att hitta " -"andra routrar när du först installerar I2P, eller när din router har för fÃ¥ " -"routern referenser kvar." +msgstr "Reseeding är en uppstarts (bootstrapping) process som används för att hitta andra routrar när du först installerar I2P, eller när din router har för fÃ¥ routern referenser kvar." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:404 msgid "" "If reseeding has failed, you should first check your network connection." -msgstr "" -"Om reseedning har misslyckats, bör du först kontrollera din " -"nätverksanslutning." +msgstr "Om reseedning har misslyckats, bör du först kontrollera din nätverksanslutning." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:408 msgid "" "Change these only if HTTP is blocked by a restrictive firewall, reseed has " "failed, and you have access to an HTTP proxy." -msgstr "" -"Ändra dessa inställningar endast om HTTP blockeras av en brandvägg, reseed " -"har misslyckats, och du har tillgÃ¥ng till en HTTP-proxy." +msgstr "Ändra dessa inställningar endast om HTTP blockeras av en brandvägg, reseed har misslyckats, och du har tillgÃ¥ng till en HTTP-proxy." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configreseed_jsp.java:410 #, java-format @@ -6395,51 +6258,40 @@ msgstr "Stäng av routern" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:387 msgid "" -"Graceful shutdown lets the router satisfy the agreements it has already made " -"before shutting down, but may take a few minutes." -msgstr "" -"Graciös avstängning lÃ¥ter routern uppfylla de avtal som redan gjorts innan " -"du stänger av, men kan ta nÃ¥gra minuter." +"Graceful shutdown lets the router satisfy the agreements it has already made" +" before shutting down, but may take a few minutes." +msgstr "Graciös avstängning lÃ¥ter routern uppfylla de avtal som redan gjorts innan du stänger av, men kan ta nÃ¥gra minuter." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:389 msgid "" -"If you need to kill the router immediately, that option is available as well." -msgstr "" -"Om du behöver döda routern omedelbart, finns det alternativet ocksÃ¥ " -"tillgängligt" +"If you need to kill the router immediately, that option is available as " +"well." +msgstr "Om du behöver döda routern omedelbart, finns det alternativet ocksÃ¥ tillgängligt" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:399 msgid "" -"If you want the router to restart itself after shutting down, you can choose " -"one of the following." -msgstr "" -"Om du vill att routern startar om efter avstängning, kan du välja nÃ¥got av " -"följande." +"If you want the router to restart itself after shutting down, you can choose" +" one of the following." +msgstr "Om du vill att routern startar om efter avstängning, kan du välja nÃ¥got av följande." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:401 msgid "" "This is useful in some situations - for example, if you changed some " "settings that client applications only read at startup, such as the " "routerconsole password or the interface it listens on." -msgstr "" -"Detta är användbart i vissa situationer - till exempel om du har ändrat " -"nÃ¥gra inställningar som klientprogramet endast läser in vid start, till " -"exempel routerconsole lösenord eller gränssnittet som det lyssnar pÃ¥." +msgstr "Detta är användbart i vissa situationer - till exempel om du har ändrat nÃ¥gra inställningar som klientprogramet endast läser in vid start, till exempel routerconsole lösenord eller gränssnittet som det lyssnar pÃ¥." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:403 msgid "" "A graceful restart will take a few minutes (but your peers will appreciate " "your patience), while a hard restart does so immediately." -msgstr "" -"En elegant omstart kommer att ta nÃ¥gra minuter (men dina vänner kommer att " -"uppskatta ditt tÃ¥lamod), medan en hÃ¥rd omstart startar om omedelbart." +msgstr "En elegant omstart kommer att ta nÃ¥gra minuter (men dina vänner kommer att uppskatta ditt tÃ¥lamod), medan en hÃ¥rd omstart startar om omedelbart." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:405 msgid "" -"After tearing down the router, it will wait 1 minute before starting back up " -"again." -msgstr "" -"Efter att routern rivits ner , kommer den att vänta 1 minut innan upp igen." +"After tearing down the router, it will wait 1 minute before starting back up" +" again." +msgstr "Efter att routern rivits ner , kommer den att vänta 1 minut innan upp igen." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:415 msgid "Systray integration" @@ -6449,22 +6301,18 @@ msgstr "Systemfälts integration" msgid "" "On the windows platform, there is a small application to sit in the system " "tray, allowing you to view the router's status" -msgstr "" -"PÃ¥ Windows-plattformen, finns ett litet program som finns i systemfältet sÃ¥ " -"att du kan se routerns status" +msgstr "PÃ¥ Windows-plattformen, finns ett litet program som finns i systemfältet sÃ¥ att du kan se routerns status" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:419 msgid "" "(later on, I2P client applications will be able to integrate their own " "functionality into the system tray as well)." -msgstr "" -"(senare kommer I2P klientprogram kunna integrera sina egna funktioner i " -"systemfältet ocksÃ¥)." +msgstr "(senare kommer I2P klientprogram kunna integrera sina egna funktioner i systemfältet ocksÃ¥)." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:421 -msgid "If you are on windows, you can either enable or disable that icon here." -msgstr "" -"Om du använder Windows kan du aktivera antingen eller inaktivera ikonen här" +msgid "" +"If you are on windows, you can either enable or disable that icon here." +msgstr "Om du använder Windows kan du aktivera antingen eller inaktivera ikonen här" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:423 msgid "Show systray icon" @@ -6480,12 +6328,9 @@ msgstr "Kör vid uppstart" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:429 msgid "" -"You can control whether I2P is run on startup or not by selecting one of the " -"following options - I2P will install (or remove) a service accordingly." -msgstr "" -"Du kan styra om I2P skall köras vid start eller inte genom att välja ett av " -"följande alternativ - I2P kommer att installera (eller ta bort) en tjänst " -"för detta." +"You can control whether I2P is run on startup or not by selecting one of the" +" following options - I2P will install (or remove) a service accordingly." +msgstr "Du kan styra om I2P skall köras vid start eller inte genom att välja ett av följande alternativ - I2P kommer att installera (eller ta bort) en tjänst för detta." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:431 msgid "If you prefer the command line, you can also run the " @@ -6498,19 +6343,15 @@ msgstr "Notera" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:441 msgid "" -"If you are running I2P as service right now, removing it will shut down your " -"router immediately." -msgstr "" -"Om du kör I2P som tjänst just nu, att ta bort den resulterar i att routern " -"stängs omedelbart." +"If you are running I2P as service right now, removing it will shut down your" +" router immediately." +msgstr "Om du kör I2P som tjänst just nu, att ta bort den resulterar i att routern stängs omedelbart." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:443 msgid "" "You may want to consider shutting down gracefully, as above, then running " "uninstall_i2p_service_winnt.bat." -msgstr "" -"Du kanske vill överväga att stänga snyggt , som ovan och kör sedan " -"uninstall_i2p_service_winnt.bat." +msgstr "Du kanske vill överväga att stänga snyggt , som ovan och kör sedan uninstall_i2p_service_winnt.bat." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:447 msgid "Debugging" @@ -6522,25 +6363,20 @@ msgstr "Visa jobbkön" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:453 msgid "" -"At times, it may be helpful to debug I2P by getting a thread dump. To do so, " -"please select the following option and review the thread dumped to <a href=" -"\"logs.jsp#servicelogs\">wrapper.log</a>." -msgstr "" -"Ibland kan det underlätta att felsöka I2P genom att ta en trÃ¥d dump. För att " -"göra det, välj följande alternativ och undersök trÃ¥den som dumpats till <a " +"At times, it may be helpful to debug I2P by getting a thread dump. To do so," +" please select the following option and review the thread dumped to <a " "href=\"logs.jsp#servicelogs\">wrapper.log</a>." +msgstr "Ibland kan det underlätta att felsöka I2P genom att ta en trÃ¥d dump. För att göra det, välj följande alternativ och undersök trÃ¥den som dumpats till <a href=\"logs.jsp#servicelogs\">wrapper.log</a>." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:459 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:465 msgid "Launch browser on router startup?" msgstr "Starta webbläsaren vid router start?" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:461 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configservice_jsp.java:467 msgid "" "I2P's main configuration interface is this web console, so for your " "convenience I2P can launch a web browser on startup pointing at" -msgstr "" -"I2P huvudsakliga konfigurationsgränssnitt är denna webbkonsol, sÃ¥ för din " -"bekvämlighet kan I2P starta en webbläsare som pekar pÃ¥" +msgstr "I2P huvudsakliga konfigurationsgränssnitt är denna webbkonsol, sÃ¥ för din bekvämlighet kan I2P starta en webbläsare som pekar pÃ¥" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configsidebar_jsp.java:139 msgid "config summary bar" @@ -6627,12 +6463,9 @@ msgstr "Det finns en stor avvägning mellan anonymitet och prestanda." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:417 msgid "" "Tunnels longer than 3 hops (for example 2 hops + 0-2 hops, 3 hops + 0-1 " -"hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely " -"reduce performance or reliability." -msgstr "" -"Tunnlar med mer än 3 hopp (t.ex. 2 hopp + 0-2 hopp, 3 hopp + 0-1 hopp, 3 " -"hopp + 0-2 hopp), eller en stor mängd och kvantiteten pÃ¥ backupen, kan " -"allvarligt försämra prestanda eller tillförlitlighet." +"hops, 3 hops + 0-2 hops), or a high quantity + backup quantity, may severely" +" reduce performance or reliability." +msgstr "Tunnlar med mer än 3 hopp (t.ex. 2 hopp + 0-2 hopp, 3 hopp + 0-1 hopp, 3 hopp + 0-2 hopp), eller en stor mängd och kvantiteten pÃ¥ backupen, kan allvarligt försämra prestanda eller tillförlitlighet." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:420 msgid "High CPU and/or high outbound bandwidth usage may result." @@ -6640,9 +6473,7 @@ msgstr "Hög CPU-belastning och/eller högt bandbreddsutnytjande kan uppstÃ¥." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:423 msgid "Change these settings with care, and adjust them if you have problems." -msgstr "" -"Ändra dessa inställningar med försiktighet, och ändra dem bara om du har " -"problem." +msgstr "Ändra dessa inställningar med försiktighet, och ändra dem bara om du har problem." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configtunnels_jsp.java:433 msgid "" @@ -6682,11 +6513,7 @@ msgid "" "If you're not using IE, it's likely that your browser is pretending to be " "IE; please configure your browser (or proxy) to use a different User Agent " "string if you'd like to access the console themes." -msgstr "" -"Om du inte använder Internet Explorer (IE), är det troligt att din " -"webbläsare lÃ¥tsas (spoofar) vara IE, du kan konfigurera din webbläsare " -"(eller proxy) att använda en annat User Agent sträng om du vill komma Ã¥t " -"konsol teman." +msgstr "Om du inte använder Internet Explorer (IE), är det troligt att din webbläsare lÃ¥tsas (spoofar) vara IE, du kan konfigurera din webbläsare (eller proxy) att använda en annat User Agent sträng om du vill komma Ã¥t konsol teman." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:379 msgid "Router Console Language" @@ -6696,9 +6523,7 @@ msgstr "Router Konsollens SprÃ¥k" msgid "" "Please contribute to the router console translation project! Contact the " "developers in #i2p-dev on IRC to help." -msgstr "" -"Hjälptill gärna till med att översätta router konsol projektet. Kontakta " -"utvecklarna pÃ¥ IRC i #i2p-dev kanalen för mer information." +msgstr "Hjälptill gärna till med att översätta router konsol projektet. Kontakta utvecklarna pÃ¥ IRC i #i2p-dev kanalen för mer information." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configui_jsp.java:389 msgid "Apply" @@ -6811,61 +6636,58 @@ msgstr "Din webbläsare stödjer inte iFrames." msgid "Click here to continue." msgstr "Klicka för att fortsätta " -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:144 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:146 msgid "Internal Error" msgstr "Internt fel" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:150 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:152 msgid "Configuration" msgstr "Konfiguration" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:157 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:160 msgid "Sorry! There has been an internal error." msgstr "Tyvärr! Det har uppkommit ett internt fel." #. note to translators - both parameters are URLs -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:161 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:164 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:335 #, java-format msgid "Please report bugs on {0} or {1}." msgstr "Vänligen rapportera fel pÃ¥ {0} eller {1}." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:164 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:168 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:339 msgid "" -"You may use the username \"guest\" and password \"guest\" if you do not wish " -"to register." -msgstr "" -"Du kan använda användarnamn \"guest\" och lösenord \"guest\" om du inte vill " -"registrera." +"You may use the username \"guest\" and password \"guest\" if you do not wish" +" to register." +msgstr "Du kan använda användarnamn \"guest\" och lösenord \"guest\" om du inte vill registrera." -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:168 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:170 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:341 msgid "Please include this information in bug reports" msgstr "Var vänlig och inkludera denna information i felrapporter" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:170 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:172 msgid "Error Details" msgstr "Feldetaljer" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:172 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:174 #, java-format msgid "Error {0}" msgstr "Fel {0}" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:191 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:194 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:331 msgid "I2P Version and Running Environment" msgstr "I2P Version och Körmiljö" -#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:232 +#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error500_jsp.java:241 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/logs_jsp.java:390 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." -msgstr "" -"Observera att systeminformation, loggtidsstämplar och loggmeddelanden kan ge " -"ledtrÃ¥dar till din plats, kontrolläs allt du inkluderar i en felrapport." +"clues to your location; please review everything you include in a bug " +"report." +msgstr "Observera att systeminformation, loggtidsstämplar och loggmeddelanden kan ge ledtrÃ¥dar till din plats, kontrolläs allt du inkluderar i en felrapport." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:148 msgid "Page Not Found" @@ -6875,9 +6697,7 @@ msgstr "Sidan kan inte hittas" msgid "" "Sorry! You appear to be requesting a non-existent Router Console page or " "resource." -msgstr "" -"Tyvärr! Det verkar som om du försöker komma Ã¥t en icke-existerande router " -"konsol sida eller resurs." +msgstr "Tyvärr! Det verkar som om du försöker komma Ã¥t en icke-existerande router konsol sida eller resurs." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/error_jsp.java:321 msgid "Error 404" @@ -6901,9 +6721,7 @@ msgstr "I2P prestandagrafer" msgid "" "Click a flag to select a language. Click 'configure language' below to " "change it later." -msgstr "" -"Klicka pÃ¥ en flagga för att välja ett sprÃ¥k. Klicka pÃ¥ \"konfigurera sprÃ¥k\" " -"nedan för att ändra det senare." +msgstr "Klicka pÃ¥ en flagga för att välja ett sprÃ¥k. Klicka pÃ¥ \"konfigurera sprÃ¥k\" nedan för att ändra det senare." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/home_jsp.java:362 msgid "Search I2P" @@ -6975,11 +6793,9 @@ msgstr "Den efterfrÃ¥gade webbapplikationen körs inte" #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/nowebapp_jsp.java:337 msgid "" -"Please visit the <a href=\"/configclients.jsp#webapp\">config clients page</" -"a> to start it." -msgstr "" -"GÃ¥ till sidan <a href=\"/configclients.jsp#webapp\">konfigurera klienter</a> " -"för att starta det." +"Please visit the <a href=\"/configclients.jsp#webapp\">config clients " +"page</a> to start it." +msgstr "GÃ¥ till sidan <a href=\"/configclients.jsp#webapp\">konfigurera klienter</a> för att starta det." #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/peers_jsp.java:136 msgid "peer connections" diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java index 99909b6b30c49c2f1ebbd5454518215402d1c144..5112600e8d89e2df144fa22e549cd2c8937d4636 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java @@ -77,6 +77,8 @@ class Connection { private final SimpleTimer2 _timer; private long _lifetimeBytesSent; + /** TBD for tcpdump-compatible ack output */ + private long _lowestBytesAckedThrough; private long _lifetimeBytesReceived; private long _lifetimeDupMessageSent; private long _lifetimeDupMessageReceived; @@ -974,7 +976,7 @@ class Connection { switch (_options.getInactivityAction()) { case ConnectionOptions.INACTIVITY_ACTION_NOOP: if (_log.shouldLog(Log.WARN)) - _log.warn("Inactivity timer expired, but we aint doin' shit"); + _log.warn("Inactivity timer expired, not doing anything"); break; case ConnectionOptions.INACTIVITY_ACTION_SEND: if (_closeSentOn <= 0 && _closeReceivedOn <= 0) { diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java index c6a271629643576bb7a3c07f64296f9d49bfe3f0..275da2725c43cda35c4af865a791d65825ea09bb 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java @@ -194,6 +194,11 @@ class ConnectionHandler { // between here and PacketHandler, causing the packet to loop forever.... _manager.getPacketHandler().receivePacketDirect(packet, false); } else { + // log it here, just before we kill it - dest will be unknown + if (I2PSocketManagerFull.pcapWriter != null && + _context.getBooleanProperty(I2PSocketManagerFull.PROP_PCAP)) + packet.logTCPDump(null); + // goodbye if (_log.shouldLog(Log.WARN)) _log.warn("Did not find con for queued non-syn packet, dropping: " + packet); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java index 7a9529e5e211352026b4798c3c04dce17a31d0d9..c058c74b4b76beb3894895b5c0f41b7c8f56562b 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java @@ -266,6 +266,10 @@ class ConnectionManager { } con.setReceiveStreamId(receiveId); + // finally, we know enough that we can log the packet with the conn filled in + if (I2PSocketManagerFull.pcapWriter != null && + _context.getBooleanProperty(I2PSocketManagerFull.PROP_PCAP)) + synPacket.logTCPDump(con); try { // This validates the packet, and sets the con's SendStreamID and RemotePeer con.getPacketHandler().receivePacket(synPacket, con); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java index dc16811913c41acd45c2a4a600ae48fee6fa5a14..ec0cd3781494ad85b3112dc938ea9c7c04cf622f 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java @@ -85,6 +85,7 @@ public class I2PSocketManagerFull implements I2PSocketManager { _log.info("Socket manager created. \ndefault options: " + _defaultOptions + "\noriginal properties: " + opts); } + debugInit(context); } /** @@ -314,6 +315,8 @@ public class I2PSocketManagerFull implements I2PSocketManager { } catch (I2PSessionException ise) { _log.warn("Unable to destroy the session", ise); } + if (pcapWriter != null) + pcapWriter.flush(); } } @@ -342,4 +345,25 @@ public class I2PSocketManagerFull implements I2PSocketManager { public void removeDisconnectListener(I2PSocketManager.DisconnectListener lsnr) { _connectionManager.getMessageHandler().removeDisconnectListener(lsnr); } + + private static final Object _pcapInitLock = new Object(); + private static boolean _pcapInitialized; + static PcapWriter pcapWriter; + static final String PROP_PCAP = "i2p.streaming.pcap"; + private static final String PCAP_FILE = "streaming.pcap"; + + private static void debugInit(I2PAppContext ctx) { + if (!ctx.getBooleanProperty(PROP_PCAP)) + return; + synchronized(_pcapInitLock) { + if (!_pcapInitialized) { + try { + pcapWriter = new PcapWriter(ctx, PCAP_FILE); + } catch (java.io.IOException ioe) { + System.err.println("pcap init ioe: " + ioe); + } + _pcapInitialized = true; + } + } + } } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java index a79f67cb751ec11b40d1ac28479d38be6cc33887..e589b6273a06d8a7f5a85d9d0ff86f6307f23978 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java @@ -1,5 +1,6 @@ package net.i2p.client.streaming; +import java.io.IOException; import java.util.Arrays; import net.i2p.I2PAppContext; @@ -16,7 +17,8 @@ import net.i2p.util.Log; * This contains solely the data that goes out on the wire, * including the local and remote port which is embedded in * the I2CP overhead, not in the packet itself. - * For local state saved for outbound packets, see PacketLocal. + * This is the class used for inbound packets. + * For local state saved for outbound packets, see the PacketLocal extension. * * <p> * @@ -709,4 +711,14 @@ class Packet { if (isFlagSet(FLAG_SYNCHRONIZE)) buf.append(" SYN"); return buf.toString(); } + + /** Generate a pcap/tcpdump-compatible format, + * so we can use standard debugging tools. + */ + public void logTCPDump(Connection con) { + try { + I2PSocketManagerFull.pcapWriter.write(this, con); + } catch (IOException ioe) { + } + } } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java index 34a59475e607fe68b5c278240a06f6845810f391..6cdf3dc81aec4cee8bc669015d6cec840e810d8f 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java @@ -108,6 +108,8 @@ class PacketHandler { receiveUnknownCon(packet, sendId, queueIfNoConn); displayPacket(packet, "UNKN", null); } + // Don't log here, wait until we have the conn to make the dumps easier to follow + //((PacketLocal)packet).logTCPDump(true); } private static final SimpleDateFormat _fmt = new SimpleDateFormat("HH:mm:ss.SSS"); @@ -128,6 +130,10 @@ class PacketHandler { } private void receiveKnownCon(Connection con, Packet packet) { + // is this ok here or does it need to be below each packetHandler().receivePacket() ? + if (I2PSocketManagerFull.pcapWriter != null && + _context.getBooleanProperty(I2PSocketManagerFull.PROP_PCAP)) + packet.logTCPDump(con); if (packet.isFlagSet(Packet.FLAG_ECHO)) { if (packet.getSendStreamId() > 0) { if (con.getOptions().getAnswerPings()) @@ -282,8 +288,13 @@ class PacketHandler { } if (packet.isFlagSet(Packet.FLAG_SYNCHRONIZE)) { + // logTCPDump() will be called in ConnectionManager.receiveConnection(), + // which is called by ConnectionHandler.receiveNewSyn(), + // after we have a new conn, which makes the logging better. _manager.getConnectionHandler().receiveNewSyn(packet); } else if (queueIfNoConn) { + // don't call logTCPDump() here, wait for it to find a conn + // We can get here on the 2nd+ packet if the 1st (SYN) packet // is still on the _synQueue in the ConnectionHandler, and // ConnectionManager.receiveConnection() hasn't run yet to put @@ -307,6 +318,10 @@ class PacketHandler { //packet.releasePayload(); _manager.getConnectionHandler().receiveNewSyn(packet); } else { + // log it here, just before we kill it - dest will be unknown + if (I2PSocketManagerFull.pcapWriter != null && + _context.getBooleanProperty(I2PSocketManagerFull.PROP_PCAP)) + packet.logTCPDump(null); // don't queue again (infinite loop!) sendReset(packet); packet.releasePayload(); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java index 748fe19cab77af869950dc52c8659080a9fd9cc9..97666db6f47b73edfdfba6e37e4547db5b7099fb 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java @@ -1,5 +1,6 @@ package net.i2p.client.streaming; +import java.io.IOException; import java.util.Set; import net.i2p.I2PAppContext; @@ -9,6 +10,8 @@ import net.i2p.util.Log; import net.i2p.util.SimpleTimer2; /** + * This is the class used for outbound packets. + * * coordinate local attributes about a packet - send time, ack time, number of * retries, etc. */ @@ -256,4 +259,15 @@ class PacketLocal extends Packet implements MessageOutputStream.WriteStatus { public boolean writeAccepted() { return _acceptedOn > 0 && _cancelledOn <= 0; } public boolean writeFailed() { return _cancelledOn > 0; } public boolean writeSuccessful() { return _ackOn > 0 && _cancelledOn <= 0; } + + /** Generate a pcap/tcpdump-compatible format, + * so we can use standard debugging tools. + */ + public void logTCPDump() { + try { + I2PSocketManagerFull.pcapWriter.write(this); + } catch (IOException ioe) { + _log.warn("pcap write ioe: " + ioe); + } + } } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java index a41ecd01272af06658b281046f8841d9fd1a2cf3..4764c9abfa7fa89c12a6c5b400c8168bb0bb997e 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java @@ -169,6 +169,9 @@ class PacketQueue { Connection c = packet.getConnection(); String suffix = (c != null ? "wsize " + c.getOptions().getWindowSize() + " rto " + c.getOptions().getRTO() : null); _connectionManager.getPacketHandler().displayPacket(packet, "SEND", suffix); + if (I2PSocketManagerFull.pcapWriter != null && + _context.getBooleanProperty(I2PSocketManagerFull.PROP_PCAP)) + ((PacketLocal)packet).logTCPDump(); } if ( (packet.getSequenceNum() == 0) && (!packet.isFlagSet(Packet.FLAG_SYNCHRONIZE)) ) { diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PcapWriter.java b/apps/streaming/java/src/net/i2p/client/streaming/PcapWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..3bc119d817671d4ad241d7cba9d0113f437ed514 --- /dev/null +++ b/apps/streaming/java/src/net/i2p/client/streaming/PcapWriter.java @@ -0,0 +1,382 @@ +package net.i2p.client.streaming; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import net.i2p.I2PAppContext; +import net.i2p.data.DataFormatException; +import net.i2p.data.DataHelper; +import net.i2p.data.Hash; + +/** + * Write a standard pcap file with a "TCP" packet that can be analyzed with + * standard tools such as wireshark. + * + * The source and dest "IP" and "port" are fake but are generated from the + * hashes of the Destinations and stream ID's, so they will be consistent. + * The local "IP" will always be of the form 127.0.x.y + * Initial IP for a conn will be 127.0.0.0 for the local and 0.0.0.0 for the remote. + * + * Reference: http://wiki.wireshark.org/Development/LibpcapFileFormat + * + * The Jpcap library http://netresearch.ics.uci.edu/kfujii/jpcap/doc/ + * was close to what I want, but it requires you to instantiate a "captor" + * before you can write a file, and it requires a native lib to do so, + * and even then, it only wants to read the file, not write it. + * + * We even calculate a correct TCP header checksum to keep the tools happy. + * We don't, however, convert I2P-style sequence numbers, which count packets, + * to TCP-style byte counts. We don't track a lowest-acked-thru byte count atm, really. + * + * We do represent the window size in bytes though, so that's real confusing. + * + * This is designed to debug the streaming lib, but there are not log calls for every + * single packet - pings and pongs, and various odd cases where received packets + * are dropped, are not logged. + * + * Yes we could dump it natively and write a wireshark dissector. That sounds hard. + * And we wouldn't get the TCP stream analysis built into the tools. + * + * @author zzz + */ +public class PcapWriter { + + /** big-endian, see file format ref - 24 bytes */ + private static final byte[] FILE_HEADER = { (byte) 0xa1, (byte) 0xb2, (byte) 0xc3, (byte) 0xd4, + 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, (byte) 0xff, (byte) 0xff, 0, 0, 0, 1 }; + + /** dummy macs and ethertype */ + private static final byte[] MAC_HEADER = { 1, 2, 3, 4, 5, 6, + 1, 2, 3, 4, 5, 6, + (byte) 0x80, 0 }; + private static final byte[] IP_HEADER_1 = { 0x45, 0 }; // the length goes after this + private static final byte[] IP_HEADER_2 = { 0x12, 0x34, 0x40, 0, 64, 6 }; // ID, flags, TTL and TCP + private static final byte[] UNK_IP = { (byte) 0xff, 0, 0, 0}; + private static final byte[] MY_UNK_IP = {127, 0, 0, 0}; + /** max # of streaming lib payload bytes to dump */ + private static final int MAX_PAYLOAD_BYTES = 10; + + /** options - give our custom ones some mnemonics */ + private static final int MAX_OPTION_LEN = 40; + private static final byte OPTION_END = 0; + private static final byte OPTION_MSS = 2; + private static final byte OPTION_PING = 6; + private static final byte OPTION_PONG = 7; + private static final byte OPTION_SIGREQ = 0x55; + private static final byte OPTION_SIG = 0x56; + private static final byte OPTION_RDELAY = (byte) 0xde; + private static final byte OPTION_ODELAY = (byte) 0xd0; + private static final byte OPTION_FROM = (byte) 0xf0; + private static final byte OPTION_NACK = (byte) 0xac; + + + private final OutputStream _fos; + private final I2PAppContext _context; + + public PcapWriter(I2PAppContext ctx, String file) throws IOException { + _context = ctx; + File f = new File(ctx.getLogDir(), file); + //if (f.exists()) { + // _fos = new FileOutputStream(f, true); + //} else { + _fos = new BufferedOutputStream(new FileOutputStream(f), 64*1024); + _fos.write(FILE_HEADER); + //} + } + + public void close() { + try { + _fos.close(); + } catch (IOException ioe) {} + } + + public void flush() { + try { + _fos.flush(); + } catch (IOException ioe) {} + } + + /** + * For outbound packets + */ + public void write(PacketLocal pkt) throws IOException { + try { + wrt(pkt, pkt.getConnection(), false); + } catch (DataFormatException dfe) { + dfe.printStackTrace(); + throw new IOException(dfe.toString()); + } + } + + /** + * For inbound packets + * @param con may be null + */ + public void write(Packet pkt, Connection con) throws IOException { + try { + wrt(pkt, con, true); + } catch (DataFormatException dfe) { + dfe.printStackTrace(); + throw new IOException(dfe.toString()); + } + } + + /** + * @param con may be null + */ + private synchronized void wrt(Packet pkt, Connection con, boolean isInbound) throws IOException, DataFormatException { + int includeLen = Math.min(MAX_PAYLOAD_BYTES, pkt.getPayloadSize()); + + // option block + Options opts = new Options(); + if (pkt.isFlagSet(Packet.FLAG_MAX_PACKET_SIZE_INCLUDED)) + opts.add(OPTION_MSS, 2, pkt.getOptionalMaxSize()); + if (pkt.isFlagSet(Packet.FLAG_DELAY_REQUESTED)) + opts.add(OPTION_ODELAY, 2, pkt.getOptionalDelay()); + if (pkt.getResendDelay() > 0) + opts.add(OPTION_RDELAY, 1, pkt.getResendDelay()); + if (pkt.isFlagSet(Packet.FLAG_SIGNATURE_REQUESTED)) + opts.add(OPTION_SIGREQ); + if (pkt.isFlagSet(Packet.FLAG_SIGNATURE_INCLUDED)) + opts.add(OPTION_SIG); + if (pkt.isFlagSet(Packet.FLAG_FROM_INCLUDED)) + opts.add(OPTION_FROM); + if (pkt.isFlagSet(Packet.FLAG_ECHO)) { + if (pkt.getSendStreamId() > 0) + opts.add(OPTION_PING); + else + opts.add(OPTION_PONG); + } + if (pkt.getNacks() != null) + opts.add(OPTION_NACK, 1, pkt.getNacks().length); + int optLen = opts.size(); + byte options[] = opts.getData(); + + // PCAP Header + long now; + if (isInbound) + now = _context.clock().now(); + else + now = ((PacketLocal)pkt).getLastSend(); + DataHelper.writeLong(_fos, 4, now / 1000); + DataHelper.writeLong(_fos, 4, 1000 * (now % 1000)); + DataHelper.writeLong(_fos, 4, 54 + optLen + includeLen); // 14 MAC + 20 IP + 20 TCP + DataHelper.writeLong(_fos, 4, 58 + optLen + pkt.getPayloadSize()); // 54 + MAC checksum + + // MAC Header 14 bytes + _fos.write(MAC_HEADER); + + // IP 20 bytes total + // IP Header 12 bytes + int length = 20 + 20 + optLen + pkt.getPayloadSize(); + _fos.write(IP_HEADER_1); + DataHelper.writeLong(_fos, 2, length); // total IP length + _fos.write(IP_HEADER_2); + + // src and dst IP 8 bytes + // make our side always start with 127.0.x.x + byte[] srcAddr, dstAddr; + if (isInbound) { + if (con != null) { + dstAddr = new byte[4]; + dstAddr[0] = 127; + dstAddr[1] = 0; + System.arraycopy(con.getSession().getMyDestination().calculateHash().getData(), 0, dstAddr, 2, 2); + } else + dstAddr = MY_UNK_IP; + + if (con != null && con.getRemotePeer() != null) + srcAddr = con.getRemotePeer().calculateHash().getData(); + else if (pkt.getOptionalFrom() != null) + srcAddr = pkt.getOptionalFrom().calculateHash().getData(); + else + srcAddr = UNK_IP; + } else { + if (con != null) { + srcAddr = new byte[4]; + srcAddr[0] = 127; + srcAddr[1] = 0; + System.arraycopy(con.getSession().getMyDestination().calculateHash().getData(), 0, srcAddr, 2, 2); + } else + srcAddr = MY_UNK_IP; + + if (con != null && con.getRemotePeer() != null) + dstAddr = con.getRemotePeer().calculateHash().getData(); + else + dstAddr = UNK_IP; + } + + // calculate and output the correct IP header checksum to keep the analyzers happy + int checksum = length; + checksum = update(checksum, IP_HEADER_1); + checksum = update(checksum, IP_HEADER_2); + checksum = update(checksum, srcAddr, 4); + checksum = update(checksum, dstAddr, 4); + DataHelper.writeLong(_fos, 2, checksum ^ 0xffff); + + // IPs + _fos.write(srcAddr, 0, 4); + _fos.write(dstAddr, 0, 4); + + // TCP header 20 bytes total + // src and dst port 4 bytes + // the rcv ID is the source, and the send ID is the dest. + DataHelper.writeLong(_fos, 2, pkt.getReceiveStreamId() & 0xffff); + DataHelper.writeLong(_fos, 2, pkt.getSendStreamId() & 0xffff); + + // seq and acks 8 bytes + long seq; + // wireshark wants the seq # in a SYN packet to be one less than the first data packet, + // so let's set it to 0. ??????????? + if (pkt.isFlagSet(Packet.FLAG_SYNCHRONIZE)) + seq = 0xffffffff; + else + seq = pkt.getSequenceNum(); + long acked = 0; + if (con != null) { + if (isInbound) + acked = getLowestAckedThrough(pkt, con); + else + acked = getLowestAckedThrough(pkt, con); + } + DataHelper.writeLong(_fos, 4, pkt.getSequenceNum()); + DataHelper.writeLong(_fos, 4, acked); + + // offset and flags 2 bytes + int flags = 0; + if (pkt.isFlagSet(Packet.FLAG_CLOSE)) + flags |= 0x01; + if (pkt.isFlagSet(Packet.FLAG_SYNCHRONIZE)) + flags |= 0x02; + if (pkt.isFlagSet(Packet.FLAG_RESET)) + flags |= 0x04; + if (!pkt.isFlagSet(Packet.FLAG_NO_ACK)) + flags |= 0x10; + // offset byte + int osb = (5 + (optLen / 4)) << 4; + DataHelper.writeLong(_fos, 1, osb); // 5 + optLen/4 32-byte words + DataHelper.writeLong(_fos, 1, flags); + + // window size 2 bytes + long window = ConnectionOptions.INITIAL_WINDOW_SIZE; + long msgSize = ConnectionOptions.DEFAULT_MAX_MESSAGE_SIZE; + if (con != null) { + if (isInbound) { + // try to represent what he thinks the window is, we don't really know + // this isn't really right, the lastsendid can get way ahead + window = acked + con.getOptions().getWindowSize() - con.getLastSendId(); + } else { + // following is from ConnectionPacketHandler + long ready = con.getInputStream().getHighestReadyBockId(); + int available = con.getOptions().getInboundBufferSize() - con.getInputStream().getTotalReadySize(); + int allowedBlocks = available/con.getOptions().getMaxMessageSize(); + window = (ready + allowedBlocks) - pkt.getSequenceNum(); + } + if (window < 0) + window = 0; + msgSize = con.getOptions().getMaxMessageSize(); + } + // messages -> bytes + window *= msgSize; + // for now we don't spoof window scaling + if (window > 65535) + window = 65535; + DataHelper.writeLong(_fos, 2, window); + + // checksum and urgent pointer 4 bytes + DataHelper.writeLong(_fos, 4, 0); + + // TCP option block + if (optLen > 0) + _fos.write(options, 0, optLen); + + // some data + if (includeLen > 0) + _fos.write(pkt.getPayload().getData(), 0, includeLen); + if (pkt.isFlagSet(Packet.FLAG_CLOSE)) + _fos.flush(); + } + + /** + * copied from Connection.ackPackets() + * + * This is really nasty, but if the packet has an ACK, then we + * find the lowest NACK, and we are acked thru the lowest - 1. + * + * If there is no ACK, then we could use the conn's highest acked through, + * for an inbound packet (containing acks for outbound packets) + * But it appears that all packets have ACKs, as FLAG_NO_ACK is never set. + * + * To do: Add the SACK option to the TCP header. + */ + private static long getLowestAckedThrough(Packet pkt, Connection con) { + long nacks[] = pkt.getNacks(); + long lowest = pkt.getAckThrough(); // can return -1 but we increment below + if (nacks != null) { + for (int i = 0; i < nacks.length; i++) { + if (nacks[i] - 1 < lowest) + lowest = nacks[i] - 1; + } + } + // I2P ack is of current seq number; TCP is next expected seq number + // should be >= 0 now + lowest++; + // just in case + return Math.max(0, lowest); + } + + private static class Options { + private final byte[] _b; + private int _len; + + public Options() { + _b = new byte[MAX_OPTION_LEN]; + } + + /** 40 bytes long, caller must use size() to get actual size */ + public byte[] getData() { return _b; } + + /** rounded to next 4 bytes */ + public int size() { return ((_len + 3) / 4) * 4; } + + public void add(byte type) { + add(type, 0, 0); + } + + public void add(byte type, int datalen, int data) { + // no room? drop silently + if (_len + datalen + 2 > MAX_OPTION_LEN) + return; + _b[_len++] = type; + _b[_len++] = (byte) (datalen + 2); + if (datalen > 0) { + for (int i = datalen - 1; i >= 0; i--) + _b[_len++] = (byte) ((data >> (i * 8)) & 0xff); + } + // end-of-options mark + if (_len < MAX_OPTION_LEN) + _b[_len] = OPTION_END; + } + } + + /** one's complement 2-byte checksum update */ + private static int update(int checksum, byte[] b) { + return update(checksum, b, b.length); + } + + private static int update(int checksum, byte[] b, int len) { + int rv = checksum; + for (int i = 0; i < len; i += 2) { + rv += ((b[i] << 8) & 0xff00) | (b[i+1] & 0xff); + if (rv > 0xffff) { + rv &= 0xffff; + rv++; + } + } + return rv; + } +} diff --git a/apps/susidns/locale/messages_pt.po b/apps/susidns/locale/messages_pt.po new file mode 100644 index 0000000000000000000000000000000000000000..ee6a8880ea5f1509d1d96c7668aedf85541188d0 --- /dev/null +++ b/apps/susidns/locale/messages_pt.po @@ -0,0 +1,704 @@ +# I2P +# Copyright (C) 2009 The I2P Project +# This file is distributed under the same license as the susidns package. +# To contribute translations, see http://www.i2p2.de/newdevelopers +# +# Translators: +# <rutweiller@hotmail.com>, 2012. +msgid "" +msgstr "" +"Project-Id-Version: I2P\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-10-19 07:45+0000\n" +"PO-Revision-Date: 2012-10-17 23:34+0000\n" +"Last-Translator: Ruthein <rutweiller@hotmail.com>\n" +"Language-Team: Portuguese (http://www.transifex.com/projects/p/I2P/language/" +"pt/)\n" +"Language: pt\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" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:130 +#, java-format +msgid "Host name \"{0}\" contains illegal character {1}" +msgstr "" + +#: ../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 +#, java-format +msgid "Host name cannot start with \"{0}\"" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:147 +#: ../src/java/src/i2p/susi/dns/AddressBean.java:149 +#, java-format +msgid "Host name cannot end with \"{0}\"" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:154 +#, java-format +msgid "Host name cannot contain \"{0}\"" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:157 +#, java-format +msgid "" +"Host name \"{0}\" requires conversion to ASCII but the conversion library is " +"unavailable in this JVM" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:218 +msgid "None" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:226 +msgid "Hashcash" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:228 +msgid "Hidden" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:230 +msgid "Signed" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressBean.java:232 +#, java-format +msgid "Type {0}" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:202 +#, java-format +msgid "One result for search within filtered list." +msgid_plural "{0} results for search within filtered list." +msgstr[0] "" +msgstr[1] "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:206 +#, java-format +msgid "Filtered list contains 1 entry." +msgid_plural "Fltered list contains {0} entries." +msgstr[0] "" +msgstr[1] "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:211 +#, java-format +msgid "One result for search." +msgid_plural "{0} results for search." +msgstr[0] "" +msgstr[1] "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:220 +#, java-format +msgid "Address book contains 1 entry." +msgid_plural "Address book contains {0} entries." +msgstr[0] "" +msgstr[1] "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:236 +#, java-format +msgid "Showing {0} of {1}" +msgstr "Showing {0} of {1}" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:257 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:227 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:412 +msgid "Add" +msgstr "Add" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:257 +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:268 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:227 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:239 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:410 +msgid "Replace" +msgstr "Replace" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:267 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:238 +#, java-format +msgid "Host name {0} is already in address book, unchanged." +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:269 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:240 +#, java-format +msgid "" +"Host name {0} is already in address book with a different destination. Click " +"\"Replace\" to overwrite." +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:282 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:253 +#, java-format +msgid "Destination added for {0}." +msgstr "Destination added for {0}." + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:284 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:255 +#, java-format +msgid "Destination changed for {0}." +msgstr "Destination changed for {0}." + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:286 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:257 +msgid "Warning - host name does not end with \".i2p\"" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:291 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:265 +msgid "Invalid Base 64 destination." +msgstr "Invalid destination Base 64 ." + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:297 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:271 +#, java-format +msgid "Invalid host name \"{0}\"." +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:300 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:274 +msgid "Please enter a host name and destination" +msgstr "Please enter a host name and destination" + +#. clear search when deleting +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:304 +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:325 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:278 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:303 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:274 +msgid "Delete Entry" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:304 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:278 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:351 +msgid "Delete Selected" +msgstr "Delete Selected" + +#. parameter is a host name +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:318 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:295 +#, java-format +msgid "Destination {0} deleted." +msgstr "Destination {0} deleted." + +#. parameter will always be >= 2 +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:321 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:298 +#, java-format +msgid "1 destination deleted." +msgid_plural "{0} destinations deleted." +msgstr[0] "" +msgstr[1] "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:323 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:300 +msgid "No entries selected to delete." +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:331 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:307 +msgid "Address book saved." +msgstr "" + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:334 +msgid "ERROR: Could not write addressbook file." +msgstr "ERROR: Could not write addressbook file." + +#: ../src/java/src/i2p/susi/dns/AddressbookBean.java:339 +#: ../src/java/src/i2p/susi/dns/ConfigBean.java:148 +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:311 +#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:128 +msgid "" +"Invalid form submission, probably because you used the \"back\" or \"reload" +"\" button on your browser. Please resubmit." +msgstr "" +"Invalid form submission, probably because you used the \"back\" or \"reload" +"\" button on your browser. Please resubmit." + +#: ../src/java/src/i2p/susi/dns/ConfigBean.java:139 +#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:103 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:153 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:145 +msgid "Save" +msgstr "Save" + +#: ../src/java/src/i2p/susi/dns/ConfigBean.java:141 +msgid "Configuration saved." +msgstr "Configuration saved." + +#: ../src/java/src/i2p/susi/dns/ConfigBean.java:142 +#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:122 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:151 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:143 +msgid "Reload" +msgstr "Reload" + +#: ../src/java/src/i2p/susi/dns/ConfigBean.java:144 +msgid "Configuration reloaded." +msgstr "Configuration reloaded." + +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:101 +#, java-format +msgid "{0} address book in {1} database" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:248 +msgid "Manually added via SusiDNS" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:262 +#, java-format +msgid "Failed to add Destination for {0} to naming service {1}" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/NamingServiceBean.java:286 +#, java-format +msgid "Failed to delete Destination for {0} from naming service {1}" +msgstr "" + +#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:115 +msgid "" +"Subscriptions saved, updating addressbook from subscription sources now." +msgstr "" +"Subscriptions saved, updating addressbook from subscription sources now." + +#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:120 +msgid "Subscriptions saved." +msgstr "Subscriptions saved." + +#: ../src/java/src/i2p/susi/dns/SubscriptionsBean.java:124 +msgid "Subscriptions reloaded." +msgstr "Subscriptions reloaded." + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:125 +msgid "address book" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:131 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:147 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:125 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:141 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:116 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:132 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:130 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:117 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:133 +msgid "Overview" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:133 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:127 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:118 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:116 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:119 +msgid "Address books" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:135 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:129 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:120 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:118 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:121 +msgid "private" +msgstr "private" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:137 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:131 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:122 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:120 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:123 +msgid "master" +msgstr "master" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:139 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:133 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:124 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:122 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:125 +msgid "router" +msgstr "router" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:141 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:135 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:126 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:124 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:127 +msgid "published" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:143 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:137 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:128 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:126 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:129 +msgid "Subscriptions" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:145 +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:139 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:130 +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:128 +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:131 +msgid "Configuration" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:149 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:134 +msgid "Address book" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:154 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:139 +msgid "Storage" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:172 +msgid "Filter" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:175 +msgid "other" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:177 +msgid "all" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:191 +msgid "Current filter" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:196 +msgid "clear filter" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:209 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:213 +msgid "Search" +msgstr "Search" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:246 +msgid "Name" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:248 +msgid "Links" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:250 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:404 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:266 +msgid "Destination" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:286 +msgid "Mark for deletion" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:307 +msgid "Base 32 address" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:311 +msgid "More information on this entry" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:314 +msgid "details" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:349 +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:408 +msgid "Cancel" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:383 +msgid "This address book is empty." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:398 +msgid "Add new destination" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/addressbook_jsp.java:400 +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:165 +msgid "Host Name" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:119 +msgid "configuration" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:155 +msgid "Hints" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:157 +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)." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:159 +msgid "" +"If you want to manually add lines to an addressbook, add them to the private " +"or master addressbooks." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:160 +msgid "" +"The router addressbook and the published addressbook are updated by the " +"addressbook application." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:162 +msgid "" +"When you publish your addressbook, ALL destinations from the master and " +"router addressbooks appear there." +msgstr "" +"When you publish your addressbook, ALL destinations from the master and " +"router addressbooks appear there." + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:163 +msgid "" +"Use the private addressbook for private destinations, these are not " +"published." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:165 +msgid "Options" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:167 +msgid "File containing the list of subscriptions URLs (no need to change)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:169 +msgid "Update interval in hours" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:171 +msgid "" +"Your public hosts.txt file (choose a path within your webserver document " +"root)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:173 +msgid "Your hosts.txt (don't change)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:175 +msgid "Your personal addressbook, these hosts will be published" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:177 +msgid "Your private addressbook, it is never published" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:179 +msgid "Port for your eepProxy (no need to change)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:181 +msgid "Hostname for your eepProxy (no need to change)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:183 +msgid "Whether to update the published addressbook" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:185 +msgid "" +"File containing the etags header from the fetched subscription URLs (no need " +"to change)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:187 +msgid "" +"File containing the modification timestamp for each fetched subscription URL " +"(no need to change)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:189 +msgid "File to log activity to (change to /dev/null if you like)" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/config_jsp.java:191 +msgid "Name of the theme to use (defaults to 'light')" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:110 +msgid "addressbook" +msgstr "addressbook" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:181 +msgid "Encoded Name" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:197 +msgid "Base 32 Address" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:207 +msgid "Base 64 Hash" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:213 +msgid "Address Helper" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:220 +msgid "link" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:224 +msgid "Public Key" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:226 +msgid "ElGamal 2048 bit" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:230 +msgid "Signing Key" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:232 +msgid "DSA 1024 bit" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:236 +msgid "Certificate" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:242 +msgid "Added Date" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:248 +msgid "Source" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:254 +msgid "Last Modified" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/details_jsp.java:260 +msgid "Notes" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:110 +msgid "Introduction" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:132 +msgid "What is the addressbook?" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:134 +msgid "The addressbook application is part of your I2P installation." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:135 +msgid "" +"It regularly updates your hosts.txt file from distributed sources or " +"\"subscriptions\"." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:137 +msgid "" +"In the default configuration, the address book is only subscribed to www." +"i2p2.i2p." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:138 +msgid "" +"Subscribing to additional sites is easy, just add them to your <a href=" +"\"subscriptions\">subscriptions</a> file." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:140 +msgid "" +"For more information on naming in I2P, see <a href=\"http://www.i2p2.i2p/" +"naming.html\">the overview on www.i2p2.i2p</a>." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:142 +msgid "How does the addressbook application work?" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:144 +msgid "" +"The addressbook application regularly polls your subscriptions and merges " +"their content into your \"router\" address book." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:145 +msgid "" +"Then it merges your \"master\" address book into the router address book as " +"well." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:146 +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." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:148 +msgid "" +"The router also uses a private address book (not shown in the picture), " +"which is not merged or published." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:149 +msgid "" +"Hosts in the private address book can be accessed by you but their addresses " +"are never distributed to others." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/index_jsp.java:150 +msgid "" +"The private address book can also be used for aliases of hosts in your other " +"address books." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:111 +msgid "subscriptions" +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:147 +msgid "The subscription file contains a list of i2p URLs." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:148 +msgid "" +"The addressbook application regularly checks this list for new eepsites." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:149 +msgid "Those URLs refer to published hosts.txt files." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:150 +msgid "" +"The default subscription is the hosts.txt from www.i2p2.i2p, which is " +"updated infrequently." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:151 +msgid "" +"So it is a good idea to add additional subscriptions to sites that have the " +"latest addresses." +msgstr "" + +#: ../src/tmp/i2p/susi/dns/jsp/subscriptions_jsp.java:153 +msgid "See the FAQ for a list of subscription URLs." +msgstr "" diff --git a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java index 883184ee116c0ad48e443aacc205769fe3f8fe02..1e0f60ceef61adbb51fe1bf1de21c0b2d15aa296 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/AddressbookBean.java @@ -119,10 +119,10 @@ public class AddressbookBean extends BaseBean } public String getBook() { - if( book == null || ( book.compareToIgnoreCase( "master" ) != 0 && - book.compareToIgnoreCase( "router" ) != 0 && - book.compareToIgnoreCase( "private" ) != 0 && - book.compareToIgnoreCase( "published" ) != 0 )) + if( book == null || ( !book.equalsIgnoreCase( "master" ) && + !book.equalsIgnoreCase( "router" ) && + !book.equalsIgnoreCase( "private" ) && + !book.equalsIgnoreCase( "published" ))) book = "router"; return book; @@ -252,7 +252,8 @@ public class AddressbookBean extends BaseBean String message = ""; if( action != null ) { - if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) { + if (_context.getBooleanProperty(PROP_PW_ENABLE) || + (serial != null && serial.equals(lastSerial))) { boolean changed = false; if (action.equals(_("Add")) || action.equals(_("Replace"))) { if( addressbook != null && hostname != null && destination != null ) { @@ -336,7 +337,9 @@ public class AddressbookBean extends BaseBean } } else { - message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit."); + message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.") + + ' ' + + _("If the problem persists, verify that you have cookies enabled in your browser."); } } @@ -364,22 +367,22 @@ public class AddressbookBean extends BaseBean public boolean isMaster() { - return getBook().compareToIgnoreCase( "master" ) == 0; + return getBook().equalsIgnoreCase("master"); } public boolean isRouter() { - return getBook().compareToIgnoreCase( "router" ) == 0; + return getBook().equalsIgnoreCase("router"); } public boolean isPublished() { - return getBook().compareToIgnoreCase( "published" ) == 0; + return getBook().equalsIgnoreCase("published"); } public boolean isPrivate() { - return getBook().compareToIgnoreCase( "private" ) == 0; + return getBook().equalsIgnoreCase("private"); } public void setFilter(String filter) { - if( filter != null && ( filter.length() == 0 || filter.compareToIgnoreCase( "none" ) == 0 ) ) { + if( filter != null && ( filter.length() == 0 || filter.equalsIgnoreCase("none"))) { filter = null; search = null; } diff --git a/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java b/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java index 58950a923b9cf54bd6d0a9b9dc999f961dadd564..04d8cc2045720b80943dfcda0acc7d679bdbe73f 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/BaseBean.java @@ -14,7 +14,7 @@ import net.i2p.I2PAppContext; */ public class BaseBean { - private final I2PAppContext _context; + protected final I2PAppContext _context; protected final Properties properties; private long configLastLoaded = 0; @@ -26,6 +26,7 @@ public class BaseBean public static final String PROP_THEME_NAME = "theme"; public static final String DEFAULT_THEME = "light"; public static final String BASE_THEME_PATH = "/themes/susidns/"; + public static final String PROP_PW_ENABLE = "routerconsole.auth.enable"; public BaseBean() { diff --git a/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java b/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java index ee65753564a0ff961f9432664fdfd5c8444b57bd..55e76f08d3925468d0ca0dd0c97aef0dc8fc741e 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/ConfigBean.java @@ -135,7 +135,8 @@ public class ConfigBean implements Serializable { public String getMessages() { String message = ""; if( action != null ) { - if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) { + if (I2PAppContext.getGlobalContext().getBooleanProperty(BaseBean.PROP_PW_ENABLE) || + (serial != null && serial.equals(lastSerial))) { if(action.equals(_("Save"))) { save(); message = _("Configuration saved."); @@ -145,7 +146,9 @@ public class ConfigBean implements Serializable { } } else { - message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit."); + message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.") + + ' ' + + _("If the problem persists, verify that you have cookies enabled in your browser."); } } if( message.length() > 0 ) diff --git a/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java b/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java index eb1e1d48dbe92c6e8206d7a6d6a840e6e38d5ac9..bb9cf4e7cb3181775c48cc745e175db970ca7a7b 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/NamingServiceBean.java @@ -28,7 +28,6 @@ import java.util.Locale; import java.util.Map; import java.util.Properties; -import net.i2p.I2PAppContext; import net.i2p.client.naming.NamingService; import net.i2p.data.DataFormatException; import net.i2p.data.Destination; @@ -128,7 +127,7 @@ public class NamingServiceBean extends AddressbookBean /** @return the NamingService for the current file name, or the root NamingService */ private NamingService getNamingService() { - NamingService root = I2PAppContext.getGlobalContext().namingService(); + NamingService root = _context.namingService(); NamingService rv = searchNamingService(root, getFileName()); return rv != null ? rv : root; } @@ -173,7 +172,7 @@ public class NamingServiceBean extends AddressbookBean for (Map.Entry<String, Destination> entry : results.entrySet()) { String name = entry.getKey(); if( filter != null && filter.length() > 0 ) { - if( filter.compareTo( "0-9" ) == 0 ) { + if (filter.equals("0-9")) { char first = name.charAt(0); if( first < '0' || first > '9' ) continue; @@ -222,7 +221,8 @@ public class NamingServiceBean extends AddressbookBean Properties nsOptions = new Properties(); // only blockfile needs this nsOptions.setProperty("list", getFileName()); - if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) { + if (_context.getBooleanProperty(PROP_PW_ENABLE) || + (serial != null && serial.equals(lastSerial))) { boolean changed = false; if (action.equals(_("Add")) || action.equals(_("Replace"))) { if(hostname != null && destination != null) { @@ -243,7 +243,7 @@ public class NamingServiceBean extends AddressbookBean Destination dest = new Destination(destination); if (oldDest != null) { nsOptions.putAll(outProperties); - nsOptions.setProperty("m", Long.toString(I2PAppContext.getGlobalContext().clock().now())); + nsOptions.setProperty("m", Long.toString(_context.clock().now())); } nsOptions.setProperty("s", _("Manually added via SusiDNS")); boolean success = getNamingService().put(host, dest, nsOptions); @@ -308,7 +308,9 @@ public class NamingServiceBean extends AddressbookBean } } else { - message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit."); + message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.") + + ' ' + + _("If the problem persists, verify that you have cookies enabled in your browser."); } } diff --git a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java index 8675613c5c2a62df586a6efc04baf49f2ddab45f..d748a2f7807dad5730185ed1b934304581a76684 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/SubscriptionsBean.java @@ -33,7 +33,6 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.Properties; -import net.i2p.I2PAppContext; import net.i2p.util.SecureFileOutputStream; public class SubscriptionsBean extends BaseBean @@ -99,7 +98,8 @@ public class SubscriptionsBean extends BaseBean public String getMessages() { String message = ""; if( action != null ) { - if( lastSerial != null && serial != null && serial.compareTo( lastSerial ) == 0 ) { + if (_context.getBooleanProperty(PROP_PW_ENABLE) || + (serial != null && serial.equals(lastSerial))) { if (action.equals(_("Save"))) { save(); /******* @@ -115,7 +115,7 @@ public class SubscriptionsBean extends BaseBean message = _("Subscriptions saved, updating addressbook from subscription sources now."); // + "<img height=\"1\" width=\"1\" alt=\"\" " + // "src=\"/addressbook/?wakeup=1&nonce=" + nonce + "\">"; - I2PAppContext.getGlobalContext().namingService().requestUpdate(null); + _context.namingService().requestUpdate(null); } else { message = _("Subscriptions saved."); } @@ -125,7 +125,9 @@ public class SubscriptionsBean extends BaseBean } } else { - message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit."); + message = _("Invalid form submission, probably because you used the \"back\" or \"reload\" button on your browser. Please resubmit.") + + ' ' + + _("If the problem persists, verify that you have cookies enabled in your browser."); } } if( message.length() > 0 ) diff --git a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java index dfbe90d20b9ea7d73f1164effccd46797b2eba94..bbe5f8ffae19684c74796ec121e63d0ffb42fabe 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java +++ b/apps/susimail/src/src/i2p/susi/webmail/pop3/POP3MailBox.java @@ -42,7 +42,7 @@ public class POP3MailBox { private String host = null, user = null, pass = null; - private String lastLine = "-ERR", lastError = null; + private String lastLine = "-ERR No response from server", lastError = null; private int port = 0, mails = 0, read = 0; diff --git a/build.xml b/build.xml index 82291712bb37c0d0edbe3a58b989497093d4b71a..dd9d5bbf82def0c256a3bb625edfecb081bcbe64 100644 --- a/build.xml +++ b/build.xml @@ -1060,7 +1060,7 @@ --> </target> - <target name="prepupdateSmall" depends="buildSmall, prepupdateRouter, prepthemeupdates"> + <target name="prepupdateSmall" depends="buildSmall, prepupdateRouter, prepjupdatefixes, prepthemeupdates"> <copy file="build/i2ptunnel.jar" todir="pkg-temp/lib/" /> <copy file="build/mstreaming.jar" todir="pkg-temp/lib/" /> <copy file="build/streaming.jar" todir="pkg-temp/lib/" /> @@ -1116,7 +1116,7 @@ </target> <!-- Jetty 6 I2P logging addons, not really fixes --> - <target name="prepjupdatefixes" depends="prepupdate, buildWEB"> + <target name="prepjupdatefixes" depends="buildWEB"> <copy file="build/jetty-i2p.jar" todir="pkg-temp/lib/" /> </target> diff --git a/core/java/src/net/i2p/CoreVersion.java b/core/java/src/net/i2p/CoreVersion.java index 33be4db7098c9b442b1fc746141e09755a599447..dd2111bd4e3228e69f556527f7a78e0b09cbeef2 100644 --- a/core/java/src/net/i2p/CoreVersion.java +++ b/core/java/src/net/i2p/CoreVersion.java @@ -16,7 +16,7 @@ package net.i2p; public class CoreVersion { /** deprecated */ public final static String ID = "Monotone"; - public final static String VERSION = "0.9.2"; + public final static String VERSION = "0.9.3"; public static void main(String args[]) { System.out.println("I2P Core version: " + VERSION); diff --git a/core/java/src/net/i2p/app/ClientApp.java b/core/java/src/net/i2p/app/ClientApp.java new file mode 100644 index 0000000000000000000000000000000000000000..8900630bcf532e41b32bb5503b2a5cc085f29dcc --- /dev/null +++ b/core/java/src/net/i2p/app/ClientApp.java @@ -0,0 +1,58 @@ +package net.i2p.app; + +import net.i2p.I2PAppContext; + +/** + * If a class started via clients.config implements this interface, + * it will be used to manage the client, instead of starting with main() + * + * Clients implementing this interface MUST provide the following constructor: + * + * public MyClientApp(I2PAppContext context, ClientAppManager listener, String[] args) {...} + * + * All parameters are non-null. + * This constructor is for instantiation only. + * Do not take a long time. Do not block. Never start threads or processes in it. + * The ClientAppState of the returned object must be INITIALIZED, + * or else throw something. + * The startup() method will be called next. + * + * Never ever hold a static reference to the context or anything derived from it. + * + * @since 0.9.4 + */ +public interface ClientApp { + + /** + * Do not take a long time. Do not block. Start threads here if necessary. + * Client must call ClientAppManager.notify() at least once within this + * method to change the state from INITIALIZED to something else. + * Will not be called multiple times on the same object. + */ + public void startup() throws Throwable; + + /** + * Do not take a long time. Do not block. Use a thread if necessary. + * If previously running, client must call ClientAppManager.notify() at least once within this + * method to change the state to STOPPING or STOPPED. + * May be called multiple times on the same object, in any state. + */ + public void shutdown(String[] args) throws Throwable; + + /** + * The current state of the ClientApp. + */ + public ClientAppState getState(); + + /** + * The generic name of the ClientApp, used for registration, + * e.g. "console". Do not translate. + */ + public String getName(); + + /** + * The dislplay name of the ClientApp, used in user interfaces. + * The app must translate. + */ + public String getDisplayName(); +} diff --git a/core/java/src/net/i2p/app/ClientAppManager.java b/core/java/src/net/i2p/app/ClientAppManager.java new file mode 100644 index 0000000000000000000000000000000000000000..e246254b17fa3fdbc3c2fbf91c81e3108c1b12ea --- /dev/null +++ b/core/java/src/net/i2p/app/ClientAppManager.java @@ -0,0 +1,51 @@ +package net.i2p.app; + +/** + * Notify the router of events, and provide methods for + * client apps to find each other. + * + * @since 0.9.4 + */ +public interface ClientAppManager { + + /** + * Must be called on all state transitions except + * from UNINITIALIZED to INITIALIZED. + * + * @param app non-null + * @param state non-null + * @param message may be null + * @param e may be null + */ + public void notify(ClientApp app, ClientAppState state, String message, Exception e); + + /** + * Register with the manager under the given name, + * so that other clients may find it. + * Only required for apps used by other apps. + * + * @param app non-null + * @param name non-null + * @return true if successful, false if duplicate name + */ + public boolean register(ClientApp app); + + /** + * Unregister with the manager. Name must be the same as that from register(). + * Only required for apps used by other apps. + * + * @param app non-null + * @param name non-null + */ + public void unregister(ClientApp app); + + /** + * Get a registered app. + * Only used for apps finding other apps. + * + * @param app non-null + * @param name non-null + * @return client app or null + */ + public ClientApp getRegisteredApp(String name); +} diff --git a/core/java/src/net/i2p/app/ClientAppState.java b/core/java/src/net/i2p/app/ClientAppState.java new file mode 100644 index 0000000000000000000000000000000000000000..e4563aabfd10189ad7699a3f20bd1dd9210264bd --- /dev/null +++ b/core/java/src/net/i2p/app/ClientAppState.java @@ -0,0 +1,25 @@ +package net.i2p.app; + +/** + * Status of a client application. + * ClientAppManager.notify() must be called on all state transitions except + * from UNINITIALIZED to INITIALIZED. + * + * @since 0.9.4 + */ +public enum ClientAppState { + /** initial value */ + UNINITIALIZED, + /** after constructor is complete */ + INITIALIZED, + STARTING, + START_FAILED, + RUNNING, + STOPPING, + /** stopped normally */ + STOPPED, + /** stopped abnormally */ + CRASHED, + /** forked as a new process, status unknown from now on */ + FORKED +} diff --git a/core/java/src/net/i2p/app/package.html b/core/java/src/net/i2p/app/package.html new file mode 100644 index 0000000000000000000000000000000000000000..1be4e8331e53f5d65d201e5c4d331618b3680b88 --- /dev/null +++ b/core/java/src/net/i2p/app/package.html @@ -0,0 +1,18 @@ +<html> +<body> +<p> +Interfaces for classes to be started and stopped via clients.config. +Classes implementing the ClientApp interface will be controlled with +the that interface instead of being started with main(). +</p> +<p> +The benefits for clients using this interface: +<ul> +<li>Get the current context via the constructor +<li>Complete life cycle management by the router +<li>Avoid the need for static references +<li>Ability to find other clients without using static references +</ul> +</p> +</body> +</html> diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index 04ec793fd2ba3b00516d8dc09862f7792857a3a8..97d6ce50119f50714be6335e69ab6bd6b3a730fe 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -361,12 +361,21 @@ public class DataHelper { throw new RuntimeException("IO error writing to memory?! " + ioe.getMessage()); } } - + /** * Pretty print the mapping, unsorted * (unless the options param is an OrderedProperties) */ public static String toString(Properties options) { + return toString((Map) options); + } + + /** + * Pretty print the mapping, unsorted + * (unless the options param is an OrderedProperties) + * @since 0.9.4 + */ + public static String toString(Map<?, ?> options) { StringBuilder buf = new StringBuilder(); if (options != null) { for (Map.Entry entry : options.entrySet()) { @@ -502,7 +511,7 @@ public class DataHelper { } /** - * Hex with leading zeros. + * Lower-case hex with leading zeros. * Use toHexString(byte[]) to not get leading zeros * @param buf may be null (returns "") * @return String of length 2*buf.length @@ -516,7 +525,7 @@ public class DataHelper { private static final byte[] EMPTY_BUFFER = "".getBytes(); /** - * Hex with leading zeros. + * Lower-case hex with leading zeros. * Use toHexString(byte[]) to not get leading zeros * @param buf may be null * @param len number of bytes. If greater than buf.length, additional zeros will be prepended @@ -546,7 +555,7 @@ public class DataHelper { } /** - * Hex without leading zeros. + * Lower-case hex without leading zeros. * Use toString(byte[] to get leading zeros * @param data may be null (returns "00") */ diff --git a/core/java/src/net/i2p/util/Addresses.java b/core/java/src/net/i2p/util/Addresses.java index c824c5f7d063c6f18f54be4f4cb2dc30cad3db04..cd773bdd9a20b40c792e337c214c267e136beffd 100644 --- a/core/java/src/net/i2p/util/Addresses.java +++ b/core/java/src/net/i2p/util/Addresses.java @@ -25,6 +25,15 @@ import net.i2p.I2PAppContext; */ public abstract class Addresses { + /** + * Do we have any non-loop, non-wildcard IPv4 address at all? + * @since 0.9.4 + */ + public static boolean isConnected() { + // not as good as using a Java DBus implementation to talk to NetworkManager... + return !getAddresses(true, false, false).isEmpty(); + } + /** @return the first non-local address it finds, or null */ public static String getAnyAddress() { SortedSet<String> a = getAddresses(); @@ -51,13 +60,28 @@ public abstract class Addresses { } /** - * @return a sorted array of all addresses + * @return a sorted set of all addresses including wildcard * @param includeLocal whether to include local * @param includeIPv6 whether to include IPV6 * @return an array of all addresses * @since 0.8.3 */ public static SortedSet<String> getAddresses(boolean includeLocal, boolean includeIPv6) { + return getAddresses(includeLocal, includeLocal, includeIPv6); + } + + /** + * @return a sorted set of all addresses + * @param includeSiteLocal whether to include private like 192.168.x.x + * @param includeLoopAndWildcard whether to include 127.x.x.x and 0.0.0.0 + * @param includeIPv6 whether to include IPV6 + * @param includeWildCard whether to include 0.0.0.0 and/or 0:0:0:0:0:0 (includeLocal must be true) + * @return an array of all addresses + * @since 0.9.4 + */ + public static SortedSet<String> getAddresses(boolean includeSiteLocal, + boolean includeLoopbackAndWildcard, + boolean includeIPv6) { boolean haveIPv4 = false; boolean haveIPv6 = false; SortedSet<String> rv = new TreeSet(); @@ -70,7 +94,8 @@ public abstract class Addresses { haveIPv4 = true; else haveIPv6 = true; - if (shouldInclude(allMyIps[i], includeLocal, includeIPv6)) + if (shouldInclude(allMyIps[i], includeSiteLocal, + includeLoopbackAndWildcard, includeIPv6)) rv.add(allMyIps[i].getHostAddress()); } } @@ -87,34 +112,39 @@ public abstract class Addresses { haveIPv4 = true; else haveIPv6 = true; - if (shouldInclude(addr, includeLocal, includeIPv6)) + if (shouldInclude(addr, includeSiteLocal, + includeLoopbackAndWildcard, includeIPv6)) rv.add(addr.getHostAddress()); } } } } catch (SocketException e) {} - if (includeLocal && haveIPv4) - rv.add("0.0.0.0"); - if (includeLocal && includeIPv6 && haveIPv6) - rv.add("0:0:0:0:0:0:0:0"); // we could do "::" but all the other ones are probably in long form + if (includeLoopbackAndWildcard) { + if (haveIPv4) + rv.add("0.0.0.0"); + if (includeIPv6 && haveIPv6) + rv.add("0:0:0:0:0:0:0:0"); // we could do "::" but all the other ones are probably in long form + } return rv; } - private static boolean shouldInclude(InetAddress ia, boolean includeLocal, boolean includeIPv6) { + private static boolean shouldInclude(InetAddress ia, boolean includeSiteLocal, + boolean includeLoopbackAndWildcard, boolean includeIPv6) { return - (!ia.isLinkLocalAddress()) && + (!ia.isLinkLocalAddress()) && // 169.254.x.x (!ia.isMulticastAddress()) && - (includeLocal || + (includeLoopbackAndWildcard || ((!ia.isAnyLocalAddress()) && - (!ia.isLoopbackAddress()) && - (!ia.isSiteLocalAddress()))) && + (!ia.isLoopbackAddress()))) && + (includeSiteLocal || + !ia.isSiteLocalAddress()) && // Hamachi 5/8 allocated to RIPE (30 November 2010) // Removed from TransportImpl.isPubliclyRoutable() // Check moved to here, for now, but will eventually need to // remove it from here also. - (includeLocal || - (!ia.getHostAddress().startsWith("5."))) && + //(includeLocal || + //(!ia.getHostAddress().startsWith("5."))) && (includeIPv6 || (ia instanceof Inet4Address)); } @@ -247,13 +277,18 @@ public abstract class Addresses { * Print out the local addresses */ public static void main(String[] args) { - System.err.println("External Addresses:"); - Set<String> a = getAddresses(false, false); + System.err.println("External IPv4 Addresses:"); + Set<String> a = getAddresses(false, false, false); + for (String s : a) + System.err.println(s); + System.err.println("\nExternal and Local IPv4 Addresses:"); + a = getAddresses(true, false, false); for (String s : a) System.err.println(s); - System.err.println("All addresses:"); - a = getAddresses(true, true); + System.err.println("\nAll addresses:"); + a = getAddresses(true, true, true); for (String s : a) System.err.println(s); + System.err.println("\nIs connected? " + isConnected()); } } diff --git a/core/java/src/net/i2p/util/NativeBigInteger.java b/core/java/src/net/i2p/util/NativeBigInteger.java index 5b03d687ac4bfe71a8be2667f34f483b6016588c..84cdb7c252e6fb4f6abc3f3b209a828b0a01a2e8 100644 --- a/core/java/src/net/i2p/util/NativeBigInteger.java +++ b/core/java/src/net/i2p/util/NativeBigInteger.java @@ -353,7 +353,7 @@ public class NativeBigInteger extends BigInteger { /** * <p>Compare the BigInteger.modPow vs the NativeBigInteger.modPow of some * really big (2Kbit) numbers 100 different times and benchmark the - * performance (or shit a brick if they don't match). </p> + * performance.</p> * */ public static void main(String args[]) { diff --git a/core/java/src/net/i2p/util/PasswordManager.java b/core/java/src/net/i2p/util/PasswordManager.java new file mode 100644 index 0000000000000000000000000000000000000000..e0f75a095d01356b6bfcdd59e38bafe7d04401a5 --- /dev/null +++ b/core/java/src/net/i2p/util/PasswordManager.java @@ -0,0 +1,200 @@ +package net.i2p.util; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import net.i2p.I2PAppContext; +import net.i2p.data.Base64; +import net.i2p.data.DataHelper; +import net.i2p.data.SessionKey; + +/** + * Manage both plaintext and salted/hashed password storage in + * router.config. + * + * There's no state here, so instantiate at will. + * + * @since 0.9.4 + */ +public class PasswordManager { + private final I2PAppContext _context; + + protected static final int SALT_LENGTH = 16; + /** 48 */ + protected static final int SHASH_LENGTH = SALT_LENGTH + SessionKey.KEYSIZE_BYTES; + + /** stored as plain text */ + protected static final String PROP_PW = ".password"; + /** stored obfuscated as b64 of the UTF-8 bytes */ + protected static final String PROP_B64 = ".b64"; + /** stored as the hex of the MD5 hash of the ISO-8859-1 bytes. Compatible with Jetty. */ + protected static final String PROP_MD5 = ".md5"; + /** stored as a Unix crypt string */ + protected static final String PROP_CRYPT = ".crypt"; + /** stored as the b64 of the 16 byte salt + the 32 byte hash of the UTF-8 bytes */ + protected static final String PROP_SHASH = ".shash"; + + public PasswordManager(I2PAppContext ctx) { + _context = ctx; + } + + /** + * Checks both plaintext and hash + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return if pw verified + */ + public boolean check(String realm, String user, String pw) { + return checkPlain(realm, user, pw) || + checkB64(realm, user, pw) || + checkHash(realm, user, pw); + } + + /** + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return if pw verified + */ + public boolean checkPlain(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + return pw.equals(_context.getProperty(pfx + PROP_PW)); + } + + /** + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return if pw verified + */ + public boolean checkB64(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String b64 = _context.getProperty(pfx + PROP_B64); + if (b64 == null) + return false; + return b64.equals(Base64.encode(DataHelper.getUTF8(pw))); + } + + /** + * With random salt + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return if pw verified + */ + public boolean checkHash(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String shash = _context.getProperty(pfx + PROP_SHASH); + if (shash == null) + return false; + byte[] shashBytes = Base64.decode(shash); + if (shashBytes == null || shashBytes.length != SHASH_LENGTH) + return false; + byte[] salt = new byte[SALT_LENGTH]; + byte[] hash = new byte[SessionKey.KEYSIZE_BYTES]; + System.arraycopy(shashBytes, 0, salt, 0, SALT_LENGTH); + System.arraycopy(shashBytes, SALT_LENGTH, hash, 0, SessionKey.KEYSIZE_BYTES); + byte[] pwHash = _context.keyGenerator().generateSessionKey(salt, DataHelper.getUTF8(pw)).getData(); + return DataHelper.eq(hash, pwHash); + } + + /** + * Either plain or b64 + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @return the pw or null + */ + public String get(String realm, String user) { + String rv = getPlain(realm, user); + if (rv != null) + return rv; + return getB64(realm, user); + } + + /** + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @return the pw or null + */ + public String getPlain(String realm, String user) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + return _context.getProperty(pfx + PROP_PW); + } + + /** + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @return the decoded pw or null + */ + public String getB64(String realm, String user) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String b64 = _context.getProperty(pfx + PROP_B64); + if (b64 == null) + return null; + return Base64.decodeToString(b64); + } + + /** + * Straight MD5, no salt + * Will return the MD5 sum of "user:subrealm:pw", compatible with Jetty + * and RFC 2617. + * + * @param subrealm to be used in creating the checksum + * @param user non-null, non-empty, already trimmed + * @param pw non-null, plain text, already trimmed + * @return lower-case hex with leading zeros, 32 chars, or null on error + */ + public static String md5Hex(String subrealm, String user, String pw) { + String fullpw = user + ':' + subrealm + ':' + pw; + return md5Hex(fullpw); + } + + /** + * Straight MD5, no salt + * Will return the MD5 sum of the data, compatible with Jetty + * and RFC 2617. + * + * @param fullpw non-null, plain text, already trimmed + * @return lower-case hex with leading zeros, 32 chars, or null on error + */ + public static String md5Hex(String fullpw) { + try { + byte[] data = fullpw.getBytes("ISO-8859-1"); + byte[] sum = md5Sum(data); + if (sum != null) + // adds leading zeros if necessary + return DataHelper.toString(sum); + } catch (UnsupportedEncodingException uee) {} + return null; + } + + /** + * Standard MD5 checksum + * + * @param data non-null + * @return 16 bytes, or null on error + */ + public static byte[] md5Sum(byte[] data) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(data); + return md.digest(); + } catch (NoSuchAlgorithmException nsae) {} + return null; + } +} diff --git a/debian/changelog b/debian/changelog index ebb7f05d7cc4685976e32020f0727c2283cf8848..8fd25866653c22281f8ea41beefdad1183845cae 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,50 @@ -i2p (0.9.1-1) unstable; urgency=low +i2p (0.9.3-1) stable; urgency=low + + * New Upstream release + * Upstream changelog (full details in history.txt): + - Active Queue Management + - I2PSnark DHT: Several bug fixes, enable by default. + - Priority queues + - Several SSU fixes including memory leak, and better handling of routers + behind firewalls that change UDP ports; additional defenses for malicious + packets. + - Fix piece selection (rarest-first) bugs in i2psnark + - Fix bug causing multiple browsers to open at startup + - Improvements in caching + - Several synchronization fixes and lock contention reduction + - Major reduction in SSU buffers memory use + - Fix streaming connection timeout back to 1 minute, was inadvertently + changed to 5 minutes; set i2ptunnel server read timeout to 5 minutes, was + unlimited + - Improved defenses in i2ptunnel for "darkloris" + - More validation at torrent creation in i2psnark + - Several parameter changes in SSU to improve throughput + - New event log for major events including restarts; show multiple restart + lines on graphs + - Remove duplicate messages from logs + - Don't respond to blocked streaming connections with a reset, just drop + - Remove all uses of inefficient SimpleTimer + - More checks for valid IPs and ports entered in console + - Fix bug that wasted a lot of entropy + - Translation updates: Italian, Portuguese, Spanish, Swedish + - Add non-NIO configuration in jetty.xml, recommended for Java 5 + - Update GeoIP data + + -- Kill Your TV <killyourtv@i2pmail.org> Sat, 27 Oct 2012 16:47:37 +0000 + +i2p (0.9.2-2) stable; urgency=high + + * Fix stupid bug in i2prouter + + -- Kill Your TV <killyourtv@i2pmail.org> Sat, 22 Sep 2012 13:57:39 +0000 + +i2p (0.9.2-1) stable; urgency=low + + * New upstream release (see history.txt for details) + + -- Kill Your TV <killyourtv@i2pmail.org> Fri, 21 Sep 2012 18:13:32 +0000 + +i2p (0.9.1-1) stable; urgency=low * New upstream version 0.9.1 * Don't depend on Debian's/Ubuntu's version of Jetty. Jetty6 is going away @@ -13,13 +59,13 @@ i2p (0.9.1-1) unstable; urgency=low -- Kill Your TV <killyourtv@i2pmail.org> Mon, 30 Jul 2012 17:41:04 +0000 -i2p (0.9-1) unstable; urgency=low +i2p (0.9-1) stable; urgency=low * New Upstream Version -- Kill Your TV <killyourtv@i2pmail.org> Wed, 02 May 2012 16:33:11 +0000 -i2p (0.8.13-2) unstable; urgency=low +i2p (0.8.13-2) stable; urgency=low * Fix bug in postinst cause by changes to adduser's behaviour. @@ -66,38 +112,38 @@ i2p (0.8.12-1) stable; urgency=low -- Kill Your TV <killyourtv@i2pmail.org> Fri, 06 Jan 2012 02:49:03 +0000 -i2p (0.8.11+repack-2) stable; urgency=medium +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+repack-1) stable; urgency=low +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+repack-1) stable; urgency=medium +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+repack-1) stable; urgency=medium +i2p (0.8.9-1) stable; urgency=medium * New upstream version -- Kill Your TV <killyourtv@i2pmail.org> Tue, 11 Oct 2011 19:55:08 +0000 -i2p (0.8.8+repack-3) UNRELEASED; urgency=low +i2p (0.8.8-3) UNRELEASED; urgency=low * Add dump option to initscript -- Kill Your TV <killyourtv@i2pmail.org> Tue, 06 Sep 2011 12:42:22 +0000 -i2p (0.8.8+repack-2) stable; urgency=medium +i2p (0.8.8-2) stable; urgency=medium * Backport patch from mtn 04ec606 to fix trac #515 * Fix trac ticket #514 ("debconf values are overwritten upon @@ -107,7 +153,7 @@ i2p (0.8.8+repack-2) stable; urgency=medium -- Kill Your TV <killyourtv@i2pmail.org> Fri, 02 Sep 2011 23:32:32 +0000 -i2p (0.8.8+repack-1) stable; urgency=low +i2p (0.8.8-1) stable; urgency=low * New Upstream Version diff --git a/debian/patches/0001-path-substitution.patch b/debian/patches/0001-path-substitution.patch index c40349b668c72529a3926201226e9b2f1f698d62..2dd998183b714c545112854d112977d61123b1e7 100644 --- a/debian/patches/0001-path-substitution.patch +++ b/debian/patches/0001-path-substitution.patch @@ -127,7 +127,7 @@ Debian wrapper.config to try to prevent confusion. else eval echo `gettext '$APP_LONG_NAME is already running.'` exit 1 -@@ -1871,18 +1816,9 @@ +@@ -1874,18 +1819,9 @@ status ;; diff --git a/history.txt b/history.txt index e10156df615b40daa95c34dc1025927223ae969d..0367819546728dddc65319c053377f784e74ddc2 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,33 @@ +* 2012-10-27 0.9.3 released + +2012-10-25 zzz + * BuildHandler: Fix "too slow" rejections due to internal clock skew + +2012-10-24 zzz + * I2PSnark: + - Fix several partial piece (temp file) leaks + - Don't lose all DHT peers if we stop quickly + - Explore a kbucket if it's less than 3/4 full + +2012-10-24 str4d + * i2ptunnel: Truncate long client destinations (ticket #581) + +2012-10-21 zzz + * Watchdog: Don't dump threads too often (ticket #519) + +2012-10-20 zzz + * Transport: Back out CoDel for SSU PeerState and NTCP + +2012-10-19 zzz + * UDP: Fix peer test NPE (ticket # 748) + +2012-10-18 kytv +* Portuguese and Spanish updates from Transifex + * Update geoip.txt based on Maxmind GeoLite Country database from 2012-10-02 + +2012-10-15 kytv +* Italian and Swedish updates from Transifex + 2012-10-14 zzz * Console: Use non-nio connector for Java 5 and JamVM/gij (tickets #715 and #743) diff --git a/installer/install.xml b/installer/install.xml index 5bdb2e4ad807e3db967633d73c488157f5b10c10..e1b7d322dafcdaf5290a69a21c6223b6a950216d 100644 --- a/installer/install.xml +++ b/installer/install.xml @@ -4,9 +4,9 @@ <info> <appname>i2p</appname> - <appversion>0.9.2</appversion> + <appversion>0.9.3</appversion> <authors> - <author name="I2P" email="http://forum.i2p2.de/"/> + <author name="I2P" email="http://www.i2p2.de/"/> </authors> <url>http://www.i2p2.de/</url> <javaversion>1.5</javaversion> diff --git a/installer/resources/certificates/75.145.125.59.crt b/installer/resources/certificates/75.145.125.59.crt deleted file mode 100644 index 071f054033cfbe42a2b6262682407c4eb4759da7..0000000000000000000000000000000000000000 --- a/installer/resources/certificates/75.145.125.59.crt +++ /dev/null @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICiTCCAfICCQDI/vgxtkEs3TANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC -VU4xEzARBgNVBAgTCldvcmxkLVdpZGUxETAPBgNVBAcTCEludGVybmV0MQwwCgYD -VQQKEwNJMlAxDTALBgNVBAsTBEgySUsxFjAUBgNVBAMTDTc1LjE0NS4xMjUuNTkx -HDAaBgkqhkiG9w0BCQEWDWgyaWtAbWFpbC5pMnAwHhcNMTExMDA3MDAwNDM3WhcN -MjExMDA0MDAwNDM3WjCBiDELMAkGA1UEBhMCVU4xEzARBgNVBAgTCldvcmxkLVdp -ZGUxETAPBgNVBAcTCEludGVybmV0MQwwCgYDVQQKEwNJMlAxDTALBgNVBAsTBEgy -SUsxFjAUBgNVBAMTDTc1LjE0NS4xMjUuNTkxHDAaBgkqhkiG9w0BCQEWDWgyaWtA -bWFpbC5pMnAwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOGkLwuCY6J7Oude -5SdiU/RT7Bhm26M8ufntI1IKsog+BggoqhIoNgzk79q59rsoXA7o+lcXtHGXQoME -mz8HtzGrO90A3ZYCM3Xb6S42DHh6QepZjHBt3hDsPZJl0XXNrB+Wfpljo2y4IfiH -aQo4cBWt0pi29SspA87KFzh1S8gtAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAi7Z5 -gmkwHPojE3xEc9tATa2H2MnLXBGcuAaLAv+qAGza5V2Pa6wVTgpUKGfvWR6+Ae2B -ACe9LsIsE2IPtTIwjiwbfmmJ6dkvLHX/bxdp/+X5DjAFa36j+elKVZSerkgy9cLV -rrSQF8UW3HFlwElB0aLgbApOFnArDrbuEnjrjEg= ------END CERTIFICATE----- diff --git a/installer/resources/certificates/netdb.i2p2.no.crt b/installer/resources/certificates/netdb.i2p2.no.crt new file mode 100644 index 0000000000000000000000000000000000000000..2ab5a131413e0bcd2643f70ab137e76cfa14226c --- /dev/null +++ b/installer/resources/certificates/netdb.i2p2.no.crt @@ -0,0 +1,18 @@ +-----BEGIN CERTIFICATE----- +MIIC0DCCAjmgAwIBAgIJANdBFbakbhhOMA0GCSqGSIb3DQEBBQUAMIGAMQswCQYD +VQQGEwJOTzENMAsGA1UECAwET3NsbzENMAsGA1UEBwwET3NsbzEMMAoGA1UECgwD +STJQMQwwCgYDVQQLDANJMlAxFjAUBgNVBAMMDW5ldGRiLmkycDIubm8xHzAdBgkq +hkiG9w0BCQEWEG1lZWhAaTJwbWFpbC5vcmcwHhcNMTIxMDIzMDExMjIyWhcNMTkx +MDIyMDExMjIyWjCBgDELMAkGA1UEBhMCTk8xDTALBgNVBAgMBE9zbG8xDTALBgNV +BAcMBE9zbG8xDDAKBgNVBAoMA0kyUDEMMAoGA1UECwwDSTJQMRYwFAYDVQQDDA1u +ZXRkYi5pMnAyLm5vMR8wHQYJKoZIhvcNAQkBFhBtZWVoQGkycG1haWwub3JnMIGf +MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCDvmjTpff6/XpiNuqoa9ZEKMlyq1o +kas9fHwnZax/0QTM3xusSQQ9DzeVMSx1ueYxhTZ6VLmE1mTr0aIndzugxGK/g85H +Y+cUl3nw7+5gLPMCUrKAXqQokE3mYxSNY3AUeend7nmHvm9iciw4+Sa2+6ROvQQy +kD31CEN6/I04rwIDAQABo1AwTjAdBgNVHQ4EFgQUV83dJhEcLbfJ+uh+MDYNPdah +RoQwHwYDVR0jBBgwFoAUV83dJhEcLbfJ+uh+MDYNPdahRoQwDAYDVR0TBAUwAwEB +/zANBgkqhkiG9w0BAQUFAAOBgQBQQlJym7mUMUM2ryKu20z2PSUzFyq5U4rWHeo3 +elbNaTsFBwi+Ot/Lg/A5I4V8gywH1fBTG5bYKDUYvWohz1qIg66G57B1zT1zK9yh +Byz9go44M3y1/kXXSsJlY9llG9DDicr1y6LfldwZJ5zFAd3iiB8D8UadP5YLqb7v +wb1F1g== +-----END CERTIFICATE----- diff --git a/installer/resources/geoip.txt b/installer/resources/geoip.txt index e68f00da836aa68b4bed665e4f0662d769f7d92c..0066789fe39fad7f5fca6cd865d600251e183849 100644 --- a/installer/resources/geoip.txt +++ b/installer/resources/geoip.txt @@ -1,5 +1,5 @@ # Last updated based on Maxmind GeoLite Country -# dated 2012-09-05 +# dated 2012-10-02 # Script borrowed from Tor # # wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip @@ -219,9 +219,7 @@ 69937264,69937271,CA 69937272,69956103,US 69956104,69956111,BM -69956112,71007487,US -71007488,71007743,A1 -71007744,71571339,US +69956112,71571339,US 71571340,71571340,DE 71571341,71571389,US 71571390,71571390,DE @@ -709,7 +707,9 @@ 92725248,92733439,SY 92733440,92734735,FR 92734736,92734739,DE -92734740,92798975,FR +92734740,92749067,FR +92749068,92749071,GB +92749072,92798975,FR 92798976,93323263,RU 93323264,93335551,CH 93335552,93339647,IL @@ -898,6 +898,7 @@ 96897024,96899071,GB 96899072,96903167,AT 96903168,96911359,IR +96911360,96919551,FR 96919552,96923647,IT 96923648,96925695,JO 96925696,96927743,MT @@ -920,6 +921,70 @@ 97320960,97386495,ES 97386496,97419263,RU 97419264,97435647,HU +97435648,97437695,DK +97437696,97439743,AT +97439744,97443839,NL +97443840,97445887,PT +97445888,97447935,RS +97447936,97452031,PL +97452032,97517567,UA +97517568,98566143,IR +98566144,98697215,NL +98697216,98701311,FR +98701312,98705407,ES +98705408,98707455,SE +98707456,98709503,NL +98709504,98711551,IR +98711552,98713599,GB +98713600,98732031,PL +98732032,98734079,GB +98734080,98736127,CH +98736128,98738175,RU +98738176,98740223,NO +98740224,98742271,ES +98742272,98744319,GB +98744320,98746367,ES +98746368,98762751,TR +98762752,98893823,RU +98893824,98959359,TR +98959360,99090431,DE +99090432,99614719,IR +99614720,99876863,SE +99876864,100139007,SA +100139008,100204543,UA +100204544,100237311,PT +100237312,100245503,IT +100245504,100247551,SE +100247552,100249599,CH +100249600,100253695,SI +100253696,100261887,RU +100261888,100270079,NO +100270080,100302847,IR +100302848,100311039,KZ +100311040,100313087,FI +100313088,100315135,RU +100315136,100319231,GB +100319232,100327423,AZ +100327424,100329471,SE +100329472,100331519,RU +100331520,100335615,TR +100335616,100401151,KZ +100401152,100532223,DE +100532224,100564991,RO +100564992,100573183,SE +100573184,100575231,GB +100575232,100577279,SC +100577280,100579327,RU +100579328,100581375,AT +100581376,100589567,SC +100589568,100597759,RU +100597760,100630527,NL +100630528,100632575,BE +100632576,100634623,GB +100634624,100636671,ES +100636672,100638719,NL +100638720,100646911,UA +100646912,100663295,RU 100663296,121195295,US 121195296,121195327,IT 121195328,134693119,US @@ -1556,7 +1621,10 @@ 406159360,406175743,US 406183936,406208511,CA 406216704,406241279,US -406241280,406323199,PR +406241280,406257663,PR +406274048,406290431,PR +406298624,406306815,PR +406306816,406323199,CA 406323200,406388735,US 406388736,406454271,CA 406454272,406847487,US @@ -1839,7 +1907,6 @@ 460345344,460349439,CN 460349440,460351487,AU 460351488,460353535,JP -460355584,460356607,IN 460356608,460357631,JP 460357632,460423167,KR 460423168,460439551,CN @@ -2395,7 +2462,7 @@ 528982016,528984063,PL 528984064,528986111,RO 528986112,528988159,UA -528988160,528990207,RO +528988160,528990207,RU 528990208,528994303,PL 528994304,528996351,UZ 528996352,528998399,LT @@ -3573,7 +3640,9 @@ 620781568,620783615,GB 620783616,620785663,ES 620785664,620787711,DE -620787712,620789759,RU +620787712,620788479,RU +620788480,620788991,A1 +620788992,620789759,RU 620789760,620810239,HR 620810240,620812287,LT 620812288,620814335,SE @@ -7841,7 +7910,9 @@ 636170240,636170495,PL 636170496,636170751,IS 636170752,636171007,CH -636171008,636174335,AT +636171008,636171824,AT +636171825,636171825,GB +636171826,636174335,AT 636174336,636176383,RU 636176384,636178431,TR 636178432,636180479,NL @@ -7925,8 +7996,8 @@ 644761440,644761455,CA 644761456,644835071,US 644835072,644835327,CA -644835328,644839423,US -644839424,644840447,CA +644835328,644838911,US +644838912,644840447,CA 644840448,644898879,US 644898880,644898911,CA 644898912,645001215,US @@ -9560,7 +9631,35 @@ 774163281,774163284,KP 774163285,774163285,VA 774163286,774163289,FK -774163290,774168575,VA +774163290,774163290,VA +774163291,774163294,BJ +774163295,774163305,VA +774163306,774163309,GQ +774163310,774163310,VA +774163311,774163314,GA +774163315,774163325,VA +774163326,774163329,RW +774163330,774163330,VA +774163331,774163334,UG +774163335,774163335,VA +774163336,774163339,MP +774163340,774163340,VA +774163341,774163344,TL +774163345,774163345,VA +774163346,774163349,WF +774163350,774163350,VA +774163351,774163354,SD +774163355,774163380,VA +774163381,774163388,IT +774163389,774163390,VA +774163391,774163398,GE +774163399,774163400,VA +774163401,774163404,US +774163405,774163405,VA +774163406,774163409,US +774163410,774163410,VA +774163411,774163414,US +774163415,774168575,VA 774168576,774176767,PL 774176768,774184959,IT 774184960,774193151,GB @@ -9622,9 +9721,7 @@ 775094272,775127039,RO 775127040,775149566,IE 775149567,775149567,NL -775149568,775149764,IE -775149765,775149765,SG -775149766,775151615,IE +775149568,775151615,SG 775151616,775159807,JP 775159808,775192575,SA 775192576,775225343,RU @@ -9694,6 +9791,7 @@ 776601600,776732671,AT 776732672,776863743,PL 776863744,778043391,DE +778043392,778108927,UA 778108928,778174463,RO 778174464,778239999,UA 778240000,778305535,AL @@ -11443,12 +11541,7 @@ 780730368,780756724,IE 780756725,780756725,EU 780756726,780779519,IE -780779520,780783615,NL -780783616,780785663,GB -780785664,780787711,DE -780787712,780791807,FR -780791808,780793855,SE -780793856,780795903,DE +780779520,780795903,SG 780795904,780861439,RU 780861440,780926975,HU 780926976,780992511,CH @@ -12718,12 +12811,14 @@ 889192448,897238054,DE 897238055,897238055,EU 897238056,905969663,DE -905969664,921204905,US -921204906,921204906,BR -921204907,922157055,US -922157056,922222591,IE +905969664,921174015,US +921174016,921239551,BR +921239552,922091519,US +922091520,922222591,IE 922222592,922353663,JP -922353664,956301311,US +922353664,922419199,US +922419200,922484735,SG +922484736,956301311,US 956301312,959447039,EU 959447040,959512575,US 959512576,960629507,EU @@ -13071,7 +13166,9 @@ 1023852544,1023868927,BN 1023868928,1023901695,JP 1023901696,1023934463,TH -1023934464,1023950847,AU +1023934464,1023942719,AU +1023942720,1023942720,MY +1023942721,1023950847,AU 1023950848,1023954943,ID 1023954944,1023959039,JP 1023959040,1023967231,AU @@ -13098,7 +13195,9 @@ 1024363776,1024364031,AU 1024364032,1024365055,JP 1024365056,1024365311,AP -1024365312,1024376831,JP +1024365312,1024375551,JP +1024375552,1024375615,AU +1024375616,1024376831,JP 1024376832,1024393215,PH 1024393216,1024458751,HK 1024458752,1024491519,SG @@ -13132,9 +13231,7 @@ 1025343488,1025376255,CN 1025376256,1025507327,TW 1025507328,1026293759,KR -1026293760,1026295807,JP -1026295808,1026296575,US -1026296576,1026311423,JP +1026293760,1026311423,JP 1026311424,1026311679,US 1026311680,1026392063,JP 1026392064,1026408447,CN @@ -22162,10 +22259,7 @@ 1071136768,1071141887,US 1071141888,1071142911,HK 1071142912,1071144959,US -1071144960,1071149200,GB -1071149201,1071149201,LB -1071149202,1071151103,GB -1071151104,1071153151,LB +1071144960,1071153151,LB 1071153152,1071157247,US 1071157248,1071158271,SG 1071158272,1071159295,US @@ -22305,9 +22399,7 @@ 1071362080,1071362111,HK 1071362112,1071362207,US 1071362208,1071362239,HK -1071362240,1071382527,US -1071382528,1071384575,HK -1071384576,1071415295,US +1071362240,1071415295,US 1071415296,1071417343,TW 1071417344,1071446015,US 1071446016,1071448063,NL @@ -22460,7 +22552,9 @@ 1072939264,1072939311,US 1072939312,1072939519,CA 1072939520,1072940031,US -1072940032,1072955391,CA +1072940032,1072942079,CA +1072942080,1072942111,US +1072942112,1072955391,CA 1072955392,1073022975,US 1073022976,1073025791,HN 1073025792,1073026047,NI @@ -28475,9 +28569,7 @@ 1117829376,1117829631,GR 1117829632,1117831359,US 1117831360,1117831423,A2 -1117831424,1117964727,US -1117964728,1117964735,UM -1117964736,1117978623,US +1117831424,1117978623,US 1117978624,1117979503,CA 1117979504,1117979519,US 1117979520,1117982639,CA @@ -32197,16 +32289,7 @@ 1139170048,1139171327,US 1139171328,1139175423,GT 1139175424,1139179519,US -1139179520,1139188735,CA -1139188736,1139188991,GB -1139188992,1139193599,CA -1139193600,1139194111,US -1139194112,1139194367,CA -1139194368,1139194623,US -1139194624,1139194879,CA -1139194880,1139195135,US -1139195136,1139195391,GB -1139195392,1139195903,CA +1139179520,1139195903,CA 1139195904,1139265535,US 1139265536,1139269631,CA 1139269632,1139274495,US @@ -32329,16 +32412,8 @@ 1151890096,1151890127,GB 1151890128,1151892735,CA 1151892736,1151892991,MA -1151892992,1151895551,CA -1151895552,1151895807,US -1151895808,1151895919,CA -1151895920,1151895935,US -1151895936,1151896319,CA -1151896320,1151896575,US -1151896576,1151896831,CA -1151896832,1151897087,US -1151897088,1151897343,CA -1151897344,1151943680,US +1151892992,1151897599,CA +1151897600,1151943680,US 1151943681,1151943808,GB 1151943809,1151943871,NL 1151943872,1151943935,CA @@ -34305,7 +34380,9 @@ 1162882560,1162883839,GD 1162883840,1162887167,BB 1162887168,1162895359,US -1162895360,1162899455,A1 +1162895360,1162898175,A1 +1162898176,1162898431,US +1162898432,1162899455,A1 1162899456,1162925983,US 1162925984,1162926015,AU 1162926016,1162926071,US @@ -34944,7 +35021,9 @@ 1169203200,1169211391,CA 1169211392,1170190335,US 1170190336,1170190847,GB -1170190848,1170456959,US +1170190848,1170375167,US +1170375168,1170375679,A1 +1170375680,1170456959,US 1170456960,1170456975,CR 1170456976,1170456991,US 1170456992,1170457007,PR @@ -36341,425 +36420,9 @@ 1209190852,1209190883,CA 1209190884,1209190911,US 1209190912,1209191167,MX -1209191168,1209270547,US -1209270548,1209270551,ID -1209270552,1209270603,US -1209270604,1209270607,CN -1209270608,1209270779,US -1209270780,1209270787,CN -1209270788,1209271035,US -1209271036,1209271039,BD -1209271040,1209271083,US -1209271084,1209271087,BR -1209271088,1209271097,US +1209191168,1209271097,US 1209271098,1209271098,A1 -1209271099,1209271127,US -1209271128,1209271131,SA -1209271132,1209271191,US -1209271192,1209271195,RO -1209271196,1209271207,US -1209271208,1209271211,SC -1209271212,1209271215,US -1209271216,1209271219,IN -1209271220,1209271367,US -1209271368,1209271371,TR -1209271372,1209271375,CN -1209271376,1209271435,US -1209271436,1209271439,CN -1209271440,1209271451,US -1209271452,1209271455,CN -1209271456,1209271463,US -1209271464,1209271467,PK -1209271468,1209271483,US -1209271484,1209271487,VN -1209271488,1209271491,CN -1209271492,1209271495,US -1209271496,1209271499,CA -1209271500,1209271511,US -1209271512,1209271515,CN -1209271516,1209271519,US -1209271520,1209271523,CN -1209271524,1209271527,KH -1209271528,1209271547,US -1209271548,1209271551,CN -1209271552,1209271575,US -1209271576,1209271579,CN -1209271580,1209271583,BD -1209271584,1209271607,US -1209271608,1209271611,KH -1209271612,1209271615,CA -1209271616,1209271635,US -1209271636,1209271643,CN -1209271644,1209271647,GB -1209271648,1209271651,US -1209271652,1209271655,DE -1209271656,1209271663,US -1209271664,1209271667,CN -1209271668,1209271695,US -1209271696,1209271699,SC -1209271700,1209271703,US -1209271704,1209271707,CN -1209271708,1209271719,US -1209271720,1209271723,CN -1209271724,1209271727,US -1209271728,1209271735,CN -1209271736,1209271739,US -1209271740,1209271747,GB -1209271748,1209271767,US -1209271768,1209271771,RO -1209271772,1209271775,US -1209271776,1209271779,CN -1209271780,1209271783,US -1209271784,1209271787,RO -1209271788,1209271795,US -1209271796,1209271799,ZA -1209271800,1209271803,US -1209271804,1209271807,GB -1209271808,1209271827,US -1209271828,1209271831,KH -1209271832,1209271835,CN -1209271836,1209271847,US -1209271848,1209271855,IN -1209271856,1209271859,US -1209271860,1209271863,CN -1209271864,1209271867,US -1209271868,1209271887,CN -1209271888,1209271891,US -1209271892,1209271895,CN -1209271896,1209271911,US -1209271912,1209271915,ID -1209271916,1209271923,US -1209271924,1209271927,CA -1209271928,1209271935,US -1209271936,1209271939,BD -1209271940,1209272079,US -1209272080,1209272095,CN -1209272096,1209272159,US -1209272160,1209272175,IT -1209272176,1209272191,BR -1209272192,1209272239,US -1209272240,1209272287,CN -1209272288,1209272407,US -1209272408,1209272415,PE -1209272416,1209272447,DE -1209272448,1209272479,KH -1209272480,1209272495,LV -1209272496,1209272583,US -1209272584,1209272591,PH -1209272592,1209272599,GB -1209272600,1209272607,BD -1209272608,1209272623,SC -1209272624,1209272735,US -1209272736,1209272767,CN -1209272768,1209272783,US -1209272784,1209272799,CN -1209272800,1209272839,US -1209272840,1209272847,CN -1209272848,1209272863,US -1209272864,1209272895,MY -1209272896,1209272959,CN -1209272960,1209273023,BR -1209273024,1209273055,US -1209273056,1209273071,TR -1209273072,1209273079,US -1209273080,1209273083,SC -1209273084,1209273119,US -1209273120,1209273135,BR -1209273136,1209273151,TR -1209273152,1209273207,US -1209273208,1209273215,CA -1209273216,1209273279,US -1209273280,1209273311,BR -1209273312,1209273351,US -1209273352,1209273359,CA -1209273360,1209273375,US -1209273376,1209273407,TR -1209273408,1209273471,CZ -1209273472,1209273487,US -1209273488,1209273519,CN -1209273520,1209273535,US -1209273536,1209273551,VN -1209273552,1209273559,US -1209273560,1209273563,AE -1209273564,1209273647,US -1209273648,1209273655,CN -1209273656,1209273663,US -1209273664,1209273671,BD -1209273672,1209273675,US -1209273676,1209273679,GB -1209273680,1209273991,US -1209273992,1209273999,SC -1209274000,1209274023,US -1209274024,1209274031,SA -1209274032,1209274039,CZ -1209274040,1209274115,US -1209274116,1209274119,ZA -1209274120,1209274175,US -1209274176,1209274239,SC -1209274240,1209274591,US -1209274592,1209274607,CN -1209274608,1209274623,SC -1209274624,1209274751,CN -1209274752,1209274879,US -1209274880,1209274911,CN -1209274912,1209274935,US -1209274936,1209274943,PH -1209274944,1209274959,US -1209274960,1209274967,PH -1209274968,1209274975,US -1209274976,1209274991,BD -1209274992,1209275039,US -1209275040,1209275071,BD -1209275072,1209275135,GB -1209275136,1209275647,US -1209275648,1209275679,SC -1209275680,1209275695,TR -1209275696,1209275791,US -1209275792,1209275799,TR -1209275800,1209275807,US -1209275808,1209275823,ID -1209275824,1209275847,US -1209275848,1209275855,AE -1209275856,1209275859,CN -1209275860,1209275863,US -1209275864,1209275871,SC -1209275872,1209275904,US -1209275905,1209275905,MY -1209275906,1209275906,US -1209275907,1209275908,KH -1209275909,1209275909,CN -1209275910,1209275913,US -1209275914,1209275915,CN -1209275916,1209275924,US -1209275925,1209275925,TR -1209275926,1209275926,US -1209275927,1209275927,ES -1209275928,1209275928,US -1209275929,1209275929,MY -1209275930,1209275930,CN -1209275931,1209275931,US -1209275932,1209275932,CN -1209275933,1209276031,US -1209276032,1209276063,BR -1209276064,1209276351,US -1209276352,1209276559,CN -1209276560,1209276583,US -1209276584,1209276655,CN -1209276656,1209276671,US -1209276672,1209276703,CN -1209276704,1209276707,PH -1209276708,1209276815,US -1209276816,1209276819,CN -1209276820,1209276879,US -1209276880,1209276895,PK -1209276896,1209276903,AU -1209276904,1209276911,CN -1209276912,1209276927,TR -1209276928,1209277087,US -1209277088,1209277095,SC -1209277096,1209277103,US -1209277104,1209277119,TR -1209277120,1209277143,US -1209277144,1209277147,TR -1209277148,1209277155,US -1209277156,1209277156,CN -1209277157,1209277157,US -1209277158,1209277158,IN -1209277159,1209277159,CN -1209277160,1209277160,US -1209277161,1209277161,SC -1209277162,1209277163,US -1209277164,1209277165,SC -1209277166,1209277166,GB -1209277167,1209277167,CN -1209277168,1209277170,US -1209277171,1209277171,CN -1209277172,1209277174,US -1209277175,1209277175,MY -1209277176,1209277179,US -1209277180,1209277180,CN -1209277181,1209277215,US -1209277216,1209277231,BR -1209277232,1209277247,US -1209277248,1209277263,BR -1209277264,1209277279,US -1209277280,1209277283,BR -1209277284,1209277287,US -1209277288,1209277295,BD -1209277296,1209277311,US -1209277312,1209277375,CN -1209277376,1209277391,US -1209277392,1209277419,CN -1209277420,1209277431,US -1209277432,1209277439,ZA -1209277440,1209277567,ES -1209277568,1209277583,US -1209277584,1209277599,TR -1209277600,1209277695,US -1209277696,1209277951,KH -1209277952,1209278087,US -1209278088,1209278095,AU -1209278096,1209278127,US -1209278128,1209278143,AU -1209278144,1209278151,CN -1209278152,1209278155,US -1209278156,1209278159,SC -1209278160,1209278207,US -1209278208,1209278463,CN -1209278464,1209278467,PH -1209278468,1209278471,US -1209278472,1209278479,CA -1209278480,1209278527,US -1209278528,1209278591,MY -1209278592,1209278727,US -1209278728,1209278735,KH -1209278736,1209278799,US -1209278800,1209278803,PK -1209278804,1209278931,US -1209278932,1209278935,GB -1209278936,1209278979,US -1209278980,1209278983,KH -1209278984,1209278987,US -1209278988,1209278995,KH -1209278996,1209278999,US -1209279000,1209279003,CN -1209279004,1209279015,US -1209279016,1209279023,CN -1209279024,1209279043,US -1209279044,1209279047,CN -1209279048,1209279075,US -1209279076,1209279079,CN -1209279080,1209279087,US -1209279088,1209279091,CN -1209279092,1209279095,BD -1209279096,1209279099,US -1209279100,1209279103,CN -1209279104,1209279143,US -1209279144,1209279151,CN -1209279152,1209279231,US -1209279232,1209279295,BR -1209279296,1209279487,US -1209279488,1209279551,PK -1209279552,1209279583,US -1209279584,1209279599,BD -1209279600,1209279615,US -1209279616,1209279743,GB -1209279744,1209279807,US -1209279808,1209279823,PH -1209279824,1209279839,CN -1209279840,1209279871,US -1209279872,1209279935,MY -1209279936,1209279967,US -1209279968,1209279999,CN -1209280000,1209280007,TR -1209280008,1209280027,US -1209280028,1209280031,SA -1209280032,1209280047,IN -1209280048,1209280159,US -1209280160,1209280167,CN -1209280168,1209280191,US -1209280192,1209280255,ID -1209280256,1209280319,SC -1209280320,1209280419,US -1209280420,1209280423,VN -1209280424,1209280443,US -1209280444,1209280447,GB -1209280448,1209280463,IN -1209280464,1209280479,US -1209280480,1209280487,CN -1209280488,1209280491,US -1209280492,1209280495,AU -1209280496,1209280511,CN -1209280512,1209280515,US -1209280516,1209280519,AU -1209280520,1209280535,US -1209280536,1209280543,BD -1209280544,1209280559,US -1209280560,1209280575,CA -1209280576,1209280607,SC -1209280608,1209280619,US -1209280620,1209280623,CN -1209280624,1209280895,US -1209280896,1209280959,BR -1209280960,1209280975,CN -1209280976,1209281235,US -1209281236,1209281239,AU -1209281240,1209281247,US -1209281248,1209281279,CA -1209281280,1209281535,KH -1209281536,1209281791,IN -1209281792,1209281863,US -1209281864,1209281871,SC -1209281872,1209281927,US -1209281928,1209281935,IN -1209281936,1209282063,US -1209282064,1209282067,SA -1209282068,1209282111,US -1209282112,1209282143,SC -1209282144,1209282559,US -1209282560,1209282623,CN -1209282624,1209283479,US -1209283480,1209283487,GB -1209283488,1209283503,TR -1209283504,1209283519,US -1209283520,1209283535,ES -1209283536,1209283543,GB -1209283544,1209283547,SA -1209283548,1209283551,US -1209283552,1209283567,GB -1209283568,1209283575,CN -1209283576,1209283583,US -1209283584,1209283587,SA -1209283588,1209283599,US -1209283600,1209283607,IN -1209283608,1209283679,US -1209283680,1209283683,CZ -1209283684,1209283687,US -1209283688,1209283695,CN -1209283696,1209283703,GB -1209283704,1209283751,US -1209283752,1209283759,BD -1209283760,1209283775,US -1209283776,1209283807,ZA -1209283808,1209283839,MY -1209283840,1209283967,US -1209283968,1209284095,GB -1209284096,1209284127,CA -1209284128,1209284159,US -1209284160,1209284223,TR -1209284224,1209284375,US -1209284376,1209284383,NL -1209284384,1209284607,US -1209284608,1209284671,TR -1209284672,1209284735,CN -1209284736,1209284759,US -1209284760,1209284767,SC -1209284768,1209284799,MY -1209284800,1209284859,US -1209284860,1209284863,IT -1209284864,1209284991,CN -1209284992,1209284993,US -1209284994,1209284994,TR -1209284995,1209284996,US -1209284997,1209284997,KR -1209284998,1209285004,US -1209285005,1209285005,KR -1209285006,1209285010,US -1209285011,1209285011,CN -1209285012,1209285012,TR -1209285013,1209285013,US -1209285014,1209285014,CN -1209285015,1209285016,US -1209285017,1209285017,CN -1209285018,1209285021,US -1209285022,1209285022,CN -1209285023,1209285183,US -1209285184,1209285247,AE -1209285248,1209285631,US -1209285632,1209285695,CN -1209285696,1209285887,US -1209285888,1209286399,CN -1209286400,1209338513,US +1209271099,1209338513,US 1209338514,1209338514,A1 1209338515,1209357215,US 1209357216,1209357231,SI @@ -37866,11 +37529,7 @@ 1246875521,1246902783,US 1246902784,1246903039,NL 1246903040,1246937087,US -1246937088,1246940159,CA -1246940160,1246940415,GB -1246940416,1246943287,CA -1246943288,1246943295,DE -1246943296,1246945279,CA +1246937088,1246945279,CA 1246945280,1247027199,US 1247027200,1247034559,A2 1247034560,1247034575,US @@ -39794,8 +39453,9 @@ 1296248448,1296248575,US 1296248576,1296248703,IE 1296248704,1296248959,FR -1296248960,1296249024,DE -1296249025,1296249855,FR +1296248960,1296249023,DE +1296249024,1296249087,GB +1296249088,1296249855,FR 1296249856,1296249887,US 1296249888,1296249951,FR 1296249952,1296250015,DE @@ -39878,7 +39538,9 @@ 1296252920,1296252927,PL 1296252928,1296255743,DE 1296255744,1296255999,FR -1296256000,1296257023,DE +1296256000,1296256840,DE +1296256841,1296256848,US +1296256849,1296257023,DE 1296257024,1296257535,US 1296257536,1296257791,DE 1296257792,1296258047,US @@ -45188,7 +44850,9 @@ 1357900544,1357900799,NL 1357900800,1357901823,DE 1357901824,1357902335,EU -1357902336,1357902847,PL +1357902336,1357902365,PL +1357902366,1357902366,NO +1357902367,1357902847,PL 1357902848,1357903359,GB 1357903360,1357903615,DE 1357903616,1357904383,EU @@ -48888,7 +48552,9 @@ 1388821120,1388821150,SE 1388821151,1388821247,AX 1388821248,1388822527,SE -1388822528,1388830719,BG +1388822528,1388826623,BG +1388826624,1388829951,AM +1388829952,1388830719,BG 1388830720,1388838911,FI 1388838912,1388871679,RU 1388871680,1388904447,KZ @@ -54519,7 +54185,8 @@ 1441557760,1441558015,NL 1441558016,1441562623,GB 1441562624,1441566719,IQ -1441566720,1441570815,IR +1441566720,1441568767,IR +1441568768,1441570815,FR 1441570816,1441579007,RU 1441579008,1441582159,DE 1441582160,1441582175,US @@ -56678,6 +56345,7 @@ 1495040000,1495042047,KZ 1495042048,1495044095,DE 1495044096,1495046143,FR +1495046144,1495048191,CH 1495048192,1495050239,RU 1495050240,1495052287,GB 1495052288,1495054335,IE @@ -57057,12 +56725,13 @@ 1502937088,1502953471,RO 1502953472,1502969855,MD 1502969856,1502975231,US -1502975232,1502975247,FR +1502975232,1502975247,GB 1502975248,1502975263,IE 1502975264,1502975295,GB 1502975296,1502975311,FR 1502975312,1502975319,IE -1502975320,1502975359,FR +1502975320,1502975327,FR +1502975328,1502975359,GB 1502975360,1502975367,IE 1502975368,1502975383,FR 1502975384,1502975391,ES @@ -57080,7 +56749,8 @@ 1502979120,1502979135,ES 1502979136,1502979199,FR 1502979200,1502979215,ES -1502979216,1502979327,FR +1502979216,1502979231,CZ +1502979232,1502979327,FR 1502979328,1502979583,US 1502979584,1502980095,FR 1502980096,1502980159,US @@ -57441,6 +57111,10 @@ 1505386496,1505394687,HU 1505394688,1505402879,DE 1505402880,1505411071,DK +1505411072,1505413119,CH +1505413120,1505415167,BG +1505415168,1505417215,CH +1505417216,1505419263,AT 1505419264,1505427455,RU 1505427456,1505435647,UA 1505435648,1505443839,MD @@ -58210,7 +57884,9 @@ 1509900288,1509916671,RU 1509916672,1509933055,GB 1509933056,1509949439,US -1509949440,1515192639,FR +1509949440,1512030207,FR +1512030208,1512046591,YT +1512046592,1515192639,FR 1515192640,1515192655,EU 1515192656,1515241759,FR 1515241760,1515241791,GB @@ -58573,12 +58249,7 @@ 1533540352,1533542399,AT 1533542400,1533607935,HU 1533607936,1533640703,LV -1533640704,1533659135,RU -1533659136,1533661183,LV -1533661184,1533663231,SE -1533663232,1533665279,NL -1533665280,1533667327,GB -1533667328,1533669375,RU +1533640704,1533669375,RU 1533669376,1533671423,DE 1533671424,1533673471,FI 1533673472,1533677567,DE @@ -60862,7 +60533,9 @@ 1540205568,1540206591,DE 1540206592,1540208639,RU 1540208640,1540209663,NO -1540209664,1540211711,RU +1540209664,1540210687,RU +1540210688,1540211199,NL +1540211200,1540211711,RU 1540211712,1540212735,RO 1540212736,1540213759,RU 1540213760,1540214783,UA @@ -65405,7 +65078,7 @@ 1542778368,1542778623,FR 1542778624,1542778879,GB 1542778880,1542780159,RU -1542780416,1542780927,GB +1542780160,1542780927,GB 1542780928,1542781951,PL 1542781952,1542782975,RU 1542782976,1542791167,CZ @@ -65484,6 +65157,13 @@ 1542975488,1542977535,RO 1542977536,1542978559,RU 1542978560,1542978815,PL +1542978816,1542979071,CH +1542979072,1542979583,RU +1542979584,1543110655,DE +1543110656,1543127039,UA +1543127040,1543143423,DE +1543143424,1543241727,RO +1543241728,1543503871,IT 1543503872,1545601023,GB 1545601024,1545673167,SE 1545673168,1545673175,FI @@ -65701,7 +65381,9 @@ 1547542528,1547546623,FR 1547546624,1547550719,IR 1547550720,1547554815,IE -1547554816,1547558911,AT +1547554816,1547555078,AT +1547555079,1547555079,EU +1547555080,1547558911,AT 1547558912,1547563007,IL 1547563008,1547564287,NL 1547564288,1547564311,CH @@ -66153,7 +65835,7 @@ 1566377984,1566380031,BG 1566380032,1566382079,IT 1566382080,1566384127,TR -1566384128,1566386175,RU +1566384128,1566386175,CZ 1566386176,1566388223,FR 1566388224,1566388479,HK 1566388480,1566388991,HU @@ -69645,9 +69327,7 @@ 1613565952,1613570047,US 1613570048,1613574143,CA 1613574144,1613606911,US -1613606912,1613607167,CA -1613607168,1613607423,US -1613607424,1613615103,CA +1613606912,1613615103,CA 1613615104,1613635583,US 1613635584,1613639679,CA 1613639680,1613640703,US @@ -70709,8 +70389,7 @@ 1728312320,1728315391,VN 1728315392,1728316415,ID 1728316416,1728317439,MY -1728317440,1728318463,JP -1728318464,1728319487,SG +1728317440,1728319487,JP 1728319488,1728320511,AU 1728320512,1728321535,PH 1728321536,1728322559,JP @@ -71077,7 +70756,6 @@ 1728652288,1728653311,ID 1728653312,1728654335,NZ 1728654336,1728655359,ID -1728655360,1728655871,IN 1728655872,1728656127,SB 1728656128,1728656383,HK 1728656384,1728661503,AU @@ -71543,12 +71221,105 @@ 1729080320,1729081343,ID 1729081344,1729081599,IN 1729081600,1729082111,AU +1729082112,1729082367,IN 1729082368,1729084415,HK 1729084416,1729085439,JP 1729085440,1729087487,HK 1729087488,1729088511,CN 1729088512,1729090559,AU 1729090560,1729091583,JP +1729091584,1729092607,HK +1729092608,1729094143,BD +1729094144,1729094655,IN +1729094656,1729095679,AU +1729095680,1729096703,SG +1729096704,1729097215,AU +1729097216,1729097727,AF +1729097728,1729098751,ID +1729098752,1729099775,BD +1729099776,1729100543,IN +1729100544,1729100799,ID +1729100800,1729101823,PH +1729363968,1729364991,PK +1729364992,1729367039,JP +1729367040,1729368063,CN +1729368064,1729369343,AU +1729369344,1729369599,ID +1729369600,1729370111,AU +1729370112,1729371135,BN +1729371136,1729372159,IN +1729372160,1729373183,CN +1729373184,1729374207,JP +1729374208,1729375231,TW +1729375232,1729376255,JP +1729376256,1729376767,AU +1729376768,1729377023,SG +1729377024,1729377279,ID +1729377280,1729378303,BD +1729378304,1729378815,IN +1729378816,1729379071,TH +1729379072,1729379327,SG +1729379328,1729380351,HK +1729380352,1729381375,IN +1729381376,1729382399,AU +1729382400,1729383423,JP +1729383424,1729384447,PG +1729384448,1729385471,KH +1729385472,1729386495,JP +1729386496,1729386751,NZ +1729386752,1729387007,BD +1729387008,1729387519,ID +1729387520,1729388543,SG +1729388544,1729389567,HK +1729389568,1729391103,IN +1729391104,1729391615,ID +1729391616,1729392639,JP +1729392640,1729393663,CN +1729393664,1729394687,KR +1729394688,1729395711,TH +1729395712,1729395967,NR +1729395968,1729396735,IN +1729396736,1729397759,CN +1729397760,1729398783,PK +1729398784,1729399807,NZ +1729399808,1729400831,BD +1729400832,1729402879,VN +1729402880,1729403903,MN +1729403904,1729404927,JP +1729404928,1729405951,CN +1729405952,1729406207,IN +1729406208,1729406463,AU +1729406464,1729406975,ID +1729406976,1729407999,SG +1729408000,1729409023,JP +1729409024,1729410047,TW +1729410048,1729411071,BD +1729411072,1729413119,ID +1729413120,1729414143,HK +1729414144,1729414655,ID +1729414656,1729416191,AU +1729416192,1729417215,TH +1729417216,1729418239,AU +1729418240,1729419263,IN +1729419264,1729419519,AU +1729419520,1729420031,IN +1729420032,1729420287,AU +1729420288,1729421311,HK +1729421312,1729422335,MY +1729422336,1729423359,HK +1729423360,1729423871,VU +1729423872,1729424383,AU +1729424384,1729425407,HK +1729425408,1729426431,JP +1729426432,1729427455,AU +1729427456,1729428479,CN +1729428480,1729430527,AU +1729430528,1729431551,BD +1729431552,1729432575,JP +1729432576,1729433599,PH +1729433600,1729433855,IN +1729433856,1729434111,AU +1729434624,1729435647,AU 1729495040,1729519615,CN 1729519616,1729520639,HK 1729520640,1729527807,CN @@ -71571,7 +71342,6 @@ 1729544192,1729545215,IN 1729545216,1729546239,AU 1729546240,1729547263,HK -1729547264,1729548287,IN 1729548288,1729549311,AU 1729549312,1729550335,JP 1729550336,1729551359,MY @@ -71782,7 +71552,7 @@ 1730010112,1730011135,IN 1730011136,1730012159,BT 1730012160,1730013183,ID -1730013184,1730015231,IN +1730013184,1730014207,IN 1730015232,1730016255,MY 1730016256,1730017279,PH 1730017280,1730017791,IN @@ -71796,7 +71566,7 @@ 1744182272,1744184575,AU 1744184576,1744184831,SG 1744184832,1744185087,HK -1744185088,1744185343,AU +1744185088,1744185343,JP 1744185344,1744186367,HK 1744186368,1744187903,IN 1744187904,1744188159,TH @@ -71819,7 +71589,9 @@ 1744202240,1744202495,IN 1744202496,1744202751,ID 1744202752,1744203775,PK -1744203776,1744204799,MY +1744203776,1744204356,MY +1744204357,1744204484,HK +1744204485,1744204799,MY 1744204800,1744205823,ID 1744205824,1744207871,CN 1744207872,1744208127,AU @@ -71934,6 +71706,7 @@ 1776680960,1776812031,KE 1776812032,1776877567,NA 1776877568,1776943103,ZA +1777008640,1777041407,CI 1777061888,1777063935,SD 1777063936,1777065983,MZ 1777065984,1777070079,GQ @@ -72040,8 +71813,8 @@ 1795568912,1795568927,CA 1795568928,1795569663,US 1795569664,1795570175,CA -1795570176,1795570943,US -1795570944,1795571215,CA +1795570176,1795571199,US +1795571200,1795571215,CA 1795571216,1795571223,US 1795571224,1795571231,CA 1795571232,1795571327,US @@ -72050,7 +71823,9 @@ 1795571424,1795571455,CA 1795571456,1795583999,US 1795584000,1795588095,SG -1795588096,1796257919,US +1795588096,1796253695,US +1796253696,1796253951,CA +1796253952,1796257919,US 1796257920,1796258047,PR 1796258048,1796262911,US 1796262912,1796263167,PR @@ -73526,7 +73301,8 @@ 1855979520,1856241663,JP 1856241664,1856307199,TH 1856307200,1856315391,KR -1856315392,1856323583,CN +1856315392,1856319487,HK +1856319488,1856323583,CN 1856323584,1856339967,KR 1856339968,1856372735,JP 1856372736,1856503807,CN @@ -73694,7 +73470,6 @@ 1876951040,1877475327,CN 1877475328,1877688319,JP 1877688320,1877689343,IN -1877689344,1877690367,TH 1877690368,1877691391,IN 1877691392,1877692415,JP 1877692416,1877696511,PH @@ -74585,7 +74360,9 @@ 1971060736,1975517183,CN 1975517184,1979711487,IN 1979711488,1981284351,JP -1981284352,1981808639,CN +1981284352,1981546494,CN +1981546495,1981546495,SG +1981546496,1981808639,CN 1981808640,1983905791,KR 1983905792,1984102399,CN 1984102400,1984118783,AU @@ -75148,7 +74925,8 @@ 2046951424,2047082495,PH 2047082496,2047526911,CN 2047526912,2047531007,HK -2047531008,2047868927,CN +2047531008,2047868415,CN +2047868416,2047868927,SG 2047868928,2048917503,JP 2048917504,2049966079,KR 2049966080,2050047999,CN @@ -77546,9 +77324,11 @@ 2377449472,2377515007,FR 2377515008,2377842687,US 2377842688,2377908223,GB -2377908224,2378026239,US +2377908224,2378025983,US +2378025984,2378026239,NL 2378026240,2378026495,EU -2378026496,2378170367,US +2378026496,2378027007,FR +2378027008,2378170367,US 2378170368,2378235903,FI 2378235904,2378301439,US 2378301440,2378303231,FR @@ -78280,7 +78060,7 @@ 2466232320,2466234367,ES 2466234368,2466242559,RU 2466242560,2466250751,GE -2466316288,2466323475,US +2466250752,2466323475,US 2466323476,2466323477,IN 2466323478,2466643967,US 2466643968,2466709503,KR @@ -78398,6 +78178,7 @@ 2478571520,2478702591,GB 2478702592,2478899199,US 2478899200,2478964735,GB +2478964736,2479030271,CA 2479030272,2479095807,US 2479095808,2479161343,FR 2479161344,2479226879,GB @@ -78433,7 +78214,7 @@ 2482634752,2482700287,FR 2482700288,2482765823,CZ 2482765824,2482831359,IE -2482831360,2482962431,US +2482831360,2483027967,US 2483093504,2483159039,US 2483159040,2483224575,SE 2483224576,2483290111,GB @@ -78544,7 +78325,9 @@ 2500141824,2500142847,IE 2500142848,2500143103,US 2500143104,2500144127,IE -2500144128,2500161023,US +2500144128,2500144895,US +2500144896,2500145151,IE +2500145152,2500161023,US 2500161024,2500161535,GB 2500161536,2500175871,US 2500175872,2500175879,RO @@ -78847,7 +78630,6 @@ 2547187712,2547318783,GB 2547318784,2547515391,US 2547515392,2547515399,DK -2547517440,2547519487,GB 2548039680,2548563967,GB 2548563968,2548826111,IR 2548826112,2548834303,AT @@ -80105,7 +79887,9 @@ 2684194720,2684194723,BR 2684194724,2684194727,US 2684194728,2684194751,DK -2684194752,2684194767,US +2684194752,2684194754,US +2684194755,2684194755,NL +2684194756,2684194767,US 2684194768,2684194815,DK 2684194816,2684194839,NL 2684194840,2684194847,US @@ -81140,6 +80924,7 @@ 2784428032,2785542143,US 2785542144,2786066431,CH 2786066432,2788163583,US +2788163584,2788229119,CA 2788229120,2788229935,US 2788229936,2788229943,GB 2788229944,2788230663,US @@ -81665,6 +81450,7 @@ 2882535424,2883583999,CN 2883584000,2885681151,VN 2885681152,2886729727,US +2887778304,2889875455,US 2894069760,2894921727,US 2894921728,2895118335,GB 2895118336,2895301887,US @@ -81814,8 +81600,8 @@ 2915275072,2915275263,US 2915275264,2915275327,PL 2915275328,2915497759,US -2915497760,2915499807,A1 -2915499808,2915516415,US +2915497760,2915497761,A1 +2915497762,2915516415,US 2915516416,2915516671,NL 2915516672,2915516927,CA 2915516928,2915517439,US @@ -85962,7 +85748,9 @@ 2954861848,2954861863,FR 2954861864,2954861867,NL 2954861868,2954861871,FR -2954861872,2954861887,IE +2954861872,2954861875,IE +2954861876,2954861879,CH +2954861880,2954861887,IE 2954861888,2954861919,DE 2954861920,2954861923,PL 2954861924,2954861927,ES @@ -86482,13 +86270,7 @@ 2954950656,2954952703,ES 2954952704,2955018239,TR 2955018240,2955034623,JP -2955034624,2955051007,IE -2955051008,2955067391,NL -2955067392,2955069439,IE -2955069440,2955071487,NL -2955071488,2955073535,IE -2955073536,2955075583,FR -2955075584,2955083775,NL +2955034624,2955083775,IE 2955083776,2955149311,GB 2955149312,2955411455,UA 2955411456,2955673599,TR @@ -86582,8 +86364,7 @@ 2956823677,2956823677,A1 2956823678,2956824575,US 2956824576,2956826623,PT -2956826624,2956827647,US -2956827648,2956828671,DK +2956826624,2956828671,HR 2956828672,2956832767,BA 2956832768,2956836863,AT 2956836864,2956853247,SK @@ -87134,7 +86915,59 @@ 2960907776,2960908031,GB 2960908032,2960908287,PL 2960908288,2960916479,KG -2960916480,2960924671,UA +2960916480,2960932863,UA +2960932864,2960933887,IR +2960933888,2960934399,GB +2960934400,2960934655,LI +2960934656,2960934911,DE +2960934912,2960941055,RO +2960941056,2960943103,AM +2960943104,2960945151,RO +2960945152,2960945663,LI +2960945664,2960949247,RU +2960949248,2960951295,UA +2960951296,2960951807,RU +2960951808,2960952319,UA +2960952320,2960953343,PL +2960953344,2960954367,RU +2960954368,2960954623,SE +2960954624,2960954879,DE +2960954880,2960960511,RU +2960960512,2960963583,RO +2960963584,2960964607,CZ +2960964608,2960965119,RU +2960965120,2960965375,PL +2960965376,2960965631,GB +2960965632,2960973823,RU +2960973824,2960974335,SE +2960974336,2960974847,RU +2960974848,2960977919,UA +2960977920,2960979455,PL +2960979456,2960979711,IE +2960979712,2960979967,EE +2960979968,2960980223,RU +2960980224,2960980479,AT +2960980480,2960980991,SE +2960980992,2960981247,PT +2960981248,2960982015,NL +2960982016,2960990207,RO +2960990208,2960998399,UA +2960998400,2961039359,RU +2961039360,2961047551,UA +2961047552,2961057023,RU +2961057024,2961057279,IE +2961057280,2961057535,GR +2961057536,2961057791,AT +2961057792,2961061887,RU +2961061888,2961062911,PL +2961062912,2961063935,UA +2961063936,2961072127,CZ +2961072128,2961088511,UA +2961088512,2961088767,SE +2961088768,2961089535,UA +2961089536,2961090559,KG +2961090560,2961113087,RO +2961113088,2961178623,CH 2961178624,2965372927,FR 2965372928,2965766143,RU 2965766144,2965897215,DE @@ -87160,8 +86993,8 @@ 2967343104,2967345151,RU 2967345152,2967347199,ES 2967347200,2967347455,HR -2967347456,2967347583,GB -2967347584,2967351295,HR +2967347456,2967347460,GB +2967347461,2967351295,HR 2967351296,2967355391,FR 2967355392,2967371775,RO 2967371776,2967388159,KZ @@ -87268,7 +87101,9 @@ 2987487232,2987491327,HR 2987491328,2987495423,RU 2987495424,2987499519,NO -2987499520,2987500511,MD +2987499520,2987500199,MD +2987500200,2987500207,AQ +2987500208,2987500511,MD 2987500512,2987500543,US 2987500544,2987500767,MD 2987500768,2987500799,US @@ -91647,8 +91482,7 @@ 2988555212,2988555215,DE 2988555216,2988555519,FR 2988555520,2988555527,IE -2988555528,2988555528,DE -2988555529,2988555531,ES +2988555528,2988555531,DE 2988555532,2988555535,FR 2988555536,2988555543,ES 2988555544,2988555559,FR @@ -93317,7 +93151,9 @@ 3025637632,3025637887,MY 3025637888,3025638399,IN 3025638400,3025638655,SG -3025638656,3025647359,IN +3025638656,3025639167,IN +3025639168,3025639175,SG +3025639176,3025647359,IN 3025647360,3025647615,AU 3025647616,3025649151,IN 3025649152,3025649663,HK @@ -93348,7 +93184,9 @@ 3026069504,3026071551,JP 3026071552,3026073599,HK 3026073600,3026075647,CN -3026075648,3026083839,AF +3026075648,3026080769,AF +3026080770,3026080770,US +3026080771,3026083839,AF 3026083840,3026087935,CN 3026087936,3026089983,AU 3026092032,3026108415,MO @@ -93564,12 +93402,13 @@ 3044016128,3044081663,EC 3044147200,3044155391,GT 3044163584,3044171775,BO +3044188160,3044196351,BO 3044196352,3044204543,AR 3044212736,3044245503,HN 3044278272,3044540415,AR 3044802560,3045064703,PY 3045064704,3047161855,CO -3047161856,3047292927,CL +3047161856,3047423999,CL 3047424000,3047686143,AR 3047948288,3048079359,CL 3048210432,3048275967,PE @@ -93583,7 +93422,12 @@ 3049119744,3049127935,HN 3049193472,3049259007,PA 3049259008,3049521151,CR +3049652224,3049717759,EC 3049783296,3050045439,CL +3050307584,3050340351,VE +3050373120,3050405887,AR +3050438656,3050504191,HN +3051356160,3051364351,CR 3053453312,3054501887,ID 3054501888,3054534655,HK 3054534656,3054537727,PH @@ -94010,11 +93854,7 @@ 3094020096,3094085631,CA 3094085632,3096444927,US 3096444928,3096969215,CA -3096969216,3097124223,US -3097124224,3097124231,AE -3097124232,3097124303,US -3097124304,3097124311,AE -3097124312,3097130139,US +3096969216,3097130139,US 3097130140,3097130140,A1 3097130141,3097493503,US 3097493504,3097755647,CA @@ -94335,6 +94175,7 @@ 3132227584,3132293119,EC 3132293120,3132309503,HN 3132309504,3132313599,CR +3132313600,3132317695,CL 3132317696,3132321791,CO 3132321792,3132325887,PA 3132325888,3132358655,SR @@ -95428,6 +95269,20 @@ 3164667904,3164733439,PS 3164733440,3164798975,RU 3164798976,3164864511,UA +3164864512,3164897279,GB +3164897280,3164899327,IT +3164899328,3164901375,RU +3164901376,3164903423,PL +3164903424,3164905471,AM +3164905472,3164913663,RU +3164913664,3164915711,ES +3164915712,3164917759,GR +3164917760,3164919807,RU +3164919808,3164921855,AL +3164921856,3164923903,GB +3164923904,3164925951,DE +3164925952,3164927999,PL +3164928000,3164930047,NL 3164930048,3164932095,IE 3164932096,3164934143,FR 3164934144,3164936191,PL @@ -96394,7 +96249,9 @@ 3166654464,3166658559,RU 3166658560,3166662655,UA 3166662656,3166666751,RU -3166666752,3166670847,RO +3166666752,3166667775,RO +3166667776,3166668799,GB +3166668800,3166670847,RO 3166670848,3166672895,UA 3166672896,3166674943,GB 3166674944,3166679039,RU @@ -96594,6 +96451,8 @@ 3188015104,3188031487,HN 3188031488,3188039679,SV 3188047872,3188051967,CO +3188051968,3188054015,CR +3188054016,3188056063,AR 3188056064,3188064255,PA 3188064256,3188080639,VE 3188080640,3188088831,CU @@ -96733,6 +96592,7 @@ 3193623040,3193634815,CO 3193634816,3193700351,CL 3193700352,3193724927,HN +3193724928,3193729023,AR 3193729024,3193733119,CU 3193733120,3193735423,AR 3193735424,3193735679,US @@ -96744,9 +96604,13 @@ 3193739264,3193739519,US 3193739520,3193741311,AR 3193741312,3193741567,US -3193741568,3193747839,AR +3193741568,3193745279,AR +3193745280,3193745407,US +3193745408,3193747839,AR 3193747840,3193747967,US -3193747968,3193765887,AR +3193747968,3193754623,AR +3193754624,3193754751,US +3193754752,3193765887,AR 3193765888,3193774079,TT 3193774080,3193775103,PA 3193775104,3193776127,GY @@ -96808,7 +96672,9 @@ 3194372096,3194380287,HT 3194380288,3194381439,BZ 3194381440,3194381567,US -3194381568,3194388479,BZ +3194381568,3194383231,BZ +3194383232,3194383359,US +3194383360,3194388479,BZ 3194388480,3194396671,PE 3194396672,3194413055,CO 3194413056,3194421247,CL @@ -96872,6 +96738,8 @@ 3194728448,3194729471,CL 3194729472,3194730495,PE 3194730496,3194732543,AR +3194736640,3194737663,NI +3194737664,3194740735,AR 3194740736,3194742783,CL 3194742784,3194744831,EC 3194744832,3194746879,AR @@ -96894,7 +96762,9 @@ 3194871808,3194879999,BO 3194880000,3194896383,DO 3194896384,3194904575,CO -3194904576,3194925055,CL +3194904576,3194908671,CL +3194908672,3194910719,AR +3194910720,3194925055,CL 3194925056,3194929151,AR 3194929152,3194937343,EC 3194937344,3194945535,AR @@ -96915,6 +96785,7 @@ 3195060224,3195064319,UY 3195068416,3195076607,AN 3195076608,3195084799,CL +3195084800,3195092991,CR 3195092992,3195097087,AR 3195101184,3195109375,CR 3195109376,3195125759,AR @@ -96933,8 +96804,11 @@ 3195207680,3195211775,GT 3195215872,3195224063,AR 3195224064,3195232255,PA +3195232256,3195236351,CR +3195236352,3195240447,AR 3195240448,3195256831,HT 3195256832,3195265023,AR +3195265024,3195273215,CO 3195273216,3195535359,PE 3195535360,3195543551,SV 3195547648,3195551743,AR @@ -96959,7 +96833,9 @@ 3195715584,3195731967,AR 3195731968,3195736063,EC 3195738112,3195740159,HN -3195740160,3195744255,PA +3195740160,3195741439,PA +3195741440,3195741695,US +3195741696,3195744255,PA 3195744256,3195748351,EC 3195748352,3195752447,CL 3195756544,3195763711,AR @@ -97069,9 +96945,12 @@ 3201630208,3201695743,TT 3201695744,3201761279,EC 3201761280,3201826815,CL -3201826816,3201875967,AR +3201826816,3201871871,AR +3201871872,3201875967,PE 3201875968,3201880063,CO -3201880064,3201884159,AR +3201880064,3201880831,AR +3201880832,3201881087,EC +3201881088,3201884159,AR 3201884160,3201888511,VE 3201888512,3201925119,AR 3201925120,3201957887,CL @@ -99126,8 +99005,7 @@ 3229972736,3229972991,SE 3229972992,3229975295,US 3229975296,3229975551,GB -3229975552,3229976575,US -3229978624,3230004223,US +3229975552,3230004223,US 3230004224,3230004479,GB 3230004480,3230004991,US 3230005760,3230006015,ZA @@ -99975,7 +99853,8 @@ 3232049152,3232049407,GB 3232049408,3232051967,SE 3232051968,3232052991,GB -3232052992,3232060415,SE +3232052992,3232053247,US +3232053248,3232060415,SE 3232060416,3232060671,IE 3232060672,3232065791,SE 3232065792,3232066303,GB @@ -100065,9 +99944,9 @@ 3232595968,3232598015,GB 3232629248,3232629759,US 3232629760,3232630783,CA -3232630784,3232634879,US -3232636928,3232645119,US +3232630784,3232645119,US 3232645120,3232647167,AT +3232649216,3232653311,US 3232661504,3232694271,JP 3232694272,3232702463,US 3232702464,3232703743,FI @@ -100095,8 +99974,9 @@ 3232813056,3232820223,SE 3232820224,3232820479,IE 3232820480,3232825343,SE -3232890880,3233021951,US +3232890880,3233153023,US 3233285120,3233285375,US +3233288192,3233292287,CA 3233480704,3233484799,US 3233484800,3233488895,ES 3233488896,3233505279,US @@ -100262,8 +100142,7 @@ 3233729280,3233729535,US 3233729536,3233730047,SG 3233730560,3233732607,AU -3233732608,3233733631,US -3233734656,3233736959,US +3233732608,3233736959,US 3233736960,3233737983,FR 3233737984,3233738751,US 3233738752,3233739007,GB @@ -100409,7 +100288,7 @@ 3234193664,3234201599,CA 3234202624,3234203647,US 3234203648,3234205695,BR -3234205696,3234222079,US +3234205696,3234226175,US 3234234368,3234239327,US 3234239328,3234239329,MY 3234239330,3234240255,US @@ -100422,20 +100301,21 @@ 3234267136,3234271231,US 3234271232,3234275327,PT 3234275328,3234279423,AU +3234279424,3234283519,CA 3234283520,3234310367,US 3234310368,3234310371,HK 3234310372,3234312703,US 3234332672,3234349055,US 3234349056,3234353151,NZ -3234365440,3234367487,US +3234353152,3234357247,US +3234365440,3234373631,US 3234398208,3234400679,US 3234400680,3234400687,NA 3234400688,3234401511,US 3234401512,3234401519,NA 3234401520,3234549759,US 3234549760,3234550015,RU -3234553856,3234554367,US -3234555904,3234556415,US +3234553856,3234556415,US 3234556416,3234556927,CA 3234556928,3234557439,FI 3234557440,3234564607,US @@ -100553,7 +100433,7 @@ 3234861056,3234897919,US 3234922496,3234988031,US 3234988032,3234992127,CA -3234996224,3235000319,US +3234992128,3235004415,US 3235004416,3235020799,CA 3235053568,3235086335,US 3235119104,3235184639,US @@ -100706,7 +100586,10 @@ 3236585984,3236586239,CA 3236586240,3236604671,US 3236604672,3236604927,CA -3236604928,3236617471,US +3236604928,3236610047,US +3236610560,3236611071,US +3236611072,3236612095,CA +3236612096,3236617471,US 3236617728,3236617983,US 3236617984,3236619775,CA 3236619776,3236620031,US @@ -100754,18 +100637,19 @@ 3236788480,3236789503,GB 3236789504,3236790271,US 3236823040,3236827135,CH -3236827136,3236829183,US -3236831232,3236855807,US +3236827136,3236855807,US 3236888576,3236958207,US 3236958208,3236962303,AU 3236962304,3236966399,US 3236970496,3236978687,US 3236986880,3236995071,US -3237019648,3237036031,US +3237019648,3237021695,US +3237021696,3237023743,CA +3237023744,3237031935,US 3237085184,3237154815,US 3237154816,3237155839,ES 3237155840,3237156863,AU -3237158912,3237160959,US +3237156864,3237160959,US 3237183488,3237216255,US 3237216256,3237281791,JP 3237281792,3237285119,US @@ -100855,7 +100739,9 @@ 3237690624,3237691903,SA 3237691904,3237698303,US 3237698304,3237698559,CA -3237698560,3237716991,US +3237698560,3237712895,US +3237712896,3237713151,AU +3237713152,3237716991,US 3237716992,3237717247,CA 3237717248,3237717503,US 3237717504,3237717759,CA @@ -102577,8 +102463,10 @@ 3241541632,3241724415,FR 3241724416,3241724671,RU 3241724672,3241803775,FR +3241803776,3241803823,CY 3241803824,3241803831,EU 3241803832,3241803839,GB +3241803840,3241804031,CY 3241804032,3241820159,BE 3241820160,3241821695,GB 3241821696,3241822207,GR @@ -104547,7 +104435,9 @@ 3247927296,3247928319,PL 3247928320,3247929343,HU 3247929344,3247931391,GB -3247931392,3247960063,FR +3247931392,3247947775,FR +3247947776,3247955967,RU +3247955968,3247960063,FR 3247960064,3247962111,UA 3247962112,3247963135,DE 3247963136,3247964159,UA @@ -104672,6 +104562,7 @@ 3248808960,3248810079,FR 3248810080,3248810111,UA 3248810112,3248810143,RU +3248810144,3248810175,CY 3248810176,3248810207,FR 3248810208,3248810239,GB 3248810240,3248810495,CH @@ -104959,7 +104850,7 @@ 3249868544,3249868799,DE 3249868800,3249871103,SE 3249871104,3249871359,NO -3249871360,3249871615,SE +3249871360,3249871615,US 3249871616,3249871871,NO 3249871872,3249872383,SE 3249872384,3249872639,GB @@ -105100,7 +104991,8 @@ 3250357888,3250357903,DK 3250357904,3250357919,FR 3250357920,3250357927,PL -3250357952,3250358015,GB +3250357928,3250357959,CY +3250357960,3250358015,GB 3250358016,3250358527,LB 3250358528,3250358783,HU 3250358784,3250359295,LB @@ -105549,14 +105441,18 @@ 3251213120,3251213151,NL 3251213152,3251213183,FR 3251213184,3251213215,UA +3251213216,3251213247,CY 3251213248,3251213311,GB +3251213312,3251213375,CY 3251213376,3251213439,DE 3251213440,3251213503,GB 3251213504,3251213567,NL 3251213568,3251213631,FR 3251213632,3251213695,PL 3251213696,3251213759,LV +3251213760,3251213823,CY 3251213824,3251213887,GB +3251213888,3251214015,CY 3251214016,3251214079,UA 3251214080,3251214143,FR 3251214144,3251214207,AF @@ -105570,6 +105466,7 @@ 3251215232,3251215359,IL 3251215360,3251215487,UA 3251215488,3251215615,SE +3251215616,3251215743,CY 3251215744,3251215871,GB 3251215872,3251216127,RO 3251216128,3251216255,FI @@ -105843,12 +105740,14 @@ 3252341504,3252342015,GR 3252342016,3252342079,GB 3252342080,3252342143,IR +3252342144,3252342207,CY 3252342208,3252342239,GB 3252342240,3252342271,CH 3252342272,3252342527,SE 3252342528,3252342543,NO 3252342544,3252342591,DE 3252342592,3252342607,IE +3252342608,3252342655,CY 3252342656,3252342783,IL 3252342784,3252346367,DE 3252346368,3252346623,GB @@ -106675,6 +106574,7 @@ 3253723648,3253724159,AT 3253724160,3253724671,UA 3253724672,3253725183,RO +3253725184,3253725439,SE 3253725440,3253725695,RU 3253725696,3253726207,UA 3253726208,3253726719,RO @@ -106940,7 +106840,15 @@ 3254557440,3254557695,AT 3254557696,3254576383,FR 3254576384,3254576543,DO -3254576544,3254623743,FR +3254576544,3254611455,FR +3254611456,3254611456,YT +3254611457,3254611711,FR +3254611712,3254611712,YT +3254611713,3254615551,FR +3254615552,3254615552,YT +3254615553,3254615807,FR +3254615808,3254615808,YT +3254615809,3254623743,FR 3254623744,3254624255,US 3254624256,3254648831,FR 3254648832,3254648895,DK @@ -107018,7 +106926,14 @@ 3254790912,3254791423,BE 3254791424,3254791679,SK 3254791680,3254792191,DK -3254792192,3254793215,LV +3254792192,3254792959,LV +3254792960,3254793215,EE +3254793216,3254794751,UA +3254794752,3254795263,SE +3254795264,3254795519,KZ +3254795520,3254795775,SE +3254795776,3254796031,PL +3254796032,3254796287,AT 3254796288,3254797311,SE 3254797312,3254798335,RU 3254798336,3254799359,AT @@ -108184,6 +108099,7 @@ 3257545216,3257546495,GR 3257546496,3257546527,DE 3257546528,3257546623,CH +3257546624,3257546655,CY 3257546656,3257546687,SE 3257546688,3257546719,DE 3257546720,3257546751,DK @@ -109563,9 +109479,7 @@ 3259479808,3259480063,DK 3259480064,3259480831,SE 3259480832,3259481087,ES -3259481088,3259492351,SE -3259492352,3259493375,GB -3259493376,3259498495,SE +3259481088,3259498495,SE 3259498496,3259506943,GB 3259506944,3259507199,ES 3259507200,3259507711,GB @@ -110276,6 +110190,7 @@ 3262460416,3262460543,UA 3262460544,3262460671,RU 3262460672,3262460927,AE +3262460928,3262461055,CY 3262461056,3262461183,DK 3262461184,3262461311,SN 3262461312,3262461439,NO @@ -113542,12 +113457,14 @@ 3264846592,3264846719,US 3264846720,3264846847,RU 3264846848,3264846911,DK +3264846912,3264847103,CY 3264847104,3264847135,FR 3264847136,3264847167,ES 3264847168,3264847199,IE 3264847200,3264847231,NO 3264847232,3264847263,CH 3264847264,3264847295,LI +3264847296,3264847359,CY 3264847360,3264847487,FR 3264847488,3264847615,RU 3264847616,3264847679,PL @@ -117611,19 +117528,24 @@ 3275510016,3275510079,SE 3275510080,3275510143,ES 3275510144,3275510207,FI +3275510208,3275510335,CY 3275510336,3275510399,IE 3275510400,3275510463,NL 3275510464,3275510527,GB 3275510528,3275510559,PL 3275510560,3275510591,DE +3275510592,3275510623,CY 3275510624,3275510655,EE 3275510656,3275510687,FR +3275510688,3275510719,CY 3275510720,3275510751,GB 3275510752,3275510783,NL +3275510784,3275510911,CY 3275510912,3275511167,GB 3275511168,3275511295,LV 3275511296,3275511551,GB 3275511552,3275511679,NL +3275511680,3275511807,CY 3275511808,3275511935,CH 3275511936,3275512063,FR 3275512064,3275512191,CZ @@ -117636,11 +117558,13 @@ 3275512896,3275512959,AT 3275512960,3275513023,PL 3275513024,3275513087,UA +3275513088,3275513151,CY 3275513152,3275513215,ES 3275513216,3275513279,CH 3275513280,3275513343,DK 3275513344,3275513471,PL 3275513472,3275513599,FR +3275513600,3275513727,CY 3275513728,3275513855,GB 3275513856,3275522047,DE 3275522048,3275530239,IT @@ -117912,7 +117836,7 @@ 3275792896,3275793407,UA 3275793408,3275793919,FR 3275793920,3275794431,UA -3275794432,3275794943,EU +3275794432,3275794943,GB 3275794944,3275795455,RS 3275795456,3275795967,GR 3275795968,3275796479,PL @@ -121130,7 +121054,7 @@ 3276678144,3276678655,SE 3276678656,3276679167,UA 3276679168,3276679679,DE -3276679680,3276680191,RO +3276679680,3276680191,UA 3276680192,3276680703,SK 3276680704,3276681215,AT 3276681216,3276681727,PL @@ -126684,7 +126608,9 @@ 3283951616,3283952639,PL 3283952640,3283953663,UA 3283953664,3283954687,PL -3283954688,3283956735,UA +3283954688,3283955326,UA +3283955327,3283955327,CY +3283955328,3283956735,UA 3283956736,3283957759,PL 3283957760,3283958783,GR 3283958784,3283959807,UA @@ -129937,6 +129863,7 @@ 3291214336,3291214591,GH 3291214592,3291214847,ZA 3291214848,3291215103,NG +3291215104,3291215359,KE 3291216896,3291217919,MU 3291217920,3291230207,ZA 3291230208,3291234303,GH @@ -130232,6 +130159,7 @@ 3314286592,3314548735,DZ 3314548736,3314810879,MA 3314810880,3314827263,AO +3314827264,3314829311,ZA 3314843648,3314860031,MG 3314860032,3314868223,CI 3314868224,3314876415,GH @@ -130243,12 +130171,16 @@ 3314912256,3314913279,BI 3314913280,3314914303,ZA 3314914304,3314915327,AO +3314915328,3314916351,MW +3314916352,3314917375,MZ +3314924544,3314925567,NG 3314925568,3314941951,GN 3314941952,3315073023,EG 3315073024,3315138559,TZ 3315138560,3315204095,MA 3315204096,3315269631,ET 3315269632,3315286015,ZA +3315286016,3315294207,KE 3315318784,3315322879,LS 3315326976,3315331071,ZW 3315331072,3315333119,GH @@ -130352,7 +130284,7 @@ 3321790464,3321806847,LS 3321806848,3321823231,SD 3321823232,3321839615,NG -3321839616,3321855999,MU +3321839616,3321855999,GH 3321856000,3321860095,CV 3321860096,3321864191,ZA 3321864192,3321868287,NG @@ -130380,18 +130312,15 @@ 3322339584,3322339839,GB 3322339840,3322609663,US 3322609664,3322610687,SA -3322610688,3322611711,US -3322613760,3322642431,US +3322610688,3322642431,US 3322675200,3322683391,US 3322683392,3322691583,BR 3322691584,3322707967,US 3322740736,3322773503,US -3322806272,3322871807,US -3322873856,3322875903,US +3322806272,3322875903,US 3322880000,3322888191,AU 3322888192,3322904575,US -3322937344,3322938367,US -3322939392,3322940671,US +3322937344,3322940671,US 3322940672,3322940927,AP 3322940928,3322945535,US 3322953728,3322970111,US @@ -130419,6 +130348,7 @@ 3323061504,3323062015,US 3323062016,3323062527,BR 3323062784,3323068415,US +3323199488,3323201535,US 3323201536,3323203583,CA 3323203584,3323207679,US 3323207680,3323215871,CA @@ -130469,21 +130399,22 @@ 3324040192,3324040447,AU 3324040448,3324051455,US 3324051456,3324182527,CA -3324182528,3324256255,US +3324182528,3324255231,US +3324255232,3324256255,VI 3324256256,3324259327,SA 3324259328,3324259583,US 3324259584,3324259839,SA 3324259840,3324260095,US -3324264448,3324266495,US +3324260352,3324266495,US 3324266496,3324266751,AP 3324266752,3324270079,US 3324270080,3324270591,EU 3324270592,3324379135,US 3324379136,3324380159,CA -3324380160,3324403711,US -3324411904,3324470271,US +3324380160,3324470271,US 3324470272,3324474367,GB 3324474368,3324579839,US +3324582912,3324583935,CA 3324583936,3324588031,CL 3324588032,3324600319,US 3324641280,3324642303,US @@ -130583,13 +130514,15 @@ 3325144832,3325145087,CA 3325145088,3325169663,US 3325169664,3325171711,BR -3325173760,3325190143,US +3325171712,3325190143,US 3325231104,3325232127,US 3325233152,3325234175,US 3325234176,3325234431,SA 3325234432,3325249279,US 3325249280,3325249535,CO -3325249536,3325259775,US +3325249536,3325257727,US +3325257728,3325258751,CA +3325258752,3325259775,US 3325259776,3325261311,CA 3325261312,3325264895,US 3325267200,3325267711,US @@ -130668,7 +130601,9 @@ 3326492240,3326492255,CA 3326492256,3326526463,US 3326526464,3326526719,CA -3326526720,3326631935,US +3326526720,3326613503,US +3326613504,3326615551,CA +3326615552,3326631935,US 3326631936,3326640127,CA 3326640128,3326676991,US 3326680832,3326682623,CA @@ -130702,25 +130637,26 @@ 3327199232,3327200255,BR 3327200256,3327256831,US 3327256832,3327257087,GU -3327257088,3327410175,US +3327257088,3327426559,US 3327426560,3327459327,CA 3327459328,3327591237,US 3327591238,3327591238,A1 3327591239,3327723519,US 3327723520,3327725567,CA -3327725568,3327746047,US -3327754240,3327803647,US +3327725568,3327803647,US 3327803648,3327803903,AP 3327803904,3327805695,US 3327807488,3327811583,CA -3327819776,3327885311,US +3327811584,3327885311,US 3327885312,3327918079,CA 3327918080,3327995903,US 3327995904,3327996927,AN 3327996928,3328028671,US 3328028672,3328030719,AN 3328030720,3328180223,US -3328180224,3328214783,CA +3328180224,3328202751,CA +3328202752,3328204799,US +3328204800,3328214783,CA 3328214784,3328215295,GB 3328215296,3328235007,CA 3328235008,3328235263,US @@ -130730,8 +130666,7 @@ 3328243200,3328245759,CA 3328245760,3328323583,US 3328323584,3328327679,CA -3328327680,3328335871,US -3328344064,3328360447,US +3328327680,3328360447,US 3328376832,3328394239,US 3328394240,3328394495,GB 3328394496,3328414719,US @@ -130744,8 +130679,10 @@ 3328432640,3328433663,CA 3328433664,3328433919,CH 3328433920,3328475135,US -3328475136,3328483327,CA -3328507904,3328617983,US +3328475136,3328477183,CA +3328477184,3328479231,US +3328479232,3328483327,CA +3328491520,3328617983,US 3328617984,3328618239,CA 3328618240,3328629503,US 3328629504,3328629759,EU @@ -130787,7 +130724,9 @@ 3330662912,3330663167,GB 3330663168,3330664191,US 3330664192,3330664447,CA -3330664448,3330714367,US +3330664448,3330677759,US +3330677760,3330678783,CA +3330678784,3330714367,US 3330714368,3330714623,CA 3330714624,3330726655,US 3330726656,3330726911,CA @@ -130863,8 +130802,7 @@ 3331868162,3331868162,EU 3331868163,3332001791,US 3332001792,3332005887,CA -3332005888,3332030463,US -3332046848,3332083967,US +3332005888,3332083967,US 3332083968,3332084223,AP 3332084224,3332095231,US 3332095232,3332095487,EU @@ -130898,7 +130836,9 @@ 3332947968,3332948223,US 3332948224,3332966143,CA 3332966144,3332966399,US -3332966400,3333012479,CA +3332966400,3332988927,CA +3332988928,3332989951,US +3332989952,3333012479,CA 3333012480,3333012991,US 3333012992,3333029887,CA 3333029888,3333212415,US @@ -131010,15 +130950,15 @@ 3337055232,3337060351,CA 3337060352,3337069055,US 3337069056,3337069119,GB -3337069120,3337289727,US -3337289728,3337297919,CA +3337069120,3337289983,US +3337289984,3337297919,CA 3337297920,3337302015,US 3337302016,3337304319,CA 3337304320,3337305599,US 3337305600,3337335295,CA 3337335296,3337335807,US -3337335808,3337355263,CA -3337355264,3337650175,US +3337335808,3337355007,CA +3337355008,3337650175,US 3337650176,3337650250,GB 3337650251,3337650251,EU 3337650252,3337650687,GB @@ -131031,13 +130971,17 @@ 3337653760,3337654783,CH 3337654784,3337655039,AU 3337655040,3337682943,CH -3337682944,3337957375,US +3337682944,3337948415,US +3337948672,3337949183,CA +3337949184,3337957375,US 3337957376,3337961471,CA 3337977856,3337980671,US 3337980672,3337980927,PR 3337980928,3337986047,US 3337986048,3337986303,BB -3337986304,3338069247,US +3337986304,3338021887,US +3338021888,3338022911,CA +3338022912,3338069247,US 3338069248,3338069759,BB 3338069760,3338207487,US 3338207488,3338207743,CA @@ -131373,7 +131317,9 @@ 3341056240,3341056255,US 3341056256,3341056271,IN 3341056272,3341056287,US -3341056288,3341056415,IN +3341056288,3341056346,IN +3341056347,3341056347,US +3341056348,3341056415,IN 3341056416,3341056767,US 3341056768,3341056895,CA 3341056896,3341082623,US @@ -131866,24 +131812,26 @@ 3345436928,3345437183,ES 3345437184,3345437695,GB 3345437696,3345437951,NL +3345437952,3345438207,CA 3345438208,3345438463,GB 3345438464,3345438975,FR -3345439232,3345439743,US +3345438976,3345439743,US 3345439744,3345439999,FR 3345440000,3345440255,DE -3345440256,3345440767,US -3345440768,3345441791,DE +3345440256,3345441023,US +3345441024,3345441791,DE 3345442304,3345442559,CL 3345442560,3345442815,JP 3345442816,3345443327,AT 3345443328,3345443583,CH 3345443584,3345443839,DE -3345444096,3345444607,US +3345443840,3345444607,US 3345444608,3345444676,CH 3345444677,3345444678,US 3345444679,3345445119,CH 3345445120,3345445375,US 3345445376,3345446399,GB +3345446400,3345446655,US 3345446656,3345446911,IT 3345446912,3345447679,US 3345447680,3345448447,FR @@ -131907,8 +131855,8 @@ 3346227200,3346234367,US 3346234368,3346235391,CA 3346235392,3346241535,US -3346241536,3346243583,CA -3346243584,3346282495,US +3346241536,3346243327,CA +3346243328,3346282495,US 3346282496,3346284543,PR 3346284544,3346323455,US 3346323456,3346325503,CA @@ -132016,7 +131964,8 @@ 3349479168,3349479423,CA 3349479424,3349532671,US 3349532672,3349533695,GB -3349533696,3349544959,US +3349533696,3349533951,CA +3349533952,3349545215,US 3349545216,3349545727,CA 3349545728,3349545983,US 3349545984,3349551103,CA @@ -132042,9 +131991,7 @@ 3349645312,3349647359,CA 3349647360,3349649407,US 3349649408,3349653503,CA -3349653504,3349691903,US -3349691904,3349692031,CZ -3349692032,3349723260,US +3349653504,3349723260,US 3349723261,3349723265,CA 3349723266,3349723360,US 3349723361,3349723367,CA @@ -132158,8 +132105,8 @@ 3351035904,3351036927,US 3351036928,3351037951,CA 3351037952,3351043071,US -3351043072,3351043327,FR -3351043328,3351044095,CA +3351043072,3351043583,FR +3351043584,3351044095,CA 3351044096,3351045311,US 3351045312,3351045343,RU 3351045344,3351045439,US @@ -132385,7 +132332,9 @@ 3353729024,3353729279,HK 3353729280,3353730047,US 3353730048,3353731071,CA -3353731072,3353752581,US +3353731072,3353731487,US +3353731488,3353731503,AU +3353731504,3353752581,US 3353752582,3353752585,FR 3353752586,3353752589,BE 3353752590,3353752677,US @@ -132662,7 +132611,9 @@ 3355918336,3355923455,EC 3355923456,3355924479,UY 3355924480,3355926527,TT -3355934720,3355938815,AR +3355934720,3355939839,AR +3355939840,3355940863,SR +3355940864,3355942911,AR 3355942912,3355947007,BO 3355947008,3355949055,AR 3355949056,3355951103,AN @@ -133054,7 +133005,9 @@ 3357451584,3357452287,GT 3357452288,3357452799,HN 3357452800,3357453055,NI -3357453056,3357453311,GT +3357453056,3357453071,GT +3357453072,3357453079,SV +3357453080,3357453311,GT 3357453312,3357453567,HN 3357453568,3357454847,GT 3357454848,3357455103,HN @@ -133144,7 +133097,9 @@ 3358131984,3358131999,CO 3358132000,3358132087,AR 3358132088,3358132095,CO -3358132096,3358133439,AR +3358132096,3358132991,AR +3358132992,3358133119,EC +3358133120,3358133439,AR 3358133440,3358133471,VE 3358133472,3358133631,AR 3358133632,3358133759,VE @@ -133162,8 +133117,7 @@ 3358150144,3358150423,AR 3358150424,3358150431,CO 3358150432,3358150495,AR -3358150496,3358150527,CO -3358150528,3358150655,AR +3358150496,3358150655,CO 3358150656,3358150783,EC 3358150784,3358151263,AR 3358151264,3358151271,EC @@ -133397,7 +133351,9 @@ 3360399360,3360403455,BO 3360407552,3360423935,PA 3360423936,3360686079,MX -3360686080,3360710271,AR +3360686080,3360708991,AR +3360708992,3360709119,US +3360709120,3360710271,AR 3360710272,3360710399,US 3360710400,3360710655,AR 3360710656,3360718847,HT @@ -133427,7 +133383,10 @@ 3361079296,3361144831,CL 3361144832,3361210367,BO 3361210368,3361275903,DO -3361275904,3361284095,PE +3361275904,3361281023,PE +3361281024,3361281791,VE +3361281792,3361282047,PE +3361282048,3361284095,VE 3361284096,3361296383,CL 3361296384,3361298431,SV 3361298432,3361300479,DO @@ -133547,6 +133506,7 @@ 3362945024,3362983935,AR 3362988032,3362992127,EC 3362996224,3363000319,UY +3363000320,3363004415,AR 3363012608,3363024895,PA 3363024896,3363025151,HN 3363025152,3363025407,PA @@ -133555,6 +133515,7 @@ 3363025920,3363026431,CO 3363026432,3363026943,HT 3363026944,3363027199,CL +3363027200,3363027455,AR 3363027968,3363028991,HN 3363028992,3363045375,AR 3363045376,3363110911,CO @@ -133570,9 +133531,12 @@ 3363504128,3363512319,PE 3363512320,3363554047,AR 3363554048,3363554175,US -3363554176,3363556095,AR +3363554176,3363555327,AR +3363555328,3363555583,US +3363555584,3363556095,AR 3363556096,3363556223,US 3363556224,3363557375,AR +3363565568,3363569663,AR 3363569664,3363577855,PA 3363577856,3363586047,CL 3363594240,3363600383,AR @@ -133583,6 +133547,7 @@ 3363601920,3363602175,AR 3363602176,3363602431,PA 3363602432,3363610623,AN +3363614720,3363618815,AR 3363618816,3363627007,UY 3363627008,3363635199,EC 3363635200,3363651583,UY @@ -133652,6 +133617,7 @@ 3386728448,3386732543,AR 3386732544,3386734591,CL 3386734592,3386734847,AR +3386734848,3386735103,CL 3386736640,3386753023,CO 3386753024,3386761215,CL 3386761216,3386769407,PA @@ -133672,7 +133638,9 @@ 3387569568,3387569583,PE 3387569584,3387572095,AR 3387572096,3387572223,PE -3387572224,3387575935,AR +3387572224,3387573503,AR +3387573504,3387573631,CO +3387573632,3387575935,AR 3387575936,3387576063,CO 3387576064,3387577727,AR 3387577728,3387577855,EC @@ -134007,7 +133975,6 @@ 3389609472,3389609727,SG 3389609728,3389609983,AU 3389609984,3389610239,NZ -3389610240,3389610495,IN 3389610496,3389610751,HK 3389610752,3389611519,IN 3389611520,3389612031,AU @@ -134377,7 +134344,7 @@ 3391851264,3391852543,AU 3391852544,3391856639,CN 3391856640,3391864831,ID -3391864832,3391873023,HK +3391864832,3391873023,US 3391873024,3391877119,AU 3391877120,3391879167,JP 3391879168,3391881215,ID @@ -135331,7 +135298,7 @@ 3397213184,3397213439,IN 3397213440,3397213695,AU 3397213696,3397214207,ID -3397214208,3397214719,AP +3397214208,3397214719,MN 3397214720,3397215231,AU 3397215232,3397215743,ID 3397215744,3397216255,PH @@ -135637,6 +135604,7 @@ 3398902016,3398902271,HK 3398902272,3398902783,PH 3398902784,3398903807,AU +3398903808,3398905855,TH 3398905856,3398909951,TW 3398909952,3398918143,GU 3398918144,3398926335,JP @@ -135711,7 +135679,9 @@ 3399548928,3399557119,AU 3399557120,3399565311,SG 3399565312,3399581695,AU -3399581696,3399593983,HK +3399581696,3399589631,HK +3399589632,3399589887,NP +3399589888,3399593983,HK 3399593984,3399598079,BD 3399598080,3399614463,JP 3399614464,3399622655,MY @@ -135789,7 +135759,9 @@ 3399942144,3399945983,HK 3399945984,3399946239,AU 3399946240,3399950335,HK -3399950336,3399974911,US +3399950336,3399954175,US +3399954176,3399954431,AU +3399954432,3399974911,US 3399974912,3399995391,MY 3399995392,3399999487,KR 3399999488,3400004671,SG @@ -135957,6 +135929,7 @@ 3400839168,3400847359,JP 3400847360,3400849407,CN 3400849408,3400851455,MN +3400851456,3400859647,AU 3400867840,3400884223,AU 3400884224,3400888319,JP 3400888320,3400892415,CN @@ -137636,7 +137609,7 @@ 3410959360,3410959615,VN 3410959616,3410959871,ID 3410959872,3410960383,AU -3410960384,3410964479,CN +3410960384,3410964479,GB 3410964480,3410968575,JP 3410968576,3410984959,NZ 3410984960,3411017727,TW @@ -138720,7 +138693,8 @@ 3420375552,3420375807,ID 3420375808,3420377087,CN 3420377088,3420389375,JP -3420389376,3420395519,CN +3420389376,3420393471,US +3420393472,3420395519,CN 3420395520,3420397567,JP 3420397568,3420401663,KH 3420401664,3420411903,JP @@ -140890,8 +140864,11 @@ 3450254080,3450254335,CA 3450254336,3450272511,US 3450272512,3450272767,MX -3450272768,3450275583,US -3450275584,3450275839,FR +3450272768,3450275327,US +3450275328,3450275583,GB +3450275584,3450275724,FR +3450275725,3450275725,GB +3450275726,3450275839,FR 3450275840,3450345231,US 3450345232,3450345247,FR 3450345248,3450345263,IT @@ -142501,7 +142478,10 @@ 3464169216,3464169471,US 3464169472,3464171775,CA 3464171776,3464172031,US -3464172032,3464180735,CA +3464172032,3464173567,CA +3464173568,3464173823,US +3464173824,3464174591,CA +3464175360,3464180735,CA 3464180736,3464184487,US 3464184488,3464184495,GB 3464184496,3464184511,CA @@ -144549,7 +144529,9 @@ 3483240704,3483240959,A1 3483240960,3483247359,US 3483247360,3483247871,A1 -3483247872,3483296004,US +3483247872,3483248639,US +3483248640,3483248895,A1 +3483248896,3483296004,US 3483296005,3483296005,BE 3483296006,3483435007,US 3483435008,3483533311,CA @@ -145946,8 +145928,7 @@ 3495375872,3495376895,CA 3495376896,3495399423,US 3495399424,3495400447,KN -3495400448,3495401471,US -3495403520,3495412735,US +3495400448,3495412735,US 3495412736,3495413759,CA 3495413760,3495424033,US 3495424034,3495424042,IN @@ -146082,7 +146063,7 @@ 3495688192,3495689215,CA 3495689216,3495694335,US 3495694336,3495696383,CA -3495698432,3495703551,US +3495696384,3495703551,US 3495703552,3495704063,GB 3495704064,3495704575,CA 3495704576,3495718911,US @@ -147327,9 +147308,7 @@ 3509327712,3509327807,US 3509327808,3509327871,CA 3509327872,3509346303,US -3509346304,3509347615,CA -3509347616,3509347623,A1 -3509347624,3509350711,CA +3509346304,3509350711,CA 3509350712,3509350719,US 3509350720,3509354495,CA 3509354496,3509387263,US @@ -150261,8 +150240,7 @@ 3526926336,3526934527,JP 3526934528,3526942719,CN 3526942720,3526950911,AU -3526950912,3526983679,JP -3526983680,3527004159,HK +3526950912,3527004159,JP 3527004160,3527008255,ID 3527008256,3527016447,KR 3527016448,3527933951,TW @@ -150277,7 +150255,8 @@ 3528441856,3528445951,JP 3528445952,3528450047,ID 3528450048,3528458239,CN -3528458240,3528474623,AF +3528458240,3528466431,AP +3528466432,3528474623,AF 3528474624,3528482815,TW 3528482816,3528491007,KR 3528491008,3528507391,AU @@ -158897,7 +158876,9 @@ 3578724352,3578732543,RU 3578732544,3578740735,IE 3578740736,3578757119,RU -3578757120,3578822655,SE +3578757120,3578808575,SE +3578808576,3578808831,FI +3578808832,3578822655,SE 3578822656,3578855423,RU 3578855424,3578888191,GB 3578888192,3578920959,SK @@ -161002,7 +160983,11 @@ 3586677376,3586677434,FR 3586677435,3586677435,DE 3586677436,3586677487,FR -3586677488,3586677759,DE +3586677488,3586677641,DE +3586677642,3586677645,GB +3586677646,3586677647,SG +3586677648,3586677655,US +3586677656,3586677759,DE 3586677760,3586678015,GR 3586678016,3586678271,DE 3586678272,3586678399,FR @@ -161036,7 +161021,9 @@ 3586680608,3586680615,ES 3586680616,3586680703,FR 3586680704,3586680831,ES -3586680832,3586682239,FR +3586680832,3586681615,FR +3586681616,3586681631,CZ +3586681632,3586682239,FR 3586682240,3586682367,US 3586682368,3586682399,AT 3586682400,3586682879,FR @@ -161171,8 +161158,7 @@ 3587188480,3587188735,DE 3587188736,3587192831,A2 3587192832,3587193087,DE -3587193088,3587193343,A2 -3587193344,3587193599,GB +3587193088,3587193599,GB 3587193600,3587194495,A2 3587194496,3587194511,RU 3587194512,3587194879,A2 @@ -163896,7 +163882,9 @@ 3627759360,3627759615,NL 3627759616,3627759871,US 3627759872,3627760127,NL -3627760128,3627802623,US +3627760128,3627760639,US +3627760640,3627760895,EU +3627760896,3627802623,US 3627802624,3627810815,CA 3627810816,3627842047,US 3627842048,3627842303,IS @@ -164975,7 +164963,9 @@ 3633776400,3633776415,CN 3633776416,3633776463,US 3633776464,3633776479,CN -3633776480,3633815551,US +3633776480,3633782527,US +3633782528,3633782783,A1 +3633782784,3633815551,US 3633815552,3633815807,CA 3633815808,3633815839,US 3633815840,3633815843,GB @@ -165731,24 +165721,12 @@ 3638374752,3638374767,US 3638374768,3638386687,CA 3638386688,3638398975,US -3638398976,3638398991,GB -3638398992,3638399007,CH -3638399008,3638399487,US -3638399488,3638399615,CH -3638399616,3638399647,BM -3638399648,3638399679,US -3638399680,3638399743,CA -3638399744,3638399999,CH -3638400000,3638400063,CA -3638400064,3638400271,US -3638400272,3638400279,CA -3638400280,3638400559,US -3638400560,3638400567,PA -3638400568,3638400575,US -3638400576,3638400607,CA -3638400608,3638400639,US -3638400640,3638400767,CA -3638400768,3638509295,US +3638398976,3638401023,CA +3638401024,3638401087,US +3638401088,3638401423,CA +3638401424,3638401443,US +3638401444,3638403071,CA +3638403072,3638509295,US 3638509296,3638509311,GB 3638509312,3638509567,US 3638509568,3638526911,CA @@ -165919,7 +165897,9 @@ 3639672832,3639681023,CL 3639681024,3639685055,US 3639685056,3639685063,SA -3639685064,3639730175,US +3639685064,3639692032,US +3639692033,3639692288,GB +3639692289,3639730175,US 3639730176,3639734271,CA 3639734272,3639886591,US 3639886592,3639886599,SG @@ -169773,7 +169753,9 @@ 3654607616,3654607871,SE 3654607872,3654608127,NO 3654608128,3654608383,SE -3654608384,3654608895,PL +3654608384,3654608404,PL +3654608405,3654608405,NO +3654608406,3654608895,PL 3654608896,3654609919,NO 3654609920,3654610431,SE 3654610432,3654610943,FR diff --git a/installer/resources/news.xml b/installer/resources/news.xml index 342dfab93713fb28f79a33bbb6b057a778a97a3f..e91850b7212c73ebd030326b8426c80dc425343c 100644 --- a/installer/resources/news.xml +++ b/installer/resources/news.xml @@ -1,16 +1,18 @@ <!-- -<i2p.news date="$Date: 2012-09-21 00:00:00 $"> -<i2p.release version="0.9.2" date="2012/09/21" minVersion="0.6" /> +<i2p.news date="$Date: 2012-10-27 00:00:00 $"> +<i2p.release version="0.9.3" date="2012/10/27" minVersion="0.6" /> --> <div lang="en"> -<h3>2012-09-21: <b>0.9.2 <a href="http://www.i2p2.i2p/release-0.9.2.html">Released</a></b></h3> +<h3>2012-10-27: <b>0.9.3 <a href="http://www.i2p2.i2p/release-0.9.3.html">Released</a></b></h3> <p> -0.9.2 includes extensive low-level changes to improve the performance and efficiency of the router. -We have updated our UPnP library, to hopefully make UPnP work for more people. -I2PSnark now has DHT support, but it is not yet enabled by default, as we plan to do more -testing during the upcoming 0.9.3 development cycle. -As usual, there's also lots of bug fixes in this release, so updating is recommended. +0.9.3 includes extensive low-level changes to the queueing of messages in the router. +We implement the CoDel Active Queue Management (AQM) algoorithm. +We also unify the queueing and priority mechanisms in the transports to aid diagnosis and reduce network latency. +Work continues on fixing UDP transport bugs and making UDP more resistant to attacks. +There are more changes to improve the performance of the router and reduce its memory usage. +Also, we enable i2psnark's DHT support, introduced last release, by default. +As usual, there's also lots of bug fixes in this release, so updating 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>, diff --git a/router/java/src/net/i2p/router/Shitlist.java b/router/java/src/net/i2p/router/Banlist.java similarity index 60% rename from router/java/src/net/i2p/router/Shitlist.java rename to router/java/src/net/i2p/router/Banlist.java index 48b319a5122b70cb2c0ceea28fd958fb52f7d8c3..c167108e011e488eba371556a17007d83fe50230 100644 --- a/router/java/src/net/i2p/router/Shitlist.java +++ b/router/java/src/net/i2p/router/Banlist.java @@ -24,12 +24,12 @@ import net.i2p.util.ConcurrentHashSet; import net.i2p.util.Log; /** - * Routers are shitlisted only if none of our transports can talk to them + * Routers are banlisted only if none of our transports can talk to them * or their signed router info is completely screwy. Individual transports * manage their own unreachable lists and do not generally add to the overall - * shitlist. + * banlist. */ -public class Shitlist { +public class Banlist { private final Log _log; private final RouterContext _context; private final Map<Hash, Entry> _entries; @@ -37,11 +37,11 @@ public class Shitlist { public static class Entry { /** when it should expire, per the i2p clock */ public long expireOn; - /** why they were shitlisted */ + /** why they were banlisted */ public String cause; /** separate code so cause can contain {0} for translation */ public String causeCode; - /** what transports they were shitlisted for (String), or null for all transports */ + /** what transports they were banlisted for (String), or null for all transports */ public Set<String> transports; } @@ -49,46 +49,46 @@ public class Shitlist { * Don't make this too long as the failure may be transient * due to connection limits. */ - public final static long SHITLIST_DURATION_MS = 7*60*1000; - public final static long SHITLIST_DURATION_MAX = 30*60*1000; - public final static long SHITLIST_DURATION_PARTIAL = 10*60*1000; - public final static long SHITLIST_DURATION_FOREVER = 181l*24*60*60*1000; // will get rounded down to 180d on console - public final static long SHITLIST_CLEANER_START_DELAY = SHITLIST_DURATION_PARTIAL; + public final static long BANLIST_DURATION_MS = 7*60*1000; + public final static long BANLIST_DURATION_MAX = 30*60*1000; + public final static long BANLIST_DURATION_PARTIAL = 10*60*1000; + public final static long BANLIST_DURATION_FOREVER = 181l*24*60*60*1000; // will get rounded down to 180d on console + public final static long BANLIST_CLEANER_START_DELAY = BANLIST_DURATION_PARTIAL; - public Shitlist(RouterContext context) { + public Banlist(RouterContext context) { _context = context; - _log = context.logManager().getLog(Shitlist.class); + _log = context.logManager().getLog(Banlist.class); _entries = new ConcurrentHashMap(16); _context.jobQueue().addJob(new Cleanup(_context)); } private class Cleanup extends JobImpl { - private List<Hash> _toUnshitlist; + private List<Hash> _toUnbanlist; public Cleanup(RouterContext ctx) { super(ctx); - _toUnshitlist = new ArrayList(4); - getTiming().setStartAfter(ctx.clock().now() + SHITLIST_CLEANER_START_DELAY); + _toUnbanlist = new ArrayList(4); + getTiming().setStartAfter(ctx.clock().now() + BANLIST_CLEANER_START_DELAY); } public String getName() { return "Expire banned peers"; } public void runJob() { - _toUnshitlist.clear(); + _toUnbanlist.clear(); long now = getContext().clock().now(); try { for (Iterator iter = _entries.entrySet().iterator(); iter.hasNext(); ) { Map.Entry<Hash, Entry> e = (Map.Entry) iter.next(); if (e.getValue().expireOn <= now) { iter.remove(); - _toUnshitlist.add(e.getKey()); + _toUnbanlist.add(e.getKey()); } } } catch (IllegalStateException ise) {} // next time... - for (Hash peer : _toUnshitlist) { + for (Hash peer : _toUnbanlist) { PeerProfile prof = _context.profileOrganizer().getProfile(peer); if (prof != null) - prof.unshitlist(); - _context.messageHistory().unshitlist(peer); + prof.unbanlist(); + _context.messageHistory().unbanlist(peer); if (_log.shouldLog(Log.INFO)) - _log.info("Unshitlisting router (expired) " + peer.toBase64()); + _log.info("Unbanlisting router (expired) " + peer.toBase64()); } requeue(30*1000); @@ -100,69 +100,69 @@ public class Shitlist { } /** - * For ShitlistRenderer in router console. + * For BanlistRenderer in router console. * Note - may contain expired entries. */ public Map<Hash, Entry> getEntries() { return Collections.unmodifiableMap(_entries); } - public boolean shitlistRouter(Hash peer) { - return shitlistRouter(peer, null); + public boolean banlistRouter(Hash peer) { + return banlistRouter(peer, null); } - public boolean shitlistRouter(Hash peer, String reason) { return shitlistRouter(peer, reason, null); } + public boolean banlistRouter(Hash peer, String reason) { return banlistRouter(peer, reason, null); } /** ick have to put the reasonCode in the front to avoid ambiguity */ - public boolean shitlistRouter(String reasonCode, Hash peer, String reason) { - return shitlistRouter(peer, reason, reasonCode, null, false); + public boolean banlistRouter(String reasonCode, Hash peer, String reason) { + return banlistRouter(peer, reason, reasonCode, null, false); } - public boolean shitlistRouter(Hash peer, String reason, String transport) { - return shitlistRouter(peer, reason, transport, false); + public boolean banlistRouter(Hash peer, String reason, String transport) { + return banlistRouter(peer, reason, transport, false); } - public boolean shitlistRouterForever(Hash peer, String reason) { - return shitlistRouter(peer, reason, null, true); + public boolean banlistRouterForever(Hash peer, String reason) { + return banlistRouter(peer, reason, null, true); } - public boolean shitlistRouterForever(Hash peer, String reason, String reasonCode) { - return shitlistRouter(peer, reason, reasonCode, null, true); + public boolean banlistRouterForever(Hash peer, String reason, String reasonCode) { + return banlistRouter(peer, reason, reasonCode, null, true); } - public boolean shitlistRouter(Hash peer, String reason, String transport, boolean forever) { - return shitlistRouter(peer, reason, null, transport, forever); + public boolean banlistRouter(Hash peer, String reason, String transport, boolean forever) { + return banlistRouter(peer, reason, null, transport, forever); } - private boolean shitlistRouter(Hash peer, String reason, String reasonCode, String transport, boolean forever) { + private boolean banlistRouter(Hash peer, String reason, String reasonCode, String transport, boolean forever) { if (peer == null) { - _log.error("wtf, why did we try to shitlist null?", new Exception("shitfaced")); + _log.error("wtf, why did we try to banlist null?", new Exception("banfaced")); return false; } if (_context.routerHash().equals(peer)) { - _log.error("wtf, why did we try to shitlist ourselves?", new Exception("shitfaced")); + _log.error("wtf, why did we try to banlist ourselves?", new Exception("banfaced")); return false; } boolean wasAlready = false; if (_log.shouldLog(Log.INFO)) - _log.info("Shitlisting router " + peer.toBase64() + - ((transport != null) ? " on transport " + transport : ""), new Exception("Shitlist cause: " + reason)); + _log.info("Banlisting router " + peer.toBase64() + + ((transport != null) ? " on transport " + transport : ""), new Exception("Banlist cause: " + reason)); Entry e = new Entry(); if (forever) { - e.expireOn = _context.clock().now() + SHITLIST_DURATION_FOREVER; + e.expireOn = _context.clock().now() + BANLIST_DURATION_FOREVER; } else if (transport != null) { - e.expireOn = _context.clock().now() + SHITLIST_DURATION_PARTIAL; + e.expireOn = _context.clock().now() + BANLIST_DURATION_PARTIAL; } else { - long period = SHITLIST_DURATION_MS + _context.random().nextLong(SHITLIST_DURATION_MS / 4); + long period = BANLIST_DURATION_MS + _context.random().nextLong(BANLIST_DURATION_MS / 4); PeerProfile prof = _context.profileOrganizer().getProfile(peer); if (prof != null) { - period = SHITLIST_DURATION_MS << prof.incrementShitlists(); + period = BANLIST_DURATION_MS << prof.incrementBanlists(); period += _context.random().nextLong(period); } - if (period > SHITLIST_DURATION_MAX) - period = SHITLIST_DURATION_MAX; + if (period > BANLIST_DURATION_MAX) + period = BANLIST_DURATION_MAX; e.expireOn = _context.clock().now() + period; } e.cause = reason; @@ -202,28 +202,28 @@ public class Shitlist { //_context.tunnelManager().peerFailed(peer); //_context.messageRegistry().peerFailed(peer); if (!wasAlready) - _context.messageHistory().shitlist(peer, reason); + _context.messageHistory().banlist(peer, reason); return wasAlready; } - public void unshitlistRouter(Hash peer) { - unshitlistRouter(peer, true); + public void unbanlistRouter(Hash peer) { + unbanlistRouter(peer, true); } - private void unshitlistRouter(Hash peer, boolean realUnshitlist) { unshitlistRouter(peer, realUnshitlist, null); } + private void unbanlistRouter(Hash peer, boolean realUnbanlist) { unbanlistRouter(peer, realUnbanlist, null); } - public void unshitlistRouter(Hash peer, String transport) { unshitlistRouter(peer, true, transport); } + public void unbanlistRouter(Hash peer, String transport) { unbanlistRouter(peer, true, transport); } - private void unshitlistRouter(Hash peer, boolean realUnshitlist, String transport) { + private void unbanlistRouter(Hash peer, boolean realUnbanlist, String transport) { if (peer == null) return; if (_log.shouldLog(Log.DEBUG)) - _log.debug("Calling unshitlistRouter " + peer.toBase64() + _log.debug("Calling unbanlistRouter " + peer.toBase64() + (transport != null ? "/" + transport : "")); boolean fully = false; Entry e = _entries.remove(peer); if ( (e == null) || (e.transports == null) || (transport == null) || (e.transports.size() <= 1) ) { - // fully unshitlisted + // fully unbanlisted fully = true; } else { e.transports.remove(transport); @@ -234,30 +234,30 @@ public class Shitlist { } if (fully) { - if (realUnshitlist) { + if (realUnbanlist) { PeerProfile prof = _context.profileOrganizer().getProfile(peer); if (prof != null) - prof.unshitlist(); + prof.unbanlist(); } - _context.messageHistory().unshitlist(peer); + _context.messageHistory().unbanlist(peer); if (_log.shouldLog(Log.INFO) && e != null) - _log.info("Unshitlisting router " + peer.toBase64() + _log.info("Unbanlisting router " + peer.toBase64() + (transport != null ? "/" + transport : "")); } } - public boolean isShitlisted(Hash peer) { return isShitlisted(peer, null); } + public boolean isBanlisted(Hash peer) { return isBanlisted(peer, null); } - public boolean isShitlisted(Hash peer, String transport) { + public boolean isBanlisted(Hash peer, String transport) { boolean rv = false; - boolean unshitlist = false; + boolean unbanlist = false; Entry entry = _entries.get(peer); if (entry == null) { rv = false; } else if (entry.expireOn <= _context.clock().now()) { _entries.remove(peer); - unshitlist = true; + unbanlist = true; rv = false; } else if (entry.transports == null) { rv = true; @@ -265,21 +265,21 @@ public class Shitlist { rv = entry.transports.contains(transport); } - if (unshitlist) { + if (unbanlist) { PeerProfile prof = _context.profileOrganizer().getProfile(peer); if (prof != null) - prof.unshitlist(); - _context.messageHistory().unshitlist(peer); + prof.unbanlist(); + _context.messageHistory().unbanlist(peer); if (_log.shouldLog(Log.INFO)) - _log.info("Unshitlisting router (expired) " + peer.toBase64()); + _log.info("Unbanlisting router (expired) " + peer.toBase64()); } return rv; } - public boolean isShitlistedForever(Hash peer) { + public boolean isBanlistedForever(Hash peer) { Entry entry = _entries.get(peer); - return entry != null && entry.expireOn > _context.clock().now() + SHITLIST_DURATION_MAX; + return entry != null && entry.expireOn > _context.clock().now() + BANLIST_DURATION_MAX; } /** @deprecated moved to router console */ diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java index 52cbad199943fd00ebc8aaad0a7489829d51b6e9..5f8112cc072c02f3092dd5c3b1af9621db67a550 100644 --- a/router/java/src/net/i2p/router/Blocklist.java +++ b/router/java/src/net/i2p/router/Blocklist.java @@ -35,18 +35,18 @@ import net.i2p.util.Log; import net.i2p.util.Translate; /** - * Manage blocking by IP address, in a manner similar to the Shitlist, + * Manage blocking by IP address, in a manner similar to the Banlist, * which blocks by router hash. * * We also try to keep the two lists in sync: if a router at a given IP is - * blocked, we will also shitlist it "forever" (until the next reboot). + * blocked, we will also banlist it "forever" (until the next reboot). * - * While the reverse case (blocking the IP of a router shitlisted forever) + * While the reverse case (blocking the IP of a router banlisted forever) * is not automatic, the transports will call add() below to block the IP, * which allows the transports to terminate an inbound connection before * the router ident handshake. * - * And the on-disk blocklist can also contain router hashes to be shitlisted. + * And the on-disk blocklist can also contain router hashes to be banlisted. * * So, this class maintains three separate lists: *<pre> @@ -58,9 +58,9 @@ import net.i2p.util.Translate; * Read in the IP blocklist from a file, store it in-memory as efficiently * as we can, and perform tests against it as requested. * - * When queried for a peer that is blocklisted but isn't shitlisted, - * shitlist it forever, then go back to the file to get the original - * entry so we can add the reason to the shitlist text. + * When queried for a peer that is blocklisted but isn't banlisted, + * banlist it forever, then go back to the file to get the original + * entry so we can add the reason to the banlist text. * */ public class Blocklist { @@ -128,7 +128,7 @@ public class Blocklist { reason = _x("Banned by router hash: {0}"); else reason = _x("Banned by router hash"); - _context.shitlist().shitlistRouterForever(peer, reason, comment); + _context.banlist().banlistRouterForever(peer, reason, comment); } _peerBlocklist = null; @@ -280,7 +280,7 @@ public class Blocklist { } } - private Entry parse(String buf, boolean bitch) { + private Entry parse(String buf, boolean shouldLog) { byte[] ip1; byte[] ip2; int start1 = 0; @@ -365,15 +365,15 @@ public class Blocklist { ip2 = ip1; } } catch (UnknownHostException uhe) { - if (bitch && _log.shouldLog(Log.ERROR)) + if (shouldLog && _log.shouldLog(Log.ERROR)) _log.error("Format error in the blocklist file: " + buf); return null; } catch (NumberFormatException nfe) { - if (bitch && _log.shouldLog(Log.ERROR)) + if (shouldLog && _log.shouldLog(Log.ERROR)) _log.error("Format error in the blocklist file: " + buf); return null; } catch (IndexOutOfBoundsException ioobe) { - if (bitch && _log.shouldLog(Log.ERROR)) + if (shouldLog && _log.shouldLog(Log.ERROR)) _log.error("Format error in the blocklist file: " + buf); return null; } @@ -487,16 +487,16 @@ public class Blocklist { /** * Does the peer's IP address appear in the blocklist? - * If so, and it isn't shitlisted, shitlist it forever... + * If so, and it isn't banlisted, banlist it forever... */ public boolean isBlocklisted(Hash peer) { List<byte[]> ips = getAddresses(peer); for (Iterator<byte[]> iter = ips.iterator(); iter.hasNext(); ) { byte ip[] = iter.next(); if (isBlocklisted(ip)) { - if (! _context.shitlist().isShitlisted(peer)) + if (! _context.banlist().isBanlisted(peer)) // nice knowing you... - shitlist(peer, ip); + banlist(peer, ip); return true; } } @@ -504,7 +504,7 @@ public class Blocklist { } /** - * calling this externally won't shitlist the peer, this is just an IP check + * calling this externally won't banlist the peer, this is just an IP check */ public boolean isBlocklisted(String ip) { byte[] pib = Addresses.getIP(ip); @@ -513,7 +513,7 @@ public class Blocklist { } /** - * calling this externally won't shitlist the peer, this is just an IP check + * calling this externally won't banlist the peer, this is just an IP check */ public boolean isBlocklisted(byte ip[]) { if (ip.length != 4) @@ -648,10 +648,10 @@ public class Blocklist { * actual line in the blocklist file, this could take a while. * */ - private void shitlist(Hash peer, byte[] ip) { + private void banlist(Hash peer, byte[] ip) { // Temporary reason, until the job finishes String reason = _x("IP banned by blocklist.txt entry {0}"); - _context.shitlist().shitlistRouterForever(peer, reason, Addresses.toString(ip)); + _context.banlist().banlistRouterForever(peer, reason, Addresses.toString(ip)); if (! _context.getBooleanPropertyDefaultTrue(PROP_BLOCKLIST_DETAIL)) return; boolean shouldRunJob; @@ -663,23 +663,23 @@ public class Blocklist { if (!shouldRunJob) return; // get the IPs now because it won't be in the netdb by the time the job runs - Job job = new ShitlistJob(peer, getAddresses(peer)); + Job job = new BanlistJob(peer, getAddresses(peer)); if (number > 0) job.getTiming().setStartAfter(_context.clock().now() + (30*1000l * number)); _context.jobQueue().addJob(job); } - private class ShitlistJob extends JobImpl { + private class BanlistJob extends JobImpl { private final Hash _peer; private final List<byte[]> _ips; - public ShitlistJob (Hash p, List<byte[]> ips) { + public BanlistJob (Hash p, List<byte[]> ips) { super(_context); _peer = p; _ips = ips; } public String getName() { return "Ban Peer by IP"; } public void runJob() { - shitlistForever(_peer, _ips); + banlistForever(_peer, _ips); synchronized (_inProcess) { _inProcess.remove(_peer); } @@ -687,7 +687,7 @@ public class Blocklist { } /** - * Look up the original record so we can record the reason in the shitlist. + * Look up the original record so we can record the reason in the banlist. * That's the only reason to do this. * Only synchronize to cut down on the I/O load. * Additional jobs can wait. @@ -695,7 +695,7 @@ public class Blocklist { * So we also stagger these jobs. * */ - private synchronized void shitlistForever(Hash peer, List<byte[]> ips) { + private synchronized void banlistForever(Hash peer, List<byte[]> ips) { String file = _context.getProperty(PROP_BLOCKLIST_FILE, BLOCKLIST_FILE_DEFAULT); File BLFile = new File(file); if (!BLFile.isAbsolute()) @@ -732,8 +732,8 @@ public class Blocklist { //} //reason = reason + " banned by " + BLOCKLIST_FILE_DEFAULT + " entry \"" + buf + "\""; if (_log.shouldLog(Log.WARN)) - _log.warn("Shitlisting " + peer + " " + reason); - _context.shitlist().shitlistRouterForever(peer, reason, buf.toString()); + _log.warn("Banlisting " + peer + " " + reason); + _context.banlist().banlistRouterForever(peer, reason, buf.toString()); return; } } @@ -744,7 +744,7 @@ public class Blocklist { if (in != null) try { in.close(); } catch (IOException ioe) {} } } - // We already shitlisted in shitlist(peer), that's good enough + // We already banlisted in banlist(peer), that's good enough } private static final int MAX_DISPLAY = 1000; diff --git a/router/java/src/net/i2p/router/CommSystemFacade.java b/router/java/src/net/i2p/router/CommSystemFacade.java index 9bc1ae535676072fbd91af37d3d66f87ee4e58c5..82e73c2e10db07d32b66a3db7b55c88efa5ee96c 100644 --- a/router/java/src/net/i2p/router/CommSystemFacade.java +++ b/router/java/src/net/i2p/router/CommSystemFacade.java @@ -81,6 +81,7 @@ public abstract class CommSystemFacade implements Service { * Tell other transports our address changed */ public void notifyReplaceAddress(RouterAddress UDPAddr) {} + /** * These must be increasing in "badness" (see TransportManager.java), * but UNKNOWN must be last. @@ -99,14 +100,19 @@ public abstract class CommSystemFacade implements Service { * cannot receive unsolicited connections */ public static final short STATUS_REJECT_UNSOLICITED = 2; + /** + * We have no network interface at all + * @since 0.9.4 + */ + public static final short STATUS_DISCONNECTED = 3; /** * Our detection system is broken (SSU bind port failed) */ - public static final short STATUS_HOSED = 3; + public static final short STATUS_HOSED = 4; /** * Our reachability is unknown */ - public static final short STATUS_UNKNOWN = 4; + public static final short STATUS_UNKNOWN = 5; } diff --git a/router/java/src/net/i2p/router/MessageHistory.java b/router/java/src/net/i2p/router/MessageHistory.java index 5563eec2151f9af6b5e75438e81edc8b12d7768b..2ded9f03b895aabc993fe2d2a84935f24bc27ddc 100644 --- a/router/java/src/net/i2p/router/MessageHistory.java +++ b/router/java/src/net/i2p/router/MessageHistory.java @@ -391,21 +391,21 @@ public class MessageHistory { } /** - * We shitlisted the peer + * We banlisted the peer */ - public void shitlist(Hash peer, String reason) { + public void banlist(Hash peer, String reason) { if (!_doLog) return; if (peer == null) return; - addEntry("Shitlist " + peer.toBase64() + ": " + reason); + addEntry("Banlist " + peer.toBase64() + ": " + reason); } /** - * We unshitlisted the peer + * We unbanlisted the peer */ - public void unshitlist(Hash peer) { + public void unbanlist(Hash peer) { if (!_doLog) return; if (peer == null) return; - addEntry("Unshitlist " + peer.toBase64()); + addEntry("Unbanlist " + peer.toBase64()); } /** diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index 8b2a414f1d654f624dae838912968c5f7868da4a..725ca2779b9b8223291c3f90743141631137458b 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -619,6 +619,8 @@ public class Router implements RouterClock.ClockShiftListener { case CommSystemFacade.STATUS_REJECT_UNSOLICITED: ri.addCapability(CAPABILITY_UNREACHABLE); break; + case CommSystemFacade.STATUS_DISCONNECTED: + case CommSystemFacade.STATUS_HOSED: case CommSystemFacade.STATUS_UNKNOWN: // no explicit capability break; diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java index d22b69dab8845fa063393b87144b449eda592595..990f087da2e933559b7321fdfdf6ef095b613980 100644 --- a/router/java/src/net/i2p/router/RouterContext.java +++ b/router/java/src/net/i2p/router/RouterContext.java @@ -18,6 +18,7 @@ import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade; import net.i2p.router.peermanager.PeerManagerFacadeImpl; import net.i2p.router.peermanager.ProfileManagerImpl; import net.i2p.router.peermanager.ProfileOrganizer; +import net.i2p.router.startup.RouterAppManager; import net.i2p.router.transport.CommSystemFacadeImpl; import net.i2p.router.transport.FIFOBandwidthLimiter; import net.i2p.router.transport.OutboundMessageRegistry; @@ -54,20 +55,28 @@ public class RouterContext extends I2PAppContext { private TunnelManagerFacade _tunnelManager; private TunnelDispatcher _tunnelDispatcher; private StatisticsManager _statPublisher; - private Shitlist _shitlist; + private Banlist _banlist; private Blocklist _blocklist; private MessageValidator _messageValidator; private UpdateManager _updateManager; //private MessageStateMonitor _messageStateMonitor; private RouterThrottle _throttle; + private RouterAppManager _appManager; private final Set<Runnable> _finalShutdownTasks; // split up big lock on this to avoid deadlocks + private volatile boolean _initialized; private final Object _lock1 = new Object(), _lock2 = new Object(), _lock3 = new Object(); private static final List<RouterContext> _contexts = new CopyOnWriteArrayList(); + /** + * Caller MUST call initAll() after instantiation. + */ public RouterContext(Router router) { this(router, null); } + /** + * Caller MUST call initAll() after instantiation. + */ public RouterContext(Router router, Properties envProps) { super(filterProps(envProps)); _router = router; @@ -143,7 +152,9 @@ public class RouterContext extends I2PAppContext { } - public void initAll() { + public synchronized void initAll() { + if (_initialized) + throw new IllegalStateException(); if (getBooleanProperty("i2p.dummyClientFacade")) System.err.println("i2p.dummyClientFacade currently unsupported"); _clientManagerFacade = new ClientManagerFacadeImpl(this); @@ -179,11 +190,13 @@ public class RouterContext extends I2PAppContext { _tunnelManager = new DummyTunnelManagerFacade(); _tunnelDispatcher = new TunnelDispatcher(this); _statPublisher = new StatisticsManager(this); - _shitlist = new Shitlist(this); + _banlist = new Banlist(this); _blocklist = new Blocklist(this); _messageValidator = new MessageValidator(this); _throttle = new RouterThrottleImpl(this); //_throttle = new RouterDoSThrottle(this); + _appManager = new RouterAppManager(this); + _initialized = true; } /** @@ -332,7 +345,7 @@ public class RouterContext extends I2PAppContext { /** * who does this peer hate? */ - public Shitlist shitlist() { return _shitlist; } + public Banlist banlist() { return _banlist; } public Blocklist blocklist() { return _blocklist; } /** * The router keeps track of messages it receives to prevent duplicates, as @@ -366,7 +379,7 @@ public class RouterContext extends I2PAppContext { buf.append(_bandwidthLimiter).append('\n'); buf.append(_tunnelManager).append('\n'); buf.append(_statPublisher).append('\n'); - buf.append(_shitlist).append('\n'); + buf.append(_banlist).append('\n'); buf.append(_messageValidator).append('\n'); return buf.toString(); } @@ -554,4 +567,13 @@ public class RouterContext extends I2PAppContext { _updateManager = null; } } + + /** + * The RouterAppManager. + * @return the manager + * @since 0.9.4 + */ + public RouterAppManager clientAppManager() { + return _appManager; + } } diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index ea17ad55f3270be34b24fd56bd0b1495da601896..a411b009986dc5f1f6384384ad98aeea42885422 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 = 15; + public final static long BUILD = 0; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/app/RouterApp.java b/router/java/src/net/i2p/router/app/RouterApp.java new file mode 100644 index 0000000000000000000000000000000000000000..84cf6856291a53ea41a632b857ebd9764d2201c4 --- /dev/null +++ b/router/java/src/net/i2p/router/app/RouterApp.java @@ -0,0 +1,24 @@ +package net.i2p.router.app; + +import net.i2p.app.ClientApp; + +/** + * If a class started via clients.config implements this interface, + * it will be used to manage the client, instead of starting with main() + * + * Clients implementing this interface MUST provide the following constructor: + * + * public MyClientApp(RouterContext context, ClientAppManager listener, String[] args) {...} + * + * All parameters are non-null. + * This constructor is for instantiation only. + * Do not take a long time. Do not block. Never start threads or processes in it. + * The ClientAppState of the returned object must be INITIALIZED, + * or else throw something. + * The startup() method will be called next. + * + * Never ever hold a static reference to the context or anything derived from it. + * + * @since 0.9.4 + */ +public interface RouterApp extends ClientApp {} diff --git a/router/java/src/net/i2p/router/app/package.html b/router/java/src/net/i2p/router/app/package.html new file mode 100644 index 0000000000000000000000000000000000000000..e35eea22f6db64f2eaafa8c2ac0736474994b31d --- /dev/null +++ b/router/java/src/net/i2p/router/app/package.html @@ -0,0 +1,18 @@ +<html> +<body> +<p> +Interface for classes to be started and stopped via clients.config. +Classes implementing the RouterApp interface will be controlled with +the that interface instead of being started with main(). +</p> +<p> +The benefits for clients using this interface: +<ul> +<li>Get the current context via the constructor +<li>Complete life cycle management by the router +<li>Avoid the need for static references +<li>Ability to find other clients without using static references +</ul> +</p> +</body> +</html> diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java index 6e7f4a04f0504ac7aeb4057bb050d05a3608a167..23f60fb13a2310ea44cc7a3a6bbc1d5e459068ac 100644 --- a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java +++ b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java @@ -36,6 +36,7 @@ import net.i2p.data.i2cp.SetDateMessage; import net.i2p.router.ClientTunnelSettings; import net.i2p.router.RouterContext; import net.i2p.util.Log; +import net.i2p.util.PasswordManager; import net.i2p.util.RandomSource; /** @@ -49,6 +50,8 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi private final ClientConnectionRunner _runner; private final boolean _enforceAuth; + private static final String PROP_AUTH = "i2cp.auth"; + /** * @param enforceAuth set false for in-JVM, true for socket access */ @@ -169,26 +172,23 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi } // Auth, since 0.8.2 - if (_enforceAuth && _context.getBooleanProperty("i2cp.auth")) { - String configUser = _context.getProperty("i2cp.username"); - String configPW = _context.getProperty("i2cp.password"); - if (configUser != null && configPW != null) { + if (_enforceAuth && _context.getBooleanProperty(PROP_AUTH)) { Properties props = in.getOptions(); String user = props.getProperty("i2cp.username"); String pw = props.getProperty("i2cp.password"); - if (user == null || pw == null) { + if (user == null || user.length() == 0 || pw == null || pw.length() == 0) { _log.error("I2CP auth failed for client: " + props.getProperty("inbound.nickname")); _runner.disconnectClient("Authorization required to create session, specify i2cp.username and i2cp.password in session options"); return; } - if ((!user.equals(configUser)) || (!pw.equals(configPW))) { + PasswordManager mgr = new PasswordManager(_context); + if (!mgr.checkHash(PROP_AUTH, user, pw)) { _log.error("I2CP auth failed for client: " + props.getProperty("inbound.nickname") + " user: " + user); _runner.disconnectClient("Authorization failed for Create Session, user = " + user); return; } if (_log.shouldLog(Log.INFO)) _log.info("I2CP auth success for client: " + props.getProperty("inbound.nickname") + " user: " + user); - } } SessionId sessionId = new SessionId(); @@ -244,9 +244,9 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi msg.setSessionId(_runner.getSessionId().getSessionId()); Payload payload = _runner.getPayload(new MessageId(message.getMessageId())); if (payload == null) { - if (_log.shouldLog(Log.ERROR)) - _log.error("Payload for message id [" + message.getMessageId() - + "] is null! Unknown message id?"); + if (_log.shouldLog(Log.WARN)) + _log.warn("Payload for message id [" + message.getMessageId() + + "] is null! Dropped or Unknown message id"); return; } msg.setPayload(payload); 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 50541770149f268a908ea8f7a8205b734b921d6b..77d7146a23c5c39cddece3741f216f4856d29d5e 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java @@ -109,11 +109,11 @@ class FloodOnlySearchJob extends FloodSearchJob { // We need to randomize our ff selection, else we stay with the same ones since // getFloodfillPeers() is sorted by closest distance. Always using the same // ones didn't help reliability. - // Also, query the unheard-from, unprofiled, failing, unreachable and shitlisted ones last. + // Also, query the unheard-from, unprofiled, failing, unreachable and banlisted ones last. // We should hear from floodfills pretty frequently so set a 30m time limit. // If unprofiled we haven't talked to them in a long time. - // We aren't contacting the peer directly, so shitlist doesn't strictly matter, - // but it's a bad sign, and we often shitlist a peer before we fail it... + // We aren't contacting the peer directly, so banlist doesn't strictly matter, + // but it's a bad sign, and we often banlist a peer before we fail it... if (floodfillPeers.size() > CONCURRENT_SEARCHES) { Collections.shuffle(floodfillPeers, getContext().random()); List ffp = new ArrayList(floodfillPeers.size()); @@ -123,7 +123,7 @@ class FloodOnlySearchJob extends FloodSearchJob { Hash peer = (Hash)floodfillPeers.get(i); PeerProfile profile = getContext().profileOrganizer().getProfile(peer); if (profile == null || profile.getLastHeardFrom() < before || - profile.getIsFailing() || getContext().shitlist().isShitlisted(peer) || + profile.getIsFailing() || getContext().banlist().isBanlisted(peer) || getContext().commSystem().wasUnreachable(peer)) { failcount++; ffp.add(peer); @@ -135,7 +135,7 @@ class FloodOnlySearchJob extends FloodSearchJob { if (floodfillPeers.size() - failcount <= 2) _shouldProcessDSRM = true; if (_log.shouldLog(Log.INFO) && failcount > 0) - _log.info(getJobId() + ": " + failcount + " of " + floodfillPeers.size() + " floodfills are not heard from, unprofiled, failing, unreachable or shitlisted"); + _log.info(getJobId() + ": " + failcount + " of " + floodfillPeers.size() + " floodfills are not heard from, unprofiled, failing, unreachable or banlisted"); floodfillPeers = ffp; } else { _shouldProcessDSRM = true; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java index f21beb47caf900c4672a55e5883af14f0c1bcc56..85a82b3e358e1db9e349392c7bfd00a050b3ad85 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillMonitorJob.java @@ -96,11 +96,11 @@ class FloodfillMonitorJob extends JobImpl { // Count the "good" ff peers. // // Who's not good? - // the unheard-from, unprofiled, failing, unreachable and shitlisted ones. + // the unheard-from, unprofiled, failing, unreachable and banlisted ones. // We should hear from floodfills pretty frequently so set a 60m time limit. // If unprofiled we haven't talked to them in a long time. - // We aren't contacting the peer directly, so shitlist doesn't strictly matter, - // but it's a bad sign, and we often shitlist a peer before we fail it... + // We aren't contacting the peer directly, so banlist doesn't strictly matter, + // but it's a bad sign, and we often banlist a peer before we fail it... // // Future: use Integration calculation // @@ -110,7 +110,7 @@ class FloodfillMonitorJob extends JobImpl { for (Hash peer : floodfillPeers) { PeerProfile profile = getContext().profileOrganizer().getProfile(peer); if (profile == null || profile.getLastHeardFrom() < before || - profile.getIsFailing() || getContext().shitlist().isShitlisted(peer) || + profile.getIsFailing() || getContext().banlist().isBanlisted(peer) || getContext().commSystem().wasUnreachable(peer)) failcount++; } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java index a9380b917a8bd5f86066a8997c9c6df641ef448b..3c7e0e02d0da2bd21ca1b32d00a7ba11b97b7df5 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java @@ -180,7 +180,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad for (int i = 0; i < peers.size(); i++) { Hash peer = peers.get(i); RouterInfo target = lookupRouterInfoLocally(peer); - if ( (target == null) || (_context.shitlist().isShitlisted(peer)) ) + if ( (target == null) || (_context.banlist().isBanlisted(peer)) ) continue; // Don't flood a RI back to itself // Not necessary, a ff will do its own flooding (reply token == 0) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java index 135b2f92db2ce1192b0cc6ed16230c9a43015d9f..08b902f6ac4cc9b157ce8bb0215ba77476d01501 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java @@ -94,7 +94,7 @@ class FloodfillPeerSelector extends PeerSelector { } /** - * @return all floodfills not shitlisted forever. + * @return all floodfills not banlisted forever. * List will not include our own hash. * List is not sorted and not shuffled. */ @@ -105,7 +105,7 @@ class FloodfillPeerSelector extends PeerSelector { /** * @param toIgnore can be null - * @return all floodfills not shitlisted forever. + * @return all floodfills not banlisted forever. * List MAY INCLUDE our own hash. * List is not sorted and not shuffled. */ @@ -122,7 +122,7 @@ class FloodfillPeerSelector extends PeerSelector { List<Hash> rv = new ArrayList(set.size()); for (Hash h : set) { if ((toIgnore != null && toIgnore.contains(h)) || - _context.shitlist().isShitlistedForever(h)) + _context.banlist().isBanlistedForever(h)) continue; rv.add(h); } @@ -135,7 +135,7 @@ class FloodfillPeerSelector extends PeerSelector { * searches and stores won't work well. * List will not include our own hash. * - * @return floodfills closest to the key that are not shitlisted forever + * @return floodfills closest to the key that are not banlisted forever * @param key the ROUTING key (NOT the original key) * @param maxNumRouters max to return * Sorted by closest to the key if > maxNumRouters, otherwise not @@ -299,11 +299,11 @@ class FloodfillPeerSelector extends PeerSelector { return; //if (entry.equals(_context.routerHash())) // return; - // it isn't direct, so who cares if they're shitlisted - //if (_context.shitlist().isShitlisted(entry)) + // it isn't direct, so who cares if they're banlisted + //if (_context.banlist().isBanlisted(entry)) // return; // ... unless they are really bad - if (_context.shitlist().isShitlistedForever(entry)) + if (_context.banlist().isBanlistedForever(entry)) return; RouterInfo info = _context.netDb().lookupRouterInfoLocally(entry); //if (info == null) @@ -330,7 +330,7 @@ class FloodfillPeerSelector extends PeerSelector { } /** - * @return list of all with the 'f' mark in their netdb except for shitlisted ones. + * @return list of all with the 'f' mark in their netdb except for banlisted ones. * Will return non-floodfills only if there aren't enough floodfills. * * The list is in 3 groups - unsorted (shuffled) within each group. @@ -348,7 +348,7 @@ class FloodfillPeerSelector extends PeerSelector { long now = _context.clock().now(); // Only add in "good" floodfills here... // Let's say published in last 3h and no failed sends in last 30m - // (Forever shitlisted ones are excluded in add() above) + // (Forever banlisted ones are excluded in add() above) for (Iterator<Hash> iter = new RandomIterator(_floodfillMatches); (found < howMany) && iter.hasNext(); ) { Hash entry = iter.next(); RouterInfo info = _context.netDb().lookupRouterInfoLocally(entry); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java index 2085d23015fc9208324bfaa23011d9f55be7a117..98a41874b70a671d850275032d77a76205e2bbd8 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java @@ -138,7 +138,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { // Check new routerinfo address against blocklist if (wasNew) { if (prevNetDb == null) { - if ((!getContext().shitlist().isShitlistedForever(key)) && + if ((!getContext().banlist().isBanlistedForever(key)) && getContext().blocklist().isBlocklisted(key) && _log.shouldLog(Log.WARN)) _log.warn("Blocklisting new peer " + key + ' ' + ri); @@ -146,7 +146,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { Collection<RouterAddress> oldAddr = prevNetDb.getAddresses(); Collection<RouterAddress> newAddr = ri.getAddresses(); if ((!newAddr.equals(oldAddr)) && - (!getContext().shitlist().isShitlistedForever(key)) && + (!getContext().banlist().isBanlistedForever(key)) && getContext().blocklist().isBlocklisted(key) && _log.shouldLog(Log.WARN)) _log.warn("New address received, Blocklisting old peer " + key + ' ' + ri); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java index 198004babd587d85ccdec2d27d708ef9b90734a2..2565ab13bfb94d71938cd21ab56cec4d318f1f1f 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/IterativeSearchJob.java @@ -270,7 +270,7 @@ class IterativeSearchJob extends FloodSearchJob { RouterInfo ri = getContext().netDb().lookupRouterInfoLocally(peer); if (!FloodfillNetworkDatabaseFacade.isFloodfill(ri)) return; - if (getContext().shitlist().isShitlistedForever(peer)) + if (getContext().banlist().isBanlistedForever(peer)) return; synchronized (this) { if (_failedPeers.contains(peer) || diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 9a4aa09c67e8c7e5c5b7d8fd103ca1e57125c182..633dbeff1a1a3111530a4f39e40b6f8c421ae0c9 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -106,7 +106,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { public final static String DEFAULT_DB_DIR = "netDb"; /** if we have less than this many routers left, don't drop any more, - * even if they're failing or doing bad shit. + * even if they're failing or doing bad stuff. */ protected final static int MIN_REMAINING_ROUTERS = 25; @@ -747,7 +747,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { return "Invalid routerInfo signature on " + key.toBase64(); } else if (upLongEnough && !routerInfo.isCurrent(adjustedExpiration)) { if (routerInfo.getNetworkId() != Router.NETWORK_ID) { - _context.shitlist().shitlistRouter(key, "Peer is not in our network"); + _context.banlist().banlistRouter(key, "Peer is not in our network"); return "Peer is not in our network (" + routerInfo.getNetworkId() + ", wants " + Router.NETWORK_ID + "): " + routerInfo.calculateHash().toBase64(); } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java index 590880aaeec2ea1824f8d5cc04cb1f1c586d5873..7df231726fa6bbce22e92a7a2671e664086f35fb 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java @@ -309,8 +309,8 @@ class SearchJob extends JobImpl { if (onlyFloodfill) continue; } - if (ri.isHidden()) {// || // allow querying shitlisted, since its indirect - //getContext().shitlist().isShitlisted(peer)) { + if (ri.isHidden()) {// || // allow querying banlisted, since its indirect + //getContext().banlist().isBanlisted(peer)) { // dont bother } else { _state.addPending(peer); @@ -413,8 +413,8 @@ class SearchJob extends JobImpl { } TunnelId inTunnelId = inTunnel.getReceiveTunnelId(0); - // this will fail if we've shitlisted our inbound gateway, but the gw may not necessarily - // be shitlisted by whomever needs to contact them, so we don't need to check this + // this will fail if we've banlisted our inbound gateway, but the gw may not necessarily + // be banlisted by whomever needs to contact them, so we don't need to check this //RouterInfo inGateway = getContext().netDb().lookupRouterInfoLocally(inTunnel.getPeer(0)); //if (inGateway == null) { diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchReplyJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchReplyJob.java index c2365eb0cb1a4b9772eca07bdb310a4a7d08a59d..8d8e5f19d9cc45b46fda1a374a126f1dc46428f0 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchReplyJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchReplyJob.java @@ -23,7 +23,7 @@ class SearchReplyJob extends JobImpl { * Peer who we think sent us the reply. Note: could be spoofed! If the * attacker knew we were searching for a particular key from a * particular peer, they could send us some searchReply messages with - * shitty values, trying to get us to consider that peer unreliable. + * bad values, trying to get us to consider that peer unreliable. * Potential fixes include either authenticated 'from' address or use a * nonce in the search + searchReply (and check for it in the selector). * @@ -85,12 +85,12 @@ class SearchReplyJob extends JobImpl { if (!sendsBadInfo) { // we don't need to search for everthing we're given here - only ones that // are next in our search path... - // note: no need to think about shitlisted targets in the netdb search, given + // note: no need to think about banlisted targets in the netdb search, given // the floodfill's behavior // This keeps us from continually chasing blocklisted floodfills - if (getContext().shitlist().isShitlisted(peer)) { + if (getContext().banlist().isBanlisted(peer)) { // if (_log.shouldLog(Log.INFO)) - // _log.info("Not looking for a shitlisted peer..."); + // _log.info("Not looking for a banlisted peer..."); // getContext().statManager().addRateData("netDb.searchReplyValidationSkipped", 1, 0); } else { //getContext().netDb().lookupRouterInfo(peer, new ReplyVerifiedJob(getContext(), peer), new ReplyNotVerifiedJob(getContext(), peer), _timeoutMs); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java index 0632da80d85eed28ae936e2e589bddf464498598..d6e0f1ae7fc17a5d02b6fa8f56e28bbd8d7d52c6 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreJob.java @@ -183,10 +183,10 @@ class StoreJob extends JobImpl { // _state.addSkipped(peer); //} - // we don't want to filter out peers based on our local shitlist, as that opens an avenue for - // manipulation (since a peer can get us to shitlist them by, well, being shitty, and that + // we don't want to filter out peers based on our local banlist, as that opens an avenue for + // manipulation (since a peer can get us to banlist them, and that // in turn would let them assume that a netDb store received didn't come from us) - //if (getContext().shitlist().isShitlisted(((RouterInfo)ds).getIdentity().calculateHash())) { + //if (getContext().banlist().isBanlisted(((RouterInfo)ds).getIdentity().calculateHash())) { // _state.addSkipped(peer); //} else { // diff --git a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java index 75b5f12982a5e5285c30989707a22a290dfff0ef..d760624d53016d14daad608a5376f30874abd9e4 100644 --- a/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java +++ b/router/java/src/net/i2p/router/networkdb/reseed/Reseeder.java @@ -66,9 +66,9 @@ public class Reseeder { "http://euve5653.vserver.de/netDb/" + "," + // "http://r31453.ovh.net/static_media/files/netDb/" + "," + "http://cowpuncher.drollette.com/netdb/" + "," + - "http://75.145.125.59/netDb/" + "," + "http://i2p.mooo.com/netDb/" + "," + - "http://193.150.121.66/netDb/"; + "http://193.150.121.66/netDb/" + "," + + "http://netdb.i2p2.no/"; /** @since 0.8.2 */ public static final String DEFAULT_SSL_SEED_URL = @@ -78,9 +78,9 @@ public class Reseeder { "https://reseed.i2p-projekt.de/" + "," + // "https://r31453.ovh.net/static_media/files/netDb/" + "," + "https://cowpuncher.drollette.com/netdb/" + "," + - "https://75.145.125.59/netDb/" + "," + "https://i2p.mooo.com/netDb/" + "," + - "https://193.150.121.66/netDb/"; + "https://193.150.121.66/netDb/" + "," + + "https://netdb.i2p2.no/"; public static final String PROP_PROXY_HOST = "router.reseedProxyHost"; public static final String PROP_PROXY_PORT = "router.reseedProxyPort"; diff --git a/router/java/src/net/i2p/router/peermanager/PeerProfile.java b/router/java/src/net/i2p/router/peermanager/PeerProfile.java index c40c26e0185c556e3f462c7f2e2a219e89801434..68b4629b46953ef59e74ecbd8f44b6c980bd134f 100644 --- a/router/java/src/net/i2p/router/peermanager/PeerProfile.java +++ b/router/java/src/net/i2p/router/peermanager/PeerProfile.java @@ -60,7 +60,7 @@ public class PeerProfile { // does this peer profile contain expanded data, or just the basics? private boolean _expanded; private boolean _expandedDB; - private int _consecutiveShitlists; + private int _consecutiveBanlists; private final int _distance; /** @@ -109,8 +109,8 @@ public class PeerProfile { public boolean getIsExpanded() { return _expanded; } public boolean getIsExpandedDB() { return _expandedDB; } - public int incrementShitlists() { return _consecutiveShitlists++; } - public void unshitlist() { _consecutiveShitlists = 0; } + public int incrementBanlists() { return _consecutiveBanlists++; } + public void unbanlist() { _consecutiveBanlists = 0; } /** * Is this peer active at the moment (sending/receiving messages within the last diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index 9b1a3569faa34557247304d8a8bf3575365afc97..bd834c7b926b5d3ed2f19ad5d0a5b2d6eaa5b0d8 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -1342,10 +1342,10 @@ public class ProfileOrganizer { // the CLI shouldn't depend upon the netDb if (netDb == null) return true; if (_context.router() == null) return true; - if ( (_context.shitlist() != null) && (_context.shitlist().isShitlisted(peer)) ) { + if ( (_context.banlist() != null) && (_context.banlist().isBanlisted(peer)) ) { // if (_log.shouldLog(Log.DEBUG)) - // _log.debug("Peer " + peer.toBase64() + " is shitlisted, dont select it"); - return false; // never select a shitlisted peer + // _log.debug("Peer " + peer.toBase64() + " is banlisted, dont select it"); + return false; // never select a banlisted peer } RouterInfo info = _context.netDb().lookupRouterInfoLocally(peer); @@ -1395,7 +1395,7 @@ public class ProfileOrganizer { _notFailingPeers.put(profile.getPeer(), profile); _notFailingPeersList.add(profile.getPeer()); - // if not selectable for a tunnel (shitlisted for example), + // if not selectable for a tunnel (banlisted for example), // don't allow them in the high-cap pool, what would the point of that be? if (_thresholdCapacityValue <= profile.getCapacityValue() && isSelectable(profile.getPeer())) { diff --git a/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java b/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java index 3f3f9d5e6a2008412a648395f1fbf797e4536d16..9f0ce8c8296a9ee937d71567e6e5c1f8cbe52e56 100644 --- a/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java +++ b/router/java/src/net/i2p/router/startup/LoadClientAppsJob.java @@ -1,12 +1,17 @@ package net.i2p.router.startup; +import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Arrays; import java.util.ArrayList; import java.util.List; +import net.i2p.I2PAppContext; +import net.i2p.app.ClientApp; +import net.i2p.app.ClientAppManager; import net.i2p.router.JobImpl; import net.i2p.router.RouterContext; +import net.i2p.router.app.RouterApp; import net.i2p.util.I2PThread; import net.i2p.util.Log; @@ -24,6 +29,7 @@ public class LoadClientAppsJob extends JobImpl { super(ctx); _log = ctx.logManager().getLog(LoadClientAppsJob.class); } + public void runJob() { synchronized (LoadClientAppsJob.class) { if (_loaded) return; @@ -42,7 +48,7 @@ public class LoadClientAppsJob extends JobImpl { String argVal[] = parseArgs(app.args); if (app.delay <= 0) { // run this guy now - runClient(app.className, app.clientName, argVal, _log); + runClient(app.className, app.clientName, argVal, getContext(), _log); } else { // wait before firing it up getContext().jobQueue().addJob(new DelayedRunClient(getContext(), app.className, app.clientName, argVal, app.delay)); @@ -73,9 +79,11 @@ public class LoadClientAppsJob extends JobImpl { _cl = cl; getTiming().setStartAfter(getContext().clock().now() + delay); } + public String getName() { return "Delayed client job"; } + public void runJob() { - runClient(_className, _clientName, _args, _log, _threadGroup, _cl); + runClient(_className, _clientName, _args, getContext(), _log, _threadGroup, _cl); } } @@ -179,8 +187,8 @@ public class LoadClientAppsJob extends JobImpl { * @param clientName can be null * @param args can be null */ - public static void runClient(String className, String clientName, String args[], Log log) { - runClient(className, clientName, args, log, null, null); + public static void runClient(String className, String clientName, String args[], RouterContext ctx, Log log) { + runClient(className, clientName, args, ctx, log, null, null); } /** @@ -192,15 +200,15 @@ public class LoadClientAppsJob extends JobImpl { * @param cl can be null * @since 0.7.13 */ - public static void runClient(String className, String clientName, String args[], Log log, + public static void runClient(String className, String clientName, String args[], RouterContext ctx, Log log, ThreadGroup threadGroup, ClassLoader cl) { if (log.shouldLog(Log.INFO)) log.info("Loading up the client application " + clientName + ": " + className + " " + Arrays.toString(args)); I2PThread t; if (threadGroup != null) - t = new I2PThread(threadGroup, new RunApp(className, clientName, args, log, cl)); + t = new I2PThread(threadGroup, new RunApp(className, clientName, args, ctx, log, cl)); else - t = new I2PThread(new RunApp(className, clientName, args, log, cl)); + t = new I2PThread(new RunApp(className, clientName, args, ctx, log, cl)); if (clientName == null) clientName = className + " client"; t.setName(clientName); @@ -214,16 +222,18 @@ public class LoadClientAppsJob extends JobImpl { private final String _className; private final String _appName; private final String _args[]; + private final RouterContext _ctx; private final Log _log; private final ClassLoader _cl; - public RunApp(String className, String appName, String args[], Log log, ClassLoader cl) { + public RunApp(String className, String appName, String args[], RouterContext ctx, Log log, ClassLoader cl) { _className = className; _appName = appName; if (args == null) _args = new String[0]; else _args = args; + _ctx = ctx; _log = log; if (cl == null) _cl = ClassLoader.getSystemClassLoader(); @@ -234,14 +244,53 @@ public class LoadClientAppsJob extends JobImpl { public void run() { try { Class cls = Class.forName(_className, true, _cl); - Method method = cls.getMethod("main", new Class[] { String[].class }); - method.invoke(cls, new Object[] { _args }); + if (isRouterApp(cls)) { + Constructor con = cls.getConstructor(RouterContext.class, ClientAppManager.class, String[].class); + RouterAppManager mgr = _ctx.clientAppManager(); + Object[] conArgs = new Object[] {_ctx, _ctx.clientAppManager(), _args}; + RouterApp app = (RouterApp) con.newInstance(conArgs); + mgr.addAndStart(app); + } else if (isClientApp(cls)) { + Constructor con = cls.getConstructor(I2PAppContext.class, ClientAppManager.class, String[].class); + RouterAppManager mgr = _ctx.clientAppManager(); + Object[] conArgs = new Object[] {_ctx, _ctx.clientAppManager(), _args}; + ClientApp app = (ClientApp) con.newInstance(conArgs); + mgr.addAndStart(app); + } else { + Method method = cls.getMethod("main", new Class[] { String[].class }); + method.invoke(cls, new Object[] { _args }); + } } catch (Throwable t) { _log.log(Log.CRIT, "Error starting up the client class " + _className, t); } if (_log.shouldLog(Log.INFO)) _log.info("Done running client application " + _appName); } + + private static boolean isRouterApp(Class cls) { + return isInterface(cls, RouterApp.class); + } + + private static boolean isClientApp(Class cls) { + return isInterface(cls, ClientApp.class); + } + + private static boolean isInterface(Class cls, Class intfc) { + try { + Class[] intfcs = cls.getInterfaces(); + for (int i = 0; i < intfcs.length; i++) { + if (intfcs[i] == intfc) + return true; + } + } catch (Throwable t) {} + return false; + } + + + + + + } public String getName() { return "Load up any client applications"; } diff --git a/router/java/src/net/i2p/router/startup/RouterAppManager.java b/router/java/src/net/i2p/router/startup/RouterAppManager.java new file mode 100644 index 0000000000000000000000000000000000000000..25d6da932f9d6109a85293ab97bce3d893132348 --- /dev/null +++ b/router/java/src/net/i2p/router/startup/RouterAppManager.java @@ -0,0 +1,131 @@ +package net.i2p.router.startup; + +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import net.i2p.app.*; +import static net.i2p.app.ClientAppState.*; +import net.i2p.router.RouterContext; +import net.i2p.util.ConcurrentHashSet; +import net.i2p.util.Log; + +/** + * Notify the router of events, and provide methods for + * client apps to find each other. + * + * @since 0.9.4 + */ +public class RouterAppManager implements ClientAppManager { + + private final RouterContext _context; + private final Log _log; + private final Set<ClientApp> _clients; + private final ConcurrentHashMap<String, ClientApp> _registered; + + public RouterAppManager(RouterContext ctx) { + _context = ctx; + _log = ctx.logManager().getLog(RouterAppManager.class); + _clients = new ConcurrentHashSet(16); + _registered = new ConcurrentHashMap(8); + } + + public void addAndStart(ClientApp app) { + _clients.add(app); + try { + app.startup(); + } catch (Throwable t) { + _clients.remove(app); + _log.error("Client " + app + " failed to start"); + } + } + + // ClientAppManager methods + + /** + * Must be called on all state transitions except + * from UNINITIALIZED to INITIALIZED. + * + * @param app non-null + * @param state non-null + * @param message may be null + * @param e may be null + */ + public void notify(ClientApp app, ClientAppState state, String message, Exception e) { + switch(state) { + case UNINITIALIZED: + case INITIALIZED: + if (_log.shouldLog(Log.WARN)) + _log.warn("Client " + app.getDisplayName() + " called notify for " + state); + break; + + case STARTING: + case RUNNING: + if (_log.shouldLog(Log.INFO)) + _log.info("Client " + app.getDisplayName() + " called notify for " + state); + break; + + case FORKED: + case STOPPING: + case STOPPED: + _clients.remove(app); + _registered.remove(app.getName(), app); + if (message == null) + message = ""; + if (_log.shouldLog(Log.INFO)) + _log.info("Client " + app.getDisplayName() + " called notify for " + state + + ' ' + message, e); + break; + + case CRASHED: + case START_FAILED: + _clients.remove(app); + _registered.remove(app.getName(), app); + if (message == null) + message = ""; + _log.log(Log.CRIT, "Client " + app.getDisplayName() + ' ' + state + + ' ' + message, e); + break; + } + } + + /** + * Register with the manager under the given name, + * so that other clients may find it. + * Only required for apps used by other apps. + * + * @param app non-null + * @param name non-null + * @return true if successful, false if duplicate name + */ + public boolean register(ClientApp app) { + if (!_clients.contains(app)) + return false; + // TODO if old app in there is not running and != this app, allow replacement + return _registered.putIfAbsent(app.getName(), app) == null; + } + + /** + * Unregister with the manager. Name must be the same as that from register(). + * Only required for apps used by other apps. + * + * @param app non-null + * @param name non-null + */ + public void unregister(ClientApp app) { + _registered.remove(app.getName(), app); + } + + /** + * Get a registered app. + * Only used for apps finding other apps. + * Do not hold a static reference. + * If you only need to find a port, use the PortMapper instead. + * + * @param app non-null + * @param name non-null + * @return client app or null + */ + public ClientApp getRegisteredApp(String name) { + return _registered.get(name); + } +} diff --git a/router/java/src/net/i2p/router/tasks/RouterWatchdog.java b/router/java/src/net/i2p/router/tasks/RouterWatchdog.java index 233c3bd7a055f508b46380df862d9f19b2a90846..15570c0133fc00bc86d527ed6feab4228327362f 100644 --- a/router/java/src/net/i2p/router/tasks/RouterWatchdog.java +++ b/router/java/src/net/i2p/router/tasks/RouterWatchdog.java @@ -4,6 +4,7 @@ import java.io.File; import net.i2p.data.DataHelper; import net.i2p.router.Job; +import net.i2p.router.CommSystemFacade; import net.i2p.router.Router; import net.i2p.router.RouterContext; import net.i2p.router.util.EventLog; @@ -23,8 +24,10 @@ public class RouterWatchdog implements Runnable { private final RouterContext _context; private int _consecutiveErrors; private volatile boolean _isRunning; + private long _lastDump; private static final long MAX_JOB_RUN_LAG = 60*1000; + private static final long MIN_DUMP_INTERVAL= 6*60*60*1000; public RouterWatchdog(RouterContext ctx) { _context = ctx; @@ -69,7 +72,7 @@ public class RouterWatchdog implements Runnable { // Client manager starts complaining after 10 minutes, and we run every minute, // so this will restart 30 minutes after we lose a lease, if the wrapper is present. - if (_consecutiveErrors >= 20 && System.getProperty("wrapper.version") != null) + if (_consecutiveErrors >= 20 && SystemVersion.hasWrapper()) return true; return false; } @@ -113,7 +116,11 @@ public class RouterWatchdog implements Runnable { // This works on linux... // It won't on windows, and we can't call i2prouter.bat either, it does something // completely different... - ThreadDump.dump(_context, 10); + long now = _context.clock().now(); + if (now - _lastDump > MIN_DUMP_INTERVAL) { + _lastDump = now; + ThreadDump.dump(_context, 10); + } } } } @@ -129,11 +136,15 @@ public class RouterWatchdog implements Runnable { boolean ok = verifyJobQueueLiveliness(); // If we aren't connected to the network that's why there's nobody to talk to long netErrors = 0; - RateStat rs = _context.statManager().getRate("udp.sendException"); - if (rs != null) { - Rate r = rs.getRate(60*1000); - if (r != null) - netErrors = r.getLastEventCount(); + if (_context.commSystem().getReachabilityStatus() == CommSystemFacade.STATUS_DISCONNECTED) { + netErrors = 10; + } else { + RateStat rs = _context.statManager().getRate("udp.sendException"); + if (rs != null) { + Rate r = rs.getRate(60*1000); + if (r != null) + netErrors = r.getLastEventCount(); + } } ok = ok && (verifyClientLiveliness() || netErrors >= 5); diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java index 29f3a23d4a42dbe026f5e9bc8413552548f8f428..68a237f52d2ef6a654f719c4316aafb315413a65 100644 --- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java +++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java @@ -31,21 +31,26 @@ import net.i2p.router.transport.ntcp.NTCPAddress; import net.i2p.router.transport.ntcp.NTCPTransport; import net.i2p.router.transport.udp.UDPAddress; import net.i2p.router.transport.udp.UDPTransport; +import net.i2p.util.Addresses; import net.i2p.util.Log; import net.i2p.util.SimpleScheduler; import net.i2p.util.SimpleTimer; +import net.i2p.util.SimpleTimer2; import net.i2p.util.Translate; public class CommSystemFacadeImpl extends CommSystemFacade { private final Log _log; private final RouterContext _context; private TransportManager _manager; - private GeoIP _geoIP; + private final GeoIP _geoIP; + private volatile boolean _netMonitorStatus; public CommSystemFacadeImpl(RouterContext context) { _context = context; _log = _context.logManager().getLog(CommSystemFacadeImpl.class); _context.statManager().createRateStat("transport.getBidsJobTime", "How long does it take?", "Transport", new long[] { 10*60*1000l }); + _netMonitorStatus = true; + _geoIP = new GeoIP(_context); startGeoIP(); } @@ -54,6 +59,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade { _manager = new TransportManager(_context); _manager.startListening(); startTimestamper(); + startNetMonitor(); } /** @@ -169,8 +175,12 @@ public class CommSystemFacadeImpl extends CommSystemFacade { @Override public short getReachabilityStatus() { if (_manager == null) return STATUS_UNKNOWN; - if (_context.router().isHidden()) return STATUS_OK; - return _manager.getReachabilityStatus(); + if (!_netMonitorStatus) + return STATUS_DISCONNECTED; + short rv = _manager.getReachabilityStatus(); + if (rv != STATUS_HOSED && _context.router().isHidden()) + return STATUS_OK; + return rv; } @Override public void recheckReachability() { _manager.recheckReachability(); } @@ -409,14 +419,13 @@ public class CommSystemFacadeImpl extends CommSystemFacade { * * This is only used in the router console for now, but we put it here because * 1) it's a lot easier, and 2) we could use it in the future for peer selection, - * tunnel selection, shitlisting, etc. + * tunnel selection, banlisting, etc. */ /* We hope the routerinfos are read in and things have settled down by now, but it's not required to be so */ private static final int START_DELAY = 5*60*1000; private static final int LOOKUP_TIME = 30*60*1000; private void startGeoIP() { - _geoIP = new GeoIP(_context); _context.simpleScheduler().addEvent(new QueueAll(), START_DELAY); } @@ -555,6 +564,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade { private static final int TIME_START_DELAY = 5*60*1000; private static final int TIME_REPEAT_DELAY = 10*60*1000; + /** @since 0.7.12 */ private void startTimestamper() { _context.simpleScheduler().addPeriodicEvent(new Timestamper(), TIME_START_DELAY, TIME_REPEAT_DELAY); @@ -579,4 +589,28 @@ public class CommSystemFacadeImpl extends CommSystemFacade { _context.clock().setOffset(newOffset); } } + + /** @since 0.9.4 */ + private void startNetMonitor() { + new NetMonitor(); + } + + /** + * Simple check to see if we have a network connection + * @since 0.9.4 + */ + private class NetMonitor extends SimpleTimer2.TimedEvent { + private static final long SHORT_DELAY = 15*1000; + private static final long LONG_DELAY = 3*60*1000; + + public NetMonitor() { + super(_context.simpleTimer2(), 0); + } + + public void timeReached() { + boolean good = Addresses.isConnected(); + _netMonitorStatus = good; + reschedule(good ? LONG_DELAY : SHORT_DELAY); + } + } } diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java index 15ccd18fee5007d4088985cea34280dbeea22aaf..2e82c55de1ed3d5fdb86ec69e6e91642b3921f4b 100644 --- a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java +++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java @@ -8,6 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import net.i2p.I2PAppContext; +import net.i2p.router.util.PQEntry; import net.i2p.util.I2PThread; import net.i2p.util.Log; @@ -189,8 +190,6 @@ public class FIFOBandwidthLimiter { return _refiller.getCurrentParticipatingBandwidth(); } - public Request createRequest() { return new SimpleRequest(); } - /** * Request some bytes. Does not block. */ @@ -198,11 +197,7 @@ public class FIFOBandwidthLimiter { // try to satisfy without grabbing the global lock if (shortcutSatisfyInboundRequest(bytesIn)) return _noop; - return requestInbound(bytesIn, purpose, null, null); - } - - public Request requestInbound(int bytesIn, String purpose, CompleteListener lsnr, Object attachment) { - SimpleRequest req = new SimpleRequest(bytesIn, 0, purpose, lsnr, attachment); + SimpleRequest req = new SimpleRequest(bytesIn, 0); requestInbound(req, bytesIn, purpose); return req; } @@ -229,15 +224,11 @@ public class FIFOBandwidthLimiter { /** * Request some bytes. Does not block. */ - public Request requestOutbound(int bytesOut, String purpose) { + public Request requestOutbound(int bytesOut, int priority, String purpose) { // try to satisfy without grabbing the global lock if (shortcutSatisfyOutboundRequest(bytesOut)) return _noop; - return requestOutbound(bytesOut, purpose, null, null); - } - - public Request requestOutbound(int bytesOut, String purpose, CompleteListener lsnr, Object attachment) { - SimpleRequest req = new SimpleRequest(0, bytesOut, purpose, lsnr, attachment); + SimpleRequest req = new SimpleRequest(bytesOut, priority); requestOutbound(req, bytesOut, purpose); return req; } @@ -489,14 +480,13 @@ public class FIFOBandwidthLimiter { private final void locked_satisfyInboundUnlimited(List<Request> satisfied) { while (!_pendingInboundRequests.isEmpty()) { SimpleRequest req = (SimpleRequest)_pendingInboundRequests.remove(0); - int allocated = req.getPendingInboundRequested(); + int allocated = req.getPendingRequested(); _totalAllocatedInboundBytes.addAndGet(allocated); - req.allocateBytes(allocated, 0); + req.allocateBytes(allocated); satisfied.add(req); long waited = now() - req.getRequestTime(); if (_log.shouldLog(Log.DEBUG)) - _log.debug("Granting inbound request " + req.getRequestName() + " fully for " - + req.getTotalInboundRequested() + " bytes (waited " + _log.debug("Granting inbound request " + req + " fully (waited " + waited + "ms) pending " + _pendingInboundRequests.size()); if (waited > 10) @@ -520,8 +510,8 @@ public class FIFOBandwidthLimiter { // connection decided they dont want the data anymore if (_log.shouldLog(Log.DEBUG)) _log.debug("Aborting inbound request to " - + req.getRequestName() + " (total " - + req.getTotalInboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingInboundRequests.size()); _pendingInboundRequests.remove(i); @@ -537,7 +527,7 @@ public class FIFOBandwidthLimiter { continue; } // ok, they are really waiting for us to give them stuff - int requested = req.getPendingInboundRequested(); + int requested = req.getPendingRequested(); int avi = _availableInbound.get(); int allocated; if (avi >= requested) @@ -546,21 +536,21 @@ public class FIFOBandwidthLimiter { allocated = avi; _availableInbound.addAndGet(0 - allocated); _totalAllocatedInboundBytes.addAndGet(allocated); - req.allocateBytes(allocated, 0); + req.allocateBytes(allocated); satisfied.add(req); - if (req.getPendingInboundRequested() > 0) { + if (req.getPendingRequested() > 0) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Allocating " + allocated + " bytes inbound as a partial grant to " - + req.getRequestName() + " (wanted " - + req.getTotalInboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingInboundRequests.size() + ", longest waited " + locked_getLongestInboundWait() + " in"); } else { if (_log.shouldLog(Log.DEBUG)) _log.debug("Allocating " + allocated + " bytes inbound to finish the partial grant to " - + req.getRequestName() + " (total " - + req.getTotalInboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingInboundRequests.size() + ", longest waited " + locked_getLongestInboundWait() + " out"); @@ -607,14 +597,13 @@ public class FIFOBandwidthLimiter { private final void locked_satisfyOutboundUnlimited(List<Request> satisfied) { while (!_pendingOutboundRequests.isEmpty()) { SimpleRequest req = (SimpleRequest)_pendingOutboundRequests.remove(0); - int allocated = req.getPendingOutboundRequested(); + int allocated = req.getPendingRequested(); _totalAllocatedOutboundBytes.addAndGet(allocated); - req.allocateBytes(0, allocated); + req.allocateBytes(allocated); satisfied.add(req); long waited = now() - req.getRequestTime(); if (_log.shouldLog(Log.DEBUG)) - _log.debug("Granting outbound request " + req.getRequestName() + " fully for " - + req.getTotalOutboundRequested() + " bytes (waited " + _log.debug("Granting outbound request " + req + " fully (waited " + waited + "ms) pending " + _pendingOutboundRequests.size() + ", longest waited " + locked_getLongestOutboundWait() + " out"); @@ -639,8 +628,8 @@ public class FIFOBandwidthLimiter { // connection decided they dont want the data anymore if (_log.shouldLog(Log.DEBUG)) _log.debug("Aborting outbound request to " - + req.getRequestName() + " (total " - + req.getTotalOutboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingOutboundRequests.size()); _pendingOutboundRequests.remove(i); @@ -652,11 +641,11 @@ public class FIFOBandwidthLimiter { // they haven't taken advantage of it yet (most likely they're // IO bound) if (_log.shouldLog(Log.WARN)) - _log.warn("multiple allocations since wait... ntcp shouldn't do this: " + req.getRequestName()); + _log.warn("multiple allocations since wait... ntcp shouldn't do this: " + req); continue; } // ok, they are really waiting for us to give them stuff - int requested = req.getPendingOutboundRequested(); + int requested = req.getPendingRequested(); int avo = _availableOutbound.get(); int allocated; if (avo >= requested) @@ -665,22 +654,22 @@ public class FIFOBandwidthLimiter { allocated = avo; _availableOutbound.addAndGet(0 - allocated); _totalAllocatedOutboundBytes.addAndGet(allocated); - req.allocateBytes(0, allocated); + req.allocateBytes(allocated); satisfied.add(req); - if (req.getPendingOutboundRequested() > 0) { + if (req.getPendingRequested() > 0) { if (req.attachment() != null) { if (_log.shouldLog(Log.INFO)) _log.info("Allocating " + allocated + " bytes outbound as a partial grant to " - + req.getRequestName() + " (wanted " - + req.getTotalOutboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingOutboundRequests.size() + ", longest waited " + locked_getLongestOutboundWait() + " out"); } if (_log.shouldLog(Log.DEBUG)) _log.debug("Allocating " + allocated + " bytes outbound as a partial grant to " - + req.getRequestName() + " (wanted " - + req.getTotalOutboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingOutboundRequests.size() + ", longest waited " + locked_getLongestOutboundWait() + " out"); @@ -688,16 +677,16 @@ public class FIFOBandwidthLimiter { if (req.attachment() != null) { if (_log.shouldLog(Log.INFO)) _log.info("Allocating " + allocated + " bytes outbound to finish the partial grant to " - + req.getRequestName() + " (total " - + req.getTotalOutboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingOutboundRequests.size() + ", longest waited " + locked_getLongestOutboundWait() + " out)"); } if (_log.shouldLog(Log.DEBUG)) _log.debug("Allocating " + allocated + " bytes outbound to finish the partial grant to " - + req.getRequestName() + " (total " - + req.getTotalOutboundRequested() + " bytes, waited " + + req + + " waited " + waited + "ms) pending " + _pendingOutboundRequests.size() + ", longest waited " + locked_getLongestOutboundWait() + " out)"); @@ -788,145 +777,127 @@ public class FIFOBandwidthLimiter { ******/ } - private static long __requestId = 0; - private final class SimpleRequest implements Request { - private int _inAllocated; - private int _inTotal; - private int _outAllocated; - private int _outTotal; + private static class SimpleRequest implements Request { + private int _allocated; + private final int _total; private long _requestId; private long _requestTime; - private String _target; private int _allocationsSinceWait; private boolean _aborted; private boolean _waited; final List<Request> satisfiedBuffer; private CompleteListener _lsnr; private Object _attachment; + private final int _priority; - public SimpleRequest() { + /** + * @param target for debugging, to be removed + */ + public SimpleRequest(int bytes, int priority) { satisfiedBuffer = new ArrayList(1); - init(0, 0, null); - } - public SimpleRequest(int in, int out, String target, CompleteListener lsnr, Object attachment) { - satisfiedBuffer = new ArrayList(1); - _lsnr = lsnr; - _attachment = attachment; - init(in, out, target); - } - public void init(int in, int out, String target) { - _waited = false; - _inTotal = in; - _outTotal = out; - _inAllocated = 0; - _outAllocated = 0; - _aborted = false; - _target = target; - satisfiedBuffer.clear(); - _requestId = ++__requestId; - _requestTime = now(); + _total = bytes; + _priority = priority; } - public String getRequestName() { return "Req" + _requestId + " to " + _target; } + public long getRequestTime() { return _requestTime; } - public int getTotalOutboundRequested() { return _outTotal; } - public int getPendingOutboundRequested() { return _outTotal - _outAllocated; } - public int getTotalInboundRequested() { return _inTotal; } - public int getPendingInboundRequested() { return _inTotal - _inAllocated; } + public int getTotalRequested() { return _total; } + public int getPendingRequested() { return _total - _allocated; } public boolean getAborted() { return _aborted; } public void abort() { _aborted = true; } public CompleteListener getCompleteListener() { return _lsnr; } + public void setCompleteListener(CompleteListener lsnr) { boolean complete = false; - synchronized (SimpleRequest.this) { + synchronized (this) { _lsnr = lsnr; if (isComplete()) { complete = true; } } if (complete && lsnr != null) { - if (_log.shouldLog(Log.INFO)) - _log.info("complete listener set AND completed: " + lsnr); - lsnr.complete(SimpleRequest.this); + //if (_log.shouldLog(Log.INFO)) + // _log.info("complete listener set AND completed: " + lsnr); + lsnr.complete(this); } } - private boolean isComplete() { return (_outAllocated >= _outTotal) && (_inAllocated >= _inTotal); } + private boolean isComplete() { return _allocated >= _total; } public void waitForNextAllocation() { _waited = true; _allocationsSinceWait = 0; boolean complete = false; try { - synchronized (SimpleRequest.this) { + synchronized (this) { if (isComplete()) complete = true; else - SimpleRequest.this.wait(); + wait(); } } catch (InterruptedException ie) {} if (complete && _lsnr != null) - _lsnr.complete(SimpleRequest.this); + _lsnr.complete(this); } + int getAllocationsSinceWait() { return _waited ? _allocationsSinceWait : 0; } - void allocateBytes(int in, int out) { - _inAllocated += in; - _outAllocated += out; + + void allocateBytes(int bytes) { + _allocated += bytes; if (_lsnr == null) _allocationsSinceWait++; - if (isComplete()) { - if (_log.shouldLog(Log.INFO)) - _log.info("allocate " + in +"/"+ out + " completed, listener=" + _lsnr); - } + //if (isComplete()) { + // if (_log.shouldLog(Log.INFO)) + // _log.info("allocate " + bytes + " completed, listener=" + _lsnr); + //} //notifyAllocation(); // handled within the satisfy* methods } + void notifyAllocation() { boolean complete = false; - synchronized (SimpleRequest.this) { + synchronized (this) { if (isComplete()) complete = true; - SimpleRequest.this.notifyAll(); + notifyAll(); } if (complete && _lsnr != null) { - _lsnr.complete(SimpleRequest.this); - if (_log.shouldLog(Log.INFO)) - _log.info("at completion for " + _inTotal + "/" + _outTotal - + ", recvBps=" + _recvBps + "/"+ _recvBps15s + " listener is " + _lsnr); + _lsnr.complete(this); + //if (_log.shouldLog(Log.INFO)) + // _log.info("at completion for " + _total + // + ", recvBps=" + _recvBps + "/"+ _recvBps15s + " listener is " + _lsnr); } } + public void attach(Object obj) { _attachment = obj; } public Object attachment() { return _attachment; } + + // PQEntry methods + public int getPriority() { return _priority; }; + public void setSeqNum(long num) { _requestId = num; }; + public long getSeqNum() { return _requestId; }; + @Override - public String toString() { return getRequestName(); } + public String toString() { + return "Req" + _requestId + " priority " + _priority + + _allocated + '/' + _total + " bytes"; + } } /** - * This is somewhat complicated by having both - * inbound and outbound in a single request. - * Making a request unidirectional would - * be a good simplification. - * But NTCP would have to be changed as it puts them on one queue. + * A bandwidth request, either inbound or outbound. */ - public interface Request { - /** describe this particular request */ - public String getRequestName(); + public interface Request extends PQEntry { /** when was the request made? */ public long getRequestTime(); - /** how many outbound bytes were requested? */ - public int getTotalOutboundRequested(); - /** how many outbound bytes were requested and haven't yet been allocated? */ - public int getPendingOutboundRequested(); - /** how many inbound bytes were requested? */ - public int getTotalInboundRequested(); - /** how many inbound bytes were requested and haven't yet been allocated? */ - public int getPendingInboundRequested(); + /** how many bytes were requested? */ + public int getTotalRequested(); + /** how many bytes were requested and haven't yet been allocated? */ + public int getPendingRequested(); /** block until we are allocated some more bytes */ public void waitForNextAllocation(); /** we no longer want the data requested (the connection closed) */ public void abort(); /** was this request aborted? */ public boolean getAborted(); - /** thar be dragons */ - public void init(int in, int out, String target); public void setCompleteListener(CompleteListener lsnr); /** Only supported if the request is not satisfied */ public void attach(Object obj); @@ -943,14 +914,12 @@ public class FIFOBandwidthLimiter { private static class NoopRequest implements Request { public void abort() {} public boolean getAborted() { return false; } - public int getPendingInboundRequested() { return 0; } - public int getPendingOutboundRequested() { return 0; } - public String getRequestName() { return "noop"; } + public int getPendingRequested() { return 0; } + @Override + public String toString() { return "noop"; } public long getRequestTime() { return 0; } - public int getTotalInboundRequested() { return 0; } - public int getTotalOutboundRequested() { return 0; } + public int getTotalRequested() { return 0; } public void waitForNextAllocation() {} - public void init(int in, int out, String target) {} public CompleteListener getCompleteListener() { return null; } public void setCompleteListener(CompleteListener lsnr) { lsnr.complete(NoopRequest.this); @@ -959,5 +928,9 @@ public class FIFOBandwidthLimiter { throw new UnsupportedOperationException("Don't attach to a satisfied request"); } public Object attachment() { return null; } + // PQEntry methods + public int getPriority() { return 0; }; + public void setSeqNum(long num) {}; + public long getSeqNum() { return 0; }; } } diff --git a/router/java/src/net/i2p/router/transport/GetBidsJob.java b/router/java/src/net/i2p/router/transport/GetBidsJob.java index e014cc6411842a66f29305ee85f72004f74168ce..4215d8f0d174bbf79f98debad2c5b2c9486bd933 100644 --- a/router/java/src/net/i2p/router/transport/GetBidsJob.java +++ b/router/java/src/net/i2p/router/transport/GetBidsJob.java @@ -43,11 +43,11 @@ class GetBidsJob extends JobImpl { Hash to = msg.getTarget().getIdentity().getHash(); msg.timestamp("bid"); - if (context.shitlist().isShitlisted(to)) { + if (context.banlist().isBanlisted(to)) { if (log.shouldLog(Log.WARN)) - log.warn("Attempt to send a message to a shitlisted peer - " + to); + log.warn("Attempt to send a message to a banlisted peer - " + to); //context.messageRegistry().peerFailed(to); - context.statManager().addRateData("transport.bidFailShitlisted", msg.getLifetime(), 0); + context.statManager().addRateData("transport.bidFailBanlisted", msg.getLifetime(), 0); fail(context, msg); return; } @@ -67,7 +67,7 @@ class GetBidsJob extends JobImpl { if (failedCount == 0) { context.statManager().addRateData("transport.bidFailNoTransports", msg.getLifetime(), 0); // This used to be "no common transports" but it is almost always no transports at all - context.shitlist().shitlistRouter(to, _x("No transports (hidden or starting up?)")); + context.banlist().banlistRouter(to, _x("No transports (hidden or starting up?)")); } else if (failedCount >= facade.getTransportCount()) { context.statManager().addRateData("transport.bidFailAllTransports", msg.getLifetime(), 0); // fail after all transports were unsuccessful diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java index 05bfba0bfdf6b9e114970d79d9723df463cc84be..0b155d559c2acd044ae4e4dbace3bf7cc07960d2 100644 --- a/router/java/src/net/i2p/router/transport/TransportImpl.java +++ b/router/java/src/net/i2p/router/transport/TransportImpl.java @@ -550,8 +550,8 @@ public abstract class TransportImpl implements Transport { } /** called when we establish a peer connection (outbound or inbound) */ public void markReachable(Hash peer, boolean isInbound) { - // if *some* transport can reach them, then we shouldn't shitlist 'em - _context.shitlist().unshitlistRouter(peer); + // if *some* transport can reach them, then we shouldn't banlist 'em + _context.banlist().unbanlistRouter(peer); synchronized (_unreachableEntries) { _unreachableEntries.remove(peer); } diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java index fe44032c0f29e3b7e0253a5ea047e0eb54b81df8..0915359110cbe701131c81e30bb448da573201aa 100644 --- a/router/java/src/net/i2p/router/transport/TransportManager.java +++ b/router/java/src/net/i2p/router/transport/TransportManager.java @@ -57,9 +57,9 @@ public class TransportManager implements TransportEventListener { public TransportManager(RouterContext context) { _context = context; _log = _context.logManager().getLog(TransportManager.class); - _context.statManager().createRateStat("transport.shitlistOnUnreachable", "Add a peer to the shitlist since none of the transports can reach them", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); - _context.statManager().createRateStat("transport.noBidsYetNotAllUnreachable", "Add a peer to the shitlist since none of the transports can reach them", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); - _context.statManager().createRateStat("transport.bidFailShitlisted", "Could not attempt to bid on message, as they were shitlisted", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + _context.statManager().createRateStat("transport.banlistOnUnreachable", "Add a peer to the banlist since none of the transports can reach them", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + _context.statManager().createRateStat("transport.noBidsYetNotAllUnreachable", "Add a peer to the banlist since none of the transports can reach them", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); + _context.statManager().createRateStat("transport.bidFailBanlisted", "Could not attempt to bid on message, as they were banlisted", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); _context.statManager().createRateStat("transport.bidFailSelf", "Could not attempt to bid on message, as it targeted ourselves", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); _context.statManager().createRateStat("transport.bidFailNoTransports", "Could not attempt to bid on message, as none of the transports could attempt it", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); _context.statManager().createRateStat("transport.bidFailAllTransports", "Could not attempt to bid on message, as all of the transports had failed", "Transport", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); @@ -418,8 +418,8 @@ public class TransportManager implements TransportEventListener { for (Transport t : _transports.values()) { if (t.isUnreachable(peer)) { unreachableTransports++; - // this keeps GetBids() from shitlisting for "no common transports" - // right after we shitlisted for "unreachable on any transport" below... + // this keeps GetBids() from banlisting for "no common transports" + // right after we banlisted for "unreachable on any transport" below... msg.transportFailed(t.getStyle()); continue; } @@ -434,7 +434,7 @@ public class TransportManager implements TransportEventListener { TransportBid bid = t.bid(msg.getTarget(), msg.getMessageSize()); if (bid != null) { if (bid.getLatencyMs() == TransportBid.TRANSIENT_FAIL) - // this keeps GetBids() from shitlisting for "no common transports" + // this keeps GetBids() from banlisting for "no common transports" msg.transportFailed(t.getStyle()); else if ( (rv == null) || (rv.getLatencyMs() > bid.getLatencyMs()) ) rv = bid; @@ -449,10 +449,10 @@ public class TransportManager implements TransportEventListener { } } if (unreachableTransports >= _transports.size()) { - // Don't shitlist if we aren't talking to anybody, as we may have a network connection issue + // Don't banlist if we aren't talking to anybody, as we may have a network connection issue if (unreachableTransports >= _transports.size() && countActivePeers() > 0) { - _context.statManager().addRateData("transport.shitlistOnUnreachable", msg.getLifetime(), msg.getLifetime()); - _context.shitlist().shitlistRouter(peer, _x("Unreachable on any transport")); + _context.statManager().addRateData("transport.banlistOnUnreachable", msg.getLifetime(), msg.getLifetime()); + _context.banlist().banlistRouter(peer, _x("Unreachable on any transport")); } } else if (rv == null) { _context.statManager().addRateData("transport.noBidsYetNotAllUnreachable", unreachableTransports, msg.getLifetime()); diff --git a/router/java/src/net/i2p/router/transport/UPnPManager.java b/router/java/src/net/i2p/router/transport/UPnPManager.java index aecd726bd3e80b10624ebdbbc75efc2f2017f260..63acc65c09d80c86902a285bd96d1dd5ae188fc4 100644 --- a/router/java/src/net/i2p/router/transport/UPnPManager.java +++ b/router/java/src/net/i2p/router/transport/UPnPManager.java @@ -81,13 +81,7 @@ class UPnPManager { if (!_isRunning) { // Do we have a non-loopback, non-broadcast address? // If not, that's why it failed (HTTPServer won't start) - Set<String> addrs = Addresses.getAddresses(true, false); - addrs.remove("0.0.0.0"); - for (Iterator<String> iter = addrs.iterator(); iter.hasNext(); ) { - if (iter.next().startsWith("127.")) - iter.remove(); - } - if (addrs.isEmpty()) + if (!Addresses.isConnected()) _log.logAlways(Log.WARN, "UPnP start failed - no network connection?"); else _log.error("UPnP start failed - port conflict?"); diff --git a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java index a39395d5359dc4381451e13f92005c723cfd9ab7..04da0506b4ff9f37f8c8f38e0cb4cb67c47a75e6 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java @@ -395,8 +395,8 @@ class EstablishState { } else if (diff >= Router.CLOCK_FUDGE_FACTOR) { _context.statManager().addRateData("ntcp.invalidOutboundSkew", diff, 0); _transport.markReachable(_con.getRemotePeer().calculateHash(), false); - // Only shitlist if we know what time it is - _context.shitlist().shitlistRouter(DataHelper.formatDuration(diff), + // Only banlist if we know what time it is + _context.banlist().banlistRouter(DataHelper.formatDuration(diff), _con.getRemotePeer().calculateHash(), _x("Excessive clock skew: {0}")); _transport.setLastBadSkew(_tsA- _tsB); @@ -586,14 +586,14 @@ class EstablishState { // get inet-addr InetAddress addr = this._con.getChannel().socket().getInetAddress(); byte[] ip = (addr == null) ? null : addr.getAddress(); - if (_context.shitlist().isShitlistedForever(alice.calculateHash())) { + if (_context.banlist().isBanlistedForever(alice.calculateHash())) { if (_log.shouldLog(Log.WARN)) - _log.warn("Dropping inbound connection from permanently shitlisted peer: " + alice.calculateHash().toBase64()); + _log.warn("Dropping inbound connection from permanently banlisted peer: " + alice.calculateHash().toBase64()); // So next time we will not accept the con from this IP, // rather than doing the whole handshake if(ip != null) _context.blocklist().add(ip); - fail("Peer is shitlisted forever: " + alice.calculateHash().toBase64()); + fail("Peer is banlisted forever: " + alice.calculateHash().toBase64()); return; } if(ip != null) @@ -612,8 +612,8 @@ class EstablishState { } else if (diff >= Router.CLOCK_FUDGE_FACTOR) { _context.statManager().addRateData("ntcp.invalidInboundSkew", diff, 0); _transport.markReachable(alice.calculateHash(), true); - // Only shitlist if we know what time it is - _context.shitlist().shitlistRouter(DataHelper.formatDuration(diff), + // Only banlist if we know what time it is + _context.banlist().banlistRouter(DataHelper.formatDuration(diff), alice.calculateHash(), _x("Excessive clock skew: {0}")); _transport.setLastBadSkew(tsA- _tsB); diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index bbf9e4f1f1b0fe92661c9286940a0ab0220545e1..9149323c8cbcdc87858138e834268b25a6e3fa6e 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -375,8 +375,8 @@ class EventPumper implements Runnable { */ public void wantsWrite(NTCPConnection con, byte data[]) { ByteBuffer buf = ByteBuffer.wrap(data); - FIFOBandwidthLimiter.Request req = _context.bandwidthLimiter().requestOutbound(data.length, "NTCP write");//con, buf); - if (req.getPendingOutboundRequested() > 0) { + FIFOBandwidthLimiter.Request req = _context.bandwidthLimiter().requestOutbound(data.length, 0, "NTCP write");//con, buf); + if (req.getPendingRequested() > 0) { if (_log.shouldLog(Log.INFO)) _log.info("queued write on " + con + " for " + data.length); _context.statManager().addRateData("ntcp.wantsQueuedWrite", 1); @@ -535,7 +535,7 @@ class EventPumper implements Runnable { if (_log.shouldLog(Log.INFO)) _log.info("Failed outbound " + con, ioe); con.close(); - //_context.shitlist().shitlistRouter(con.getRemotePeer().calculateHash(), "Error connecting", NTCPTransport.STYLE); + //_context.banlist().banlistRouter(con.getRemotePeer().calculateHash(), "Error connecting", NTCPTransport.STYLE); _transport.markUnreachable(con.getRemotePeer().calculateHash()); _context.statManager().addRateData("ntcp.connectFailedTimeoutIOE", 1); } catch (NoConnectionPendingException ncpe) { @@ -584,7 +584,7 @@ class EventPumper implements Runnable { // ZERO COPY. The buffer will be returned in Reader.processRead() buf.flip(); FIFOBandwidthLimiter.Request req = _context.bandwidthLimiter().requestInbound(read, "NTCP read"); //con, buf); - if (req.getPendingInboundRequested() > 0) { + if (req.getPendingRequested() > 0) { // rare since we generally don't throttle inbound key.interestOps(key.interestOps() & ~SelectionKey.OP_READ); //if (_log.shouldLog(Log.DEBUG)) @@ -790,10 +790,10 @@ class EventPumper implements Runnable { _context.statManager().addRateData("ntcp.connectFailedIOE", 1); _transport.markUnreachable(con.getRemotePeer().calculateHash()); //if (ntcpOnly(con)) { - // _context.shitlist().shitlistRouter(con.getRemotePeer().calculateHash(), "unable to connect: " + ioe.getMessage()); + // _context.banlist().banlistRouter(con.getRemotePeer().calculateHash(), "unable to connect: " + ioe.getMessage()); // con.close(false); //} else { - // _context.shitlist().shitlistRouter(con.getRemotePeer().calculateHash(), "unable to connect: " + ioe.getMessage(), NTCPTransport.STYLE); + // _context.banlist().banlistRouter(con.getRemotePeer().calculateHash(), "unable to connect: " + ioe.getMessage(), NTCPTransport.STYLE); con.close(true); //} } catch (UnresolvedAddressException uae) { @@ -801,10 +801,10 @@ class EventPumper implements Runnable { _context.statManager().addRateData("ntcp.connectFailedUnresolved", 1); _transport.markUnreachable(con.getRemotePeer().calculateHash()); //if (ntcpOnly(con)) { - // _context.shitlist().shitlistRouter(con.getRemotePeer().calculateHash(), "unable to connect/resolve: " + uae.getMessage()); + // _context.banlist().banlistRouter(con.getRemotePeer().calculateHash(), "unable to connect/resolve: " + uae.getMessage()); // con.close(false); //} else { - // _context.shitlist().shitlistRouter(con.getRemotePeer().calculateHash(), "unable to connect/resolve: " + uae.getMessage(), NTCPTransport.STYLE); + // _context.banlist().banlistRouter(con.getRemotePeer().calculateHash(), "unable to connect/resolve: " + uae.getMessage(), NTCPTransport.STYLE); con.close(true); //} } catch (CancelledKeyException cke) { @@ -823,7 +823,7 @@ class EventPumper implements Runnable { } /** - * If the other peer only supports ntcp, we should shitlist them when we can't reach 'em, + * If the other peer only supports ntcp, we should banlist them when we can't reach 'em, * but if they support other transports (eg ssu) we should allow those transports to be * tried as well. */ diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java index eb84d6c909255b2ba059f6604139934e8cb7b55e..b89d72fb89635d1d1bd66f21728ae5e2d510a8f4 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java @@ -27,6 +27,7 @@ import net.i2p.router.Router; import net.i2p.router.RouterContext; import net.i2p.router.transport.FIFOBandwidthLimiter; import net.i2p.router.util.CoDelPriorityBlockingQueue; +import net.i2p.router.util.PriBlockingQueue; import net.i2p.util.ConcurrentHashSet; import net.i2p.util.HexDump; import net.i2p.util.Log; @@ -56,11 +57,13 @@ import net.i2p.util.Log; *</pre> * */ -class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { +class NTCPConnection { private final RouterContext _context; private final Log _log; private SocketChannel _chan; private SelectionKey _conKey; + private final FIFOBandwidthLimiter.CompleteListener _inboundListener; + private final FIFOBandwidthLimiter.CompleteListener _outboundListener; /** * queue of ByteBuffer containing data we have read and are ready to process, oldest first * unbounded and lockless @@ -73,7 +76,8 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { */ private final Queue<ByteBuffer> _writeBufs; /** Requests that were not granted immediately */ - private final Set<FIFOBandwidthLimiter.Request> _bwRequests; + private final Set<FIFOBandwidthLimiter.Request> _bwInRequests; + private final Set<FIFOBandwidthLimiter.Request> _bwOutRequests; private boolean _established; private long _establishedOn; private EstablishState _establishState; @@ -86,7 +90,8 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { /** * pending unprepared OutNetMessage instances */ - private final CoDelPriorityBlockingQueue<OutNetMessage> _outbound; + //private final CoDelPriorityBlockingQueue<OutNetMessage> _outbound; + private final PriBlockingQueue<OutNetMessage> _outbound; /** * current prepared OutNetMessage, or null - synchronize on _outbound to modify * FIXME why do we need this??? @@ -154,14 +159,18 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { _chan = chan; _readBufs = new ConcurrentLinkedQueue(); _writeBufs = new ConcurrentLinkedQueue(); - _bwRequests = new ConcurrentHashSet(2); - _outbound = new CoDelPriorityBlockingQueue(ctx, "NTCP-Connection", 32); + _bwInRequests = new ConcurrentHashSet(2); + _bwOutRequests = new ConcurrentHashSet(8); + //_outbound = new CoDelPriorityBlockingQueue(ctx, "NTCP-Connection", 32); + _outbound = new PriBlockingQueue(32); _isInbound = true; _decryptBlockBuf = new byte[BLOCK_SIZE]; _curReadState = new ReadState(); _establishState = new EstablishState(ctx, transport, this); _conKey = key; _conKey.attach(this); + _inboundListener = new InboundListener(); + _outboundListener = new OutboundListener(); initialize(); } @@ -178,11 +187,15 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { _remAddr = remAddr; _readBufs = new ConcurrentLinkedQueue(); _writeBufs = new ConcurrentLinkedQueue(); - _bwRequests = new ConcurrentHashSet(8); - _outbound = new CoDelPriorityBlockingQueue(ctx, "NTCP-Connection", 32); + _bwInRequests = new ConcurrentHashSet(2); + _bwOutRequests = new ConcurrentHashSet(8); + //_outbound = new CoDelPriorityBlockingQueue(ctx, "NTCP-Connection", 32); + _outbound = new PriBlockingQueue(32); _isInbound = false; _decryptBlockBuf = new byte[BLOCK_SIZE]; _curReadState = new ReadState(); + _inboundListener = new InboundListener(); + _outboundListener = new OutboundListener(); initialize(); } @@ -283,12 +296,16 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { _transport.getReader().connectionClosed(this); _transport.getWriter().connectionClosed(this); - for (Iterator<FIFOBandwidthLimiter.Request> iter = _bwRequests.iterator(); iter.hasNext(); ) { - iter.next().abort(); + for (FIFOBandwidthLimiter.Request req :_bwInRequests) { + req.abort(); // we would like to return read ByteBuffers via EventPumper.releaseBuf(), // but we can't risk releasing it twice } - _bwRequests.clear(); + _bwInRequests.clear(); + for (FIFOBandwidthLimiter.Request req :_bwOutRequests) { + req.abort(); + } + _bwOutRequests.clear(); _writeBufs.clear(); ByteBuffer bb; @@ -297,7 +314,8 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { } List<OutNetMessage> pending = new ArrayList(); - _outbound.drainAllTo(pending); + //_outbound.drainAllTo(pending); + _outbound.drainTo(pending); for (OutNetMessage msg : pending) { Object buf = msg.releasePreparationBuffer(); if (buf != null) @@ -485,7 +503,7 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { _establishedOn = System.currentTimeMillis(); _establishState = null; _transport.markReachable(getRemotePeer().calculateHash(), false); - //_context.shitlist().unshitlistRouter(getRemotePeer().calculateHash(), NTCPTransport.STYLE); + //_context.banlist().unbanlistRouter(getRemotePeer().calculateHash(), NTCPTransport.STYLE); boolean msgs = !_outbound.isEmpty(); _nextMetaTime = System.currentTimeMillis() + (META_FREQUENCY / 2) + _context.random().nextInt(META_FREQUENCY); _nextInfoTime = System.currentTimeMillis() + (INFO_FREQUENCY / 2) + _context.random().nextInt(INFO_FREQUENCY); @@ -848,12 +866,12 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { /** * The FifoBandwidthLimiter.CompleteListener callback. - * Does the delayed read or write. + * Does the delayed read. */ - public void complete(FIFOBandwidthLimiter.Request req) { - removeRequest(req); - ByteBuffer buf = (ByteBuffer)req.attachment(); - if (req.getTotalInboundRequested() > 0) { + private class InboundListener implements FIFOBandwidthLimiter.CompleteListener { + public void complete(FIFOBandwidthLimiter.Request req) { + removeIBRequest(req); + ByteBuffer buf = (ByteBuffer)req.attachment(); if (_closed) { EventPumper.releaseBuf(buf); return; @@ -863,20 +881,40 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { // our reads used to be bw throttled (during which time we were no // longer interested in reading from the network), but we aren't // throttled anymore, so we should resume being interested in reading - _transport.getPumper().wantsRead(this); + _transport.getPumper().wantsRead(NTCPConnection.this); //_transport.getReader().wantsRead(this); - } else if (req.getTotalOutboundRequested() > 0 && !_closed) { - _context.statManager().addRateData("ntcp.throttledWriteComplete", (System.currentTimeMillis()-req.getRequestTime())); - write(buf); } } - private void removeRequest(FIFOBandwidthLimiter.Request req) { - _bwRequests.remove(req); + /** + * The FifoBandwidthLimiter.CompleteListener callback. + * Does the delayed write. + */ + private class OutboundListener implements FIFOBandwidthLimiter.CompleteListener { + public void complete(FIFOBandwidthLimiter.Request req) { + removeOBRequest(req); + ByteBuffer buf = (ByteBuffer)req.attachment(); + if (!_closed) { + _context.statManager().addRateData("ntcp.throttledWriteComplete", (System.currentTimeMillis()-req.getRequestTime())); + write(buf); + } + } + } + + private void removeIBRequest(FIFOBandwidthLimiter.Request req) { + _bwInRequests.remove(req); + } + + private void addIBRequest(FIFOBandwidthLimiter.Request req) { + _bwInRequests.add(req); + } + + private void removeOBRequest(FIFOBandwidthLimiter.Request req) { + _bwOutRequests.remove(req); } - private void addRequest(FIFOBandwidthLimiter.Request req) { - _bwRequests.add(req); + private void addOBRequest(FIFOBandwidthLimiter.Request req) { + _bwOutRequests.add(req); } /** @@ -887,15 +925,15 @@ class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { */ public void queuedRecv(ByteBuffer buf, FIFOBandwidthLimiter.Request req) { req.attach(buf); - req.setCompleteListener(this); - addRequest(req); + req.setCompleteListener(_inboundListener); + addIBRequest(req); } /** ditto for writes */ public void queuedWrite(ByteBuffer buf, FIFOBandwidthLimiter.Request req) { req.attach(buf); - req.setCompleteListener(this); - addRequest(req); + req.setCompleteListener(_outboundListener); + addOBRequest(req); } /** diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java index c063326d43545434dc8de5c79216ddc12c09754e..ab57ccd25b22c197885b48b4402f75600e2b1905 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -94,7 +94,7 @@ public class NTCPTransport extends TransportImpl { _context.statManager().createRateStat("ntcp.failsafeCloses", "How many times do we need to proactively close an idle connection to a peer at any given failsafe pass?", "ntcp", RATES); _context.statManager().createRateStat("ntcp.failsafeInvalid", "How many times do we close a connection to a peer to work around a JVM bug?", "ntcp", RATES); _context.statManager().createRateStat("ntcp.accept", "", "ntcp", RATES); - _context.statManager().createRateStat("ntcp.attemptShitlistedPeer", "", "ntcp", RATES); + _context.statManager().createRateStat("ntcp.attemptBanlistedPeer", "", "ntcp", RATES); _context.statManager().createRateStat("ntcp.attemptUnreachablePeer", "", "ntcp", RATES); _context.statManager().createRateStat("ntcp.closeOnBacklog", "", "ntcp", RATES); _context.statManager().createRateStat("ntcp.connectFailedIOE", "", "ntcp", RATES); @@ -167,7 +167,7 @@ public class NTCPTransport extends TransportImpl { void inboundEstablished(NTCPConnection con) { _context.statManager().addRateData("ntcp.inboundEstablished", 1); markReachable(con.getRemotePeer().calculateHash(), true); - //_context.shitlist().unshitlistRouter(con.getRemotePeer().calculateHash()); + //_context.banlist().unbanlistRouter(con.getRemotePeer().calculateHash()); NTCPConnection old; synchronized (_conLock) { old = _conByIdent.put(con.getRemotePeer().calculateHash(), con); @@ -281,10 +281,10 @@ public class NTCPTransport extends TransportImpl { return null; } Hash peer = toAddress.getIdentity().calculateHash(); - if (_context.shitlist().isShitlisted(peer, STYLE)) { - // we aren't shitlisted in general (since we are trying to get a bid), but we have - // recently shitlisted the peer on the NTCP transport, so don't try it - _context.statManager().addRateData("ntcp.attemptShitlistedPeer", 1); + if (_context.banlist().isBanlisted(peer, STYLE)) { + // we aren't banlisted in general (since we are trying to get a bid), but we have + // recently banlisted the peer on the NTCP transport, so don't try it + _context.statManager().addRateData("ntcp.attemptBanlistedPeer", 1); return null; } else if (isUnreachable(peer)) { _context.statManager().addRateData("ntcp.attemptUnreachablePeer", 1); @@ -302,7 +302,7 @@ public class NTCPTransport extends TransportImpl { if (addr == null) { markUnreachable(peer); //_context.statManager().addRateData("ntcp.bidRejectedNoNTCPAddress", 1); - //_context.shitlist().shitlistRouter(toAddress.getIdentity().calculateHash(), "No NTCP address", STYLE); + //_context.banlist().banlistRouter(toAddress.getIdentity().calculateHash(), "No NTCP address", STYLE); if (_log.shouldLog(Log.DEBUG)) _log.debug("no bid when trying to send to " + peer + " as they don't have an ntcp address"); return null; @@ -311,7 +311,7 @@ public class NTCPTransport extends TransportImpl { if ( (addr.getPort() < MIN_PEER_PORT) || (ip == null) ) { _context.statManager().addRateData("ntcp.connectFailedInvalidPort", 1); markUnreachable(peer); - //_context.shitlist().shitlistRouter(toAddress.getIdentity().calculateHash(), "Invalid NTCP address", STYLE); + //_context.banlist().banlistRouter(toAddress.getIdentity().calculateHash(), "Invalid NTCP address", STYLE); if (_log.shouldLog(Log.DEBUG)) _log.debug("no bid when trying to send to " + peer + " as they don't have a valid ntcp address"); return null; diff --git a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java index 88e89131fac6bc9b0e2b9a0d004a1e8cf503f308..860b758942d2f88f824f05d11aabe6d3a10246cc 100644 --- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java +++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java @@ -233,7 +233,7 @@ class EstablishmentManager { RouterIdentity toIdentity = toRouterInfo.getIdentity(); Hash toHash = toIdentity.calculateHash(); if (toRouterInfo.getNetworkId() != Router.NETWORK_ID) { - _context.shitlist().shitlistRouter(toHash); + _context.banlist().banlistRouter(toHash); _transport.markUnreachable(toHash); _transport.failed(msg, "Remote peer is on the wrong network, cannot establish"); return; @@ -252,7 +252,7 @@ class EstablishmentManager { Arrays.equals(maybeTo.getIP(), _transport.getExternalIP())) { _transport.failed(msg, "Remote peer's IP isn't valid"); _transport.markUnreachable(toHash); - //_context.shitlist().shitlistRouter(msg.getTarget().getIdentity().calculateHash(), "Invalid SSU address", UDPTransport.STYLE); + //_context.banlist().banlistRouter(msg.getTarget().getIdentity().calculateHash(), "Invalid SSU address", UDPTransport.STYLE); _context.statManager().addRateData("udp.establishBadIP", 1); return; } @@ -707,15 +707,15 @@ class EstablishmentManager { /** * dont send our info immediately, just send a small data packet, and 5-10s later, - * if the peer isnt shitlisted, *then* send them our info. this will help kick off + * if the peer isnt banlisted, *then* send them our info. this will help kick off * the oldnet * The "oldnet" was < 0.6.1.10, it is long gone. * The delay really slows down the network. - * The peer is unshitlisted and marked reachable by addRemotePeerState() which calls markReachable() + * The peer is unbanlisted and marked reachable by addRemotePeerState() which calls markReachable() * so the check below is fairly pointless. * If for some strange reason an oldnet router (NETWORK_ID == 1) does show up, * it's handled in UDPTransport.messageReceived() - * (where it will get dropped, marked unreachable and shitlisted at that time). + * (where it will get dropped, marked unreachable and banlisted at that time). */ private void sendInboundComplete(PeerState peer) { // SimpleTimer.getInstance().addEvent(new PublishToNewInbound(peer), 10*1000); @@ -733,15 +733,15 @@ class EstablishmentManager { //_context.simpleScheduler().addEvent(new PublishToNewInbound(peer), 0); Hash hash = peer.getRemotePeer(); - if ((hash != null) && (!_context.shitlist().isShitlisted(hash)) && (!_transport.isUnreachable(hash))) { + if ((hash != null) && (!_context.banlist().isBanlisted(hash)) && (!_transport.isUnreachable(hash))) { // ok, we are fine with them, send them our latest info //if (_log.shouldLog(Log.INFO)) - // _log.info("Publishing to the peer after confirm plus delay (without shitlist): " + peer); + // _log.info("Publishing to the peer after confirm plus delay (without banlist): " + peer); sendOurInfo(peer, true); } else { // nuh uh. if (_log.shouldLog(Log.WARN)) - _log.warn("NOT publishing to the peer after confirm plus delay (WITH shitlist): " + (hash != null ? hash.toString() : "unknown")); + _log.warn("NOT publishing to the peer after confirm plus delay (WITH banlist): " + (hash != null ? hash.toString() : "unknown")); } } @@ -824,8 +824,8 @@ class EstablishmentManager { try { state.generateSessionKey(); } catch (DHSessionKeyBuilder.InvalidPublicParameterException ippe) { - if (_log.shouldLog(Log.ERROR)) - _log.error("Peer " + state + " sent us an invalid DH parameter (or were spoofed)", ippe); + if (_log.shouldLog(Log.WARN)) + _log.warn("Peer " + state + " sent us an invalid DH parameter", ippe); _inboundStates.remove(state.getRemoteHostId()); return; } @@ -1103,9 +1103,9 @@ class EstablishmentManager { case IB_STATE_CONFIRMED_COMPLETELY: RouterIdentity remote = inboundState.getConfirmedIdentity(); if (remote != null) { - if (_context.shitlist().isShitlistedForever(remote.calculateHash())) { + if (_context.banlist().isBanlistedForever(remote.calculateHash())) { if (_log.shouldLog(Log.WARN)) - _log.warn("Dropping inbound connection from permanently shitlisted peer: " + remote.calculateHash()); + _log.warn("Dropping inbound connection from permanently banlisted peer: " + remote.calculateHash()); // So next time we will not accept the con, rather than doing the whole handshake _context.blocklist().add(inboundState.getSentIP()); inboundState.fail(); @@ -1299,7 +1299,7 @@ class EstablishmentManager { } String err = "Took too long to establish OB connection, state = " + outboundState.getState(); Hash peer = outboundState.getRemoteIdentity().calculateHash(); - //_context.shitlist().shitlistRouter(peer, err, UDPTransport.STYLE); + //_context.banlist().banlistRouter(peer, err, UDPTransport.STYLE); _transport.markUnreachable(peer); _transport.dropPeer(peer, false, err); //_context.profileManager().commErrorOccurred(peer); diff --git a/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java b/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java index b49cb0d2612799d6a42d95bcd149c3c42161de55..5ebb64078c3b39d5b84d42a5475c9c7e129546de 100644 --- a/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java +++ b/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java @@ -143,7 +143,7 @@ class IntroductionManager { continue; } if ( /* _context.profileOrganizer().isFailing(cur.getRemotePeer()) || */ - _context.shitlist().isShitlisted(cur.getRemotePeer()) || + _context.banlist().isBanlisted(cur.getRemotePeer()) || _transport.wasUnreachable(cur.getRemotePeer())) { if (_log.shouldLog(Log.INFO)) _log.info("Peer is failing, shistlisted or was unreachable: " + cur); @@ -255,7 +255,7 @@ class IntroductionManager { try { to = InetAddress.getByAddress(ip); } catch (UnknownHostException uhe) { - // shitlist Bob? + // banlist Bob? if (_log.shouldLog(Log.WARN)) _log.warn("IP for alice to hole punch to is invalid", uhe); _context.statManager().addRateData("udp.relayBadIP", 1); diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java index 797060c5838bfab1fb5a5d5db1103de39934356e..9b0a55221cb76484086c5efe443ee33735596098 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java @@ -265,8 +265,8 @@ class OutboundEstablishState { try { generateSessionKey(); } catch (DHSessionKeyBuilder.InvalidPublicParameterException ippe) { - if (_log.shouldLog(Log.ERROR)) - _log.error("Peer " + getRemoteHostId() + " sent us an invalid DH parameter (or were spoofed)", ippe); + if (_log.shouldLog(Log.WARN)) + _log.warn("Peer " + getRemoteHostId() + " sent us an invalid DH parameter", ippe); valid = false; } if (valid) diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java index d6bb57806345e1a0e770aaf0a667e777e2a1599b..e6af198a87bb1c422fb3126ce3f66dc5cf55f029 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java @@ -1071,7 +1071,7 @@ class PacketBuilder { if (_log.shouldLog(_log.WARN)) _log.warn("Cannot build a relay request to " + state.getRemoteIdentity().calculateHash() + ", as their UDP address is invalid: addr=" + addr + " index=" + i); - // TODO implement some sort of introducer shitlist + // TODO implement some sort of introducer banlist continue; } rv.add(buildRelayRequest(iaddr, iport, ikey, tag, ourIntroKey, state.getIntroNonce(), true)); diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index 964e79332896f409869890fd9b8ac0f40ff44049..99e11a4fac9dcf9bb1caf941513a8abd6f6015ad 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -17,6 +17,7 @@ import net.i2p.data.SessionKey; import net.i2p.router.OutNetMessage; import net.i2p.router.RouterContext; import net.i2p.router.util.CoDelPriorityBlockingQueue; +import net.i2p.router.util.PriBlockingQueue; import net.i2p.util.Log; import net.i2p.util.ConcurrentHashSet; @@ -209,7 +210,8 @@ class PeerState { * Priority queue of messages that have not yet been sent. * They are taken from here and put in _outboundMessages. */ - private final CoDelPriorityBlockingQueue<OutboundMessageState> _outboundQueue; + //private final CoDelPriorityBlockingQueue<OutboundMessageState> _outboundQueue; + private final PriBlockingQueue<OutboundMessageState> _outboundQueue; /** which outbound message is currently being retransmitted */ private OutboundMessageState _retransmitter; @@ -323,7 +325,8 @@ class PeerState { _rttDeviation = _rtt; _inboundMessages = new HashMap(8); _outboundMessages = new ArrayList(32); - _outboundQueue = new CoDelPriorityBlockingQueue(ctx, "UDP-PeerState", 32); + //_outboundQueue = new CoDelPriorityBlockingQueue(ctx, "UDP-PeerState", 32); + _outboundQueue = new PriBlockingQueue(32); // all createRateStat() moved to EstablishmentManager _remoteIP = remoteIP; _remotePeer = remotePeer; @@ -1397,7 +1400,8 @@ class PeerState { tempList = new ArrayList(_outboundMessages); _outboundMessages.clear(); } - _outboundQueue.drainAllTo(tempList); + //_outboundQueue.drainAllTo(tempList); + _outboundQueue.drainTo(tempList); for (OutboundMessageState oms : tempList) { _transport.failed(oms, false); } diff --git a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java index 9b00962b385052efafb8375bd3c94b188e0a69c2..e32decb03e97fcc2817c6e90cc091ebc51a90c07 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java @@ -734,7 +734,13 @@ class PeerTestManager { return; } UDPAddress addr = new UDPAddress(raddr); - SessionKey charlieIntroKey = new SessionKey(addr.getIntroKey()); + byte[] ikey = addr.getIntroKey(); + if (ikey == null) { + if (_log.shouldLog(Log.WARN)) + _log.warn("Unable to pick a charlie"); + return; + } + SessionKey charlieIntroKey = new SessionKey(ikey); //UDPPacket packet = _packetBuilder.buildPeerTestToAlice(aliceIP, from.getPort(), aliceIntroKey, charlieIntroKey, nonce); //_transport.send(packet); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java b/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java index 9f6f625a78e5597e63527c16889e6631c51723ca..72637fef86d5d46fe5217e1b3b7cc2238dadf13a 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java @@ -253,7 +253,6 @@ class UDPReceiver { public void run() { //_socketChanged = false; - FIFOBandwidthLimiter.Request req = _context.bandwidthLimiter().createRequest(); while (_keepRunning) { //if (_socketChanged) { // Thread.currentThread().setName(_name + "." + _id); @@ -292,8 +291,9 @@ class UDPReceiver { if (size > 0) { //FIFOBandwidthLimiter.Request req = _context.bandwidthLimiter().requestInbound(size, "UDP receiver"); //_context.bandwidthLimiter().requestInbound(req, size, "UDP receiver"); - req = _context.bandwidthLimiter().requestInbound(size, "UDP receiver"); - while (req.getPendingInboundRequested() > 0) + FIFOBandwidthLimiter.Request req = + _context.bandwidthLimiter().requestInbound(size, "UDP receiver"); + while (req.getPendingRequested() > 0) req.waitForNextAllocation(); int queued = receive(packet); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPSender.java b/router/java/src/net/i2p/router/transport/udp/UDPSender.java index e169d3a8cff75d29ca67f385304b4d2a51e2c7a8..885cc7299d469bd17d027a3576c8bfa124c75bcf 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPSender.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPSender.java @@ -191,7 +191,6 @@ class UDPSender { private class Runner implements Runnable { //private volatile boolean _socketChanged; - FIFOBandwidthLimiter.Request req = _context.bandwidthLimiter().createRequest(); public void run() { if (_log.shouldLog(Log.DEBUG)) _log.debug("Running the UDP sender"); @@ -211,8 +210,9 @@ class UDPSender { // ?? int size2 = packet.getPacket().getLength(); if (size > 0) { //_context.bandwidthLimiter().requestOutbound(req, size, "UDP sender"); - req = _context.bandwidthLimiter().requestOutbound(size, "UDP sender"); - while (req.getPendingOutboundRequested() > 0) + FIFOBandwidthLimiter.Request req = + _context.bandwidthLimiter().requestOutbound(size, 0, "UDP sender"); + while (req.getPendingRequested() > 0) req.waitForNextAllocation(); } diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index 3874a9d4f873fd878f96bcc115a0aee7f3c5295a..bad73980f08ab3a86fc8e05f04a82fb1fe06cf5b 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -563,7 +563,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority _log.error("The router " + from + " told us we have an invalid IP - " + Addresses.toString(ourIP, ourPort) + ". Lets throw tomatoes at them"); markUnreachable(from); - //_context.shitlist().shitlistRouter(from, "They said we had an invalid IP", STYLE); + //_context.banlist().banlistRouter(from, "They said we had an invalid IP", STYLE); return; } else if (inboundRecent && _externalListenPort > 0 && _externalListenHost != null) { // use OS clock since its an ordering thing, not a time thing @@ -913,7 +913,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority _activeThrottle.unchoke(peer.getRemotePeer()); markReachable(peer.getRemotePeer(), peer.isInbound()); - //_context.shitlist().unshitlistRouter(peer.getRemotePeer(), STYLE); + //_context.banlist().unbanlistRouter(peer.getRemotePeer(), STYLE); //if (SHOULD_FLOOD_PEERS) // _flooder.addPeer(peer); @@ -956,13 +956,13 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority /* if (remoteIdentHash != null) { - _context.shitlist().shitlistRouter(remoteIdentHash, "Sent us a peer from the wrong network"); + _context.banlist().banlistRouter(remoteIdentHash, "Sent us a peer from the wrong network"); dropPeer(remoteIdentHash); if (_log.shouldLog(Log.ERROR)) _log.error("Dropping the peer " + remoteIdentHash + " because they are in the wrong net"); } else if (remoteIdent != null) { - _context.shitlist().shitlistRouter(remoteIdent.calculateHash(), "Sent us a peer from the wrong network"); + _context.banlist().banlistRouter(remoteIdent.calculateHash(), "Sent us a peer from the wrong network"); dropPeer(remoteIdent.calculateHash()); if (_log.shouldLog(Log.ERROR)) _log.error("Dropping the peer " + remoteIdent.calculateHash() @@ -978,8 +978,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority _context.simpleScheduler().addEvent(new RemoveDropList(remote), DROPLIST_PERIOD); } markUnreachable(peerHash); - _context.shitlist().shitlistRouter(peerHash, "Part of the wrong network, version = " + ((RouterInfo) entry).getOption("router.version")); - //_context.shitlist().shitlistRouter(peerHash, "Part of the wrong network", STYLE); + _context.banlist().banlistRouter(peerHash, "Part of the wrong network, version = " + ((RouterInfo) entry).getOption("router.version")); + //_context.banlist().banlistRouter(peerHash, "Part of the wrong network", STYLE); dropPeer(peerHash, false, "wrong network"); if (_log.shouldLog(Log.WARN)) _log.warn("Dropping the peer " + peerHash + " because they are in the wrong net: " + entry); @@ -1013,13 +1013,13 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority boolean isInDropList(RemoteHostId peer) { return _dropList.contains(peer); } - void dropPeer(Hash peer, boolean shouldShitlist, String why) { + void dropPeer(Hash peer, boolean shouldBanlist, String why) { PeerState state = getPeerState(peer); if (state != null) - dropPeer(state, shouldShitlist, why); + dropPeer(state, shouldBanlist, why); } - void dropPeer(PeerState peer, boolean shouldShitlist, String why) { + void dropPeer(PeerState peer, boolean shouldBanlist, String why) { if (_log.shouldLog(Log.INFO)) { long now = _context.clock().now(); StringBuilder buf = new StringBuilder(4096); @@ -1028,7 +1028,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority long timeSinceAck = now - peer.getLastACKSend(); long timeSinceSendOK = now - peer.getLastSendFullyTime(); int consec = peer.getConsecutiveFailedSends(); - buf.append("Dropping remote peer: ").append(peer.toString()).append(" shitlist? ").append(shouldShitlist); + buf.append("Dropping remote peer: ").append(peer.toString()).append(" banlist? ").append(shouldBanlist); buf.append(" lifetime: ").append(now - peer.getKeyEstablishedTime()); buf.append(" time since send/fully/recv/ack: ").append(timeSinceSend).append(" / "); buf.append(timeSinceSendOK).append(" / "); @@ -1067,13 +1067,13 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority _log.info(buf.toString(), new Exception("Dropped by")); } synchronized(_addDropLock) { - locked_dropPeer(peer, shouldShitlist, why); + locked_dropPeer(peer, shouldBanlist, why); } if (needsRebuild()) rebuildExternalAddress(); } - private void locked_dropPeer(PeerState peer, boolean shouldShitlist, String why) { + private void locked_dropPeer(PeerState peer, boolean shouldBanlist, String why) { peer.dropOutbound(); peer.expireInboundMessages(); _introManager.remove(peer); @@ -1083,9 +1083,9 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority if (peer.getRemotePeer() != null) { dropPeerCapacities(peer); - if (shouldShitlist) { + if (shouldBanlist) { markUnreachable(peer.getRemotePeer()); - //_context.shitlist().shitlistRouter(peer.getRemotePeer(), "dropped after too many retries", STYLE); + //_context.banlist().banlistRouter(peer.getRemotePeer(), "dropped after too many retries", STYLE); } long now = _context.clock().now(); _context.statManager().addRateData("udp.droppedPeer", now - peer.getLastReceiveTime(), now - peer.getKeyEstablishedTime()); @@ -1110,8 +1110,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority _expireEvent.remove(peer); // deal with races to make sure we drop the peers fully - if ( (altByIdent != null) && (peer != altByIdent) ) locked_dropPeer(altByIdent, shouldShitlist, "recurse"); - if ( (altByHost != null) && (peer != altByHost) ) locked_dropPeer(altByHost, shouldShitlist, "recurse"); + if ( (altByIdent != null) && (peer != altByIdent) ) locked_dropPeer(altByIdent, shouldBanlist, "recurse"); + if ( (altByHost != null) && (peer != altByHost) ) locked_dropPeer(altByHost, shouldBanlist, "recurse"); } private boolean needsRebuild() { @@ -2253,7 +2253,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority buf.append("</i>"); appended = true; } - if (_context.shitlist().isShitlisted(peer.getRemotePeer(), STYLE)) { + if (_context.banlist().isBanlisted(peer.getRemotePeer(), STYLE)) { if (!appended) buf.append("<br>"); buf.append(" <i>").append(_("Banned")).append("</i>"); appended = true; @@ -2595,6 +2595,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority // if old != unsolicited && now - lastUpdated > STATUS_GRACE_PERIOD) // // fall through... + case CommSystemFacade.STATUS_DISCONNECTED: case CommSystemFacade.STATUS_HOSED: _reachabilityStatus = status; _reachabilityStatusLastUpdated = now; diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java index 6303b385c4efde96761776569dea8eb7fad55fae..2c3a5ffd72178a8efe6ac5bb214235b319e5e3a9 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java @@ -10,6 +10,7 @@ import java.util.concurrent.ConcurrentHashMap; import net.i2p.data.Hash; import net.i2p.data.i2np.I2NPMessage; import net.i2p.data.RouterInfo; +import net.i2p.router.CommSystemFacade; import net.i2p.router.RouterContext; import net.i2p.router.TunnelManagerFacade; import net.i2p.stat.Rate; @@ -104,6 +105,8 @@ class BuildExecutor implements Runnable { } private int allowed() { + if (_context.commSystem().getReachabilityStatus() == CommSystemFacade.STATUS_DISCONNECTED) + return 0; int maxKBps = _context.bandwidthLimiter().getOutboundKBytesPerSecond(); int allowed = maxKBps / 6; // Max. 1 concurrent build per 6 KB/s outbound RateStat rs = _context.statManager().getRate("tunnel.buildRequestTime"); diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java index 16b2031335e4981a4e6e144da512230a648c5625..64f2cb41bac7f350b09ca1a945c7b2084f4ab2b9 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java @@ -181,12 +181,13 @@ class BuildHandler implements Runnable { return; } - long dropBefore = System.currentTimeMillis() - (BuildRequestor.REQUEST_TIMEOUT/4); + long now = _context.clock().now(); + long dropBefore = now - (BuildRequestor.REQUEST_TIMEOUT/4); if (state.recvTime <= dropBefore) { if (_log.shouldLog(Log.WARN)) _log.warn("Not even trying to handle/decrypt the request " + state.msg.getUniqueId() - + ", since we received it a long time ago: " + (System.currentTimeMillis() - state.recvTime)); - _context.statManager().addRateData("tunnel.dropLoadDelay", System.currentTimeMillis() - state.recvTime, 0); + + ", since we received it a long time ago: " + (now - state.recvTime)); + _context.statManager().addRateData("tunnel.dropLoadDelay", now - state.recvTime, 0); _context.throttle().setTunnelStatus(_x("Dropping tunnel requests: Too slow")); return; } @@ -324,7 +325,7 @@ class BuildHandler implements Runnable { /** @return handle time or -1 if it wasn't completely handled */ private long handleRequest(BuildMessageState state) { - long timeSinceReceived = System.currentTimeMillis()-state.recvTime; + long timeSinceReceived = _context.clock().now()-state.recvTime; if (_log.shouldLog(Log.DEBUG)) _log.debug(state.msg.getUniqueId() + ": handling request after " + timeSinceReceived); @@ -533,7 +534,7 @@ class BuildHandler implements Runnable { // response = TunnelHistory.TUNNEL_REJECT_PROBABALISTIC_REJECT; int proactiveDrops = countProactiveDrops(); - long recvDelay = System.currentTimeMillis()-state.recvTime; + long recvDelay = _context.clock().now()-state.recvTime; if (response == 0) { float pDrop = ((float) recvDelay) / (float) (BuildRequestor.REQUEST_TIMEOUT*3); pDrop = (float)Math.pow(pDrop, 16); @@ -771,7 +772,7 @@ class BuildHandler implements Runnable { BuildMessageState cur = _inboundBuildMessages.peek(); boolean accept = true; if (cur != null) { - long age = System.currentTimeMillis() - cur.recvTime; + long age = _context.clock().now() - cur.recvTime; if (age >= BuildRequestor.REQUEST_TIMEOUT/4) { _context.statManager().addRateData("tunnel.dropLoad", age, sz); _context.throttle().setTunnelStatus(_x("Dropping tunnel requests: High load")); diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index 1b6c424eca69dfa9b61a9c8fa7c6e5b736013c99..9698cb65eefe7620849cf9ec0f0c386502334821 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -659,7 +659,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { int len = tun.getLength(); if (len > 1 && tun.getPeer(1).equals(peer)) { if (_log.shouldLog(Log.WARN)) - _log.warn("Removing OB tunnel, first hop shitlisted: " + tun); + _log.warn("Removing OB tunnel, first hop banlisted: " + tun); pool.tunnelFailed(tun, peer); } } @@ -675,7 +675,7 @@ public class TunnelPoolManager implements TunnelManagerFacade { int len = tun.getLength(); if (len > 1 && tun.getPeer(len - 2).equals(peer)) { if (_log.shouldLog(Log.WARN)) - _log.warn("Removing IB tunnel, prev. hop shitlisted: " + tun); + _log.warn("Removing IB tunnel, prev. hop banlisted: " + tun); pool.tunnelFailed(tun, peer); } } diff --git a/router/java/src/net/i2p/router/util/RouterPasswordManager.java b/router/java/src/net/i2p/router/util/RouterPasswordManager.java new file mode 100644 index 0000000000000000000000000000000000000000..6b5fbb7f0cb5b4cf852a900aa128692f080152b2 --- /dev/null +++ b/router/java/src/net/i2p/router/util/RouterPasswordManager.java @@ -0,0 +1,197 @@ +package net.i2p.router.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.i2p.data.Base64; +import net.i2p.data.DataHelper; +import net.i2p.data.SessionKey; +import net.i2p.router.Router; +import net.i2p.router.RouterContext; +import net.i2p.util.PasswordManager; + +/** + * Manage both plaintext and salted/hashed password storage in + * router.config. + * + * @since 0.9.4 + */ +public class RouterPasswordManager extends PasswordManager { + protected final RouterContext _context; + + private static final String PROP_MIGRATED = "router.passwordManager.migrated"; + // migrate these to hash + private static final String PROP_I2CP_OLD_PW = "i2cp.password"; + private static final String PROP_I2CP_OLD_USER = "i2cp.username"; + private static final String PROP_I2CP_NEW = "i2cp.auth"; +/**** + // migrate these to b64 + private static final String[] MIGRATE_FROM = { + // This has a separate router.reseedProxy.username prop, + // so let's not mess with it + "router.reseedProxy.password", + // Don't migrate these until we have a console form for them, + // which we aren't likely to ever bother with + "routerconsole.keyPassword", + "routerconsole.keystorePassword", + "i2cp.keyPassword", + "i2cp.keystorePassword" + }; + private static final String[] MIGRATE_TO = { + "router.reseedProxy.auth", + "routerconsole.ssl.key.auth", + "routerconsole.ssl.keystore.auth", + "i2cp.ssl.key.auth", + "i2cp.ssl.keystore.auth" + }; +****/ + + public RouterPasswordManager(RouterContext ctx) { + super(ctx); + _context = ctx; + migrate(); + } + + /** + * Migrate from plaintext to salt/hash + * + * @return success or nothing to migrate + */ + protected boolean migrate() { + synchronized(RouterPasswordManager.class) { + if (_context.getBooleanProperty(PROP_MIGRATED)) + return true; + // i2cp.password + String user = _context.getProperty(PROP_I2CP_OLD_USER); + String pw = _context.getProperty(PROP_I2CP_OLD_PW); + if (pw != null && user != null && pw.length() > 0 && user.length() > 0) { + saveHash(PROP_I2CP_NEW, user, pw); + } + // obfuscation of plaintext passwords + Map<String, String> toAdd = new HashMap(5); + List<String> toDel = new ArrayList(5); + /**** + for (int i = 0; i < MIGRATE_FROM.length; i++) { + if ((pw = _context.getProperty(MIGRATE_FROM[i])) != null) { + toAdd.put(MIGRATE_TO[i], Base64.encode(DataHelper.getUTF8(pw))); + toDel.add(MIGRATE_FROM[i]); + } + } + ****/ + toDel.add(PROP_I2CP_OLD_USER); + toDel.add(PROP_I2CP_OLD_PW); + toAdd.put(PROP_MIGRATED, "true"); + return _context.router().saveConfig(toAdd, toDel); + } + } + + /** + * Same as saveHash() + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return success + */ + public boolean save(String realm, String user, String pw) { + return saveHash(realm, user, pw); + } + + /** + * This will fail if pw contains a '#' + * or if user contains '#' or '=' or starts with '!' + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return success + */ + public boolean savePlain(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + Map<String, String> toAdd = Collections.singletonMap(pfx + PROP_PW, pw); + List<String> toDel = new ArrayList(4); + toDel.add(pfx + PROP_B64); + toDel.add(pfx + PROP_MD5); + toDel.add(pfx + PROP_CRYPT); + toDel.add(pfx + PROP_SHASH); + return _context.router().saveConfig(toAdd, toDel); + } + + + /** + * This will fail if + * if user contains '#' or '=' or starts with '!' + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return success + */ + public boolean saveB64(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + String b64 = Base64.encode(DataHelper.getUTF8(pw)); + Map<String, String> toAdd = Collections.singletonMap(pfx + PROP_B64, b64); + List<String> toDel = new ArrayList(4); + toDel.add(pfx + PROP_PW); + toDel.add(pfx + PROP_MD5); + toDel.add(pfx + PROP_CRYPT); + toDel.add(pfx + PROP_SHASH); + return _context.router().saveConfig(toAdd, toDel); + } + + /** + * This will fail if + * user contains '#' or '=' or starts with '!' + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @param pw plain text, already trimmed + * @return success + */ + public boolean saveHash(String realm, String user, String pw) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + byte[] salt = new byte[SALT_LENGTH]; + _context.random().nextBytes(salt); + byte[] pwHash = _context.keyGenerator().generateSessionKey(salt, DataHelper.getUTF8(pw)).getData(); + byte[] shashBytes = new byte[SHASH_LENGTH]; + System.arraycopy(salt, 0, shashBytes, 0, SALT_LENGTH); + System.arraycopy(pwHash, 0, shashBytes, SALT_LENGTH, SessionKey.KEYSIZE_BYTES); + String shash = Base64.encode(shashBytes); + Map<String, String> toAdd = Collections.singletonMap(pfx + PROP_SHASH, shash); + List<String> toDel = new ArrayList(4); + toDel.add(pfx + PROP_PW); + toDel.add(pfx + PROP_B64); + toDel.add(pfx + PROP_MD5); + toDel.add(pfx + PROP_CRYPT); + return _context.router().saveConfig(toAdd, toDel); + } + + /** + * Remove password, any kind. + * + * @param realm e.g. i2cp, routerconsole, etc. + * @param user null or "" for no user, already trimmed + * @return success + */ + public boolean remove(String realm, String user) { + String pfx = realm; + if (user != null && user.length() > 0) + pfx += '.' + user; + List<String> toDel = new ArrayList(5); + toDel.add(pfx + PROP_PW); + toDel.add(pfx + PROP_B64); + toDel.add(pfx + PROP_MD5); + toDel.add(pfx + PROP_CRYPT); + toDel.add(pfx + PROP_SHASH); + return _context.router().saveConfig(null, toDel); + } +} diff --git a/router/java/test/junit/net/i2p/router/SSUDemo.java b/router/java/test/junit/net/i2p/router/SSUDemo.java index b94367c5674e30a393f00ea3c94d669e39891af3..603f54c0d163ae881968aa62bee5a712f1a5b3af 100644 --- a/router/java/test/junit/net/i2p/router/SSUDemo.java +++ b/router/java/test/junit/net/i2p/router/SSUDemo.java @@ -57,7 +57,7 @@ public class SSUDemo { // we want SNTP synchronization for replay prevention envProps.setProperty("time.disabled", "false"); // allow 127.0.0.1/10.0.0.1/etc (useful for testing). If this is false, - // peers who say they're on an invalid IP are shitlisted + // peers who say they're on an invalid IP are banlisted envProps.setProperty("i2np.udp.allowLocal", "true"); // explicit IP+port. at least one router on the net has to have their IP+port // set, since there has to be someone to detect one's IP off. most don't need @@ -173,9 +173,9 @@ public class SSUDemo { out.setOnSendJob(new AfterACK()); // queue up the message, establishing a new SSU session if necessary, using // their direct SSU address if they have one, or their indirect SSU addresses - // if they don't. If we cannot contact them, we will 'shitlist' their address, + // if they don't. If we cannot contact them, we will 'banlist' their address, // during which time we will not even attempt to send messages to them. We also - // drop their netDb info when we shitlist them, in case their info is no longer + // drop their netDb info when we banlist them, in case their info is no longer // correct. Since the netDb is disabled for all meaningful purposes, the SSUDemo // will be responsible for fetching such information. _us.outNetMessagePool().add(out); @@ -278,4 +278,4 @@ public class SSUDemo { } public String getName() { return "Handle netDb store"; } } -} \ No newline at end of file +}