forked from I2P_Developers/i2p.i2p
Use for each when Iterator not needed
This commit is contained in:
@ -1667,10 +1667,8 @@ public class I2PTunnel extends EventDispatcherImpl implements Logging {
|
|||||||
*/
|
*/
|
||||||
void routerDisconnected() {
|
void routerDisconnected() {
|
||||||
_log.error(getPrefix() + "Router disconnected - firing notification events");
|
_log.error(getPrefix() + "Router disconnected - firing notification events");
|
||||||
for (Iterator<ConnectionEventListener> iter = listeners.iterator(); iter.hasNext();) {
|
for (ConnectionEventListener lsnr : listeners)
|
||||||
ConnectionEventListener lsnr = iter.next();
|
|
||||||
if (lsnr != null) lsnr.routerDisconnected();
|
if (lsnr != null) lsnr.routerDisconnected();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,7 +16,6 @@ import java.net.Socket;
|
|||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.net.SocketTimeoutException;
|
import java.net.SocketTimeoutException;
|
||||||
import java.security.GeneralSecurityException;
|
import java.security.GeneralSecurityException;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@ -320,8 +319,8 @@ public class I2PTunnelServer extends I2PTunnelTask implements Runnable {
|
|||||||
synchronized (lock) {
|
synchronized (lock) {
|
||||||
if (!forced && sockMgr.listSockets().size() != 0) {
|
if (!forced && sockMgr.listSockets().size() != 0) {
|
||||||
l.log("There are still active connections!");
|
l.log("There are still active connections!");
|
||||||
for (Iterator<I2PSocket> it = sockMgr.listSockets().iterator(); it.hasNext();) {
|
for (I2PSocket skt : sockMgr.listSockets()) {
|
||||||
l.log("->" + it.next());
|
l.log("->" + skt);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,6 @@ package net.i2p.router.web;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -139,8 +138,7 @@ public class ConfigClientsHelper extends HelperBase {
|
|||||||
buf.append("<tr><th align=\"right\">" + _("WebApp") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\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(_context);
|
Properties props = RouterConsoleRunner.webAppProperties(_context);
|
||||||
Set<String> keys = new TreeSet(props.keySet());
|
Set<String> keys = new TreeSet(props.keySet());
|
||||||
for (Iterator<String> iter = keys.iterator(); iter.hasNext(); ) {
|
for (String name : keys) {
|
||||||
String name = iter.next();
|
|
||||||
if (name.startsWith(RouterConsoleRunner.PREFIX) && name.endsWith(RouterConsoleRunner.ENABLED)) {
|
if (name.startsWith(RouterConsoleRunner.PREFIX) && name.endsWith(RouterConsoleRunner.ENABLED)) {
|
||||||
String app = name.substring(RouterConsoleRunner.PREFIX.length(), name.lastIndexOf(RouterConsoleRunner.ENABLED));
|
String app = name.substring(RouterConsoleRunner.PREFIX.length(), name.lastIndexOf(RouterConsoleRunner.ENABLED));
|
||||||
String val = props.getProperty(name);
|
String val = props.getProperty(name);
|
||||||
@ -165,8 +163,7 @@ public class ConfigClientsHelper extends HelperBase {
|
|||||||
buf.append("<tr><th align=\"right\">" + _("Plugin") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
|
buf.append("<tr><th align=\"right\">" + _("Plugin") + "</th><th>" + _("Run at Startup?") + "</th><th>" + _("Control") + "</th><th align=\"left\">" + _("Description") + "</th></tr>\n");
|
||||||
Properties props = PluginStarter.pluginProperties();
|
Properties props = PluginStarter.pluginProperties();
|
||||||
Set<String> keys = new TreeSet(props.keySet());
|
Set<String> keys = new TreeSet(props.keySet());
|
||||||
for (Iterator<String> iter = keys.iterator(); iter.hasNext(); ) {
|
for (String name : keys) {
|
||||||
String name = iter.next();
|
|
||||||
if (name.startsWith(PluginStarter.PREFIX) && name.endsWith(PluginStarter.ENABLED)) {
|
if (name.startsWith(PluginStarter.PREFIX) && name.endsWith(PluginStarter.ENABLED)) {
|
||||||
String app = name.substring(PluginStarter.PREFIX.length(), name.lastIndexOf(PluginStarter.ENABLED));
|
String app = name.substring(PluginStarter.PREFIX.length(), name.lastIndexOf(PluginStarter.ENABLED));
|
||||||
String val = props.getProperty(name);
|
String val = props.getProperty(name);
|
||||||
|
@ -4,7 +4,6 @@ import java.io.IOException;
|
|||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.text.DecimalFormat;
|
import java.text.DecimalFormat;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
@ -45,8 +44,7 @@ class ProfileOrganizerRenderer {
|
|||||||
Set<PeerProfile> order = new TreeSet<PeerProfile>(mode == 2 ? new HashComparator() : new ProfileComparator());
|
Set<PeerProfile> order = new TreeSet<PeerProfile>(mode == 2 ? new HashComparator() : new ProfileComparator());
|
||||||
int older = 0;
|
int older = 0;
|
||||||
int standard = 0;
|
int standard = 0;
|
||||||
for (Iterator<Hash> iter = peers.iterator(); iter.hasNext();) {
|
for (Hash peer : peers) {
|
||||||
Hash peer = iter.next();
|
|
||||||
if (_organizer.getUs().equals(peer)) continue;
|
if (_organizer.getUs().equals(peer)) continue;
|
||||||
PeerProfile prof = _organizer.getProfile(peer);
|
PeerProfile prof = _organizer.getProfile(peer);
|
||||||
if (mode == 2) {
|
if (mode == 2) {
|
||||||
@ -94,8 +92,7 @@ class ProfileOrganizerRenderer {
|
|||||||
buf.append("<th> </th>");
|
buf.append("<th> </th>");
|
||||||
buf.append("</tr>");
|
buf.append("</tr>");
|
||||||
int prevTier = 1;
|
int prevTier = 1;
|
||||||
for (Iterator<PeerProfile> iter = order.iterator(); iter.hasNext();) {
|
for (PeerProfile prof : order) {
|
||||||
PeerProfile prof = iter.next();
|
|
||||||
Hash peer = prof.getPeer();
|
Hash peer = prof.getPeer();
|
||||||
|
|
||||||
int tier = 0;
|
int tier = 0;
|
||||||
@ -217,8 +214,7 @@ class ProfileOrganizerRenderer {
|
|||||||
buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
|
buf.append("<th class=\"smallhead\">").append(_("1d Fail Rate")).append("</th>");
|
||||||
buf.append("</tr>");
|
buf.append("</tr>");
|
||||||
RateAverages ra = RateAverages.getTemp();
|
RateAverages ra = RateAverages.getTemp();
|
||||||
for (Iterator<PeerProfile> iter = order.iterator(); iter.hasNext();) {
|
for (PeerProfile prof : order) {
|
||||||
PeerProfile prof = iter.next();
|
|
||||||
Hash peer = prof.getPeer();
|
Hash peer = prof.getPeer();
|
||||||
|
|
||||||
buf.append("<tr><td align=\"center\" nowrap>");
|
buf.append("<tr><td align=\"center\" nowrap>");
|
||||||
|
@ -7,7 +7,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
@ -417,8 +416,7 @@ public class SummaryHelper extends HelperBase {
|
|||||||
Collections.sort(clients, new AlphaComparator());
|
Collections.sort(clients, new AlphaComparator());
|
||||||
buf.append("<table>");
|
buf.append("<table>");
|
||||||
|
|
||||||
for (Iterator<Destination> iter = clients.iterator(); iter.hasNext(); ) {
|
for (Destination client : clients) {
|
||||||
Destination client = iter.next();
|
|
||||||
String name = getName(client);
|
String name = getName(client);
|
||||||
Hash h = client.calculateHash();
|
Hash h = client.calculateHash();
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@ import java.nio.channels.SocketChannel;
|
|||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
|
|
||||||
@ -244,9 +243,9 @@ public class SAMBridge implements Runnable, ClientApp {
|
|||||||
FileOutputStream out = null;
|
FileOutputStream out = null;
|
||||||
try {
|
try {
|
||||||
out = new FileOutputStream(persistFilename);
|
out = new FileOutputStream(persistFilename);
|
||||||
for (Iterator<String> iter = nameToPrivKeys.keySet().iterator(); iter.hasNext(); ) {
|
for (Map.Entry<String, String> entry : nameToPrivKeys.entrySet()) {
|
||||||
String name = iter.next();
|
String name = entry.getKey();
|
||||||
String privKeys = nameToPrivKeys.get(name);
|
String privKeys = entry.getValue();
|
||||||
out.write(name.getBytes());
|
out.write(name.getBytes());
|
||||||
out.write('=');
|
out.write('=');
|
||||||
out.write(privKeys.getBytes());
|
out.write(privKeys.getBytes());
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package net.i2p.client.streaming;
|
package net.i2p.client.streaming;
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
|
||||||
@ -94,10 +93,8 @@ class MessageHandler implements I2PSessionMuxedListener {
|
|||||||
_log.warn("I2PSession disconnected");
|
_log.warn("I2PSession disconnected");
|
||||||
_manager.disconnectAllHard();
|
_manager.disconnectAllHard();
|
||||||
|
|
||||||
for (Iterator<I2PSocketManager.DisconnectListener> iter = _listeners.iterator(); iter.hasNext(); ) {
|
for (I2PSocketManager.DisconnectListener lsnr : _listeners)
|
||||||
I2PSocketManager.DisconnectListener lsnr = iter.next();
|
|
||||||
lsnr.sessionDisconnected();
|
lsnr.sessionDisconnected();
|
||||||
}
|
|
||||||
_listeners.clear();
|
_listeners.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,6 @@ import java.text.ParseException;
|
|||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -143,10 +142,10 @@ public class Mail {
|
|||||||
}
|
}
|
||||||
public static void appendRecipients( StringBuilder buf, ArrayList<String> recipients, String prefix )
|
public static void appendRecipients( StringBuilder buf, ArrayList<String> recipients, String prefix )
|
||||||
{
|
{
|
||||||
for( Iterator<String> it = recipients.iterator(); it.hasNext(); ) {
|
for( String recipient : recipients ) {
|
||||||
buf.append( prefix );
|
buf.append( prefix );
|
||||||
prefix ="\t";
|
prefix ="\t";
|
||||||
buf.append( it.next() );
|
buf.append( recipient );
|
||||||
buf.append( "\r\n" );
|
buf.append( "\r\n" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -541,14 +541,10 @@ public class TransientSessionKeyManager extends SessionKeyManager {
|
|||||||
if (old != null) {
|
if (old != null) {
|
||||||
// drop both old and tagSet tags
|
// drop both old and tagSet tags
|
||||||
synchronized (_inboundTagSets) {
|
synchronized (_inboundTagSets) {
|
||||||
for (Iterator<SessionTag> iter = old.getTags().iterator(); iter.hasNext(); ) {
|
for (SessionTag tag : old.getTags())
|
||||||
SessionTag tag = iter.next();
|
|
||||||
_inboundTagSets.remove(tag);
|
_inboundTagSets.remove(tag);
|
||||||
}
|
for (SessionTag tag : sessionTags)
|
||||||
for (Iterator<SessionTag> iter = sessionTags.iterator(); iter.hasNext(); ) {
|
|
||||||
SessionTag tag = iter.next();
|
|
||||||
_inboundTagSets.remove(tag);
|
_inboundTagSets.remove(tag);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_log.shouldLog(Log.WARN)) {
|
if (_log.shouldLog(Log.WARN)) {
|
||||||
@ -734,8 +730,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
|
|||||||
buf.append("<tr><td><b>Session key</b>: ").append(skey.toBase64()).append("</td>" +
|
buf.append("<tr><td><b>Session key</b>: ").append(skey.toBase64()).append("</td>" +
|
||||||
"<td><b># Sets:</b> ").append(sets.size()).append("</td></tr>" +
|
"<td><b># Sets:</b> ").append(sets.size()).append("</td></tr>" +
|
||||||
"<tr><td colspan=\"2\"><ul>");
|
"<tr><td colspan=\"2\"><ul>");
|
||||||
for (Iterator<TagSet> siter = sets.iterator(); siter.hasNext();) {
|
for (TagSet ts : sets) {
|
||||||
TagSet ts = siter.next();
|
|
||||||
int size = ts.getTags().size();
|
int size = ts.getTags().size();
|
||||||
total += size;
|
total += size;
|
||||||
buf.append("<li><b>ID: ").append(ts.getID());
|
buf.append("<li><b>ID: ").append(ts.getID());
|
||||||
@ -1050,8 +1045,7 @@ public class TransientSessionKeyManager extends SessionKeyManager {
|
|||||||
public long getLastExpirationDate() {
|
public long getLastExpirationDate() {
|
||||||
long last = 0;
|
long last = 0;
|
||||||
synchronized (_tagSets) {
|
synchronized (_tagSets) {
|
||||||
for (Iterator<TagSet> iter = _tagSets.iterator(); iter.hasNext();) {
|
for (TagSet set : _tagSets) {
|
||||||
TagSet set = iter.next();
|
|
||||||
if ( (set.getDate() > last) && (!set.getTags().isEmpty()) )
|
if ( (set.getDate() > last) && (!set.getTags().isEmpty()) )
|
||||||
last = set.getDate();
|
last = set.getDate();
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package net.i2p.stat;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
@ -63,10 +62,8 @@ public class StatManager {
|
|||||||
public StatLog getStatLog() { return _statLog; }
|
public StatLog getStatLog() { return _statLog; }
|
||||||
public void setStatLog(StatLog log) {
|
public void setStatLog(StatLog log) {
|
||||||
_statLog = log;
|
_statLog = log;
|
||||||
for (Iterator<RateStat> iter = _rateStats.values().iterator(); iter.hasNext(); ) {
|
for (RateStat rs : _rateStats.values())
|
||||||
RateStat rs = iter.next();
|
|
||||||
rs.setStatLog(log);
|
rs.setStatLog(log);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -168,8 +165,7 @@ public class StatManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Iterator<RateStat> iter = _rateStats.values().iterator(); iter.hasNext();) {
|
for (RateStat stat : _rateStats.values()) {
|
||||||
RateStat stat = iter.next();
|
|
||||||
if (stat != null) {
|
if (stat != null) {
|
||||||
stat.coalesceStats();
|
stat.coalesceStats();
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package net.i2p.util;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
@ -155,8 +154,7 @@ public class SimpleTimer {
|
|||||||
|
|
||||||
if ( (_events.size() != _eventTimes.size()) ) {
|
if ( (_events.size() != _eventTimes.size()) ) {
|
||||||
_log.error("Skewed events: " + _events.size() + " for " + _eventTimes.size());
|
_log.error("Skewed events: " + _events.size() + " for " + _eventTimes.size());
|
||||||
for (Iterator<TimedEvent> iter = _eventTimes.keySet().iterator(); iter.hasNext(); ) {
|
for (TimedEvent evt : _eventTimes.keySet()) {
|
||||||
TimedEvent evt = iter.next();
|
|
||||||
Long when = _eventTimes.get(evt);
|
Long when = _eventTimes.get(evt);
|
||||||
TimedEvent cur = _events.get(when);
|
TimedEvent cur = _events.get(when);
|
||||||
if (cur != evt) {
|
if (cur != evt) {
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package net.i2p.stat;
|
package net.i2p.stat;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
|
||||||
@ -22,8 +21,7 @@ public class SimpleStatDumper {
|
|||||||
|
|
||||||
private static void dumpFrequencies(I2PAppContext ctx, StringBuilder buf) {
|
private static void dumpFrequencies(I2PAppContext ctx, StringBuilder buf) {
|
||||||
Set<String> frequencies = new TreeSet<String>(ctx.statManager().getFrequencyNames());
|
Set<String> frequencies = new TreeSet<String>(ctx.statManager().getFrequencyNames());
|
||||||
for (Iterator<String> iter = frequencies.iterator(); iter.hasNext();) {
|
for (String name : frequencies) {
|
||||||
String name = iter.next();
|
|
||||||
FrequencyStat freq = ctx.statManager().getFrequency(name);
|
FrequencyStat freq = ctx.statManager().getFrequency(name);
|
||||||
buf.append('\n');
|
buf.append('\n');
|
||||||
buf.append(freq.getGroupName()).append('.').append(freq.getName()).append(": ")
|
buf.append(freq.getGroupName()).append('.').append(freq.getName()).append(": ")
|
||||||
@ -42,8 +40,7 @@ public class SimpleStatDumper {
|
|||||||
|
|
||||||
private static void dumpRates(I2PAppContext ctx, StringBuilder buf) {
|
private static void dumpRates(I2PAppContext ctx, StringBuilder buf) {
|
||||||
Set<String> rates = new TreeSet<String>(ctx.statManager().getRateNames());
|
Set<String> rates = new TreeSet<String>(ctx.statManager().getRateNames());
|
||||||
for (Iterator<String> iter = rates.iterator(); iter.hasNext();) {
|
for (String name : rates) {
|
||||||
String name = iter.next();
|
|
||||||
RateStat rate = ctx.statManager().getRate(name);
|
RateStat rate = ctx.statManager().getRate(name);
|
||||||
buf.append('\n');
|
buf.append('\n');
|
||||||
buf.append(rate.getGroupName()).append('.').append(rate.getName()).append(": ")
|
buf.append(rate.getGroupName()).append('.').append(rate.getName()).append(": ")
|
||||||
|
@ -137,8 +137,7 @@ public class Blocklist {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (Iterator<Hash> iter = _peerBlocklist.keySet().iterator(); iter.hasNext(); ) {
|
for (Hash peer : _peerBlocklist.keySet()) {
|
||||||
Hash peer = iter.next();
|
|
||||||
String reason;
|
String reason;
|
||||||
String comment = _peerBlocklist.get(peer);
|
String comment = _peerBlocklist.get(peer);
|
||||||
if (comment != null)
|
if (comment != null)
|
||||||
|
@ -12,7 +12,6 @@ import java.io.IOException;
|
|||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
@ -125,21 +124,15 @@ class ClientManager {
|
|||||||
_listener.stopListening();
|
_listener.stopListening();
|
||||||
Set<ClientConnectionRunner> runners = new HashSet<ClientConnectionRunner>();
|
Set<ClientConnectionRunner> runners = new HashSet<ClientConnectionRunner>();
|
||||||
synchronized (_runners) {
|
synchronized (_runners) {
|
||||||
for (Iterator<ClientConnectionRunner> iter = _runners.values().iterator(); iter.hasNext();) {
|
for (ClientConnectionRunner runner : _runners.values())
|
||||||
ClientConnectionRunner runner = iter.next();
|
|
||||||
runners.add(runner);
|
runners.add(runner);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
synchronized (_pendingRunners) {
|
synchronized (_pendingRunners) {
|
||||||
for (Iterator<ClientConnectionRunner> iter = _pendingRunners.iterator(); iter.hasNext();) {
|
for (ClientConnectionRunner runner : _pendingRunners)
|
||||||
ClientConnectionRunner runner = iter.next();
|
|
||||||
runners.add(runner);
|
runners.add(runner);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (Iterator<ClientConnectionRunner> iter = runners.iterator(); iter.hasNext(); ) {
|
for (ClientConnectionRunner runner : runners)
|
||||||
ClientConnectionRunner runner = iter.next();
|
|
||||||
runner.disconnectClient(msg, Log.WARN);
|
runner.disconnectClient(msg, Log.WARN);
|
||||||
}
|
|
||||||
_runnersByHash.clear();
|
_runnersByHash.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package net.i2p.router.networkdb.kademlia;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.i2p.data.Hash;
|
import net.i2p.data.Hash;
|
||||||
@ -216,8 +215,8 @@ class FloodOnlySearchJob extends FloodSearchJob {
|
|||||||
_log.info(getJobId() + ": Floodfill search for " + _key + " failed with " + timeRemaining + " remaining after " + time);
|
_log.info(getJobId() + ": Floodfill search for " + _key + " failed with " + timeRemaining + " remaining after " + time);
|
||||||
}
|
}
|
||||||
synchronized(_unheardFrom) {
|
synchronized(_unheardFrom) {
|
||||||
for (Iterator<Hash> iter = _unheardFrom.iterator(); iter.hasNext(); )
|
for (Hash h : _unheardFrom)
|
||||||
getContext().profileManager().dbLookupFailed(iter.next());
|
getContext().profileManager().dbLookupFailed(h);
|
||||||
}
|
}
|
||||||
_facade.complete(_key);
|
_facade.complete(_key);
|
||||||
getContext().statManager().addRateData("netDb.failedTime", time, 0);
|
getContext().statManager().addRateData("netDb.failedTime", time, 0);
|
||||||
|
@ -383,8 +383,8 @@ class IterativeSearchJob extends FloodSearchJob {
|
|||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
tries = _unheardFrom.size() + _failedPeers.size();
|
tries = _unheardFrom.size() + _failedPeers.size();
|
||||||
// blame the unheard-from (others already blamed in failed() above)
|
// blame the unheard-from (others already blamed in failed() above)
|
||||||
for (Iterator<Hash> iter = _unheardFrom.iterator(); iter.hasNext(); )
|
for (Hash h : _unheardFrom)
|
||||||
getContext().profileManager().dbLookupFailed(iter.next());
|
getContext().profileManager().dbLookupFailed(h);
|
||||||
}
|
}
|
||||||
long time = System.currentTimeMillis() - _created;
|
long time = System.currentTimeMillis() - _created;
|
||||||
if (_log.shouldLog(Log.INFO)) {
|
if (_log.shouldLog(Log.INFO)) {
|
||||||
|
@ -9,7 +9,6 @@ package net.i2p.router.networkdb.kademlia;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -157,8 +156,7 @@ class StoreJob extends JobImpl {
|
|||||||
//_state.addPending(closestHashes);
|
//_state.addPending(closestHashes);
|
||||||
if (_log.shouldLog(Log.INFO))
|
if (_log.shouldLog(Log.INFO))
|
||||||
_log.info(getJobId() + ": Continue sending key " + _state.getTarget() + " after " + _state.getAttempted().size() + " tries to " + closestHashes);
|
_log.info(getJobId() + ": Continue sending key " + _state.getTarget() + " after " + _state.getAttempted().size() + " tries to " + closestHashes);
|
||||||
for (Iterator<Hash> iter = closestHashes.iterator(); iter.hasNext(); ) {
|
for (Hash peer : closestHashes) {
|
||||||
Hash peer = iter.next();
|
|
||||||
DatabaseEntry ds = _facade.getDataStore().get(peer);
|
DatabaseEntry ds = _facade.getDataStore().get(peer);
|
||||||
if ( (ds == null) || !(ds.getType() == DatabaseEntry.KEY_TYPE_ROUTERINFO) ) {
|
if ( (ds == null) || !(ds.getType() == DatabaseEntry.KEY_TYPE_ROUTERINFO) ) {
|
||||||
if (_log.shouldLog(Log.INFO))
|
if (_log.shouldLog(Log.INFO))
|
||||||
|
@ -4,7 +4,6 @@ import java.util.Collection;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@ -124,8 +123,8 @@ class StoreState {
|
|||||||
public void addPending(Collection<Hash> pending) {
|
public void addPending(Collection<Hash> pending) {
|
||||||
synchronized (_pendingPeers) {
|
synchronized (_pendingPeers) {
|
||||||
_pendingPeers.addAll(pending);
|
_pendingPeers.addAll(pending);
|
||||||
for (Iterator<Hash> iter = pending.iterator(); iter.hasNext(); )
|
for (Hash peer : pending)
|
||||||
_pendingPeerTimes.put(iter.next(), Long.valueOf(_context.clock().now()));
|
_pendingPeerTimes.put(peer, Long.valueOf(_context.clock().now()));
|
||||||
}
|
}
|
||||||
synchronized (_attemptedPeers) {
|
synchronized (_attemptedPeers) {
|
||||||
_attemptedPeers.addAll(pending);
|
_attemptedPeers.addAll(pending);
|
||||||
@ -191,34 +190,26 @@ class StoreState {
|
|||||||
buf.append(" Attempted: ");
|
buf.append(" Attempted: ");
|
||||||
synchronized (_attemptedPeers) {
|
synchronized (_attemptedPeers) {
|
||||||
buf.append(_attemptedPeers.size()).append(' ');
|
buf.append(_attemptedPeers.size()).append(' ');
|
||||||
for (Iterator<Hash> iter = _attemptedPeers.iterator(); iter.hasNext(); ) {
|
for (Hash peer : _attemptedPeers)
|
||||||
Hash peer = iter.next();
|
|
||||||
buf.append(peer.toBase64()).append(" ");
|
buf.append(peer.toBase64()).append(" ");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
buf.append(" Pending: ");
|
buf.append(" Pending: ");
|
||||||
synchronized (_pendingPeers) {
|
synchronized (_pendingPeers) {
|
||||||
buf.append(_pendingPeers.size()).append(' ');
|
buf.append(_pendingPeers.size()).append(' ');
|
||||||
for (Iterator<Hash> iter = _pendingPeers.iterator(); iter.hasNext(); ) {
|
for (Hash peer : _pendingPeers)
|
||||||
Hash peer = iter.next();
|
|
||||||
buf.append(peer.toBase64()).append(" ");
|
buf.append(peer.toBase64()).append(" ");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
buf.append(" Failed: ");
|
buf.append(" Failed: ");
|
||||||
synchronized (_failedPeers) {
|
synchronized (_failedPeers) {
|
||||||
buf.append(_failedPeers.size()).append(' ');
|
buf.append(_failedPeers.size()).append(' ');
|
||||||
for (Iterator<Hash> iter = _failedPeers.iterator(); iter.hasNext(); ) {
|
for (Hash peer : _failedPeers)
|
||||||
Hash peer = iter.next();
|
|
||||||
buf.append(peer.toBase64()).append(" ");
|
buf.append(peer.toBase64()).append(" ");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
buf.append(" Successful: ");
|
buf.append(" Successful: ");
|
||||||
synchronized (_successfulPeers) {
|
synchronized (_successfulPeers) {
|
||||||
buf.append(_successfulPeers.size()).append(' ');
|
buf.append(_successfulPeers.size()).append(' ');
|
||||||
for (Iterator<Hash> iter = _successfulPeers.iterator(); iter.hasNext(); ) {
|
for (Hash peer : _successfulPeers)
|
||||||
Hash peer = iter.next();
|
|
||||||
buf.append(peer.toBase64()).append(" ");
|
buf.append(peer.toBase64()).append(" ");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/****
|
/****
|
||||||
buf.append(" Successful Exploratory: ");
|
buf.append(" Successful Exploratory: ");
|
||||||
|
@ -236,15 +236,13 @@ public class ProfileOrganizer {
|
|||||||
|
|
||||||
getReadLock();
|
getReadLock();
|
||||||
try {
|
try {
|
||||||
for (Iterator<PeerProfile> iter = _failingPeers.values().iterator(); iter.hasNext(); ) {
|
for (PeerProfile profile : _failingPeers.values()) {
|
||||||
PeerProfile profile = iter.next();
|
|
||||||
if (profile.getLastSendSuccessful() >= hideBefore)
|
if (profile.getLastSendSuccessful() >= hideBefore)
|
||||||
activePeers++;
|
activePeers++;
|
||||||
else if (profile.getLastHeardFrom() >= hideBefore)
|
else if (profile.getLastHeardFrom() >= hideBefore)
|
||||||
activePeers++;
|
activePeers++;
|
||||||
}
|
}
|
||||||
for (Iterator<PeerProfile> iter = _notFailingPeers.values().iterator(); iter.hasNext(); ) {
|
for (PeerProfile profile : _notFailingPeers.values()) {
|
||||||
PeerProfile profile = iter.next();
|
|
||||||
if (profile.getLastSendSuccessful() >= hideBefore)
|
if (profile.getLastSendSuccessful() >= hideBefore)
|
||||||
activePeers++;
|
activePeers++;
|
||||||
else if (profile.getLastHeardFrom() >= hideBefore)
|
else if (profile.getLastHeardFrom() >= hideBefore)
|
||||||
@ -539,8 +537,7 @@ public class ProfileOrganizer {
|
|||||||
if (matches.size() < howMany) {
|
if (matches.size() < howMany) {
|
||||||
getReadLock();
|
getReadLock();
|
||||||
try {
|
try {
|
||||||
for (Iterator<Hash> iter = _notFailingPeers.keySet().iterator(); iter.hasNext(); ) {
|
for (Hash peer : _notFailingPeers.keySet()) {
|
||||||
Hash peer = iter.next();
|
|
||||||
if (!_context.commSystem().isEstablished(peer))
|
if (!_context.commSystem().isEstablished(peer))
|
||||||
exclude.add(peer);
|
exclude.add(peer);
|
||||||
}
|
}
|
||||||
@ -567,8 +564,7 @@ public class ProfileOrganizer {
|
|||||||
Map<Hash, PeerProfile> activePeers = new HashMap<Hash, PeerProfile>();
|
Map<Hash, PeerProfile> activePeers = new HashMap<Hash, PeerProfile>();
|
||||||
getReadLock();
|
getReadLock();
|
||||||
try {
|
try {
|
||||||
for (Iterator<Map.Entry<Hash, PeerProfile>> iter = _notFailingPeers.entrySet().iterator(); iter.hasNext(); ) {
|
for (Map.Entry<Hash, PeerProfile> e : _notFailingPeers.entrySet()) {
|
||||||
Map.Entry<Hash, PeerProfile> e = iter.next();
|
|
||||||
if (_context.commSystem().isEstablished(e.getKey()))
|
if (_context.commSystem().isEstablished(e.getKey()))
|
||||||
activePeers.put(e.getKey(), e.getValue());
|
activePeers.put(e.getKey(), e.getValue());
|
||||||
}
|
}
|
||||||
@ -666,8 +662,7 @@ public class ProfileOrganizer {
|
|||||||
n = new ArrayList<Hash>(_notFailingPeers.keySet());
|
n = new ArrayList<Hash>(_notFailingPeers.keySet());
|
||||||
} finally { releaseReadLock(); }
|
} finally { releaseReadLock(); }
|
||||||
List<Hash> l = new ArrayList<Hash>(count / 4);
|
List<Hash> l = new ArrayList<Hash>(count / 4);
|
||||||
for (Iterator<Hash> iter = n.iterator(); iter.hasNext(); ) {
|
for (Hash peer : n) {
|
||||||
Hash peer = iter.next();
|
|
||||||
if (_context.commSystem().wasUnreachable(peer))
|
if (_context.commSystem().wasUnreachable(peer))
|
||||||
l.add(peer);
|
l.add(peer);
|
||||||
else {
|
else {
|
||||||
@ -717,8 +712,7 @@ public class ProfileOrganizer {
|
|||||||
long cutoff = _context.clock().now() - (20*1000);
|
long cutoff = _context.clock().now() - (20*1000);
|
||||||
int count = _notFailingPeers.size();
|
int count = _notFailingPeers.size();
|
||||||
List<Hash> l = new ArrayList<Hash>(count / 128);
|
List<Hash> l = new ArrayList<Hash>(count / 128);
|
||||||
for (Iterator<PeerProfile> iter = _notFailingPeers.values().iterator(); iter.hasNext(); ) {
|
for (PeerProfile prof : _notFailingPeers.values()) {
|
||||||
PeerProfile prof = iter.next();
|
|
||||||
if (prof.getTunnelHistory().getLastRejectedBandwidth() > cutoff)
|
if (prof.getTunnelHistory().getLastRejectedBandwidth() > cutoff)
|
||||||
l.add(prof.getPeer());
|
l.add(prof.getPeer());
|
||||||
}
|
}
|
||||||
@ -779,8 +773,7 @@ public class ProfileOrganizer {
|
|||||||
if (shouldCoalesce) {
|
if (shouldCoalesce) {
|
||||||
getReadLock();
|
getReadLock();
|
||||||
try {
|
try {
|
||||||
for (Iterator<PeerProfile> iter = _strictCapacityOrder.iterator(); iter.hasNext(); ) {
|
for (PeerProfile prof : _strictCapacityOrder) {
|
||||||
PeerProfile prof = iter.next();
|
|
||||||
if ( (expireOlderThan > 0) && (prof.getLastSendSuccessful() <= expireOlderThan) ) {
|
if ( (expireOlderThan > 0) && (prof.getLastSendSuccessful() <= expireOlderThan) ) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -887,8 +880,7 @@ public class ProfileOrganizer {
|
|||||||
if (numToPromote > 0) {
|
if (numToPromote > 0) {
|
||||||
if (_log.shouldLog(Log.INFO))
|
if (_log.shouldLog(Log.INFO))
|
||||||
_log.info("Need to explicitly promote " + numToPromote + " peers to the fast group");
|
_log.info("Need to explicitly promote " + numToPromote + " peers to the fast group");
|
||||||
for (Iterator<PeerProfile> iter = _strictCapacityOrder.iterator(); iter.hasNext(); ) {
|
for (PeerProfile cur : _strictCapacityOrder) {
|
||||||
PeerProfile cur = iter.next();
|
|
||||||
if ( (!_fastPeers.containsKey(cur.getPeer())) && (!cur.getIsFailing()) ) {
|
if ( (!_fastPeers.containsKey(cur.getPeer())) && (!cur.getIsFailing()) ) {
|
||||||
if (!isSelectable(cur.getPeer())) {
|
if (!isSelectable(cur.getPeer())) {
|
||||||
// skip peers we dont have in the netDb
|
// skip peers we dont have in the netDb
|
||||||
@ -990,8 +982,7 @@ public class ProfileOrganizer {
|
|||||||
int needToUnfail = MIN_NOT_FAILING_ACTIVE - notFailingActive;
|
int needToUnfail = MIN_NOT_FAILING_ACTIVE - notFailingActive;
|
||||||
if (needToUnfail > 0) {
|
if (needToUnfail > 0) {
|
||||||
int unfailed = 0;
|
int unfailed = 0;
|
||||||
for (Iterator<PeerProfile> iter = _strictCapacityOrder.iterator(); iter.hasNext(); ) {
|
for (PeerProfile best : _strictCapacityOrder) {
|
||||||
PeerProfile best = iter.next();
|
|
||||||
if ( (best.getIsActive()) && (best.getIsFailing()) ) {
|
if ( (best.getIsActive()) && (best.getIsFailing()) ) {
|
||||||
if (_log.shouldLog(Log.WARN))
|
if (_log.shouldLog(Log.WARN))
|
||||||
_log.warn("All peers were failing, so we have overridden the failing flag for one of the most reliable active peers (" + best.getPeer().toBase64() + ")");
|
_log.warn("All peers were failing, so we have overridden the failing flag for one of the most reliable active peers (" + best.getPeer().toBase64() + ")");
|
||||||
@ -1022,9 +1013,7 @@ public class ProfileOrganizer {
|
|||||||
double totalCapacity = 0;
|
double totalCapacity = 0;
|
||||||
double totalIntegration = 0;
|
double totalIntegration = 0;
|
||||||
Set<PeerProfile> reordered = new TreeSet<PeerProfile>(_comp);
|
Set<PeerProfile> reordered = new TreeSet<PeerProfile>(_comp);
|
||||||
for (Iterator<PeerProfile> iter = allPeers.iterator(); iter.hasNext(); ) {
|
for (PeerProfile profile : allPeers) {
|
||||||
PeerProfile profile = iter.next();
|
|
||||||
|
|
||||||
if (_us.equals(profile.getPeer())) continue;
|
if (_us.equals(profile.getPeer())) continue;
|
||||||
|
|
||||||
// only take into account active peers that aren't failing
|
// only take into account active peers that aren't failing
|
||||||
@ -1072,8 +1061,7 @@ public class ProfileOrganizer {
|
|||||||
double thresholdAtMinHighCap = 0;
|
double thresholdAtMinHighCap = 0;
|
||||||
double thresholdAtLowest = CapacityCalculator.GROWTH_FACTOR;
|
double thresholdAtLowest = CapacityCalculator.GROWTH_FACTOR;
|
||||||
int cur = 0;
|
int cur = 0;
|
||||||
for (Iterator<PeerProfile> iter = reordered.iterator(); iter.hasNext(); ) {
|
for (PeerProfile profile : reordered) {
|
||||||
PeerProfile profile = iter.next();
|
|
||||||
double val = profile.getCapacityValue();
|
double val = profile.getCapacityValue();
|
||||||
if (val > meanCapacity)
|
if (val > meanCapacity)
|
||||||
numExceedingMean++;
|
numExceedingMean++;
|
||||||
@ -1164,8 +1152,7 @@ public class ProfileOrganizer {
|
|||||||
private void locked_calculateSpeedThresholdMean(Set<PeerProfile> reordered) {
|
private void locked_calculateSpeedThresholdMean(Set<PeerProfile> reordered) {
|
||||||
double total = 0;
|
double total = 0;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (Iterator<PeerProfile> iter = reordered.iterator(); iter.hasNext(); ) {
|
for (PeerProfile profile : reordered) {
|
||||||
PeerProfile profile = iter.next();
|
|
||||||
if (profile.getCapacityValue() >= _thresholdCapacityValue) {
|
if (profile.getCapacityValue() >= _thresholdCapacityValue) {
|
||||||
// duplicates being clobbered is fine by us
|
// duplicates being clobbered is fine by us
|
||||||
total += profile.getSpeedValue();
|
total += profile.getSpeedValue();
|
||||||
@ -1524,8 +1511,7 @@ public class ProfileOrganizer {
|
|||||||
DecimalFormat fmt = new DecimalFormat("0,000.0");
|
DecimalFormat fmt = new DecimalFormat("0,000.0");
|
||||||
fmt.setPositivePrefix("+");
|
fmt.setPositivePrefix("+");
|
||||||
|
|
||||||
for (Iterator<Hash> iter = organizer.selectAllPeers().iterator(); iter.hasNext(); ) {
|
for (Hash peer : organizer.selectAllPeers()) {
|
||||||
Hash peer = iter.next();
|
|
||||||
PeerProfile profile = organizer.getProfile(peer);
|
PeerProfile profile = organizer.getProfile(peer);
|
||||||
if (!profile.getIsActive()) {
|
if (!profile.getIsActive()) {
|
||||||
System.out.println("Peer " + profile.getPeer().toBase64().substring(0,4)
|
System.out.println("Peer " + profile.getPeer().toBase64().substring(0,4)
|
||||||
|
@ -12,7 +12,6 @@ import java.io.IOException;
|
|||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
@ -233,8 +232,8 @@ public class CommSystemFacadeImpl extends CommSystemFacade {
|
|||||||
*/
|
*/
|
||||||
private class QueueAll implements SimpleTimer.TimedEvent {
|
private class QueueAll implements SimpleTimer.TimedEvent {
|
||||||
public void timeReached() {
|
public void timeReached() {
|
||||||
for (Iterator<Hash> iter = _context.netDb().getAllRouters().iterator(); iter.hasNext(); ) {
|
for (Hash h : _context.netDb().getAllRouters()) {
|
||||||
RouterInfo ri = _context.netDb().lookupRouterInfoLocally(iter.next());
|
RouterInfo ri = _context.netDb().lookupRouterInfoLocally(h);
|
||||||
if (ri == null)
|
if (ri == null)
|
||||||
continue;
|
continue;
|
||||||
byte[] ip = getIP(ri);
|
byte[] ip = getIP(ri);
|
||||||
|
@ -2114,8 +2114,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
|||||||
public int countActivePeers() {
|
public int countActivePeers() {
|
||||||
long now = _context.clock().now();
|
long now = _context.clock().now();
|
||||||
int active = 0;
|
int active = 0;
|
||||||
for (Iterator<PeerState> iter = _peersByIdent.values().iterator(); iter.hasNext(); ) {
|
for (PeerState peer : _peersByIdent.values()) {
|
||||||
PeerState peer = iter.next();
|
|
||||||
if (now-peer.getLastReceiveTime() <= 5*60*1000)
|
if (now-peer.getLastReceiveTime() <= 5*60*1000)
|
||||||
active++;
|
active++;
|
||||||
}
|
}
|
||||||
@ -2126,8 +2125,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority
|
|||||||
public int countActiveSendPeers() {
|
public int countActiveSendPeers() {
|
||||||
long now = _context.clock().now();
|
long now = _context.clock().now();
|
||||||
int active = 0;
|
int active = 0;
|
||||||
for (Iterator<PeerState> iter = _peersByIdent.values().iterator(); iter.hasNext(); ) {
|
for (PeerState peer : _peersByIdent.values()) {
|
||||||
PeerState peer = iter.next();
|
|
||||||
if (now-peer.getLastSendFullyTime() <= 1*60*1000)
|
if (now-peer.getLastSendFullyTime() <= 1*60*1000)
|
||||||
active++;
|
active++;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user