forked from I2P_Developers/i2p.i2p
propagate from branch 'i2p.i2p' (head 915df7d6afddd7473a7db7fd1f499d350611db62)
to branch 'i2p.i2p.zzz.dhtsnark' (head 4c10a9396745b20a517c9822cf1454aca752ea94)
This commit is contained in:
@@ -518,6 +518,7 @@ public class Peer implements Comparable
|
||||
|
||||
/**
|
||||
* Are we currently requesting the piece?
|
||||
* @deprecated deadlocks
|
||||
* @since 0.8.1
|
||||
*/
|
||||
boolean isRequesting(int p) {
|
||||
|
@@ -651,10 +651,7 @@ public class PeerCoordinator implements PeerListener
|
||||
}
|
||||
if (piece == null)
|
||||
wantedSize = wantedPieces.size();
|
||||
} // synch
|
||||
|
||||
// Don't sync the following, deadlock from calling each Peer's isRequesting()
|
||||
|
||||
//Only request a piece we've requested before if there's no other choice.
|
||||
if (piece == null) {
|
||||
// AND if there are almost no wanted pieces left (real end game).
|
||||
@@ -672,22 +669,12 @@ public class PeerCoordinator implements PeerListener
|
||||
Piece p = it2.next();
|
||||
if (havePieces.get(p.getId())) {
|
||||
// limit number of parallel requests
|
||||
int requestedCount = 0;
|
||||
for (Peer pr : peers) {
|
||||
// deadlock if synced on wantedPieces
|
||||
if (pr.isRequesting(p.getId())) {
|
||||
if (pr.equals(peer)) {
|
||||
// don't give it to him again
|
||||
requestedCount = MAX_PARALLEL_REQUESTS;
|
||||
break;
|
||||
}
|
||||
if (++requestedCount >= MAX_PARALLEL_REQUESTS)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (requestedCount >= MAX_PARALLEL_REQUESTS)
|
||||
continue;
|
||||
piece = p;
|
||||
int requestedCount = p.getRequestCount();
|
||||
if (requestedCount < MAX_PARALLEL_REQUESTS &&
|
||||
!p.isRequestedBy(peer)) {
|
||||
piece = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (piece == null) {
|
||||
@@ -708,9 +695,10 @@ public class PeerCoordinator implements PeerListener
|
||||
if (record) {
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info(peer + " is now requesting: piece " + piece + " priority " + piece.getPriority());
|
||||
piece.setRequested(true);
|
||||
piece.setRequested(peer, true);
|
||||
}
|
||||
return piece.getId();
|
||||
} // synch
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1014,7 +1002,7 @@ public class PeerCoordinator implements PeerListener
|
||||
}
|
||||
} // else drop the empty partial piece
|
||||
// synchs on wantedPieces...
|
||||
markUnrequestedIfOnlyOne(peer, pp.getPiece());
|
||||
markUnrequested(peer, pp.getPiece());
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info("Partial list size now: " + partialPieces.size());
|
||||
@@ -1042,7 +1030,7 @@ public class PeerCoordinator implements PeerListener
|
||||
// this is just a double-check, it should be in there
|
||||
for(Piece piece : wantedPieces) {
|
||||
if (piece.getId() == savedPiece) {
|
||||
piece.setRequested(true);
|
||||
piece.setRequested(peer, true);
|
||||
if (_log.shouldLog(Log.INFO)) {
|
||||
_log.info("Restoring orphaned partial piece " + pp +
|
||||
" Partial list size now: " + partialPieces.size());
|
||||
@@ -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)
|
||||
{
|
||||
for (Piece pc : wantedPieces) {
|
||||
if (pc.getId() == piece) {
|
||||
pc.setRequested(false);
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Removing from request list piece " + piece);
|
||||
pc.setRequested(peer, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@@ -468,7 +468,7 @@ class PeerState implements DataLoader
|
||||
/**
|
||||
* @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);
|
||||
for (Request req : outstandingRequests) {
|
||||
rv.add(Integer.valueOf(req.piece));
|
||||
@@ -582,6 +582,7 @@ class PeerState implements DataLoader
|
||||
|
||||
/**
|
||||
* Are we currently requesting the piece?
|
||||
* @deprecated deadlocks
|
||||
* @since 0.8.1
|
||||
*/
|
||||
synchronized boolean isRequesting(int piece) {
|
||||
|
@@ -12,13 +12,15 @@ class Piece implements Comparable {
|
||||
|
||||
private int id;
|
||||
private Set<PeerID> peers;
|
||||
private boolean requested;
|
||||
/** @since 0.8.3 */
|
||||
private Set<PeerID> requests;
|
||||
/** @since 0.8.1 */
|
||||
private int priority;
|
||||
|
||||
public Piece(int id) {
|
||||
this.id = id;
|
||||
this.peers = new ConcurrentHashSet();
|
||||
this.peers = new ConcurrentHashSet(I2PSnarkUtil.MAX_CONNECTIONS);
|
||||
this.requests = new ConcurrentHashSet(2);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -49,12 +51,36 @@ class Piece implements Comparable {
|
||||
}
|
||||
|
||||
public int getId() { return this.id; }
|
||||
/** @deprecated unused */
|
||||
public Set<PeerID> getPeers() { return this.peers; }
|
||||
public boolean addPeer(Peer peer) { return this.peers.add(peer.getPeerID()); }
|
||||
public boolean removePeer(Peer peer) { return this.peers.remove(peer.getPeerID()); }
|
||||
public boolean isRequested() { return this.requested; }
|
||||
public void setRequested(boolean requested) { this.requested = requested; }
|
||||
public boolean isRequested() { return !this.requests.isEmpty(); }
|
||||
|
||||
/**
|
||||
* Since 0.8.3, keep track of who is requesting here,
|
||||
* to avoid deadlocks from querying each peer.
|
||||
*/
|
||||
public void setRequested(Peer peer, boolean requested) {
|
||||
if (requested)
|
||||
this.requests.add(peer.getPeerID());
|
||||
else
|
||||
this.requests.remove(peer.getPeerID());
|
||||
}
|
||||
|
||||
/**
|
||||
* Is peer requesting this piece?
|
||||
* @since 0.8.3
|
||||
*/
|
||||
public boolean isRequestedBy(Peer peer) {
|
||||
return this.requests.contains(peer.getPeerID());
|
||||
}
|
||||
|
||||
/**
|
||||
* How many peers are requesting this piece?
|
||||
* @since 0.8.3
|
||||
*/
|
||||
public int getRequestCount() {
|
||||
return this.requests.size();
|
||||
}
|
||||
|
||||
/** @return default 0 @since 0.8.1 */
|
||||
public int getPriority() { return this.priority; }
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P i2psnark\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-12-19 03:16+0000\n"
|
||||
"PO-Revision-Date: 2010-12-31 01:09+0100\n"
|
||||
"PO-Revision-Date: 2011-01-03 00:58+0100\n"
|
||||
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -323,7 +323,7 @@ msgstr "Arrancar todos"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:372
|
||||
msgid "No torrents loaded."
|
||||
msgstr "No cargado ningún torrent"
|
||||
msgstr "No está cargado ningún torrent"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:377
|
||||
msgid "Totals"
|
||||
@@ -644,7 +644,7 @@ msgstr "Si marcado, los torrents añadidos se iniciarán de forma automática."
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1198
|
||||
msgid "Theme"
|
||||
msgstr "tema"
|
||||
msgstr "Tema"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1211
|
||||
msgid "Startup delay"
|
||||
@@ -664,7 +664,7 @@ msgstr "pares"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1244
|
||||
msgid "Up bandwidth limit"
|
||||
msgstr "Límite de ancho de banda para la subida"
|
||||
msgstr "Límite del ancho de banda para la subida"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1247
|
||||
msgid "Half available bandwidth recommended."
|
||||
@@ -696,7 +696,7 @@ msgstr "Preferencias de salida"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1286
|
||||
msgid "I2CP host"
|
||||
msgstr "Huésped I2CP"
|
||||
msgstr "Anfitrión I2CP"
|
||||
|
||||
#: ../java/src/org/klomp/snark/web/I2PSnarkServlet.java:1291
|
||||
msgid "I2CP port"
|
||||
|
@@ -98,7 +98,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna
|
||||
_clientId = clientId;
|
||||
this.localPort = localPort;
|
||||
this.l = l;
|
||||
this.handlerName = handlerName + _clientId;
|
||||
this.handlerName = localPort + " #" + _clientId;
|
||||
_ownDest = true; // == ! shared client
|
||||
_context = tunnel.getContext();
|
||||
_context.statManager().createRateStat("i2ptunnel.client.closeBacklog", "How many pending sockets remain when we close one due to backlog?", "I2PTunnel", new long[] { 60*1000, 10*60*1000, 60*60*1000 });
|
||||
|
@@ -38,7 +38,7 @@ public class ConfigLoggingHelper extends HelperBase {
|
||||
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(); ) {
|
||||
String prefix = (String)iter.next();
|
||||
String level = limits.getProperty(prefix);
|
||||
|
@@ -14,7 +14,7 @@ public class ConfigReseedHandler extends FormHandler {
|
||||
@Override
|
||||
protected void processForm() {
|
||||
|
||||
if (_action.equals(_("Save Configuration and Reseed Now"))) {
|
||||
if (_action.equals(_("Save changes and reseed now"))) {
|
||||
saveChanges();
|
||||
boolean reseedInProgress = Boolean.valueOf(System.getProperty("net.i2p.router.web.ReseedHandler.reseedInProgress")).booleanValue();
|
||||
if (reseedInProgress) {
|
||||
@@ -26,7 +26,7 @@ public class ConfigReseedHandler extends FormHandler {
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (_action.equals(_("Save Configuration"))) {
|
||||
if (_action.equals(_("Save changes"))) {
|
||||
saveChanges();
|
||||
return;
|
||||
}
|
||||
|
@@ -31,7 +31,7 @@
|
||||
<input type="hidden" name="nonce" value="<%=System.getProperty("net.i2p.router.web.ConfigAdvancedHandler.nonce")%>" >
|
||||
<input type="hidden" name="action" value="blah" >
|
||||
<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">
|
||||
<input type="reset" value="<%=intl._("Cancel")%>" >
|
||||
<input type="submit" name="shouldsave" value="<%=intl._("Save changes")%>" >
|
||||
|
@@ -38,7 +38,7 @@
|
||||
<div class="wideload">
|
||||
<p><table><tr>
|
||||
<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>
|
||||
<td class="mediumtags" align="right"><%=intl._("Encryption Key")%>:</td>
|
||||
<td><input type="text" size="55" name="key" ></td>
|
||||
|
@@ -44,7 +44,7 @@
|
||||
<input type="radio" class="optbox" name="mode" value="2" <%=reseedHelper.modeChecked(2) %> >
|
||||
<%=intl._("Use non-SSL only")%></td></tr>
|
||||
<tr><td class="mediumtags" align="right"><b><%=intl._("Reseed URLs")%></b></td>
|
||||
<td><textarea name="reseedURL" wrap="off"><jsp:getProperty name="reseedHelper" property="reseedURL" /></textarea></td></tr>
|
||||
<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>
|
||||
<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>
|
||||
@@ -54,6 +54,6 @@
|
||||
</table></div>
|
||||
<hr><div class="formaction">
|
||||
<input type="submit" name="foo" value="<%=intl._("Cancel")%>" />
|
||||
<input type="submit" name="action" value="<%=intl._("Save Configuration and Reseed Now")%>" />
|
||||
<input type="submit" name="action" value="<%=intl._("Save Configuration")%>" />
|
||||
<input type="submit" name="action" value="<%=intl._("Save changes and reseed now")%>" />
|
||||
<input type="submit" name="action" value="<%=intl._("Save changes")%>" />
|
||||
</div></form></div></div></body></html>
|
||||
|
@@ -50,9 +50,9 @@
|
||||
</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>
|
||||
</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>
|
||||
<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>
|
||||
<td><jsp:getProperty name="updatehelper" property="updateUnsigned" /></td>
|
||||
</tr><tr><td class= "mediumtags" align="right"><b><%=intl._("Unsigned Build URL")%>:</b></td>
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P routerconsole\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-12-28 00:08+0000\n"
|
||||
"PO-Revision-Date: 2010-12-31 02:47+0100\n"
|
||||
"PO-Revision-Date: 2011-01-01 21:19+0100\n"
|
||||
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
|
||||
"Language-Team: echelon <echelon@mail.i2p>, Sperreingang <sperrbezirk@mail.i2p>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -2683,7 +2683,7 @@ msgstr "NTCP und SSU mit Hilfsrouter"
|
||||
#: ../java/src/net/i2p/router/web/NewsFetcher.java:93
|
||||
#, java-format
|
||||
msgid "News last updated {0} ago."
|
||||
msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0}"
|
||||
msgstr "Zeit seit letzter Aktualisierung der Nachrichten: {0};"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/NewsFetcher.java:99
|
||||
#, java-format
|
||||
|
@@ -9,7 +9,7 @@ msgstr ""
|
||||
"Project-Id-Version: I2P routerconsole\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-12-28 00:08+0000\n"
|
||||
"PO-Revision-Date: 2010-12-31 03:12+0100\n"
|
||||
"PO-Revision-Date: 2011-01-03 01:13+0100\n"
|
||||
"Last-Translator: mixxy <m1xxy@mail.i2p>\n"
|
||||
"Language-Team: foo <foo@bar>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -119,13 +119,13 @@ msgstr "rechazando túneles: límite alcanzado"
|
||||
#. always leave at least 4KBps free when allowing
|
||||
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:301
|
||||
msgid "Rejecting tunnels: Bandwidth limit"
|
||||
msgstr "rechazando túneles: límite de ancho de banda"
|
||||
msgstr "rechazando túneles: límite del ancho de banda"
|
||||
|
||||
#. hard to do {0} from here
|
||||
#. setTunnelStatus("Rejecting " + ((int)(100.0*probReject)) + "% of tunnels: Bandwidth limit");
|
||||
#: ../../../router/java/src/net/i2p/router/RouterThrottleImpl.java:371
|
||||
msgid "Rejecting most tunnels: Bandwidth limit"
|
||||
msgstr "rechazando la mayor parte de los túneles: límite de ancho de banda"
|
||||
msgstr "rechazando la mayor parte de los túneles: límite del ancho de banda"
|
||||
|
||||
#. hard to do {0} from here
|
||||
#. setTunnelStatus("Accepting " + (100-(int)(100.0*probReject)) + "% of tunnels");
|
||||
@@ -1727,7 +1727,7 @@ msgstr "Buscar actualizaciones"
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:235
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:242
|
||||
msgid "Update"
|
||||
msgstr "Actualizar"
|
||||
msgstr "Actualización"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/ConfigClientsHelper.java:266
|
||||
#, java-format
|
||||
@@ -2412,7 +2412,7 @@ msgstr "Nunca"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:90
|
||||
msgid "Every"
|
||||
msgstr "Cada"
|
||||
msgstr "cada"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/ConfigUpdateHelper.java:108
|
||||
msgid "Notify only"
|
||||
@@ -3247,11 +3247,11 @@ msgstr ""
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:83
|
||||
msgid "Webserver"
|
||||
msgstr ""
|
||||
msgstr "Servidor web"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:91
|
||||
msgid "Configure I2P Router"
|
||||
msgstr "Configura Enrutador I2P"
|
||||
msgstr "Configura enrutador I2P"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93
|
||||
msgid "I2P Internals"
|
||||
@@ -3435,7 +3435,7 @@ msgstr "Demora - túnel"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:440
|
||||
msgid "Backlog"
|
||||
msgstr "tareas"
|
||||
msgstr "Peticiones pendientes"
|
||||
|
||||
#: ../java/src/net/i2p/router/web/SummaryHelper.java:106
|
||||
msgid "ERR-Client Manager I2CP Error - check logs"
|
||||
@@ -3887,7 +3887,7 @@ msgstr "Ancho de Banda"
|
||||
|
||||
#: ../java/strings/Strings.java:58
|
||||
msgid "BandwidthLimiter"
|
||||
msgstr "Limitador de Ancho de Banda"
|
||||
msgstr "Limitador del ancho de banda"
|
||||
|
||||
#: ../java/strings/Strings.java:59
|
||||
msgid "ClientMessages"
|
||||
@@ -4089,7 +4089,7 @@ msgstr ""
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:298
|
||||
msgid "Bandwidth limiter"
|
||||
msgstr "Limitador de ancho de banda"
|
||||
msgstr "Limitador del ancho de banda"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/config_jsp.java:300
|
||||
msgid "I2P will work best if you configure your rates to match the speed of your internet connection."
|
||||
@@ -5073,7 +5073,7 @@ msgstr "Actualizando"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:317
|
||||
msgid "News URL"
|
||||
msgstr "URL de Noticias"
|
||||
msgstr "URL de noticias"
|
||||
|
||||
#: ../jsp/WEB-INF/classes/net/i2p/router/web/jsp/configupdate_jsp.java:321
|
||||
msgid "Refresh frequency"
|
||||
|
@@ -497,7 +497,7 @@ class MessageOutputStream extends OutputStream {
|
||||
if (ws.writeFailed())
|
||||
throw new IOException("Flush available failed");
|
||||
else if (!ws.writeAccepted())
|
||||
throw new InterruptedIOException("Flush available timed out");
|
||||
throw new InterruptedIOException("Flush available timed out (" + _writeTimeout + "ms)");
|
||||
}
|
||||
long afterAccept = System.currentTimeMillis();
|
||||
if ( (afterAccept - afterBuild > 1000) && (_log.shouldLog(Log.DEBUG)) )
|
||||
|
11
build.xml
11
build.xml
@@ -763,9 +763,9 @@
|
||||
<arg value="-sortByClass"/>
|
||||
<arg value="-xml"/>
|
||||
<arg value="-output"/>
|
||||
<arg value="findbugs.xml"/>
|
||||
<arg value="i2p.fba"/>
|
||||
<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="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 -->
|
||||
@@ -779,15 +779,16 @@
|
||||
<arg value="build/jbigi.jar"/>
|
||||
<arg value="build/mstreaming.jar"/>
|
||||
<arg value="build/router.jar/"/>
|
||||
<!-- use the class files rather than the jar for routerconsole so we don't analyze jrobin -->
|
||||
<arg value="apps/routerconsole/java/build/obj/"/>
|
||||
<arg value="build/routerconsole.jar"/>
|
||||
<arg value="build/routerconsole.war"/>
|
||||
<arg value="build/sam.jar"/>
|
||||
<arg value="build/streaming.jar"/>
|
||||
<arg value="build/susidns.war"/>
|
||||
<arg value="build/susimail.war"/>
|
||||
<arg value="build/systray.jar"/>
|
||||
</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 name="buildWithDesktopgui" depends="buildrouter,builddepSmall">
|
||||
<ant dir="apps/desktopgui" target="build_jar" />
|
||||
|
@@ -22,6 +22,6 @@ class BWLimitsMessageHandler extends HandlerImpl {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Handle message " + message);
|
||||
BandwidthLimitsMessage msg = (BandwidthLimitsMessage) message;
|
||||
((I2PSimpleSession)session).bwReceived(msg.getLimits());
|
||||
session.bwReceived(msg.getLimits());
|
||||
}
|
||||
}
|
||||
|
@@ -182,14 +182,6 @@ JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR
|
||||
* @return true if successful
|
||||
*/
|
||||
public boolean addKey(String key, String name) {
|
||||
String oldName = _trustedKeys.get(key);
|
||||
// already there?
|
||||
if (name.equals(oldName))
|
||||
return true;
|
||||
if (oldName != null && !oldName.equals("")) {
|
||||
_log.error("Key for " + name + " already stored for different name " + oldName + " : " + key);
|
||||
return false;
|
||||
}
|
||||
SigningPublicKey signingPublicKey = new SigningPublicKey();
|
||||
try {
|
||||
// fromBase64() will throw a DFE if length is not right
|
||||
@@ -198,6 +190,14 @@ JXQAnA28vDmMMMH/WPbC5ixmJeGGNUiR
|
||||
_log.error("Invalid signing key for " + name + " : " + key, dfe);
|
||||
return false;
|
||||
}
|
||||
String oldName = _trustedKeys.get(signingPublicKey);
|
||||
// already there?
|
||||
if (name.equals(oldName))
|
||||
return true;
|
||||
if (oldName != null && !oldName.equals("")) {
|
||||
_log.error("Key for " + name + " already stored for different name " + oldName + " : " + key);
|
||||
return false;
|
||||
}
|
||||
if ((!name.equals("")) && _trustedKeys.containsValue(name)) {
|
||||
_log.error("Key mismatch for " + name + ", spoof attempt? : " + key);
|
||||
return false;
|
||||
|
@@ -10,6 +10,7 @@ package net.i2p.data;
|
||||
*/
|
||||
|
||||
import net.i2p.util.RandomSource;
|
||||
import net.i2p.util.SimpleByteCache;
|
||||
|
||||
/**
|
||||
* 32 bytes, usually of random data.
|
||||
@@ -28,7 +29,7 @@ public class SessionTag extends SimpleDataStructure {
|
||||
public SessionTag(boolean create) {
|
||||
super();
|
||||
if (create) {
|
||||
_data = new byte[BYTE_LENGTH];
|
||||
_data = SimpleByteCache.acquire(BYTE_LENGTH);
|
||||
RandomSource.getInstance().nextBytes(_data);
|
||||
}
|
||||
}
|
||||
|
12
history.txt
12
history.txt
@@ -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
|
||||
* Console:
|
||||
- Make themes and history.txt return 403 on error,
|
||||
|
@@ -29,7 +29,7 @@
|
||||
<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 –
|
||||
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.
|
||||
(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>
|
||||
|
@@ -5,11 +5,11 @@
|
||||
¡Ten todavía <b>paciencia</b> mientras I2P esté arrancando y encontrando otros enrutadores I2P!
|
||||
</p>
|
||||
<p>
|
||||
Este es el momento ideal para adaptar tu <b>configuración de ancho de banda</b> en la
|
||||
Este es el momento ideal para adaptar tu <b>configuración del ancho de banda</b> en la
|
||||
<a href="config.jsp">página de configuración</a>.
|
||||
</p>
|
||||
<p>
|
||||
En cuanto veas a la izquierda una conexió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ón llamada "clientes diferentes", puedes visitar nuestros <a href="http://www.i2p2.i2p/faq.html">FAQ</a>.
|
||||
</p>
|
||||
<p>
|
||||
¡Conécta tu cliente IRC con el servidor <b>localhost:6668</b> y ven a saludarnos en los canales
|
||||
|
@@ -12,7 +12,7 @@
|
||||
<a href="/index.jsp?lang=sv"><img src="/flags.jsp?c=se" title="Svenska" alt="Svenska"></a></div>
|
||||
</div></div>
|
||||
<div class="welcome"><h2>¡Bienvenido a I2P!</h2></div>
|
||||
<p>Si acabas de iniciar I2P, al observar el menú de la izquierda, deberías notar que los números al lado de "Active:" subirán en los próximos minutos y luego verás allí un Destino llamado "shared clients" (si no, <a href="#trouble">¡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ú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">¡mira abajo!</a>) <br>Apenas aparezca esto, puedes:</p>
|
||||
<ul>
|
||||
<li><b>visitar páginas I2P ("Eepsites")</b> - En I2P hay páginas web anónimas:
|
||||
Configura tu navegador web para usar el <b>proxy HTTP: 127.0.0.1 puerto 4444</b>, luego visita una página I2P:<br>
|
||||
|
@@ -161,8 +161,8 @@ class JobQueueRunner implements Runnable {
|
||||
if (_log.shouldLog(Log.CRIT))
|
||||
_log.log(Log.CRIT, "Error processing job [" + _currentJob.getName()
|
||||
+ "] on thread " + _id + ": " + t.getMessage(), t);
|
||||
if (_log.shouldLog(Log.ERROR))
|
||||
_log.error("The above job was enqueued by: ", _currentJob.getAddedBy());
|
||||
//if (_log.shouldLog(Log.ERROR))
|
||||
// _log.error("The above job was enqueued by: ", _currentJob.getAddedBy());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -18,7 +18,7 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 6;
|
||||
public final static long BUILD = 8;
|
||||
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
|
@@ -348,7 +348,7 @@ public class OutboundClientMessageOneShotJob extends JobImpl {
|
||||
}
|
||||
if (_log.shouldLog(Log.INFO))
|
||||
_log.info(getJobId() + ": Expired from cache - lease for " + _toString);
|
||||
_leaseCache.remove(_to);
|
||||
_leaseCache.remove(hashPair());
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,6 @@ import net.i2p.util.Log;
|
||||
*
|
||||
*/
|
||||
class FloodOnlySearchJob extends FloodSearchJob {
|
||||
protected volatile int _lookupsRemaining;
|
||||
private volatile boolean _dead;
|
||||
private long _created;
|
||||
private boolean _shouldProcessDSRM;
|
||||
|
@@ -135,7 +135,6 @@ public class PumpedTunnelGateway extends TunnelGateway {
|
||||
if (_log.shouldLog(Log.DEBUG))
|
||||
_log.debug("Time to add " + queueBuf.size() + " messages to " + toString() + ": " + (complete-startAdd)
|
||||
+ " delayed? " + delayedFlush + " remaining: " + remaining
|
||||
+ " prepare: " + (beforeLock-startAdd)
|
||||
+ " add: " + (afterAdded-beforeLock)
|
||||
+ " preprocess: " + (afterPreprocess-afterAdded)
|
||||
+ " expire: " + (afterExpire-afterPreprocess)
|
||||
|
@@ -127,8 +127,8 @@ class BuildRequestor {
|
||||
TunnelBuildMessage msg = createTunnelBuildMessage(ctx, pool, cfg, pairedTunnel, exec);
|
||||
long createTime = System.currentTimeMillis()-beforeCreate;
|
||||
if (msg == null) {
|
||||
if (log.shouldLog(Log.ERROR))
|
||||
log.error("Tunnel build failed, as we couldn't create the tunnel build message for " + cfg);
|
||||
if (log.shouldLog(Log.WARN))
|
||||
log.warn("Tunnel build failed, as we couldn't create the tunnel build message for " + cfg);
|
||||
exec.buildComplete(cfg, pool);
|
||||
return;
|
||||
}
|
||||
@@ -202,6 +202,7 @@ class BuildRequestor {
|
||||
* If the tunnel is short enough, and everybody in the tunnel, and the
|
||||
* OBEP or IBGW for the paired tunnel, all support the new variable-sized tunnel build message,
|
||||
* then use that, otherwise the old 8-entry version.
|
||||
* @return null on error
|
||||
*/
|
||||
private static TunnelBuildMessage createTunnelBuildMessage(RouterContext ctx, TunnelPool pool, PooledTunnelCreatorConfig cfg, TunnelInfo pairedTunnel, BuildExecutor exec) {
|
||||
Log log = ctx.logManager().getLog(BuildRequestor.class);
|
||||
@@ -275,8 +276,8 @@ class BuildRequestor {
|
||||
Hash peer = cfg.getPeer(hop);
|
||||
RouterInfo peerInfo = ctx.netDb().lookupRouterInfoLocally(peer);
|
||||
if (peerInfo == null) {
|
||||
if (log.shouldLog(Log.ERROR))
|
||||
log.error("Peer selected for hop " + i + "/" + hop + " was not found locally: "
|
||||
if (log.shouldLog(Log.WARN))
|
||||
log.warn("Peer selected for hop " + i + "/" + hop + " was not found locally: "
|
||||
+ peer.toBase64() + " for " + cfg);
|
||||
return null;
|
||||
} else {
|
||||
|
Reference in New Issue
Block a user