propagate from branch 'i2p.i2p' (head 915df7d6afddd7473a7db7fd1f499d350611db62)

to branch 'i2p.i2p.zzz.dhtsnark' (head 4c10a9396745b20a517c9822cf1454aca752ea94)
This commit is contained in:
zzz
2011-01-05 21:49:13 +00:00
29 changed files with 121 additions and 109 deletions

View File

@@ -518,6 +518,7 @@ public class Peer implements Comparable
/** /**
* Are we currently requesting the piece? * Are we currently requesting the piece?
* @deprecated deadlocks
* @since 0.8.1 * @since 0.8.1
*/ */
boolean isRequesting(int p) { boolean isRequesting(int p) {

View File

@@ -651,9 +651,6 @@ public class PeerCoordinator implements PeerListener
} }
if (piece == null) if (piece == null)
wantedSize = wantedPieces.size(); wantedSize = wantedPieces.size();
} // synch
// Don't sync the following, deadlock from calling each Peer's isRequesting()
//Only request a piece we've requested before if there's no other choice. //Only request a piece we've requested before if there's no other choice.
if (piece == null) { if (piece == null) {
@@ -672,22 +669,12 @@ public class PeerCoordinator implements PeerListener
Piece p = it2.next(); Piece p = it2.next();
if (havePieces.get(p.getId())) { if (havePieces.get(p.getId())) {
// limit number of parallel requests // limit number of parallel requests
int requestedCount = 0; int requestedCount = p.getRequestCount();
for (Peer pr : peers) { if (requestedCount < MAX_PARALLEL_REQUESTS &&
// deadlock if synced on wantedPieces !p.isRequestedBy(peer)) {
if (pr.isRequesting(p.getId())) {
if (pr.equals(peer)) {
// don't give it to him again
requestedCount = MAX_PARALLEL_REQUESTS;
break;
}
if (++requestedCount >= MAX_PARALLEL_REQUESTS)
break;
}
}
if (requestedCount >= MAX_PARALLEL_REQUESTS)
continue;
piece = p; piece = p;
break;
}
} }
} }
if (piece == null) { if (piece == null) {
@@ -708,9 +695,10 @@ public class PeerCoordinator implements PeerListener
if (record) { if (record) {
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info(peer + " is now requesting: piece " + piece + " priority " + piece.getPriority()); _log.info(peer + " is now requesting: piece " + piece + " priority " + piece.getPriority());
piece.setRequested(true); piece.setRequested(peer, true);
} }
return piece.getId(); return piece.getId();
} // synch
} }
/** /**
@@ -1014,7 +1002,7 @@ public class PeerCoordinator implements PeerListener
} }
} // else drop the empty partial piece } // else drop the empty partial piece
// synchs on wantedPieces... // synchs on wantedPieces...
markUnrequestedIfOnlyOne(peer, pp.getPiece()); markUnrequested(peer, pp.getPiece());
} }
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info("Partial list size now: " + partialPieces.size()); _log.info("Partial list size now: " + partialPieces.size());
@@ -1042,7 +1030,7 @@ public class PeerCoordinator implements PeerListener
// this is just a double-check, it should be in there // this is just a double-check, it should be in there
for(Piece piece : wantedPieces) { for(Piece piece : wantedPieces) {
if (piece.getId() == savedPiece) { if (piece.getId() == savedPiece) {
piece.setRequested(true); piece.setRequested(peer, true);
if (_log.shouldLog(Log.INFO)) { if (_log.shouldLog(Log.INFO)) {
_log.info("Restoring orphaned partial piece " + pp + _log.info("Restoring orphaned partial piece " + pp +
" Partial list size now: " + partialPieces.size()); " Partial list size now: " + partialPieces.size());
@@ -1121,33 +1109,16 @@ public class PeerCoordinator implements PeerListener
} }
} }
/** Clear the requested flag for a piece if the peer /**
** is the only one requesting it * Clear the requested flag for a piece
*/ */
private void markUnrequestedIfOnlyOne(Peer peer, int piece) private void markUnrequested(Peer peer, int piece)
{ {
// see if anybody else is requesting
for (Peer p : peers) {
if (p.equals(peer))
continue;
if (p.state == null)
continue;
// FIXME don't go into the state
if (p.state.getRequestedPieces().contains(Integer.valueOf(piece))) {
if (_log.shouldLog(Log.DEBUG))
_log.debug("Another peer is requesting piece " + piece);
return;
}
}
// nobody is, so mark unrequested
synchronized(wantedPieces) synchronized(wantedPieces)
{ {
for (Piece pc : wantedPieces) { for (Piece pc : wantedPieces) {
if (pc.getId() == piece) { if (pc.getId() == piece) {
pc.setRequested(false); pc.setRequested(peer, false);
if (_log.shouldLog(Log.DEBUG))
_log.debug("Removing from request list piece " + piece);
return; return;
} }
} }

View File

@@ -468,7 +468,7 @@ class PeerState implements DataLoader
/** /**
* @return all pieces we are currently requesting, or empty Set * @return all pieces we are currently requesting, or empty Set
*/ */
synchronized Set<Integer> getRequestedPieces() { synchronized private Set<Integer> getRequestedPieces() {
Set<Integer> rv = new HashSet(outstandingRequests.size() + 1); Set<Integer> rv = new HashSet(outstandingRequests.size() + 1);
for (Request req : outstandingRequests) { for (Request req : outstandingRequests) {
rv.add(Integer.valueOf(req.piece)); rv.add(Integer.valueOf(req.piece));
@@ -582,6 +582,7 @@ class PeerState implements DataLoader
/** /**
* Are we currently requesting the piece? * Are we currently requesting the piece?
* @deprecated deadlocks
* @since 0.8.1 * @since 0.8.1
*/ */
synchronized boolean isRequesting(int piece) { synchronized boolean isRequesting(int piece) {

View File

@@ -12,13 +12,15 @@ class Piece implements Comparable {
private int id; private int id;
private Set<PeerID> peers; private Set<PeerID> peers;
private boolean requested; /** @since 0.8.3 */
private Set<PeerID> requests;
/** @since 0.8.1 */ /** @since 0.8.1 */
private int priority; private int priority;
public Piece(int id) { public Piece(int id) {
this.id = id; this.id = id;
this.peers = new ConcurrentHashSet(); this.peers = new ConcurrentHashSet(I2PSnarkUtil.MAX_CONNECTIONS);
this.requests = new ConcurrentHashSet(2);
} }
/** /**
@@ -49,12 +51,36 @@ class Piece implements Comparable {
} }
public int getId() { return this.id; } public int getId() { return this.id; }
/** @deprecated unused */
public Set<PeerID> getPeers() { return this.peers; }
public boolean addPeer(Peer peer) { return this.peers.add(peer.getPeerID()); } public boolean addPeer(Peer peer) { return this.peers.add(peer.getPeerID()); }
public boolean removePeer(Peer peer) { return this.peers.remove(peer.getPeerID()); } public boolean removePeer(Peer peer) { return this.peers.remove(peer.getPeerID()); }
public boolean isRequested() { return this.requested; } public boolean isRequested() { return !this.requests.isEmpty(); }
public void setRequested(boolean requested) { this.requested = requested; }
/**
* Since 0.8.3, keep track of who is requesting here,
* to avoid deadlocks from querying each peer.
*/
public void setRequested(Peer peer, boolean requested) {
if (requested)
this.requests.add(peer.getPeerID());
else
this.requests.remove(peer.getPeerID());
}
/**
* Is peer requesting this piece?
* @since 0.8.3
*/
public boolean isRequestedBy(Peer peer) {
return this.requests.contains(peer.getPeerID());
}
/**
* How many peers are requesting this piece?
* @since 0.8.3
*/
public int getRequestCount() {
return this.requests.size();
}
/** @return default 0 @since 0.8.1 */ /** @return default 0 @since 0.8.1 */
public int getPriority() { return this.priority; } public int getPriority() { return this.priority; }

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P i2psnark\n" "Project-Id-Version: I2P i2psnark\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-19 03:16+0000\n" "POT-Creation-Date: 2010-12-19 03:16+0000\n"
"PO-Revision-Date: 2010-12-31 01:09+0100\n" "PO-Revision-Date: 2011-01-03 00:58+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n" "Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n" "Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -323,7 +323,7 @@ msgstr "Arrancar todos"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372
msgid "No torrents loaded." msgid "No torrents loaded."
msgstr "No cargado ningún torrent" msgstr "No está cargado ningún torrent"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
msgid "Totals" msgid "Totals"
@@ -644,7 +644,7 @@ msgstr "Si marcado, los torrents añadidos se iniciarán de forma automática."
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
msgid "Theme" msgid "Theme"
msgstr "tema" msgstr "Tema"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1211 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1211
msgid "Startup delay" msgid "Startup delay"
@@ -664,7 +664,7 @@ msgstr "pares"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
msgid "Up bandwidth limit" msgid "Up bandwidth limit"
msgstr "Límite de ancho de banda para la subida" msgstr "Límite del ancho de banda para la subida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1247 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1247
msgid "Half available bandwidth recommended." msgid "Half available bandwidth recommended."
@@ -696,7 +696,7 @@ msgstr "Preferencias de salida"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1286 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1286
msgid "I2CP host" msgid "I2CP host"
msgstr "Huésped I2CP" msgstr "Anfitrión I2CP"
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291 #: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
msgid "I2CP port" msgid "I2CP port"

View File

@@ -98,7 +98,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
_clientId = clientId; _clientId = clientId;
this.localPort = localPort; this.localPort = localPort;
this.l = l; this.l = l;
this.handlerName = handlerName + _clientId; this.handlerName = localPort + " #" + _clientId;
_ownDest = true; // == ! shared client _ownDest = true; // == ! shared client
_context = tunnel.getContext(); _context = tunnel.getContext();
_context.statManager().createRateStat("i2ptunnel.client.closeBacklog", "How many pending sockets remain when we close one due to backlog?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); _context.statManager().createRateStat("i2ptunnel.client.closeBacklog", "How many pending sockets remain when we close one due to backlog?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 });

View File

@@ -38,7 +38,7 @@ public class ConfigLoggingHelper extends HelperBase {
sortedLogs.add(prefix); sortedLogs.add(prefix);
} }
buf.append("<textarea name=\"levels\" rows=\"4\" cols=\"60\" wrap=\"off\">"); buf.append("<textarea name=\"levels\" rows=\"4\" cols=\"60\" wrap=\"off\" spellcheck=\"false\">");
for (Iterator iter = sortedLogs.iterator(); iter.hasNext(); ) { for (Iterator iter = sortedLogs.iterator(); iter.hasNext(); ) {
String prefix = (String)iter.next(); String prefix = (String)iter.next();
String level = limits.getProperty(prefix); String level = limits.getProperty(prefix);

View File

@@ -14,7 +14,7 @@ public class ConfigReseedHandler extends FormHandler {
@Override @Override
protected void processForm() { protected void processForm() {
if (_action.equals(_("Save Configuration and Reseed Now"))) { if (_action.equals(_("Save changes and reseed now"))) {
saveChanges(); saveChanges();
boolean reseedInProgress = Boolean.valueOf(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress")).booleanValue(); boolean reseedInProgress = Boolean.valueOf(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress")).booleanValue();
if (reseedInProgress) { if (reseedInProgress) {
@@ -26,7 +26,7 @@ public class ConfigReseedHandler extends FormHandler {
} }
return; return;
} }
if (_action.equals(_("Save Configuration"))) { if (_action.equals(_("Save changes"))) {
saveChanges(); saveChanges();
return; return;
} }

View File

@@ -31,7 +31,7 @@
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" > <input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" >
<input type="hidden" name="action" value="blah" > <input type="hidden" name="action" value="blah" >
<h3><%=intl._("Advanced I2P Configuration")%></h3> <h3><%=intl._("Advanced I2P Configuration")%></h3>
<textarea rows="32" cols="60" name="config" wrap="off"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr> <textarea rows="32" cols="60" name="config" wrap="off" spellcheck="false"><jsp:getProperty name="advancedhelper" property="settings" /></textarea><br><hr>
<div class="formaction"> <div class="formaction">
<input type="reset" value="<%=intl._("Cancel")%>" > <input type="reset" value="<%=intl._("Cancel")%>" >
<input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" > <input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" >

View File

@@ -38,7 +38,7 @@
<div class="wideload"> <div class="wideload">
<p><table><tr> <p><table><tr>
<td class="mediumtags" align="right"><%=intl._("Dest. name, hash, or full key")%>:</td> <td class="mediumtags" align="right"><%=intl._("Dest. name, hash, or full key")%>:</td>
<td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off"></textarea></td> <td><textarea name="peer" cols="44" rows="1" style="height: 3em;" wrap="off" spellcheck="false"></textarea></td>
</tr><tr> </tr><tr>
<td class="mediumtags" align="right"><%=intl._("Encryption Key")%>:</td> <td class="mediumtags" align="right"><%=intl._("Encryption Key")%>:</td>
<td><input type="text" size="55" name="key" ></td> <td><input type="text" size="55" name="key" ></td>

View File

@@ -44,7 +44,7 @@
<input type="radio" class="optbox" name="mode" value="2" <%=reseedHelper.modeChecked(2) %> > <input type="radio" class="optbox" name="mode" value="2" <%=reseedHelper.modeChecked(2) %> >
<%=intl._("Use non-SSL only")%></td></tr> <%=intl._("Use non-SSL only")%></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URLs")%></b></td> <tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URLs")%></b></td>
<td><textarea name="reseedURL" wrap="off"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea></td></tr> <td><textarea name="reseedURL" wrap="off" spellcheck="false"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("Enable HTTP proxy (not used for SSL)")%></b></td> <tr><td class="mediumtags" align="right"><b><%=intl._("Enable HTTP proxy (not used for SSL)")%></b></td>
<td><input type="checkbox" class="optbox" name="enable" value="true" <jsp:getProperty name="reseedHelper" property="enable" /> ></td></tr> <td><input type="checkbox" class="optbox" name="enable" value="true" <jsp:getProperty name="reseedHelper" property="enable" /> ></td></tr>
<tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Host")%>:</b></td> <tr><td class="mediumtags" align="right"><b><%=intl._("HTTP Proxy Host")%>:</b></td>
@@ -54,6 +54,6 @@
</table></div> </table></div>
<hr><div class="formaction"> <hr><div class="formaction">
<input type="submit" name="foo" value="<%=intl._("Cancel")%>" /> <input type="submit" name="foo" value="<%=intl._("Cancel")%>" />
<input type="submit" name="action" value="<%=intl._("Save Configuration and Reseed Now")%>" /> <input type="submit" name="action" value="<%=intl._("Save changes and reseed now")%>" />
<input type="submit" name="action" value="<%=intl._("Save Configuration")%>" /> <input type="submit" name="action" value="<%=intl._("Save changes")%>" />
</div></form></div></div></body></html> </div></form></div></div></body></html>

View File

@@ -50,9 +50,9 @@
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("eepProxy port")%>:</b></td>
<td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td> <td><input type="text" size="4" name="proxyPort" value="<jsp:getProperty name="updatehelper" property="proxyPort" />" /></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update URLs")%>:</b></td>
<td><textarea name="updateURL" wrap="off"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td> <td><textarea name="updateURL" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="updateURL" /></textarea></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Trusted keys")%>:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Trusted keys")%>:</b></td>
<td><textarea name="trustedKeys" wrap="off"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td> <td><textarea name="trustedKeys" wrap="off" spellcheck="false"><jsp:getProperty name="updatehelper" property="trustedKeys" /></textarea></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update with unsigned development builds?")%></b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Update with unsigned development builds?")%></b></td>
<td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td> <td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td>
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Unsigned Build URL")%>:</b></td> </tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Unsigned Build URL")%>:</b></td>

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P routerconsole\n" "Project-Id-Version: I2P routerconsole\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-28 00:08+0000\n" "POT-Creation-Date: 2010-12-28 00:08+0000\n"
"PO-Revision-Date: 2010-12-31 02:47+0100\n" "PO-Revision-Date: 2011-01-01 21:19+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n" "Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: echelon <echelon@mail.i2p>, Sperreingang <sperrbezirk@mail.i2p>\n" "Language-Team: echelon <echelon@mail.i2p>, Sperreingang <sperrbezirk@mail.i2p>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -2683,7 +2683,7 @@ msgstr "NTCP und SSU mit Hilfsrouter"
#: ../java/src/net/i2p/router/web/NewsFetcher.java:93 #: ../java/src/net/i2p/router/web/NewsFetcher.java:93
#, java-format #, java-format
msgid "News last updated {0} ago." msgid "News last updated {0} ago."
msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0}" msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0};"
#: ../java/src/net/i2p/router/web/NewsFetcher.java:99 #: ../java/src/net/i2p/router/web/NewsFetcher.java:99
#, java-format #, java-format

View File

@@ -9,7 +9,7 @@ msgstr ""
"Project-Id-Version: I2P routerconsole\n" "Project-Id-Version: I2P routerconsole\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-28 00:08+0000\n" "POT-Creation-Date: 2010-12-28 00:08+0000\n"
"PO-Revision-Date: 2010-12-31 03:12+0100\n" "PO-Revision-Date: 2011-01-03 01:13+0100\n"
"Last-Translator: mixxy <m1xxy@mail.i2p>\n" "Last-Translator: mixxy <m1xxy@mail.i2p>\n"
"Language-Team: foo <foo@bar>\n" "Language-Team: foo <foo@bar>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -119,13 +119,13 @@ msgstr "rechazando túneles: límite alcanzado"
#. always leave at least 4KBps free when allowing #. always leave at least 4KBps free when allowing
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:301 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:301
msgid "Rejecting tunnels: Bandwidth limit" msgid "Rejecting tunnels: Bandwidth limit"
msgstr "rechazando túneles: límite de ancho de banda" msgstr "rechazando túneles: límite del ancho de banda"
#. hard to do {0} from here #. 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:371 #: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:371
msgid "Rejecting most tunnels: Bandwidth limit" msgid "Rejecting most tunnels: Bandwidth limit"
msgstr "rechazando la mayor parte de los túneles: límite de ancho de banda" msgstr "rechazando la mayor parte de los túneles: límite del ancho de banda"
#. hard to do {0} from here #. hard to do {0} from here
#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels"); #. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels");
@@ -1727,7 +1727,7 @@ msgstr "Buscar actualizaciones"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:235 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:235
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:242 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:242
msgid "Update" msgid "Update"
msgstr "Actualizar" msgstr "Actualización"
#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:266 #: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:266
#, java-format #, java-format
@@ -2412,7 +2412,7 @@ msgstr "Nunca"
#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90
msgid "Every" msgid "Every"
msgstr "Cada" msgstr "cada"
#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:108 #: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:108
msgid "Notify only" msgid "Notify only"
@@ -3247,11 +3247,11 @@ msgstr ""
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:83 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:83
msgid "Webserver" msgid "Webserver"
msgstr "" msgstr "Servidor web"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:91 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:91
msgid "Configure I2P Router" msgid "Configure I2P Router"
msgstr "Configura Enrutador I2P" msgstr "Configura enrutador I2P"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93
msgid "I2P Internals" msgid "I2P Internals"
@@ -3435,7 +3435,7 @@ msgstr "Demora - túnel"
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:440 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:440
msgid "Backlog" msgid "Backlog"
msgstr "tareas" msgstr "Peticiones pendientes"
#: ../java/src/net/i2p/router/web/SummaryHelper.java:106 #: ../java/src/net/i2p/router/web/SummaryHelper.java:106
msgid "ERR-Client Manager I2CP Error - check logs" msgid "ERR-Client Manager I2CP Error - check logs"
@@ -3887,7 +3887,7 @@ msgstr "Ancho de Banda"
#: ../java/strings/Strings.java:58 #: ../java/strings/Strings.java:58
msgid "BandwidthLimiter" msgid "BandwidthLimiter"
msgstr "Limitador de Ancho de Banda" msgstr "Limitador del ancho de banda"
#: ../java/strings/Strings.java:59 #: ../java/strings/Strings.java:59
msgid "ClientMessages" msgid "ClientMessages"
@@ -4089,7 +4089,7 @@ msgstr ""
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:298 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:298
msgid "Bandwidth limiter" msgid "Bandwidth limiter"
msgstr "Limitador de ancho de banda" msgstr "Limitador del ancho de banda"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:300 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:300
msgid "I2P will work best if you configure your rates to match the speed of your internet connection." msgid "I2P will work best if you configure your rates to match the speed of your internet connection."
@@ -5073,7 +5073,7 @@ msgstr "Actualizando"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:317 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:317
msgid "News URL" msgid "News URL"
msgstr "URL de Noticias" msgstr "URL de noticias"
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:321 #: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:321
msgid "Refresh frequency" msgid "Refresh frequency"

View File

@@ -497,7 +497,7 @@ class MessageOutputStream extends OutputStream {
if (ws.writeFailed()) if (ws.writeFailed())
throw new IOException("Flush available failed"); throw new IOException("Flush available failed");
else if (!ws.writeAccepted()) else if (!ws.writeAccepted())
throw new InterruptedIOException("Flush available timed out"); throw new InterruptedIOException("Flush available timed out (" + _writeTimeout + "ms)");
} }
long afterAccept = System.currentTimeMillis(); long afterAccept = System.currentTimeMillis();
if ( (afterAccept - afterBuild > 1000) && (_log.shouldLog(Log.DEBUG)) ) if ( (afterAccept - afterBuild > 1000) && (_log.shouldLog(Log.DEBUG)) )

View File

@@ -763,9 +763,9 @@
<arg value="-sortByClass"/> <arg value="-sortByClass"/>
<arg value="-xml"/> <arg value="-xml"/>
<arg value="-output"/> <arg value="-output"/>
<arg value="findbugs.xml"/> <arg value="i2p.fba"/>
<arg value="-auxclasspath"/> <arg value="-auxclasspath"/>
<arg value="build/commons-el.jar:build/commons-logging.jar:build/jasper-compiler.jar:build/jasper-runtime.jar:build/javax.servlet.jar:build/org.mortbay.jetty.jar:apps/jrobin/jrobin-1.4.0.jar:apps/systray/java/lib/systray4j.jar:installer/lib/wrapper/linux/wrapper.jar"/> <arg value="build/commons-el.jar:build/commons-logging.jar:build/jasper-compiler.jar:build/jasper-runtime.jar:build/javax.servlet.jar:build/org.mortbay.jetty.jar:apps/jrobin/jrobin-1.4.0.jar:apps/systray/java/lib/systray4j.jar:installer/lib/wrapper/linux/wrapper.jar:apps/susidns/src/WEB-INF/lib/standard.jar:apps/susidns/src/WEB-INF/lib/jstl.jar:apps/jrobin/jrobin-1.4.0.jar"/>
<arg value="-sourcepath"/> <arg value="-sourcepath"/>
<arg value="apps/BOB/src/:apps/addressbook/java/src/:apps/i2psnark/java/src/:apps/i2ptunnel/java/src/:apps/ministreaming/java/src/:apps/routerconsole/java/src/:apps/sam/java/src/:apps/streaming/java/src/:apps/susidns/src/java/src/:apps/susimail/src/src/:apps/systray/java/src/:core/java/src/:router/java/src/"/> <arg value="apps/BOB/src/:apps/addressbook/java/src/:apps/i2psnark/java/src/:apps/i2ptunnel/java/src/:apps/ministreaming/java/src/:apps/routerconsole/java/src/:apps/sam/java/src/:apps/streaming/java/src/:apps/susidns/src/java/src/:apps/susimail/src/src/:apps/systray/java/src/:core/java/src/:router/java/src/"/>
<!-- start of the files to be analyzed --> <!-- start of the files to be analyzed -->
@@ -779,15 +779,16 @@
<arg value="build/jbigi.jar"/> <arg value="build/jbigi.jar"/>
<arg value="build/mstreaming.jar"/> <arg value="build/mstreaming.jar"/>
<arg value="build/router.jar/"/> <arg value="build/router.jar/"/>
<!-- use the class files rather than the jar for routerconsole so we don't analyze jrobin --> <arg value="build/routerconsole.jar"/>
<arg value="apps/routerconsole/java/build/obj/"/> <arg value="build/routerconsole.war"/>
<arg value="build/sam.jar"/> <arg value="build/sam.jar"/>
<arg value="build/streaming.jar"/> <arg value="build/streaming.jar"/>
<arg value="build/susidns.war"/> <arg value="build/susidns.war"/>
<arg value="build/susimail.war"/> <arg value="build/susimail.war"/>
<arg value="build/systray.jar"/> <arg value="build/systray.jar"/>
</exec> </exec>
<echo message="Findbugs output stored in findbugs.xml" /> <echo message="Findbugs output stored in i2p.fba" />
<echo message="Now run: findbugs i2p.fba" />
</target> </target>
<target name="buildWithDesktopgui" depends="buildrouter,builddepSmall"> <target name="buildWithDesktopgui" depends="buildrouter,builddepSmall">
<ant dir="apps/desktopgui" target="build_jar" /> <ant dir="apps/desktopgui" target="build_jar" />

View File

@@ -22,6 +22,6 @@ class BWLimitsMessageHandler extends HandlerImpl {
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("Handle message " + message); _log.debug("Handle message " + message);
BandwidthLimitsMessage msg = (BandwidthLimitsMessage) message; BandwidthLimitsMessage msg = (BandwidthLimitsMessage) message;
((I2PSimpleSession)session).bwReceived(msg.getLimits()); session.bwReceived(msg.getLimits());
} }
} }

View File

@@ -182,14 +182,6 @@ JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR
* @return true if successful * @return true if successful
*/ */
public boolean addKey(String key, String name) { public boolean addKey(String key, String name) {
String oldName = _trustedKeys.get(key);
// already there?
if (name.equals(oldName))
return true;
if (oldName != null && !oldName.equals("")) {
_log.error("Key for " + name + " already stored for different name " + oldName + " : " + key);
return false;
}
SigningPublicKey signingPublicKey = new SigningPublicKey(); SigningPublicKey signingPublicKey = new SigningPublicKey();
try { try {
// fromBase64() will throw a DFE if length is not right // fromBase64() will throw a DFE if length is not right
@@ -198,6 +190,14 @@ JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR
_log.error("Invalid signing key for " + name + " : " + key, dfe); _log.error("Invalid signing key for " + name + " : " + key, dfe);
return false; return false;
} }
String oldName = _trustedKeys.get(signingPublicKey);
// already there?
if (name.equals(oldName))
return true;
if (oldName != null && !oldName.equals("")) {
_log.error("Key for " + name + " already stored for different name " + oldName + " : " + key);
return false;
}
if ((!name.equals("")) && _trustedKeys.containsValue(name)) { if ((!name.equals("")) && _trustedKeys.containsValue(name)) {
_log.error("Key mismatch for " + name + ", spoof attempt? : " + key); _log.error("Key mismatch for " + name + ", spoof attempt? : " + key);
return false; return false;

View File

@@ -10,6 +10,7 @@ package net.i2p.data;
*/ */
import net.i2p.util.RandomSource; import net.i2p.util.RandomSource;
import net.i2p.util.SimpleByteCache;
/** /**
* 32 bytes, usually of random data. * 32 bytes, usually of random data.
@@ -28,7 +29,7 @@ public class SessionTag extends SimpleDataStructure {
public SessionTag(boolean create) { public SessionTag(boolean create) {
super(); super();
if (create) { if (create) {
_data = new byte[BYTE_LENGTH]; _data = SimpleByteCache.acquire(BYTE_LENGTH);
RandomSource.getInstance().nextBytes(_data); RandomSource.getInstance().nextBytes(_data);
} }
} }

View File

@@ -1,3 +1,15 @@
2011-01-05 zzz
* build.xml: Fix findbugs target
* Fix some miscellaneous findbugs bugs
* i2psnark: Refactor request tracking to prevent possible deadlocks
* OCMOSJ: Fix cache bug
* TrustedUpdate: Fix key store bug
2011-01-02 zzz
* Console: Disable spellcheck in textareas
* Data Structures: More tweaks
* I2CP: Fix BWLimits Message reply in standard session
2010-12-31 zzz 2010-12-31 zzz
* Console: * Console:
- Make themes and history.txt return 403 on error, - Make themes and history.txt return 403 on error,

View File

@@ -29,7 +29,7 @@
<code>~/.i2p/eepsite/docroot/</code> (Linux) oder <code>%APPDATA%\I2P\eepsite\docroot\</code> (Windows) <code>~/.i2p/eepsite/docroot/</code> (Linux) oder <code>%APPDATA%\I2P\eepsite\docroot\</code> (Windows)
und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie und nachdem Sie den Anweisungen weiter unten gefolgt sind, werden Sie
vertreten durch Ihre Eepseite von anderen im I2P-Netz und, soweit vertreten durch Ihre Eepseite von anderen im I2P-Netz und, soweit
verfügbar, über private „Out-Proxys“ weltweit auch im offenen Internet erreichbar sein.</p> verfügbar, über private „In-Proxys“ weltweit auch im offenen Internet erreichbar sein.</p>
<p>In I2P werden Eepseiten unter Verwendung eines Schlüssels (key) adressiert. Dieser wird durch eine sehr lange Base64-Zeichenkette<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup> dargestellt. <p>In I2P werden Eepseiten unter Verwendung eines Schlüssels (key) adressiert. Dieser wird durch eine sehr lange Base64-Zeichenkette<sup><a class="footref" name="fnr.1" href="#fn.1">1</a></sup> dargestellt.
(Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration der Eepseite unter <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> anzeigen lassen.)</p> (Dieser Schlüssel ist analog zur Standard IP-Adresse zu verstehen; man kann ihn sich in der Konfiguration der Eepseite unter <a href="http://127.0.0.1:7657/i2ptunnel/index.jsp">I2PTunnel</a> anzeigen lassen.)</p>

View File

@@ -5,11 +5,11 @@
&iexcl;Ten todav&iacute;a <b>paciencia</b> mientras I2P est&eacute; arrancando y encontrando otros enrutadores I2P! &iexcl;Ten todav&iacute;a <b>paciencia</b> mientras I2P est&eacute; arrancando y encontrando otros enrutadores I2P!
</p> </p>
<p> <p>
Este es el momento ideal para adaptar tu <b>configuraci&oacute;n de ancho de banda</b> en la Este es el momento ideal para adaptar tu <b>configuraci&oacute;n del ancho de banda</b> en la
<a href="config.jsp">p&aacute;gina de configuraci&oacute;n</a>. <a href="config.jsp">p&aacute;gina de configuraci&oacute;n</a>.
</p> </p>
<p> <p>
En cuanto veas a la izquierda una conexi&oacute;n llamada "shared clients", puedes visitar nuestros <a href="http://www.i2p2.i2p/faq.html">FAQ</a>. En cuanto veas a la izquierda una conexi&oacute;n llamada "clientes diferentes", puedes visitar nuestros <a href="http://www.i2p2.i2p/faq.html">FAQ</a>.
</p> </p>
<p> <p>
&iexcl;Con&eacute;cta tu cliente IRC con el servidor <b>localhost:6668</b> y ven a saludarnos en los canales &iexcl;Con&eacute;cta tu cliente IRC con el servidor <b>localhost:6668</b> y ven a saludarnos en los canales

View File

@@ -12,7 +12,7 @@
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div> <a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
</div></div> </div></div>
<div class="welcome"><h2>&iexcl;Bienvenido a I2P!</h2></div> <div class="welcome"><h2>&iexcl;Bienvenido a I2P!</h2></div>
<p>Si acabas de iniciar I2P, al observar el menú de la izquierda, deberías notar que los n&uacute;meros al lado de "Active:" subirán en los próximos minutos y luego verás allí un Destino llamado "shared clients" (si no, <a href="#trouble">&iexcl;mira abajo!</a>) <br>Apenas aparezca esto, puedes:</p> <p>Si acabas de iniciar I2P, al observar el menú de la izquierda, deberías notar que los n&uacute;meros al lado de "Activos:" subirán en los próximos minutos y luego verás allí un Destino llamado "clientes diferentes" (si no, <a href="#trouble">&iexcl;mira abajo!</a>) <br>Apenas aparezca esto, puedes:</p>
<ul> <ul>
<li><b>visitar p&aacute;ginas I2P ("Eepsites")</b> - En I2P hay p&aacute;ginas web an&oacute;nimas: <li><b>visitar p&aacute;ginas I2P ("Eepsites")</b> - En I2P hay p&aacute;ginas web an&oacute;nimas:
Configura tu navegador web para usar el <b>proxy HTTP: 127.0.0.1 puerto 4444</b>, luego visita una p&aacute;gina I2P:<br> Configura tu navegador web para usar el <b>proxy HTTP: 127.0.0.1 puerto 4444</b>, luego visita una p&aacute;gina I2P:<br>

View File

@@ -161,8 +161,8 @@ class JobQueueRunner implements Runnable {
if (_log.shouldLog(Log.CRIT)) if (_log.shouldLog(Log.CRIT))
_log.log(Log.CRIT, "Error processing job [" + _currentJob.getName() _log.log(Log.CRIT, "Error processing job [" + _currentJob.getName()
+ "] on thread " + _id + ": " + t.getMessage(), t); + "] on thread " + _id + ": " + t.getMessage(), t);
if (_log.shouldLog(Log.ERROR)) //if (_log.shouldLog(Log.ERROR))
_log.error("The above job was enqueued by: ", _currentJob.getAddedBy()); // _log.error("The above job was enqueued by: ", _currentJob.getAddedBy());
} }
} }
} }

View File

@@ -18,7 +18,7 @@ public class RouterVersion {
/** deprecated */ /** deprecated */
public final static String ID = "Monotone"; public final static String ID = "Monotone";
public final static String VERSION = CoreVersion.VERSION; public final static String VERSION = CoreVersion.VERSION;
public final static long BUILD = 6; public final static long BUILD = 8;
/** for example "-test" */ /** for example "-test" */
public final static String EXTRA = ""; public final static String EXTRA = "";

View File

@@ -348,7 +348,7 @@ public class OutboundClientMessageOneShotJob extends JobImpl {
} }
if (_log.shouldLog(Log.INFO)) if (_log.shouldLog(Log.INFO))
_log.info(getJobId() + ": Expired from cache - lease for " + _toString); _log.info(getJobId() + ": Expired from cache - lease for " + _toString);
_leaseCache.remove(_to); _leaseCache.remove(hashPair());
} }
} }

View File

@@ -37,7 +37,6 @@ import net.i2p.util.Log;
* *
*/ */
class FloodOnlySearchJob extends FloodSearchJob { class FloodOnlySearchJob extends FloodSearchJob {
protected volatile int _lookupsRemaining;
private volatile boolean _dead; private volatile boolean _dead;
private long _created; private long _created;
private boolean _shouldProcessDSRM; private boolean _shouldProcessDSRM;

View File

@@ -135,7 +135,6 @@ public class PumpedTunnelGateway extends TunnelGateway {
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("Time to add " + queueBuf.size() + " messages to " + toString() + ": " + (complete-startAdd) _log.debug("Time to add " + queueBuf.size() + " messages to " + toString() + ": " + (complete-startAdd)
+ " delayed? " + delayedFlush + " remaining: " + remaining + " delayed? " + delayedFlush + " remaining: " + remaining
+ " prepare: " + (beforeLock-startAdd)
+ " add: " + (afterAdded-beforeLock) + " add: " + (afterAdded-beforeLock)
+ " preprocess: " + (afterPreprocess-afterAdded) + " preprocess: " + (afterPreprocess-afterAdded)
+ " expire: " + (afterExpire-afterPreprocess) + " expire: " + (afterExpire-afterPreprocess)

View File

@@ -127,8 +127,8 @@ class BuildRequestor {
TunnelBuildMessage msg = createTunnelBuildMessage(ctx, pool, cfg, pairedTunnel, exec); TunnelBuildMessage msg = createTunnelBuildMessage(ctx, pool, cfg, pairedTunnel, exec);
long createTime = System.currentTimeMillis()-beforeCreate; long createTime = System.currentTimeMillis()-beforeCreate;
if (msg == null) { if (msg == null) {
if (log.shouldLog(Log.ERROR)) if (log.shouldLog(Log.WARN))
log.error("Tunnel build failed, as we couldn't create the tunnel build message for " + cfg); log.warn("Tunnel build failed, as we couldn't create the tunnel build message for " + cfg);
exec.buildComplete(cfg, pool); exec.buildComplete(cfg, pool);
return; return;
} }
@@ -202,6 +202,7 @@ class BuildRequestor {
* If the tunnel is short enough, and everybody in the tunnel, and the * If the tunnel is short enough, and everybody in the tunnel, and the
* OBEP or IBGW for the paired tunnel, all support the new variable-sized tunnel build message, * OBEP or IBGW for the paired tunnel, all support the new variable-sized tunnel build message,
* then use that, otherwise the old 8-entry version. * then use that, otherwise the old 8-entry version.
* @return null on error
*/ */
private static TunnelBuildMessage createTunnelBuildMessage(RouterContext ctx, TunnelPool pool, PooledTunnelCreatorConfig cfg, TunnelInfo pairedTunnel, BuildExecutor exec) { private static TunnelBuildMessage createTunnelBuildMessage(RouterContext ctx, TunnelPool pool, PooledTunnelCreatorConfig cfg, TunnelInfo pairedTunnel, BuildExecutor exec) {
Log log = ctx.logManager().getLog(BuildRequestor.class); Log log = ctx.logManager().getLog(BuildRequestor.class);
@@ -275,8 +276,8 @@ class BuildRequestor {
Hash peer = cfg.getPeer(hop); Hash peer = cfg.getPeer(hop);
RouterInfo peerInfo = ctx.netDb().lookupRouterInfoLocally(peer); RouterInfo peerInfo = ctx.netDb().lookupRouterInfoLocally(peer);
if (peerInfo == null) { if (peerInfo == null) {
if (log.shouldLog(Log.ERROR)) if (log.shouldLog(Log.WARN))
log.error("Peer selected for hop " + i + "/" + hop + " was not found locally: " log.warn("Peer selected for hop " + i + "/" + hop + " was not found locally: "
+ peer.toBase64() + " for " + cfg); + peer.toBase64() + " for " + cfg);
return null; return null;
} else { } else {